什麼是K3?

K3s 是 Kubernetes 的輕量級版本。這是一個高度可用的 Kubernetes 認證發行版,專為無人值守、資源受限的遠程位置或物聯網設備中的生產工作負載而設計。 K3 的開發者聲稱 K3 幾乎可以做 K8 可以做的任何事情。

那麼什麼是這樣一個輕量級的發行版呢?

通過在一個進程中運行多個組件來減少內存使用。這消除了每個組件的大量重複開銷。通過刪除第三方存儲驅動程序和雲服務提供商,二進製文件會更小。

  • 它需要更少的內存來運行。
  • 一個 40Mb 的小型二進製文件,包含用於啟動集群的所有非容器組件。

特徵

K3s 是一個完全兼容的 K8s 發行版,具有以下特性:

  • 它被打包為單個二進製文件。
  • 它包括基於 SQLite 3(一種輕量​​級嵌入式數據庫管理系統)作為默認存儲引擎的輕量級後端存儲介質。 Etcd3、MySQL 和 Postgres 數據庫也可用。
  • K3s 使用一個簡單的啟動器來處理許多複雜的 TLS 職責和其他功能。
  • 添加的功能包括本地存儲提供程序、負載均衡器、Helm 控制器(工具提示:幫助安裝和管理 K8s 應用程序生命週期的打包程序)、Traefik 登錄控制器(工具提示:支持 Docker 的反向代理,內置 dash)。 ) 已經包括了。
  • 所有控制組件都在單個二進製文件和進程中運行。
  • 幾乎所有外部依賴項都被最小化以減小大小(只需要內核和 cgroups)。

先決條件

  • 必須提前註意實施符合此要求的命名方案,因為沒有兩個節點可以共享相同的主機名。
  • 如果節點已經共享相同的主機名,您可以使用“-with-node-id”標誌為每個節點添加一個隨機後綴。否則,您必須使用 -node-name 標誌或 $ K3S_NODE_NAME 為添加到集群的每個節點創建一個唯一名稱。

依賴項

K3s 包需要以下依賴項才能工作:

  • 容器
  • 絨布
  • 核心 DNS
  • CNI-容器網絡接口
  • 主機實用程序(iptables、socat 等)
  • 輸入控制器(traefik)
  • 內置負載均衡服務
  • 內置網絡策略控制器

內部配置

K3s架構

與 K8 相比,K3 沒有明確區分主節點和工作節點。這意味著可以在任何節點上對模塊進行調度和管理。因此,master 和 worker 的名稱並不嚴格適用於 K3。

在 K3s 集群中,運行管理組件和 Kubelet 的節點稱為服務器。 僅運行 Kubelet 的節點稱為代理。服務器和代理具有容器運行時,用於管理集群內的隧道和網絡流量。在典型的 K3s 環境中,您運行一個服務器和多個代理。如果您在安裝期間傳遞 URL,則該節點將是一個代理。否則,啟動另一個獨立的 K3s 集群及其管理。

另一個重點是如何管理集群的狀態。 K8s 依賴於 etcd(一種開源分佈式鍵值存儲)和鍵值分佈式數據庫來存儲集群狀態信息的其餘部分。 K3s 用一個輕量級的 SQLite 數據庫替換了 etcd。 通過在至少 3 個節點上運行 etcd,K8s 管理級別是高可用的。另一方面,SQLite 不是分佈式數據庫,因此它是鏈條中最薄弱的環節。

K3s安裝配置

要部署具有主節點和工作節點的 K3s 集群,您需要三台運行 Ubuntu 18 的服務器。每台服務器至少有 1GB 的 RAM 和一個處理器。 一台服務器將用作主服務器,另外兩台將用作工作服務器。

注意:測試服務器打開了所有端口,但您不能在生產環境中執行此操作。但是,由於測試選項,默認情況下所有端口都是打開的。您需要打開端口 6443。

更新服務器

首先,更新每個服務器。顯示基本主信息和鍵盤命令。

然後使用此命令更新主服務器和其他包含的服務器。

[email protected]:~# sudo apt update && sudo apt -y upgrade 

