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
Categories: docker&k8s

0 Comments

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注