pv和pvc一对一绑定,相当于k8s中的中间件,项目的移植性更强
引入pv、pvc,即使后端存储不一样,yaml文件打包可以直接使用
一、定义pv文件
[root@k8s-master tomcat_demo]# cat mysql_pv.yaml
apiVersion: v1
kind: PersistentVolume #pv类型
metadata:
name: pv1
labels:
type: nfs001
spec:
capacity:
storage: 10Gi #存储能力,声明而已
accessModes:
- ReadWriteMany #访问模式
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data/pv1"
server: 10.0.0.11
readOnly: false
二、创建pv,查看
[root@k8s-master tomcat_demo]# kubectl create -f mysql_pv.yaml
persistentvolume "pv1" created
[root@k8s-master tomcat_demo]# kubectl get pv
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv1 10Gi RWX Recycle Available 6s
三、创建pv2、pv3,启动并查看
[root@k8s-master tomcat_demo]# cat mysql_pv2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv2
labels:
type: nfs001
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data/pv2"
server: 10.0.0.11
readOnly: false
[root@k8s-master tomcat_demo]# cat mysql_pv3.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv3
labels:
type: nfs001
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data/pv3"
server: 10.0.0.11
readOnly: false
[root@k8s-master tomcat_demo]# kubectl create -f mysql_pv2.yaml
persistentvolume "pv2" created
[root@k8s-master tomcat_demo]# kubectl create -f mysql_pv3.yaml
persistentvolume "pv3" created
[root@k8s-master tomcat_demo]# kubectl get pv
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv1 10Gi RWX Recycle Available 5m
pv2 20Gi RWX Recycle Available 36s
pv3 50Gi RWX Recycle Available 27s
四、创建挂载目录
[root@k8s-master tomcat_demo]# mkdir /data/{pv1,pv2,pv3}
五、定义pvc文件
[root@k8s-master tomcat_demo]# cat mysql_pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: tomcat-mysql
namespace: tomcat #局部资源,需要有namespace
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
六、创建pvc
[root@k8s-master tomcat_demo]# kubectl create -f mysql_pvc.yaml
persistentvolumeclaim "tomcat-mysql" created
七、查看pvc资源
[root@k8s-master tomcat_demo]# kubectl get pvc -n tomcat
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
tomcat-mysql Bound pv2 20Gi RWX 1m #绑定pv2
八、定义mysql-deploy.yaml文件
[root@k8s-master tomcat_demo]# cat mysql-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: tomcat
name: mysql
spec:
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
volumes:
- name: mysql
persistentVolumeClaim:
claimName: tomcat-mysql #pvc名称
containers:
- name: mysql
image: 10.0.0.11:5000/mysql:5.7
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: '123456'
九、定义mysql-svc.yml 文件
[root@k8s-master tomcat_demo]# cat mysql-svc.yml
apiVersion: v1
kind: Service
metadata:
namespace: tomcat
name: mysql
spec:
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
十、定义tomcat-deploy.yaml 文件
[root@k8s-master tomcat_demo]# cat tomcat-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: tomcat
name: myweb
spec:
replicas: 1
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: 10.0.0.11:5000/tomcat-app:v2
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: 'mysql'
- name: MYSQL_SERVICE_PORT
value: '3306'
十一、定义tomcat-svc.yml文件
[root@k8s-master tomcat_demo]# cat tomcat-svc.yml
apiVersion: v1
kind: Service
metadata:
namespace: tomcat
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30008
selector:
app: myweb
十二、启动mysql、tomcat等资源
[root@k8s-master tomcat_demo]# kubectl create -f .
deployment "mysql" created
service "mysql" created
deployment "myweb" created
service "myweb" created
Error from server (AlreadyExists): error when creating "mysql_pv.yaml": persistentvolumes "pv1" already exists
Error from server (AlreadyExists): error when creating "mysql_pv2.yaml": persistentvolumes "pv2" already exists
Error from server (AlreadyExists): error when creating "mysql_pv3.yaml": persistentvolumes "pv3" already exists
Error from server (AlreadyExists): error when creating "mysql_pvc.yaml": persistentvolumeclaims "tomcat-mysql" already exists
十三、查看资源
[root@k8s-master tomcat_demo]# kubectl get pod -n tomcat -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-1576900611-p23v2 1/1 Running 0 1m 172.18.99.2 10.0.0.12
myweb-1840053683-x2z92 1/1 Running 0 1m 172.18.78.3 10.0.0.13
十四、查看挂载目录
[root@k8s-node-1 ~]# df -Th|grep nfs
10.0.0.11:/data/pv2 nfs4 48G 4.2G 44G 9% /var/lib/kubelet/pods/acb4ef43-a7c0-11ea-84fc-000c29661bc0/volumes/kubernetes.io~nfs/pv2
十五、查看服务端本地数据目录
[root@k8s-master tomcat_demo]# ls /data/pv2
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema sys
0 Comments