《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.15 + Gitops Operator 1.12 环境中验证
用ArgoCD部署应用
向ArgoCD增加Github Repo
首先向ArgoCD增加Github Reop,然后查看ArgoCD的repo列表。
$ argocd repo add https://github.com/liuxiaoyu-git/gitops-on-openshift.git
repository 'https://github.com/liuxiaoyu-git/gitops-on-openshift.git' added
$ argocd repo list
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE
git https://github.com/liuxiaoyu-git/gitops-on-openshift.git false false false false Successful
通过ArgoCD部署OpenShift应用
- 创建部署应用的目标项目,并打标签,说明该项目为ArgoCD管理。
$ oc new-project reverse-words
$ oc label namespace reverse-words argocd.argoproj.io/managed-by=openshift-gitops
- 查看当前Argo管理的OpenShift或K8s集群。如果ArgoCD和OpenShift运行在一起,那么使用本地地址(https://kubernetes.default.svc)访问。
$ argocd cluster list
SERVER NAME VERSION STATUS MESSAGE PROJECT
https://kubernetes.default.svc in-cluster 1.28 Successful
- 基于Github,在ArgoCD上创建一个应用reverse-words-app,然后查看ArgoCD上的应用列表。其中ArgoCD的create命令参数有:
–project :ArgoCD应用程序所属的ArgoCD项目
–name :ArgoCD应用程序名称
–repo :Git存储库
–path :Git信息库中存储清单的目录路径
–dest-server :OpenShift集群
–dest-namespace :用于将ArgoCD应用程序部署到的OpenShift项目
–revision :Git存储库的分支
–sync-policy :与Git存储库同步的策略
$ argocd app create --project default --name reverse-words-app \
--repo https://github.com/liuxiaoyu-git/gitops-on-openshift.git \
--path simple-app/reversewords_app/ \
--dest-server https://kubernetes.default.svc \
--dest-namespace reverse-words \
--revision HEAD --sync-policy automated
application 'reverse-words-app' created
$ argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
reverse-words-app https://kubernetes.default.svc reverse-words default Synced Progressing Auto <none> https://github.com/liuxiaoyu-git/gitops-on-openshift.git simple-app/reversewords_app/ master
- 查看ArgoCD中的reverse-words-app应用,注意此时ArgoCD的reverse-words应用的“Sync Status”是“Synced to HEAD”状态。
$ argocd app get reverse-words-app
Name: reverse-words-app
Project: default
Server: https://kubernetes.default.svc
Namespace: reverse-words
URL: https://openshift-gitops-server-openshift-gitops.apps.cluster-394c.394c.sandbox1709.opentlc.com/applications/reverse-words-app
Repo: http://github.com/liuxiaoyu-git/gitops-on-openshift.git
Target: HEAD
Path: simple-app/reversewords_app/
SyncWindow: Sync Allowed
Sync Policy: Automated
Sync Status: Synced to HEAD (36306dc)
Health Status: Healthy
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Namespace reverse-words reverse-words Running Synced namespace/reverse-words unchanged
Service reverse-words reverse-words Synced Healthy service/reverse-words unchanged
apps Deployment reverse-words reverse-words Synced Healthy deployment.apps/reverse-words created
Namespace reverse-words Synced
- 手动创建访问应用的Route,然后访问reverse-words应用。
$ oc expose svc reverse-words -n reverse-words
$ curl -X POST http://$(oc get route reverse-words -n reverse-words -o jsonpath='{.spec.host}') -d '{"word":"PALC"}'
{"reverse_word":"CLAP"}
- 再次查看ArgoCD中的reverse-words-app应用,注意此时ArgoCD的reverse-words应用的“Sync Status”是“OutOfSync from HEAD”状态。在最后也可看到名为“reverse-words”的Route资源也是“OutOfSync”状态,这是由于Route是手动创建的。
$ argocd app get reverse-words-app
Name: reverse-words-app
Project: default
Server: https://kubernetes.default.svc
Namespace: reverse-words
URL: https://openshift-gitops-server-openshift-gitops.apps.cluster-394c.394c.sandbox1709.opentlc.com/applications/reverse-words-app
Repo: http://github.com/liuxiaoyu-git/gitops-on-openshift.git
Target: HEAD
Path: simple-app/reversewords_app/
SyncWindow: Sync Allowed
Sync Policy: Automated
Sync Status: OutOfSync from HEAD (36306dc)
Health Status: Healthy
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Namespace reverse-words reverse-words Running Synced namespace/reverse-words unchanged
Service reverse-words reverse-words Synced Healthy service/reverse-words unchanged
apps Deployment reverse-words reverse-words Synced Healthy deployment.apps/reverse-words created
Namespace reverse-words Synced
route.openshift.io Route reverse-words reverse-words OutOfSync
用ArgoCD自动更新应用配置
- 在ArgoCD中查看当前的应用的配置,确认最下方已经开启了“AUTOMATED 和 SELF HEAL”。
- 先删除OpenShift中reverse-words的Deployment。
$ oc delete deployment reverse-words -n reverse-words
deployment.extensions "reverse-words" deleted
- 查看reverse-words-app应用当前状态,确认“Health Status”是“Missing”的状态,并且Sync Status是“OutOfSync”状态。
$ argocd app get reverse-words-app
Name: reverse-words-app
Project: default
Server: https://kubernetes.default.svc
Namespace: reverse-words
URL: https://openshift-gitops-server-openshift-gitops.apps.cluster-394c.394c.sandbox1709.opentlc.com/applications/reverse-words-app
Repo: http://github.com/liuxiaoyu-git/gitops-on-openshift.git
Target: HEAD
Path: simple-app/reversewords_app/
SyncWindow: Sync Allowed
Sync Policy: Automated
Sync Status: OutOfSync from HEAD (36306dc)
Health Status: Missing
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Namespace reverse-words reverse-words Running Synced namespace/reverse-words unchanged
Service reverse-words reverse-words Synced Healthy service/reverse-words unchanged
apps Deployment reverse-words reverse-words OutOfSync Missing deployment.apps/reverse-words created
Namespace reverse-words Synced
route.openshift.io Route reverse-words reverse-words OutOfSync
- 执行命令同步reverse-words-app应用。确认“Message”为“successfully synced”说明同步成功。但是“Sync Status”还是“OutOfSync from HEAD”,并且Route资源的STATUS是“OutOfSync”,而且在最后显示“1 resources require pruning”,这是由于Route是我们手动生成的,而不是通过ArgoCD的Repo生成的。
$ argocd app sync reverse-words-app
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2020-03-03T16:20:38+00:00 Service reverse-words reverse-words Synced Healthy
2020-03-03T16:20:38+00:00 apps Deployment reverse-words reverse-words OutOfSync Missing
2020-03-03T16:20:38+00:00 route.openshift.io Route reverse-words reverse-words OutOfSync Unknown
2020-03-03T16:20:38+00:00 Namespace reverse-words Synced Unknown
Name: reverse-words-app
Project: default
Server: https://kubernetes.default.svc
Namespace: reverse-words
URL: https://openshift-gitops-server-openshift-gitops.apps.cluster-394c.394c.sandbox1709.opentlc.com/applications/reverse-words-app
Repo: http://github.com/liuxiaoyu-git/gitops-on-openshift.git
Target: HEAD
Path: simple-app/reversewords_app/
SyncWindow: Sync Allowed
Sync Policy: Automated
Sync Status: OutOfSync from HEAD (36306dc)
Health Status: Progressing
Operation: Sync
Sync Revision: 36306dc264cea403e33b756de6faf95f605fee5d
Phase: Succeeded
Start: 2021-10-02 07:34:24 +0000 UTC
Finished: 2021-10-02 07:34:27 +0000 UTC
Duration: 3s
Message: successfully synced (all tasks run)
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
route.openshift.io Route reverse-words reverse-words OutOfSync ignored (requires pruning)
Namespace reverse-words reverse-words Running Synced namespace/reverse-words unchanged
Service reverse-words reverse-words Synced Healthy service/reverse-words unchanged
apps Deployment reverse-words reverse-words Synced Progressing deployment.apps/reverse-words created
Namespace reverse-words Synced
FATA[0002] 1 resources require pruning
- 持续查看reverse-words的Deployment状态变化,最后变为READY状态。
$ oc get deployment -n reverse-words -w
NAME READY UP-TO-DATE AVAILABLE AGE
reverse-words 0/1 1 0 29s
reverse-words 1/1 1 1 39s
- 再次访问reverse-words应用的路由,确认又可以正常访问应用了。
$ curl -X POST http://$(oc get route reverse-words -n reverse-words -o jsonpath='{.spec.host}') -d '{"word":"PALC"}'
{"reverse_word":"CLAP"}
说明:最后使用“argocd app list”查看Argo的应用Status,确认还是OutOfSync的。这是由于Route对象是我们在OpenShift手动创建的,在Github中没有。只要部署目标和Git Repo之间存在差异,Argo就认为是OutOfSync的。
另外,还可使用以下带有“self-heal”参数的命令同步ArgoCD应用。
$ argocd app sync reverse-words-app --self-heal
用ArgoCD删除应用配置
- 此时进到ArgoCD的控制台,在Application中进入reverse-words-ap,确认是“OutOfSync”状态。其中是名为“reverse-words”的Route是黄色非同步状态,这是由于这个对象是我们在OpenShift中直接创建的,而不是根据Github的配置创建的。
- 点击上图中红框中名为“reverse-words”的Route的右侧图标,然后选择Delete,然后确认是Force
Delete。删除后,ArgoCD的reverse-words-app应用又恢复了“Synced”状态了。
- 然后执行以下命令,确认OpenShift的名为“reverse-words”的Route对象已经被删除了。
$ oc get route -n reverse-words
No resources found in reverse-words namespace.
参考
https://redhat-scholars.github.io/summit-2023-gitops-lab-guide/summit-2023-gitops-workshop-guide