openEuler 安装 K3S

openEuler 安装 K3S

参考文献:

K3S官方:https://www.rancher.cn/k3s/

K3S官方中文文档:https://docs.rancher.cn/k3s/

下载网址:https://github.com/k3s-io/k3s/releases/tag/v1.35.0+k3s1

安装要求介绍

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 节点的入站规则如下:

协议 端口 描述
TCP 6443 K3s agent 节点 Kubernetes API Server
UDP 8472 K3s server 和 agent 节点 仅对 Flannel VXLAN 需要
UDP 51820 K3s server 和 agent 节点 只有 Flannel Wireguard 后端需要
UDP 51821 K3s server 和 agent 节点 只有使用 IPv6 的 Flannel Wireguard 后端才需要
TCP 10250 K3s server 和 agent 节点 Kubelet metrics
TCP 2379-2380 K3s server 节点 只有嵌入式 etcd 高可用才需要

通常情况下,所有出站流量都是允许的。

安装选项介绍

使用脚本安装的选项

正如快速启动指南中提到的那样,你可以使用https://get.k3s.io 提供的安装脚本在基于 systemd 和 openrc 的系统上安装 K3s 作为服务。

该命令的最简单形式如下:

curl -sfL https://get.k3s.io | sh -

使用此方法安装 K3s 时,可使用以下环境变量来配置安装:

Environment Variable Description
INSTALL_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_DOWNLOAD=true
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_CHANNEL=latest 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 节点服务kubeletkube-proxy
k3s kubectl 运行嵌入式kubectl CLI。如果没有设置KUBECONFIG环境变量,当启动 K3s 服务器节点时,将自动尝试使用在/etc/rancher/k3s/k3s.yaml创建的配置文件。
k3s crictl 运行一个嵌入式crictl。这是一个用于与 Kubernetes 的容器运行时接口(CRI)交互的 CLI。对调试很有用。
k3s ctr 运行一个嵌入式的ctr。这是为 containerd(K3s 使用的容器守护进程)提供的 CLI。对调试很有用。
k3s help 显示一个命令的命令列表或帮助。

k3s serverk3s agent 命令有额外的配置选项,可以通过 k3s server --helpk3s agent --help 查看.

正式安装

本文安装选择为二进制文件安装,原因为安装环境不可联网

下载链接:https://github.com/k3s-io/k3s/releases

下载安装文件
image

步骤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_DOWNLOAD=true \
INSTALL_K3S_EXEC="server" \
./install.sh

方法B:手动安装

# 创建配置文件
sudo tee /etc/systemd/system/k3s.service << EOF
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
After=network-online.target

[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s server
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity

[Install]
WantedBy=multi-user.target
EOF

# 创建环境变量文件
sudo tee /etc/systemd/system/k3s.service.env << EOF
K3S_TOKEN=my-secret-token
K3S_KUBECONFIG_MODE=644
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 -A

3. 安装 K3s Agent(如果需要)

# 在 agent 节点上执行
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL=https://server-ip:6443 \
K3S_TOKEN=your-token-from-server \
./install.sh agent

4. 配置 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_DOWNLOAD=true \
INSTALL_K3S_EXEC="server --docker" \
./install.sh

5. 验证安装

# 检查 K3s 版本
k3s --version

# 检查集群状态
sudo k3s kubectl cluster-info

# 检查所有 Pod
sudo k3s kubectl get pods --all-namespaces

# 查看服务日志
sudo journalctl -u k3s -f

6. 常见问题解决

问题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

问题3:openEuler 特定配置

# 禁用防火墙(根据实际需求)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 或者配置防火墙规则
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload

# 配置 SELinux(如果启用)
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

7. 管理命令

# 停止 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
posted @ 2026-01-13 14:22  ghostmen  阅读(83)  评论(0)    收藏  举报