(K8s学习笔记二)存储卷挂载

1.POD增加一个cachevol的Volume存储卷,挂载到容器的nginx-cache目录上

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    tier: frontend
  volumes:
    - name: cachevol      # 增加一个名为cachevol的volume存储卷
      emptyDir: {}        # pod分配到node时创建的,k8s自动分配的一个目录,pod从node移除时emptyDir中的数据永久删除
  template:
    metadata:
      labels:
        app: nginx
        tier: frontend
    spec:
      containers:
      - name: nginx1.18
        image: nginx:1.18.0
        volumeMounts:
          - mountPath: /nginx-cache    # 将cachevol volume存储卷mount到容器内的/etc/nginx/cache目录上
            name: cachevol
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80

2.hostPath在POD上挂载宿主机的文件或目录

apiVersion: extensions/v1beta1
  kind: ReplicaSet
  metadata:
    name: mysql5.7
  spec:
    replicas: 2
    selector:
      app: mysql
    template:
      metadata:
        labels:
          app: mysql           # spec.template.metadata.labels标签名与spec.selector名称要相同
      spec:
        volumes:
          - name: "data-storage"
            hostPath:
              path: "/opt/data"      # 宿主机目录
        containers:
        - name: mysql5.7
          image: mysql:5.7.29
          ports:
          - containerPort: 3306
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: "123456"

3.挂载NFS Server的目录

apiVersion: extensions/v1beta1
  kind: ReplicaSet
  metadata:
    name: mysql5.7
  spec:
    replicas: 2
    selector:
      app: mysql
    template:
      metadata:
        labels:
          app: mysql           # spec.template.metadata.labels标签名与spec.selector名称要相同
      spec:
        volumes:
#          - name:  mypd       # 使用PVC时注视掉开启这三项内容
#            persistentVolumeClaim:
#               claimName: myclaim
          - name: nfs
            nfs:
            server: 192.168.1.2   # nfs server地址
            path: "/data"         # nfs挂载目录
        containers:
        - name: mysql5.7
          image: mysql:5.7.29
          ports:
          - containerPort: 3306
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: "123456"

说明:其他可定义的type
iscsi:使用iSCSI存储设备上的目录挂载到Pod中
flocker:使用Flocker管理存储卷
glusterfs:使用GlusterFS网络文件系统的目录挂载到Pod中
rbd:使用Ceph块设备共享存储挂载到Pod中
gitRepo:通过挂载一个空目录,并从Git库clone一个git repository以供Pod使用
secret:一个Secret Volume用于为Pod提供加密的信息,你可以将定义在K8s中的Secret直接挂载为文件让Pod访问,这种类型的Volume不会被持久化

4.Persistent Volume挂载网络存储定义占用空间大小

# nfs-persistent_volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 5Gi      # 声明需占用存储空间为5GB
  accessModes:
    - ReadWriteOnce   # 有读写权限且只能被单个node挂载;ReadOnlyMany:只读权限允许被多个node挂载;ReadWriteMany:有读写权限允许被多个node挂载
  nfs:
    path: /data
    server: 192.168.1.2

# nfs-persistent_volume_claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce   # 有读写权限且只能被单个node挂载;ReadOnlyMany:只读权限允许被多个node挂载;ReadWriteMany:有读写权限允许被多个node挂载
  resources:
    requests:
      storage: 8Gi    # 声明需占用8GB存储空间   
  nfs:
    path: /data
    server: 192.168.1.2

PV状态说明:
Available:空闲状态
Bound:已经绑定到某个PVC上
Released:对应的PVC已经被删除,但资源还没有备集群回收
Failed:PV自动回收失败

注解:PV可以理解成K8s集群中的某个网络存储对应的一块存储,他与Volume类似,但有以下区别:

1.PV只能是网络存储,不能属于任何Node,但可以在每个Node上访问

2.PV并不是被定义在Pod上的,而是独立于Pod之外的

3.PV目前支持类型包括:FC、NFS、iSCSI、CephFS、GlusterFS、VMware Photon等

posted @ 2020-07-10 11:50  不倒翁Jason  阅读(1971)  评论(0编辑  收藏  举报