K8S-mysql单机安装.md
前言
这里并不建议将生产 mysql 部署到K8s上,配置较为繁琐。这里只为了统一管理。
这里,先将mysql 单独放到一个命名空间
准备工作
被挂载的那台机子准备挂载目录[因为单机,直接用HostPath了]
# 创建数据目录
sudo mkdir -p /mnt/data/mysql
# 设定权限(mysql:8.0 的容器内 mysql 默认 uid=999)
sudo chown -R 999:999 /mnt/data/mysql
配置yaml
# mysql-single.yaml
apiVersion: v1
kind: Namespace
metadata:
name: mysql
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: mysql
type: Opaque
stringData:
root-password: "admin@123" # <-- 请替换为你的密码
---
# ConfigMap 用于管理 MySQL 默认配置
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-conf
namespace: mysql
data:
# 这里写一些 MySQL 默认配置示例
mysqld.cnf: |
[mysqld]
sql_mode=STRICT_TRANS_TABLES
max_connections=200
innodb_buffer_pool_size=128M
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: mysql
spec:
clusterIP: None
selector:
app: mysql-single
ports:
- name: mysql
port: 3306
targetPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: mysql-nodeport
namespace: mysql
spec:
type: NodePort
selector:
app: mysql-single
ports:
- name: mysql
port: 3306
targetPort: 3306
nodePort: 30306 # 外部访问端口
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-single
namespace: mysql
spec:
serviceName: "mysql"
replicas: 1
selector:
matchLabels:
app: mysql-single
podManagementPolicy: Parallel
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: mysql-single
spec:
# 这里指定调度
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 硬策略
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- work4
containers:
- name: mysql
image: mysql:8.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
- name: mysql-conf
mountPath: /etc/mysql/conf.d # <-- 改为挂载 ConfigMap
readinessProbe:
exec:
command:
- /bin/sh
- -c
- "mysqladmin ping -uroot -p$MYSQL_ROOT_PASSWORD --silent"
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 5
# 存活探针,这个可能会破坏事故现场
# livenessProbe:
# exec:
# command:
# - /bin/sh
# - -c
# - "mysqladmin ping -uroot -p$MYSQL_ROOT_PASSWORD --silent"
# initialDelaySeconds: 30
# periodSeconds: 20
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "1Gi"
volumes:
- name: mysql-data
hostPath:
path: /mnt/data/mysql # <-- 本机数据目录(请先创建并 chown 999:999)
type: Directory
- name: mysql-conf
configMap:
name: mysql-conf
应用:
kubectl apply -f ./mysql-single.yaml
kubectl -n mysql get pods,svc,sts -o wide

浙公网安备 33010602011771号