一、安装准备
在开始安装K3之前,请确保满足节点要求
1、节点要求
K3s非常轻巧,但具有一些最低要求,如下所述。
无论是将K3s集群配置为在单节点安装还是在高可用性(HA)设置中运行,每个运行K3s的节点都应满足以下最低要求。您可能需要更多资源以满足您的需求。
- 先决条件
两个节点不能具有相同的主机名。如果所有节点都具有相同的主机名,请为添加到集群的每个节点传递
--node-name
或设置$K3S_NODE_NAME
一个唯一的名称。
- 操作系统
K3几乎可以在任何Linux上运行。但是,K3s已在以下操作系统及其后续非主要版本中进行了测试。
Ubuntu 16.04(amd64)
Ubuntu 18.04(amd64)
Raspbian Buster(armhf)
硬件
硬件需求根据部署的大小进行扩展。这里概述了最低限度的建议。
硬件 | 最低要求 |
---|---|
内存 | 最小512MB |
CPU | 最低1 |
- 存储
K3的性能取决于数据库的性能。为了确保最佳速度,我们建议尽可能使用SSD。在使用SD卡或eMMC的ARM设备上,磁盘性能会有所不同。
- 网络
K3s服务器需要端口6443可供节点访问。这些节点需要能够通过UDP端口8472(Flannel VXLAN)到达其他节点。如果您不使用法兰绒并提供自己的自定义CNI,则K3不需要端口8472。该节点不应在任何其他端口上侦听。K3使用反向隧道,以便节点建立与服务器的出站连接,所有kubelet通信都通过该隧道运行。
重要信息:节点上的VXLAN端口不应暴露给世界,因为它打开了群集网络,任何人都可以访问它。在禁止访问端口8472的防火墙/安全组后面运行节点。
如果希望使用指标服务器,则需要在每个节点上打开端口10250。
2、最低配置要求:
Linux 3.10+
每台服务器512MB的RAM
每个节点75MB的RAM
200MB的磁盘空间
x86_64, ARMv7, ARM64
二、服务安装
1、通过脚本安装K3s(如果使用此方式安装,请忽略后面的二进制文件安装方式)
如《快速入门指南》中所述,你可以使用
https://get.k3s.io
上提供的安装脚本将K3s作为服务安装在systemd和基于openrc的系统上。
1.1、安装命令
此命令的最简单形式如下:
curl -sfL https://get.k3s.io | sh -
运行此安装后:
- K3s服务将配置为在节点重新启动后或进程崩溃或终止时自动重新启动
- 附加的实用将被安装,其中包括
kubectl
,crictl
,ctr
,k3s-killall.sh
,和k3s-uninstall.sh
- 一个
kubeconfig
文件将被写入/etc/rancher/k3s/k3s.yaml
,在K3s自动安装完成kubectl
后,使用这个配置文件
如果期望要在工作节点上安装K3s并将它们添加到集群中,请使用K3S_URL和K3S_TOKEN环境变量运行安装脚本。
下面给出如何加入工作节点的示例:
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
- 设置K3S_URL参数会导致K3在工作模式下运行。K3s代理会自动注册K3s服务到提供的URL。
- 要使用的值K3S_TOKEN存储在/var/lib/rancher/k3s/server/node–token服务器节点上。
注意:每台计算机必须具有唯一的主机名。如果您的计算机没有唯一的主机名,请传递K3S_NODE_NAME环境变量,并为每个节点提供一个带有有效且唯一的主机名的值。
使用此方法安装K3时,还可以使用以下环境变量来配置安装:
INSTALL_K3S_SKIP_DOWNLOAD
如果设置为true,则不会下载K3s哈希或二进制文件。
INSTALL_K3S_SYMLINK
是否创建K3s服务软连接,如果设置为“skip”将不会创建软连接,“force” 将被覆盖,如果未指定,则默认创建K3s服务软连接。
INSTALL_K3S_SKIP_START
指定是否安装完成后启动K3s服务,如果设置为true,将不会启动K3s服务。
INSTALL_K3S_VERSION
将要从github下载的K3s版本。如果未指定,将尝试下载最新版本。
INSTALL_K3S_BIN_DIR
K3s的二进制文件,链接和卸载脚本的安装目录,如果未指定,将使用`"/usr/local/bin"` 用作默认目录。
INSTALL_K3S_BIN_DIR_READ_ONLY
如果设置为true,则不会写入文件 `"INSTALL_K3S_BIN_DIR"`变量指定的目录,强制设置 INSTALL_K3S_SKIP_DOWNLOAD=true。
INSTALL_K3S_SYSTEMD_DIR
将systemd服务和环境文件安装到的目录,如果未指定,将使用 `"/etc/systemd/system"` 用作默认目录。
INSTALL_K3S_EXEC
带有标志的命令,用于在服务中启动K3s。如果未指定命令,则默认为 “agent” (如果K3S_URL已设置)或“server”(未设置)。
最后的systemd命令解析为该环境变量和脚本args的组合。
为了说明这一点,以下命令导致注册没有flannel的服务器的行为相同:
curl ... | INSTALL_K3S_EXEC="--no-flannel" sh -s -
curl ... | INSTALL_K3S_EXEC="server --no-flannel" sh -s -
curl ... | INSTALL_K3S_EXEC="server" sh -s - --no-flannel
curl ... | sh -s - server --no-flannel
curl ... | sh -s - --no-flannel
INSTALL_K3S_NAME
要创建的systemd服务的名称,如果未指定,将使用 K3s exec 命令获取默认值。如果指定,名称应该以`k3s-`为前缀。
INSTALL_K3S_TYPE
要创建的systemd服务类型,如果未指定,将默认使用K3s exec 命令获取默认值。
注意:
1、以“K3S_”
开头的环境变量将保留给systemd
和openrc
服务使用。
2、在不显式设置exec命令的情况下设置K3S_URL
将默认命令为“agent”
。
3、运行代理程序时,还必须设置 K3S_TOKEN 参数。
1.2、版本更新
要从旧版本升级K3s,可以使用相同的标志重新运行安装脚本,例如:
curl -sfL https://get.k3s.io | sh -
如果要升级到特定版本,可以运行以下命令:
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z-rc1 sh -
2、从二进制文件安装K3s
2.1、二进制文件安装
如果你选择使用从二进制文件安装K3s,则只需从Rancher官方的发行页面下载二进制文件,将其放在路径中并执行它即可运行K3s。
K3s二进制文件支持以下命令:
命令 | 描述 |
---|---|
k3s server | 运行K3s管理服务器,该服务器还将启动Kubernetes控制平面组件,例如API服务器,控制器管理器和调度程序。 |
k3s agent | 运行K3s节点代理。这将导致K3作为工作节点运行,启动Kubernetes节点服务kubelet 和kube-proxy 。 |
k3s kubectl | 运行嵌入式kubectl CLI。如果KUBECONFIG 未设置环境变量,它将自动尝试使用/etc/rancher/k3s/k3s.yaml 启动K3s服务器节点时创建的配置文件。 |
k3s crictl | 运行嵌入式crictl。这是一个用于与Kubernetes的容器运行时接口(CRI)进行交互的CLI。对于调试很有用。 |
k3s ctr | 运行嵌入式ctr。这是用于容器化的CLI,是K3s使用的容器守护程序。对于调试很有用。 |
k3s help | 显示命令列表或一个命令的帮助 |
k3s server 和 k3s agent 命令 可通过 k3s server –help 或 k3s agent –help 进行查看。为方便起见,该帮助文本在此处显示:
- K3s服务器的注册选项
NAME:
k3s server - Run management server
USAGE:
k3s server [OPTIONS]
OPTIONS:
-v value (logging) Number for the log level verbosity (default: 0)
--vmodule value (logging) Comma-separated list of pattern=N settings for file-filtered logging
--log value, -l value (logging) Log to file
--alsologtostderr (logging) Log to standard error as well as file (if set)
--bind-address value (listener) k3s bind address (default: 0.0.0.0)
--https-listen-port value (listener) HTTPS listen port (default: 6443)
--advertise-address value (listener) IP address that apiserver uses to advertise to members of the cluster (default: node-external-ip/node-ip)
--advertise-port value (listener) Port that apiserver uses to advertise to members of the cluster (default: listen-port) (default: 0)
--tls-san value (listener) Add additional hostname or IP as a Subject Alternative Name in the TLS cert
--data-dir value, -d value (data) Folder to hold state default /var/lib/rancher/k3s or ${HOME}/.rancher/k3s if not root
--cluster-cidr value (networking) Network CIDR to use for pod IPs (default: "10.42.0.0/16")
--service-cidr value (networking) Network CIDR to use for services IPs (default: "10.43.0.0/16")
--cluster-dns value (networking) Cluster IP for coredns service. Should be in your service-cidr range (default: 10.43.0.10)
--cluster-domain value (networking) Cluster Domain (default: "cluster.local")
--flannel-backend value (networking) One of 'none', 'vxlan', 'ipsec', or 'flannel' (default: "vxlan")
--token value, -t value (cluster) Shared secret used to join a server or agent to a cluster [$K3S_TOKEN]
--token-file value (cluster) File containing the cluster-secret/token [$K3S_TOKEN_FILE]
--write-kubeconfig value, -o value (client) Write kubeconfig for admin client to this file [$K3S_KUBECONFIG_OUTPUT]
--write-kubeconfig-mode value (client) Write kubeconfig with this mode [$K3S_KUBECONFIG_MODE]
--kube-apiserver-arg value (flags) Customized flag for kube-apiserver process
--kube-scheduler-arg value (flags) Customized flag for kube-scheduler process
--kube-controller-manager-arg value (flags) Customized flag for kube-controller-manager process
--kube-cloud-controller-manager-arg value (flags) Customized flag for kube-cloud-controller-manager process
--datastore-endpoint value (db) Specify etcd, Mysql, Postgres, or Sqlite (default) data source name [$K3S_DATASTORE_ENDPOINT]
--datastore-cafile value (db) TLS Certificate Authority file used to secure datastore backend communication [$K3S_DATASTORE_CAFILE]
--datastore-certfile value (db) TLS certification file used to secure datastore backend communication [$K3S_DATASTORE_CERTFILE]
--datastore-keyfile value (db) TLS key file used to secure datastore backend communication [$K3S_DATASTORE_KEYFILE]
--default-local-storage-path value (storage) Default local storage path for local provisioner storage class
--no-deploy value (components) Do not deploy packaged components (valid items: coredns, servicelb, traefik, local-storage, metrics-server)
--disable-scheduler (components) Disable Kubernetes default scheduler
--disable-cloud-controller (components) Disable k3s default cloud controller manager
--disable-network-policy (components) Disable k3s default network policy controller
--node-name value (agent/node) Node name [$K3S_NODE_NAME]
--with-node-id (agent/node) Append id to node name
--node-label value (agent/node) Registering kubelet with set of labels
--node-taint value (agent/node) Registering kubelet with set of taints
--docker (agent/runtime) Use docker instead of containerd
--container-runtime-endpoint value (agent/runtime) Disable embedded containerd and use alternative CRI implementation
--pause-image value (agent/runtime) Customized pause image for containerd sandbox
--private-registry value (agent/runtime) Private registry configuration file (default: "/etc/rancher/k3s/registries.yaml")
--node-ip value, -i value (agent/networking) IP address to advertise for node
--node-external-ip value (agent/networking) External IP address to advertise for node
--resolv-conf value (agent/networking) Kubelet resolv.conf file [$K3S_RESOLV_CONF]
--flannel-iface value (agent/networking) Override default flannel interface
--flannel-conf value (agent/networking) Override default flannel config file
--kubelet-arg value (agent/flags) Customized flag for kubelet process
--kube-proxy-arg value (agent/flags) Customized flag for kube-proxy process
--rootless (experimental) Run rootless
--agent-token value (experimental/cluster) Shared secret used to join agents to the cluster, but not servers [$K3S_AGENT_TOKEN]
--agent-token-file value (experimental/cluster) File containing the agent secret [$K3S_AGENT_TOKEN_FILE]
--server value, -s value (experimental/cluster) Server to connect to, used to join a cluster [$K3S_URL]
--cluster-init (experimental/cluster) Initialize new cluster master [$K3S_CLUSTER_INIT]
--cluster-reset (experimental/cluster) Forget all peers and become a single cluster new cluster master [$K3S_CLUSTER_RESET]
--no-flannel (deprecated) use --flannel-backend=none
--cluster-secret value (deprecated) use --token [$K3S_CLUSTER_SECRET]
- K3s代理的注册选项
NAME:
k3s agent - Run node agent
USAGE:
k3s agent [OPTIONS]
OPTIONS:
-v value (logging) Number for the log level verbosity (default: 0)
--vmodule value (logging) Comma-separated list of pattern=N settings for file-filtered logging
--log value, -l value (logging) Log to file
--alsologtostderr (logging) Log to standard error as well as file (if set)
--token value, -t value (cluster) Token to use for authentication [$K3S_TOKEN]
--token-file value (cluster) Token file to use for authentication [$K3S_TOKEN_FILE]
--server value, -s value (cluster) Server to connect to [$K3S_URL]
--data-dir value, -d value (agent/data) Folder to hold state (default: "/var/lib/rancher/k3s")
--node-name value (agent/node) Node name [$K3S_NODE_NAME]
--with-node-id (agent/node) Append id to node name
--node-label value (agent/node) Registering kubelet with set of labels
--node-taint value (agent/node) Registering kubelet with set of taints
--docker (agent/runtime) Use docker instead of containerd
--container-runtime-endpoint value (agent/runtime) Disable embedded containerd and use alternative CRI implementation
--pause-image value (agent/runtime) Customized pause image for containerd sandbox
--private-registry value (agent/runtime) Private registry configuration file (default: "/etc/rancher/k3s/registries.yaml")
--node-ip value, -i value (agent/networking) IP address to advertise for node
--node-external-ip value (agent/networking) External IP address to advertise for node
--resolv-conf value (agent/networking) Kubelet resolv.conf file [$K3S_RESOLV_CONF]
--flannel-iface value (agent/networking) Override default flannel interface
--flannel-conf value (agent/networking) Override default flannel config file
--kubelet-arg value (agent/flags) Customized flag for kubelet process
--kube-proxy-arg value (agent/flags) Customized flag for kube-proxy process
--rootless (experimental) Run rootless
--no-flannel (deprecated) use --flannel-backend=none
--cluster-secret value (deprecated) use --token [$K3S_CLUSTER_SECRET]
2.2、版本更新
- 从发行版下载所需版本的K3
- 安装到适当的位置(通常为/usr/local/bin/k3s)
- 停止旧版本
- 开始新版本
- 重新启动K3s
systemd和openrc的安装脚本支持重启K3s。如果有使用systemd,则需要手动重启K3s:
sudo systemctl restart k3s
如果有使用openrc,则需要手动重启K3s:
sudo service k3s restart
三、网络配置
注意: 请参考网络页面以获取有关CoreDNS,Traefik和 Service LB 的信息。
默认情况下,使用VXLAN作为默认后端,K3s将以Flannel作为CNI运行。要更改CNI,请参阅有关配置自定义CNI的部分。要更改Flannel后端,请参考Flannel配置部分。
Flannel 配置
Flannel的默认后端是VXLAN。要启用加密,请通过下面的IPSec(Internet协议安全性)或WireGuard选项。
如果您希望将WireGuard用作Flannel后端,则可能需要其他内核模块。有关详细信息,请参见《WireGuard安装指南》。WireGuard安装步骤将确保为您的操作系统安装适当的内核模块。您需要在尝试利用WireGuard Flannel 后端选件之前,在服务器和代理的每个节点上安装WireGuard。
CLI标志和值 | 描述 |
---|---|
–flannel-backend=vxlan | (默认)使用VXLAN后端 |
–flannel-backend=ipsec | 使用IPSEC后端对网络流量进行加密 |
–flannel-backend=wireguard | 使用WireGuard后端对网络流量进行加密。可能需要其他内核模块和配置。 |
自定义CNI
运行K3s,--flannel-backend=none
并安装您选择的CNI。应该为Canal和Calico启用IP转发。请参考以下步骤。
- Canal
访问 Project Calico Docs 网站。请按照以下步骤安装Canal。修改 Canal YAML,以便在container_settings部分中允许IP转发,例如:
"container_settings": {
"allow_ip_forwarding": true
}
应用 Canal YAML 配置.
通过在主机上运行以下命令,确保已应用设置:
cat /etc/cni/net.d/10-calico.conflist
您应该看到IP转发设置为true。
- Calico
遵循《Calico CNI插件指南》。修改 Calico YAML,以便在container_settings部分中允许IP转发,例如:
"container_settings": {
"allow_ip_forwarding": true
}
应用 Calico YAML 配置.
通过在主机上运行以下命令,确保已应用设置:
cat /etc/cni/net.d/10-canal.conflist
您应该看到IP转发设置为true。
清理安装
如果您在install.sh脚本的帮助下安装了K3,则会在安装过程中生成一个卸载脚本。该脚本是在您的节点上/usr/local/bin/k3s-uninstall.sh(在或处k3s-agent-uninstall.sh)创建的。
更新时间:2024-08-02 14:28