Kubernetes持久卷、存储类和CSI,应用配置:ConfigMap和Secret,Service与服务发现

一. 在集群上使用资源配置文件编排运行 demoapp,并使用 Service 完成 Pod 发现和服务发布。

#demoapp yaml配置文件
root@k8s-master01:~/20230206# cat demoapp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demoapp
  template:
    metadata:
      labels:
        app: demoapp
    spec:
      containers:
      - name: demoapp
        image: ikubernetes/demoapp:v1.0
        ports:
        - containerPort: 80    
        - 
#demoapp svc yaml服务配置文件
root@k8s-master01:~/20230206# cat demoapp_svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: demoapp
spec:
  selector:
    app: demoapp
  type: NodePort
  ports:
    - port: 8080
      targetPort: 80
      nodePort: 30080

#创建pods,service服务命令
root@k8s-master01:~/20230206# kubectl create -f .
deployment.apps/demoapp created

#查看创建的pods
root@k8s-master01:~/20230206# kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
demoapp-687765d54c-q62l7   1/1     Running   0          2m28s
demoapp-687765d54c-z2csq   1/1     Running   0          2m28s

#查看创建的svc服务
root@k8s-master01:~/20230206# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
demoapp      NodePort    10.97.242.187    <none>        8080:30080/TCP   11s
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          4d

#登录node节点IP,端口:30080,查看运行的demoapp服务

在这里插入图片描述

二. 要求以配置文件的方式,在集群上编排运行 nginx、wordpress 和 mysql,并使用 Service 完成 Pod 发现和服务发布。

提示:使用 Secret 的方式的为 wordpress 指定要使用 mysql 服务器地址、数据库名称、用户名称和用户密码;
nginx Service:定义为 NodePort 类型;
nginx 的配置文件:要通过 ConfigMap 提供;
wordpress 和 mysql 的数据要保存于 PVC 上。

#mysql  secret配置文件,创建secret资源
root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 01-secret-mysql.yaml 
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: null
  name: mysql-user-pass
data:
  database.name: d3BkYg==
  root.password: TUBnZUVkdQ==
  user.name: d3B1c2Vy
  user.password: bWFnZURVLmMwbQ==

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl create -f 01-secret-mysql.yaml 
secret/mysql-user-pass created
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get secret
NAME               TYPE                DATA   AGE
mysql-secret       Opaque              4      101m
mysql-user-pass    Opaque              4      9s
nginx-ssl-secret   kubernetes.io/tls   2      173m

#mysql pvc配置文件,创建pvc资源
root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 02-pvc-mysql-data.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl create -f 02-pvc-mysql-data.yaml 
persistentvolumeclaimroot@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get pvc
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-data        Bound    pvc-5c08567b-fcc9-4fd7-a0d2-9358c2f4c0ed   10Gi       RWO            nfs-csi        21h
pvc-nfs-dynamic   Bound    pvc-579e0432-afb7-4459-a433-2cb24632e89a   10Gi       RWX            nfs-csi        2d21hmysql-data created

#mysql service配置文件,创建SVC资源
root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 03-service-mysql.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  ports:
  - name: mysql
    port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql
  type: ClusterIP

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl create -f 03-service-mysql.yaml 
service/mysql created
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    11d
mysql        ClusterIP   10.102.182.97   <none>        3306/TCP   21h

#引用mysql secret配置,mysql deployment的配置文件,创建deployment资源
root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 04-deploy-mysql.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: root.password
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.name
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.password
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: database.name
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql/
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl create -f 04-deploy-mysql.yaml 
deployment.apps/mysql created
root@k8s-master01:~/learning-k8s/wordpress# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
mysql   1/1     1            1           21h

#进入到创建的mysql pods里,查看数据库env配置,正常
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get pods
NAME                         READY   STATUS    RESTARTS      AGE
configmaps-env-demo          1/1     Running   2 (22h ago)   46h
configmaps-volume-demo       1/1     Running   2 (74m ago)   46h
mysql-97b69dcc8-j7f7r        1/1     Running   1 (74m ago)   22h
secrets-env-demo             1/1     Running   1 (22h ago)   23h
secrets-volume-demo          1/1     Running   1 (74m ago)   23h
volumes-nfs-csi-demo         1/1     Running   3 (22h ago)   2d21h
wordpress-664cfb496b-v22cn   1/1     Running   0             6m1s
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl exec -it mysql-97b69dcc8-j7f7r -- /bin/sh
sh-4.4# env
MYSQL_PASSWORD=mageDU.c0m
MYSQL_PORT_3306_TCP_PROTO=tcp
HOSTNAME=mysql-97b69dcc8-j7f7r
MYSQL_DATABASE=wpdb
MYSQL_SERVICE_PORT_MYSQL=3306
KUBERNETES_PORT_443_TCP_PROTO=tcp
MYSQL_SERVICE_PORT=3306
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
MYSQL_ROOT_PASSWORD=M@geEdu
MYSQL_PORT=tcp://10.102.182.97:3306
KUBERNETES_PORT=tcp://10.96.0.1:443
MYSQL_PORT_3306_TCP=tcp://10.102.182.97:3306

