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

Zha*_*ian 3 cinder openstack kubernetes

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

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

Zha*_*ian 5

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

制备

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

背景

根据我的调查,组件kube-controller-manager负责在Kubernetes中加载卷插件和相关插件.所以我们可以通过调整kube-controller-manager配置来制作煤渣.

脚步

  1. 准备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
Run Code Online (Sandbox Code Playgroud)

大多数都可以从您的stackrc文件中找到.而ca-file项目是可选的,这取决于如果你的OpenStack的验证网址是httphttps

  1. 调整kube-controller-manager启动配置

此链接是kube-controller-manager(https://kubernetes.io/docs/admin/kube-controller-manager/)的完整详细信息选项

实际上我们应该根据你当前的参数添加两个额外的参数

--cloud-provider=openstack
--cloud-config=/etc/kubernetes/cloud.conf
Run Code Online (Sandbox Code Playgroud)

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

只需一个提示,如果您使用静态pod kube-controller-manager,请确保已将所有文件(如cloud.conf或openstack ca文件)装入容器中.

验证

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

  1. 创建一个名为的存储类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
Run Code Online (Sandbox Code Playgroud)

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

NAME                 TYPE
standard (default)   kubernetes.io/cinder 
Run Code Online (Sandbox Code Playgroud)
  1. 创建PersistentVolumeClaim以使用StorageClass在Cinder中提供持久卷:

演示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
Run Code Online (Sandbox Code Playgroud)

通过创建PVC kubectl create -f demo-pvc.yml

现在按命令检查 kubectl get pvc

NAME           STATUS    VOLUME                                         CAPACITY   ACCESSMODES   STORAGECLASS   AGE
cinder-claim   Bound     pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379   1Gi          RWO           standard       23h
Run Code Online (Sandbox Code Playgroud)

在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   |                                       |
Run Code Online (Sandbox Code Playgroud)

所以现在StorageClass在Kubernetes中使用Cinder工作得很好.