上一篇介绍了持续交付中,以及circleci用法,circleci主要负责CI部分,本篇介绍CD部分使用的Argo CD,跟circleci一样也是GitOps风格。

1. Argo CD

测试项目:https://github.com/ffzs/quarkus_demo_k8s

Argo CD官网:https://argoproj.github.io/argo-cd/

Argo CD是针对Kubernetes的开源持续交付解决方案。它由Intuit公司创建,并被许多公司采用,包括Google、NVIDIA、Datadog和Adobe等。它具有一系列令人印象深刻的功能。

1.1 k8s上安装argocd

  • 在k8s上创建argocd命名空间
  1. kubectl create namespace argocd
  2. kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

1.2 下载Argo CD CLI

访问 https://github.com/argoproj/argo-cd/releases/tag/v1.7.8 下载对应的平台版本

k8s(5):GitOps 与 Argo CD持续交付 - 图1

下载之后放到bin目录,并修改权限:

k8s(5):GitOps 与 Argo CD持续交付 - 图2

1.3 访问Argo CD API服务器

默认情况下,Argo CD API服务器未使用外部IP公开。要访问API服务器,请选择以下技术之一以公开Argo CD API服务器:

  • 负载均衡
  • 转发端口

1.3.1 负载均衡

将argocd-server服务类型更改为LoadBalancer

  1. kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

1.3.2 转发端口

Kubectl端口转发也可以用于连接到API服务器,而无需公开服务:

  1. kubectl port-forward svc/argocd-server -n argocd 8000:443

然后可以使用localhost:8080访问API服务器。

这里选择负载均衡的方法:

k8s(5):GitOps 与 Argo CD持续交付 - 图3

然后通过service的名字找到对应服务的url:

k8s(5):GitOps 与 Argo CD持续交付 - 图4

1.4 使用CLI登录

初始密码将自动生成为Argo CD API服务器的容器名称。可以使用以下命令进行检索:

  1. kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2

k8s(5):GitOps 与 Argo CD持续交付 - 图5

访问服务网址,密码输入上面的那串,用户名为admin:

k8s(5):GitOps 与 Argo CD持续交付 - 图6

修改密码:

k8s(5):GitOps 与 Argo CD持续交付 - 图7

浏览器上访问网址https://192.168.3.64:30509/,先进行登录:

k8s(5):GitOps 与 Argo CD持续交付 - 图8

2. 使用Argo CD部署

测试项目:https://github.com/ffzs/quarkus_demo_circleci

服务相关内容在svc目录,不过建议新开一个github仓库存储应用配置。

2.1 参数介绍

您可以使用端口转发访问Argo CD:--port-forward-namespace argocd向每个CLI命令添加标志或设置ARGOCD_OPTS环境变量export ARGOCD_OPTS='--port-forward-namespace argocd'

  • --project default (可选) 使用默认的
  • --name (可选) 应用名字 也可以直接 argocd app create 应用名字
  • --repo git仓库地址
  • --path git仓库下的yaml资源清单目录
  • --dest-server 要部署到的目标k8s集群,当前集群就是这样https://kubernetes.default.svc
  • --dest-namespace 目标集群的命名空间
  • --revision git仓库的分支
  • --sync-policy automated (可选) 同步策略自动同步, 不设置则不自动同步,详细查看https://argoproj.github.io/argo-cd/user-guide/auto_sync/

2.2 通过CLI部署

  • 部署一个名为 quarkus 的应用
  • 配置https://github.com/ffzs/quarkus_demo_circleci.git项目
  • 使用main分支,现在github把默认的分支从master改成了main
  1. argocd app create quarkus \
  2. --repo https://github.com/ffzs/quarkus_demo_circleci.git \
  3. --path svc \
  4. --dest-server https://kubernetes.default.svc \
  5. --dest-namespace default \
  6. --revision main
  • 查看部署应用
  1. argocd app list

k8s(5):GitOps 与 Argo CD持续交付 - 图9

  • 查看应用详情
  1. argocd app get quarkus

k8s(5):GitOps 与 Argo CD持续交付 - 图10

  • 同步部署的应用
  1. argocd app get quarkus

k8s(5):GitOps 与 Argo CD持续交付 - 图11

  • 设置应用为自动同步
  1. argocd app set quarkus --sync-policy automated

2.3 通过Web UI 部署应用

  • 点击NEW APP新建任务

k8s(5):GitOps 与 Argo CD持续交付 - 图12

  • 根据情况逐个添加信息

k8s(5):GitOps 与 Argo CD持续交付 - 图13

  • 集群直接使用默认的

k8s(5):GitOps 与 Argo CD持续交付 - 图14

  • 查看任务情况

k8s(5):GitOps 与 Argo CD持续交付 - 图15