1. 程式人生 > >初試 Kubernetes 動態卷配置使用 RBD 作為 StorageClass

初試 Kubernetes 動態卷配置使用 RBD 作為 StorageClass

目錄

  • Kubernetes StorageClass 介紹
  • 環境、軟體準備
  • Kubernetes 使用 RBD 作為 StorageClass

1、Kubernetes StorageClass 介紹

Kubernetes 叢集儲存 PV 支援 Static 靜態配置以及 Dynamic 動態配置,動態卷配置 (Dynamic provisioning) 可以根據需要動態的建立儲存卷。我們知道,之前的靜態配置方式,叢集管理員必須手動呼叫雲/儲存服務提供商的介面來配置新的固定大小的 Image 儲存卷,然後建立 PV 物件以在 Kubernetes 中請求分配使用它們。通過動態卷配置,能自動化完成以上兩步驟,它無須叢集管理員預先配置儲存資源,而是使用 StorageClass 物件指定的供應商來動態配置儲存資源。

2、環境、軟體準備

本次演示環境,我是在虛擬機器 Linux Centos7 上操作,通過虛擬機器完成 Ceph 儲存叢集搭建以及 Kubernetes 叢集的搭建,以下是安裝的軟體及版本:

  1. Centos:release 7.4.1708 (Core)
  2. Ceph:jewel-10.2.10
  3. Kubernetes:v1.6.2
  4. Docker:v1.12.6

注意:這裡我們著重描述一下 Kubernetes 叢集如何使用動態配置使用 RBD 來實現持久化儲存,所以需要提前搭建好 Kubernetes 叢集和 Ceph 儲存叢集,具體搭建過程可參考之前文章 國內使用 kubeadm 在 Centos 7 搭建 Kubernetes 叢集

初試 Centos7 上 Ceph 儲存叢集搭建,這裡就不在詳細講解了。同時由於本機記憶體限制,共開啟了 3 個虛擬機器節點,每個節點既是 Ceph 叢集節點又是 Kubernetes 叢集節點,所以功能節點圖如下:

這裡寫圖片描述

3、Kubernetes 使用 RBD 作為 StorageClass

StorageClass 物件支援多種型別的儲存卷外掛來提供 PV,從 Storage Classes 官方文件 provisioner 部分可以看到,它目前支援很多種儲存卷型別,其中就有我們熟悉的 Ceph RBD 型別。

  • AWSElasticBlockStore
  • AzureFile
  • AzureDisk
  • Cinder
  • Flocker
  • GCEPersistentDisk
  • Glusterfs
  • PhotonPersistentDisk
  • Quobyte
  • RBD
  • VsphereVolume
  • PortworxVolume
  • ScaleIO
  • StorageOS

當然除了上述 k8s 內部支援類別,如果我們需要使用其他型別卷外掛,例如 NFS、CephFS 等第三方熟知的型別,可以去 kubernetes-incubator/external-storage 這個 GitHub 倉庫,這裡有更多擴充套件儲存卷外掛支援,下邊我們在使用 RBD 作為 StorageClass 的時候也會演示到。

正式開始之前要提一下,通過前邊兩篇文章 初試 Kubernetes 叢集使用 Ceph RBD 塊儲存初試 Kubernetes 叢集使用 CephFS 檔案儲存 的介紹,我們知道,k8s 不支援跨節點掛載同一 Ceph RBD,支援跨節點掛載 CephFS,所以這裡 k8s 叢集只包含 admin 和 node0 兩個節點,也就是讓所有的任務都排程到 node0 上執行,來保證針對 RBD 的操作在同一節點上。同時既然是動態配置儲存資源,意思就是我們不需要提前建立好指定大小的 Image 了,而是動態建立它,所以這裡只需要參照 初試 Centos7 上 Ceph 儲存叢集搭建 搭建好 Ceph 儲存叢集即可,不需要進行 RBD 操作。

3.1 建立 ceph-secret-admin

我們知道 Ceph 儲存叢集預設是開啟了 cephx 認證的,所以我們可以建立一個名稱為 ceph-secret-admin 的 secret 物件,用於 k8s volume 外掛通過 cephx 認證訪問 ceph 儲存叢集。

$ ceph auth get-key client.admin |base64
QVFDUWFsMWFuUWlhRHhBQXpFMGpxMSsybEFjdHdSZ3J3M082YWc9PQ==

首先獲取並 base64 生成一下 k8s secret 認證 key,然後建立 ceph-secret-admin.yaml 檔案,key 值替換一下。

$ vim ceph-secret-admin.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret-admin
type: "kubernetes.io/rbd"  
data:
  key: QVFDUWFsMWFuUWlhRHhBQXpFMGpxMSsybEFjdHdSZ3J3M082YWc9PQ==

建立名稱為 ceph-secret-admin 的 Secret。

$ kubectl create -f ceph-secret-admin.yaml 
secret "ceph-secret-admin" created
$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
ceph-secret-admin     kubernetes.io/rbd                     1         16s
default-token-630xt   kubernetes.io/service-account-token   3         15m

3.2 建立 rbd-storage-class

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fast
provisioner: kubernetes.io/rbd
parameters:
  monitors: 10.16.153.105:6789
  adminId: kube
  adminSecretName: ceph-secret
  adminSecretNamespace: kube-system
  pool: kube
  userId: kube
  userSecretName: ceph-secret-user
  fsType: ext4
  imageFormat: "2"
  imageFeatures: "layering"

這裡每個欄位我就不一一解釋了,其中有幾個欄位要說明一下。

  • provisioner 該欄位指定使用儲存卷型別為 kubernetes.io/rbd,注意 kubernetes.io/ 開頭為 k8s 內部支援的儲存提供者,不同的儲存卷提供者型別這裡要修改成對應的值。
  • adminId | userId 這裡需要指定兩種 Ceph 角色 admin 和其他 user,admin 角色預設已經有了,其他 user 可以去 Ceph 叢集建立一個並賦對應許可權值,如果不建立,也可以都指定為 admin。
  • adminSecretName 為上邊建立的 Ceph 管理員 admin 使用的 ceph-secret-admin。
  • adminSecretNamespace 管理員 secret 使用的名稱空間,預設 default,如果修改為其他的話,需要修改 ceph-secret-admin.yaml 增加 namespace: other-namespace

參照上邊示例,我們建立一個 rbd-storage-class.yaml 檔案如下。

$ vim rbd-storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: rbd
provisioner: kubernetes.io/rbd
parameters:
  monitors: 10.222.78.12:6789
  adminId: admin
  adminSecretName: ceph-secret-admin
  adminSecretNamespace: default
  pool: rbd
  userId: admin
  userSecretName: ceph-secret-admin

然後我們建立一下名稱為 rbd 型別為 rbd 的 storage-class 看下。

$ kubectl create -f rbd-storage-class.yaml 
storageclass "rbd" created
$ kubectl get storageclass
NAME      TYPE
rbd       kubernetes.io/rbd

3.2 建立 rbd-dyn-pv-claim

好了,現在 storageClass 已經建立好了,這裡跟之前的區別就是,不需要建立 PV 和提前建立好指定大小的 Image,只需要建立 PVC 時請求指定儲存大小就行,k8s 會根據請求儲存大小和型別動態建立並分配,是不是很方便。那麼我們就來建立一個 PVC 申請 1G 儲存空間,新建 rbd-dyn-pv-claim.yaml 檔案如下。

$ vim rbd-dyn-pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-rbd-dyn-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: rbd
  resources:
    requests:
      storage: 1Gi

注意:這裡要使用 storageClassName: rbd 指明我們使用的 storageClass 為前面建立的 rbd。accessModes 指定模型為 ReadWriteOnce rbd 只支援 ReadWriteOnce 和 ReadOnlyMany,因為下邊有寫入操作,所以這裡使用 ReadWriteOnce 即可。

然後我們建立一個該 PVC,看下能否建立成功吧!

$ kubectl create -f rbd-dyn-pv-claim.yaml 
persistentvolumeclaim "ceph-rbd-dyn-pv-claim" created
$ kubectl get pvc
NAME                    STATUS    VOLUME    CAPACITY   ACCESSMODES   STORAGECLASS   AGE
ceph-rbd-dyn-pv-claim   Pending                                      rbd            29s

不過很遺憾,狀態為 Pending 並沒有建立成功,這是什麼原因呢?我們檢視下該 PVC 詳細出錯資訊吧!

$ kubectl describe pvc/ceph-rbd-dyn-pv-claim
Name:   ceph-rbd-dyn-pv-claim
Namespace:  default
StorageClass: rbd
Status:   Pending
Volume:   
Labels:   <none>
Annotations:  volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/rbd
Capacity: 
Access Modes: 
Events:
  FirstSeen LastSeen  Count From        SubObjectPath Type    Reason  Message
  --------- --------  ----- ----        ------------- --------  ------  -------
  46s   6s    4 persistentvolume-controller     Warning   ProvisioningFailed  Failed to provision volume with StorageClass "rbd": failed to create rbd image: executable file not found in $PATH, command output: 

從列印資訊中可以看到如下出錯資訊 failed to create rbd image: executable file not found in $PATH,提示建立 rbd image 失敗,因為在 $PATH 中沒找到可執行檔案。於是在 kubernetes github issues 中搜索了一下相關資訊,通過 issues/38923 這個 issues 中的描述,大概瞭解到是需要安裝 ceph-common 工具外掛來操作 Ceph,上邊報錯應該就是找不到該外掛導致的。裡面也給出了一個解決辦法,那就是新增 ceph-common 到 hyperkube image 中,具體就是構建一個新的安裝了 ceph-common 的同名映象 hyperkube-amd64 替換官方映象即可。

$ vim Dockerfile
FROM gcr.io/google_containers/hyperkube-amd64:v1.2.1

RUN curl https://raw.githubusercontent.com/ceph/ceph/master/keys/release.asc | apt-key add - && \
    echo deb http://download.ceph.com/debian-hammer/ jessie main | tee /etc/apt/sources.list.d/ceph.list && \
    apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -q -y ceph-common && \
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

$ docker build -t custom/hyperkube-amd64:v1.2.1 .    

不過,因為國內網路的問題,沒法拉取 gcr.io/google_containers/hyperkube-amd64:v1.2.1 映象,所以我採用另一種方式,就是使用上邊提到的 擴充套件儲存卷外掛 來幫我們完成這一步。

$ cd /home/wanyang3/k8s
$ git clone https://github.com/kubernetes-incubator/external-storage.git
$ tree external-storage/ceph/rbd/deploy/
├── README.md
├── non-rbac
│   └── deployment.yaml
└── rbac
    ├── clusterrole.yaml
    ├── clusterrolebinding.yaml
    ├── deployment.yaml
    └── serviceaccount.yaml

簡單說一下,這裡提供 rbac 和 no-rbac 兩種方式,這裡因為我們搭建的 k8s 叢集時開啟了 rbac 認證的,所以這裡採用 rbac 方式來建立該 deployment。ClusterRoleBinding 預設繫結 namespace: default,如果要修改為其他 namespace,對應的 storageClass 中的adminSecretNamespace 也需要對應修改下。下邊我們就把 rbac 資料夾下相關的 ClusterRole、ClusterRoleBinding、ServiceAccount、Deployment 建立一下吧!

$ kubectl apply -f rbac/
clusterrole "rbd-provisioner" created
clusterrolebinding "rbd-provisioner" created
deployment "rbd-provisioner" created
serviceaccount "rbd-provisioner" create

$ kubectl get pods
NAME                              READY     STATUS    RESTARTS   AGE
rbd-provisioner-687025274-1l6h5   1/1       Running   0          9s

我們看到該 rbd-provisioner 的 Deployment 已經成功啟動起來了,接下來,最重要的一步就是修改上邊 rbd-storage-class.yaml 檔案將 provisioner: kubernetes.io/rbd 修改為 provisioner: ceph.com/rbd,意思就是不使用 k8s 內部提供的 rbd 儲存型別,而是使用我們剛建立的擴充套件 rbd 儲存。

$ vim rbd-storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: rbd
provisioner: ceph.com/rbd
parameters:
  monitors: 10.222.78.12:6789
  adminId: admin
  adminSecretName: ceph-secret-admin
  adminSecretNamespace: default
  pool: rbd
  userId: admin
  userSecretName: ceph-secret-admin

OK 我們來重新建立一下名稱為 rbd 型別為 ceph.com/rbd 的 storage-class 看下。

$ kubectl apply -f rbd-storage-class.yaml

$ kubectl get sc
NAME      TYPE
rbd       ceph.com/rbd 

建立成功,rbd-dyn-pv-claim.yaml 檔案不用做任何修改,再次重新建立一下 rbd-dyn-pv-claim 看下這次能夠正常建立吧!

