Day22 - ArgoCD 建立应用程序

前言

前一天我们在 K8s Cluster 建置好了 ArgoCD 服务,今天就来实际操作看看,透过 ArgoCD 建立 Application 的 Stage 以及 Production 环境。

连接到 Manifest Repository

因为 ArgoCD 是以 GitOps 的方式运作,一开始需要先将 Manifest Repo 连线到 ArgoCD ,我们就来实际操作看看。

  1. 使用 Day21 介绍的方式登入到 ArgoCD

  2. 点击左边齿轮,接着点选 Repositories

https://ithelp.ithome.com.tw/upload/images/20210922/20139235LHbIKlTrDF.png

  1. 点击 CONNECT REPO USING HTTPS

https://ithelp.ithome.com.tw/upload/images/20210922/20139235H1CwdF6sMH.png

  1. 到你的 Manifest Repository,点击 Clone-> Clone with HTTPS 复制地址

https://ithelp.ithome.com.tw/upload/images/20210922/20139235reDFHI6Ei4.png

  1. 回到 ArgoCD ,在 Repository URL 贴上位址,完成後点击CONNECT

https://ithelp.ithome.com.tw/upload/images/20210922/20139235Pe1I72s3fr.png

可以看到成功连线到 Manifest Repository。

https://ithelp.ithome.com.tw/upload/images/20210922/20139235BxuReiUdNx.png

因为我们设置的是 Public Repository ,不需要提供帐号密码就能连线,若你是使用 Privare 的 Repo,就需要建立金钥才能连线。

使用 ArgoCD GUI 建立应用

接着试着透过 GUI ,建立 Application 的 Stage 环境。

  1. 回到主画面,点击 CREATE APPLICATION

https://ithelp.ithome.com.tw/upload/images/20210922/20139235o3jdHLd484.png

  1. GENERAL 输入以下资讯
  • Application Name
    • webapp-stage
  • Project
    • default
  • SYNC POLICY
    • 选择 Automatic
    • PRUNE RESOURCES 打勾
    • SELF HEAL 打勾
  • AUTO-CREATE NAMESPACE 打勾

https://ithelp.ithome.com.tw/upload/images/20210922/20139235nnJqTd7bwP.png

这里的 Sync Policy 为同步方式,Automatic 代表当 Git Repo 更新 ArgoCD 也会自动同步。

  1. SOURCE 以及 DESTINATION 输入以下资讯
  • Repository URL
    • 选择你的 Manifest Repository URL
  • Revision
    • HEAD
  • Path
    • .
  • Cluster URL
    • 选择 kubernetes.default.svc
  • Namespace
    • stage

https://ithelp.ithome.com.tw/upload/images/20210922/20139235K6FWotlp2i.png

Source 为你要使用的资源位置,这里的设置代表会使用 Manifest Repo 在 HEAD 上的根目录档案。

Destination 为资源要部属的位置,这里选择 default.svc ( 执行 ArgoCD 的 K8s Cluster ),并且会部属在 stage 的命名空间。

还记得之前的章节我们在 Helm Chart 里面建立了多个 values 档案,在 ArgoCD 中,就可以根据需要的环境带入不同配置的 values 档案。

  1. Helm -> VALUES FILES 选择 values.stage.yaml 档案

https://ithelp.ithome.com.tw/upload/images/20210922/20139235bkwGwokM2i.png

  1. 输入完成後就可以点击 CREATE,主画面就可以看到新的 Application

https://ithelp.ithome.com.tw/upload/images/20210922/20139235kQKQaYJyAA.png

  1. 点击 Application ,可以看到更详细的资讯,包括同步状态、建立的元件。

https://ithelp.ithome.com.tw/upload/images/20210922/20139235zTiO4FptW2.png

等到 Status 显示 Synced ,代表 ArgoCD 已经建置好服务了,我们可以到 Kubernetes 实际验证一下。

  1. 进入 Cloud Shell 网站

  2. 点击倒三角形->点选专案的 PROJECT_ID,开启专案 Terminal

  1. 查看 stage 命名空间的所有元件
kubectl get all -n stage

(输出结果)

NAME                                READY   STATUS    RESTARTS   AGE
pod/webapp-stage-5bcbc8d798-4nf9j   1/1     Running   0          9m36s
pod/webapp-stage-5bcbc8d798-4nvkr   1/1     Running   0          9m36s
pod/webapp-stage-5bcbc8d798-9nhdb   1/1     Running   0          9m36s

