OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群

文章目录

  • Pacman应用部署架构
  • 部署HAProxy
    • 部署Pacman应用

本文是《OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主从集群》基础上进一步在三个OpenShift集群中部署Pacman应用。

Pacman应用部署架构

其运行架构如下图。其中在每个OpenShift集群运行一套Pacman应用集群,用户的请求是通过设在三套Pacman应用集群前端的HAProxy进入的。在本环境中,我们将HAPorxy运行在cluster1上。
OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群_第1张图片

部署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_INGRESS}/g" haproxy
$ sed -i "s/ :/cluster1 ${PACMAN_CLUSTER1}:80/g" haproxy
$ sed -i "s/ :/cluster2 ${PACMAN_CLUSTER2}:80/g" haproxy
$ sed -i "s/ :/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/

OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群_第2张图片

你可能感兴趣的:(GitOps,ArgoCD)