使用 KubeKey 安裝部署 Kubernetes 與 Kube-OVN

作者簡介:林瑞超,銳捷網絡開發工程師, 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。

準備工作

  1. 滿足 KubeKey 的安裝條件
  2. 滿足 Kube-OVN 的安裝條件(主要是內核版本需要滿足要求)

安裝步驟

  1. 下載 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

完整的文檔請參考官方文檔

  1. 修改生成的 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 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章