NAME                  TYPE          CLUSTER-IP    EXTERNAL-IP    PORT(S)       AGE
service/webapp-stage  LoadBalancer  10.3.254.204  34.150.28.184  80:31918/TCP  9m39s

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/webapp-stage   3/3     3            3           9m40s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/webapp-stage-5bcbc8d798   3         3         3       9m41s

可以看到元件都已建置完成,使用 Service 的 EXTERNAL-IP 连线到服务确认有无正常执行。

  1. 开启浏览器,输入网址後送出
http://<SERVICE EXTERNAL-IP>

可以看到服务正常运行。

https://ithelp.ithome.com.tw/upload/images/20210922/20139235CLLfdH8xmu.png

使用 Kubectl CLI 建立应用

ArgoCD 的 Application 也是一种 Kubernetes 元件,所以可以建置相关的 yaml 档案,并用 kubectl apply 的方式来建立,就来试着用 CLI 的方式建立 Application 的 Production 环境。

  1. 建立 webapp-prod.yaml 档案
mkdir ~/argocd && cd ~/argocd
touch webapp-prod.yaml
  1. 点击左上 Explorer -> Open Folder -> 选择 argocd 资料夹 -> Open

https://ithelp.ithome.com.tw/upload/images/20210922/20139235wQgcZG5C7y.png

  1. 点击 webapp-prod.yaml 档案并输入以下内容,需要将 repoURL 改成你的 Manifest Repo

https://ithelp.ithome.com.tw/upload/images/20210922/20139235gOsD5afLXs.png

  • webapp-prod.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: webapp-prod
spec:
  destination:
    name: ''
    namespace: prod
    server: 'https://kubernetes.default.svc'
  source:
    path: .
    repoURL: '<YOUR Manifest Repo>'
    targetRevision: HEAD
    helm:
      valueFiles:
        - values.production.yaml
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
  1. 使用 kubectl apply -f <file> 建立 ArgoCD Application
kubectl apply -f webapp-prod.yaml
  1. 确认 Application 是否成功建立
kubectl get application -n argocd

(输出结果)

NAME           SYNC STATUS   HEALTH STATUS
webapp-prod    Synced        Progressing
webapp-stage   Synced        Healthy

会看到多了一个 webapp-prod 的 App ,在 ArgoCD 的 GUI 也可以看到。

https://ithelp.ithome.com.tw/upload/images/20210922/20139235RkkQkkV7sl.png

  1. 查看 prod 命名空间的所有元件
kubectl get all -n prod

(输出结果)

NAME                              READY   STATUS    RESTARTS   AGE
pod/webapp-prod-6448d5b84-5fsfs   1/1     Running   0          2m9s
pod/webapp-prod-6448d5b84-bqh8n   1/1     Running   0          2m9s
pod/webapp-prod-6448d5b84-hnsjr   1/1     Running   0          2m9s

NAME                 TYPE          CLUSTER-IP   EXTERNAL-IP  PORT(S)       AGE
service/webapp-prod  LoadBalancer  10.3.254.73  34.92.49.24  80:30082/TCP  2m11s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/webapp-prod   3/3     3            3           2m10s

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/webapp-prod-6448d5b84   3         3         3       2m10s

可以看到 Production 环境的元件也建置完成。

总结

今天学习到如何使用 ArgoCD 建立应用程序,也代表从 Day16 - Day22 制作的 CI/CD 流水线已经可以工作了,明天我们就来试试看,到底多了 CI/CD 工具对开发以及维运有哪些好处。


<<:  【Day7】情蒐阶段的小工具 ─ 扫描篇(一)

>>:  呜咕,东西没进到口袋里 -- 探讨Json

第0砍 - 虚张声势

: 听说你ARM很厉害 你怎麽学习的? 学习? 每天伏地挺身100下就好了阿 : ??? 在进入正题...

【领域展开 25 式】 汇入 Instagram 到 WordPress 网站

双十连假收假,来学习如何把 IG 汇入到 WordPress 网站中,根据网站的架构有一个 LIFE...

[30] 参赛心得

欸!又是 30 天罗 当年参赛之後说绝对不再参加的,结果身边一堆人参赛 自己也在想尝试其他语言,就索...

23 | 【进阶教学】了解 WordPress「清单检视 List View」功能

由於 WordPress 区块编辑器 已经推出了一段时间,不过部分新手在操作时发现不好上手,尤其在...

【额外分享】How To Test The Smart Contract Of iParking NFT With Foundry

tags: swfLAB ⚠️ Of course this is only my personal...