利用Kuryr整合OpenStack與Kubernetes網路(下)

利用Kuryr整合OpenStack與Kubernetes網路(下)

上篇回顧:利用Kuryr整合OpenStack與Kubernetes網路(上)

建立 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
$ sudo pip install -U kubespray

完成後,新增 kubespray 設定檔:

$ cat <<EOF >  ~/.kubespray.yml 
kubespray_git_repo: "https://github.com/kubernetes-incubator/kubespray.git"
# Logging options
loglevel: "info"
EOF

然後利用 kubespray-cli 快速產生環境的inventory檔,並修改部分內容:

$ sudo -i
$ kubespray prepare --masters master --etcds master --nodes node1

編輯/root/.kubespray/inventory/inventory.cfg,修改以下內容:

[all]
master ansible_host=172.24.0.37 ansible_user=root ip=172.24.0.37
node1 ansible_host=172.24.0.34 ansible_user=root ip=172.24.0.34
[kube-master]
master
[kube-node]
master
node1
[etcd]
master
[k8s-cluster:children]
kube-node1
kube-master

完成後,即可利用 kubespray-cli 指令來進行部署:

$ kubespray deploy --verbose -u root -k .ssh/id_rsa -n calico

經過一段時間後就會部署完成,這時候檢查節點是否正常:

$ kubectl get no
NAME      STATUS         AGE       VERSION
master    Ready,master   2m        v1.7.4
node1     Ready          2m        v1.7.4

接著為了方便讓 Kuryr Controller 簡單取得 K8s API Server,這邊修改/etc/kubernetes/manifests/kube-apiserver.yml檔案,加入以下內容:

– “–insecure-bind-address=0.0.0.0”
– “–insecure-port=8080”

Tips:

將 insecure 綁定到 0.0.0.0 之上,以及開啟 8080 Port。

安裝 Openstack Kuryr

進入到172.24.0.37(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
$ pip install -e kuryr-kubernetes

新增kuryr.conf至/etc/kuryr目錄:

$ cd kuryr-kubernetes
$ ./tools/generate_config_file_samples.sh
$ sudo mkdir -p /etc/kuryr/
$ sudo cp etc/kuryr.conf.sample /etc/kuryr/kuryr.conf

接著使用 OpenStack Dashboard 建立相關專案,在瀏覽器輸入Dashboard,並執行以下步驟。

  1. 新增 K8s project。
  2. 修改 K8s project member 加入到 service project。
  3. 在該 Project 中新增 Security Groups,參考 kuryr-kubernetes manually。
  4. 在該 Project 中新增 pod_subnet 子網路。
  5. 在該 Project 中新增 service_subnet 子網路。

完成後,修改/etc/kuryr/kuryr.conf檔案,加入以下內容:

[DEFAULT]
use_stderr = true
bindir = /usr/local/libexec/kuryr
[kubernetes]
api_root = http://172.24.0.37:8080
[neutron]
auth_url = http://172.24.0.37/identity
username = admin
user_domain_name = Default
password = admin
project_name = service
project_domain_name = Default
auth_type = password
[neutron_defaults]
ovs_bridge = br-int
pod_security_groups = {id_of_secuirity_group_for_pods}
pod_subnet = {id_of_subnet_for_pods}
project = {id_of_project}
service_subnet = {id_of_subnet_for_k8s_services}

完成後執行 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
$ sudo pip install -e kuryr-kubernetes

新增kuryr.conf至/etc/kuryr目錄:

$ cd kuryr-kubernetes
$ ./tools/generate_config_file_samples.sh
$ sudo mkdir -p /etc/kuryr/
$ sudo cp etc/kuryr.conf.sample /etc/kuryr/kuryr.conf

修改/etc/kuryr/kuryr.conf檔案,加入以下內容:

[DEFAULT]
use_stderr = true
bindir = /usr/local/libexec/kuryr
[kubernetes]
api_root = http://172.24.0.37:8080

建立 CNI bin 與 Conf 目錄:

$ sudo mkdir -p /opt/cni/bin
$ sudo ln -s $(which kuryr-cni) /opt/cni/bin/
$ sudo mkdir -p /etc/cni/net.d/

新增/etc/cni/net.d/10-kuryr.conf CNI 設定檔:

{
“cniVersion”: “0.3.0”,
“name”: “kuryr”,
“type”: “kuryr-cni”,
“kuryr_conf”: “/etc/kuryr/kuryr.conf”,
“debug”: true
}

完成後,更新 oslo 與 vif python 函式庫:

$ sudo pip install 'oslo.privsep>=1.20.0' 'os-vif>=1.5.0'

最後重新啟動相關服務:

sudo systemctl daemon-reload && systemctl restart kubelet.service

測試結果

我們這邊開一個 Pod 與 OpenStack VM 來進行溝通:

撰文: 白凱仁 迎棧科技軟體工程師

訂閱電子報

Select list(s)*

 

Loading