現在您需要找出虛擬網絡的 IP。這可以使用以下命令完成:

[email protected]:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:35:cf:4e:e6:fe brd ff:ff:ff:ff:ff:ff
    inet 172.31.11.188/20 brd 172.31.15.255 scope global dynamic eth0
       valid_lft 3158sec preferred_lft 3158sec
    inet6 fe80::35:cfff:fe4e:e6fe/64 scope link
       valid_lft forever preferred_lft forever
[email protected]:~#

主 IP 172.31.11.188

現在用同樣的方法找到其他服務器的IP。請務必在每個服務器的 /etc/hosts 文件中添加一個虛擬網絡條目。

[email protected]:~#
sudo tee -a /etc/hosts<<EOF
172.31.11.188 k3s-master
172.31.10.103 k3s-worker1
172.31.10.103 k3s-worker2
EOF

[email protected]:~# sudo tee -a /etc/hosts<<EOF
> 172.31.11.188 k3s-master
> 172.31.10.103 k3s-worker1
> 172.31.10.103 k3s-worker2
> EOF
172.31.11.188 k3s-master
172.31.10.103 k3s-worker1
172.31.10.103 k3s-worker2
[email protected]:~#

同樣,這些任務必須在每台服務器上執行。通過這種方式,代理知道在哪裡尋找更新和主機。

在master上安裝K3

然後您可以在主服務器上安裝 K3。有很多方法可以做到這一點,但這是最簡單的方法。

[email protected]:~# curl -sfL https://get.k3s.io | sh -
/etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
[email protected]:~#

確認安裝

K3 應該在安裝後自動啟動。讓我們使用這個命令進行檢查。

[email protected]:~# systemctl status k3s
● k3s.service - Lightweight Kubernetes
   Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-09-22 18:39:02 UTC; 29s ago
     Docs: https://k3s.io
  Process: 13245 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
  Process: 13240 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
 Main PID: 13249 (k3s-server)
    Tasks: 78
   CGroup: /system.slice/k3s.service
           ├─13249 /usr/local/bin/k3s server
           ├─13285 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
           ├─13718 /var/lib/rancher/k3s/data/19bb6a9b46ad0013de084cf1e0feb7927ff9e4e06624685ff87f003c208fded1/bin/containerd-shim-runc-v2 -namespace k8s.io -id fbb9d4ec16b5e70b08ae9c968d4ae96f35b0d3328303c1
           ├─13720 /var/lib/rancher/k3s/data/19bb6a9b46ad0013de084cf1e0feb7927ff9e4e06624685ff87f003c208fded1/bin/containerd-shim-runc-v2 -namespace k8s.io -id da00cf5a839e4d0cc89849317ed96b3269ba78ce92108e
           ├─13721 /var/lib/rancher/k3s/data/19bb6a9b46ad0013de084cf1e0feb7927ff9e4e06624685ff87f003c208fded1/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3271695d6f8cb7d38d86901faf719f840c236e236f9490
           ├─13723 /var/lib/rancher/k3s/data/19bb6a9b46ad0013de084cf1e0feb7927ff9e4e06624685ff87f003c208fded1/bin/containerd-shim-runc-v2 -namespace k8s.io -id 23cdd690357129d8e0eb4a520a282c9428ce57ef359524
           ├─13809 /pause
           ├─13816 /pause
           ├─13822 /pause
           ├─13829 /pause
           ├─13944 /coredns -conf /etc/coredns/Corefile
           ├─13963 local-path-provisioner start --config /etc/config/config.json
           ├─13976 /metrics-server
           ├─14098 runc --root /run/containerd/runc/k8s.io --log /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/9f95dec13ba16620529007939afb598816a14073b175ca44c7e6ac8b7b0384b8/log.json --log-form
           └─14109 runc init

Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.601394 13249 iptables.go:167] Deleting iptables rule: ! -s 10.42.0.0/16 -d 10.42.0.0/16 -j MASQUERADE --random-fully
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.601853 13249 iptables.go:155] Adding iptables rule: -s 10.42.0.0/16 -d 10.42.0.0/16 -j RETURN
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.603951 13249 iptables.go:155] Adding iptables rule: -s 10.42.0.0/16 ! -d 224.0.0.0/4 -j MASQUERADE --random-fully
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.606755 13249 iptables.go:155] Adding iptables rule: ! -s 10.42.0.0/16 -d 10.42.0.0/24 -j RETURN
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.607633 13249 iptables.go:155] Adding iptables rule: ! -s 10.42.0.0/16 -d 10.42.0.0/16 -j MASQUERADE --random-fully
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.612464 13249 iptables.go:145] Some iptables rules are missing; deleting and recreating rules
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.612479 13249 iptables.go:167] Deleting iptables rule: -s 10.42.0.0/16 -j ACCEPT
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.612994 13249 iptables.go:167] Deleting iptables rule: -d 10.42.0.0/16 -j ACCEPT
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.614222 13249 iptables.go:155] Adding iptables rule: -s 10.42.0.0/16 -j ACCEPT
Sep 22 18:39:17 ip-172-31-11-188 k3s[13249]: I0922 18:39:17.615668 13249 iptables.go:155] Adding iptables rule: -d 10.42.0.0/16 -j ACCEPT
lines 1-35/35 (END)

