• 自动创建PVC


    1. 搭建NFS服务

    192.168.31.200


    1.1 安装 nfs-utils

    yum install nfs-utils -y
    systemctl start rpcbind  &&systemctl enable rpcbind
    systemctl start nfs && systemctl enable nfs
    

    1.2 建立nfs存储目录

    echo "/data/kubernetes/ *(rw,no_root_squash,no_all_squash,sync)" >/etc/exports
    exportfs -r
    

    1.3 查看nfs挂载

    exportfs -v
    
    /data/kubernetes
    		<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    

    1.5 使得配置生效

    showmount -e
    
    Export list for hdss200.host.com:
    /data/kubernetes *
    

    如果出现报错 clnt_create: RPC: Program not registered

    systemctl stop rpcbind
    systemctl stop nfs
    systemctl start rpcbind
    systemctl start nfs
    

    2. 在master上创建PV

    192.168.31.37


    2.1 创建rbac


    • rbac.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nfs-client-provisioner
      namespace: kube-system
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: nfs-client-provisioner-runner
    rules:
       -  apiGroups: [""]
          resources: ["persistentvolumes"]
          verbs: ["get", "list", "watch", "create", "delete"]
       -  apiGroups: [""]
          resources: ["persistentvolumeclaims"]
          verbs: ["get", "list", "watch", "update"]
       -  apiGroups: ["storage.k8s.io"]
          resources: ["storageclasses"]
          verbs: ["get", "list", "watch"]
       -  apiGroups: [""]
          resources: ["events"]
          verbs: ["watch", "create", "update", "patch"]
    #   -  apiGroups: [""]
    #      resources: ["services", "endpoints"]
    #      verbs: ["get","create","list", "watch","update"]
    #   -  apiGroups: ["extensions"]
    #      resources: ["podsecuritypolicies"]
    #      resourceNames: ["nfs-provisioner"]
    #      verbs: ["use"]
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: run-nfs-client-provisioner
    subjects:
      - kind: ServiceAccount
        name: nfs-client-provisioner
        namespace: kube-system
    roleRef:
      kind: ClusterRole
      name: nfs-client-provisioner-runner
      apiGroup: rbac.authorization.k8s.io
    
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: leader-locking-nfs-client-provisioner
      namespace: kube-system
    rules:
      - apiGroups: [""]
        resources: [ "endpoints"]
        verbs: ["get", "list", "watch", "create", "update", "patch"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: leader-locking-nfs-client-provisioner
      namespace: kube-system
    subjects:
      - kind: ServiceAccount
        name: nfs-client-provisioner
        namespace: kube-system
    roleRef:
      kind: Role
      name: leader-locking-nfs-client-provisioner
      apiGroup: rbac.authorization.k8s.io
    

    kubectl apply -f rbac.yaml
    

    2.2创建sc

    • storageclass.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: 200-nfs-storage
    provisioner: 200-nfs-provisioner     #这里要和第三个nfs-client-provisioner的env环境变量中的value值对应。
    reclaimPolicy: Retain
    

    3、创建PVC,绑定PV


    3.1 创建nfs-client-provisioner容器

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nfs-client-provisioner
      namespace: kube-system
    spec:
      replicas: 1               #副本数量为1
      strategy:
        type: Recreate
      selector:
        matchLabels:
          app: nfs-client-provisioner
      template:
        metadata:
          labels:
            app: nfs-client-provisioner
        spec:
          serviceAccount: nfs-client-provisioner       #指定账户
          containers:
            - name: nfs-client-provisioner
              image: harbor.od.com/public/nfs-client-provisioner:latest   #使用的是这个镜像
              volumeMounts:
                - name: nfs-client-root
                  mountPath:  /persistentvolumes      #指定容器内的挂载目录
              env:
                - name: PROVISIONER_NAME        #这是这个容器内置的变量
                  value: 200-nfs-provisioner         #这是上面变量的值(名字)
                - name: NFS_SERVER       #内置变量,用于指定nfs服务的IP
                  value: 192.168.31.200            
                - name: NFS_PATH              #内置变量,指定的是nfs共享的目录
                  value: /data/kubernetes
          volumes:              #这下面是指定上面挂载到容器内的nfs的路径及IP
            - name: nfs-client-root
              nfs:
                server: 192.168.31.200
                path: /data/kubernetes
    

    3.2 创建pvc

    • test-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-nginx-pvc
      namespace: ingress-nginx        
    spec:
      storageClassName: 200-nfs-storage                 #定义存储类的名字,要和SC的名字对应
      accessModes:
        - ReadWriteMany          #访问模式为RWM
      resources:
        requests:
          storage: 500Mi
    

    4. 创建nginx

    • nginx-configmap.yaml
    ---
    apiVersion: v1
    data:
      default.conf: |
        server {
        listen  8012;
        server_name  localhost;
          location / {
            root  /usr/share/nginx/html;
            index  index.html index.htm;
            }
        }
      mime.types: |
        types {
        text/html                                        html htm shtml;
        text/css                                         css;
        text/xml                                         xml;
        image/gif                                        gif;
        image/jpeg                                       jpeg jpg;
        application/javascript                           js;
        application/atom+xml                             atom;
        application/rss+xml                              rss;
    
        text/mathml                                      mml;
        text/plain                                       txt;
        text/vnd.sun.j2me.app-descriptor                 jad;
        text/vnd.wap.wml                                 wml;
        text/x-component                                 htc;
    
        image/png                                        png;
        image/svg+xml                                    svg svgz;
        image/tiff                                       tif tiff;
        image/vnd.wap.wbmp                               wbmp;
        image/webp                                       webp;
        image/x-icon                                     ico;
        image/x-jng                                      jng;
        image/x-ms-bmp                                   bmp;
    
        font/woff                                        woff;
        font/woff2                                       woff2;
    
        application/java-archive                         jar war ear;
        application/json                                 json;
        application/mac-binhex40                         hqx;
        application/msword                               doc;
        application/pdf                                  pdf;
        application/postscript                           ps eps ai;
        application/rtf                                  rtf;
        application/vnd.apple.mpegurl                    m3u8;
        application/vnd.google-earth.kml+xml             kml;
        application/vnd.google-earth.kmz                 kmz;
        application/vnd.ms-excel                         xls;
        application/vnd.ms-fontobject                    eot;
        application/vnd.ms-powerpoint                    ppt;
        application/vnd.oasis.opendocument.graphics      odg;
        application/vnd.oasis.opendocument.presentation  odp;
        application/vnd.oasis.opendocument.spreadsheet   ods;
        application/vnd.oasis.opendocument.text          odt;
        application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                         pptx;
        application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                         xlsx;
        application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                         docx;
        application/vnd.wap.wmlc                         wmlc;
        application/x-7z-compressed                      7z;
        application/x-cocoa                              cco;
        application/x-java-archive-diff                  jardiff;
        application/x-java-jnlp-file                     jnlp;
        application/x-makeself                           run;
        application/x-perl                               pl pm;
        application/x-pilot                              prc pdb;
        application/x-rar-compressed                     rar;
        application/x-redhat-package-manager             rpm;
        application/x-sea                                sea;
        application/x-shockwave-flash                    swf;
        application/x-stuffit                            sit;
        application/x-tcl                                tcl tk;
        application/x-x509-ca-cert                       der pem crt;
        application/x-xpinstall                          xpi;
        application/xhtml+xml                            xhtml;
        application/xspf+xml                             xspf;
        application/zip                                  zip;
    
        application/octet-stream                         bin exe dll;
        application/octet-stream                         deb;
        application/octet-stream                         dmg;
        application/octet-stream                         iso img;
        application/octet-stream                         msi msp msm;
    
        audio/midi                                       mid midi kar;
        audio/mpeg                                       mp3;
        audio/ogg                                        ogg;
        audio/x-m4a                                      m4a;
        audio/x-realaudio                                ra;
    
        video/3gpp                                       3gpp 3gp;
        video/mp2t                                       ts;
        video/mp4                                        mp4;
        video/mpeg                                       mpeg mpg;
        video/quicktime                                  mov;
        video/webm                                       webm;
        video/x-flv                                      flv;
        video/x-m4v                                      m4v;
        video/x-mng                                      mng;
        video/x-ms-asf                                   asx asf;
        video/x-ms-wmv                                   wmv;
        video/x-msvideo                                  avi;
        }
      nginx.conf: |
        user  nginx;
        worker_processes  1;
    
        error_log  /var/log/nginx/error.log warn;
        pid        /var/run/nginx.pid;
    
    
        events {
        worker_connections  1024;
        }
    
    
        http {
         include       /etc/nginx/mime.types;
         default_type  application/octet-stream;
    
         log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
         access_log  /var/log/nginx/access.log  main;
    
         sendfile        on;
         #tcp_nopush     on;
    
         keepalive_timeout  65;
    
         #gzip  on;
    
         include /etc/nginx/conf.d/*.conf;
         }
    kind: ConfigMap
    metadata:
      name: test-nginx
    

    • nginx-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-nginx
      namespace: ingress-nginx
      labels:
        k8s-app: test-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          k8s-app: test-nginx
      template:
        metadata:
          labels:
            k8s-app: test-nginx
        spec:
          containers:
            - image: 'harbor.od.com/public/nginx:1.16.1'
              imagePullPolicy: IfNotPresent
              name: test-nginx
              ports:
                - containerPort: 8012
                  hostPort: 8012
                  protocol: TCP
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /etc/nginx
                  name: config-volume
                - mountPath: /usr/share/nginx/html/
                  name: test-volume
          dnsPolicy: ClusterFirst
          nodeSelector:
            app-group: test
          restartPolicy: Always
          schedulerName: default-scheduler
          terminationGracePeriodSeconds: 30
          volumes:
            - configMap:
                defaultMode: 420
                items:
                  - key: nginx.conf
                    path: nginx.conf
                  - key: mime.types
                    path: mime.types
                  - key: default.conf
                    path: conf.d/default.conf
                name: test-nginx
              name: config-volume
            - name: test-volume
              persistentVolumeClaim:
                claimName: test-nginx-pvc
    

    5. 在nfs服务器上写 index.html

    cd /data/kubernetes/
    cd ingress-nginx-test-nginx-pvc-pvc-5054b549-cdb1-4e9a-a87e-10e3de7f5dd7/
    echo 'test' > index.html
    


    6. 访问 nginx

    • 找到nginx的pod的ip地址
    kubectl get pods -n ingress-nginx -owide |grep test-nginx
    


    • 访问nginx
    curl 172.16.236.255:8012
    

  • 相关阅读:
    测试的基本方法
    一些基本常用的正则表达式
    MySQL和Oracle的区别与不同
    Ubuntu中使用python3中的venv创建虚拟环境
    在Ubuntu中搭建Python3的虚拟环境并开始django项目
    Django中的图片加载不出来解决方式记录
    在django中进行后台管理时插入外键数据时不显示值的问题
    Django2.2连接mysql数据库出现django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None问题
    在Ubuntu中安装了MongoDB后无法启动mongod的问题
    PostgreSQL练习3
  • 原文地址:https://www.cnblogs.com/cjwnb/p/13440656.html
Copyright © 2020-2023  润新知