K8S装置Mysql8.0
1.创立ConfigMap存储配置文件
mysql-config.yaml
apiVersion: v1kind: ConfigMapmetadata: name: mysql-config labels: app: mysqldata: my.cnf: |- [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] max_connections = 2000 secure_file_priv=/var/lib/mysql sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
执行后果
kubectl apply -f mysql-config.yaml configmap/mysql-config createdkubectl get cmNAME DATA AGEmysql-config 1 7s
2. 数据存储(PV+PVC)
新建目录
mkdir -p /data/mysql
NFS挂载
vim /etc/exports/data/mysql *(rw,no_root_squash)
mysql-pv.yaml
apiVersion: v1kind: PersistentVolumemetadata: name: mysql-pvspec: capacity: storage: 5Gi accessModes: - ReadWriteOnce nfs: path: /data/mysql server: 10.0.4.5---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: mysql-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
执行后果
kubectl apply -f mysql-pv.yamlkubectl get pv,pvcNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/mysql-pv 5Gi RWO Retain Bound default/mysql-pvc 3sNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEpersistentvolumeclaim/mysql-pvc Bound mysql-pv 5Gi RWO 3s
3. 部署Mysql Pod
mysql-deploy.yaml
apiVersion: apps/v1kind: Deploymentmetadata: name: mysql labels: app: mysqlspec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0.19 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD ## 配置Root用户默认明码 value: "123456" resources: limits: cpu: 500m memory: 512Mi requests: cpu: 500m memory: 512Mi livenessProbe: initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3 exec: command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"] readinessProbe: initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3 exec: command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"] volumeMounts: - name: data mountPath: /var/lib/mysql - name: config mountPath: /etc/mysql/conf.d/my.cnf subPath: my.cnf - name: localtime readOnly: true mountPath: /etc/localtime volumes: - name: data persistentVolumeClaim: claimName: mysql-pvc - name: config configMap: name: mysql-config - name: localtime hostPath: type: File path: /etc/localtime
留神:persistentVolumeClaim和configMap须要和之前创立的名称匹配
参数简介:
- ports: 配置镜像映射端口。
- env: 镜像环境变量配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 镜像用于配置 root 用户默认明码变量。
- resources: 配置 CPU、Memory 资源限度,能够通过配置该值来配置 Pod 的 QoS 级别。
- livenessProbe: 配置存活探针,定时检测 Mysql 利用运行状态,如果检测到 Mysql 挂掉将进行重启操作。
- readinessProbe: 配置就绪探针,定时检测 Mysql 利用启动状态,如果启动胜利将容许流量涌入,启动失败将进行重启操作。
- command: 探针执行探测时执行的探测命令。
- volumeMounts: 存储卷挂载配置,用于镜像内存储的挂载配置,与 volumes 中对于的 name 进行绑定。
- volumes: 存储卷配置,可配置应用 pvc、hostPath、emptyDir、nfs 等存储,须要配置 name 值与 VolumeMounts 进行绑定。
执行后果
kubectl apply -f mysql-deploy.yamlkubectl get podsNAME READY STATUS RESTARTS AGEmysql-589f94cf4-gzng6 1/1 Running 0 46s
4.配置service
mysql-svc.yaml
apiVersion: v1kind: Servicemetadata: name: mysql labels: app: mysqlspec: type: NodePort ports: - name: mysql port: 3306 targetPort: 3306 nodePort: 30336 selector: app: mysql
执行后果
kubectl apply -f mysql-svc.yaml kubectl get svc mysqlNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEmysql NodePort 10.102.59.153 <none> 3306:30336/TCP 2m16s
5. 连贯测试
mysql -h 192.168.0.111 -P 30336 --user=root --password=123456
Reference
Kubernetes 部署 Mysql 8.0 数据库
MySQL8.0登录提醒caching_sha2_password问题解决办法