不可否認的是,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信息來源,它的日志以標准文件形式輸出,抓住這一線索將對調試有很大幫助,尤其是在創建節點的過程中。