Photo by Pixabay from Pexels

Argo CD是一个声明式的,基于Kubernetes的GitOps持续交付工具。更多的细节参考 ArgoCD官网 的说明,这里记录了一些实践过程中的踩坑问题。

1. 安装ArgoCD

首先准备一个K8S集群,然后从ArgoCD官网上下载资源声明:

https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

这里无关网络是否通畅,而是可能需要更改一点内容,确保ArgoCD部署的时区和你的K8S集群是相同的时区设置,否则可能会导致Argo CD不可用。如果K8S集群是UTC时区可以略过这一步。

例如我这里的K8S是CST时区,需要在上面下载的yaml文件里改写Deployment的环境变量,找到 argocd-server 的Deployment,然后在容器模板部分制定时区的环境变量:

env:
- name: TZ
value: "Asia/Shanghai"

另外如果等了很长时间也无法成功拉取镜像可以尝试从云上服务器拉取镜像然后打包下载到本地,同时将ArgoCD yaml文件中的镜像拉取策略从Always改成IfNotPresent:imagePullPolicy: Always -> imagePullPolicy: IfNotPresent

启动完成之后通过Ingress或者NodePort Service暴露ArgoCD Server的端口即可。使用如下命令可以获得admin 用户的初始密码:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo

2.Rancher集群的坑

如果你使用的是Rancher集群的话大概率会遇到这样的一个坑,按照官方的提示使用argocd客户端添加集群会提示无法添加:

[landscape@centos-7 ~]$ ls
argocd argocd.yaml
[landscape@centos-7 ~]$ ./argocd login 192.168.31.136:30080
WARNING: server certificate had error: x509: cannot validate certificate for 192.168.31.136 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password:
'admin:login' logged in successfully
Context '192.168.31.136:30080' updated
[landscape@centos-7 ~]$ kubectl config get-contexts -o name
landscape
landscape-centos-7
[landscape@centos-7 ~]$ argocd cluster add landscape
-bash: argocd: 未找到命令
[landscape@centos-7 ~]$ ./argocd cluster add landscape
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `landscape` with full cluster level admin privileges. Do you want to continue [y/N]? y
INFO[0002] ServiceAccount "argocd-manager" created in namespace "kube-system"
INFO[0002] ClusterRole "argocd-manager-role" created
INFO[0002] ClusterRoleBinding "argocd-manager-role-binding" created
FATA[0003] rpc error: code = Unauthenticated desc = the server has asked for the client to provide credentials

出现这种情况是因为默认情况下,Rancher提供的kubeconfig文件将Rancher Server 端点指定为集群API Server端点。以此让Rancher充当身份验证代理,验证用户身份,然后将请求代理到下游集群。

这种方式相对于让客户端直接与下游K8S集群API端点通信,确实在某些方面存在优势。例如为Rancher管理下的所有集群提供了高可用的Kubernetes API端点,运维团队无需为每个集群的API服务器维护故障转移/负载平衡机制。

这种保护机制也导致Rancher下的K8S集群不能很好的与argocd-cli这样的客户端工具交互,因为通过Rancher Server端点需要使用Rancher API令牌而不是K8S服务帐户令牌,但argocd命令行客户端不允许用户指定预先存在的API凭据或自定义的kubeconfig。

不过ArgoCD实际上是与 K8S CRD交互,我们可以利用这一特性绕过argocd命令行来添加Rancher集群,需要做的只是在与argocd相同的命名空间下添加一个Secret而已,以我在虚拟机内的Rancher集群来举例:

apiVersion: v1
kind: Secret
metadata:
namespace: argocd
name: mycluster-argocd-secret
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
name: mycluster.com
server: "你的Rancher Server信息"
config: |
{
"bearerToken": "你的API Key bearerToken",
"tlsClientConfig": {
"insecure": false,
"caData": "你的Rancher集群 certificate-authority-data 信息"
}
}

这里需要更改的只有三处:

  • server :rancher集群的Kubeconfig中复制
  • caData:rancher集群的Kubeconfig中复制
  • bearerToken:创建API Key时获得

以下是在 https://RancherAddress/apikeys 页面创建API Key的截图,创建完成之后就可以复制bearerToken了

把写好的Secret添加到ArgoCD所处的命名空间后再查看ArgoCD页面,会发现此时K8S集群已经成功添加:

现在可以开始使用ArgoCD了,尝试一下部署应用吧