為什麼這樣安裝k3s更方便?

以下程序將立即安裝

  • kubectl – 一個方便的基於 CLI 的程序,用於通過控制台或終端與 K3 進行交互。
  • crictl – 這是用於與容器和其他容器運行時通信的程序。
  • k3s-killall.sh-:這是一個 bash 腳本,用於在安裝後清理所有容器和網絡組件。
  • k3s-uninstall.sh:這是一個刪除所有集群和腳本的 bash 腳本。

配置、設置

kubeconfig 文件被寫入 /etc/rancher/k3s/k3s.yaml。此文件是配置 Kubernetes 所必需的。

[email protected]master:~# sudo cat /etc/rancher/k3s/k3s.yaml
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWekNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFl3TURjNU9Ua3pOREFlRncweU1EQTVNakl4T0RNNE5UUmFGdzB6TURBNU1qQXhPRE00TlRSYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFl3TURjNU9Ua3pOREJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQkdvU3pZQnBxWWduMzdTTnozZU9kOUgxcU1YSEpmNzljLzVOZm1xN2k3c1oKWWZ4TndPcXBkM3VtQ2NFLzl1MHgzYjVmUHRaR3g5RHUxK0RQTTQwYjlybWpJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUc3eUtsTVFabmQ0ClVTRTJSbG5WdWlGeDJheCs4SjBkajcxY3BUTExlbUJ2QWlFQTl6L0tDZjAzR3poN3JCTjlaRnZOWWdydFBldkYKZDZBLzd5Q0RraEMwNlRZPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: 7dff7a3015f352089c2cd1bfe3048a3d
    username: admin
[email protected]:~#

要在服務器上安裝 K3,代理必須使用 K3S_TOKEN 或 K3S_CLUSTER_SECRET 變量傳遞 K3S_URL。

使用 K3S_TOKEN 變量。這可以在以下文件中看到:

[email protected]:~# sudo cat /var/lib/rancher/k3s/server/node-token
K10a5185782c494893a4efada19b97fca7fd0b1e628a8a9f70eb7d21413a2fa2a3b::server:56b49545f3bf8dd01810268ea2579e12
[email protected]:~#

現在讓我們添加一個變量。將數據插入令牌。如果您有其他 URL,您可以在此處插入您自己的 URL。

k3s_url="https://k3s-master:6443"
k3s_token="K10a5185782c494893a4efada19b97fca7fd0b1e628a8a9f70eb7d21413a2fa2a3b::server:56b49545f3bf8dd01810268ea2579e12"
curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh - 

工人 1 配置

然後在worker1服務器中輸入以下信息:

[email protected]:~# k3s_url="https://k3s-master:6443"
[email protected]:~#
[email protected]:~# k3s_token="K10a5185782c494893a4efada19b97fca7fd0b1e628a8a9f70eb7d21413a2fa2a3b::server:56b49545f3bf8dd01810268ea2579e12"
[email protected]:~#

