跳转到内容

简介

markdown
1. 和传统 CI/CD 工具一样,CI 部分并没有什么区别,无非就是测试、构建镜像、推送镜像、修改部署清单等等。重点在于 CD 部分。
2. Argo CD 会被部署在 Kubernetes 集群中,使用的是基于 Pull 的部署模式,它会周期性地监控应用的实际状态,也会周期性地拉取 Git 仓库中的配置清单,并将实际状态与期望状态进行比较,如果实际状态不符合期望状态,就会更新应用的实际状态以匹配期望状态。
3. 支持原生配置清单,kustomize,helm

优点

markdown
1. git作为应用的唯一真实来源
2. 可以在 Argo CD 的可视化界面中实时查看更新状态

架构/原理

markdown
1. 三个组件
	- api server # 呈现
	- repository server # 检索
	- application controller # 调谐
2. 原理
	repository server将配置清单所在的git仓库克隆到本地。
	将本地的配置清单与集群当前状态的实时配置清单进行比对,发现不一致的,application controller采取修正措施,使集群的实际状态与期望状态保持一致。
	api server呈现状态,展示调谐的结果。

部署方式

markdown
# 两种部署方式
1. 多租户(标准的最常用,适合多个应用研发团队,带可视化页面)
2. core(精简方式,没有可视化页面和api server)

部署过程

bash
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# pod
root@master:/data/k8s/6-argocd/images# kubectl get pods -n argocd
NAME                                                READY   STATUS    RESTARTS      AGE
argocd-application-controller-0                     1/1     Running   0             29m
argocd-applicationset-controller-79784469f4-kbcnn   1/1     Running   0             29m
argocd-dex-server-5b9db45777-fklgc                  1/1     Running   1 (13m ago)   29m
argocd-notifications-controller-85fbf988f-q7sfd     1/1     Running   0             29m
argocd-redis-6976f55b89-9v2b8                       1/1     Running   0             29m
argocd-repo-server-584c74755d-cwzv4                 1/1     Running   0             29m
argocd-server-748c95df66-9r6kh                      1/1     Running   0             29m
# svc
root@master:/data/k8s/6-argocd/images# kubectl -n argocd get svc
NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.97.253.157    <none>        7000/TCP,8080/TCP            30m
argocd-dex-server                         ClusterIP   10.102.193.216   <none>        5556/TCP,5557/TCP,5558/TCP   30m
argocd-metrics                            ClusterIP   10.99.42.228     <none>        8082/TCP                     30m
argocd-notifications-controller-metrics   ClusterIP   10.96.50.233     <none>        9001/TCP                     30m
argocd-redis                              ClusterIP   10.109.202.174   <none>        6379/TCP                     30m
argocd-repo-server                        ClusterIP   10.110.159.133   <none>        8081/TCP,8084/TCP            30m
argocd-server                             ClusterIP   10.102.199.204   <none>        80/TCP,443/TCP               30m
argocd-server-metrics                     ClusterIP   10.101.217.82    <none>        8083/TCP                     30m

访问

bash
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
kubectl rollout restart deploy -n argocd

# 获取密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
Lb20rhyhfbDQI6gt
bash
# 禁用 TLS 
kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{"data":{"server.insecure":"true"}}'
kubectl rollout restart deployment argocd-server -n argocd
yaml
# 2-argocd-httproute.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: argocd
  namespace: argocd
spec:
  parentRefs:
  - name: common-gateway
    namespace: common-gateway
    sectionName: https
  hostnames:
  - "argocd.3214.top"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: argocd-server
      port: 80
      kind: Service

基于 MIT 许可发布