$ kubectl create -f rbd-dyn-pv-claim.yaml 
persistentvolumeclaim "ceph-rbd-dyn-pv-claim" created
$ kubectl get pvc
NAME                    STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS   AGE
ceph-rbd-dyn-pv-claim   Bound     pvc-cd63e53a-fa6f-11e7-a8e8-080027ee5979   1Gi        RWO           rbd            7s

這次建立成功啦!可以看到 STORAGECLASS 欄位顯示的 rbd 即為上邊建立的 rbd storageClass。接下來,我們來建立一個掛載該 PVC 的 Pod,看能否掛載成功吧!

3.3 建立 rbd-dyn-pvc-pod

最後我們建立一個掛載該 RBD 的 Pod 了,這裡我還是使用 busybox 容器測試吧!新建 Pod 檔案 rbd-dyn-pvc-pod1.yaml 如下。

$ vim rbd-dyn-pvc-pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: rbd-dyn-pvc-pod
  name: ceph-rbd-dyn-pv-pod1
spec:
  containers:
  - name: ceph-rbd-dyn-pv-busybox1
    image: busybox
    command: ["sleep", "60000"]
    volumeMounts:
    - name: ceph-dyn-rbd-vol1
      mountPath: /mnt/ceph-dyn-rbd-pvc/busybox
      readOnly: false
  volumes:
  - name: ceph-dyn-rbd-vol1
    persistentVolumeClaim:
      claimName: ceph-rbd-dyn-pv-claim

從檔案可以看到,我們要將上邊建立的 ceph-rbd-dyn-pv-claim 請求的資源掛載到容器的 /mnt/ceph-dyn-rbd-pvc/busybox 目錄。接下來建立一下該 Pod,看是否能夠正常執行吧!

$ kubectl create -f rbd-dyn-pvc-pod1.yaml 
pod "ceph-rbd-dyn-pv-pod1" created
$ kubectl get pods 
NAME                              READY     STATUS    RESTARTS   AGE
ceph-rbd-dyn-pv-pod1              1/1       Running   0          25s
rbd-provisioner-687025274-1l6h5   1/1       Running   0          7m

建立成功,接下來,我們去 node0 節點驗證一下容器內是否正確掛載了該 rbd 到指定路徑吧!

# node0 上操作
$ docker ps
CONTAINER ID        IMAGE                                                                                                              COMMAND                  CREATED              STATUS              PORTS               NAMES
1095a0a49cc6        docker.io/[email protected]:263477f49bb8d4d3d33c16a09671711c7eb5fac4bdf777f776ca16b931834ebf                          "sleep 60000"            About a minute ago   Up About a minute                       k8s_ceph-rbd-dyn-pv-busybox1_ceph-rbd-dyn-pv-pod1_default_12923bed-fa70-11e7-a8e8-080027ee5979_0

