debian12 + kubernetes 测试环境安装 (Esxi)

701 阅读6分钟

手头一直没有测试环境,于是参考网上的教程,结合实际情况,自己建一个 k8s 的测试集群。搭建一主机两节点的最小集群。

大量参考了一位csdn大佬的文章,【2024】k8s集群 图文详细 部署安装使用(两万字) ,大佬使用的ubuntu

第一部分 共有部分

此部分,三台主机都需要进行相同操作。

1、虚拟机安装

1.1 esxi三台虚拟机,分别命名 k8s-master、 k8s-node1、k8s-node2

测试环境,每台分配 2核心+4G内存+80G硬盘 k8s-0001.png

1.2 ip配置

网络配置 分别配置了 ip 为 172.16.16.90、91、92 配置方式根据系统而定。 此次使用路由 DHCP 固定 IP。

1.3 主机名称配置

hostnamectl 配置每台机器名 WechatIMG3407.jpg

hosts 配置内网对应 ip
1726500436645.jpg

1.4 设置时间同步

时间同步 更改时区为上海时区

timedatectl set-timezone Asia/Shanghai

安装ntpdate

ntpdate是一个用于同步系统时钟与NTP服务器的工具

apt-get install ntpdate

通过ntpdate命令同步时间

ntpdate time1.aliyun.com

通过定时任务去实现定时同步

crontab -e

添加0 */1 * * * ntpdate time1.aliyun.com 保存

2、系统基本配置

2.1 安装ipset和ipvsadm

它们在 Kubernetes (k8s) 中用于网络管理和负载均衡。

apt-get install ipset ipvsadm

然后执行配置 ipvsadm 模块,用于开机自启动的,可以使用 cat /etc/modules-load.d/ipvs.conf查看是否配置成功

cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs 
ip_vs_rr 
ip_vs_wrr 
ip_vs_sh 
nf_conntrack 
EOF

配置启动脚本

cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

执行刚刚创建的脚本

sh ipvs.sh

通过下面的命令查看是否配置成功

lsmod | grep ip_vs

如下图

WechatIMG3408.jpg

2.2、关闭SWAP分区

修改/etc/fstab文件,注释掉 swap 行 UUID,永久关闭SWAP分区。

vim /etc/fstab

如图

WechatIMG3409.jpg

修改swap需要重启生效,可先临时关闭swap。

swapoff -a

查看是否关闭成功

free -m

swap参数变0了表示关闭

WechatIMG3410.jpg

2.3 配置内核转发、网桥过滤配置

2.3.1 配置依赖模块到 /etc/modules-load.d/k8s.conf,用于实现开启自动加载

overlay: 这是 OverlayFS 的内核模块,用于支持 Docker 和 Kubernetes 等容器化技术。

br_netfilter: 这是 Linux 内核中的网桥过滤器模块,用于支持 Kubernetes 的网络功能。

cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

配置完成之后,启动这两个配置,下次开机会自动重启。

modprobe overlay
modprobe br_netfilter

查看是否启动成功

lsmod | egrep "overlay"
lsmod | egrep "br_netfilter"
2.3.2 转发配置到k8s.conf文件中
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

加载内核参数:

sysctl --system

然后在查看是否加载成功

sysctl -a | grep ip_forward

net.ipv4.ip_forward = 1net.ipv4.ip_forward_update_priority = 1 表示加载成功

WechatIMG3420.jpg

3、安装containerd

Kubernetes (k8s) 新版去掉了中间层的 docker, 直接使用 containerd 做容器。

3.1 apt 安装 containerd

用 apt 安装后,启动配置自动生成,免去配置过程。

apt install containerd

安装完成查看版本

WechatIMG3411.jpg 当前安装日期是2024年9月17日,apt上的版本为 1.6.20,github 上的版本是1.7.22 手工升级一下

3.2 升级 Containerd

