1 概述
本文档将介绍在K8S集群环境中部署MeterSphere 的操作过程,不包括部署K8S的过程。
2 部署说明
2.1 环境说明
(1)演示使用metersphere版本:v1.16.4
(2) k8s节点包括1台master和1台worker,提前用kubeoperator自动部署k8s集群,如果是腾讯云,节点IP要使用内网IP,不能用弹性IP
(3) 应用部署控制管理器使用deployment
(4) 持久化存储使用hostPath写入到NFS挂载目录
2.2 NFS挂载方式
在master配置nfs服务,并将nfs共享目录/nfs_storage挂在到了两个节点中的/opt/nfs
如下图所示:
3 NFS挂载
3.1 安装NFS服务端(Master节点)
在master节点上安装NFS服务器
yum -y install nfs-utils
安装nfs+rpc
yum -y install nfs-utils rpcbind
验证NFS安装
rpm -qa nfs-utils
在服务端创建共享目录/nfs_storage (目录可自定义)
mkdir -p /nfs_storage
chmod 666 /nfs_storage
修改 NFS 配置文件 /etc/exports
vim /etc/exports
/nfs_storage
xx.xx.xx.xx(rw,sync,insecure,no_subtree_check,no_root_squash) xx.xx.xx.xx(rw,sync,insecure,no_subtree_check,no_root_squash)
# xx.xx.xx.xx 为MeterSphere节点IP
如下图所示:
重载配置数据
exportfs -rv
启动rpc
systemctl start rpcbind
设置rpc开机启动
systemctl enable rpcbind
检查RPC
rpcinfo -p localhost
启动 NFS 服务
systemctl start nfs
systemctl enable nfs
3.2 安装NFS客户端(Worker节点)
在MeterSphere节点上安装NFS客户端
yum -y install nfs-utils
检查rpc服务
查看服务器端挂载目录(判断网络是否通)
showmount -e xx.xx.xx.xx # xx.xx.xx.xx为NGINX服务器IP
将服务器端目录挂在到本地
mkdir -p /opt/nfs/metersphere
mount -t nfs xx.xx.xx.xx:/nfs_storage /opt/nfs/metersphere # xx.xx.xx.xx为NGINX服务器IP(如果报错,检查NFS状态,是否正常启动)
验证:在服务器端 /nfs_storage路径下新建文件后去客户端挂载目录查看是否同步
4 部署MS
4.1.1 创建NFS-CLIENT
kubectl create -f nfs-deployment.yaml
以下是yalm文件内容(172.16.16.12 和/nfs_storage,这两个是NFS服务IP和共享目录,根据实际情况修改)
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/wangfang-dev/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: mycase
- name: NFS_SERVER
value: 172.16.16.12
- name: NFS_PATH
value: /nfs_storage
volumes:
- name: nfs-client-root
nfs:
server: 172.16.16.12
path: /nfs_storage
kubectl get po 查看nfs-client
4.1.2 创建存储类
kubectl create -f class.yaml
kubectl get sc查看存储类
以下为 class.yaml 文件内容:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: default
provisioner: mycase
4.1.3 赋权
kubectl create clusterrolebinding gitlab-cluster-admin --clusterrole=cluster-admin --group=system:serviceaccounts --namespace=dev
4.1.4 导入镜像
将MeterSphere安装包中的镜像一次导入到系统中,或导入到harbor中;此次演示环境没有配置harbor,直接导入到两个k8s节点中,每个节点都要导入所有镜像:
cd /opt/metersphere-offline-installer-v1.16.4/
for i in ls images; do docker load < $i; done
4.1.5 创建MS应用
创建命名空间
kubectl create ns ms
提前下载好helm离线包,直接helm 部署 MeterSphere
helm install metersphere metersphere.tgz -n ms
部署完成后,通过 kubectl get pods -n ms 查看MeterSphere 各个POD的运行状态4.1.6 创建node-port端口映射
kubectl create -f ms-server-nodeport.yaml
以下为ms-server-nodeport.yaml文件内容:
apiVersion: v1
kind: Service
metadata:
name: metersphere-server-nodeport
namespace: ms
spec:
ports:
- name: metersphere-server
protocol: TCP
port: 8081
targetPort: 8081
nodePort: 30801
type: NodePort
selector:
app: metersphere-server