k8s安装nfs设置pv pvc并部署mysql

Posted gsls200808

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s安装nfs设置pv pvc并部署mysql相关的知识,希望对你有一定的参考价值。

在k8s系列第一篇中提到有一个用于nfs机器没有部署任何东西,这一篇我们来搭建nfs服务,并在k8s上部署mysql,并将mysql的data目录映射到nfs中。网上的部分教程为了简便教学用的hostPath做的映射,只是便于教学的简便做法,实际生产环境中还是需要nfs、对象存储等存储服务来支撑这个持久化。以下是详细的安装命令。

1.nfs服务端安装与配置

安装命令

#安装nfs-utils
yum install -y rpcbind nfs-utils
#创建nfs目录
mkdir -p /root/nfs_root/
vi /etc/exports
编辑/etc/exports输入如下内容
/root/nfs_root/ *(insecure,rw,sync,no_root_squash)
#启动和开机自弃
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server
#重新挂载 使 /etc/exports生效
exportfs -r
#查看共享情况
exportfs
#放行防火墙端口
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=111/udp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --reload

2.nfs客户端连接测试

安装命令

#安装nfs-utils
yum install -y nfs-utils
#创建挂载目录
mkdir -p /root/nfsmount
# 挂载远程nfs目录到本地
mount -t nfs 192.168.3.86:/root/nfs_root /root/nfsmount
# 写入一个测试文件
echo "hello nfs server" > /root/nfsmount/test.txt
cat /root/nfsmount/test.txt

3.k8s机器配置

k8s节点机器也需要安装nfs-utils否则有可能报 bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount错误

#安装nfs-utils
yum install -y nfs-utils

4.部署mysql

以部署mysql数据库为例,配置pv pvc

4.1 nfs目录初始化

nfs机器创建mysql数据库空目录

nfs创建数据库目录
cd /root/nfs_root
mkdir mysql

4.2 编写pv pvc deploy配置文件

编写pv配置,文件名mysql-pv.yaml,内容如下

kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-pv
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce      
  capacity:
    storage: 4Gi
  persistentVolumeReclaimPolicy: Retain
  storageClassName: course-nfs-storage
  nfs:
    path: /root/nfs_root/mysql
    server: 192.168.3.86

编写pvc配置,文件名mysql-pvc.yaml,内容如下

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  storageClassName: course-nfs-storage

编写ConfigMap配置,文件名mysql-config.yaml,内容如下

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: default
data:
  my.cnf: |
        [client]
        default-character-set=utf8mb4
        [mysql]
        default-character-set=utf8mb4
        [mysqld] 
        max_connections = 2000
        secure_file_priv=/var/lib/mysql
        sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

编写deployment配置,文件名mysql-deploy.yaml,内容如下

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploy
  namespace: default
spec:
  selector:
    matchLabels:
      app: mysql-deploy
  template:
    metadata:
      labels:
        app: mysql-deploy
    spec:
      containers:
      - name: mysql-deploy
        image: mysql:8.0.28
        args:
        - --default_authentication_plugin=mysql_native_password
        - --character-set-server=utf8mb4
        - --collation-server=utf8mb4_unicode_ci
        env:                        
        - name: MYSQL_ROOT_PASSWORD
          value: "12345678"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
        - name: mysql-config
          mountPath: /etc/mysql/conf.d/my.cnf         
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
      - name: mysql-config
        configMap:
          name: mysql-config      
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-deploy
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 31111
  selector:
    app: mysql-deploy

在k8s任意节点机器按顺序执行下面四个kubectl apply指令部署。

kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-config.yaml
kubectl apply -f mysql-deploy.yaml

如果部署过程中出现错误,查出问题后按下面的顺序回退部署,修正后再执行apply

kubectl delete -f mysql-deploy.yaml
kubectl delete -f mysql-config.yaml
kubectl delete -f mysql-pvc.yaml
kubectl delete -f mysql-pv.yaml

4.3数据库连接测试

根据deploy里暴露的端口和密码进行连接

端口 31111

root密码 12345678

连接如图

4.4常见指令

以下是排查问题经常用到的指令

#查看storageclass资源
kubectl get storageclass
#查看pv资源
kubectl get pv
#查看pvc资源
kubectl get pvc
#查看configmap资源 kuboard面板翻译为字典
kubectl get configmap
#查看所有pod
kubectl get pod -A
#查看mysql数据库pod描述
kubectl describe pod mysql-deploy-6988b847b7-q4pfx
#查看mysql数据库pod日志
kubectl logs mysql-deploy-6988b847b7-q4pfx

以上是关于k8s安装nfs设置pv pvc并部署mysql的主要内容,如果未能解决你的问题,请参考以下文章

k8s实践17:kubernetes对接nfs存储实现pvc动态按需创建分配绑定pv

k8s存储(部署理论)

云原生之kubernetes实战kubernetes集群下的存储持久化

实战:k8s持久化存储pv和pvc-2021.11.16

23,k8s 之PV,PVC

k8s中部署基于nfs的StorageClass