使用 K3s 搭建环境
这里使用 Kubernetes
1.25.0
, 需要注意的是容器运行时使用 containerd
, 而不是 Docker
.
为什么使用 K3s:
- 因为结构简单, 占用资源小.
- 与 Kubernetes 完全兼容.
- 提供了离线安装包. 使用简单.
- 适合边缘计算, 物联网, 嵌入式, ARM 场景等.
K3s 网址: https://docs.k3s.io/
轻量级的 Kubernetes
离线安装 K3s 集群
K3s 集群分为:
- K3s Server (控制平面)
- K3s Agent (工作节点)
所有的组件都打包在单个 二进制 文件中.
运行环境
资源占用小, 可以考虑使用虚拟机来搭建环境.
最低运行要求:
- 内存 512M
- CPU 1 核心
K3s 版本: v1.25.0 + K3s1
集群规划:
主机名 | IP地址 | 配置 | 系统 | 网络 |
---|---|---|---|---|
k8s-master | 192.168.56.109 | 2Core, 2G内存, 20G硬盘 | CentOS Minimal | 仅主机 + NAT 网络 |
k8s-worker1 | 192.168.56.111 | 2Core, 2G内存, 20G硬盘 | CentOS Minimal | 仅主机 + NAT 网络 |
k8s-worker2 | 192.168.56.112 | 2Core, 2G内存, 20G硬盘 | CentOS Minimal | 仅主机 + NAT 网络 |
看 IP 似乎使用的是仅主机的网络配置.
这里
k8s-master
为控制平面,k8s-workerN
为工作节点.设置网卡:
- 将 NAT 网络设置为第一网卡, 配置时自动获取 IP
- 将仅主机配置为第二网卡, 配置时使用静态 IP
安装 CentOS
下载地址: http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
在 VirtualBox
中安装, 不用创建用户, 仅使用 root
用户即可 (密码设置为 admin
).
注意, 安装时将网络设置为自动连接.
配置仅主机网络
- 进入路径
/etc/sysconfig/network-scripts/.
- 找到名为
ifcfg-ens数字
的文件, 使用vi
打开编辑. - 修改
ONBOOT=yes
即开启启动网络. - 然后重启网络服务:
service network restart
配置 NAT 网络
在虚拟机管理网络中添加 NAT 网络.
然后给虚拟机添加一张网卡, 设置为 NAT 网络.
需要在网络设置中设置 DNS=8.8.8.8
安装 K3s 必要文件与基本配置
因为主机与节点配置是一致的, 因此先对虚拟机中的系统进行配置, 然后复制虚拟机.
关闭防火墙设置 SELinux
执行命令
systemctl disable firewalld --now # 关闭防火墙
# 设置 SELinux 需要联网
yum install -y container-selinux selinux-policy-base
yum install -y https://rpm.rancher.io/k3s/latest/common/centos/7/noarch/k3s-selinux-0.2-1.el7_8.noarch.rpm
下载 K3s 脚本与必要安装包
- 下载安装脚本. https://get.k3s.io/
- 下载 k3s 二进制文件. k3s
- 下载必要的 image. 离线安装需要的 image 文件
这些都可以在 github 仓库中下载.
如果无法下载, 可以考虑使用 win 下载后用 ftp 上传
下载完成后即有:
安装 K3s
将 k3s
可执行程序移动到 /usr/local/bin
目录:
mv k3s /usr/local/bin
添加执行权限:
chmod +x /usr/local/bin/k3s
创建默认的镜像目录. 将镜像移动到 /var/lib/rancher/k3s/agent/images
目录 (无需解压)
mkdir -p /var/lib/rancher/k3s/agent/images/
cp ./k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/
最后给安装脚本添加执行权限:
chmod +x install.h
复制虚拟机
接下来将 k8s-master
主机复制两份, 分别命名为 k8s-worker1
和 k8s-worker2
. 需要重新分配 mac
地址.
先将 网络切换为 仅主机, 然后分别修改每一台主机的
/etc/sysconfig/network-scripts/ifcfg-ens数字
. 将BOOTPROTO
修改为static
, 然后依次设置IPADDR
,GATEWAY
,NETMASK
, 然后重启网络服务.除此之外, 编辑
/etc/hostname
文件中的名字来修改hostname
.
复制步骤:
- 关机
- 在 VirtualBox 管理工具左侧列表中右键, 选择复制
- 在弹出向导中设置新的名字, 然后修改重新分配
MAC
地址
注意:
- 完全复制
- 修改
MAC
与IP
- 修改
hostname
修改 IP
打开文件 /etc/sysconfig/network-scripts/ifcfg-ens数字
文件
# 修改
BOOTPROTO=static
# 添加
IPADDR=192.168.56.109 # k8s-master
IPADDR=192.168.56.111 # k8s-worker1
IPADDR=192.168.56.112 # k8s-worker2
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
然后重启服务
service network restart
注意, 同步需要修改 NAT 网络对应的网卡配置, 使用 ifconfig 查看对应 IP 的网卡配置文件
修改hostname
执行命令
hostnamectl set-hostname 新名字
systemctl restart systemd-hostnamed
然后重新登录即可.
执行安装脚本
# 离线安装 (在 k8s-master 节点上执行该命令)
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
# 使用 kubectl get node 来查看节点状态 (当为 Ready 时, 表示控制平面安装完成)
kubectl get node
安装完成后需要等待一段时间.
查看 k8s-master
节点上的节点 token
cat /var/lib/rancher/k3s/server/node-token
复制这个 token
后, 在节点服务器上执行:
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL=https://192.168.56.109:6443 \
K3S_TOKEN=主节点的 token \
./install.sh
需要注意这里使用 https
协议
在节点服务器上执行的时候, 可以在主节点服务器上使用 watch 命令, 每隔一秒钟查看节点状态:
watch -n 1 kubectl get node
配置镜像加速
就是配置国内阿里云的镜像加速.
考虑到 k8s
1.24
之后支持 containerd
, 因此需要修改的是 containerd
的配置文件.
配置文件的路径一般是 /etc/containerd/config.toml
在 K3s 中这个目录是不存在的. 考虑查看 containerd
的进程.
ps -ef | grep containerd
可以看到, K3s 会自动生成临时的文件: /var/lib/rancher/k3s/agent/etc/containerd/config.toml
查看这个文件内容:
注意不要修改这个文件, 该文件是临时生成的, 重启会再次创建.
事实上, K3s
使用 /etc/rancher/k3s/registries.yaml
来配置镜像仓库, K3s 会在启动时检查这个文件是否存在. 若存在则使用, 若不存在则会使用默认的临时文件.
因此我们需要在每一个节点下都创建该文件 (默认该文件是不存在的). 内容为:
mirrors:
docker.io:
endpoint:
- "https://iglfr1u0.mirror.aliyuncs.com"
修改完成后, 需要重启服务:
# 主节点使用
systemctl restart k3s
# 从节点使用
systemctl restart k3s-agent
从节点的重启会比较慢.
确实非常慢.