《Kubernetes应用篇:使用Helm工具部署mongodb 8.2.7 TLS/SSL副本集群》

《Kubernetes应用篇:使用Helm工具部署mongodb 8.2.7 TLS/SSL副本集群》 总结:整理不易,如果对你有帮助,可否点赞关注一下?更多详细内容请参考:《K8S集群运维指南》一、简介使用Helm结合Bitnami Chart是部署生产级mongodb到Kubernetes集群的事实标准方案。整个过程高度自动化,可以极大地简化运维复杂度。在实际生产环境中,为了保障稳定运行,通常会采用以下几种架构模式:1、主机信息,如下所示:IP地址节点名称操作系统K8S版本集群角色mongodb角色172.18.1.241kube-master-241Ubuntu 22.04.21.35.0control-plane节点-172.18.1.242kube-worker-242Ubuntu 22.04.21.35.0worker节点数据节点172.18.1.243kube-worker-243Ubuntu 22.04.21.35.0worker节点数据节点172.18.1.244kube-worker-244Ubuntu 22.04.21.35.0worker节点仲裁节点2、部署规划,如下所示:IP地址节点名称集群角色mongodb角色本地挂载目录说明172.18.1.241kube-master-241control-plane节点---172.18.1.242kube-worker-242worker节点数据节点/opt/basic-data/mongodb-data数据目录172.18.1.243kube-worker-243worker节点数据节点/opt/basic-data/mongodb-data数据目录172.18.1.244kube-worker-244worker节点仲裁节点/opt/basic-data/mongodb-backup备份目录说明:数据节点为primary或seconary角色,由mongodb副本集群决定,仲裁节点无需存储数据,不需要数据目录,这里将仲裁节点的/opt/basic-data/mongodb-backup目录作为副本集备份目录。二、创建PV持久卷说明:数据节点的PV持久卷使用local-static-provisioner实现,备份节点的PV持久卷使用local实现。2.1、创建数据节点PV持久卷1、准备数据节点本地存储说明:根据部署规划,副本集群为2个数据节点+1个仲裁节点,其中数据节点需要存储数据,仲裁节点无需存储数据,以下操作分别在kube-worker-242、kube-worker-243上执行。mkfs.xfs-f/dev/vdbmkdir/opt/basic-data/mongodb-datamount/dev/vdb /opt/basic-data/mongodb-data2、配置节点亲和性(强制执行分布策略)说明:给节点添加自定义标签(如local-storage=true)的主要目的是通过nodeSelector或节点亲和性,将特定的Pod精准调度到这些带有标签的节点上,从而满足对本地存储、硬件资源或网络拓扑的依赖。# kube-worker-242节点root@kube-master-241:~# kubectl label node kube-worker-242 local-storage=trueroot@kube-master-241:~# kubectl get node kube-worker-242 --show-labels | grep local-storage# kube-worker-243节点root@kube-master-241:~# kubectl label node kube-worker-243 local-storage=trueroot@kube-master-241:~# kubectl get node kube-worker-243 --show-labels | grep local-storage3、其它操作请参考《Kubernetes存储篇:基于local-static-provisioner 2.8.0工具自动创建持久化卷》如下图所示,则表明部署成功2.2、创建备份节点PV持久卷说明:如果使用独立K8s CronJob实现SSL定时备份,则需要准备本地存储,以下操作只需在kube-worker-244上执行。1、格式化磁盘并挂载目录mkfs.xfs-f/dev/vdbmkdir/opt/basic-data/mongodb-bakcupmount/dev/vdb /opt/basic-data/mongodb-bakcup2、创建PVroot@kube-master-241:~/backup# vim mongodb-backup-pv.yamlapiVersion: v1 kind: PersistentVolume metadata: name: mongodb-backup-pv spec: capacity: storage: 49Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage local: path: /opt/basic-data/mongodb-backup nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - kube-worker-2443、创建PVCroot@kube-master-241:~/backup# vim mongodb-backup-pvc.yamlapiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: mongodb name: mongodb-backup-pvc spec: accessModes: - ReadWriteOnce storageClassName: local-storage resources: requests: storage: 10Gi4、执行yaml文件root@kube-master-241:~/backup# kubectl apply -f mongodb-backup-pv.yamlroot@kube-master-241:~/backup# kubectl apply -f mongodb-backup-pvc.yaml如下图所示,则表示创建成功说明:local-pv-5d8b0b2b和local-pv-8202f2e8这两个PV是用来存储副本集群数据节点(primary或secondary)的数据,mongodb-backup-pv这个PV用来存储mongodb副本集备份数据。三、创建mongodb相关证书3.1、创建命名空间kubectl create ns mongodb3.2、创建mongodb证书步骤一:生成CA私钥和证书(有效期10年)/usr/bin/openssl genrsa-outca.key4096/usr/bin/openssl req-x509-new-nodes-keyca.key\-sha256-days3650-outca.crt-subj"/CN=MongoDB CA"步骤二:为所有Pod创建多SAN证书,创建配置文件openssl.conf[req]distinguished_name=req_distinguished_name req_extensions=v3_req prompt=no[req_distinguished_name]CN=mongodb-replicaset[v3_req]keyUsage=digitalSignature, keyEncipherment, dataEncipherment extendedKeyUsage=serverAuth, clientAuth subjectAltName=@alt_names[alt_names]DNS.1=mongodb-0 DNS.2=mongodb-0.mongodb-headless DNS.3=mongodb-0.mongodb-headless.mongodb.svc.cluster.local DNS.4=mongodb-1 DNS.5=mongodb-1.mongodb-headless DNS.6=mongodb-1.mongodb-headless.mongodb.svc.cluster.local DNS.7=mongodb-arbiter-0 DNS.8=mongodb-arbiter-0.mongodb-arbiter-headless DNS.9=mongodb-arbiter-0.mongodb-a