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_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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您提供一个参考Kubernetes YAML配置文件,用于创建MySQL集群:apiVersion: v1 kind: Service metadata: name: mysql-cluster spec: selector: app: mysql ports: - port: 3306 targetPort: 3306 name: mysql--- apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql-cluster replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - image: mysql:5.7 name: mysql ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 2Gi ### 回答2: 要编写一个Kubernetes的YAML配置文件来创建mysql集群,可以按照以下步骤进行操作: 1. 创建一个命名空间(namespace):在YAML配置文件中,使用`kind: Namespace`来创建一个命名空间,并指定命名空间的名称。 2. 创建一个持久卷声明(PersistentVolumeClaim):在YAML配置文件中,使用`kind: PersistentVolumeClaim`来创建一个持久卷声明,并指定名称、存储类、存储大小等属性。 3. 创建一个配置文件(ConfigMap):在YAML配置文件中,使用`kind: ConfigMap`来创建一个配置文件,用于存储mysql集群的配置参数。 4. 创建一个服务(Service):在YAML配置文件中,使用`kind: Service`来创建一个服务,用于提供mysql集群的访问入口。 5. 创建一个状态fulset(StatefulSet):在YAML配置文件中,使用`kind: StatefulSet`来创建一个状态fulset,用于部署和管理mysql集群的多个实例。在状态fulset的模板中,需要指定容器镜像、容器端口、环境变量等属性。 6. 创建一个访问mysql的客户端(Deployment):在YAML配置文件中,使用`kind: Deployment`来创建一个部署,用于访问mysql集群的客户端。在部署的模板中,需要指定容器镜像、容器端口、环境变量等属性。 通过以上步骤,可以编写一个包含命名空间、持久卷声明、配置文件、服务、状态fulset和客户端部署的YAML配置文件,用于创建一个mysql集群。具体的配置细节根据实际需求进行调整和修改。 ### 回答3: 要编写一个Kubernetes的YAML配置文件来创建MySQL集群,可以按照以下步骤进行操作: 1. 创建一个命名空间,用于部署MySQL集群: ```yaml apiVersion: v1 kind: Namespace metadata: name: mysql ``` 2. 创建一个ConfigMap,用于配置MySQL的环境变量和配置文件: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: mysql-config namespace: mysql data: my.cnf: | [mysqld] server-id=1 log_bin ``` 3. 创建一个StatefulSet,用于创建MySQL的主实例和副本实例: ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql namespace: mysql spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: password ports: - containerPort: 3306 volumeMounts: - name: mysql-pvc mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-pvc spec: storageClassName: standard accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 4. 创建一个Service,用于暴露MySQL服务: ```yaml apiVersion: v1 kind: Service metadata: name: mysql namespace: mysql spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 ``` 以上就是创建MySQL集群的Kubernetes YAML配置文件的简要示例,可以根据实际需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值