1.创建对应名称空间,这里使用db-system
kubectl create namespace db-system
2.设置使用的StorageClass(StorageClass.yaml)
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
namespace: db-system
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
3.设置pv(mysql-pv.yaml)
使用的是local pv,挂接的目录是 /opt/mysql/data
亲和性自行定夺吧。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
namespace: db-system
labels:
type: local
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: "/opt/mysql/data"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
4.设置pvc(mysql-pvc.yaml)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: db-system
labels:
app: mysql-pvc
spec:
accessModes:
- ReadWriteOnce #此处需要和pv对应才能匹配
resources:
requests:
storage: 2Gi
storageClassName: local-storage#此处需要和StorageClass.yaml匹配
5.部署Deployment(mysql-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deploy
labels:
app: mysql-deploy
namespace: db-system
spec:
replicas: 1 #根据自己实际决定份数
selector:
matchLabels:
app: mysql-pod
template:
metadata:
labels:
app: mysql-pod #注意这个名字,svc里面需要用到
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mysql
image: mysql:8.0.20
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: mysql12345678
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: "/var/lib/mysql" #不需要修改,映射到镜像内部目录
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc #对应到pvc的名字
- mysql-svc.yaml:
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
namespace: db-system
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 32306
selector:
app: mysql-pod #这里名字要和Deployment 对应
7.应用配置
kubectl create -f StorageClass.yaml
kubectl create -f mysql-pv.yaml
kubectl create -f mysql-pvc.yaml
kubectl create -f mysql-deploy.yaml
kubectl create -f mysql-svc.yaml
8.设置node节点防火墙
sudo iptables -I INPUT -p tcp --dport 32306 -j ACCEPT
sudo iptables-save
看需要,是否持久化
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload