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