作者簡介:林瑞超,銳捷網絡開發工程師, KubeSphere 社區 contributor, 關注Kube-OVN, Cilium 等容器網絡相關技術
背景
KubeKey 是 KubeSphere V3.0 新增的安裝方式,用戶可以一鍵部署 Kubernetes 和 KubeSphere。Kube-OVN 是一款基於 OVS/OVN 的 Kubernetes 網絡編排系統。本文將爲大家介紹如何使用 KubeKey 來安裝部署 Kubernetes 和 Kube-OVN。
KubeKey 簡介
KubeKey 是 Kubernetes 和 KubeSphere 的新一代 Installer(安裝程序),旨在更方便、快速、高效和靈活地安裝 Kubernetes 與 KubeSphere。KubeKey 摒棄了原來 Ansible 帶來的依賴問題,用 Go 重寫,支持單獨 Kubernetes 或整體安裝 KubeSphere。它也是擴展和升級集羣的有效工具。
Kube-OVN 簡介
Kube-OVN 是一款開源企業級雲原生 Kubernetes 容器網絡編排系統,它通過將 OpenStack 領域成熟的網絡功能平移到 Kubernetes,極大增強了 Kubernetes 容器網絡的安全性、可運維性、管理性和性能。在上個月 Kube-OVN 加入了 CNCF Sandbox。
準備工作
- 滿足 KubeKey 的安裝條件
- 滿足 Kube-OVN 的安裝條件(主要是內核版本需要滿足要求)
安裝步驟
- 下載 KubeKey
如果能正常訪問 GitHub/Googleapis,可以從 GitHub 發佈頁面下載 KubeKey 或直接使用以下命令。
curl -sfL https://get-kk.kubesphere.io | VERSION=v1.0.1 sh -
如果訪問 GitHub/Googleapis 受限 先執行以下命令以確保從正確的區域下載 KubeKey。
export KKZONE=cn
執行以下命令下載 KubeKey。
curl -sfL https://get-kk.kubesphere.io | VERSION=v1.0.1 sh -
下載 KubeKey 後,如果將其傳至新的機器,且訪問 Googleapis 同樣受限,在執行以下步驟之前務必再次執行
export KKZONE=cn
命令。 執行以上命令會下載最新版 KubeKey (v1.0.1),可以修改命令中的版本號下載指定版本。
爲 kk
添加可執行權限:
chmod +x kk
創建示例配置文件:
./kk create cluster --with-kubernetes v1.17.9
完整的文檔請參考官方文檔
- 修改生成的 config-sample.yaml 文件, 把網絡插件改成 Kube-OVN,配置如下:
apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
name: example
spec:
hosts:
- {name: node1, address: 192.168.0.183, internalAddress: 192.168.0.183, port: 22, user: root, password: Qcloud@123}
roleGroups:
etcd:
- node1
master:
- node1
worker:
- node1
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: ""
port: 6443
kubernetes:
version: v1.17.9
imageRepo: kubesphere
clusterName: cluster.local
masqueradeAll: false
maxPods: 110
nodeCidrMaskSize: 24
proxyMode: ipvs
network:
plugin: kubeovn
kubeovn:
joinCIDR: 100.64.0.0/16 #joinCIDR地址
enableSSL: true #開啓SSL
enableMirror: true #是否開啓流量鏡像
pingerExternalAddress: 114.114.114.114 #ping external地址
networkType: geneve #網絡類型, 可選geneve與vlan, 如果選擇vlan, vlan網卡名稱必須填寫
vlanInterfaceName: interface_name #vlan網卡名稱
vlanID: '100' #默認vlanID
dpdkMode: false #是否dpdk模式
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
registryMirrors: []
insecureRegistries: []
privateRegistry: ""
addons: []
在上面的 yaml 中 Kube-OVN 的配置可以不用填寫,將使用默認的配置安裝 Kube-OVN, 即配置可簡化成如下:
network:
plugin: kubeovn
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
部署
./kk create cluster -f config-sample.yaml
在安裝過程中,能看到 Kube-OVN 的部署信息,看到Congratulations
信息,表示集羣已經安裝成功了。
通過kubectl get pod -A
能看到 Kube-OVN 相關的 Pod 已經都正常運行
查看當前的子網kubectl get subnet
,能看到 join 子網與 ovn-default 子網:
如何使用 Kube-OVN
在 Kube-OVN 中通過子網組織 IP,一個或多個 Namespace 可以被綁定到一個子網中,這些 Namespace 下的 Pod 將會從該子網中分配 IP,並使用子網下的網絡配置。如果 Pod 綁定的 Namespace 沒有綁定子網,將使用默認子網 ovn-default 爲其分配 IP 地址。 在 https://github.com/alauda/kube-ovn/wiki 上有關於 Kube-OVN 詳細的使用教程,可移步 Kube-OVN 社區查看。
創建自定義子網
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
name: ls1
spec:
protocol: IPv4
cidrBlock: 10.100.0.0/16 #設置子網網段
excludeIps:
- 10.100.0.1..10.100.0.10 #設置子網排除(不使用)範圍
gateway: 10.100.0.1 #設置子網的網關地址
namespaces: #設置子網綁定的命名空間
- ls1
子網的配置如上(相關字段的含義註釋中有說明), kubectl apply
之後再kubectl get subnet
能看到子網已經創建出來,通過kubectl get subnet ls1 -o yaml
可以查看子網的狀態是否可用。
創建 Pod 並綁定自定義子網
我們已經創建了子網 ls1 並綁定了命名空間 ls1, 接下來我們創建一個 Pod 並綁定 ls1 命名空間:
創建命名空間 kubectl create ns ns1
創建 Nginx Pod 並綁定 ls1 `kubectl run
通過上面兩個步驟,Pod 已經創建出來了,並且分配的 IP 地址在排除地址範圍外,通過kubectl get ip
可以查看 Pod 分配到的 IP 地址與 mac 地址等信息
本文由博客一文多發平臺 OpenWrite 發佈!