jk's notes
  • 使用 K3s 搭建环境

使用 K3s 搭建环境

这里使用 Kubernetes 1.25.0, 需要注意的是容器运行时使用 containerd, 而不是 Docker.

为什么使用 K3s:

  • 因为结构简单, 占用资源小.
  • 与 Kubernetes 完全兼容.
  • 提供了离线安装包. 使用简单.
  • 适合边缘计算, 物联网, 嵌入式, ARM 场景等.

K3s 网址: https://docs.k3s.io/

轻量级的 Kubernetes

离线安装 K3s 集群

K3s 集群分为:

  • K3s Server (控制平面)
  • K3s Agent (工作节点)

所有的组件都打包在单个 二进制 文件中.

img

运行环境

资源占用小, 可以考虑使用虚拟机来搭建环境.

最低运行要求:

  • 内存 512M
  • CPU 1 核心

K3s 版本: v1.25.0 + K3s1

集群规划:

主机名IP地址配置系统网络
k8s-master192.168.56.1092Core, 2G内存, 20G硬盘CentOS Minimal仅主机 + NAT 网络
k8s-worker1192.168.56.1112Core, 2G内存, 20G硬盘CentOS Minimal仅主机 + NAT 网络
k8s-worker2192.168.56.1122Core, 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).

注意, 安装时将网络设置为自动连接.

image-20230721105403984

配置仅主机网络

  1. 进入路径 /etc/sysconfig/network-scripts/.
  2. 找到名为 ifcfg-ens数字 的文件, 使用 vi 打开编辑.
  3. 修改 ONBOOT=yes 即开启启动网络.
  4. 然后重启网络服务: service network restart

配置 NAT 网络

在虚拟机管理网络中添加 NAT 网络.

image-20230724145628058

然后给虚拟机添加一张网卡, 设置为 NAT 网络.

image-20230724145804760

需要在网络设置中设置 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 仓库中下载.

image-20230721113510579

如果无法下载, 可以考虑使用 win 下载后用 ftp 上传

image-20230721114309691

image-20230721114436030

image-20230721114559806

下载完成后即有:

image-20230721115403909

安装 K3s

将 k3s 可执行程序移动到 /usr/local/bin 目录:

mv k3s /usr/local/bin

添加执行权限:

chmod +x /usr/local/bin/k3s

image-20230721120041487

创建默认的镜像目录. 将镜像移动到 /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/

image-20230721120227310

最后给安装脚本添加执行权限:

chmod +x install.h

image-20230721120406629

复制虚拟机

接下来将 k8s-master 主机复制两份, 分别命名为 k8s-worker1 和 k8s-worker2. 需要重新分配 mac 地址.

先将 网络切换为 仅主机, 然后分别修改每一台主机的 /etc/sysconfig/network-scripts/ifcfg-ens数字. 将 BOOTPROTO 修改为 static, 然后依次设置 IPADDR, GATEWAY, NETMASK, 然后重启网络服务.

除此之外, 编辑 /etc/hostname 文件中的名字来修改 hostname.

复制步骤:

  1. 关机
  2. 在 VirtualBox 管理工具左侧列表中右键, 选择复制
  3. 在弹出向导中设置新的名字, 然后修改重新分配 MAC 地址

image-20230721131102982

image-20230721131419963

注意:

  • 完全复制
  • 修改 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

然后重新登录即可.

image-20230721164601895

执行安装脚本

# 离线安装 (在 k8s-master 节点上执行该命令)
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
# 使用 kubectl get node 来查看节点状态 (当为 Ready 时, 表示控制平面安装完成)
kubectl get node

image-20230721171156987

安装完成后需要等待一段时间.

查看 k8s-master 节点上的节点 token

cat /var/lib/rancher/k3s/server/node-token

image-20230721171353284

复制这个 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 

image-20230721233324993

配置镜像加速

就是配置国内阿里云的镜像加速.

考虑到 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

image-20230722005117588

查看这个文件内容:

image-20230722005247212

注意不要修改这个文件, 该文件是临时生成的, 重启会再次创建.

事实上, K3s 使用 /etc/rancher/k3s/registries.yaml 来配置镜像仓库, K3s 会在启动时检查这个文件是否存在. 若存在则使用, 若不存在则会使用默认的临时文件.

因此我们需要在每一个节点下都创建该文件 (默认该文件是不存在的). 内容为:

mirrors:
  docker.io:
    endpoint: 
      - "https://iglfr1u0.mirror.aliyuncs.com"

修改完成后, 需要重启服务:

# 主节点使用
systemctl restart k3s

# 从节点使用
systemctl restart k3s-agent

从节点的重启会比较慢.

image-20230722012415342

确实非常慢.

Last Updated:
Contributors: jk