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. git 的指定参考教程

    https://www.runoob.com/git/git-create-repository.html

  2. 深入浅出Mybatis系列(六)---配置详解之typeAliases别名

    本篇继续讲剩下的配置节点之一:typeAliases. typeAliases节点主要用来设置别名,其实这是挺好用的一个功能, 通过配置别名,我们不用再指定完整的包名,并且还能取别名. 例如: 我们在 ...

  3. Int 2e 与 Sysenter区别

    参考:张银奎<软件调试>第八章 Int 2e: Windows将2e号向量专门用作系统调用,在启动早起初始化中断描述表时便注册好了适合的服务例程.因此当NtDll中的NtReadFile发 ...

  4. 多线程-synchorized

    synchorized锁升级过程: synchorized锁升级过程中只能升级不能降级,起初是JDK早期(1.5之前),是重量级锁,是找操作系统申请OS锁.所谓重量级锁是说获取锁和释放锁都需要经过操作 ...

  5. MySQL-SQL基础-子查询

    #子查询-某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就要用到子查询.用于子查询的关键字主要包括: in.not in.=.!=.exists.not exist ...

  6. JavaScript——数组——slice方法

    JavaScript--数组--slice方法 JavaScript中的slice方法类似于字符串的substring方法,作用是对数组进行截取. slice方法有两个参数,indexStart 和 ...

  7. 基于Linux系统的MariaDB数据库的安装配置

    数据库是指长期存储在计算机内.有组织的和可共享的数据集合.表是数据库存储数据的基本单位,一个表由若干个字段组成 MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 G ...

  8. 微信小游戏 Three.js UI 2D text 简单方案

    在微信小游戏中使用 THREE.js 引擎,没有合适的 UI 库可用,只能自己动手.图片啥的都还好,text 不好弄.text 要计算 width 和 height,不然事件响应范围不对. funct ...

  9. vue 打开新窗口进行打印

    父文件 let { href } = this.$router.resolve({ path: ' 自己配置本地路由,不需要动态路由 ', query: 个人建议传一整个对象 }) window.op ...

  10. Java 登录模块设计

    登录流程 前端登录传输用户名和md5加密后的密码 后端对密码在进行md5加密,或者使用md5加密的密码 + id 进行盐加密,增加密码被破解的难度. 登录成功后,这里分成单体,或者分布式的情况 单体 ...