后面还有一些小坑,例如更改密码和admin用户的API Token权限问题,不过看看文档也就过去了。


参考内容:

https://loadbalancing.se/2021/03/22/argocd-behind-istio-on-rancher/

https://gist.github.com/janeczku/b16154194f7f03f772645303af8e9f80

Kubernetes集群(RKE)安装ArgoCD排坑的更多相关文章

  1. kubernetes 集群的安装部署

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 首先kubernetes得官方文档我自己看着很乱,信息很少, ...

  2. Kubernetes集群的安装部署

    此文参照https://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html,并根据实操过程略作修改. 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作 ...

  3. 二,kubernetes集群的安装初始化

    目录 部署 集群架构示意图 部署环境 kubernetes集群部署步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 设置docker和kubelet为自启动(nod ...

  4. 在Kubernetes集群里安装微服务DevOps平台fabric8

    转载于https://blog.csdn.net/wzp1986/article/details/72128063?utm_source=itdadao&utm_medium=referral ...

  5. Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装

    首先说一下我的环境, 我是在windows 10 上面建了一个ubuntu18的虚拟机,同时由于某些原因 不受网络限制, 所以安装比较顺利. Install 1.安装并启用 Docker  sudo ...

  6. 在Kubernetes集群中安装Helm及证书认证

    安装Kubernetes 测试环境使用kubeadm安装kubernetes v1.6.3版本, 安装过程略过. 为Helm创建客户端认证 客户端认证是为了能够使用helm命令行调用Helm的服务端T ...

  7. kubernetes集群的安装异常汇---docker的驱动引擎

    异常[kubelet cgroup driver:cgroupfs跟docker cgroup driver:systemd不一致] 异常描述 error: failed to run Kubelet ...

  8. Ubuntu下搭建Kubernetes集群(1)--安装docker

    可以使用物理机,也可以使用虚拟机. 首先参考https://docs.docker.com/install/linux/docker-ce/ubuntu/ 官方文档学会安装docker. 1.首先移除 ...

  9. 安装Kubernetes集群时遇到的问题及解决方法

    在搭建Kubernetes集群时遇到一些问题,记录在这里. 搭建过程在另一篇文章:VirtualBox上使用kubeadm安装Kubernetes集群 1. 虚拟机安装完CentOS7登录时遇到war ...

随机推荐

  1. 【转】CAP定理的含义

    转自:https://blog.csdn.net/pengjunlee/article/details/86517935 1998年,加州大学的计算机科学家 Eric Brewer 提出了分布式系统的 ...

  2. 深入浅出Mybatis系列(三)---配置简介(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(二)---Mybatis入门>写了一个Demo简单体现了一下Mybatis的流程.本次,将简单介绍一下Mybatis的配置文件: 上次例子中,我们以  ...

  3. hive表导出到mysql报错

    Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject hadoop@hado ...

  4. Spark入门:Spark运行架构(Python版)

    此文为个人学习笔记如需系统学习请访问http://dblab.xmu.edu.cn/blog/1709-2/ 基本概念 *  RDD:是弹性分布式数据集(Resilient Distributed ...

  5. Javascript - Vue - vuex

    vuex 这是一个与vue配套的公共数据管理工具,可以将一些需要共享的数据保存到vuex中,以此方便项目中的任何组件都可以从vuex中得到共享数据.cnpm i vuex -S 装包 读取数据 //在 ...

  6. JavaWeb学习总结—Session

    转载自:https://www.cnblogs.com/xdp-gacl/p/3855702.html 一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(sess ...

  7. IDEA 创建Maven Web工程

    一.Maven环境搭建 二.Maven常用命令 mvn clean 清除生成的target文件 mvn install 生成target文件 mvn clean install 相当于先删除targe ...

  8. 理解ASP.NET Core - [02] Middleware

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 中间件 先借用微软官方文档的一张图: 可以看到,中间件实际上是一种配置在HTTP请求管道中,用 ...

  9. cmd(命令行)超好用的技巧,很不错的打开方式

    超快速打开管理cmd widows + x 按a 直接打开文件位置,在地址栏输入cmd 地址----直接cmd打开到所在文件位置 ex:cmd D:\work cd ../../../ 返回上几层的方 ...

  10. MySQL(一)——入门

    一.安装 二.配置环境变量 https://www.cnblogs.com/wzk153/category/1934516.html https://www.cnblogs.com/wzk153/ca ...