#wordpress service配置文件,创建SVC资源
root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 01-service-wordpress.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  ports:
  - name: fpm 
    port: 9000
    protocol: TCP
    targetPort: 9000
  selector:
    app: wordpress

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl create -f 01-service-wordpress.yaml 
service/wordpress created
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    11d
mysql        ClusterIP   10.102.182.97   <none>        3306/TCP   21h
wordpress    ClusterIP   10.110.198.82   <none>        9000/TCP   15s

#wordpress pvc配置文件,创建PVC资源
root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 02-pvc-wordpress-app-data.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-app-data
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl create -f 02-pvc-wordpress-app-data.yaml 
persistentvolumeclaim/wordpress-app-data created
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get pvc
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-data           Bound    pvc-5c08567b-fcc9-4fd7-a0d2-9358c2f4c0ed   10Gi       RWO            nfs-csi        22h
pvc-nfs-dynamic      Bound    pvc-579e0432-afb7-4459-a433-2cb24632e89a   10Gi       RWX            nfs-csi        2d21h
wordpress-app-data   Bound    pvc-68c167ab-30c0-4e62-83be-9ea876b9c3d3   10Gi       RWX            nfs-csi        18s

#wordpress deployment配置文件,创建deployment资源。注意WORDPRESS_DB_HOST,填mysql的service 名字或IP地址
root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 03-deployment-wordpress.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: wordpress:5.8-fpm
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql
        - name: WORDPRESS_DB_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.name
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.password
        - name: WORDPRESS_DB_NAME
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: database.name
        volumeMounts:
        - name: wordpress-app-data
          mountPath: /var/www/html/
      volumes:
      - name: wordpress-app-data
        persistentVolumeClaim:
          claimName: wordpress-app-data

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl create -f 03-deployment-wordpress.yaml 
deployment.apps/wordpress created
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
mysql       1/1     1            1           22h
wordpress   0/1     1            0           8s

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get pods
NAME                     READY   STATUS    RESTARTS        AGE
mysql-97b69dcc8-j7f7r    1/1     Running   0               3m26s
secrets-env-demo         1/1     Running   0               108m
secrets-volume-demo      1/1     Running   0               60m
volumes-nfs-csi-demo     1/1     Running   2 (24h ago)     47h

#验证wordpress容器里,环境配置和mysql容器里环境配置一致
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl exec -it mysql-97b69dcc8-j7f7r -- /bin/sh
sh-4.4# env
MYSQL_PASSWORD=mageDU.c0m
MYSQL_PORT_3306_TCP_PROTO=tcp
HOSTNAME=mysql-97b69dcc8-j7f7r
MYSQL_DATABASE=wpdb
MYSQL_SERVICE_PORT_MYSQL=3306
KUBERNETES_PORT_443_TCP_PROTO=tcp
MYSQL_SERVICE_PORT=3306
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
MYSQL_ROOT_PASSWORD=M@geEdu
MYSQL_PORT=tcp://10.102.182.97:3306
KUBERNETES_PORT=tcp://10.96.0.1:443
MYSQL_PORT_3306_TCP=tcp://10.102.182.97:3306
PWD=/
HOME=/root
MYSQL_MAJOR=8.0
GOSU_VERSION=1.16
MYSQL_USER=wpuser
MYSQL_PORT_3306_TCP_PORT=3306
KUBERNETES_SERVICE_PORT_HTTPS=443
MYSQL_PORT_3306_TCP_ADDR=10.102.182.97
KUBERNETES_PORT_443_TCP_PORT=443
MYSQL_VERSION=8.0.32-1.el8
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get pods -o wide
NAME                         READY   STATUS    RESTARTS       AGE     IP            NODE         NOMINATED NODE   READINESS GATES
configmaps-env-demo          1/1     Running   2 (22h ago)    47h     10.244.2.46   k8s-node02   <none>           <none>
configmaps-volume-demo       1/1     Running   2 (124m ago)   47h     10.244.3.48   k8s-node03   <none>           <none>
mysql-97b69dcc8-j7f7r        1/1     Running   1 (124m ago)   22h     10.244.2.48   k8s-node02   <none>           <none>
secrets-env-demo             1/1     Running   1 (22h ago)    24h     10.244.2.45   k8s-node02   <none>           <none>
secrets-volume-demo          1/1     Running   1 (124m ago)   23h     10.244.3.47   k8s-node03   <none>           <none>
volumes-nfs-csi-demo         1/1     Running   3 (22h ago)    2d22h   10.244.3.49   k8s-node03   <none>           <none>
wordpress-664cfb496b-v22cn   1/1     Running   0              55m     10.244.3.50   k8s-node03   <none>           <none>

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl exec -it  wordpress-664cfb496b-v22cn -- /bin/sh
#env
WORDPRESS_DB_USER=wpuser
WORDPRESS_PORT_9000_TCP_PORT=9000
WORDPRESS_PORT_9000_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
MYSQL_PORT_3306_TCP_ADDR=10.102.182.97
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WORDPRESS_SERVICE_HOST=10.110.198.82
MYSQL_PORT_3306_TCP_PORT=3306
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
MYSQL_SERVICE_HOST=10.102.182.97
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_SERVICE_PORT_MYSQL=3306
WORDPRESS_DB_NAME=wpdb
WORDPRESS_PORT_9000_TCP=tcp://10.110.198.82:9000
WORDPRESS_SERVICE_PORT=9000
WORDPRESS_PORT=tcp://10.110.198.82:9000
MYSQL_PORT=tcp://10.102.182.97:3306
MYSQL_SERVICE_PORT=3306
MYSQL_PORT_3306_TCP=tcp://10.102.182.97:3306
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1


