OpenShift 4 之 GitOps(1)安裝ArgoCD環境

GitOps是什麼?

簡而言之,GitOps 是使用 Git 拉取請求來管理IaaS和應用程序配置的實踐。GitOps 中的 Git 存儲庫被視爲唯一的真理來源,它包含系統的整體狀態,以便使系統狀態的更改是可跟蹤和可審覈的。爲了實現GitOps,需要通過代碼實現對系統的定義和配置,這正是所謂的IaC(Infrastructure as Code)。那些定義了期望的系統或應用狀態的配置文件被放在Git中,這樣通過Git的版本管理功能就很容易對系統或應用的配置進行回滾。除此以外,還可將一個Git作爲多個雲環境的的統一配置庫,這樣能方便實現多雲環境下的聯邦集羣、多雲部署等統一管理功能。

  • 整個系統採用聲明式描述
  • 在Git中可對系統狀態版本化
  • 批准的更改可以自動應用於系統
  • 軟件代理可確保正確性並警告差異

爲了實現將Git中的系統配置生效,就要運行一個代理,這就是GitOps服務。它可通過webhook接收或主動獲取Git的配置。當接收到系統配置發生變化事件後,GitOps服務可獲取最新的配置,然後根據策略在相關的基礎架構(例如OpenShift)上加以實施新的配置。
在這裏插入圖片描述

ArgoCD

什麼是ArgoCD

ArgoCD是一個用於持續交付的Kubernetes配置管理工具。Argo CD 遵循 GitOps 模式,即使用 Git 存儲庫作爲定義所需應用程序狀態的源頭。Argo CD 可在指定的目標環境中自動部署所需的應用程序狀態。應用程序部署可以跟蹤對分支、標記的更新,或將更新固定到 Git 提交中特定版本的清單。。
在這裏插入圖片描述
在一個ArgoCD運行環境中包括以下組件:

  1. API Server:API 服務器是一個 gRPC/REST 服務器,它公開 Web UI、CLI 和 CI/CD 系統使用的 API。
  2. Repository Server:存儲庫服務器是一個內部服務,它維護包含應用程序清單的 Git 存儲庫的本地緩存。
  3. Application Controller:應用程序控制器是 Kubernetes 控制器,它持續監視正在運行的應用程序,並將當前活動狀態與所需目標狀態進行比較(在Repo中的指定狀態)。當它檢測出OutOfSync應用程序狀態後就會選擇採取糾正措施。

安裝ArgoCD客戶端

$ sudo curl -L https://github.com/argoproj/argo-cd/releases/download/v1.4.2/argocd-linux-amd64 -o /usr/local/bin/argocd
$ sudo chmod +x /usr/local/bin/argocd

安裝ArgoCD服務端

  1. 創建argocd項目。
$ oc new-project argocd
  1. 部署ArgoCD資源。
$ oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/install.yaml
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
configmap/argocd-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-secret created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server-metrics created
service/argocd-server created
deployment.apps/argocd-application-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
  1. 查看部署的pod運行情況。
$ oc get pod
NAME                                            READY   STATUS    RESTARTS   AGE
argocd-application-controller-ddb8c7bbc-sgh9r   1/1     Running   0          7m16s
argocd-dex-server-8577c4574-p9bfn               1/1     Running   0          7m16s
argocd-redis-8c568b5db-wzgnp                    1/1     Running   0          7m16s
argocd-repo-server-7b7dc6b757-msfkl             1/1     Running   0          7m16s
argocd-server-746c59b779-lqtmh                  1/1     Running   0          7m16s
  1. 修改ArgoCD缺省配置,使其支持通過“insecure”方式訪問。
$ PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
$ oc -n argocd patch deployment argocd-server -p $PATCH
deployment.extensions/argocd-server patched
  1. 創建訪問ArgoCD的Route。
$ oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect
route.route.openshift.io/argocd-server created
$ ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')

客戶端登錄

$ ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')
$ argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
'admin' logged in successfully
Context 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated

修改管理員密碼

  1. 將admin用戶的密碼修改爲“admin”。
$ argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password admin
Password updated
Context 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated

登錄Web控制檯

  1. 獲得ArgoCD的Route訪問地址。
$ oc get route argocd-server -o jsonpath='{.spec.host}'
argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com
  1. 用瀏覽器訪問Route地址,然後用admin/admin登錄即可。
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章