kubenetes使用nfs配置Persistent Volume部署mysql
一、部署nfs(networ file system)k8s-master 节点上搭建了 NFS 服务器,也可以在部署节点搭建,原理一样(1)安装nfs服务:yum install -y nfs-utils rpcbind创建修改/etc/exports文件vim /etc/exports/root/nfsdata *(rw,no_root_squash,no_all...
一、部署nfs(networ file system)
k8s-master 节点上搭建了 NFS 服务器,也可以在部署节点搭建,原理一样
(1)安装nfs服务:
yum install -y nfs-utils rpcbind
创建修改/etc/exports文件
vim /etc/exports
/root/nfsdata *(rw,no_root_squash,no_all_squash,sync)
(2)保存配置文件后,执行如下操作:
在服务端创建对应的目录和赋予权限:
mkdir /root/nfsdata
chmod 777 /root/nfsdata
(3) 启动rpcbind和nfs服务:
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfs
(4) 生效共享目录
exportfs -a
这时可以关闭服务器防火墙
或者
查看rpcinfo -p,查看nfs都占用那些端口,这些端口都要开启访问
rpcinfo -p
显示如下端口
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 20048 mountd
100024 1 udp 52787 status
100005 1 tcp 20048 mountd
100024 1 tcp 28864 status
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 49581 nlockmgr
100021 3 udp 49581 nlockmgr
100021 4 udp 49581 nlockmgr
100021 1 tcp 30569 nlockmgr
100021 3 tcp 30569 nlockmgr
100021 4 tcp 30569 nlockmgr
全部开启端口
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=111/udp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=52787/tcp
firewall-cmd --permanent --add-port=28864/tcp
firewall-cmd --permanent --add-port=49581/tcp
firewall-cmd --permanent --add-port=30569/tcp
(5)每个node安装nfs工具
yum install -y nfs-utils
systemctl start nfs && systemctl enable nfs
(6) 每个node查询NFS服务器
showmount -e ip地址
二、创建PersistentVolume
要提前在nfsdata建立文件夹pv-mysql-data,给777权限
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-mysql-data
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /root/nfsdata/pv-mysql-data
server: k8s-master
三、创建PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-mysql-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: nfs
四、创建ConfigMap,设置key为mysqld.cnf,内容为mysql的配置
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-mysql-config
data:
mysqld.cnf: |
[mysqld]
user=mysql
socket = /var/run/mysqld/mysqld.sock
# 设置3306端口
port=3306
# 设置mysql数据库的数据的存放目录
datadir=/var/lib/mysql
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 排序规则
collation-server=utf8_general_ci
# ip绑定
bind-address = 0.0.0.0
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
socket=/var/run/mysqld/mysqld.sock
default-character-set=utf8
[mysqld_safe]
# 设置错误日志文件
log-error=/var/log/mysqld.log
# 指定pid文件
pid-file=/var/run/mysqld/mysqld.pid
五、创建mysql deployment和service
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort # 设为NodePort
selector:
app: mysql
ports:
- protocol: "TCP"
port: 3306
targetPort: 3306
nodePort: 30306 # 设置nodePort,把端口映射到外部
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:latest
name: mysql
env: # Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
- name: mysql-conf
mountPath: /etc/mysql/conf.d/ #注意mysql8.x的配置路径是这个路径
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: pvc-mysql-data
- name: mysql-conf
configMap:
name: cm-mysql-config
items:
- key: mysqld.cnf
path: mysqld.cnf
启动成功
# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-5b7b8cdf85-c2dst 1/1 Running 0 54s
# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 66s
六、尝试用SQLyog连接mysql
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,所以老的mysql客户端工具(navicat、SQLyog)连接会报错
# k8s进入mysqlpod中的mysql容器
kubectl exec -it mysql-5b7b8cdf85-c2dst --container mysql -- sh
kubectl exec -it pod名 --container 容器名 -- sh
# 登录
mysql -u root -p
# 切换数据库
use mysql;
# 修改root的密码,并制定旧的加密方式为mysql_native_password
alter user 'root'@'%' identified with mysql_native_password by '你的密码';
#刷新权限
flush privileges;
更多推荐
所有评论(0)