# 檢視容器掛載資訊
$ docker inspect 1095a0a49cc6
"Mounts": [
            {
                "Source": "/var/lib/kubelet/pods/12923bed-fa70-11e7-a8e8-080027ee5979/volumes/kubernetes.io~rbd/pvc-cd63e53a-fa6f-11e7-a8e8-080027ee5979",
                "Destination": "/mnt/ceph-dyn-rbd-pvc/busybox",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Source": "/var/lib/kubelet/pods/12923bed-fa70-11e7-a8e8-080027ee5979/volumes/kubernetes.io~secret/default-token-630xt",
                "Destination": "/var/run/secrets/kubernetes.io/serviceaccount",
                "Mode": "ro",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Source": "/var/lib/kubelet/pods/12923bed-fa70-11e7-a8e8-080027ee5979/etc-hosts",
                "Destination": "/etc/hosts",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Source": "/var/lib/kubelet/pods/12923bed-fa70-11e7-a8e8-080027ee5979/containers/ceph-rbd-dyn-pv-busybox1/520bdd35",
                "Destination": "/dev/termination-log",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

# 進入容器內,檢視掛載詳情以及測試生成檔案
$ docker exec -it 1095a0a49cc6 /bin/sh

/ # df -h
Filesystem                Size      Used Available Use% Mounted on
                         10.0G     34.1M     10.0G   0% /
/dev/rbd0               975.9M      2.5M    906.2M   0% /mnt/ceph-dyn-rbd-pvc/busybox
...

/ # cd /mnt/ceph-dyn-rbd-pvc/busybox

/mnt/ceph-dyn-rbd-pvc/busybox # dd if=/dev/zero of=test-rbd-dyn-1 bs=500M count=1
1+0 records in
1+0 records out
524288000 bytes (500.0MB) copied, 5.256829 seconds, 95.1MB/s

/mnt/ceph-dyn-rbd-pvc/busybox # df -h
Filesystem                Size      Used Available Use% Mounted on
                        10.0G     34.1M     10.0G   0% /
/dev/rbd0               975.9M    502.5M    406.2M  55% /mnt/ceph-dyn-rbd-pvc/busybox
...

妥妥沒問題的!我們看到 k8s 動態的建立了 1G 大小的 rbd Image 並掛載到容器指定路徑下。這裡我們可以使用 ceph rbd 命令列檢視下。

# rbd list
kubernetes-dynamic-pvc-cd6e6d18-fa6f-11e7-bd8e-0a580a600102

# rbd info kubernetes-dynamic-pvc-cd6e6d18-fa6f-11e7-bd8e-0a580a600102
rbd image 'kubernetes-dynamic-pvc-cd6e6d18-fa6f-11e7-bd8e-0a580a600102':
  size 1024 MB in 256 objects
  order 22 (4096 kB objects)
  block_name_prefix: rb.0.1023.2ae8944a
  format: 1

我們會發現,沒有提前建立好 1G 大小的 rbd image,只是建立 PVC 時申請了 1G 儲存,k8s 就自動建立好了指定大小的 Image 並掛載到容器內部,太方便了有木有! 同時,我們看到預設使用的 format 為 1,這裡也可以指定格式為 2,可以在 rbd-storage-class.yaml 中指定 imageFormat: "2",同時還可以指定 imageFeatures: layering 等等。

為了更好的演示 k8s 的動態卷配置,我們在建立一個 PVC 申請 5G 儲存,並掛載到到一個新的 pod 的指定路徑上試試。注意: 這裡我們就不用再建立 StorageClass 了,只需要建立 PVC 和 Pod 即可,要是像之前使用靜態配置的話,我們既要建立 Image 又要建立 PV,是不是很麻煩。

建立 rbd-dyn-pv-claim2 的 PVC 申請 5G 儲存空間。

$ vim rbd-dyn-pv-claim2.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-rbd-dyn-pv-claim2
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: rbd
  resources:
    requests:
      storage: 5Gi

$ kubectl create -f rbd-dyn-pv-claim2.yaml 
persistentvolumeclaim "ceph-rbd-dyn-pv-claim2" created
$ kubectl get pvc
NAME                     STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS   AGE
ceph-rbd-dyn-pv-claim1   Bound     pvc-cd63e53a-fa6f-11e7-a8e8-080027ee5979   1Gi        RWO           rbd            2h
ceph-rbd-dyn-pv-claim2   Bound     pvc-1095b851-fa86-11e7-a8e8-080027ee5979   5Gi        RWO           rbd            6s      

建立 rbd-dyn-pvc-pod2 的 Pod 掛載動態建立的 rbd 到指定目錄 /mnt/ceph-dyn-rbd-pvc2/busybox。

$ vim rbd-dyn-pvc-pod2.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: rbd-dyn-pvc-pod
  name: ceph-rbd-dyn-pv-pod2
spec:
  containers:
  - name: ceph-rbd-dyn-pv-busybox2
    image: busybox
    command: ["sleep", "60000"]
    volumeMounts:
    - name: ceph-dyn-rbd-vol2
      mountPath: /mnt/ceph-dyn-rbd-pvc2/busybox
      readOnly: false
  volumes:
  - name: ceph-dyn-rbd-vol2
    persistentVolumeClaim:
      claimName: ceph-rbd-dyn-pv-claim2

$ kubectl create -f rbd-dyn-pvc-pod2.yaml 
pod "ceph-rbd-dyn-pv-pod2" created
$ kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
ceph-rbd-dyn-pv-pod1              1/1       Running   0          2h
ceph-rbd-dyn-pv-pod2              1/1       Running   0          16s
rbd-provisioner-687025274-1l6h5   1/1       Running   0          2h      

去 node0 驗證一下本次建立的 Pod2 是否正確掛載了動態建立的 rbd。

# node0 上執行
$ docker ps
CONTAINER ID        IMAGE                                                                                                              COMMAND                  CREATED              STATUS              PORTS               NAMES
32c632fedff6        docker.io/[email protected]:263477f49bb8d4d3d33c16a09671711c7eb5fac4bdf777f776ca16b931834ebf                          "sleep 60000"            About a minute ago   Up About a minute                       k8s_ceph-rbd-dyn-pv-busybox2_ceph-rbd-dyn-pv-pod2_default_282aea2b-fa86-11e7-a8e8-080027ee5979_0

$ docker exec -it 32c632fedff6 df -h
Filesystem                Size      Used Available Use% Mounted on
                         10.0G     34.1M     10.0G   0% /
/dev/rbd1                 4.8G     20.0M      4.5G   0% /mnt/ceph-dyn-rbd-pvc2/busybox
...

可以看到已經掛載了動態申請的 5G 儲存空間,使用 ceph rbd 命令檢視下建立的 Image 資訊吧!

$ rbd list
kubernetes-dynamic-pvc-1c2aee43-fa86-11e7-bd8e-0a580a600102
kubernetes-dynamic-pvc-cd6e6d18-fa6f-11e7-bd8e-0a580a600102

$ rbd info kubernetes-dynamic-pvc-1c2aee43-fa86-11e7-bd8e-0a580a600102
rbd image 'kubernetes-dynamic-pvc-1c2aee43-fa86-11e7-bd8e-0a580a600102':
  size 5120 MB in 1280 objects
  order 22 (4096 kB objects)
  block_name_prefix: rb.0.1028.74b0dc51
  format: 1

最後,要提一下的是,如果我們使用動態配置的卷,則預設的回收策略為 “刪除”。這意味著,在預設的情況下,當 PVC 被刪除時,基礎的 PV 和對應的儲存也會被刪除。如果需要保留儲存在捲上的資料,則必須在 PV 被設定之後將回收策略從 delete 更改為 retain。可以通過修改 PV 物件中的 persistentVolumeReclaimPolicy 欄位的值來修改 PV 的回收策略。

參考資料

相關推薦

初試 Kubernetes 動態配置使用 RBD 作為 StorageClass

目錄 Kubernetes StorageClass 介紹 環境、軟體準備 Kubernetes 使用 RBD 作為 StorageClass 1、Kubernetes StorageClass 介紹 Kubernetes 叢集儲存 PV 支

初試 Kubernetes 叢集使用 Ceph RBD 塊儲存

目錄 Kubernetes PersistentVolumes 介紹 環境、軟體準備 單節點使用 Ceph RBD Kubernetes PV & PVC 方式使用 Ceph RBD 測試單節點以及多節點使用 Ceph RBD 1、Kube

kubernets使用ceph-rbd作為storageclass並建立pvc和應用

1.Kubernetes StorageClass 介紹 Kubernetes 叢集儲存 PV 支援 Static 靜態配置以及 Dynamic 動態配置,動態卷配置 (Dynamic provisioning) 可以根據需要動態的建立儲存卷。靜態配置方式,叢

實戰Kubernetes動態儲存(NFS)

之前的《 Kubernetes持久卷實戰兩部曲》系列中,我們實戰了先宣告一個儲存卷,再使用這個儲存卷,這種方式要求每次都要提前申明儲存,不是很方便,而動態卷儲存不需要提前申明,而是使用時自動申明,今天我們就來一起實戰; 參考資料 本章

Kubernetes 中的 StorageClass動態供給_Kubernetes中文社群

儲存是容器執行環境的重要一環,Kubernetes 提供了一些用於儲存管理的基礎能力。動態卷供給是一個 Kubernetes 獨有的功能,這一功能允許按需建立儲存卷。在沒有這種能力之前,叢集管理員需要打電話給他們的雲或者儲存提供者來建立新的儲存卷,成功以後再建立 PersistentVolum

細述Kubernetes中的StorageClass動態供給

儲存是容器執行環境的重要一環,Kubernetes 提供了一些用於儲存管理的基礎能力。動態卷供給是一個 K

kubernetes的ceph RBD volume(2): 使用Ceph RBD作為persistent volume

以下是使用ceph RBD作為persistent volume的例子: A PersistentVolume (PV) is a piece of networked storage in the cluster that has been provisioned by

[Kubernetes] 容器掛載 ceph rbd 的平滑擴容方法

一、 背景介紹         在之前的部落格已經介紹了 Kubernetes 整合 ceph 分散式儲存實現資料持久化的技術;         本篇介紹如何對已經掛載到容器的rbd捲進行空間擴(縮)容! 二、 操作步驟 2.1   定位容器所使用的 ceph rbd 卷名

Docker和Kubernetes中使用Ceph RBD的原理分析

在Docker或者Kubernetes中使用Ceph RBD塊裝置,相比於在宿主機中,是否會對效能造成額外損失?帶著這些疑問對相關

Kubernetes 使用 ceph-csi 消費 RBD 作為持久化儲存

> 原文連結:[https://fuckcloudnative.io/posts/kubernetes-storage-using-ceph-rbd/](https://fuckcloudnative.io/posts/kubernetes-storage-using-ceph-rbd/) 本文詳細介紹瞭如

DHCP 動態主機配置協議   Dynamic Host Configuration Protocol

dhcp 局域網的 網絡協議,使用 UDP協議工作, 主要有兩個用途:給內部網絡或 網絡服務供應商自動分配 IP地址,給用戶或者內部 網絡管理員作為對所有 計算機作中央管理的手段,端口:udp 67:服務器端 ;udp 68:客戶端DHCP具有以下功能:1. 保證任何IP地址在同一時刻只能由一臺DHCP客戶機

Linux下安裝Python3的django並配置mysql作為django默認數據庫(轉載)

make lba del log pri ica www src rim 我的操作系統為centos6.5 1 首先選擇django要使用什麽數據庫。django1.10默認數據庫為sqlite3,本人想使用mysql數據庫,但為了測試方便順便要安裝一下sqlite開發

confd動態生成配置文件

per clas back git clone nod bsp zookeeper bash build 下載安裝confd $ mkdir -p $GOPATH/src/github.com/kelseyhightower $ git clone https://git

nginx+upsync+consul 構建動態nginx配置系統

consul+nginx+upsync參考:http://www.php230.com/weixin1456193048.html 【upsync模塊說明、性能評測】https://www.jianshu.com/p/76352efc5657https://www.jianshu.com/p/c3fe55e

動態RIP配置路由表

mage pos 例子 work ip配置 分享圖片 ip route 成功 img 動態RIP配置路由表 以Router11為例子: (1)配置端口ip(兩個端口需要設置兩個ip) Router(config)#inter f0/0 Router(config-

VMWare虛擬機-Linux集群搭建詳細流程-2.登錄-分配動態ip-配置Xshell5.exe

ase 分享圖片 height eight sel idt class vertica img 如圖: VMWare虛擬機-Linux集群搭建詳細流程-2.登錄-分配動態ip-配置Xshell5.exe

動態PNAT配置

ati shutdown ip route auto onf marker 實驗 enter address 實驗名稱:思科路由動態PNAT配置實驗拓撲:實驗環境:1、3臺路由器,2、一臺交換機Router 0 邊界路由器(內網和外網)Router 1 邊界路由器(公網的內

kubernetes集群配置dns服務

bin 留言 guarantee quest sch aaa .cn eve 介紹 本文將在前文的基礎上介紹在kubernetes集群環境中配置dns服務,在k8s集群中,pod的生命周期是短暫的,pod重啟後ip地址會產生變化,對於應用程序來說這是不可接受的,為解決這個問

動態主機配置協議DHCP

廣泛 中繼代理 orange 手動 p地址 默認 form 展示 down 動態主機配置協議DHCP 當某組織獲得一塊地址後,就可以為本組織內的主機或者路由器分配IP地址。這個分配工作可以由系統管理員手動通過網絡管理工具來完成。也可以由動態主機配置協議(Dynamic H

路由器RIP動態路由配置

網絡 基礎 IT 實驗目的:掌握 RIP 協議的配置方法;掌握查看通過動態路由協議 RIP 學習產生的路由;熟悉廣域網線纜的鏈接方式; 實驗背景假設校園網通過一臺三層交換機連到校園網出口路由器上,路由器再和校園外的另一臺路由器連接。現要做適當配置,實現校園網內部主機與校園網外部主機之間的相互通信。