zoukankan      html  css  js  c++  java
  • k8s 中 nfs作为存储的三种方式

    1、安装nfs服务。直接给命令

    yum install nfs-utils
    
       
    vim /etc/exports
    /data/k8s/ 172.16.1.0/24(sync,rw,no_root_squash)
       
    systemctl start nfs;  systemctl start rpcbind 
    systemctl enable nfs
     
    测试:
    yum install nfs-utils
    showmount -e 172.16.1.131


    2、nfs 可以直接作为存储卷使用,下面是一个生产环境部署的YAML配置文件。在此示例中,redis在容器中的持久化数据保存在/data目录下;存储卷使用nfs,nfs的服务地址为:192.168.8.150,存储路径为:/k8s-nfs/redis/data。容器通过volumeMounts.name的值确定所使用的存储卷。生产中一般挂载日志以及一些永久存储的文件使用
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: redis
    spec:
      selector:
        matchLabels:
          app: redis
      revisionHistoryLimit: 2
      template:
        metadata:
          labels:
            app: redis
        spec:
          containers:
          
    # 应用的镜像
          - image: redis
            name: redis
            imagePullPolicy: IfNotPresent
            
    # 应用的内部端口
            ports:
            - containerPort: 6379
              name: redis6379
            env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            - name: REDIS_PASSWORD
              value: "redis"          
    # 持久化挂接位置,在docker中 
            volumeMounts:
            - name: redis-persistent-storage
              mountPath: /data
          volumes:      
    # 宿主机上的目录
          - name: redis-persistent-storage
            nfs:
              path: /data/k8s
              server: 172.16.1.131

    3、nfs作为在Kubernetes当前版本的中,可以创建类型为nfs的持久化存储卷,用于为PersistentVolumClaim提供存储卷。在下面的PersistenVolume YAML配置文件中,定义了一个名为nfs-pv的持久化存储卷,此存储卷提供了5G的存储空间,只能由一个PersistentVolumClaim进行可读可写操作。此持久化存储卷使用的nfs服务器地址为192.168.5.150,存储的路径为/tmp。

    这里简单提供下使用方法。具体可以查看我的博客中动态pv和静态PV的区别和使用

    
    
    [root@VM_0_48_centos prometheus]# cat mypv.yaml 
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv001
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteMany
      nfs:
        path: /data/k8s
        server: 172.19.0.14
    
    [root@VM_0_48_centos prometheus]# cat mypvc.yaml   ###会根据大小和类型自动匹配到上面的PV
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: kube-system
      name: prometheus-claim
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
    
    [root@VM_0_48_centos prometheus]# kubectl  get pv,pvc -n kube-system
    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                          STORAGECLASS   REASON   AGE
    persistentvolume/pv001   10Gi       RWX            Retain           Bound    kube-system/prometheus-claim                           17m
    
    NAME                                     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/prometheus-claim   Bound    pv001    10Gi       RWX  


    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: prometheus
      namespace: kube-system
      labels:
        k8s-app: prometheus
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: Reconcile
        version: v2.2.1
    spec:
      serviceName: "prometheus"
      replicas: 1
      podManagementPolicy: "Parallel"
      updateStrategy:
       type: "RollingUpdate"
      selector:
        matchLabels:
          k8s-app: prometheus
      template:
        metadata:
          labels:
            k8s-app: prometheus
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ''
        spec:
          priorityClassName: system-cluster-critical
          serviceAccountName: prometheus
          initContainers:
          - name: "init-chown-data"
            image: "busybox:latest"
            imagePullPolicy: "IfNotPresent"
            command: ["chown""-R""65534:65534""/data"]
            volumeMounts:
            - name: prometheus-data
              mountPath: /data
              subPath: ""
          containers:
            - name: prometheus-server-configmap-reload
              image: "jimmidyson/configmap-reload:v0.1"
              imagePullPolicy: "IfNotPresent"
              args:
                - --volume-dir=/etc/config
                - --webhook-url=http://localhost:9090/-/reload
              volumeMounts:
                - name: config-volume
                  mountPath: /etc/config
                  readOnly: true
              resources:
                limits:
                  cpu: 10m
                  memory: 10Mi
                requests:
                  cpu: 10m
                  memory: 10Mi
     
            - name: prometheus-server
              image: "prom/prometheus:v2.2.1"
              imagePullPolicy: "IfNotPresent"
              args:
                - --config.file=/etc/config/prometheus.yml
                - --storage.tsdb.path=/data
                - --web.console.libraries=/etc/prometheus/console_libraries
                - --web.console.templates=/etc/prometheus/consoles
                - --web.enable-lifecycle
              ports:
                - containerPort: 9090
              readinessProbe:
                httpGet:
                  path: /-/ready
                  port: 9090
                initialDelaySeconds: 30
                timeoutSeconds: 30
              livenessProbe:
                httpGet:
                  path: /-/healthy
                  port: 9090
                initialDelaySeconds: 30
                timeoutSeconds: 30
              # based on 10 running nodes with 30 pods each
              resources:
                limits:
                  cpu: 200m
                  memory: 1000Mi
                requests:
                  cpu: 200m
                  memory: 1000Mi
     
              volumeMounts:
                - name: config-volume
                  mountPath: /etc/config
                - name: prometheus-data
                  mountPath: /data
                  subPath: ""
          terminationGracePeriodSeconds: 300
          volumes:
            - name: config-volume
              configMap:
                name: prometheus-config
            - name: prometheus-data
              persistentVolumeClaim:   #申明使用静态PVC永久化存储
                claimName: prometheus-claim 
     
  • 相关阅读:
    我的2012
    java抽象工厂模式
    java工厂方法模式
    javascript闭包
    字符串转换成枚举类型
    按位与 按位或 按位异域
    一个查找替换文件的简单工具
    c#写的.net 画流程图的控件
    .net 面试题之 Sql 分页 存储过程
    .net 面试整理2013年3月21
  • 原文地址:https://www.cnblogs.com/xiajq/p/11395211.html
Copyright © 2011-2022 走看看