K3s 的安装
在线安装 K3s
K3s 通过 环境变量 和 选项 来定制安装。当然也支持配置文件方式。
对于 /var/lib/rancher/k3s/server/manifests
下的任何 yaml 文件(coredns、traefik、local-storeage 等),您可以添加一个 .skip 文件,这将导致 K3s 不应用关联的 yaml 文件。例如,在 manifests 目录中添加 traefik.yaml.skip 会导致 K3s 跳过 traefik.yaml 。
如果网络有问题需要配置 http_proxy,如果使用 docker 运行时需要通过 docker 设置。
主节点
|
|
-
--write-kubeconfig value, -o value
:(client)将管理员客户端的 kubeconfig 写入到此文件。这是一个重要的选项,它控制 K3s 如何生成 kubeconfig 文件,该文件用于 kubectl 和其他 Kubernetes 客户端与集群通信。如果你没有提供这个选项,K3s 将在默认位置(/etc/rancher/k3s/k3s.yaml
)生成 kubeconfig 文件。 -
--node-ip value, -i value
:(agent/networking)为节点通告的 IPv4/IPv6 地址。这个参数定义了节点在集群内部的 IP 地址。这个地址用于集群内部的通信,比如 Pod 之间的网络流量。如果你的节点有多个网络接口,或者有多个 IP 地址,那么可以使用这个参数来指定 Kubernetes 应该使用哪个地址。如果你没有提供这个参数,Kubernetes 将自动选择一个地址。 ==如果您的节点都在同一个内网环境中,并且可以通过内网 IP 地址进行通信,那么我建议您只设置--node-ip
,而不设置--node-external-ip
。== -
--node-external-ip value
:(agent/networking)用于通告节点的 IPv4/IPv6 外部 IP 地址。这个参数定义了节点的外部 IP 地址,即在集群之外可以用来访问该节点的地址。这个地址主要用于从集群外部访问集群中的服务。例如,如果你配置了一个 NodePort 服务,那么可以通过节点的外部 IP 地址和服务的 NodePort 来访问该服务。这个参数通常在节点部署在公共云或者其他可以提供外部 IP 地址的环境中使用。如果你没有提供这个参数,外部 IP 地址通常会默认为节点的主 IP 地址。 -
--advertise-address value
:(listener) 对于云环境中的节点,通常来说,节点的内网 IP 地址将被用作宣告地址。这是因为集群内部的通信通常都是在云提供商的内网环境中进行的,使用内网 IP 地址可以提供更好的性能和安全性。当节点分布在不同的网络环境中并且无法通过内网 IP 地址进行通信时,我们可能需要使用外网 IP 地址。在这种情况下,我们可以通过设置--node-external-ip
参数来提供一个可以从集群外部访问的 IP 地址。 -
--data-dir value, -d value
:(data)用于存放状态的文件夹(默认:/var/lib/rancher/k3s 或者如果不是 root 用户,则是 ${HOME}/.rancher/k3s)。这个选项定义了 K3s 存储其内部数据的位置,包括用于运行集群所需的各种状态信息,如 etcd 数据库(如果使用内置的 etcd)、Kubernetes 资源对象、服务帐户密钥等。如果你希望将 K3s 的数据存储在不同的位置,你可以使用这个选项来改变默认的数据目录。 -
--default-local-storage-path value
:(storage)本地存储提供者存储类的默认本地存储路径。这个选项定义了 K3s 为 PersistentVolumes 创建的本地存储的默认路径。当你创建一个使用 local-storage 存储类的 PersistentVolumeClaim 时,对应的 PersistentVolume 将在这个路径下创建。如果你希望改变默认的存储路径,你可以使用这个选项来设置一个新的路径。 -
--tls-san
:(listener)是一个 K3s 启动参数,用于添加额外的主机名或 IP 地址作为服务器 TLS 证书的 Subject Alternative Names (SANs)。Subject Alternative Names 是一个 X.509 v3 (TLS/SSL 证书的版本) 的扩展属性,允许您指定额外的验证主机名或 IP 地址。在 TLS/SSL 握手过程中,客户端会检查服务器的证书是否包含请求的主机名。如果请求的主机名既不是证书的主题名称 (CN),也不在 SANs 列表中,客户端将无法验证服务器的身份,从而导致 TLS/SSL 握手失败。 例如:--tls-san my-k3s-server1.example.com --tls-san my-k3s-server2.example.com --tls-san 192.0.2.1
,my-k3s-server1.example.com
,my-k3s-server2.example.com
和192.0.2.1
都将被添加到 K3s 服务器的 TLS 证书的 SANs 中。 -
--protect-kernel-defaults
:(agent/node) 该参数告诉 K3s 是否应该在启动时检查和保护内核默认值。这有助于确保 Kubernetes 在运行期间不会对主机系统做出可能不安全的更改。如果您的环境需要严格的安全性,或者您不希望 Kubernetes 更改主机系统的任何设置,那么应该使用此参数。 -
--secrets-encryption
:该参数告诉 K3s 是否应该在存储时加密 Kubernetes Secrets。如果启用,K3s 将使用内置的加密提供程序自动加密所有的 Kubernetes Secret,这将增强存储时的安全性。这是一个非常有用的功能,尤其是在需要严格遵守数据保护和隐私法规的环境中。 -
--disable servicelb,traefik
:(components) 不要部署打包的组件,并删除任何已部署的组件(有效项:coredns、servicelb、traefik、local-storage、metrics-server)- Servicelb 是一个简单的负载均衡器,它为 K3s 提供了 Service of type LoadBalancer 的支持。在某些环境中,您可能希望使用不同的负载均衡解决方案,比如云提供商的负载均衡器或者像 MetalLB 这样的项目。在这种情况下,您可以禁用 servicelb。
- Traefik 是一个反向代理和负载均衡器,K3s 使用它为 Ingress 提供支持。同样,如果您想使用不同的 Ingress 控制器(例如 Nginx Ingress 或 Contour),您可以禁用 Traefik。
- 这样做的主要原因是灵活性和控制性。在生产环境中,您可能已经有了自己选择的、经过严格测试和调优的负载均衡和 Ingress 解决方案,而不希望使用 K3s 默认的选项。此时,可以通过禁用这些组件来自定义您的 K3s 安装。
-
--kubelet-arg value
:(agent/flags) kubelet 进程的定制标志,在启动 K3s 时使用--kubelet-arg
参数来直接设置 Kubelet 参数,就像你之前做的那样。尽管 Kubernetes 官方文档中标记了这些参数为 “DEPRECATED”,但在 K3s 中,你仍然可以通过这种方式来设置它们。 如果你想要遵循 Kubernetes 的最新推荐,使用 Kubelet 配置文件来设置这些参数,那么你可能需要对 K3s 进行一些特殊配置。对于 K3s,你可以创建一个名为kubelet-config.yaml
的文件(或者任何你喜欢的名字),其中包含 Kubelet 配置。然后,你可以将这个文件放置在/var/lib/rancher/k3s/agent/etc
目录下。在启动 K3s 时,K3s 将会自动读取这个目录下的配置文件。以下是一个
kubelet-config.yaml
文件的示例:1 2 3 4 5 6 7 8 9 10
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration evictionHard: imagefs.available: "5%" nodefs.available: "5%" evictionMinimumReclaim: imagefs.available: "10%" nodefs.available: "10%" imageGCHighThresholdPercent: 85 imageGCLowThresholdPercent: 80
然后,你可以使用以下命令将这个文件放置到适当的位置:
cp kubelet-config.yaml /var/lib/rancher/k3s/agent/etc/
之后,每次启动 K3s 时,K3s 将会自动读取这个配置文件,并应用到 Kubelet。 -
--flannel-backend value
:(networking)用于 flannel 的后端。此选项允许你选择 K3s 使用的网络插件。默认情况下,K3s 使用 flannel。但是,你可以使用这个选项来改变这个设置。例如,如果你想使用 Calico,你可以设置--flannel-backend=none
并手动部署 Calico。
工作节点
<node-token>
在服务节点的 /var/lib/rancher/k3s/server/node-token 文件中。
|
|
离线安装
以下是 K3s 离线安装的步骤:
-
镜像准备:在安装 K3s 之前,你需要预先准备好 K3s 所需的所有镜像。这可以通过两种方法来完成:
- 私有镜像仓库方法:将 K3s 所需的镜像上传到私有镜像仓库,在安装时配置 K3s 使用这个私有镜像仓库来拉取镜像。
- 手动部署镜像方法:直接下载 K3s 所需的镜像的 tar 文件,然后在每个需要安装 K3s 的节点上手动加载这些镜像。
-
下载 K3s 二进制文件:从 K3s 的 GitHub 发布页面下载与你获取 airgap 镜像相同版本的 K3s 二进制文件。然后将这个二进制文件放到每个 air-gapped 节点的
/usr/local/bin
目录下,并确保它是可执行的。 -
下载 K3s 安装脚本:从 get.k3s.io 下载 K3s 的安装脚本。然后将这个安装脚本放到每个 air-gapped 节点的任意位置,并命名为
install.sh
。 -
配置默认路由:如果你的节点没有具有默认路由的接口,那么必须配置一个默认路由;即使是通过虚拟接口的黑洞路由也可以。要添加一个虚拟路由,可以执行以下命令:
1 2 3 4
ip link add dummy0 type dummy ip link set dummy0 up ip addr add 169.254.255.254/31 dev dummy0 ip route add default via 169.254.255.255 dev dummy0 metric 1000
-
运行 K3s 安装脚本:使用
INSTALL_K3S_SKIP_DOWNLOAD
环境变量运行 K3s 安装脚本。在这种情况下,K3s 将使用本地版本的脚本和二进制文件进行安装。
实践
创建一个 k3s 的文件夹,将 K3s 二进制文件
,K3s 安装脚本
,K3s 的镜像的 tar 文件
放在目录中。
|
|
主节点
|
|
工作节点
|
|
升级 K3s
删除 K3s
|
|