MENU

ArgoCD 部署流水账

September 5, 2023 • 学习,折腾

argocd-2.png

ArgoCD是一款基于GitOps理念的持续交付工具,可以实现对Kubernetes应用的部署、升级和回滚等操作。本文将介绍部署ArgoCD的实践过程。

请注意,ArgoCD可以直接操作当前ArgoCD所在的集群,也可以接入控制其他集群。

安装ArgoCD

安装ArgoCD的过程可以使用Helm Chart进行自动化安装,或者通过Kustomize等工具进行手动部署。

快速安装

sudo kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

// 记得提前创建argocd namespace

使用Helm Chart进行安装

需要添加ArgoCD的Helm Chart仓库:

helm repo add argo <https://argoproj.github.io/argo-helm>

使用Helm进行安装:

helm install argo argo/argo-cd

可以通过以下命令查看ArgoCD的IP地址及端口号:

kubectl get svc argo-cd-server -n argocd

使用Kustomize进行安装

使用Kustomize进行ArgoCD的手动安装,需要下载ArgoCD的manifests文件,然后进行修改和部署。

需要下载ArgoCD的manifests文件:

git clone <https://github.com/argoproj/argo-cd.git> && cd argo-cd/manifests

修改argocd-install.yaml文件中的以下几个参数:

  • argocd-server.service.type:指定ArgoCD的Service类型,可以是ClusterIP或者LoadBalancer。
  • argocd-server.ingress.enabled:是否启用Ingress。
  • argocd-server.ingress.hosts:Ingress的Host地址。

修改完成后,可以使用Kustomize进行部署:

kustomize build . | kubectl apply -f -

部署完成后,可以通过以下命令查看ArgoCD的IP地址及端口号:

kubectl get svc argocd-server -n argocd

kubectl -n argocd get svc

其他可能的操作

集群部署下可能希望调整服务暴露方式。按需调整

kubectl patch svc argocd-server -p '{"spec": {"type": "NodePort"}}' -n argocd
kubectl patch svc argocd-server -p '{"spec": {"type": "LoadBalancer"}}' -n argocd 

将K3s接入到ArgoCD

将K3s集群接入到ArgoCD中,以实现对应用的部署、升级和回滚等操作。

获取ArgoCD登录密码

在安装ArgoCD时,会生成一个默认的用户名和密码。

可以使用以下命令获取ArgoCD的登录密码,用户名默认admin:

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

创建K3s集群的Namespace(可选,被控集群上操作)

在ArgoCD中,每个Kubernetes集群都需要有一个对应的Namespace。

因此需要在K3s集群中创建一个Namespace,用于存储ArgoCD的相关资源。

kubectl create namespace argocd-k3s

ArgoCD CLI 登录

argocd login 127.0.0.1:$port

添加K3s集群到ArgoCD(控制器端操作)

argocd cluster add k3s-cluster --name k3s --kubeconfig <path-to-kubeconfig> --insecure --namespace argocd-k3s

其中,k3s-cluster是ArcoCD中集群的标识符,k3s是集群的名称,<path-to-kubeconfig>是K3s集群的kubeconfig文件路径,--insecure参数表示不验证服务端证书。

验证集群是否成功接入

使用以下命令,验证K3s集群是否成功接入到ArgoCD中:

argocd cluster list

如果返回的结果中包含k3s-cluster,则表示集群已经成功接入。

x509 证书无效问题

Error while proxying request: x509: certificate is valid for xxx
Unable to connect to the server: x509: certificate is valid for xxx

ArgoCD可以接入多个集群,仅充当控制器的角色。在实际使用时,我期望内网的一个ArgoCD实例能同时控制线上和内网的两个K3s集群。而步骤一的快速安装,K3s生成的默认证书并不信任(通常是非经典网络模式下)公网IP。一种方式是通过K3s安装时传入的环境变量来实现证书信任IP的扩充,但这并不友好。

可以用这个方法来实现简单K3s证书的轮换(生产环境下,风险请自行评估)

k3s-kubeconfig.png

sudo vim /etc/systemd/system/k3s.service

改为(可以传入多个IP)

ExecStart=/usr/local/bin/k3s \
    server \
    '--tls-san' \
    'xxx.xxx.xxx.xxx' \

# 在其中一个节点上执行
k3s kubectl --insecure-skip-tls-verify=true delete secret k3s-serving -n kube-system

# 在每个节点上执行
rm -rf /var/lib/rancher/k3s/server/tls/dynamic-cert.json
systemctl restart k3s

多个K3s集群接入的KubeConfig获取问题

sudo cat /etc/rancher/k3s/k3s.yaml

注意修改cluster.server

Last Modified: September 6, 2023
Archives QR Code
QR Code for this page
Tipping QR Code