<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          K0S 使用實戰(zhàn)介紹

          共 17102字,需瀏覽 35分鐘

           ·

          2021-10-26 07:44

          最近兩年一直在使用 kubeadm 部署 Kubernetes 集群,總體來說配合一些自己小腳本還有一些自動化工具還算是方便;但是全容器化穩(wěn)定性確實擔(dān)憂,也遇到過莫名其妙的證書過期錯誤,最后重啟大法解決這種問題;所以也在探索比較方便的二進(jìn)制部署方式,比如這個 k0s。

          一、k0s 介紹

          The Simple, Solid & Certified Kubernetes Distribution.

          k0s 可以認(rèn)為是一個下游的 Kubernetes 發(fā)行版,與原生 Kubernetes 相比,k0s 并未閹割大量 Kubernetes 功能;k0s 主要閹割部分基本上只有樹內(nèi) Cloud provider,其他的都與原生 Kubernetes 相同。

          k0s 自行編譯 Kubernetes 源碼生成 Kubernetes 二進(jìn)制文件,然后在安裝后將二進(jìn)制文件釋放到宿主機(jī)再啟動;這種情況下所有功能幾乎與原生 Kubernetes 沒有差異。

          二、k0sctl 使用

          k0sctl 是 k0s 為了方便快速部署集群所提供的工具,有點類似于 kubeadm,但是其擴(kuò)展性要比 kubeadm 好得多。在多節(jié)點的情況下,k0sctl 通過 SSH 鏈接目標(biāo)主機(jī)然后按照步驟釋放文件并啟動 Kubernetes 相關(guān)服務(wù),從而完成集群初始化。

          2.1、k0sctl 安裝集群

          安裝過程中會自動下載相關(guān)鏡像,需要保證所有節(jié)點可以扶墻,如何離線安裝后面講解。安裝前保證目標(biāo)機(jī)器的 hostname 為非域名形式,否則可能會出現(xiàn)一些問題。以下是一個簡單的啟動集群示例:

          首先安裝 k0sctl:

          #?安裝?k0sctl
          wget?https://github.com/k0sproject/k0sctl/releases/download/v0.9.0/k0sctl-linux-x64
          chmod?+x?k0sctl-linux-x64
          mv?k0sctl-linux-x64?/usr/local/bin/k0sctl

          然后編寫 k0sctl.yaml 配置文件:

          apiVersion:?k0sctl.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s-cluster
          spec:
          ??hosts:
          ??-?ssh:
          ??????address:?10.0.0.11
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ??-?ssh:
          ??????address:?10.0.0.12
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ??-?ssh:
          ??????address:?10.0.0.13
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ??-?ssh:
          ??????address:?10.0.0.14
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?worker
          ??-?ssh:
          ??????address:?10.0.0.15
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?worker
          ??k0s:
          ????version:?1.21.2+k0s.1
          ????config:
          ??????apiVersion:?k0s.k0sproject.io/v1beta1
          ??????kind:?Cluster
          ??????metadata:
          ????????name:?k0s
          ??????spec:
          ????????api:
          ??????????address:?10.0.0.11
          ??????????port:?6443
          ??????????k0sApiPort:?9443
          ??????????sans:
          ??????????-?10.0.0.11
          ??????????-?10.0.0.12
          ??????????-?10.0.0.13
          ????????storage:
          ??????????type:?etcd
          ??????????etcd:
          ????????????peerAddress:?10.0.0.11
          ????????network:
          ??????????kubeProxy:
          ????????????disabled:?false
          ????????????mode:?ipvs

          最后執(zhí)行 apply 命令安裝即可,安裝前確保你的操作機(jī)器可以 SSH 免密登陸所有目標(biāo)機(jī)器:

          ???tmp?k0sctl?apply?-c?bak.yaml

          ?????????????????????????????????????█████████?█████████?███
          ?????????????????????????????????????███??????????███????███
          ?????????????????????????????????????███??????????███????███
          ?????????????????????????????????????███??????????███????███
          ?????????????????????????????????????█████████????███????██████████

          k0sctl?0.0.0?Copyright?2021,?k0sctl?authors.
          Anonymized?telemetry?of?usage?will?be?sent?to?the?authors.
          By?continuing?to?use?k0sctl?you?agree?to?these?terms:
          https://k0sproject.io/licenses/eula
          INFO?==>?Running?phase:?Connect?to?hosts
          INFO?[ssh]?10.0.0.15:22:?connected
          INFO?[ssh]?10.0.0.11:22:?connected
          INFO?[ssh]?10.0.0.12:22:?connected
          INFO?[ssh]?10.0.0.14:22:?connected
          INFO?[ssh]?10.0.0.13:22:?connected
          INFO?==>?Running?phase:?Detect?host?operating?systems
          INFO?[ssh]?10.0.0.11:22:?is?running?Ubuntu?20.04.2?LTS
          INFO?[ssh]?10.0.0.12:22:?is?running?Ubuntu?20.04.2?LTS
          INFO?[ssh]?10.0.0.14:22:?is?running?Ubuntu?20.04.2?LTS
          INFO?[ssh]?10.0.0.13:22:?is?running?Ubuntu?20.04.2?LTS
          INFO?[ssh]?10.0.0.15:22:?is?running?Ubuntu?20.04.2?LTS
          INFO?==>?Running?phase:?Prepare?hosts
          INFO?==>?Running?phase:?Gather?host?facts
          INFO?[ssh]?10.0.0.11:22:?discovered?ens33?as?private?interface
          INFO?[ssh]?10.0.0.13:22:?discovered?ens33?as?private?interface
          INFO?[ssh]?10.0.0.12:22:?discovered?ens33?as?private?interface
          INFO?==>?Running?phase:?Download?k0s?on?hosts
          INFO?[ssh]?10.0.0.11:22:?downloading?k0s?1.21.2+k0s.1
          INFO?[ssh]?10.0.0.13:22:?downloading?k0s?1.21.2+k0s.1
          INFO?[ssh]?10.0.0.12:22:?downloading?k0s?1.21.2+k0s.1
          INFO?[ssh]?10.0.0.15:22:?downloading?k0s?1.21.2+k0s.1
          INFO?[ssh]?10.0.0.14:22:?downloading?k0s?1.21.2+k0s.1
          ......

          稍等片刻后帶有三個 Master 和兩個 Node 的集群將安裝完成:

          #?注意:目標(biāo)機(jī)器 hostname 不應(yīng)當(dāng)為域名形式,這里的樣例是已經(jīng)修復(fù)了這個問題
          k1.node???~?k0s?kubectl?get?node?-o?wide
          NAME??????STATUS???ROLES????AGE???VERSION???????INTERNAL-IP???EXTERNAL-IP???OS-IMAGE?????????????KERNEL-VERSION?????CONTAINER-RUNTIME
          k1.node???Ready???????10m???v1.21.2+k0s???10.0.0.11?????????????Ubuntu?20.04.2?LTS???5.4.0-77-generic???containerd://1.4.6
          k2.node???Ready???????10m???v1.21.2+k0s???10.0.0.12?????????????Ubuntu?20.04.2?LTS???5.4.0-77-generic???containerd://1.4.6
          k3.node???Ready???????10m???v1.21.2+k0s???10.0.0.13?????????????Ubuntu?20.04.2?LTS???5.4.0-77-generic???containerd://1.4.6
          k4.node???Ready???????10m???v1.21.2+k0s???10.0.0.14?????????????Ubuntu?20.04.2?LTS???5.4.0-77-generic???containerd://1.4.6
          k5.node???Ready???????10m???v1.21.2+k0s???10.0.0.15?????????????Ubuntu?20.04.2?LTS???5.4.0-77-generic???containerd://1.4.6

          2.2、k0sctl 的擴(kuò)展方式

          與 kubeadm 不同,k0sctl 幾乎提供了所有安裝細(xì)節(jié)的可定制化選項,其通過三種行為來完成擴(kuò)展:

          • 文件上傳:k0sctl 允許定義在安裝前的文件上傳,在安裝之前 k0sctl 會把已經(jīng)定義的相關(guān)文件全部上傳到目標(biāo)主機(jī),包括不限于 k0s 本身二進(jìn)制文件、離線鏡像包、其他安裝文件、其他輔助腳本等。

          • Manifests 與 Helm:當(dāng)將特定的文件上傳到 Master 節(jié)點的 /var/lib/k0s/manifests 目錄時,k0s 在安裝過程中會自動應(yīng)用這些配置,類似 kubelet 的 static pod 一樣,只不過 k0s 允許全部資源(包括不限于 Deployment、DaemonSet、namespace 等);同樣也可以直接在 k0sctl.yaml 添加 Helm 配置,k0s 也會以同樣的方式幫你管理。

          • 輔助腳本:可以在每個主機(jī)下配置 hooks 選項來實現(xiàn)執(zhí)行一些特定的腳本(文檔里沒有,需要看源碼),以便在特定情況下做點騷操作。

          2.3、k0sctl 使用離線鏡像包

          基于上面的擴(kuò)展,k0s 還方便的幫我們集成了離線鏡像包的自動導(dǎo)入,我們只需要定義一個文件上傳,將鏡像包上傳到 /var/lib/k0s/images/ 目錄后,k0s 會自定將其倒入到 containerd 中而無需我們手動干預(yù):

          apiVersion:?k0sctl.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s-cluster
          spec:
          ??hosts:
          ??-?ssh:
          ??????address:?10.0.0.11
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ????#?files?配置將會在安裝前將相關(guān)文件上傳到目標(biāo)主機(jī)
          ????files:
          ????-?name:?image-bundle
          ??????src:?/Users/bleem/tmp/bundle_file
          ??????#?在該目錄下的?image?壓縮包將會被自動導(dǎo)入到?containerd?中
          ??????dstDir:?/var/lib/k0s/images/
          ??????perm:?0755
          ......

          關(guān)于 image 壓縮包(bundle_file)如何下載以及自己自定義問題請參考官方 Airgap install[1] 文檔。

          2.4、切換 CNI 插件

          默認(rèn)情況下 k0s 內(nèi)部集成了兩個 CNI 插件:Calico 和 kube-router;如果我們使用其他的 CNI 插件例如 Flannel,我們只需要將默認(rèn)的 CNI 插件設(shè)置為 custom,然后將 Flannel 的部署 yaml 上傳到一臺 Master 的 /var/lib/k0s/manifests 目錄即可,k0s 會自動幫我們執(zhí)行 apply -f xxxx.yaml 這種操作。

          下面是切換到 Flannel 的樣例,需要注意的是 Flannel 官方鏡像不會幫你安裝 CNI 的二進(jìn)制文件,我們需要借助文件上傳自己安裝(CNI GitHub 插件下載地址[2]):

          apiVersion:?k0sctl.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s-cluster
          spec:
          ??hosts:
          ??-?ssh:
          ??????address:?10.0.0.11
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ????files:
          ????#?將?Flannel?的?yaml?放到?Manifests?里(需要單獨創(chuàng)建一個目錄)
          ????-?name:?flannel
          ??????src:?/Users/bleem/tmp/kube-flannel.yaml
          ??????dstDir:?/var/lib/k0s/manifests/flannel
          ??????perm:?0644
          ????#?自己安裝一下?CNI?插件
          ????-?name:?cni-plugins
          ??????src:?/Users/bleem/tmp/cni-plugins/*
          ??????dstDir:?/opt/cni/bin/
          ??????perm:?0755
          ??k0s:
          ????version:?v1.21.2+k0s.1
          ????config:
          ??????apiVersion:?k0s.k0sproject.io/v1beta1
          ??????kind:?Cluster
          ??????metadata:
          ????????name:?k0s
          ??????spec:
          ????????api:
          ??????????address:?10.0.0.11
          ??????????port:?6443
          ??????????k0sApiPort:?9443
          ??????????sans:
          ??????????-?10.0.0.11
          ??????????-?10.0.0.12
          ??????????-?10.0.0.13
          ????????storage:
          ??????????type:?etcd
          ????????network:
          ??????????podCIDR:?10.244.0.0/16
          ??????????serviceCIDR:?10.96.0.0/12
          ??????????#?這里指定?CNI?為?custom?自定義類型,這樣
          ??????????#?k0s?就不會安裝?Calico/kube-router?了
          ??????????provider:?custom

          2.5、上傳 k0s 二進(jìn)制文件

          除了普通文件、鏡像壓縮包等,默認(rèn)情況下 k0sctl 在安裝集群時還會在目標(biāo)機(jī)器上下載 k0s 二進(jìn)制文件;當(dāng)然在離線環(huán)境下這一步也可以通過一個簡單的配置來實現(xiàn)離線上傳:

          apiVersion:?k0sctl.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s-cluster
          spec:
          ??hosts:
          ??-?ssh:
          ??????address:?10.0.0.11
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ????#?聲明需要上傳二進(jìn)制文件
          ????uploadBinary:?true
          ????#?指定二進(jìn)制文件位置
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????files:
          ????-?name:?flannel
          ??????src:?/Users/bleem/tmp/kube-flannel.yaml
          ??????dstDir:?/var/lib/k0s/manifests/flannel
          ??????perm:?0644
          ......

          2.6、更換鏡像版本

          默認(rèn)情況下 k0s 版本號與 Kubernetes 保持一致,但是如果期望某個組件使用特定的版本,則可以直接配置這些內(nèi)置組件的鏡像名稱:

          apiVersion:?k0sctl.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s-cluster
          spec:
          ??hosts:
          ??-?ssh:
          ??????address:?10.0.0.11
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ????uploadBinary:?true
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????files:
          ????-?name:?flannel
          ??????src:?/Users/bleem/tmp/kube-flannel.yaml
          ??????dstDir:?/var/lib/k0s/manifests/flannel
          ??????perm:?0644
          ......
          ??k0s:
          ????version:?v1.21.2+k0s.1
          ????config:
          ??????apiVersion:?k0s.k0sproject.io/v1beta1
          ??????kind:?Cluster
          ??????metadata:
          ????????name:?k0s
          ??????spec:
          ????????api:
          ??????????address:?10.0.0.11
          ??????????port:?6443
          ??????????k0sApiPort:?9443
          ??????????sans:
          ??????????-?10.0.0.11
          ??????????-?10.0.0.12
          ??????????-?10.0.0.13
          ????????#?指定內(nèi)部組件的鏡像使用的版本
          ????????images:
          ??????????#konnectivity:
          ??????????#??image:?us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent
          ??????????#??version:?v0.0.21
          ??????????#metricsserver:
          ??????????#??image:?gcr.io/k8s-staging-metrics-server/metrics-server
          ??????????#??version:?v0.3.7
          ??????????kubeproxy:
          ????????????image:?k8s.gcr.io/kube-proxy
          ????????????version:?v1.21.3
          ??????????#coredns:
          ??????????#??image:?docker.io/coredns/coredns
          ??????????#??version:?1.7.0
          ??????????#calico:
          ??????????#??cni:
          ??????????#????image:?docker.io/calico/cni
          ??????????#????version:?v3.18.1
          ??????????#??node:
          ??????????#????image:?docker.io/calico/node
          ??????????#????version:?v3.18.1
          ??????????#??kubecontrollers:
          ??????????#????image:?docker.io/calico/kube-controllers
          ??????????#????version:?v3.18.1
          ??????????#kuberouter:
          ??????????#??cni:
          ??????????#????image:?docker.io/cloudnativelabs/kube-router
          ??????????#????version:?v1.2.1
          ??????????#??cniInstaller:
          ??????????#????image:?quay.io/k0sproject/cni-node
          ??????????#????version:?0.1.0
          ??????????default_pull_policy:?IfNotPresent
          ??????????#default_pull_policy:?Never

          2.7、調(diào)整 Master 組件參數(shù)

          熟悉 Kubernetes 的應(yīng)該清楚,Master 上三大組件:apiserver、controller、scheduler 管控整個集群;在 k0sctl 安裝集群的過程中也允許自定義這些組件的參數(shù),這些調(diào)整通過修改使用的 k0sctl.yaml 配置文件完成。

          • spec.api.extraArgs:用于自定義 kube-apiserver 的自定義參數(shù)(KV map)

          • spec.scheduler.extraArgs:用于自定義 kube-scheduler 的自定義參數(shù)(KV map)

          • spec.controllerManager.extraArgs:用于自定義 kube-controller-manager 自定義參數(shù)(KV map)

          • spec.workerProfiles:用于覆蓋 kubelet-config.yaml 中的配置,該配置最終將于默認(rèn)的 kubelet-config.yaml 合并

          除此之外在 Host 配置中還有一個 InstallFlags 配置用于傳遞 k0s 安裝時的其他配置選項。

          三、k0s HA 搭建

          其實上面的第二部分主要都是介紹 k0sctl 一些基礎(chǔ)功能,為的就是給下面這部分 HA 生產(chǎn)級部署做鋪墊。

          就目前來說,k0s HA 僅支持獨立負(fù)載均衡器的 HA 架構(gòu);即外部需要有一個高可用的 4 層負(fù)載均衡器,其他所有 Node 節(jié)點鏈接這個負(fù)載均衡器實現(xiàn) Master 的高可用。在使用 k0sctl 命令搭建 HA 集群時很簡單,只需要添加一個外部負(fù)載均衡器地址即可;以下是一個完整的,全離線狀態(tài)下的 HA 集群搭建配置。

          3.1、外部負(fù)載均衡器

          在搭建之前我們假設(shè)已經(jīng)有一個外部的高可用的 4 層負(fù)載均衡器,且負(fù)載均衡器已經(jīng)負(fù)載了以下端口:

          • 6443(for Kubernetes API):負(fù)載均衡器 6443 負(fù)載所有 Master 節(jié)點的 6443

          • 9443(for controller join API):負(fù)載均衡器 9443 負(fù)載所有 Master 節(jié)點的 9443

          • 8132(for Konnectivity agent):負(fù)載均衡器 8132 負(fù)載所有 Master 節(jié)點的 8132

          • 8133(for Konnectivity server):負(fù)載均衡器 8133 負(fù)載所有 Master 節(jié)點的 8133

          以下為一個 Nginx 4 層代理的樣例:

          error_log?syslog:server=unix:/dev/log?notice;

          worker_processes?auto;
          events?{
          ?multi_accept?on;
          ?use?epoll;
          ?worker_connections?1024;
          }

          stream?{
          ????upstream?kube_apiserver?{
          ????????least_conn;
          ????????server?10.0.0.11:6443;
          ????????server?10.0.0.12:6443;
          ????????server?10.0.0.13:6443;
          ????}
          ????upstream?konnectivity_agent?{
          ????????least_conn;
          ????????server?10.0.0.11:8132;
          ????????server?10.0.0.12:8132;
          ????????server?10.0.0.13:8132;
          ????}
          ????upstream?konnectivity_server?{
          ????????least_conn;
          ????????server?10.0.0.11:8133;
          ????????server?10.0.0.12:8133;
          ????????server?10.0.0.13:8133;
          ????}
          ????upstream?controller_join_api?{
          ????????least_conn;
          ????????server?10.0.0.11:9443;
          ????????server?10.0.0.12:9443;
          ????????server?10.0.0.13:9443;
          ????}
          ????
          ????server?{
          ????????listen????????0.0.0.0:6443;
          ????????proxy_pass????kube_apiserver;
          ????????proxy_timeout?10m;
          ????????proxy_connect_timeout?1s;
          ????}
          ????server?{
          ????????listen????????0.0.0.0:8132;
          ????????proxy_pass????konnectivity_agent;
          ????????proxy_timeout?10m;
          ????????proxy_connect_timeout?1s;
          ????}
          ????server?{
          ????????listen????????0.0.0.0:8133;
          ????????proxy_pass????konnectivity_server;
          ????????proxy_timeout?10m;
          ????????proxy_connect_timeout?1s;
          ????}
          ????server?{
          ????????listen????????0.0.0.0:9443;
          ????????proxy_pass????controller_join_api;
          ????????proxy_timeout?10m;
          ????????proxy_connect_timeout?1s;
          ????}
          }

          3.2、搭建 HA 集群

          以下為 k0sctl 的 HA + 離線部署樣例配置:

          apiVersion:?k0sctl.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s-cluster
          spec:
          ??hosts:
          ??-?ssh:
          ??????address:?10.0.0.11
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????#?role?支持的值
          ????#?'controller'?單?Master
          ????#?'worker'?單?Worker
          ????#?'controller?+?worker'?Master?和?Worker?都運行?
          ????role:?controller+worker
          ????
          ????#?從本地?上傳?k0s?bin?文件,不要在目標(biāo)機(jī)器下載
          ????uploadBinary:?true
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????
          ????#?上傳其他文件
          ????files:
          ????#?上傳?Flannel?配置,使用自定的?Flannel?替換內(nèi)置的?Calico
          ????-?name:?flannel
          ??????src:?/Users/bleem/tmp/kube-flannel.yaml
          ??????dstDir:?/var/lib/k0s/manifests/flannel
          ??????perm:?0644
          ????
          ????#?上傳打包好的?image?鏡像包,k0s?會自動導(dǎo)入到?containerd
          ????-?name:?image-bundle
          ??????src:?/Users/bleem/tmp/bundle_file
          ??????dstDir:?/var/lib/k0s/images/
          ??????perm:?0755
          ????
          ????#?使用?Flannel?后每個機(jī)器要上傳對應(yīng)的?CNI?插件
          ????-?name:?cni-plugins
          ??????src:?/Users/bleem/tmp/cni-plugins/*
          ??????dstDir:?/opt/cni/bin/
          ??????perm:?0755
          ??-?ssh:
          ??????address:?10.0.0.12
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ????uploadBinary:?true
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????files:
          ????-?name:?image-bundle
          ??????src:?/Users/bleem/tmp/bundle_file
          ??????dstDir:?/var/lib/k0s/images/
          ??????perm:?0755
          ????-?name:?cni-plugins
          ??????src:?/Users/bleem/tmp/cni-plugins/*
          ??????dstDir:?/opt/cni/bin/
          ??????perm:?0755
          ??-?ssh:
          ??????address:?10.0.0.13
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?controller+worker
          ????uploadBinary:?true
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????files:
          ????-?name:?image-bundle
          ??????src:?/Users/bleem/tmp/bundle_file
          ??????dstDir:?/var/lib/k0s/images/
          ??????perm:?0755
          ????-?name:?cni-plugins
          ??????src:?/Users/bleem/tmp/cni-plugins/*
          ??????dstDir:?/opt/cni/bin/
          ??????perm:?0755
          ??-?ssh:
          ??????address:?10.0.0.14
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?worker
          ????uploadBinary:?true
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????files:
          ????-?name:?image-bundle
          ??????src:?/Users/bleem/tmp/bundle_file
          ??????dstDir:?/var/lib/k0s/images/
          ??????perm:?0755
          ????-?name:?cni-plugins
          ??????src:?/Users/bleem/tmp/cni-plugins/*
          ??????dstDir:?/opt/cni/bin/
          ??????perm:?0755
          ??-?ssh:
          ??????address:?10.0.0.15
          ??????user:?root
          ??????port:?22
          ??????keyPath:?/Users/bleem/.ssh/id_rsa
          ????role:?worker
          ????uploadBinary:?true
          ????k0sBinaryPath:?/Users/bleem/tmp/k0s
          ????files:
          ????-?name:?image-bundle
          ??????src:?/Users/bleem/tmp/bundle_file
          ??????dstDir:?/var/lib/k0s/images/
          ??????perm:?0755
          ????-?name:?cni-plugins
          ??????src:?/Users/bleem/tmp/cni-plugins/*
          ??????dstDir:?/opt/cni/bin/
          ??????perm:?0755
          ??k0s:
          ????version:?v1.21.2+k0s.1
          ????config:
          ??????apiVersion:?k0s.k0sproject.io/v1beta1
          ??????kind:?Cluster
          ??????metadata:
          ????????name:?k0s
          ??????spec:
          ????????api:
          ??????????#?此處填寫外部的負(fù)載均衡器地址,所有?kubelet?會鏈接這個地址
          ??????????externalAddress:?10.0.0.20
          ??????????#?不要忘了為外部負(fù)載均衡器添加?API?證書的?SAN
          ??????????sans:
          ??????????-?10.0.0.11
          ??????????-?10.0.0.12
          ??????????-?10.0.0.13
          ??????????-?10.0.0.20
          ????????#?存儲類型使用?etcd,etcd?集群由?k0s?自動管理
          ????????storage:
          ??????????type:?etcd
          ????????network:
          ??????????podCIDR:?10.244.0.0/16
          ??????????serviceCIDR:?10.96.0.0/12
          ??????????#?網(wǎng)絡(luò)插件使用?custom,然后讓?Flannel?接管
          ??????????provider:?custom
          ??????????kubeProxy:
          ????????????disabled:?false
          ????????????#?開啟?kubelet?的?ipvs?模式
          ????????????mode:?ipvs
          ????????#?不發(fā)送任何匿名統(tǒng)計信息
          ????????telemetry:
          ??????????enabled:?false
          ????????images:
          ??????????default_pull_policy:?IfNotPresent

          最后只需要執(zhí)行 k0sctl apply -c k0sctl.yaml 稍等幾分鐘集群就搭建好了,安裝過程中可以看到相關(guān)文件的上傳流程:

          3.3、證書續(xù)簽和管理

          kubeadm 集群默認(rèn)證書有效期是一年,到期要通過 kubeadm 重新簽署;k0s 集群也差不多一樣,但是不同的是 k0s 集群更加暴力;只要 CA(默認(rèn) 10年)不丟,k0s 每次重啟都強(qiáng)行重新生成一年有效期的證書,所以在 HA 的環(huán)境下,快到期時重啟一下 k0s 服務(wù)就行。

          k0sctl 安裝完的集群默認(rèn)只有一個 k0scontroller.service 服務(wù),Master、Node 上所有服務(wù)都由這個服務(wù)啟動,所以到期之前 systemctl restart k0scontroller.service 一下就行。

          四、集群備份和恢復(fù)

          k0sctl 提供了集群備份和恢復(fù)功能,默認(rèn)情況下只需要執(zhí)行 k0sctl backup 即可完成集群備份,該命令會在當(dāng)前目錄下生成一個 k0s_backup_TIMESTAMP.tar.gz 備份文件。

          需要恢復(fù)集群時使用 k0sctl apply --restore-from k0s_backup_TIMESTAMP.tar.gz 命令進(jìn)行恢復(fù)即可;需要注意的是恢復(fù)命令等同于在新機(jī)器重新安裝集群,所以有一定風(fēng)險。

          經(jīng)過連續(xù)兩天的測試,感覺這個備份恢復(fù)功能并不算靠譜,還是推薦使用 Velero 備份集群。

          五、其他高級功能

          5.1、etcd 替換

          在小規(guī)模集群場景下可能并不需要特別完善的 etcd 作為存儲,k0s 借助于 kine 庫可以實現(xiàn)使用 SQLite 或 MySQL 等傳統(tǒng)數(shù)據(jù)庫作為集群存儲;如果想要切換存儲只需要調(diào)整 k0sctl.yaml 配置即可:

          apiVersion:?k0s.k0sproject.io/v1beta1
          kind:?Cluster
          metadata:
          ??name:?k0s
          spec:
          ??storage:
          ????type:?kine
          ????kine:
          ??????dataSource:?"sqlite:///var/lib/k0s/db/state.db?more=rwc&_journal=WAL&cache=shared"

          5.2、集群用戶管理

          使用 k0sctl 搭建的集群通過 k0s 命令可以很方便的為集群添加用戶,以下是添加樣例:

          k0s?kubeconfig?create?--groups?"system:masters"?testUser?>?k0s.config

          5.3、Containerd 配置

          在不做配置的情況下 k0s 集群使用默認(rèn)的 Containerd 配置,如果需要自己定義特殊配置,可以在安裝時通過文件上傳方式將 Containerd 配置文件上傳到 /etc/k0s/containerd.toml 位置,該配置將會被 k0s 啟動的 Containerd 讀取并使用。

          六、總結(jié)

          k0s 是個不錯的項目,對于二進(jìn)制宿主機(jī)部署 Kubernetes 集群很方便,由于其直接采用 Kubernetes 二進(jìn)制文件啟動,所以基本沒有功能閹割,而 k0sctl 又為自動化安裝提供了良好的擴(kuò)展性,所以值得一試。不過目前來說 k0s 在細(xì)節(jié)部分還有一定瑕疵,比如 konnectivity 服務(wù)在安裝時無法選擇性關(guān)閉等;k0s 綜合來說是個不錯的工具,也推薦看看源碼,里面很多設(shè)計很新穎也比較利于了解集群引導(dǎo)過程。

          相關(guān)鏈接:

          https://docs.k0sproject.io/v1.21.2+k0s.1/airgap-install/

          https://github.com/containernetworking/plugins/releases

          原文鏈接:https://mritd.com/2021/07/29/test-the-k0s-cluster/

          文章轉(zhuǎn)載:分布式實驗室
          (版權(quán)歸原作者所有,侵刪)

          Linux學(xué)習(xí)指南

          有收獲,點個在看?

          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  羽月希产后再次复出电影 | 91精品国产一区二区三区四区大 | 亚洲精品一区二区三区在线观看 | 无码乱伦网站 | 俺来俺来也www色官网 |