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)上加以實施新的配置。

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

ArgoCD

什麼是ArgoCD

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

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

在一個ArgoCD運行環境中包括以下組件:

1. API Server:API 服務器是一個 gRPC/REST 服務器,它公開 Web UI、CLI 和 CI/CD 系統使用的 API。

2. Repository Server:存儲庫服務器是一個內部服務,它維護包含應用程序清單的 Git 存儲庫的本地緩存。

3. Application Controller:應用程序控制器是 Kubernetes 控制器,它持續監視正在運行的應用程序,並將當前活動狀態與所需目標狀態進行比較(在Repo中的指定狀態)。當它檢測出OutOfSync應用程序狀態後就會選擇採取糾正措施。

安裝ArgoCD客戶端

<code>$ 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/<code>

安裝ArgoCD服務端

1. 創建argocd項目。

<code>$ oc new-project argocd/<code>

2. 部署ArgoCD資源。

<code>$ oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/install.yaml/<code>

3. 查看部署的pod運行情況。

<code>$ 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/<code>

4. 修改ArgoCD缺省配置,使其支持通過“insecure”方式訪問。

<code>$ 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/<code>

5. 創建訪問ArgoCD的Route。

<code>$ 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}')/<code>

客戶端登錄

<code>$ 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/<code>

如果此時報“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”錯誤,參見下面“重置管理員密碼”的說明。

修改管理員密碼

將admin用戶的密碼修改為“admin”。

<code>$ 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/<code>

重置管理員密碼

當安裝ArgoCD後第一次登錄的時候出現“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”錯誤,可以執行以下命令將admin用戶的密碼重置為“admin”。

<code>$ oc -n argocd patch secret argocd-secret \\
-p '{"stringData": {
"admin.password": "$2a$10$You1ZS2c11ew2qDZlWFlxOBXdl5P1L9R2NoR0Ib/.CMovnSN8dqZO",
"admin.passwordMtime": "'$(date +%FT%T%Z)'"
}}'/<code>

登錄Web控制檯

1. 獲得ArgoCD的Route訪問地址。

<code>$ oc get route argocd-server -o jsonpath='{.spec.host}'
argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com/<code>

2. 用瀏覽器訪問Route地址,然後用admin/admin登錄即可。

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


分享到:


相關文章: