网站首页 > 博客文章 正文
部署架构
本文介绍如何利用ArgoCD在三个OpenShift集群上部署一套MongoDB的主从集群。下一章节再在部署三个OpenShift集群上部署应用访问MongoDB集群。
部署MongoDB主从集群
准备操作环境
1. 操作环境以Linux为例。
2. 正常安装ArgoCD服务器和客户端。
3. 将https://github.com/openshift/federation-dev.git复制一份到自己的github账号,然后再clone一份到本地。最后将本地的federation-dev/labs/utility/目录中的文件全部赋予可执行权限,并将该目录放到PATH环境变量中。
4. 参照我在头条中《OpenShift 4 之 GitOps(1)安装ArgoCD环境》。
5. 在https://pkg.cfssl.org/下载对应平台的cfssl和cfssljson软件。
配置ArgoCD
参考《OpenShift 4 之 GitOps(4)用ArgoCD向多OpenShift集群发布应用》,先通过“oc config rename-context <*NEW_NAME*>”命令修改三个OpenShift集群的Config Context名称(分别命名为cluster1、cluster2、cluster3),然后通过“argocd cluster add *<CONTEXT_NAME>*”命令分别将三个OpenShift集群加到ArgoCD环境中。
准备MongoDB所需证书
为了让MongoDB可通过TLS访问,需要生成证书和秘钥。
1. 进入lab-6-assets目录,然后创建三个文件,分别是ca-config.json,ca-csr.json,mongodb-csr.json。
$ cd ~/federation-dev/labs/lab-6-assets
$ cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": ["signing", "key encipherment", "server auth", "client auth"],
"expiry": "8760h"
}
}
}
}
EOF
$ cat > ca-csr.json <<EOF
{
"CN": "Kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "Austin",
"O": "Kubernetes",
"OU": "TX",
"ST": "Texas"
}
]
}
EOF
$ cat > mongodb-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "Austin",
"O": "Kubernetes",
"OU": "TX",
"ST": "Texas"
}
]
}
EOF
```
2. 生成CA文件。
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca
3. 设置所需环境变量,最后创建MongoDB证书。
$ NAMESPACE=mongo
$ SERVICE_NAME=mongo
$ ROUTE_CLUSTER1=mongo-cluster1.$(oc --context=cluster1 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ ROUTE_CLUSTER2=mongo-cluster2.$(oc --context=cluster2 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ ROUTE_CLUSTER3=mongo-cluster3.$(oc --context=cluster3 get ingresses.config.openshift.io cluster -o jsonpath='{ .spec.domain }')
$ SANS="localhost,localhost.localdomain,127.0.0.1,${ROUTE_CLUSTER1},${ROUTE_CLUSTER2},${ROUTE_CLUSTER3},${SERVICE_NAME},${SERVICE_NAME}.${NAMESPACE},${SERVICE_NAME}.${NAMESPACE}.svc.cluster.local"
$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -hostname=${SANS} -profile=kubernetes mongodb-csr.json | cfssljson -bare mongodb
4. 合并秘钥和证书文件。
$ cat mongodb-key.pem mongodb.pem > mongo.pem
更新被部署的YAML文件
在Gitops中所有部署对象都是YAML文件,所以在通过ArgoCD执行YAML之前,我们还需要将和操作环境相关的配置更新到YAML中。
1. 修改本地的mongo-secret.yaml文件
$ sed -i "s/mongodb.pem: .*$/mongodb.pem: $(openssl base64 -A < mongo.pem)/" base/mongo-secret.yaml
$ sed -i "s/ca.pem: .*$/ca.pem: $(openssl base64 -A < ca.pem)/" base/mongo-secret.yaml
2. 修改本地的mongo-rs-deployment.yaml文件
$ sed -i "s/primarynodehere/${ROUTE_CLUSTER1}:443/" base/mongo-rs-deployment.yaml
$ sed -i "s/replicamembershere/${ROUTE_CLUSTER1}:443,${ROUTE_CLUSTER2}:443,${ROUTE_CLUSTER3}:443/" base/mongo-rs-deployment.yaml
3. 修改本地的mongo-route.yaml文件
$ sed -i "s/mongocluster1route/${ROUTE_CLUSTER1}/" overlays/cluster1/mongo-route.yaml
$ sed -i "s/mongocluster2route/${ROUTE_CLUSTER2}/" overlays/cluster2/mongo-route.yaml
$ sed -i "s/mongocluster3route/${ROUTE_CLUSTER3}/" overlays/cluster3/mongo-route.yaml
4. 将mongo-secret.yaml、mongo-rs-deployment.yaml、mongo-route.yaml更新至自己的github。
在三个OpenShift集群中部署MongoDB
1. 将自己github账号(<MY-GITHUB>)中的三个MongoDB集群的配置加入到ArgoCD中。
$ MY_GITHUB=https://github.com/<MY-GITHUB>/federation-dev.git
$ argocd app create --project default --name cluster1-mongo \
--repo ${MY_GITHUB} \
--path labs/lab-6-assets/overlays/cluster1 \
--dest-server $(argocd cluster list | grep cluster1 | awk '{print $1}') \
--dest-namespace mongo --revision master --sync-policy automated
$ argocd app create --project default --name cluster2-mongo \
--repo ${MY_GITHUB} \
--path labs/lab-6-assets/overlays/cluster2 \
--dest-server $(argocd cluster list | grep cluster2 | awk '{print $1}') \
--dest-namespace mongo --revision master --sync-policy automated
$ argocd app create --project default --name cluster3-mongo \
--repo ${MY_GITHUB} \
--path labs/lab-6-assets/overlays/cluster3 \
--dest-server $(argocd cluster list | grep cluster3 | awk '{print $1}') \
--dest-namespace mongo --revision master --sync-policy automated
如果对自己Github账户中的部署文件进行了更改,可执行以下命令手动同步到ArgoCD。
$ argocd app sync cluster1-mongo
$ argocd app sync cluster2-mongo
$ argocd app sync cluster3-mongo
2. 运行命令,查看三个ArgoCD app的状态。直到它们变为“Healthy”即完成。
$ argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
cluster1-mongo https://api.cluster-shanghai-fba4.shanghai-fba4.example.opentlc.com:6443 mongo default OutOfSync Healthy Auto <none> https://github.com/liuxiaoyu-git/federation-dev.git labs/lab-6-assets/overlays/cluster1 master
cluster2-mongo https://api.cluster-beijing-7536.beijing-7536.example.opentlc.com:6443 mongo default OutOfSync Healthy Auto <none> https://github.com/liuxiaoyu-git/federation-dev.git labs/lab-6-assets/overlays/cluster2 master
cluster3-mongo https://api.cluster-shanghai-e90b.shanghai-e90b.sandbox1824.opentlc.com:6443 mongo
3. 查看三个OpenShift集群中的Deployment和Route对象都正常。
$ for cluster in cluster1 cluster2 cluster3; do oc --context $cluster -n mongo get deployment mongo; done
$ for cluster in cluster1 cluster2 cluster3; do oc --context $cluster -n mongo get deployment mongo; done
## 配置MongoDB的ReplicaSet
1. 执行命令通过给pod打标签,将cluster1设为ReplicaSet的primary replica角色。
$ MONGO_POD=$(oc --context=cluster1 -n mongo get pod --selector="name=mongo" --output=jsonpath='{.items..metadata.name}')
$ oc --context=cluster1 -n mongo label pod $MONGO_POD replicaset=primary
2. 执行命令(该命令在federation-dev/labs/utility目录中),查看MongoDB ReplicaSet的状态。
$ wait-for-mongo-replicaset cluster1 mongo 3
Checking if MongoDB Replicaset from namespace mongo on cluster cluster1 is configured
。。。
MongoDB ReplicaSet Status:
--------------------------
Primary Member:
"mongo-cluster1.apps.cluster-shanghai-fba4.shanghai-fba4.example.opentlc.com:443"
Secondary Members:
"mongo-cluster2.apps.cluster-beijing-7536.beijing-7536.example.opentlc.com:443"
"mongo-cluster3.apps.cluster-shanghai-e90b.shanghai-e90b.sandbox1824.opentlc.com:443"
注意:在操作的时候如果出现作为Primary成员的cluster1的状态如果不正常(后台的MongoCD Pod出现CrashLoopBackOff),可以尝试先执行以下命令删除cluster1的“replicaset=primary”的标签,然后再修改本节(1)步骤的命令(将cluster2或cluste在r3设为Primary成员),最后在执行修改后的命令。
一旦在此步骤更换了replicaset的primary,后面所有和MongoDB
$ oc --context=cluster1 -n mongo label pod $MONGO_POD replicaset-
3. 执行命令,查看MongoDB的Replicaset。确认其中三个member的"name"、"stateStr"和"syncingTo"字段内容,确认三个成员的相互关系是"stateStr"为"SECONDARY"的成员其"syncingTo"指向的是"stateStr"为"PRIMARY"的成员。
$ MONGO_POD=$(oc --context=cluster1 -n mongo get pod --selector="name=mongo" --output=jsonpath='{.items..metadata.name}')
$ oc --context=cluster1 -n mongo exec $MONGO_POD \
-- bash -c 'mongo --norc --quiet --username=admin --password=$MONGODB_ADMIN_PASSWORD --host localhost admin --tls --tlsCAFile /opt/mongo-ssl/ca.pem --eval "rs.status()"'
此时在三个OpenShift集群中就配置好了三个具备主从关系的MongoDB集群。
猜你喜欢
- 2024-11-09 Argo CD实践-如何在ArgoCD中创建应用程序App
- 2024-11-09 GitOps(8)使用OpenShift的ArgoCD Operator
- 2024-11-09 Argo CD发布零日漏洞补丁(零日漏洞防御)
- 2024-11-09 为什么CI和CD需要分道扬镳?(ci和cd是什么意思)
- 2024-11-09 数据库的GITOPS第二部分 – ATLAS OPERATOR和ARGOCD
- 2024-11-09 极狐GitLab 和 ArgoCD 集成实现 GitOps
- 2024-11-09 OpenShift 4 之 GitOps(1)安装ArgoCD环境
- 2024-11-09 最全的GitOps工具选型,30+款工具随你挑
- 2024-11-09 在K8S中使用Argo CD做持续部署(k8s部署apollo)
- 2024-11-09 使用 GitLab CI 与 Argo CD 进行 GitOps 实践
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)