# 实验室搭建 k3s 环境
# 搭建环境组成:
VM | 主机名 | 系统 | docker | k3s |
---|---|---|---|---|
10.0.21.13 | master | ubuntu22.04 | 24.0.1 | v1.28.5+k3s1 |
10.0.21.238 | node1 | ubuntu22.04 | 24.0.1 | v1.28.5+k3s1 |
10.0.21.51 | node2 | ubuntu22.04 | 24.0.1 | v1.28.5+k3s1 |
10.0.21.34 | nodeResPi | Linux version 6.1.0-rpi7-rpi-v8 | 24.0.1 | v1.28.5+k3s1 |
warning 这里的 nodeResPi 是树莓派 4B 设备,版本具体记不太清, cat /proc/version
是 Linux version 6.1.0-rpi7-rpi-v8 (debian-kernel@lists.debian.org) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.1.63-1+rpt1 (2023-11-24)
# 搭建过程:
info 这里搭建 k3s
单节点模式,k3s 架构介绍
这里 master 作为主节点,其余三个作为子节点。
# 安装 docker 以及其余准备
树莓派节点需要操作,如下:(以下两个操作完成之后需要重启)
1. 在 Raspberry Pi OS 上启用旧版 iptables#
Raspberry Pi OS(以前称为 Raspbian)默认使用 nftables
而不是 iptables
。 K3s 网络功能需要 iptables
并且不能与 nftables
一起使用。按照以下步骤切换配置 Buster 以使用 legacy iptables
:
sudo iptables -F | |
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy | |
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy | |
sudo root #官方参考重启,我建议下一步弄完,一起重启。 |
info sudo root
官方文档这里写的重启,我觉得这里也可以不重启,因为你 ls -l /sys/fs/cgroup
之后有很多内容,感觉可能涉及到重新加载 /boot/cmdline.txt
,所以建议下一步弄完,一起重启。
2. 为 Raspberry Pi OS 启用 cgroups#
标准 Raspberry Pi OS 安装不会启用 cgroups
。 K3S 需要 cgroups
来启动 systemd 服务。可通过将 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
附加到 /boot/cmdline.txt
来启用 cgroups
。
warning 插入应该是在第一行最后面添加:
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory |
💔danger 重启树莓派 sudo reboot
✔️树莓派单独配置部分完成
除去树莓派节点的剩余节点均需要的操作,如下:
关闭防火墙,否则主动开启对应端口
1. 关闭防火墙操作如下:
#ubuntu 默认不安装 ufw,预先安装 ufw | |
apt-get install ufw | |
#查看状态 | |
systemctl status ufw | |
#关闭 ufw | |
systemctl stop ufw |
2. 若不关闭,端口开放如下:(不保证这是全部应该开放的端口)
sudo ufw allow 6443/tcp | |
sudo ufw allow 443/tcp |
所有节点均需要操作,如下:
为了方便 dns 访问,我们这里首先修改所有主机的 hosts,每台主句运行如下命令:
cat >> /etc/hosts <<EOF 10.0.21.13 master 10.0.21.238 node1 10.0.21.51 node2 10.0.21.34 nodeResPi EOF检验:可以在主机上
ping node1
、ping master
-
预先安装 docker 这里直接安装脚本:
curl https://releases.rancher.com/install-docker/24.0.1.sh | sh #版本可以查看上面链接
完成后,可以检查版本,和 docker 状态:
systemctl status docker
docker --version
docker ps
# 安装 k3s
info 这里主要分为 server 节点(master 节点)的安装和 agent 节点安装两个部分
server 节点安装,如下:
这里注意区分国内外源:
-
国外源安装如下:
curl -sfL https://get.k3s.io | sh -s - --docker
-
国内源替换:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker
使用阿里云镜像
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker
安装完成:
安装成功之后检验:
docker ps
也可以查看
k3s
服务状态:systemctl status k3s
info 运行此安装后:
- K3s 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启。
- 将安装其他实用程序,包括
kubectl
、crictl
、ctr
、k3s-killall.sh
和k3s-uninstall.sh
。- kubeconfig 文件将写入到
/etc/rancher/k3s/k3s.yaml
,由 K3s 安装的 kubectl 将自动使用该文件。
agent 节点安装,如下:
agent 节点安装,和 server 节点有所区别:主要是节点加入集群。
warning 安装前需要获取 master 节点的 token
K3S_URL
参数会导致安装程序将 K3s 配置为 Agent 而不是 Server。K3s Agent 将注册到在 URL 上监听的 K3s Server。K3S_TOKEN
使用的值存储在 Server 节点上的/var/lib/rancher/k3s/server/node-token
中。
注意区分国内外源:
-
国外源安装如下:
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -s - --docker
-
国内源替换:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -s - --docker
使用阿里云镜像
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -s - --docker
安装成功:
检验:
dicker ps
检测
k3s-agent
服务状态systemctl status k3s-agent
K3s 集群安装成功, kubectl get nodes -o wide
如下
# 配置 Kubectl 使得 K3s Kubernetes 集群交互
要与 K3s Kubernetes 集群交互,您需要配置 kubectl 命令行工具来与 K3s API 服务器通信。K3s 安装脚本会自动为您安装 kubectl 二进制文件(但不会帮你配置)。
warning 这里的配置 kubectl 是针对全部主机(树莓派,ubuntu)
kubectl 配置如下:
1. 我们需要 master 上的 /etc/rancher/k3s/k3s.yaml
,将它放到每个主机的 ~/.kube/
目录下面(没有创建 mkdir ~/.kube
)(你可以下载上传,也可以通过 scp 传到每个主机)。
#注意没有.kube 创建.kube | |
sudo scp /etc/rancher/k3s/k3s.yaml root@ip:~/.kube |
2. 一次运行如下命令:
#修改名字为 config | |
sudo cp ~/.kube/k3s.yaml ~/.kube/config | |
#修改权限 | |
sudo chmod 600 ~/.kube/config | |
#修改 config 里面的 ip, 默认是 127.0.0.1,这里修改为 master 的 ip | |
vi config | |
#然后找到 server: https://127.0.0.1:6443 修改为 server: https://master-IP:6443 | |
修改 https://10.0.21.13:6443 | |
#配置环境变量并启用 | |
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc && source ~/.bashrc |
这样你就可以在任意节点使用 kubectl,链接 master 上的 API 命令了,例如 kubectl get nodes -o wide
.
# 参考链接:
[1] Rancher 中文社区!
[2] K3s 版本的插入件对应版本 - 官方
[3] K3s 安装以及高级选项配置 - 官方
[4] docker 不同版本安装 docker 安装参考
[5] 快速安装 K3s-K3s 社区
[6] centos 上单节点 k3s 集群安装
[7] 如何在 Ubuntu 22.04 上安装 k3s Kubernetes 集群
[8] 使用 K3s 在 Ubuntu 20.04 上安装 Kubernetes 集群 本文重点参考
[9] Kubernetes 入门到实践:搭建 K3s 集群初体验 换源 aliyun 参考
[10] How to Install k3s Kubernetes Cluster on Ubuntu 22.04 配置 Kubectl 用于交互