Kubernetes集群(RKE)安装ArgoCD排坑

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排坑的更多相关文章
- kubernetes 集群的安装部署
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 首先kubernetes得官方文档我自己看着很乱,信息很少, ...
- Kubernetes集群的安装部署
此文参照https://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html,并根据实操过程略作修改. 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作 ...
- 二,kubernetes集群的安装初始化
目录 部署 集群架构示意图 部署环境 kubernetes集群部署步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 设置docker和kubelet为自启动(nod ...
- 在Kubernetes集群里安装微服务DevOps平台fabric8
转载于https://blog.csdn.net/wzp1986/article/details/72128063?utm_source=itdadao&utm_medium=referral ...
- Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装
首先说一下我的环境, 我是在windows 10 上面建了一个ubuntu18的虚拟机,同时由于某些原因 不受网络限制, 所以安装比较顺利. Install 1.安装并启用 Docker sudo ...
- 在Kubernetes集群中安装Helm及证书认证
安装Kubernetes 测试环境使用kubeadm安装kubernetes v1.6.3版本, 安装过程略过. 为Helm创建客户端认证 客户端认证是为了能够使用helm命令行调用Helm的服务端T ...
- kubernetes集群的安装异常汇---docker的驱动引擎
异常[kubelet cgroup driver:cgroupfs跟docker cgroup driver:systemd不一致] 异常描述 error: failed to run Kubelet ...
- Ubuntu下搭建Kubernetes集群(1)--安装docker
可以使用物理机,也可以使用虚拟机. 首先参考https://docs.docker.com/install/linux/docker-ce/ubuntu/ 官方文档学会安装docker. 1.首先移除 ...
- 安装Kubernetes集群时遇到的问题及解决方法
在搭建Kubernetes集群时遇到一些问题,记录在这里. 搭建过程在另一篇文章:VirtualBox上使用kubeadm安装Kubernetes集群 1. 虚拟机安装完CentOS7登录时遇到war ...
随机推荐
- WPF学习笔记二 依赖属性实现原理及性能分析
在这里讨论依赖属性实现原理,目的只是学习WPF是怎么设计依赖属性的,同时更好的使用依赖属性. 首先我们来思考一个简单的问题:我们希望能验证属性的值是否有效,属性变更时进行自己的处理.回顾一下.net的 ...
- Spring中常用重要的接口
Spring (ApplicationContext 初始化Bean的方法 refresh()) public void refresh() throws BeansException, Illega ...
- 初识cookie
package day01.cookies; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEn ...
- 神舟G7-CT7NK 安装tensorflow-gpu
参考https://www.cnblogs.com/xbit/p/9768238.html 直接安装,运行keras mnist数字识别报错: Could not create cudnn handl ...
- java对象的引用级别
解释 在java中也有引用的概念,其实就可以认为是变量.标题中的引用级别是指变量与对象之前的引用级别.java中分为4种,按引用强弱关系排序分别是:强引用.软引用.弱引用.虚引用. 强引用(Stron ...
- 分布式协调组件Zookeeper之 选举机制与ZAB协议
Zookeeper简介: Zookeeper是什么: Zookeeper 是⼀个分布式协调服务的开源框架. 主要⽤来解决分布式集群中应⽤系统的⼀致性问题, 例如怎样避免同时操作同⼀数据造成脏读的问题. ...
- 通过 layout 探索 kratos 运行原理
创建项目 首先需要安装好对应的依赖环境,以及工具: go 下载 protoc go install google.golang.org/protobuf/cmd/protoc-gen-go@lates ...
- 使用 Dockerfile 自定义 Nginx 镜像
一般来说,自定义Nginx只需要把静态文件放到镜像里就可以了,不需要重写 CMD 与 ENTRYPOINT.但是,如果的确需要在 Nginx 启动前执行一些操作,就需要重写 CMD 了,如果写成下边就 ...
- Linux - yum 安装软件时被 PackageKit 锁定
问题描述 yum 安装软件的时候报错 sudo yum install netease-cloud-music 已加载插件:fastestmirror, langpacks /var/run/yum. ...
- 网络协议之TCP和UDP
TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本.最广泛的协议.它定义了计 ...