GitOps是什麼?
簡而言之,GitOps 是使用 Git 拉取請求來管理IaaS和應用程式配置的實踐。GitOps 中的 Git 儲存庫被視為唯一的真理來源,它包含系統的整體狀態,以便使系統狀態的更改是可跟蹤和可稽核的。為了實現GitOps,需要通過程式碼實現對系統的定義和配置,這正是所謂的IaC(Infrastructure as Code)。那些定義了期望的系統或應用狀態的配置檔案被放在Git中,這樣通過Git的版本管理功能就很容易對系統或應用的配置進行回滾。除此以外,還可將一個Git作為多個雲環境的的統一配置庫,這樣能方便實現多雲環境下的聯邦叢集、多雲部署等統一管理功能。
整個系統採用宣告式描述在Git中可對系統狀態版本化批准的更改可以自動應用於系統軟體代理可確保正確性並警告差異為了實現將Git中的系統配置生效,就要執行一個代理,這就是GitOps服務。它可通過webhook接收或主動獲取Git的配置。當接收到系統配置發生變化事件後,GitOps服務可獲取最新的配置,然後根據策略在相關的基礎架構(例如OpenShift)上加以實施新的配置。
ArgoCD什麼是ArgoCDArgoCD是一個用於持續交付的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
2. 部署ArgoCD資源。
$ oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/install.yaml
3. 檢視部署的pod執行情況。
$ oc get podNAME READY STATUS RESTARTS AGEargocd-application-controller-ddb8c7bbc-sgh9r 1/1 Running 0 7m16sargocd-dex-server-8577c4574-p9bfn 1/1 Running 0 7m16sargocd-redis-8c568b5db-wzgnp 1/1 Running 0 7m16sargocd-repo-server-7b7dc6b757-msfkl 1/1 Running 0 7m16sargocd-server-746c59b779-lqtmh 1/1 Running 0 7m16s
4. 修改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 $PATCHdeployment.extensions/argocd-server patched
5. 建立訪問ArgoCD的Route。
$ oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirectroute.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 successfullyContext 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated
如果此時報“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”錯誤,參見下面“重置管理員密碼”的說明。
修改管理員密碼將admin使用者的密碼修改為“admin”。
$ argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password adminPassword updatedContext 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated
重置管理員密碼
當安裝ArgoCD後第一次登入的時候出現“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”錯誤,可以執行以下命令將admin使用者的密碼重置為“admin”。
$ oc -n argocd patch secret argocd-secret \\ -p '{"stringData": { "admin.password": "$2a$10$You1ZS2c11ew2qDZlWFlxOBXdl5P1L9R2NoR0Ib/.CMovnSN8dqZO", "admin.passwordMtime": "'$(date +%FT%T%Z)'" }}'
登入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
2. 用瀏覽器訪問Route地址,然後用admin/admin登入即可。