kubernetes部署mysql

kubernetes2个概念:

PersistentVolume(持久卷) 和 PersistentVolumeClaim(持久卷申请)。

  1. PersistentVolume(PV) 是集群之中的一块网络存储。跟 Node 一样,也是集群的资源。PVVolume 类似,不过会有独立于 Pod 的生命周期。这一 API 对象包含了存储的实现细节,例如 NFSiSCSI 或者其他的云提供商的存储系统。
  2. PersistentVolumeClaim (PVC) 是用户的一个请求。他跟 Pod 类似。Pod 消费 Node 的资源,PVC 消费 PV 的资源。Pod 能够申请特定的资源(CPU 和 内存);Claim 能够请求特定的尺寸和访问模式(例如可以加载一个读写,以及多个只读实例)

部署mysql

PVC

申请20G的资源

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-mysql
  labels:
    app: my-mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: rbd

deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-mysql
  labels:
    app: my-mysql
spec:
  selector:
    matchLabels:
      app: my-mysql
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-mysql
    spec:
      containers:
      - image: mysql:5.6
        name: my-mysql
        args:
          - "--ignore-db-dir=lost+found"
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              key: mysql-root-password
              name: my-mysql
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              key: mysql-password
              name: my-mysql
        - name: MYSQL_USER
          value: user_xxx
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: my-mysql

需要注意args这个配置,如果不加这个参数,mysql会初始化失败,github的某个issues里发现这个方法可以解决。

  1. mysql-persistent-storage指定了pvc;
  2. MYSQL_PASSWORD, MYSQL_ROOT_PASSWORD来自名为my-mysqlsecret;

secret

apiVersion: v1
kind: Secret
metadata:
  name: my-mysql
type: Opaque
data:
  mysql-root-password: xxx
  mysql-password: xxx
  1. data里的配置密码都需要经过base64

service

apiVersion: v1
kind: Service
metadata:
  name: my-mysql
  labels:
    app: my-mysql
spec:
  type: NodePort
  ports:
    - port: 3306
  selector:
    app: my-mysql
  1. 这里type设置为NodePort,你可以使用k8s集群的任何一个node ip连接mysql。对应的端口需要看一下service映射的端口。
  2. 使用1里的ip:port,就可以使用mysql workbench连上数据库。

你可能感兴趣的:(【kubernetes】)