刚刚过完年,趁着还不是很忙,把这个文章更新一下。这个文章的主要内容还是debian12下安装kubernetes,与上一篇的不同之处在于1.23.9是直接支持使用dokcer作为运行时的,而1.32.1是不能直接使用docker作为运行时,需要安装cri-docker插件作为kubernetes和docker之间的API接口。
操作系统版本:debian 12.9;Kubernetes版本:1.32.1。集群包含四台主机,主机名、节点角色及IP地址如下:
-
ksm Master节点 192.168.77.20
-
ksn1 Node节点 192.168.77.21
-
ksn2 Node节点 192.168.77.22
-
ksn3 Node节点 192.168.77.23
下面就详细的说明一下整个部署过程。
一、安装必要软件包
apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common make net-tools
二、启用必要的内核模块。
#启用必要内核模块
tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
#执行命令
modprobe overlay ; modprobe br_netfilter
#编辑网络配置
tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#重载配置
sysctl --system
三、获取docker GPG key并配置容器镜像源。
# 获取docker GPG key。
install -m 0755 -d /etc/apt/keyrings ; curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc ; chmod a+r /etc/apt/keyrings/docker.asc
# 配置容器镜像源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
四、更新apt源并安装docker组件。
apt update && apt install -y docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin
五、创建必要目录及创建docker配置文件。这里一定要配置registry-mirrors,否则会出现各种镜像没办法拉取的问题,导致集群初始化失败。
#创建必要目录
mkdir -p /etc/systemd/system/docker.service.d
#创建daemon.json文件
tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://0XXXXXXXXXX.mirror.swr.myhuaweicloud.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
https://0XXXXXXXXXX.mirror.swr.myhuaweicloud.com部分是华为云的镜像加速,可以在华为云SWR中找到。
六、安装cri-docker插件。 这个插件有两种安装方式,可以通过源码编译安装,也可以通过软件包的方式安装。我这里会把两种方式都写一下。推荐使用软件包的方式安装,省时省力。同时,介于国内网络的情况,可能当前阶段提及的软件包在没有梯子的情况下无法下载,我会在文章末尾统一提供。
源码安装:
安装配置go环境。
#下载go
https://golang.google.cn/dl/
#安装go(这里下载的是当前的最新版本1.23.4)
tar -xzf go1.23.4.linux-amd64.tar.gz
mv go /usr/local
#配置环境变量
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
#重载环境变量
source /etc/profile
go的安装路径可以自定义,相应修改环境变量的路径即可。
安装配置cri-docker插件。
#安装cli-dockerd。
git clone https://github.com/Mirantis/cri-dockerd.git
tar -xzf cri-dockerd_0.3.16.tar.gz
cd cri-dockerd
make cri-dockerd
install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
install packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
#修改cri-docker.service文件。
vim /etc/systemd/system/cri-docker.service
ExecStart末尾加--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10
不加此参数会导致部分镜像拉取失败,最终导致集群初始化失败。
软件包安装:
#下载deb包文件。
https://github.com/Mirantis/cri-dockerd/releases
#安装deb包文件。
dpkg -i cri-dockerd_0.3.16.3-0.debian-bookworm_amd64.deb
#修改cri-docker.service文件。(注意软件包安装后的service文件与源码安装后的路径有区别。)
vim /lib/systemd/system/cri-docker.service
ExecStart末尾加--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10
完成安装及配置,重载service文件,并启动关键服务。
systemctl daemon-reload
systemctl enable cri-docker --now && systemctl enable --now cri-docker.socket #deb包安装不需要执行。
systemctl restart docker && systemctl enable docker && systemctl restart cri-docker
检查docker和cri-docker服务状态,确保两个服务状态为running。
七、安装kubernetes。
#添加公钥(仓库有些版本使用不同的公钥,因此按需修改 URL 中的版本号)。
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
#配置kubernetes源(根据自己的需要修改版本)
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.32/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
#更新软件源,并安装 kubeadm kubelet kubectl。
apt update && apt install -y kubelet kubeadm kubectl && apt-mark hold kubelet kubeadm kubectl
#修改kubelet配置文件,指定cgroup驱动为systemd。
echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > /etc/default/kubelet
#kubelet服务加入开机自启
systemctl enable kubelet
八、配置集群内所有主机的hosts文件,保证指向都正确。(图片是Master节点的hosts文件内容。)
vim /etc/hosts
九、生成kubeadm初始化配置文件。
#修改配置文件,重点为带注释部分。(主节点执行)
kubeadm config print init-defaults > kubeadm_init.yaml
配置文件内容如下:
====================Config file content Start====================
apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.8.7.21 #API服务器对外宣告的IP地址。
bindPort: 6443 #API对外宣告的端口。
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock #容器运行时接口的路径。
imagePullPolicy: IfNotPresent
imagePullSerial: true #镜像拉取策略,这里设置为如果不存在则拉取。
name: ksm.lab #节点名称。
taints: null #节点污点,这里设置为null,表示没有污点。
timeouts:
controlPlaneComponentHealthCheck: 4m0s
discovery: 5m0s
etcdAPICall: 2m0s
kubeletHealthCheck: 4m0s
kubernetesAPICall: 1m0s
tlsBootstrap: 5m0s
upgradeManifests: 5m0s
---
apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 8760h0m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:
local:
dataDir: /var/lib/kube_etcd
imageRepository: registry.aliyuncs.com/google_containers #镜像仓库地址,使用阿里云的镜像仓库,可以有效提高下载速度。
kind: ClusterConfiguration
kubernetesVersion: 1.31.2 #kubernetes版本。
networking:
dnsDomain: ksm.lab #DNS域名。
serviceSubnet: 10.96.0.0/16 #服务子网,切记不可与实际生产网络冲突。
podSubnet: 10.97.0.0/16 #容器子网,切记不可与实际生产网络冲突。
proxy: {}
scheduler: {}
====================Config file content End====================
十、使用配置文件进行Master节点初始化。
kubeadm init --config kubeadm_init.yaml --v=5
如果输出下面的信息,则表示集群初始化完成。如果失败,大部分情况都是因为一些关键镜像拉取失败导致。可以看看文章前面提示的那些镜像源是否已经修改为国内地址。或者在文章下留言,大家一起交流。
普通Linux账号需要管理kubernetes集群时,请在普通账号下执行第一个红框里的命令。第二个红框里的命令用于其他节点加入集群时执行。
如果只用root用户管理kubernetes集群,请执行如下命令:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
十一、将其他Node节点加入集群。
此处需要注意:需要先将containerd停掉,因为kubernetes在1.24以后开始用containerd作为默认运行时。不停掉会报发现多个运行时的错误。
systemctl stop containerd
执行加入节点命令后需要再次开启containerd,否则会无法拉取镜像。
systemctl start containerd
Node节点加入后的信息如下图。
将所有Node节点加入集群后执行命令,查看节点信息。可以发现所有节点均为NotReady状态,这是因为尚未对集群安装网络管理插件导致。
十二、部署网络插件calico(只在Master节点执行)。
获取calico部署yaml文件。
wget https://docs.projectcalico.org/manifests/calico.yaml
编辑calico.yaml文件
vim calico.yaml
查找内容“CALICO_IPV4POOL_CIDR”,将注释取消。并将值修改为初始化文件中podSubnet的值。
部署calico。
kubectl apply -f calico.yaml
查看calico pods运行情况。
kubectl get pods -n kube-system
如果红框内的pod提示拉取镜像失败,则需要检查前面需要之前的第五步中registry-mirrors是否已经配置了可用的国内加速器或源。
等待所有calico相关pod的状态为Running,则表示网络插件运行正常。
十三、检查并完成集群配置。
完成上述十二步后,如果没有出现异常,执行查看节点信息的命令,可以看到如下图信息。
所有节点均已经处于Ready状态,则kubernetes集群搭建完成。
软件包下载: https://pan.baidu.com/s/1pxkLmaHHfN0neBNmHhkszg?pwd=Z3oT