安装要求介绍K3s 非常轻巧但有一些最低要求如下所述。无论您是将 K3s 集群配置为在 Docker 还是 Kubernetes 设置中运行运行 K3s 的每个节点都应该满足以下最低要求。你可能需要更多的资源来满足你的需求。先决条件-两个节点不能有相同的主机名。如果您的所有节点都有相同的主机名请使用--with-node-id选项为每个节点添加一个随机后缀或者为您添加到集群的每个节点设计一个独特的名称用--node-name或$K3S_NODE_NAME传递。操作系统K3s 有望在大多数现代 Linux 系统上运行。有些操作系统有特定要求如果您使用的是Raspbian Buster请按照这些步骤切换到传统的 iptables。如果您使用的是Alpine Linux请按照这些步骤进行额外设置。如果您使用的是Red Hat/CentOS请按照这些步骤进行额外设置。关于 Rancher 管理的 K3s 集群测试了哪些操作系统的更多信息请参考Rancher 支持和维护条款。硬件硬件要求根据您部署的规模而变化。这里列出了最低建议。CPU 和内存CPU 最低 1内存 最低 512MB建议至少为 1GB本节的测试结果是为了确定 K3s agent、具有工作负载的 K3s server 和具有一个 agent 的 K3s server 的最低资源要求。它还包含了有关对 K3s server 和 agent 利用率产生最大影响的分析以及如何保护集群数据存储免受 agent 和工作负载的干扰。磁盘K3s 的性能取决于数据库的性能。为了确保最佳速度我们建议尽可能使用 SSD。在使用 SD 卡或 eMMC 的 ARM 设备上磁盘性能会有所不同。网络K3s server 需要 6443 端口才能被所有节点访问。当使用 Flannel VXLAN 时节点需要能够通过 UDP 端口 8472 访问其他节点或者当使用 Flannel Wireguard 后端时节点需要能够通过 UDP 端口 51820 和 51821使用 IPv6 时访问其他节点。该节点不应侦听任何其他端口。 K3s 使用反向隧道以便节点与服务器建立出站连接并且所有 kubelet 流量都通过该隧道运行。但是如果你不使用 Flannel 并提供自己的自定义 CNI那么 K3s 不需要 Flannel 所需的端口。如果要使用metrics server则需要在每个节点上打开端口 10250 端口。如果计划使用嵌入式 etcd 实现高可用性则 server 节点必须在端口 2379 和 2380 上可以相互访问。重要节点上的 VXLAN 端口不应公开暴露因为它公开了集群网络任何人都可以访问它。应在禁止访问端口 8472 的防火墙/安全组后面运行节点。警告Flannel 依靠 Bridge CNI plugin 来创建一个可以交换流量的 L2 网络。具有 NET_RAW 功能的 Rogue pod 可以滥用该 L2 网络来发动攻击如 [ARP 欺骗](https://static.sched.com/hosted_files/kccncna19/72/ARP DNS spoof.pdf)。因此正如 kubernetes 文档中记载的那样请设置一个受限配置文件在不可信任的 pod 上禁用 NET_RAW。K3s Server 节点的入站规则如下协议端口源描述TCP6443K3s agent 节点Kubernetes API ServerUDP8472K3s server 和 agent 节点仅对 Flannel VXLAN 需要UDP51820K3s server 和 agent 节点只有 Flannel Wireguard 后端需要UDP51821K3s server 和 agent 节点只有使用 IPv6 的 Flannel Wireguard 后端才需要TCP10250K3s server 和 agent 节点Kubelet metricsTCP2379-2380K3s server 节点只有嵌入式 etcd 高可用才需要通常情况下所有出站流量都是允许的。安装选项介绍使用脚本安装的选项正如快速启动指南中提到的那样你可以使用https://get.k3s.io 提供的安装脚本在基于 systemd 和 openrc 的系统上安装 K3s 作为服务。该命令的最简单形式如下curl -sfL https://get.k3s.io | sh -使用此方法安装 K3s 时可使用以下环境变量来配置安装:Environment VariableDescriptionINSTALL_K3S_SKIP_DOWNLOAD如果设置为 true 将不会下载 K3s 的哈希值或二进制。INSTALL_K3S_SYMLINK默认情况下如果路径中不存在命令将为 kubectl、crictl 和 ctr 二进制文件创建符号链接。如果设置为skip将不会创建符号链接而force将覆盖。INSTALL_K3S_SKIP_ENABLE如果设置为 true将不启用或启动 K3s 服务。INSTALL_K3S_SKIP_START如果设置为 true 将不会启动 K3s 服务。INSTALL_K3S_VERSION从 Github 下载 K3s 的版本。如果没有指定将尝试从stable频道下载。INSTALL_K3S_BIN_DIR安装 K3s 二进制文件、链接和卸载脚本的目录或者使用/usr/local/bin作为默认目录。INSTALL_K3S_BIN_DIR_READ_ONLY如果设置为 true 将不会把文件写入INSTALL_K3S_BIN_DIR强制设置INSTALL_K3S_SKIP_DOWNLOADtrue。INSTALL_K3S_SYSTEMD_DIR安装 systemd 服务和环境文件的目录或者使用/etc/systemd/system作为默认目录。INSTALL_K3S_EXEC带有标志的命令用于在服务中启动 K3s。如果未指定命令并且设置了K3S_URL它将默认为“agent”。如果未设置K3S_URL它将默认为“server”。要获得帮助请参考此示例。INSTALL_K3S_NAME要创建的 systemd 服务名称如果以服务器方式运行 k3s则默认为k3s如果以 agent 方式运行 k3s则默认为k3s-agent。如果指定了服务名则服务名将以k3s-为前缀。INSTALL_K3S_TYPE要创建的 systemd 服务类型如果没有指定将默认使用 K3s exec 命令。INSTALL_K3S_SELINUX_WARN如果设置为 true则在没有找到 k3s-selinux 策略的情况下将继续。INSTALL_K3S_SKIP_SELINUX_RPM如果设置为 true 将跳过 k3s RPM 的自动安装。INSTALL_K3S_CHANNEL_URL用于获取 K3s 下载网址的频道 URL。默认为 https://update.k3s.io/v1-release/channels 。INSTALL_K3S_CHANNEL用于获取 K3s 下载 URL 的通道。默认值为 stable。选项包括stable,latest,testing。K3S_CONFIG_FILE指定配置文件的位置。默认目录为/etc/rancher/k3s/config.yaml。K3S_TOKEN用于将 server 或 agent 加入集群的共享 secret。K3S_TOKEN_FILE指定cluster-secret,token的文件目录。这个例子介绍了如何使用上述的环境变量在管道之后curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNELlatest sh -以 K3S_开头的环境变量将被保留供 systemd 和 openrc 服务使用。在没有明确设置 exec 命令的情况下设置K3S_URL会将命令默认为 agent。运行 agent 时还必须设置K3S_TOKEN。从二进制安装的选项如上所述安装脚本主要是配置 K3s 作为服务运行。如果你选择不使用脚本你可以通过从我们的发布页面下载二进制文件将其放在你的路径上然后执行它来运行 K3s。K3s 二进制支持以下命令命令描述k3s server运行 K3s server它还将启动 Kubernetes control-plane 组件如 API server, controller-manager, 和 scheduler。k3s agent运行 K3s agent 节点。这将使 K3s 作为工作节点运行启动 Kubernetes 节点服务kubelet和kube-proxy。k3s kubectl运行嵌入式kubectl CLI。如果没有设置KUBECONFIG环境变量当启动 K3s 服务器节点时将自动尝试使用在/etc/rancher/k3s/k3s.yaml创建的配置文件。k3s crictl运行一个嵌入式crictl。这是一个用于与 Kubernetes 的容器运行时接口CRI交互的 CLI。对调试很有用。k3s ctr运行一个嵌入式的ctr。这是为 containerdK3s 使用的容器守护进程提供的 CLI。对调试很有用。k3s help显示一个命令的命令列表或帮助。k3s server和k3s agent命令有额外的配置选项可以通过k3s server --help或k3s agent --help查看.正式安装本文安装选择为二进制文件安装原因为安装环境不可联网下载链接https://github.com/k3s-io/k3s/releases下载安装文件步骤1配置目录结构# 创建必要的目录 sudo mkdir -p /var/lib/rancher/k3s/agent/images/ sudo mkdir -p /usr/local/bin/ # 将离线镜像复制到正确位置 sudo cp /tmp/k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/ # 安装 k3s 二进制文件 sudo cp /tmp/k3s /usr/local/bin/ sudo chmod x /usr/local/bin/k3s步骤2导入容器镜像# 方法1使用 k3s ctr 命令导入推荐 sudo k3s ctr images import /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.gz # 方法2如果已安装 K3s使用 k3s 命令导入 sudo k3s ctr images import /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.gz步骤3安装 K3s离线模式方法A使用离线安装脚本# 1. 下载安装脚本在能联网的机器上 curl -sfL https://get.k3s.io install.sh chmod x install.sh # 2. 传输到 openEuler 并安装 INSTALL_K3S_SKIP_DOWNLOADtrue \ INSTALL_K3S_EXECserver \ ./install.sh方法B手动安装# 创建配置文件 sudo tee /etc/systemd/system/k3s.service EOF [Unit] DescriptionLightweight Kubernetes Documentationhttps://k3s.io Afternetwork-online.target [Service] Typenotify EnvironmentFile/etc/systemd/system/k3s.service.env ExecStartPre-/sbin/modprobe br_netfilter ExecStartPre-/sbin/modprobe overlay ExecStart/usr/local/bin/k3s server KillModeprocess Delegateyes LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity [Install] WantedBymulti-user.target EOF # 创建环境变量文件 sudo tee /etc/systemd/system/k3s.service.env EOF K3S_TOKENmy-secret-token K3S_KUBECONFIG_MODE644 EOF步骤4启动 K3s# 启动服务 sudo systemctl daemon-reload sudo systemctl enable k3s sudo systemctl start k3s # 检查状态 sudo systemctl status k3s sudo journalctl -u k3s -f # 验证安装 sudo k3s kubectl get nodes sudo k3s kubectl get pods -A3. 安装 K3s Agent如果需要# 在 agent 节点上执行 INSTALL_K3S_SKIP_DOWNLOADtrue \ K3S_URLhttps://server-ip:6443 \ K3S_TOKENyour-token-from-server \ ./install.sh agent4. 配置 K3s可选配置 K3s 参数# 编辑配置文件 sudo tee /etc/rancher/k3s/config.yaml EOF write-kubeconfig-mode: 0644 tls-san: - k3s-server.local - 192.168.1.100 node-ip: 192.168.1.100 advertise-address: 192.168.1.100 EOF # 重启服务 sudo systemctl restart k3s配置容器运行时# 如果需要使用 Docker 而不是 containerd curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC--docker sh - # 离线模式下 INSTALL_K3S_SKIP_DOWNLOADtrue \ INSTALL_K3S_EXECserver --docker \ ./install.sh5. 验证安装# 检查 K3s 版本 k3s --version # 检查集群状态 sudo k3s kubectl cluster-info # 检查所有 Pod sudo k3s kubectl get pods --all-namespaces # 查看服务日志 sudo journalctl -u k3s -f6. 常见问题解决问题1镜像导入失败# 检查镜像文件完整性 tar -tzf /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.gz | head # 重新导入 sudo rm -rf /var/lib/rancher/k3s/agent/images/* sudo cp k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/ sudo k3s ctr images import /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.gz问题2服务启动失败# 查看详细日志 sudo journalctl -u k3s -n 50 --no-pager # 检查端口占用 sudo netstat -tlnp | grep 6443 # 清理后重新安装 sudo /usr/local/bin/k3s-uninstall.sh问题3openEuler 特定配置# 禁用防火墙根据实际需求 sudo systemctl stop firewalld sudo systemctl disable firewalld # 或者配置防火墙规则 sudo firewall-cmd --permanent --add-port6443/tcp sudo firewall-cmd --permanent --add-port8472/udp sudo firewall-cmd --reload # 配置 SELinux如果启用 sudo setenforce 0 sudo sed -i s/SELINUXenforcing/SELINUXpermissive/g /etc/selinux/config7. 管理命令# 停止 K3s sudo systemctl stop k3s # 重启 K3s sudo systemctl restart k3s # 卸载 K3s sudo /usr/local/bin/k3s-uninstall.sh # 查看 K3s 配置 sudo cat /etc/rancher/k3s/k3s.yaml