Kubernetes基于StatefulSet部署MySQL

1 说明

1.1 环境说明

2 部署MySQL单节点服务

2.1 创建部署文件

  • 部署文件:在K8S集群的Master节点中创建一个名称为mysql.yaml的部署文件,该文件的内容如下所示。
    # mysql配置
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-config-map
    data:
      MYSQL_ROOT_PASSWORD: '123456'
    
    ---
    # 数据存储卷
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv-data-mysql
    spec:
      capacity:
        storage: 1Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      storageClassName: slow
      nfs:
        server: nfs.k8s.com
        path: /mnt/nfs/data/mysql
    
    ---
    # mysql容器
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      replicas: 1
      serviceName: mysql-service
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - name: mysql
            image: registry.k8s.com/k8s/mysql:5.7
            imagePullPolicy: IfNotPresent
            ports:
            - name: mysql
              containerPort: 3306
              protocol: TCP
            envFrom:
            - configMapRef:
                name: mysql-config-map
            resources:
              requests:
                cpu: 1
                memory: 512Mi
              limits:
                cpu: 1
                memory: 512Mi
            volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
          imagePullSecrets:
            - name: k8s-auth
      volumeClaimTemplates:
      - metadata:
          name: mysql-data
        spec:
          accessModes: ["ReadWriteOnce"]
          volumeMode: Filesystem
          resources:
            requests:
              storage: 1Gi
          storageClassName: slow
    
    ---
    # 内部访问的无头服务
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-service
    spec:
      selector:
        app: mysql
      ports:
      - name: mysql
        port: 3306
      clusterIP: None
    
    ---
    # 外部访问的服务
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-external-service
    spec:
      selector:
        app: mysql
      ports:
      - name: mysql
        protocol: TCP
        port: 3306
        targetPort: 3306
        nodePort: 30001
      type: NodePort
    

2.2 部署文件说明

  • 配置:创建的名称为mysql-config-map的ConfigMap中仅仅指定了MySQL的登录密码为123456,MySQL的登录名称默认为root。
  • 存储卷:创建的名称为nfs-pv-data-mysql的PersistentVolume中申明了一个容量为1G,且访问权限为ReadWriteOnce的存储卷,该存储卷对应的目录是域名为nfs.k8s.com这个NFS服务器中的/mnt/nfs/data/mysql目录。
  • 容器:MySQL服务是有状态的,所以需要创建StatefulSet类型的MySQL服务,创建的名称为mysql的容器,把名称为mysql-config-map的配置中的所有配置项都作为环境变量,并把名称为nfs-pv-data-mysql存储卷挂载到容器内部的/var/lib/mysql目录。
  • 服务:创建的名称为mysql-service的Service是一个无头服务,K8S集群内部的其它容器需要通过无头服务才能访问到MySQL服务;创建的名称为mysql-external-service的Service是一个普通服务,该服务把节点的30001端口映射到容器的3306端口,在K8S集群外部访问节点的30001端口即可访问MySQL服务,如果不需要从K8S集群外部访问MySQL服务,则不需要创建该服务。

2.3 执行部署文件

  • 执行部署:在K8S集群的Master节点中,执行以下命令即可使用上述部署文件部署MySQL单节点服务并查看部署的结果,执行结果如下图所示,从部署结果可看,创建的MySQL服务是在K8S集群中的k8s-worker-2节点上。

    # 执行部署
    kubectl apply -f mysql.yaml
    
    # 查看结果
    kubectl get pods -o wide
    

    在这里插入图片描述

2.4 访问MySQL服务

  • 访问服务:由于部署的MySQL服务是在K8S集群中的k8s-worker-2节点上,而该节点的IP地址为192.168.14.105,所以可以在集群外部使用MySQL客户端工具通过IP地址192.168.14.105、端口号30001,用户名root,密码123456来访问,本文中使用的是MySQL官方客户端工具MySQL Workbench来访问,结果如下图所示,可知部署的MySQL服务是正常可访问的。
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值