Ubuntu通过kubeadm安装k8s集群
环境准备:
| 系统 | ubuntu |
| 版本号 | 24.04 |
| docker版本 | 28.0.4 |
| kubernetes版本 | v1.32 |
| k8s-master01 | 192.168.49.20(至少2G内存,2核cpu) |
| k8s-master02 | 192.168.49.21(至少2G内存,2核cpu) |
| k8s-master03 | 192.168.49.22(至少2G内存,2核cpu) |
| k8s-node01 | 192.168.49.23(至少2G内存) |
| k8s-node02 | 192.168.49.24(至少2G内存) |
一、初始化
1、配置host文件,每台机器的/etc/hosts文件中写入:
192.168.49.20 k8s-master01
192.168.49.21 k8s-master02
192.168.49.22 k8s-master03
192.168.49.23 k8s-node01
192.168.49.24 k8s-node02
2、配置时间同步, 每台机器都要执行,如下:
timedatectl set-timezone Asia/Shanghai #先设置时区为上海
apt install ntpsec-ntpdate #安装ntpdate
ntpdate ntp.aliyun.com #同步阿里云时间
crontab -e #加入定时任务
3、配置内核转发和网桥过滤,,每台机器执行如下:
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
加载如下两个模块(如果先安装的docker,在安装后这两个模块就是默认加载了):
modprobe overlay #lsmod | grep overlay可查看
modprobe br_netfilter #lsmod | grep br_netfilter 可查看
4、安装ipvs,每台机器都要安装
cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_VS_wrr
ip_vs_sh
nf_conntrack
EOF
加载模块
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
查看是否加载成功,如图:

5、关闭swap分区(如果不配置关闭就要配置kubelet容忍swap):
swapoff -a #临时禁用
vim /etc/fastb #注释掉,永久禁用
6、安装docker 和cri-dockerd,这里省略,k8s1.32对应的pause为3.10,因此cri-dockerd要用3.10版本
7、安装etcd,k8s1.32要求etcd要3.5.15以上,可以参考链接安装etcd
二、安装 kubeadm、kubelet 和 kubectl
kubeadm:用来初始化集群的指令kubelet:在集群中的每个节点上用来启动 Pod 和容器等kubectl:用来与集群通信的命令行工具
注:如果是离线机器安装,就需要找到有网的机器,然后执行下面的步骤将安装包下载回来
1、首先安装需要的工具包
apt-get install -y apt-transport-https ca-certificates curl gpg
2、下载公共签名密钥(1.32版本)
# /etc/apt/keyrings目录没有就要创建
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
3、添加仓库源:
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt update #更新源头
4、查看当前可用的软件版本,如图:
apt-cache madison kubelet | kubeadm | kubectl

5、有网机器直接执行命令安装
apt-get install -y kubelet kubeadm kubectl #默认安装最新版本
或者指定版本
apt-get install -y kubelet=1.32.3-1.1 kubeadm=1.32.3-1.1 kubectl=1.32.3-1.1 #指定版本
机器没有网可将1-4步骤放在有网机器执行,然后执行命令将包下载回来,如下:
#/root/k8s路径为自己创建的
apt-get install -y --download-only -o dir::cache::archives=/root/k8s kubeadm=1.32.3-1.1
放到内网机器后,执行命令安装,如下:
dpkg -i *.deb
apt-mark hold kubelet kubeadm kubectl #锁定版本,防止自动更新
| 组件 | master节点 | work节点 |
| kubeadm | 需要 | 非必须 |
| kubectl | 需要 | 非必须 |
| kubelet | 需要 | 必须 |
6、配置kubelet,配置cgroup管理,所有节点都要执行,如下:
vim /etc/default/kubelet #1.30版本后的路径,之前在/etc/sysconf/kubelet
添加如下配置:
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
配置开机自启动,此时不用启动,现在启动也会报错,kubeadm init后会自动带起来
systemctl enable kubelet
三、初始化集群
初始化集群的操作需要在master上操作
1、规划集群网段
规划pod/service网段,这两个网段和宿主机网段不能重复
- 宿主机网段:192.168.49.0/24
- service网段:10.96.0.0/12
- pod网段:10.244.0.0/16
2、执行kubeadm init初始化集群,如下:
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: 192.168.49.20
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock
imagePullPolicy: IfNotPresent
imagePullSerial: true
name: k8s-master1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
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
controlPlaneEndpoint: "192.168.49.19:16443"
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:
external:
endpoints:
- https://192.168.49.20:2379
- https://192.168.49.21:2379
- https://192.168.49.22:2379
caFile: /data/etcd/ssl/etcd-ca.pem
certFile: /data/etcd/ssl/server.pem
keyFile: /data/etcd/ssl/server-key.pem
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.32.3
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
proxy: {}
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
执行如下命令初始化集群,如下:
kubeadm init --config kubeadm-config.yaml
3、在其他master节点创建一下目录:
mkdir -p /etc/kubernetes/pki/
4、复制文件到其他两个master节点,如下:
scp -r /etc/kubernetes/pki/ca.* root@ip:/etc/kubernetes/pki/
scp -r /etc/kubernetes/pki/sa.* root@ip:/etc/kubernetes/pki/
scp -r /etc/kubernetes/pki/front-proxy-ca.* root@ip:/etc/kubernetes/pki
scp -r /etc/kubernetes/admin.conf root@ip:/etc/kubernetes/
5、其他master节点和node节点加入集群执行以下命令 :
kubeadm join .........
6、所有master执行如下命令:
#root用户执行以下命令:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
#非root用户可以执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时的所有节点还是NotReady状态,安装calico后即可变为Ready
四、安装calico(3.30.0版本)
1、按照官网部署方式,首先执行如下命令:
kubectl create -f https://mirrors.chenby.cn/https://raw.githubusercontent.com/projectcalico/calico/v3.30.0/manifests/tigera-operator.yaml
注意:这一步直接执行,不可先把文件下载回来在执行,会失败
2、将custom-resources.yaml下载回来,修改cidr地址为上面定义的pod地址,如下:
wget https://raw.githubusercontent.com/projectcalico/calico/v3.30.0/manifests/custom-resources.yaml

最后执行命令创建calico,如下:
kubectl create -f custom-resources.yaml
创建后会自动创建calico-system命名空间并且运行calico相关容器,默认情况下容器都是通过docker.io地址拉取,国内无法拉取,可先通过外网机器拉回来保存到本地仓库,然后拉取到k8s节点上,再修改为对应的镜像名字即可,最后查看calico运行情况,如图:

calico安装成功后,coredns也会正常运行,如图:



