首页 > 技术文章 > k8s 单节点开发环境用hostPath配置mysql的持久化存储

worldinmyeyes 2021-03-10 23:13 原文

开发和运维人员在进行开发或测试部署的时候,用单节点部署比较方便, 因为最小的多节点部署也需要三台电脑.

容器的Pod在物理机关机或者重启后,单节点的问题就是数据会消失,需要持久化存储的支持. 

PV支持多种存储驱动方式, 开销最小效率最高的无异于本地的hostPath方式. 网上大多数单节点部署资料都是用的NFS,麻烦又低效.

登录kubernetes dashboard, 找到Deployments, 找到mysql,编辑对应的YAML.(这里假定你已经安装过了mysql)

在spec项目下,添加一些内容

spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: aliyun-mysql
  template:
    metadata:
      name: aliyun-mysql
      creationTimestamp: null
      labels:
        k8s-app: aliyun-mysql
    spec:
      volumes:          # 从这里添加五行,包括本行
        - name: mysql-storage
          hostPath:
            path: /k8data/mysql  # 这里是你打算保存mysql配置文件和库的本地路径, 注意提前建好,并用chmod命令给好权限.
            type: ''
      containers:
        - name: aliyun-mysql
          image: mysql:8.0.23
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: ******  # 这里是你的root密码
          resources: {}
          volumeMounts:       # 从这里添加三行,包括本行.
            - name: mysql-storage
              mountPath: /var/lib/mysql  # mount的路径,是mysql的配置文件和默认库的位置.
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
          securityContext:
            privileged: false
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

 然后找到 Services,找到Mysql的Services

spec:
  ports:
    - name: tcp-3306-3306-5dl8t
      protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 31747  # 注意,这个是外网访问端口.
  selector:
    k8s-app: aliyun-mysql
  clusterIP: 10.10.2.196
  clusterIPs:
    - 10.10.2.196
  type: NodePort  # 将此处的类型改为NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster

 

点更新,对应的Pod和Services会重启,稍后就可以了.

 

推荐阅读