如何使用OpenStack Cinder在Kubernetes Cluster中创建存储类并动态配置持久卷

时间:2017-09-06 05:42:03

标签: kubernetes openstack cinder

最近在练习kubernetes时,我发现没有专门解释如何在kubernetes中正确使用cinder的文档和示例。

那么如何设置煤渣用于kubernetes?

2 个答案:

答案 0 :(得分:5)

我做了一些实验并研究了如何用kubernetes设置煤渣。只需找到合适的文件和分享。

<强>制备

  • kubernetes cluster
  • openstack环境并确保cinder服务可用

<强>背景

从我的调查中,组件kube-controller-manager负责在Kubernetes中加载卷插件和相关内容。因此,我们可以通过调整kube-controller-manager配置来提供cinder。

<强>步骤

  1. 准备cloud.conf文件以包含您的openstack信用
  2. 准备您的openstack信用卡并保存为文件,例如/etc/kubernetes/cloud.conf位于kube-controller-manager所在的kubernetes控制面板中。以下是cloud.conf

    的示例
    [Global]
    auth-url=$your_openstack_auth_url
    username=$your_openstack_user
    password=$your_user_pw
    region=$your_openstack_reigon
    tenant-name=$your_project_name
    domain-name=$your_domain_name
    ca-file=$your_openstack_ca
    

    大多数都可以从您的stackrc文件中找到。 ca-file项是可选的,具体取决于您的openstack身份验证网址是http还是https

    1. 调整kube-controller-manager开始配置
    2. 此链接是kube-controller-managerhttps://kubernetes.io/docs/admin/kube-controller-manager/

      的完整详情选项

      实际上我们应该根据你当前的一个

      添加两个额外的参数
      --cloud-provider=openstack
      --cloud-config=/etc/kubernetes/cloud.conf
      

      启动kube-controller-manager主要有两种方法:1)使用systemd 2)使用静态pod。

      只有一个提示,如果您使用kube-controller-manager的静态窗格,请确保已将所有文件(如cloud.conf或openstack ca文件)挂载到容器中。

      <强>验证

      我们将创建一个存储类,并使用此存储类动态创建持久卷。

      1. 创建名为standard
      2. 存储类

        <强>演示sc.yml:

        apiVersion: storage.k8s.io/v1beta1
        kind: StorageClass
        metadata:
          name: standard
          annotations:
            storageclass.beta.kubernetes.io/is-default-class: "true"
          labels:
            kubernetes.io/cluster-service: "true"
            addonmanager.kubernetes.io/mode: EnsureExists
        provisioner: kubernetes.io/cinder
        

        使用命令kubectl create -f demo-sc.yml创建并使用命令kubectl get sc来验证它是否正确创建

        NAME                 TYPE
        standard (default)   kubernetes.io/cinder 
        
        1. 创建PersistentVolumeClaim以使用StorageClass在Cinder中提供持久卷:
        2. <强>演示pvc.yml:

          kind: PersistentVolumeClaim
          apiVersion: v1
          metadata:
            name: cinder-claim
            annotations:
              volume.beta.kubernetes.io/storage-class: "standard"
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 1Gi
          

          kubectl create -f demo-pvc.yml

          创建PVC

          现在通过命令kubectl get pvc

          进行检查
          NAME           STATUS    VOLUME                                         CAPACITY   ACCESSMODES   STORAGECLASS   AGE
          cinder-claim   Bound     pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379   1Gi          RWO           standard       23h
          

          在openstack环境中,通过命令cinder list | grep pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379

          进行检查
              root@ds0114:~# cinder list | grep pvc-5dd3d62e-9204-11e7-bc43- fa163e0e0379
          | ddd8066d-2e16-4cb2-a89e-cd9d5b99ef1b | available | kubernetes-dynamic- pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379 |  1   |   CEPH_SSD  |  false   |                                       |
          

          所以现在使用Kubernetes中的Cinder,StorageClass运行良好。

答案 1 :(得分:1)

非常感谢您的分享!
该解决方案适用于我(K8S 1.14.3OpenStack Queen),我只添加了参数/ volumeMounts / volume的代码段,如下所示:

参数

- --cloud-provider=openstack  
- --cloud-config=/etc/kubernetes/cloud-config  

volumeMounts

-- mountPath: /etc/kubernetes/cloud-config  
   name: cloud  
   readOnly: true  

音量

-- hostPath:  
     path: /etc/kubernetes/cloud.conf  
     type: FileOrCreate  
   name: cloud