clgzyh Blog

使用Kubeadm安装Kubernetes-1.32.3

Published at 2025-04-22 | Last Update 2025-04-22

本文讲解的是以ubuntu22.04.05系统使用kubeadm工具安装kubernetes-v1.32.3的过程

节点分布

节点名 IP地址 作用
k8s-master01 192.168.10.55 master
k8s-worker01 192.168.10.66 worker01
k8s-worker02 192.168.10.77 worker02

先决条件

所有节点执行

主机解析

cat >> /etc/hosts << eof
192.168.10.55 k8s-master01
192.168.10.66 k8s-worker01
192.168.10.77 k8s-worker02
eof

修改句柄数

ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF
ulimit -a

时间同步

apt-get install chrony -y

# 添加时间同步服务器
vim /etc/chrony/chrony.conf
server ntp.aliyun.com iburst

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' > /etc/timezone

chronyc sources -v
启动系统服务chronyd,并设为开机自启
systemctl  restart  chronyd    #重启校时服务
systemctl  enable  chronyd     #开机自启
输入date  查看时间
timedatectl   ------看到synchronized: yes,表示同步成功

开启主机间的免密登陆

ssh-keygen
ssh-copy-id k8s-master01
ssh-copy-id k8s-worker01
ssh-copy-id k8s-worker02

k8s集群初始化设置

安装依赖包

apt-get install -y conntrack ipvsadm ipset jq iptables curl sysstat  wget vim net-tools git

关闭swap

swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab
cat  /etc/fstab

k8s系统优化

cat > /etc/sysctl.d/k8s_better.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

sysctl -p /etc/sysctl.d/k8s_better.conf
modprobe br_netfilter
modprobe ip_conntrack
lsmod |grep conntrack

配置containerd

安装containerd

# 安装包获取链接
https://github.com/containerd/containerd/releases/tag/v2.0.4

tar -zxvf containerd-2.0.4-linux-amd64.tar.gz -C /usr/local/
mkdir - /etc/containerd

# 创建默认配置文件
containerd config default | tee /etc/containerd/config.toml

# 使用github上的containerd.service
sudo wget -O /usr/lib/systemd/system/containerd.service    https://raw.githubusercontent.com/containerd/containerd/main/containerd.service

systemctl restart containerd
systemctl daemon-reload
systemctl enable --now containerd

安装runc

# 安装包获取链接
https://github.com/opencontainers/runc/releases

install -m 755 runc.amd64 /usr/local/sbin/runc

安装CNI插件

# 安装包获取链接
https://github.com/containernetworking/plugins/releases
mkdir -p /opt/cni/bin
tar -zxvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/

配置containerd加速器目录

mkdir -p  /etc/containerd/certs.d
vim /etc/containerd/config.toml
    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/certs.d"

# 重启服务
systemctl restart containerd

cat >/etc/containerd/certs.d/docker.io/hosts.toml <<EOF
server = "https://docker.io"

[host."https://docker.m.daocloud.io"]
  capabilities = ["pull", "resolve"]
EOF

cat >/etc/containerd/certs.d/quay.io/hosts.toml <<EOF
server = "https://quay.io"

[host."https://quay.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

cat >/etc/containerd/certs.d/registry.k8s.io/hosts.toml <<EOF
server = "https://quay.io"

[host."https://k8s.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

指定运行时

cat >/etc/crictl.yaml<<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: false
EOF

systemctl restart containerd.service

crictl image

安装k8s

安装必要工具

sudo apt-get update -y
sudo apt-get install -y apt-transport-https ca-certificates gpg 

清华源

获取gpg文件

curl https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core%3A/stable%3A/v1.32/deb/Release.key -o Release.key

将获取到的gpg文件通过gpg命令转换成kubernetes-apt-keyring.gpg

sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg  ./Release.key

将密钥文件位置和清华apt源写进/etc/apt/sources.list.d/kubernetes.list

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

阿里源

获取gpg文件

curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

添加源

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list

更新apt源

apt update -y

# 验证kubeadm kubelet kubectl版本是否为1.32
apt list | grep kubelet

安装kubeadm kubectl kubelet

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

# 锁定版本
sudo apt-mark hold kubelet kubeadm kubectl

配置Cgroup

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容

vim /etc/sysconfig/kubelet
---
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet

拉取k8s安装镜像

查看安装k8s 所需要的镜像

kubeadm config images list --kubernetes-version=v1.32.3

拉取镜像k8s所需镜像

# 使用containerd
kubeadm config images pull

集群初始化

参数说明

--apiserver-advertise-address 集群通告地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
kubeadm init --kubernetes-version=v1.32.3 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.10.55

安装成功提示如下:

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.10.55:6443 --token qfwvuh.vde3fbljzxhs76fk \
	--discovery-token-ca-cert-hash sha256:8c686660b6d29b93b8ee887d87d1c1bc321cdc8d478ec319c6d1000202a99ccf

按照提示在master节点执行以下命令

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

在worker节点执行

kubeadm join 192.168.10.55:6443 --token qfwvuh.vde3fbljzxhs76fk \
	--discovery-token-ca-cert-hash sha256:8c686660b6d29b93b8ee887d87d1c1bc321cdc8d478ec319c6d1000202a99ccf

在worker节点使用kubectl方法如下:

# master_node
scp /etc/kubernetes/admin.conf root@k8s-worker01:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@k8s-worker02:/etc/kubernetes/

# worker_node
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

部署calico网络插件

# 无法下载直接windows浏览器复制链接,将calico.yaml文件内容复制使用
wget --no-check-certificate https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml

// 链接
https://github.com/projectcalico/calico/blob/master/manifests/calico.yaml

# 修改calico.yaml内容,将pod-network-cidr与上文保持一致
sed -n "4957,4958p" calico.yaml
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"
              
# 部署calico.yaml
kubectl apply -f calico.yaml

检查节点状态

root@k8s-master01:~# kubectl get no
NAME           STATUS   ROLES           AGE    VERSION
k8s-master01   Ready    control-plane   128m   v1.32.3
k8s-worker01   Ready    <none>          120m   v1.32.3
k8s-worker02   Ready    <none>          119m   v1.32.3

另外,bash-completion也支持为kubernetes提供命令补全 集群命令补全

# 退出shell重连生效
sudo apt-get install bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc