ArgoCD Basic
简介
Argo CD 是以 Kubernetes 作为基础设施,遵循声明式 GitOps 理念的持续交付(continuous delivery, CD)工具,支持多种配置管理工具,包括 ksonnet/jsonnet、kustomize 和 Helm 等。它的配置和使用非常简单,并且自带一个简单易用的可视化界面。
按照官方定义,Argo CD 被实现为一个 Kubernetes 控制器,它会持续监控正在运行的应用,并将当前的实际状态与 Git 仓库中声明的期望状态进行比较,如果实际状态不符合期望状态,就会更新应用的实际状态以匹配期望状态。
部署到k8s
使用helm chart
$ helm repo add argo https://argoproj.github.io/argo-helm
$ helm install argocd argo/argo-cd -n argocd ----create-namespace argocd
部署完之后可以配置一个nginx ingress进行外部访问:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ingress-argo namespace: argo annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"spec: rules: - host: argocd.nblh.local http: paths: - path: / pathType: Prefix backend: service: name: argocd-server port: number: 443 ingressClassName: nginx---
这样就可以通过域名加Nodeport的方式进行访问.
使用yaml
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
argocd CLI
argocd CLI是argocd的命令行工具.
安装
# macos 下使用brew安装brew install argocd
其他平台可以从Release v2.8.4 · argoproj/argo-cd · GitHub这里进行下载.
登录
登录到argocd server:
# 后面的地址是nginx ingress的地址argocd login argocd.nblh.local:37332# 随后允许不安全的证书,输入账号密码即可
登录完之后会生成一个配置文件,配置文件路径为:
❯ cat ~/.config/argocd/config───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ File: /Users/agou-ops/.config/argocd/config───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ contexts: 2 │ - name: argocd.nblh.local:37332 3 │ server: argocd.nblh.local:37332 4 │ user: argocd.nblh.local:37332 5 │ current-context: argocd.nblh.local:37332 6 │ servers: 7 │ - grpc-web-root-path: "" 8 │ insecure: true 9 │ server: argocd.nblh.local:37332 10 │ users: 11 │ - auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJhZG1pbjpsb2dpbiIsImV4cCI6MTY5NDc0MzU3OCwibmJmIjoxNjk0NjU3MTc4LCJpYXQiOjE2OTQ2NTcx │ NzgsImp0aSI6ImNkMDhmYTgzLTQ3MDEtNDdjNC05YzI2LWExNDZhZmQ0YzJiYiJ9.i_VhZYmI5AaqWn0e7YE3F_OeLrj-xmhB6ZeAmiINpTM 12 │ name: argocd.nblh.local:37332───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
常用命令
# 列举所有应用$ argocd app list
# 查看应用状态$ argocd app get dubbo-sample# outputName: argo/dubbo-sampleProject: defaultServer: https://kubernetes.default.svcNamespace: dubboURL: https://argocd.nblh.local:37332/applications/dubbo-sampleRepo: http://git.nblh.local/devops/sample-project.gitTarget: gitopsPath: 1-basic/dubbo-samples-spring-boot/helm-chartHelm Values: values.yamlSyncWindow: Sync AllowedSync Policy: AutomatedSync Status: OutOfSync from gitops (bb71241)Health Status: Healthy
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGEapps Deployment dubbo dubbo-admin-16 OutOfSync Healthy ignored (requires pruning)apps Deployment dubbo dubbo-consumer-16 OutOfSync Healthy ignored (requires pruning)apps Deployment dubbo dubbo-provider-16 OutOfSync Healthy ignored (requires pruning)apps Deployment dubbo dubbo-admin-17 Synced Healthy deployment.apps/dubbo-admin-17 createdapps Deployment dubbo dubbo-consumer-17 Synced Healthy deployment.apps/dubbo-consumer-17 createdapps Deployment dubbo dubbo-provider-17 Synced Healthy deployment.apps/dubbo-provider-17 created# 从上面输出可以看到应用目前处于OutofSync,可以使用一下命令同步应用,ApplyOutOfSyncOnly仅同步outsync$ argocd app sync dubbo-sample --sync-option ApplyOutOfSyncOnly=true# output# 输出太长就不放了,可以通过上面的argocd app get 命令查看同步结果
使用示例
使用清单文件
示例清单文件:
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: myapp-argo-application namespace: argocdspec: project: default
source: repoURL: https://github.com/USER/REPO.git targetRevision: HEAD path: dev destination: server: https://kubernetes.default.svc namespace: myapp
syncPolicy: syncOptions: - CreateNamespace=true
automated: selfHeal: true prune: true
参数解释:
syncPolicy : 指定自动同步策略和频率,不配置时需要手动触发同步。
syncOptions : 定义同步方式。 > - CreateNamespace=true : 如果不存在这个 namespace,就会自动创建它。
automated : 检测到实际状态与期望状态不一致时,采取的同步措施。
- **selfHeal** : 当集群世纪状态不符合期望状态时,自动同步。
- **prune** : 自动同步时,删除 Git 中不存在的资源。
Argo CD 默认情况下每 3 分钟会检测 Git 仓库一次,用于判断应用实际状态是否和 Git 中声明的期望状态一致,如果不一致,状态就转换为
OutOfSync
。默认情况下并不会触发更新,除非通过syncPolicy
配置了自动同步。如果嫌周期性同步太慢了,也可以通过设置 Webhook 来使 Git 仓库更新时立即触发同步。具体的使用方式会放到后续的教程中,本文不再赘述。
仓库dev路径下:
apiVersion: apps/v1kind: Deploymentmetadata: name: myappspec: selector: matchLabels: app: myapp replicas: 2 template: metadata: labels: app: myapp spec: containers: - name: myapp image: nginx:latest ports: - containerPort: 80
# service.yamlapiVersion: v1kind: Servicemetadata: name: myapp-servicespec: selector: app: myapp ports: - port: 80 protocol: TCP targetPort: 80
最后创建application即可:
kubectl apply -f application.yaml
打开argocd的web页面可以看到新创建的应用。
使用argocd客户端工具
kubectl config set-context --current --namespace=argocdargocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default