部分摘自元宝
- ✅ StatefulSet(稳定 Pod 名)
- ✅ PVC(Longhorn / 任意 CSI)
- ✅ ConfigMap(放开远程访问)
- ✅ Secret(root 密码)
- ✅ Service(ClusterIP + NodePort 可选)
- ✅ 适合 kubectl port-forward / HeidiSQL
一、命名空间(可选)
kubectl create ns db
二、Secret(root 密码)
apiVersion: v1
kind: Secret
metadata:
name: mariadb-secret
namespace: db
type: Opaque
stringData:
MARIADB_ROOT_PASSWORD: StrongRootPassword123
kubectl apply -f mariadb-secret.yaml
三、ConfigMap(放开远程访问)
apiVersion: v1
kind: ConfigMap
metadata:
name: mariadb-config
namespace: db
data:
my.cnf: |
[mysqld]
bind-address=0.0.0.0
skip-name-resolve
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
kubectl apply -f mariadb-configmap.yaml
四、PVC(Longhorn / 通用)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-data
namespace: db
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
# storageClassName: longhorn # 如需要可取消注释
kubectl apply -f mariadb-pvc.yaml
五、StatefulSet(核心)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mariadb
namespace: db
spec:
serviceName: mariadb
replicas: 1
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: mariadb:10.5
ports:
- containerPort: 3306
name: mysql
env:
- name: MARIADB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: MARIADB_ROOT_PASSWORD
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: config
mountPath: /etc/mysql/conf.d
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 1000m
memory: 2Gi
volumes:
- name: config
configMap:
name: mariadb-config
volumeClaimTemplates: []
⚠️ 这里 显式声明 volumes,而不是
volumeClaimTemplates,方便你直接用前面创建的 PVC。
更新 volumes 部分:
volumes:
- name: data
persistentVolumeClaim:
claimName: mariadb-data
- name: config
configMap:
name: mariadb-config
kubectl apply -f mariadb-sts.yaml
六、Service(两种方式)
✅ 方式 1:ClusterIP(推荐 + port-forward)
apiVersion: v1
kind: Service
metadata:
name: mariadb
namespace: db
spec:
clusterIP: None # Headless(StatefulSet 推荐)
selector:
app: mariadb
ports:
- port: 3306
targetPort: 3306
✅ 方式 2:NodePort(局域网访问)
apiVersion: v1
kind: Service
metadata:
name: mariadb-nodeport
namespace: db
spec:
type: NodePort
selector:
app: mariadb
ports:
- port: 3306
targetPort: 3306
nodePort: 30306
kubectl apply -f mariadb-svc.yaml
七、验证部署
kubectl get pods,svc,pvc -n db
kubectl logs mariadb-0 -n db --tail=50
进入数据库:
kubectl exec -it mariadb-0 -n db -- mariadb -u root -p
port-forward to 3307
kubectl port-forward svc/mariadb 3307:3306 -n db
注意不要关闭进程
宿主机hedissql 远程访问
enjoy!