LabHub
学习 学习路径 课程

CGOA — GitOps 认证助理

改了 git,集群就跟上来

在 LabHub 中继续学习

本实验在真正的 Argo CD 上运行

VM 中实际运行着 k3s + Argo CD + git 服务器。向 git 提交后, Argo CD 会读取它并真正完成部署;有人手动修改时,它也会真正将修改 还原。

CGOA 课程中其他实验使用的模拟集群没有 Argo CD。因此, 漂移和自愈都不可能发生——这意味着 GitOps 中最重要的学习内容 此前全部缺失。

首次启动需要 4~5 分钟。

已准备的内容

작업 사본   /srv/gitops              여기서 고치고 커밋·푸시합니다
원격        git://gitd.gitsrv.svc.cluster.local:9418/app.git
Argo CD     argocd 네임스페이스

git 服务器是集群内的 Pod。它挂载了 /srv/bare hostPath, 因此从 VM push 后,Argo CD 会立即看到变更。

目标

亲自触发并确认 GitOps 的四种行为:部署、变更跟踪、 漂移检测和自愈。

为什么这很重要

GitOps 的核心主张只有一个:git 是唯一的事实来源,集群是 它的副本。

要使这一主张成立,需要满足两个条件。

第二点尤其重要。没有自愈,通过 kubectl 直接进行的修改 会一直保留,导致 git 与集群悄无声息地分叉。 此时 git 不再 是真实来源,差异会在下一次部署时集中爆发。

步骤

  1. /srv/gitops 中创建 app/deploy.yaml(namespace 为 shop,Deployment 为 web,副本数为 2)并 push,然后将 git 服务器是否提供该文件的结果保存到 /root/cgo/repo.txt
  2. 创建 shop Application(启用 automatedpruneselfHeal),并将实际部署结果保存到 /root/cgo/app.txt
  3. 在 git 中将副本数改为 3 并 push,将集群随之更新的结果保存到 /root/cgo/gitchange.txt不要使用 kubectl 直接修改。
  4. 关闭 selfHeal,用 kubectl 修改副本数,并将状态变为 OutOfSync 的结果保存到 /root/cgo/drift.txt
  5. 重新开启 selfHeal,并将恢复原状的结果保存到 /root/cgo/selfheal.txt
  6. 在 git 中添加 ConfigMap extra 并完成部署,然后从 git 中删除它,将 prune 也从集群中删除它的结果保存到 /root/cgo/prune.txt
  7. 检查部署历史并保存到 /root/cgo/history.txt,同时写明 GitOps 中的回滚是什么。
  8. /root/cgo/report.md 中写入 selfheal=yesprune=yesreplicas= 三行及相关说明。

参考

让 git 成为事实来源

/srv/gitops 中创建 app/deploy.yaml(namespace 为 shop,Deployment 为 web,副本数为 2)并 push,然后将 git 服务器是否提供该文件的结果保存到 /root/cgo/repo.txt

/srv/gitops 中修改并提交,然后 push。远程仓库是集群内的 git 服务器。

Argo 读取 git 并完成部署

创建 shop Application(启用 automatedpruneselfHeal),并将实际部署结果保存到 /root/cgo/app.txt

Application 设置 syncPolicy.automated 后,无需人工点击 sync。

修改 git 后集群会跟随变化

在 git 中将副本数改为 3 并 push,将集群随之更新的结果保存到 /root/cgo/gitchange.txt不要使用 kubectl 直接修改。

不要使用 kubectl。修改 git 并 push,然后等待 Argo 跟随变更。

手动修改会造成分叉

关闭 selfHeal,用 kubectl 修改副本数,并将状态变为 OutOfSync 的结果保存到 /root/cgo/drift.txt

关闭 selfHeal 后再制造漂移。如果保持开启,变更会在几秒内恢复,来不及观察。

重新开启后会恢复原状

重新开启 selfHeal,并将恢复原状的结果保存到 /root/cgo/selfheal.txt

开启 selfHeal 后,Argo 会恢复为 git 中的值,通常只需几秒。

从 git 删除后也会从集群删除

在 git 中添加 ConfigMap extra 并完成部署,然后从 git 中删除它,将 prune 也从集群中删除它的结果保存到 /root/cgo/prune.txt

先将 ConfigMap 加入 git 并部署,然后从 git 删除该文件并 push。

回滚就是回滚 git

检查部署历史并保存到 /root/cgo/history.txt,同时写明 GitOps 中的回滚是什么。

部署历史位于 .status.history 中,但 GitOps 的回滚方式另有其法。

总结所学内容

/root/cgo/report.md 中写入 selfheal=yesprune=yesreplicas= 三行及相关说明。

selfheal=prune=replicas= 三行外,还要说明 git 为什么是事实来源。