MySQL in Kubernetes
namespace.yaml
:
yaml
apiVersion: v1
kind: Namespace
metadata:
name: common
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
mysql-deployment.yaml
:
yaml
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: common
spec:
type: ClusterIP
ports:
- port: 3306
selector:
app: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
namespace: common
spec:
storageClassName: local
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: local
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/root/kubernetes/common/mysql/mysql_pv_volume" # 此目录要正确填写
---
kind: Secret
apiVersion: v1
metadata:
name: common-mysql-root-account
namespace: common
annotations:
kubesphere.io/creator: admin
data:
username: cm9vdA==
password: MTIzNDU2 # echo -n "123456" | base64
type: kubernetes.io/basic-auth
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: common
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:8.0.29
name: mysql
env:
# 在实际中使用 secret
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: common-mysql-root-account
key: password
ports:
- containerPort: 3306
name: mysql
hostPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
进入pod:
bash
# 获取pod名称
kubectl get pods -n common -o wide
# 进入pod
kubectl exec -it mysql-75cd5d7ddf-xnw2s -n common -- /bin/bash
# 进入mysql
mysql -h mysql -u root -p