#验证wordpress 和 mysql 的数据保存于 PVC 上,创建pvc后,PV自动创建,并且已匹配
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get pvc -o wide
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE     VOLUMEMODE
mysql-data           Bound    pvc-5c08567b-fcc9-4fd7-a0d2-9358c2f4c0ed   10Gi       RWO            nfs-csi        23h     Filesystem
pvc-nfs-dynamic      Bound    pvc-579e0432-afb7-4459-a433-2cb24632e89a   10Gi       RWX            nfs-csi        2d22h   Filesystem
wordpress-app-data   Bound    pvc-68c167ab-30c0-4e62-83be-9ea876b9c3d3   10Gi       RWX            nfs-csi        72m     Filesystem
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get pv -o wide
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE     VOLUMEMODE
pvc-579e0432-afb7-4459-a433-2cb24632e89a   10Gi       RWX            Delete           Bound    default/pvc-nfs-dynamic      nfs-csi                 2d22h   Filesystem
pvc-5c08567b-fcc9-4fd7-a0d2-9358c2f4c0ed   10Gi       RWO            Delete           Bound    default/mysql-data           nfs-csi                 23h     Filesystem
pvc-68c167ab-30c0-4e62-83be-9ea876b9c3d3   10Gi       RWX            Delete           Bound    default/wordpress-app-data   nfs-csi                 72m     Filesystem


#nginx configmap配置文件,创建cm资源
root@k8s-master01:~/learning-k8s/wordpress/nginx# cat 01-configmap-nginx-conf.yaml 
apiVersion: v1
data:
  nginx.conf: |
    server {
            listen 80;
            listen [::]:80;

            server_name magedu.com www.magedu.com;

            index index.php index.html index.htm;

            root /var/www/html;

            location ~ /.well-known/acme-challenge {
                    allow all;
                    root /var/www/html;
            }

            location / {
                    try_files $uri $uri/ /index.php$is_args$args;
            }

            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass wordpress:9000;
                    fastcgi_index index.php;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    fastcgi_param PATH_INFO $fastcgi_path_info;
            }

            location ~ /\.ht {
                    deny all;
            }

            location = /favicon.ico {
                    log_not_found off; access_log off;
            }
            location = /robots.txt {
                    log_not_found off; access_log off; allow all;
            }
            location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                    expires max;
                    log_not_found off;
            }
    }
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: nginx-conf

root@k8s-master01:~/learning-k8s/wordpress/nginx# kubectl create -f 01-configmap-nginx-conf.yaml 
configmap/nginx-conf created
root@k8s-master01:~/learning-k8s/wordpress/nginx# 
root@k8s-master01:~/learning-k8s/wordpress/nginx# kubectl get cm
NAME                    DATA   AGE
demoapp-cfg             2      2d2h
demoapp-config          2      2d
kube-root-ca.crt        1      11d
nginx-cfg-001           2      2d2h
nginx-conf              1      7s
nginx-config-files      3      2d2h
nginx-sslvhosts-confs   3      24h

#nginx service配置文件,创建service资源
root@k8s-master01:~/learning-k8s/wordpress/nginx# cat 02-service-nginx.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - name: http-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
  externalIPs:
  - 172.29.100.100

