kubernetes 部署 rocketmq 集群
以下所用到的文件皆在: https://gitee.com/glnp/docker-case.git
介绍
详细介绍查看rocketmq 介绍和容器部署
本案例部署的是RocketMQ的"双主双从+同步模式",涉及6个pod:
- broker-a 主1
- broker-b 主2
- broker-a-s 从1
- broker-a-s 从2
- NameServer(注册中心)
- rocketmq-externals(可视化web界面)
部署过程记录
准备nfs-client-provisioner
编写脚本安装nfs
#! /usr/bin/env python3
import platform
import os
import stat
def init_nfs():
'''
:param nfs_str: nfs 中共享挂载路径参数
'''
nfs_str="/data/nfs *(rw,sync,no_root_squash,no_subtree_check)"
with open('/etc/exports','w',encoding='utf8') as n:
n.write(nfs_str)
if not os.path.exists('/data/nfs'):
'''
:param exisk_ok: 如果为真执行 -p 操作
'''
os.makedirs('/data/nfs',exist_ok=True) # 如果指定的路径不存在,新建
# 授权,相当于执行 --> chmod 777 /data/nfs
os.chmod('/data/nfs',stat.S_IRWXU+stat.S_IRWXG+stat.S_IRWXO)
def main():
'''
:param system_type: 操作系统类型 例: ubuntu | centos
'''
system_type=platform.uname().version.lower()
if 'ubuntu' in system_type:
#安装nfs
os.system('apt install -y nfs-kernel-server rpcbind')
init_nfs()
# 启动&开机自启
os.system('systemctl start rpcbind && systemctl start nfs-kernel-server.service')
#如果未启动成功,请手动执行: /etc/init.d/nfs-kernel-server restart
os.system('systemctl enable rpcbind && systemctl enable nfs-kernel-server.service')
elif 'centos' in system_type:
#安装nfs
os.system('yum install -y nfs-utils rpcbind')
init_nfs()
# 启动&开机自启
os.system('systemctl start rpcbind && systemctl start nfs-server')
os.system('systemctl enable rpcbind && systemctl enable nfs-server')
if __name__=='__main__':
main()
安装
python3 init_nfs.py
创建 rbac
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner
namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-runner
namespace: default
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "endpoints"]
verbs: ["get","create","list", "watch","update"]
- apiGroups: ["extensions"]
resources: ["podsecuritypolicies"]
resourceNames: ["nfs-provisioner"]
verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-provisioner
subjects:
- kind: ServiceAccount
name: nfs-provisioner
namespace: default
roleRef:
kind: ClusterRole
name: nfs-provisioner-runner
apiGroup: rbac.authorization.k8s.io
部署,查看
kubetcl nfs-rbac.yaml
#查看
kubectl get sa
NAME SECRETS AGE
default 1 37d
nfs-provisioner 1 19s
创建storageclass
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
namespace: default
annotations:
storageclass.kubernetes.io/is-default-class: "false" ## 是否设置为默认的storageclass
provisioner: nfs-client ## 动态卷分配者名称,必须和上面创建的"provisioner"变量中设置的Name一致
reclaimPolicy: Retain ## 指定回收政策,storage 默认为 Delete
部署,查看
kubectl apply -f nfs-storageclass.yaml
#查看
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 37d
nfs-storage nfs-client Retain Immediate false 14s
创建nfs-client-provisioner
项目仓库地址: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
namespace: default
spec:
replicas: 1
selector:
matchLabels: