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 作为服务。

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

sh 复制代码
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 的文件目录。

这个例子介绍了如何使用上述的环境变量(在管道之后):

bash 复制代码
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

下载安装文件

步骤1:配置目录结构

bash 复制代码
# 创建必要的目录
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:导入容器镜像

bash 复制代码
# 方法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:使用离线安装脚本

bash 复制代码
# 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:手动安装

bash 复制代码
# 创建配置文件
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

bash 复制代码
# 启动服务
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(如果需要)

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

4. 配置 K3s(可选)

配置 K3s 参数

bash 复制代码
# 编辑配置文件
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

配置容器运行时

bash 复制代码
# 如果需要使用 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. 验证安装

bash 复制代码
# 检查 K3s 版本
k3s --version

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

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

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

6. 常见问题解决

问题1:镜像导入失败

bash 复制代码
# 检查镜像文件完整性
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:服务启动失败

bash 复制代码
# 查看详细日志
sudo journalctl -u k3s -n 50 --no-pager

# 检查端口占用
sudo netstat -tlnp | grep 6443

# 清理后重新安装
sudo /usr/local/bin/k3s-uninstall.sh

问题3:openEuler 特定配置

bash 复制代码
# 禁用防火墙(根据实际需求)
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. 管理命令

bash 复制代码
# 停止 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
相关推荐
HLC++11 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生17 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1119 小时前
linux基础IO
linux·运维·服务器
BelongPanda20 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯21 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983421 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器