OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman應用集羣

本文是《OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主從集羣》基礎上進一步在三個OpenShift集羣中部署Pacman應用。

Pacman應用部署架構

其運行架構如下圖。其中在每個OpenShift集羣運行一套Pacman應用集羣,用戶的請求是通過設在三套Pacman應用集羣前端的HAProxy進入的。在本環境中,我們將HAPorxy運行在cluster1上。
在這裏插入圖片描述

部署HAProxy

  1. 在OpenShift的cluster1集羣中創建haproxy-lb項目和Route對象。注意:HAPROXY_LB_ROUTE變量是爲HAProxy設置的訪問地址。
$ cd ~/federation-dev/labs/haproxy-yaml
$ oc --context cluster1 new-project haproxy-lb
$ HAPROXY_LB_ROUTE=pacman-multicluster.$(oc --context=cluster1 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ oc --context cluster1 -n haproxy-lb create route edge haproxy-lb \
--service=haproxy-lb-service --port=8080 --insecure-policy=Allow \
--hostname=${HAPROXY_LB_ROUTE}
  1. 設置HAProxy使用的configmap。
$ PACMAN_INGRESS=pacman-ingress.$(oc --context=cluster1 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ PACMAN_CLUSTER1=pacman.$(oc --context=cluster1 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ PACMAN_CLUSTER2=pacman.$(oc --context=cluster2 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ PACMAN_CLUSTER3=pacman.$(oc --context=cluster3 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ cp haproxy.tmpl haproxy
$ sed -i "/option httpchk GET/a \ \ \ \ http-request set-header Host ${PACMAN_INGRESS}" haproxy
$ sed -i "s/<pacman_lb_hostname>/${PACMAN_INGRESS}/g" haproxy
$ sed -i "s/<server1_name> <server1_pacman_route>:<route_port>/cluster1 ${PACMAN_CLUSTER1}:80/g" haproxy
$ sed -i "s/<server2_name> <server2_pacman_route>:<route_port>/cluster2 ${PACMAN_CLUSTER2}:80/g" haproxy
$ sed -i "s/<server3_name> <server3_pacman_route>:<route_port>/cluster3 ${PACMAN_CLUSTER3}:80/g" haproxy
$ oc --context cluster1 -n haproxy-lb create configmap haproxy --from-file=haproxy
  1. 創建HAProxy對應的Service和Deployment對象,然後確認對象已經被創建好
$ oc --context cluster1 -n haproxy-lb create -f haproxy-clusterip-service.yaml
$ oc --context cluster1 -n haproxy-lb create -f haproxy-deployment.yaml
$ oc --context cluster1 -n haproxy-lb get svc deployment
  1. 訪問HAProxy。由於當前還沒有部署Pacman應用,所以顯示“503 Service Unavailable”頁面。
$ HAPROXY_LB_ROUTE=$(oc --context cluster1 -n haproxy-lb get route haproxy-lb -o jsonpath='{.status.ingress[*].host}')
$ curl -k https://${HAPROXY_LB_ROUTE}
<html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>

部署Pacman應用

  1. 進入“lab-7-assets”目錄,然後替換base/pacman-deployment.yaml文件中的內容,爲Pacman應用設置MongoDB的訪問地址。
$ cd ~/federation-dev/labs/lab-7-assets
$ MONGO_CLUSTER1=$(oc --context=cluster1 -n mongo get route mongo -o jsonpath='{.status.ingress[*].host}')
$ MONGO_CLUSTER2=$(oc --context=cluster2 -n mongo get route mongo -o jsonpath='{.status.ingress[*].host}')
$ MONGO_CLUSTER3=$(oc --context=cluster3 -n mongo get route mongo -o jsonpath='{.status.ingress[*].host}')
$ sed -i "s/replicamembershere/${MONGO_CLUSTER1},${MONGO_CLUSTER2},${MONGO_CLUSTER3}/g" base/pacman-deployment.yaml
  1. 修改Pacman應用的Route Ingress地址。
$ PACMAN_INGRESS=pacman-ingress.$(oc --context=cluster1 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ sed -i "s/pacmanhosthere/${PACMAN_INGRESS}/g" base/pacman-route.yaml
  1. 將pacman-deployment.yaml和pacman-route.yaml文件內容更新到自己的Github賬戶()中對應的文件。
  2. 在ArgoCD中新建三個應用cluster1-pacma、cluster2-pacma、cluster3-pacma,它們分別通過“–path”參數使用了不同的配置。
$ argocd app create --project default --name cluster1-pacman \
--repo https://github.com/<MY-GITHUB>/federation-dev.git \
--path labs/lab-7-assets/overlays/cluster1 \
--dest-server $(argocd cluster list | grep cluster1 | awk '{print $1}') \
--dest-namespace pacman --revision master --sync-policy automated
 
$ argocd app create --project default --name cluster2-pacman \
--repo https://github.com/<MY-GITHUB>/federation-dev.git \
--path labs/lab-7-assets/overlays/cluster2 \
--dest-server $(argocd cluster list | grep cluster2 | awk '{print $1}') \
--dest-namespace pacman --revision master --sync-policy automated
 
$ argocd app create --project default --name cluster3-pacman \
--repo https://github.com/<MY-GITHUB>/federation-dev.git \
--path labs/lab-7-assets/overlays/cluster3 \
--dest-server $(argocd cluster list | grep cluster3 | awk '{print $1}') \
--dest-namespace pacman --revision master --sync-policy automated

如果對自己Github賬戶中的部署文件進行了更改,可執行以下命令手動同步到ArgoCD。

$ argocd app sync cluster1-pacman
$ argocd app sync cluster2-pacman
$ argocd app sync cluster3-pacman
  1. 執行命令查看三個集羣中應用資源創建情況。
$ for i in cluster1 cluster2 cluster3; do oc get namespace pacman --context $i; done
$ for cluster in cluster1 cluster2 cluster3; do oc get deployment pacman --context $i;done
  1. 獲得Pacman應用訪問地址,然後用瀏覽器訪問即可。
$ oc --context=cluster1 -n haproxy-lb get route haproxy-lb -o jsonpath="{.status.ingress[*].host}{\"\n\"}"
pacman-multicluster.apps.cluster-beijing-7536.beijing-7536.example.opentlc.com/

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章