《每天5分钟玩转 Kubernetes》9.3 数据管理 - m
2018-12-13 本文已影响2人
SlowGO
目标
创建 pv,pvc,部署一个 mysql,加载 pv,然后连接到 mysql,添加新的数据,之后节点模拟故障,使 kubernetes 将 mysql 迁移到新的节点,此时需要保证之前 mysql 中数据没有丢失。
步骤:
- 创建 pv,pvc
- 部署 mysql
- 连接 mysql 添加数据
- 模拟节点故障
- 连接新 mysql,验证数据完整
创建配置文件
mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfsdata/mysql
server: 172.17.8.101
mysql-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs
mysql-svc.yml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
启动
kubectl apply -f mysql-pv.yml
kubectl apply -f mysql-pvc.yml
kubectl apply -f mysql-svc.yml
查看状态:

查看 pod:
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-7869f56d8f-hmpql 1/1 Running 0 1m 172.33.27.3 node3
mysql 被部署到 node3。
连接 mysql 添加数据
访问 mysql service
kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql -ppassword
创建一个数据库 'test'

模拟节点故障
关闭 node3 模拟故障,过一会儿,mysql pod 就会被迁移:
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-7869f56d8f-4lhgp 1/1 Running 0 20s 172.33.42.3 node2
mysql-7869f56d8f-hmpql 1/1 Unknown 0 8m 172.33.27.3 node3
mysql 重新在 node2 上部署了。
验证数据
连接 mysql,查看新建的数据库 'test' 还在不在:

数据都在,实现了数据隔离持久化。