kubernetes - 如何使用 OpenStack Cinder 在 Kubernetes 集群中创建存储类并动态提供持久卷

标签 kubernetes openstack cinder

最近在练习kubernetes的时候,发现没有doc和example专门解释如何在kubernetes中正确使用cinder。

那么如何设置要在 kubernetes 中使用的 cinder 呢?

最佳答案

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

准备

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

  • 背景

    根据我的调查,组件 kube-controller-manager负责在 Kubernetes 中加载卷插件和相关的。所以我们可以通过调整 kube-controller-manager 来使 cinder 可用配置。

    步骤
  • 准备 cloud.conf包含您的 openstack 凭证的文件

  • 准备您的 openstack 凭证并保存为文件,例如 /etc/kubernetes/cloud.conf在 kubernetes 控制面板中 kube-controller-manager位于。以下是 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 item 是可选的,具体取决于您的 openstack auth url 是否为 httphttps
  • 调整 kube-controller-manager开始配置

  • 此链接是 kube-controller-manager 的完整详细选项( https://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 使用静态 pod ,确保您已将所有文件(例如 cloud.conf 或 openstack ca 文件)安装到您的容器中。

    验证

    我们将创建一个存储类,并使用该存储类动态创建持久卷。
  • 创建一个名为 standard 的存储类:

  • 演示-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 
    
  • 创建一个 PersistentVolumeClaim 以在 Cinder 中使用 StorageClass 提供一个 Persistent Volume:

  • 演示 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   |                                       |
    

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

    关于kubernetes - 如何使用 OpenStack Cinder 在 Kubernetes 集群中创建存储类并动态提供持久卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46067591/

    相关文章:

    kubernetes - 有人可以解释不同的Kubernetes Yaml文件和类型吗?

    amazon-web-services - 如何在AWS上获取kubernetes负载均衡器服务的永久IP地址?

    python - 如何查找 kubernetes 中分配给 V1ObjectMeta 的名称是什么?

    python - 如何跟踪特定的终端命令?

    c++ - 我如何在 cinder 中使用 JUCE 库?

    performance - Kubernetes NFS 挂载选项

    c++ - 在 C++ 中使用 libCurl API 验证 SAIO(swift 多合一)

    openstack - Rackspace CloudFile API - 获取对象信息

    c++ - 构造函数必须显式初始化没有默认构造函数的成员

    c++ - 在 Visual Studio 2015 中使用 Cinder-OpenCV