如何使用Rancher在OpenStack上創建K8S集群

  • 2020 年 4 月 10 日
  • 筆記

不可否認的是,OpenStack仍然是可行的雲作業系統,並且被全世界許多互聯服務提供商使用。而Rancher是業界最為廣泛使用的Kubernetes管理平台,通過簡潔直觀的GUI集中管理企業IT中的多個Kubernetes集群。Rancher還提供用於應用程式開發的集成工具以及用於安全性和治理的強大的企業級功能。目前Rancher已有三億核心鏡像下載量。本文將使用Rancher在Openstack上創建一個Kubernetes集群。

本文中的設置是在teuto.net運營的Bielefeld的teutoStack公有雲環境中執行的,因此安裝過程可能會有略微不同。

Kubernetes本身與OpenStack集成已經一段時間了,並且已經建立了良好的基礎。它由兩個組件組成:OpenStack雲提供程式以及OpenStack節點驅動程式。在Rancher中,默認可以獲取雲提供程式,同時Rancher中也有節點驅動程式,但是這不是默認提供的。

在OpenStack上構建一個Rancher Kubernetes集群有兩種方式:使用OpenStack節點驅動程式或通過自定義節點設置(https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/)。

為了便於訪問,本文中的所有配置示例你都可以在Github上獲取:

https://github.com/chfrank-cgn/Rancher/tree/master/openstack

啟動OpenStack雲提供程式

要允許Kubernetes訪問OpenStack API,以創建load balancer或volume,需要啟用OpenStack雲提供程式。為此,請在Rancher GUI中為雲提供程式創建集群時選擇「自定義」選項,然後將以下資訊插入集群配置(通過「編輯YAML」)——你可以根據需要替換實際值:

rancher_kubernetes_engine_config:  ...    cloud_provider:      name: "openstack"      openstackCloudProvider:        block_storage:          ignore-volume-az: true          trust-device-path: false          bs-version: "v2"        global:          auth-url: "https://api.openstack.net:5000/v3" # Keystone Auth URL          domain-name: "Default" # Identity v3 Domain Name          tenant-id: "616a8b01b5f94f99acd00a844f8f46c3" # Project ID          username: "user" # OpenStack Username          password: "pass" # OpenStack Password        load_balancer:          lb-version: "v2"          subnet-id: "f339e543-a67f-45fa-8157-4a58b0940e0b"          floating-network-id: "ca27ca05-2870-47b3-ad2f-535d04c9e736"          create-monitor: false          manage-security-groups: true          monitor-max-retries: 0          use-octavia: true        metadata:          request-timeout: 0    ignore_docker_version: false    ...  

有了這些資訊,Kubernetes將可以訪問OpenStack API,創建和刪除資源以及訪問Cinder volume和Octavia負載均衡器。沒有這一配置,Kubernetes集群也能夠良好運行,只是無法訪問Cinder或者Octavia,或者其他OpenStack資源。

方式1:使用OpenStack節點驅動程式創建集群

需要在Rancher配置中啟用節點驅動程式,才能使用內置節點驅動程式在OpenStack上創建Kubernetes集群。然後需要使用以下資訊創建一個節點模板(可以根據需要更換實際值):

  "authUrl": "https://api.openstack.net:5000/v3",  "availabilityZone": "Zone1",  "domainName": "Default",  "flavorName": "standard.2.1905",  "floatingipPool": "extern",  "imageName": "ubuntu-18.04-bionic-amd64",  "keypairName": "rancher",  "netName": "intern",  "sshPort": "22",  "sshUser": "ubuntu",  "tenantId": "616a8b01b5f94f99acd00a844f8f46c3",  "username": "user"  

之後,與所有其他雲提供商一樣,集群創建非常簡單。

安全選項

以下防火牆規則需要在Rancher和OpenStack租戶之間定義,以啟用自動集群設置:

  • 雙向ssh、http和https

  • 從Rancher到租戶節點的2376(docker)

  • 租戶節點之間的2376、2379、2380、6443和10250

方式2:使用自定義節點創建集群

可以在啟動腳本的幫助下從單獨創建的實例中構建集群,以安裝和啟用docker(在Ubuntu 18.04 TLS上):

  #!/bin/sh  apt-get update  apt-get -y install apt-transport-https jq software-properties-common  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"  apt-get update  apt-get -y install docker-ce=18.06.3~ce~3-0~ubuntu  usermod -G docker -a ubuntu  exit 0  

安全事項

需要為OpenStack租戶定義以下防火牆規則,以允許從現有節點創建集群:

  • 來自Workstation的SSH

  • 到Rancher的http和https

訪問Cinder塊存儲

為了訪問Cinder塊存儲,需要應用以下存儲類的定義:

  apiVersion: storage.k8s.io/v1  kind: StorageClass  metadata:    name: cinder  provisioner: kubernetes.io/cinder  reclaimPolicy: Delete  parameters:    availability: nova  

無需進一步操作即可啟用OpenStack負載均衡器。

故障排查

初始設置過程中會出現一些報錯,需要不斷試錯。而Rancher本身就是一個很好的debug資訊來源,它的日誌以標準文件形式輸出,抓住這一線索將對調試有很大幫助,尤其是在創建節點的過程中。