root@k8s-master01:~/learning-k8s/wordpress/nginx# kubectl create -f 02-service-nginx.yaml 
service/nginx created
root@k8s-master01:~/learning-k8s/wordpress/nginx# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>          443/TCP        11d
mysql        ClusterIP   10.102.182.97    <none>          3306/TCP       23h
nginx        NodePort    10.96.100.121    192.168.6.100   80:32177/TCP   9s
wordpress    ClusterIP   10.107.196.134   <none>          9000/TCP       5m37s

#nginx deployment配置文件,创建deployment资源
root@k8s-master01:~/learning-k8s/wordpress/nginx# cat 03-deployment-nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
      - name: ngxconf
        configMap:
          name: nginx-conf
      - name: wordpress-app-data
        persistentVolumeClaim:
          claimName: wordpress-app-data
      containers:
      - image: nginx:1.20-alpine
        name: nginx
        volumeMounts:
        - name: ngxconf
          mountPath: /etc/nginx/conf.d/
        - name: wordpress-app-data
          mountPath: /var/www/html/

root@k8s-master01:~/learning-k8s/wordpress/nginx# ls
01-configmap-nginx-conf.yaml  02-service-nginx.yaml  03-deployment-nginx.yaml
root@k8s-master01:~/learning-k8s/wordpress/nginx# kubectl create -f 03-deployment-nginx.yaml 
deployment.apps/nginx created
root@k8s-master01:~/learning-k8s/wordpress/nginx# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
mysql       1/1     1            1           23h
nginx       0/1     1            0           13s
wordpress   1/1     1            1           77m

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三. pvc 依赖的 pv 要动态置备

1.在Kubernetes集群上部署NFS 
Server
运行如下命令,在Kubernetes集群上部署一个可用的Nlocal install(基于当前项目的部署,其默认配置已经修改dnsPolicy)FS服务;
kubectl create namespace nfs
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nfs-provisioner/nfs-server.yaml --namespace nfs

2.Install NFS CSI Driver on a kubernetes cluster
local install(基于当前项目的部署,其默认配置已经修改dnsPolicy)
git clone https://github.com/iKubernetes/learning-k8s.git
cd learning-k8s
kubectl apply -f csi-driver-nfs/deploy/02-csi-driver-nfs-4.1/

#check pods status:
root@k8s-master01:~/learning-k8s/csi-driver-nfs/deploy# kubectl -n kube-system get pod -o wide -l 'app in (csi-nfs-node,csi-nfs-controller)'
NAME                                  READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
csi-nfs-controller-67dd4499b5-tz22p   3/3     Running   0          6m30s   192.168.6.102   k8s-node02     <none>           <none>
csi-nfs-node-5wvvn                    3/3     Running   0          6m30s   192.168.6.100   k8s-master01   <none>           <none>
csi-nfs-node-9q8dc                    3/3     Running   0          6m30s   192.168.6.102   k8s-node02     <none>           <none>
csi-nfs-node-jf5bs                    3/3     Running   0          6m30s   192.168.6.103   k8s-node03     <none>           <none>
csi-nfs-node-pltmn                    3/3     Running   0          6m30s   192.168.6.101   k8s-node01     <none>           <none>

3.Storage Class Usage (Dynamic Provisioning)
#Create a storage class
change server, share with your existing NFS server address and share name

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
  #server: nfs-server.default.svc.cluster.local
  server: nfs-server.nfs.svc.cluster.local
  share: /
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - hard
  - nfsvers=4.1

root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl create -f nfs-csi-storageclass.yaml 
storageclass.storage.k8s.io/nfs-csi created

#查看storage class
root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl get sc
NAME      PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi   nfs.csi.k8s.io   Delete          Immediate           false                  14s
root@k8s-master01:~/learning-k8s/csi-driver-nfs# ls
deploy  nfs-csi-storageclass.yaml  nfs-pvc-dynamic.yaml  README.md  volumes-nfs-demo.yaml

#创建一个PVC进行测试
root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl create -f nfs-pvc-dynamic.yaml 
persistentvolumeclaim/pvc-nfs-dynamic created
root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl get pvc
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-nfs-dynamic   Bound    pvc-579e0432-afb7-4459-a433-2cb24632e89a   10Gi       RWX            nfs-csi        9s
root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
pvc-579e0432-afb7-4459-a433-2cb24632e89a   10Gi       RWX            Delete           Bound    default/pvc-nfs-dynamic   nfs-csi                 12s

#Create a deployment
root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl create -f volumes-nfs-demo.yaml 
pod/volumes-nfs-csi-demo created
root@k8s-master01:~/learning-k8s/csi-driver-nfs# kubectl get pods
NAME                   READY   STATUS    RESTARTS        AGE
volumes-nfs-csi-demo   1/1     Running   0               69s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值