1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        繼 K3s 之后,又來個(gè) K0s...

        共 32398字,需瀏覽 65分鐘

         ·

        2021-09-03 16:19


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

        一、k0s 介紹

        The Simple, Solid & Certified Kubernetes Distribution.

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

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

        二、k0sctl 使用

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

        2.1、k0sctl 安裝集群

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

        首先安裝 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ī)器:

        $ 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
        ......

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

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

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

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

        • 文件上傳: k0sctl 允許定義在安裝前的文件上傳,在安裝之前 k0sctl 會(huì)把已經(jīng)定義的相關(guān)文件全部上傳到目標(biāo)主機(jī),包括不限于 k0s 本身二進(jìn)制文件、離線鏡像包、其他安裝文件、其他輔助腳本等。
        • Manifests 與 Helm: 當(dāng)將特定的文件上傳到 master 節(jié)點(diǎn)的 /var/lib/k0s/manifests 目錄時(shí),k0s 在安裝過程中會(huì)自動(dòng)應(yīng)用這些配置,類似 kubelet 的 static pod 一樣,只不過 k0s 允許全部資源(包括不限于 deployment、daemonset、namespace 等);同樣也可以直接在 k0sctl.yaml 添加 Helm 配置,k0s 也會(huì)以同樣的方式幫你管理。
        • 輔助腳本: 可以在每個(gè)主機(jī)下配置 hooks 選項(xiàng)來實(shí)現(xiàn)執(zhí)行一些特定的腳本(文檔里沒有,需要看源碼),以便在特定情況下做點(diǎn)騷操作。

        2.3、k0sctl 使用離線鏡像包

        基于上面的擴(kuò)展,k0s 還方便的幫我們集成了離線鏡像包的自動(dòng)導(dǎo)入,我們只需要定義一個(gè)文件上傳,將鏡像包上傳到 /var/lib/k0s/images/ 目錄后,k0s 會(huì)自定將其倒入到 containerd 中而無需我們手動(dòng)干預(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 配置將會(huì)在安裝前將相關(guān)文件上傳到目標(biāo)主機(jī)
            files:
            - name: image-bundle
              src: /Users/bleem/tmp/bundle_file
              # 在該目錄下的 image 壓縮包將會(huì)被自動(dòng)導(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)部集成了兩個(gè) CNI 插件: calico 和 kube-router;如果我們使用其他的 CNI 插件例如 flannel,我們只需要將默認(rèn)的 CNI 插件設(shè)置為 custom,然后將 flannel 的部署 yaml 上傳到一臺(tái) master 的 /var/lib/k0s/manifests 目錄即可,k0s 會(huì)自動(dòng)幫我門執(zhí)行 apply -f xxxx.yaml 這種操作。

        下面是切換到 flannel 的樣例,需要注意的是 flannel 官方鏡像不會(huì)幫你安裝 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 里(需要單獨(dú)創(chuàng)建一個(gè)目錄)
            - 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 就不會(huì)安裝 calico/kube-router 了
                  provider: custom

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

        除了普通文件、鏡像壓縮包等,默認(rèn)情況下 k0sctl 在安裝集群時(shí)還會(huì)在目標(biāo)機(jī)器上下載 k0s 二進(jìn)制文件;當(dāng)然在離線環(huán)境下這一步也可以通過一個(gè)簡單的配置來實(shí)現(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 版本號(hào)與 Kubernetes 保持一致,但是如果期望某個(gè)組件使用特定的版本,則可以直接配置這些內(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 管控整個(gè)集群;在 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 配置中還有一個(gè) InstallFlags 配置用于傳遞 k0s 安裝時(shí)的其他配置選項(xiàng)。

        三、k0s HA 搭建

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

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

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

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

        • 6443(for Kubernetes API): 負(fù)載均衡器 6443 負(fù)載所有 master 節(jié)點(diǎn)的 6443
        • 9443 (for controller join API): 負(fù)載均衡器 9443 負(fù)載所有 master 節(jié)點(diǎn)的 9443
        • 8132 (for Konnectivity agent): 負(fù)載均衡器 8132 負(fù)載所有 master 節(jié)點(diǎn)的 8132
        • 8133 (for Konnectivity server): 負(fù)載均衡器 8133 負(fù)載所有 master 節(jié)點(diǎn)的 8133

        以下為一個(gè) 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 都運(yùn)行
            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 會(huì)自動(dòng)導(dǎo)入到 containerd
            - name: image-bundle
              src: /Users/bleem/tmp/bundle_file
              dstDir: /var/lib/k0s/images/
              perm: 0755

            # 使用 flannel 后每個(gè)機(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 會(huì)鏈接這個(gè)地址
                  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
                # 存儲(chǔ)類型使用 etcd,etcd 集群由 k0s 自動(dòng)管理
                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)計(jì)信息
                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)境下,快到期時(shí)重啟一下 k0s 服務(wù)就行。

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

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

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

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

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

        五、其他高級(jí)功能

        5.1、Etcd 替換

        在小規(guī)模集群場景下可能并不需要特別完善的 Etcd 作為存儲(chǔ),k0s 借助于 kine 庫可以實(shí)現(xiàn)使用 SQLite 或 MySQL 等傳統(tǒng)數(shù)據(jù)庫作為集群存儲(chǔ);如果想要切換存儲(chǔ)只需要調(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 配置,如果需要自己定義特殊配置,可以在安裝時(shí)通過文件上傳方式將 Containerd 配置文件上傳到 /etc/k0s/containerd.toml 位置,該配置將會(huì)被 k0s 啟動(dòng)的 Containerd 讀取并使用。

        六、總結(jié)

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

        引用鏈接

        [1]

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

        [2]

        CNI GitHub 插件下載地址: https://github.com/containernetworking/plugins/releases


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


        你可能還喜歡

        點(diǎn)擊下方圖片即可閱讀

        分布式數(shù)據(jù)庫上 K8s 面臨的困境

        云原生是一種信仰 ??

        關(guān)注公眾號(hào)

        后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



        點(diǎn)擊 "閱讀原文" 獲取更好的閱讀體驗(yàn)!


        發(fā)現(xiàn)朋友圈變“安靜”了嗎?

        瀏覽 93
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            动漫美女被狂揉下部羞羞 | 加勒比一区二区三区 | 夜夜无码 | 在浴室边摸边吃奶边做电影 | 欧美精品粉嫩小泬188 | 偷情自拍网站 | 久久国产色综合久久88女性内衣 | 粉嫩高潮美女一区二区三区 | 免费涩涩视频 | 黄片播放黄片播放黄片播放 |