主题
简介
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
Lb20rhyhfbDQI6gtbash
# 禁用 TLS
kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{"data":{"server.insecure":"true"}}'
kubectl rollout restart deployment argocd-server -n argocdyaml
# 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