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证书的轮换(生产环境下,风险请自行评估)
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
本文标题:ArgoCD 部署流水账
本文连接:https://blog.dextercai.com/archives/200.html
除另行说明,本站文字内容采用创作共用版权 CC-BY-NC-ND 4.0 许可协议,版权归本人所有。
除另行说明,本站图片内容版权归本人所有,任何形式的使用需提前联系。