高级选项和配置
本节包含一些高级信息,描述了你可以运行和管理 K3s 的不同方式:
- 证书轮换
- 自动部署清单
- 使用 Docker 作为容器运行时
- 配置 containerd
- Secrets 加密配置 (实验)
- 使用 RootlessKit 运行 K3s (实验)
- 节点标签和污点
- 使用安装脚本启动 server 节点
- Alpine Linux 安装的额外准备工作
- 运行 K3d(Docker 中的 K3s)和 docker-compose
- 在 Raspbian Buster 上启用旧版的 iptables
- 为 Raspbian Buster 启用 cgroup
- SELinux 支持
- Red Hat 和 CentOS 的额外准备
#
证书轮换默认情况下,K3s 的证书在 12 个月内过期。
如果证书已经过期或剩余的时间不足 90 天,则在 K3s 重启时轮换证书。
#
自动部署清单在/var/lib/rancher/k3s/server/manifests
中找到的任何文件都会以类似kubectl apply
的方式自动部署到 Kubernetes。
关于部署 Helm charts 的信息,请参阅Helm章节。
#
使用 Docker 作为容器运行时K3s 包含并默认为containerd, 一个行业标准的容器运行时。
要使用 Docker 而不是 containerd,
在 K3s 节点上安装 Docker。可以使用 Rancher 的一个Docker 安装脚本来安装 Docker:
使用
--docker
选项安装 K3s:提示
国内用户,可以使用以下方法加速安装:
确认集群可用:
确认 Docker 容器正在运行:
#
可选:将 crictl 与 Docker 一起使用crictl 为兼容 CRI 的容器运行时提供了 CLI
如果你想在使用--docker
选项安装 K3s 后使用 crictl,请参考官方文档来安装 crictl。
然后开始使用 crictl 命令:
#
配置 containerdK3s 将会在/var/lib/rancher/k3s/agent/etc/containerd/config.toml
中为 containerd 生成 config.toml。
如果要对这个文件进行高级定制,你可以在同一目录中创建另一个名为 config.toml.tmpl
的文件,此文件将会代替默认设置。
config.toml.tmpl
将被视为 Go 模板文件,并且config.Node
结构被传递给模板。此模板示例介绍了如何使用结构来自定义配置文件。
#
Secrets 加密配置 (实验)从 v1.17.4+k3s1 开始,K3s 增加了一个实验性的功能,就是通过在 server 上传递标志--secrets-encryption
来实现 secrets 加密,这个标志会自动进行以下操作:
- 生成 AES-CBC 密钥
- 用生成的密钥生成一个加密配置文件
- 将配置作为 encryption-provider-config 传递给 KubeAPI
一旦启用,任何创建的 secrets 都将用这个密钥加密。请注意,如果您禁用加密,那么任何加密后的 secrets 将无法读取,直到您再次启用加密。
#
使用 RootlessKit 运行 K3s (实验)警告: 这个功能是试验性的
RootlessKit 是一种 Linux 原生的 "fake root(假根)" 实用程序,主要是为了以非特权用户身份运行 Docker 和 Kubernetes,从而保护主机上的 "real root(真根)" 不受潜在的容器破坏攻击。
最初的 rootless 支持已添加,但是围绕它存在一系列重大的可用性问题。
我们为那些对 rootless 的感兴趣的人发布了初步的支持,希望一些人可以帮助改善可用性。 首先,确保你有一个正确的设置和对用户命名空间的支持。 请参考 RootlessKit 中的需求部分获取说明。简而言之,最新的 Ubuntu 是你最好的选择。
#
RootlessKit 的已知问题端口
在 rootless 运行时,将创建一个新的网络名称空间。这意味着 K3s 实例在与主机完全分离的网络上运行。从主机访问在 K3s 中运行的服务的唯一方法是设置端口转发到 K3s 网络名称空间。我们有一个控制器,它将自动将 6443 和 1024 以下的服务端口绑定到主机,偏移量为 10000。
也就是说服务端口 80 在主机上会变成 10080,但 8080 会变成 8080,没有任何偏移。
目前,只有
LoadBalancer
服务会自动绑定。守护进程生命周期
一旦你 kill 掉 K3s,然后启动一个新的 K3s 实例,它将创建一个新的网络命名空间,但它不会 kill 掉旧的 pods。 所以你留下的是一个相当糟糕的设置。 这是目前最主要的问题,如何处理网络命名空间的问题。
在 https://github.com/rootless-containers/rootlesskit/issues/65 中跟踪了该问题
Cgroups
不支持 Cgroups.
#
使用 Rootless 运行 Servers 和 Agents只需将--rootless
标志添加到 server 或 agent 即可。因此,运行k3s server --rootless
,然后查看Wrote kubeconfig [SOME PATH]
的信息,了解你的 kubeconfig 文件在哪里。
关于设置 kubeconfig 文件的更多信息,请参考关于集群访问的部分。
要注意,如果你用-o
把 kubeconfig 写到其他目录下,则可能无法使用,这是因为 K3s 实例运行在不同的挂载命名空间。
#
节点标签和污点K3s agents 可以通过--node-label
和--node-taint
选项进行配置,这两个选项可以给 kubelet 添加标签和污点。这两个选项只能在注册时添加标签和/或污点,所以它们只能被添加一次,之后不能再通过运行 K3s 命令来改变。
如果你想在节点注册后更改节点标签和污点,你应该使用kubectl
。关于如何添加污点和节点标签,请参考 Kubernetes 官方文档。
#
使用安装脚本启动 Server 节点安装脚本将自动检测您的操作系统是使用 systemd 还是 openrc 并启动服务。当使用 openrc 运行时,日志将在/var/log/k3s.log
中创建。
当使用 systemd 运行时,日志将在/var/log/syslog
中创建,并使用journalctl -u k3s
查看。
使用安装脚本进行安装和自动启动的示例:
提示
国内用户,可以使用以下方法加速安装:
当手动运行 server 时,你应该得到一个类似于下面的输出:
由于 agent 将创建大量的日志,输出可能会更长。默认情况下,server 会将自身注册为一个节点(运行 agent)。
#
Alpine Linux 安装的额外准备工作设置 Alpine Linux 前,您需要进行以下准备工作:
更新 /etc/update-extlinux.conf 添加:
更新配置并重启:
#
运行 K3d(Docker 中的 K3s)和 docker-composek3d是一个设计用于在 Docker 中轻松运行 K3s 的工具。
它可以通过 MacOS 上的brew工具安装:
rancher/k3s
镜像也可用于在 Docker 运行的 K3s server 和 agent。
在 K3s repo 的根目录下有一个docker-compose.yml
,作为如何从 Docker 运行 K3s 的示例。要从这个 repo 中运行docker-compose
,请运行:
要只在 Docker 中运行 agent,使用docker-compose up agent
。
或者,也可以使用docker run
命令:
#
在 Raspbian Buster 上启用旧版的 iptablesRaspbian Buster 默认使用nftables
而不是iptables
。 K3S 网络功能需要使用iptables
,而不能使用nftables
。 按照以下步骤切换配置Buster使用legacy iptables
:
#
为 Raspbian Buster 启用 cgroup标准的 Raspbian Buster 安装没有启用 cgroups
。K3S 需要cgroups
来启动 systemd 服务。在/boot/cmdline.txt
中添加cgroup_memory=1 cgroup_enable=memory
就可以启用cgroups
。
#
/boot/cmdline.txt 的示例#
SELinux 支持从 v1.19.4+k3s1 开始支持。从 v1.17.4+k3s1 开始是试验性的。
如果您在默认启用 SELinux 的系统(如 CentOS)上安装 K3s,您必须确保安装了正确的 SELinux 策略。
#
自动安装从 v1.19.3+k3s2 开始可用。
如果在兼容的系统上,如果不执行离线安装,则安装脚本将从 Rancher RPM 存储库自动安装 SELinux RPM。可以通过设置 INSTALL_K3S_SKIP_SELINUX_RPM=true
来跳过自动安装。
#
手动安装可以使用以下命令安装必要的策略:
要强制安装脚本记录警告而不是失败,您可以设置以下环境变量: INSTALL_K3S_SELINUX_WARN=true
。
#
启用和禁用 SELinux EnforcementSELinux enforcement 的启用或禁用方式取决于 K3s 的版本。
#
K3s v1.19.1+k3s1要使用 SELinux,请在启动 K3s server 和 agent 时指定--selinux
标志。
这个选项也可以在 K3s配置文件中指定:
不要使用--disable-selinux
选项。它已经被废弃,在未来的小版本中,它可能会因为被忽略或不被识别,从而导致错误。
在 SELinux 下不支持使用自定义的--data-dir
。要自定义它,你很可能需要编写自己的自定义策略。为了获得指导,你可以参考container/container-selinux资源库,它包含了容器运行时的 SELinux 策略文件,以及rancher/k3s-selinux资源库,它包含了 K3s 的 SELinux 策略。
#
V1.19.1+k3s1 之前的 K3s内置 containerd 会自动启用 SELinux。
要关闭嵌入式 containerd 中的 SELinux enforcement,请使用--disable-selinux
标志启动 K3s。
在 SELinux 下不支持使用自定义的--data-dir
。要自定义它,你很可能需要编写自己的自定义策略。为了获得指导,你可以参考container/container-selinux资源库,它包含了容器运行时的 SELinux 策略文件,以及rancher/k3s-selinux资源库,它包含了 K3s 的 SELinux 策略。
#
Red Hat 和 CentOS 的额外准备建议运行以下命令,关闭 firewalld: