背景
在日常使用argocd时,有比较多项目内容是放在内部的git仓库,使用过程中遇到了一个痛点,每次要新增一个应用在部署前都需要先在argocd里面先把这个仓库地址和凭证信息添加到Repositories, 非常麻烦。
好在argocd考虑到了这种场景,支持使用凭证模版,如果应用仓库的地址能匹配上,会自动使用已添加的凭证模版来连接仓库。
比如我们添加了一个仓库凭证记录的地址是ssh://git@gitlab.mydomain.com:2222, 那后续部署应用(仓库ssh://git@gitlab.mydomain.com:2222/group1/repo1.git)部署时会自动匹配到前面的仓库凭证。
下面我通过一个完整流程给大家展示一下使用SSH凭证模版来部署应用的流程
前提步骤
一、生成用于argocd部署使用的ssh key
ssh-keygen -f /tmp/id_rsa.argocd
二、把公钥信息记录到gitlab用于argocd读取的账号
点击gitlab右上角进入用户信息配置,在SSH KEYS页面添加前面生成公钥
ArgoCD SSH凭证模版配置流程
一、安装argocd cli
参考文档安装argocd提供的命令行工具, mac系统可通过brew install argocd快速安装。
二、登录argocd
$ argocd login argocd.10.1.250.0.nip.io --insecure --username admin --password yourpassword --grpc-web
'admin:login' logged in successfully
Context 'argocd.10.1.250.0.nip.io' updated
三、记录gitlab的host key
这一步很重要,不然应用会在部署过程中报错UnknowHost xxxx
ssh-keyscan -p 2222 gitlab.mydomain.com | argocd cert add-ssh --batch
四、添加SSH仓库模版
这里为了后续使用方便,我直接把gitlab仓库的根路径作为模版添加
这种添加方式需要确保关联的gitlab账号有对应仓库的读取权限
$ argocd repocreds add ssh://git@gitlab.mydomain.com:2222 --ssh-private-key-path /tmp/id_rsa.argocd
# 检查是否添加成功
$ argocd repocreds list
URL PATTERN USERNAME SSH_CREDS TLS_CREDS
ssh://git@gitlab.mydomain.com:2222 - false false
五、添加应用
argocd里面的应用添加后其实是CRD(applications.argoproj.io)的一条记录,所以除了通过UI界面来添加应用外,通过yaml文件来添加应用更便于实现自动化。
$ cat argocd-app-ingress.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: ingress-nginx
namespace: argocd
spec:
destination:
namespace: ingress
server: https://kubernetes.default.svc
project: default
source:
helm:
valueFiles:
- ./values-override.yaml
path: .
repoURL: ssh://git@gitlab.mydomain.com:2222/devops/ingress-nginx.git
targetRevision: HEAD
创建argocd的app
$ argocd app create --file argocd-app-ingress.yaml
六、应用部署(sync)
$ argocd app sync ingress-nginx
七、查看应用日志
$ argocd app logs ingress-nginx --follow