安装部署
新建命名空间并部署项目资源
1 2
| kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
暴露服务
默认情况下, Argo CD 服务不对外暴露服务,可以通过 LoadBalancer 或者 NodePort 类型的 Service、Ingress、Kubectl 端口转发等方式将 Argo CD 服务发布到 Kubernetes 集群外部。
由于是 vm 自建,所以选择使用 NodePort 的方式暴露服务。
1
| kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
|
查看随机暴露的端口
1 2 3 4 5 6 7 8 9 10 11
| root@devops:~# kubectl get svc -n argocd NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE argocd-applicationset-controller ClusterIP 10.43.49.182 <none> 7000/TCP,8080/TCP 78m argocd-dex-server ClusterIP 10.43.155.32 <none> 5556/TCP,5557/TCP,5558/TCP 78m argocd-metrics ClusterIP 10.43.241.106 <none> 8082/TCP 78m argocd-notifications-controller-metrics ClusterIP 10.43.239.240 <none> 9001/TCP 78m argocd-redis ClusterIP 10.43.37.52 <none> 6379/TCP 78m argocd-repo-server ClusterIP 10.43.79.21 <none> 8081/TCP,8084/TCP 78m argocd-server NodePort 10.43.65.157 <none> 80:32221/TCP,443:31046/TCP 78m argocd-server-metrics ClusterIP 10.43.235.50 <none> 8083/TCP 78m root@devops:~#
|
访问 UI
使用 node:31046 访问
添加 git 仓库
因为本机 vm 访问 git 不通,所以选择 gitlab,使用 ui 添加也可以使用命令行添加
添加 app
使用 argo cli 创建
1 2 3 4 5
| argocd app create myapp \ --repo https://gitlab.com/doubao2/doubao.git \ --path nginx --dest-server \ https://kubernetes.default.svc \ --dest-namespace doubao
|
使用 yaml 创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: nginx namespace: argocd spec: destination: namespace: doubao server: https://kubernetes.default.svc project: default source: path: nginx repoURL: https://gitlab.com/douba0/argo-cd-poc.git targetRevision: main
|
使用 ui 创建
添加对应的参数
手动同步 gitlab 配置
发布和回滚
手动同步 gitlab 配置后,可以看到详细的部署信息,并且可以进行版本的发布和回滚的管理
自定义配置
Argocd 在自动部署的时候,会自动给资源添加 labels。默认值是app.kubernetes.io/instance: $name
,可以在 argocd-cm 中设置 labels 的 key。
argocd-cm 官方样例
由于自动添加 labels 会导致 Kustomization 编排的资源会被覆盖 labels,这样会导致不同 app 引用相同的 configmap 后,会出现 OutOfSync 的问题。
由于目前没有禁止自动添加 labels 的功能和配置,但是可以自定义忽略不同的资源信息。所以曲线救国可以直接忽略掉这个 labels 的变更,这样 argocd 在 sync 后就不会出现 OutOfSync 了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: v1 kind: ConfigMap metadata: labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd name: argocd-cm namespace: argocd data: resource.customizations.ignoreDifferences.all: | managedFieldsManagers: - kube-controller-manager jsonPointers: - /metadata/labels/app.kubernetes.io~1instance
|