acautomaton
acautomaton
Published on 2025-07-01 / 7 Visits
0
0

Ubuntu 24.04.2 安装 K8S Docker 集群 1.33.2

主机准备

主机名

IP 地址

主机配置

k8s-master-1

192.168.100.101

2核,4GB内存,64GB硬盘

k8s-node-1

192.168.100.102

2核,4GB内存,64GB硬盘

k8s-node-2

192.168.100.103

2核,4GB内存,64GB硬盘

k8s-node-3

192.168.100.104

2核,4GB内存,64GB硬盘

以下操作,在所有 4 台主机上均要进行,可以在 1 台主机上操作完后再进行克隆,但注意修改 IP 以及主机名。

1. 禁用 Linux 的 swap 分区

sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久禁用 swap 分区

2. 添加DNS解析

我使用的是内网 DNS 服务器,若需要手动解析可编辑 /etc/hosts 文件,需要保证每台机器都能互相解析。

例如:

cat >> /etc/hosts << EOF
192.168.100.102 k8s-node-1
192.168.100.103 k8s-node-2
192.168.100.104 k8s-node-3
EOF

3. 时间同步

# 安装ntp服务
apt install ntpdate -y

# 安装完成后使用阿里云的时间服务同步时间 
ntpdate ntp1.aliyun.com

4. 配置网络

为了让 K8s 能够转发网络流量,需要修改 iptables 的配置。

# 修改 Linux 内核参数,添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 使配置生效
sudo sysctl --system

5. 重启服务器

reboot

6. 安装 Docker

按照 https://docs.docker.com/engine/install/ubuntu/ 安装即可。

6.1 设置 Docker apt 仓库

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

6.2 安装 Docker 软件包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

7. 安装 cri-dockerd

在 k8s 1.24 后,k8s 的 docker 原生支持被移除。cri-dockerd 用于为 Docker 提供一个能够支持 K8s 容器运行时标准的工具,从而能够让 Docker 作为 K8s 容器引擎。

# 通过 wget 命令获取 cri-dockerd软件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.18/cri-dockerd-0.3.18-3.fc36.x86_64.rpm

# 通过 rpm 命令执行安装包
rpm -ivh cri-dockerd-0.3.18-3.fc36.x86_64.rpm

安装完成后修改配置文件 /usr/lib/systemd/system/cri-docker.service,在 ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// 这一行增加 –pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10

# 打开 cri-docker.service 配置文件
vi /usr/lib/systemd/system/cri-docker.service

# 要修改的这一行
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10

配置文件修改后,重新加载配置并开启 cri-dockerd 服务。

# 加载配置并开启服务
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

8. 安装 kubeadm,kubelet,kubectl

按照 https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 安装即可:

8.1 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包

sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

8.2 下载用于 Kubernetes 软件包仓库的公共签名密钥

# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

8.3 添加 Kubernetes apt 仓库

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

8.4 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

我按照 k8s 时最新版本就为 1.33.2,如有需要请手动指定版本。

8.5 开机启动 k8s 服务

systemctl enable kubelet

以下操作,只在控制平面节点上进行。

9. 初始化 Master 节点

在控制平面节点执行以下命令:

kubeadm init \
  --apiserver-advertise-address=192.168.100.101 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.33.2 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all
  • apiserver-advertise-address:集群广播地址,使用 master 节点的内网 IP

  • image-repository:由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

  • kubernetes-version: k8s 版本,与上面安装的软件版本一致。

  • service-cidr:集群 Service 网段,一般无需更改。

  • pod-network-cidr:集群 Pod 网段,一般无需更改。

  • cri-socket:指定 cri-socket 接口,我们这里使用 unix:///var/run/cri-dockerd.sock。

执行命令后耐心等待,直到安装完成,会出现以下内容:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.100.101:6443 --token xxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxx

其中说明,需要在控制平面节点执行以下命令:

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

如果当前以 root 身份登录,也可只执行以下命令来代替:

export KUBECONFIG=/etc/kubernetes/admin.conf

在返回结果的最后一条,有如下命令:

kubeadm join 192.168.100.101:6443 --token xxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxx

这个是用来加入作业节点的,需要在作业节点上执行。

以下操作,只在作业节点上进行。

10. 初始化 Master 节点

在作业节点上执行上文提到的代码:

kubeadm join 192.168.100.101:6443 --token xxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxx \
        --cri-socket=unix:///var/run/cri-dockerd.sock

注意我们使用的是 cri-dockerd,故需要在最后面加上参数 -–cri-socket=unix:///var/run/cri-dockerd.sock

以下操作,只在控制平面节点上进行。

11. 安装 k8s 网络插件

# 下载 Calico 插件部署文件
wget https://docs.projectcalico.org/manifests/calico.yaml

修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 参数,需要与前面 kubeadm init 命令中的 -–pod-network-cidr 参数一样10.244.0.0/16)。

文件内容较多,可使用 /CALICO_IPV4POOL_CIDR 快速查找。

最后,使用 kubectl apply 命令将 Calico 插件部署到集群里:

kubectl apply -f calico.yaml

Calico 部署会比较慢,大概等个几分钟,等待 Calico 部署完成后,通过命令 kubectl get node 查看节点状态,就可以看到所有节点已经准备就绪,此时集群正式搭建成功。

root@k8s-master-1:~# kubectl get node
NAME            STATUS      ROLES            AGE      VERSION
K8s-master-1    Ready       control-plane    8m20s    v1.33.2
k8s-node-1      Ready       <none>           4m20s    v1.33.2
k8s-node-2      Ready       <none>           4m       v1.33.2
k8s-node-3      Ready       <none>           3m48s    v1.33.2

参考文献

https://docs.docker.com/engine/install/ubuntu/https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/https://bbs.huaweicloud.com/blogs/433368https://blog.csdn.net/m0_37749659/article/details/130629326


Comment