1.数据持久化
1.1emptyDir
emptyDir 跟随pod创建一个空目录 ,随着pod的删除,跟着删除
说明:
yaml里字段:
kubectl explain pod.xxx 查看pod下的个个字段
-required:必须的
字段值类型:
<boolean> false true <Object> 有下一级缩进 <[ ]Object> 有下一级缩减 数组形式,有多个值 以-开头 或者和第一个值(有可能是键值对)对齐空一格(就是出现 - 的原因) <string> 字符串
https://www.cnblogs.com/wn1m/p/11286109.html
实验:
tomcat+mysql tomcat的数据都会提交给mysql mysql的数据目录在: /var/lib/mysql
所以持久化修改mysql即可
格式:
声名需要持久化的目录
volumeMounts: - name: tomcat-db ##卷的名字 mountPath: /var/lib/mysql ##挂载目录
声明持久化的方式
volumes: - name: tomcat-db emptyDir: {} mysql.yaml apiVersion: v1 kind: ReplicationController metadata: name: mysql spec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: volumes: - name: tomcat-db emptyDir: {} containers: - name: mysql image: 10.0.0.11:5000/mysql:5.7 volumeMounts: - name: tomcat-db mountPath: /var/lib/mysql ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: ‘123456‘
其余按照tomcat里的一样就可以,可以修改nodeName
页面访问并添加数据
http://10.0.0.12:30008/demo/
在mysql所起的节点上删容器
docker rm -f $(docker ps -a -q)
会发现数据并没用丢失 删除pod 数据丢失
持久化目录:
[root@k8s-node2 ~]# find /var/lib/kubelet/pods/ -name ‘mysql‘ /var/lib/kubelet/pods/04ea3aad-5d0d-11ea-a583-000c29393d50/volumes/kubernetes.io~empty-dir/tomcat-db/mysql /var/lib/kubelet/pods/04ea3aad-5d0d-11ea-a583-000c29393d50/containers/mysql
5.5
1.数据持久化
1.1emptyDiremptyDir 跟随pod创建一个空目录 ,随着pod的删除,跟着删除
说明:yaml里字段:
kubectl explain pod.xxx 查看pod下的个个字段
-required:必须的字段值类型:<boolean> false true<Object> 有下一级缩进<[ ]Object> 有下一级缩减 数组形式,有多个值 以-开头 或者和第一个值(有可能是键值对)对齐空一格(就是出现 - 的原因)<string> 字符串
https://www.cnblogs.com/wn1m/p/11286109.html
实验:tomcat+mysql tomcat的数据都会提交给mysql mysql的数据目录在: /var/lib/mysql所以持久化修改mysql即可格式:声名需要持久化的目录 volumeMounts: - name: tomcat-db ##卷的名字 mountPath: /var/lib/mysql ##挂载目录
声明持久化的方式volumes: - name: tomcat-db emptyDir: {}
mysql.yamlapiVersion: v1kind: ReplicationControllermetadata: name: mysqlspec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: volumes: - name: tomcat-db emptyDir: {} containers: - name: mysql image: 10.0.0.11:5000/mysql:5.7 volumeMounts: - name: tomcat-db mountPath: /var/lib/mysql ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: ‘123456‘
其余按照tomcat里的一样就可以,可以修改nodeName
页面访问并添加数据http://10.0.0.12:30008/demo/
在mysql所起的节点上删容器 docker rm -f $(docker ps -a -q)
会发现数据并没用丢失 删除pod 数据丢失
持久化目录:[root@k8s-node2 ~]# find /var/lib/kubelet/pods/ -name ‘mysql‘/var/lib/kubelet/pods/04ea3aad-5d0d-11ea-a583-000c29393d50/volumes/kubernetes.io~empty-dir/tomcat-db/mysql/var/lib/kubelet/pods/04ea3aad-5d0d-11ea-a583-000c29393d50/containers/mysql
2.hostPathhostPath 删除pod也不影响数据持久化把宿主机目录挂载到容器里volumes: - name: tomcat-db hostPath: path: /mnt #没用会自动创建
缺点:这个类型不能跨宿主机 如果跨宿主机,他会发现没用目录,就会重新初始化 创建/mnt 所以hostPath需要固定下 nodeName
3.nfs持久化
创建NFS,修改yaml即可volumes: - name: tomcat-db nfs: path: /mnt #nfs的文件 server: 10.0.0.11
nfs
pv和pvcpv :全局资源pvc :局部资源为什么引入pv和pvcpod --> pvc 自动选择 pv -->nfspod--nfs 需要创建所对应的文件等等使用pvc ,yml文件更通用,更容易移植
pv配置文件apiVersion: v1kind: PersistentVolumemetadata: name: pv1 labels: type: nfs001spec: capacity: storage: 10Gi accessModes: ##允许多个pod读写 - ReadWriteMany persistentVolumeReclaimPolicy: Recycle ##允许回收 pvc删除后 nfs: ##指定后端存储 path: "/goose1/pv1" server: 10.0.0.11
pvcapiVersion: v1metadata: name: tomcat-mysql namespace: tomcatspec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi
启动即可 pvc会自动选择符合的pvtomcat(因为是后期补的笔记 并且没用做dns,所以需要先创建mysql-svc获得vip id地址如下 )192.168.100.14 master192.168.100.15 node1192.168.100.16 node2
[root@k8s-master pvc]# cat tomcat-rc.yml apiVersion: v1kind: ReplicationControllermetadata: name: mywebspec: replicas: 1 selector: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: 192.168.100.14:5000/tomcat-app:v2 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: ‘10.254.45.227‘ - name: MYSQL_SERVICE_PORT value: ‘3306‘
tomcat-svc[root@k8s-master pvc]# cat tomcat-svc.yml apiVersion: v1kind: Servicemetadata: name: mywebspec: type: NodePort ports: - port: 8080 nodePort: 30008 selector: app: myweb
mysql[root@k8s-master pvc]# cat mysql-rc-pvc.yml apiVersion: v1kind: ReplicationControllermetadata: name: mysqlspec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: 192.168.100.14:5000/mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: ‘123456‘ volumeMounts: - name: data mountPath: /var/lib/mysql volumes: - name: data persistentVolumeClaim: claimName: tomcat-mysql
mysql-svc[root@k8s-master pvc]# cat mysql-svc.yml apiVersion: v1kind: Servicemetadata: name: mysqlspec: ports: - port: 3306 targetPort: 3306 selector: app: mysql
注意点:请确保开启端口转发,并且都安装了客户端
原文:https://www.cnblogs.com/hsgoose/p/12828387.html