手头一直没有测试环境,于是参考网上的教程,结合实际情况,自己建一个 k8s 的测试集群。搭建一主机两节点的最小集群。
大量参考了一位csdn大佬的文章,【2024】k8s集群 图文详细 部署安装使用(两万字) ,大佬使用的ubuntu。
第一部分 共有部分
此部分,三台主机都需要进行相同操作。
1、虚拟机安装
1.1 esxi三台虚拟机,分别命名 k8s-master、 k8s-node1、k8s-node2
测试环境,每台分配 2核心+4G内存+80G硬盘
1.2 ip配置
网络配置 分别配置了 ip 为 172.16.16.90、91、92 配置方式根据系统而定。 此次使用路由 DHCP 固定 IP。
1.3 主机名称配置
hostnamectl 配置每台机器名
hosts 配置内网对应 ip
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
如下图
2.2、关闭SWAP分区
修改/etc/fstab文件,注释掉 swap 行 UUID,永久关闭SWAP分区。
vim /etc/fstab
如图
修改swap需要重启生效,可先临时关闭swap。
swapoff -a
查看是否关闭成功
free -m
swap参数变0了表示关闭
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 = 1和net.ipv4.ip_forward_update_priority = 1
表示加载成功
3、安装containerd
Kubernetes (k8s) 新版去掉了中间层的 docker, 直接使用 containerd 做容器。
3.1 apt 安装 containerd
用 apt 安装后,启动配置自动生成,免去配置过程。
apt install containerd
安装完成查看版本
当前安装日期是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
查看是否启动成功
systemctl status containerd
查看当前版本,验证是否升级成功。
containerd -v
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
修改 139 行 SystemdCgroup 值为 true
保存文件,实际行数根据版本不同略有差异,按参数名修改。
重启 containerd 服务。
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
第二部分 配置部署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
5.3 重启服务
修改完,分别重启containerd 和 kubelet
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
初始化的图没有截,借用一张
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
暂时先配置到这里 ,接下来再继续。