Kubernetes(七) - Volume 原

Kubernetes(七) - Volume

Docker是無狀態的不管被銷燬多少次都會恢復到最初的狀態,但是這就意味着在程序過程中產生的配置也好文件也好會丟失,對於Docker我們經常會使用磁盤掛載的方式來保存一些重要的內容,比如運行在Docker下的數據庫的源數據,比如程序的日誌文件等,在K8S中也提供同樣的配置方式

PS: 磁盤使用中1.8 和 1.9存在差異,1.8需要創建PersistentVolume在創建之後才能創建PersistentVolumeClaim,1.9之後只需要創建PersistentVolumeClaim就可以了

Kubernetes官方文檔:https://kubernetes.io/docs/reference/

Kubernetes官方Git地址:https://github.com/kubernetes/kubernetes

PS:本系列中使用 KubernetesV1.8 RancherV1.6.14

1.本地磁盤

> vim local-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-1
  labels:
    type: local
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp/data/pv-1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pv-claim
  labels:
    app: redis
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

> kubectl create -f local-pv.yaml
persistentvolume "local-pv-1" created
persistentvolumeclaim "mysql-pv-claim" created

然後我們就可以對對進行進行掛載了

> vim volume-local.yaml
apiVersion: v1
kind: Pod
metadata:
  name: volume-local-pod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:                         # 磁盤掛載
      - name: redis-pv-claim
        mountPath: "/etc/redis"
  volumes:                                  # 磁盤掛載別稱定義
  - name: redis-pv-claim
    persistentVolumeClaim:
      claimName: redis-pv-claim
> kubectl create -f volume-local.yaml
pod "volume-local-pod" created

這個時候容器的節點在K8S-S1上我們看一下是否保存到了K8S-S1的磁盤上了嗎

2.NAS網絡盤

但是這樣做有一個很大的弊端,如果這個Pod重啓可能會被調度到其他的節點上,那麼對應掛載盤的就會情況,這裏有兩種方式解決,第一種就是固定Pod運行的節點,在就是使用共享磁盤(首先你需要創建一個NAS盤)

一般用的比較頻繁的就是NAS盤作爲掛載盤,用法如下

> vim nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: xxxxxx.cn-hangzhou.nas.aliyuncs.com   # nfs的地址
    path: "/"                                     # nfs的掛載目錄(一定需要有這個文件目錄)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pv
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 5Gi

> kubectl create -f nfs-pv.yaml
persistentvolume "nfs-pv" created
persistentvolumeclaim "nfs-pv" created

我們創建兩個Pod共享一個NAS盤

> vim volume-nfs.yaml
apiVersion: extensions/v1beta1 
kind: Deployment
metadata:
  name: volume-nfs
spec:
  replicas: 2  
  template:
    metadata:
      labels:                                   # 容器的標籤 可和service關聯
        app: volume-nfs
    spec:
      containers:
      - name: mypod
        image: redis
        volumeMounts:                         # 磁盤掛載
          - name: nfs-pv
            mountPath: "/etc/redis"
      volumes:                                  # 磁盤掛載別稱定義
      - name: nfs-pv
        persistentVolumeClaim:
          claimName: php-general-test
> kubectl create -f volume-nfs.yaml
deployment "volume-nfs" created

兩個Pod分別在不同的節點中

3. 其他Volume支持類型

具體使用明細可以參考官方文檔: Volumes | Kubernetes

  • awsElasticBlockStore
  • azureDisk
  • azureFile
  • cephfs
  • downwardAPI
  • emptyDir
  • fc (光纖通道)
  • flocker
  • gcePersistentDisk
  • gitRepo
  • glusterfs
  • hostPath
  • iscsi
  • local
  • nfs
  • persistentVolumeClaim
  • projected
  • portworxVolume
  • quobyte
  • rbd
  • scaleIO
  • secret
  • storageos
  • vsphereVolume
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章