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. asp.net MVC 数据的验证

    join 操作

  2. ConcurrentModificationException异常原因和解决方法

    一.ConcurrentModificationException异常出现的原因 先看下面这段代码: public class Test { public static void main(Strin ...

  3. Flink与Strom两个框架的对比分析

    一.Flink与Storm两个框架的对比 二.Flink 的特性 1.高吞吐.低延迟.高性能 2.支持带事件的窗口(window) 操作:time.count.session.data-driven ...

  4. 【JavasScript】折腾一个基础到不能再基础的顺滑抽奖页面

    前言 事情是这样的,作为一个意志力极低的人,最近一直在找寻提高意志力的方法. 然后决定试一试所谓的"建立奖励机制",也就是说,完成一项意志力挑战后给自己一些奖励(具体操作方法不在这 ...

  5. NX二次开发-使用NXOPEN C++向导模板做二次开发

    版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...

  6. 基于Linux系统的网络服务——高速缓存DNS及企业级域名解析服务

    1.DNS域名系统 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数 ...

  7. H5、C3基础知识笔记

    HTML5 本文内容参考于"HTML5|W3scool"教程 简介 是最新的 HTML 标准,拥有新的语义.图形以及多媒体元素 提供了新的 API 简化了 web 应用程序的搭建 ...

  8. 并发编程之:JUC并发控制工具

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 在上一期我们讲了Thread.join()方法和CountDownLatch,这两者都可以做到等待一个线程执行完毕之后当前线程继续执行,并且Count ...

  9. Python - 面向对象编程 - 实战(4)

    需求:士兵突进 士兵许三多有一把 AK47 士兵可以开火 枪能够发射子弹 枪装填子弹,可以增加子弹数量 需求分析 很明显有两个类:士兵类,枪类 AK47 是枪名,是枪类的属性,每把枪都有子弹数,所以子 ...

  10. Python - 面向对象编程 - 实战(5)

    前言 主要是针对静态方法.类方法.实例方法.类属性.实例属性的混合实战 需求 设计一个 Game 类 属性 定义一个类属性 top_score 记录游戏的历史最高分,这个属性很明显只跟游戏有关,跟实例 ...