Kubernetes Kuryr 是 OpenStack Neutron 的子專案,其主要目標是透過該專案來整合 OpenStack 與 Kubernetes 的網路。該專案在 Kubernetes 中實作了原生 Neutron-based 的網路,因此使用 Kuryr-Kubernetes 可以讓你的 OpenStack VM 與 Kubernetes Pods 能夠選擇在同一個子網路上運作,並且能夠使用 Neutron 的 L3 與 Security Group 來對網路進行路由,以及阻擋特定來源 Port。
Kuryr-Kubernetes 整合有兩個主要組成部分:
- Kuryr Controller: Controller 主要目的是監控 Kubernetes API 來獲取 Kubernetes 資源的變化,然後依據 Kubernetes 資源的需求來執行子資源的分配和資源管理。
- Kuryr CNI:主要是依據 Kuryr Controller 分配的資源來綁定網路至 Pods 上。
本篇我們將說明如何利用DevStack
與Kubespray
建立一個簡單的測試環境。
環境資源與事前準備
準備兩台實體機器,這邊測試的作業系統為CentOS 7.x
,該環境將在扁平(flat)的網路下進行。
IP Address 1 | Role |
---|---|
172.24.0.34 | controller, k8s-master |
172.24.0.80 | compute, k8s-node1 |
更新每台節點的 CentOS 7.x packages:
$ sudo yum --enablerepo=cr update -y |
然後關閉 firewalld 以及 SELinux 來避免實現發生問題:
$ sudo setenforce 0 |
OpenStack Controller 安裝
首先進入172.24.0.34(controller)
,並且執行以下指令。
然後執行以下指令來建立 DevStack 專用使用者:
$ sudo useradd -s /bin/bash -d /opt/stack -m stack |
選用 DevStack 是因為現在都是用 Systemd 來管理服務,不用再用 screen 了,雖然都很方便。
接著切換至該使用者環境來建立 OpenStack:
$ sudo su - stack |
下載 DevStack 安裝套件:
$ git clone https://git.openstack.org/openstack-dev/devstack |
新增local.conf
檔案,來描述部署資訊:
[[local|localrc]] |
[color=#fc9fca]Tips:
修改 HOST_IP 為自己的 IP 位置。
完成後,執行以下指令開始部署:
$ ./stack.sh |
Openstack Compute 安裝
進入到172.24.0.80(compute)
,並且執行以下指令。
然後執行以下指令來建立 DevStack 專用使用者:
$ sudo useradd -s /bin/bash -d /opt/stack -m stack |
選用 DevStack 是因為現在都是用 Systemd 來管理服務,不用再用 screen 了,雖然都很方便。
接著切換至該使用者環境來建立 OpenStack:
$ sudo su - stack |
下載 DevStack 安裝套件:
$ git clone https://git.openstack.org/openstack-dev/devstack |
新增local.conf
檔案,來描述部署資訊:
[[local|localrc]] |
Tips:
修改 HOST_IP 為自己的主機位置。
修改 SERVICE_HOST 為 Master 的IP位置。
完成後,執行以下指令開始部署:
$ ./stack.sh |
建立 Kubernetes 叢集環境
首先確認所有節點之間不需要 SSH 密碼即可登入,接著進入到172.24.0.34(k8s-master)
並且執行以下指令。
接著安裝所需要的套件:
$ sudo yum -y install software-properties-common ansible git gcc python-pip python-devel libffi-devel openssl-devel |
完成後,新增 kubespray 設定檔:
$ cat <<EOF > ~/.kubespray.yml |
然後利用 kubespray-cli 快速產生環境的inventory
檔,並修改部分內容:
$ sudo -i |
編輯/root/.kubespray/inventory/inventory.cfg
,修改以下內容:
[all] |
完成後,即可利用 kubespray-cli 指令來進行部署:
$ kubespray deploy --verbose -u root -k .ssh/id_rsa -n calico |
經過一段時間後就會部署完成,這時候檢查節點是否正常:
$ kubectl get no |
接著為了方便讓 Kuryr Controller 簡單取得 K8s API Server,這邊修改/etc/kubernetes/manifests/kube-apiserver.yml
檔案,加入以下內容:
- "--insecure-bind-address=0.0.0.0" |
Tips:
將 insecure 綁定到 0.0.0.0 之上,以及開啟 8080 Port。
安裝 Openstack Kuryr
進入到172.24.0.34(controller)
,並且執行以下指令。
首先在節點安裝所需要的套件:
$ sudo yum -y install gcc libffi-devel python-devel openssl-devel install python-pip |
然後下載 kuryr-kubernetes 並進行安裝:
$ git clone http://git.openstack.org/openstack/kuryr-kubernetes |
新增kuryr.conf
至/etc/kuryr
目錄:
$ cd kuryr-kubernetes |
接著使用 OpenStack Dashboard 建立相關專案,在瀏覽器輸入Dashboard,並執行以下步驟。
- 新增 K8s project。
- 修改 K8s project member 加入到 service project。
- 在該 Project 中新增 Security Groups,參考 kuryr-kubernetes manually。
- 在該 Project 中新增 pod_subnet 子網路。
- 在該 Project 中新增 service_subnet 子網路。
完成後,修改/etc/kuryr/kuryr.conf
檔案,加入以下內容:
[DEFAULT] |
完成後執行 kuryr-k8s-controller:
$ kuryr-k8s-controller --config-file /etc/kuryr/kuryr.conf |
安裝 Kuryr-CNI
進入到172.24.0.80(node1)
並且執行以下指令。
首先在節點安裝所需要的套件:
$ sudo yum -y install gcc libffi-devel python-devel openssl-devel python-pip |
然後安裝 Kuryr-CNI 來提供給 kubelet 使用:
$ git clone http://git.openstack.org/openstack/kuryr-kubernetes |
新增kuryr.conf
至/etc/kuryr
目錄:
$ cd kuryr-kubernetes |
修改/etc/kuryr/kuryr.conf
檔案,加入以下內容:
[DEFAULT] |
建立 CNI bin 與 Conf 目錄:
$ sudo mkdir -p /opt/cni/bin |
新增/etc/cni/net.d/10-kuryr.conf
CNI 設定檔:
{ |
完成後,更新 oslo 與 vif python 函式庫:
$ sudo pip install 'oslo.privsep>=1.20.0' 'os-vif>=1.5.0' |
最後重新啟動相關服務:
$ sudo systemctl daemon-reload && systemctl restart kubelet.service |