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. C语言之----面向对象的方法实现链表的操作

    1 /* 2 * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化 3 * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法 4 * 其他的程序 ...

  2. new和delete关键字

    new关键字创建出来的对象位于什么地方?很明显嘛,new关键字创建出来的对象一定位于堆空间,这种说法一定正确吗?本篇博客帮你揭开其神秘的面纱. 被忽略的事实new/delete的本质是C++预定义的操 ...

  3. 二、vue组件化开发(轻松入门vue)

    轻松入门vue系列 Vue组件化开发 五.组件化开发 1. 组件注册 组件命名规范 组件注册注意事项 全局组件注册 局部组件注册 2. Vue调试工具下载 3. 组件间数据交互 父组件向子组件传值 p ...

  4. shiro(二)

    public class AuthorizerTest { @Test public void testIsPermitted() { login("classpath:shiro-auth ...

  5. EL表达式学习(一)

    一.初次接触EL表达式: <%@ page language="java" import="java.util.*" pageEncoding=" ...

  6. DeltaLake数据湖解决方案

    Delta Lake 是DataBricks公司推出的一种数据湖解决方案,Delta为该方案的核心组件.围绕数据流走向(数据入湖从流入数据湖.数据组织管理.数据查询到流出数据湖)推出了一系列功能特性, ...

  7. final 关键字,你想知道的都在这里

    哈喽,大家好,我是指北君. 介绍完 native.static 关键字后,指北君马不停蹄,接着为大家介绍另一个常用的关键字--final. 对于Java中的 final 关键字,我们首先可以从字面意思 ...

  8. go GC垃圾回收原理

    目录 1.前言 2. 垃圾回收算法 3. Golang垃圾回收 3.1 垃圾回收原理 3.2 内存标记(Mark) 3.3 三色标记 3.4 Stop The World 4. 垃圾回收优化 4.1 ...

  9. java一些工具类

    import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java. ...

  10. Servlet监听器详解及举例

    监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器原理 监听原理 1.存在事件源 ...