安装argo cd

安装部署

新建命名空间并部署项目资源

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 访问

image-20240708103122048

添加 git 仓库

因为本机 vm 访问 git 不通,所以选择 gitlab,使用 ui 添加也可以使用命令行添加

image-20240825160336188.png

添加 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 # API Server 地址
project: default # 项目名
source:
path: nginx # 资源文件路径
repoURL: https://gitlab.com/douba0/argo-cd-poc.git # Git 仓库地址
targetRevision: main # 分支名

使用 ui 创建

添加对应的参数
image-20240825160538368.png

手动同步 gitlab 配置

argocd-install/image-20240825161747562.png

发布和回滚

手动同步 gitlab 配置后,可以看到详细的部署信息,并且可以进行版本的发布和回滚的管理

image-20240825161830895.png

自定义配置

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