重要的是不要在等號前後放置空格。如果這不起作用,請檢查 Linux 變量。下一個。安裝將開始。

[email protected]:~# curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -
[INFO] Finding release for channel stable
[INFO] Using v1.18.8+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.18.8+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.18.8+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
[email protected]:~#

工人 2 配置

然後去worker2服務器,重複整個過程。

[email protected]:~# k3s_url="https://k3s-master:6443"
[email protected]:~#
[email protected]:~# k3s_token="K10a5185782c494893a4efada19b97fca7fd0b1e628a8a9f70eb7d21413a2fa2a3b::server:56b49545f3bf8dd01810268ea2579e12"
[email protected]:~#
[email protected]:~# curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -
[INFO] Finding release for channel stable
[INFO] Using v1.18.8+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.18.8+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.18.8+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
[email protected]:~#

檢查配置

轉到主服務器並檢查所有內容。使用此命令驗證集群是否正常工作並且一切正常。

[email protected]:~# sudo kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

進一步調試 什麼時候 使用“kubectl cluster-info dump”命令診斷集群問題。

[email protected]:~# kubectl cluster-info dump

然後,您可以使用以下命令檢查已安裝的代理:

[email protected]:~# sudo kubectl get nodes
NAME STATUS ROLES AGE     VERSION
k3s-master        Ready      master     10m     v1.18.8+k3s1
k3s-agent1 Ready worker 3m3s v1.18.8+k3s1
k3s-agent2 Ready worker 2m12s v1.18.8+k3s1
[email protected]:~#

檢查正在運行的容器

現在讓我們檢查容器是否正在運行。

主服務器

[email protected]:~# sudo crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
4dc55cbcce136 aa764f7db3051 18 minutes ago Running traefik 0 778fac0e94f4d
b02177043c6aa 897ce3c5fc8ff 18 minutes ago Running lb-port-443 0 eae6017fa3438
838e79e984c34 897ce3c5fc8ff 19 minutes ago Running lb-port-80 0 eae6017fa3438
d212118979a23 9dd718864ce61 19 minutes ago Running metrics-server 0 23cdd69035712
102a4627832f3 9d12f9848b99f 19 minutes ago Running local-path-provisioner 0 da00cf5a839e4
512d452933667 4e797b3234604 19 minutes ago Running coredns 0 3271695d6f8cb
[email protected]:~$

Worker1 服務器

[email protected]:~# sudo crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
2356fce5b5c8d 897ce3c5fc8ff 12 minutes ago Running lb-port-443 0 7a5f8c5198106
b68b8db0d827f 897ce3c5fc8ff 12 minutes ago Running lb-port-80 0 7a5f8c5198106
[email protected]:~#

工人 2 服務器

[email protected]:~# sudo crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
472a69994eedc 897ce3c5fc8ff 19 minutes ago Running lb-port-443 0 ff52371139711
08efc4ccaa735 897ce3c5fc8ff 19 minutes ago Running lb-port-80 0 ff52371139711
[email protected]:~#

結論是

本教程向您展示瞭如何安裝和配置 k3。此外,K3s 提供了一種快速且經濟高效的方式來擴展功能齊全的 Kubernetes 集群並經濟高效地使用多用途應用程序。

讓我們從今天開始吧!

我們很自豪能成為 Hosting™ 最有用的人!

我們的支持團隊由經驗豐富的 Linux 工程師和才華橫溢的系統管理員組成,他們熟悉許多網絡託管技術,尤其是本文中描述的技術。

如果您對此信息有任何疑問,我們將很樂意每週 7 天、每天 24 小時回答與本文相關的任何問題。

如果您是完全託管的 VPS 服務器、雲專用服務器、VMWare 私有云、私有父服務器、託管雲服務器或專用服務器的所有者,並且不確定執行任何列出的步驟,請致電 @ 請致電 800.580.4985 聯繫我們.聯繫地址, 聊天 或支持票以協助此過程。