Github 按主机配置下载 Bin 文件直接覆盖原文件。 下载最新版本

wget https://github.com/containerd/containerd/releases/download/v1.7.22/containerd-1.7.22-linux-amd64.tar.gz

解压缩

tar zxvf ./containerd-1.7.22-linux-amd64.tar.gz

先停止containerd服务,然后覆盖文件,重新启动服务

systemctl stop containerd
cp ./bin/* /usr/bin/
systemctl start containerd

WechatIMG3414.jpg 查看是否启动成功

systemctl status containerd

WechatIMG3413.jpg

查看当前版本,验证是否升级成功。

containerd -v

WechatIMG3415.jpg

3.3 创建、修改containerd配置文件

生成默认的配置文件

containerd config default > /etc/containerd/config.toml

修改配置文件

vim /etc/containerd/config.toml

修改第67行 sanbox_image 值为 registry.aliyuncs.com/google_containers/pause:3.10 WechatIMG3416.jpg 修改 139 行 SystemdCgroup 值为 true WechatIMG3417.jpg 保存文件,实际行数根据版本不同略有差异,按参数名修改。 重启 containerd 服务。 WechatIMG3418.jpg

4、安装 Kubernetes(k8s)组件

4.1 添加阿里云下载源

现在最新的稳定版本为 1.31 添加源及key

apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/Release.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update

4.2 安装组件

k8s必要的三个组件,

  • kubeadm:创建、升级和管理 Kubernetes 集群
  • kubelet:管理节点上的容器生命周期
  • kubectl:管理和调试 Kubernetes 应用程序
apt-get install kubelet kubeadm kubectl

查看安装版本,如正常显示,则安装完成。

kubeadm version
kubelet --version
kubectl version

锁定版本

安装好后需要锁定版本,避免自动更新造成的一些问题。

apt-mark hold kubeadm kubelet kubectl

1726509718363.jpg

第二部分 配置部署k8s集群主结点

此部分只需要k8s-master节点的主机执行,其他的两个节点不用执行

5 集群主结点初始化

5.1 创建kubeadm-config配置文件

kubeadm config print init-defaults > kubeadm-config.yaml

5.2 修改初始化的配置文件

vim kubeadm-config.yaml

修改advertiseAddress为k8s-master节点的ip。

修改name为k8s-master节点的主机名。

修改imageRepository仓库地址为阿里云的镜像仓库registry.aliyuncs.com/google_containers 因为前面/etc/containerd/config.toml文件修改了,如果前面的文件镜像仓库地址没修改,这个地方也可以不修改。

修改kubernetesVersion版本号,前面下载的版为 1.31.1

dnsDomain表示DNS域名,可以不修改,但一个局域网内只能有一个相同的,如果有两个k8s集群用的一样的DNS名字就会冲突,一般推荐修改为公司的域名。

networking中的 serviceSubnet 后面添加 podSubnet: 10.244.0.0/16

kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

WechatIMG3422.jpg

5.3 重启服务

修改完,分别重启containerdkubelet

systemctl restart containerd
systemctl restart kubelet

6 初始化 k8s-master 节点

6.1 下载k8s所需要的镜像到主节点

--image-repository:指定镜像仓库

--kubernetes-version:k8s版本号

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.31.1

6.2 执行初始化

kubeadm init --config kubeadm-config.yaml

初始化的图没有截,借用一张 4f18508fc14d43dba1f6df65fc61c760.png

6.3 准备kubectl配置文件

添加配置文件

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

查看节点

kubectl get nodes

第三部分 配置从节点

7 配置从结点

6.2 中会生成一个从结点连接语句,复制在两个从结点上执行。

kubeadm join 172.16.16.90:6443 --token abcdef.0123456789abcdef \
 --discovery-token-ca-cert-hash sha256:92c2598201ba3ca6d46f04f2f67472614bf0f588744918a76f6e82170ab71534

暂时先配置到这里 ,接下来再继续。