# 实验室搭建 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/versionLinux 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 架构介绍

Architecture

这里 master 作为主节点,其余三个作为子节点。

# 安装 docker 以及其余准备

树莓派节点需要操作,如下:(以下两个操作完成之后需要重启)

1. 在 Raspberry Pi OS 上启用旧版 iptables#

Raspberry Pi OS(以前称为 Raspbian)默认使用 nftables 而不是 iptablesK3s 网络功能需要 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 安装不会启用 cgroupsK3S 需要 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

image-20240109221613710

💔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 node1ping 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

    安装完成:

    image-20240110105746867

    安装成功之后检验:

    docker ps

    image-20240110104918716

    也可以查看 k3s 服务状态:

    systemctl status k3s

    image-20240110104959787

info 运行此安装后:

  • K3s 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启。
  • 将安装其他实用程序,包括 kubectlcrictlctrk3s-killall.shk3s-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

    安装成功:

    image-20240110105826361

    检验:

    dicker ps

    image-20240110105901851

    检测 k3s-agent 服务状态

    systemctl status k3s-agent

    image-20240110105950373

K3s 集群安装成功, kubectl get nodes -o wide 如下

image-20240110110246498

# 配置 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 用于交互

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Watsmal 微信支付

微信支付

Watsmal 支付宝

支付宝

Watsmal 贝宝

贝宝