什麼是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)
- 內置負載均衡服務
- 內置網絡策略控制器
內部配置

與 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 聯繫我們.聯繫地址, 聊天 或支持票以協助此過程。