本文初期将使用2台服务器作为k8s集群的节点,资源情况如下,免费服务器来源可以查看第二篇文章。
主机名 | 内网IP | 硬件资源 | 操作系统 |
k8s-master | 172.21.176.3 | 4C8G | Ubuntu20.04 |
k8s-node01 | 172.21.176.4 | 2C4G | Ubuntu20.04 |
使用kubeadm来搭建属于自己的第一套k8s集群
1.修改系统参数
修改主机名
vim /etc/hosts
172.21.176.3 k8s-master
172.21.176.4 k8s-node01
关闭swap
sed -ri 's/^([^#].*swap.*)$/#\1/' /etc/fstab
grep swap /etc/fstab
swapoff -a
关闭防火墙
ufw disable
systemctl disable ufw
设置时区
timedatectl set-timezone Asia/Shanghai
echo 'LC_TIME=en_DK.UTF-8' >> /etc/default/locale
#重启后就会显示24小时制的
开启ipv4转发和网络桥接功能
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
sysctl net.ipv4.ip_forward
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
2.安装containerd
k8s在1.24版本之后,默认的后端为containerd,并且不再直接支持docker,这里就按照官方趋势,安装containerd
apt安装containerd
apt update && apt install -y containerd
#看下版本
containerd -v
#生成配置文件
mkdir -p /etc/containerd && \
containerd config default > /etc/containerd/config.toml
#修改cgroup
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
#修改pause镜像地址为阿里云地址
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"#g' /etc/containerd/config.toml
#修改完毕后一定要重启服务
systemctl daemon-reload
systemctl restart containerd.service
3.使用kubeadm安装K8S
(截止2025年3月,k8s最新版本为1.32.2)
此处参考官网案例:安装 kubeadm | Kubernetes
由于k8s的默认镜像在google,内网环境或国内服务器不一定能访问通,所以此处将地址切换为阿里云镜像源
1、apt更新 和安装依赖
更新apt
包索引并安装使用 Kubernetes apt
仓库所需要的包:
sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
2、下载安装签名密钥
用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥:
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
sudo mkdir -p -m 755 /etc/apt/keyrings
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
说明:
在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,/etc/apt/keyrings
默认不存在。 应在 curl 命令之前创建它。
3、添加 Kubernetes apt
仓库
请注意,此处使用的为 Kubernetes 1.32 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。
# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
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
4、安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
5、查看kubeadm的版本
上述步骤在2台服务器中都操作完毕后,可以通过kubeadm version命令会返回代码,里面显示了详细的版本信息,此处显示版本为v1.32.2
root@k8s-master:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"32", GitVersion:"v1.32.2", GitCommit:"67a30c0adcf52bd3f56ff0893ce19966be12991f", GitTreeState:"clean", BuildDate:"2025-02-12T21:24:52Z", GoVersion:"go1.23.6", Compiler:"gc", Platform:"linux/amd64"}
使用 kubeadm 创建集群
master服务器中执行下方命令:
kubeadm init \
--apiserver-advertise-address=172.21.176.3 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.32.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
①kubeadm 初始化命令
②指定kube-apiserver的通讯地址,如果有使用负载均衡可以填写负载均衡的地址
③下载镜像地址修改为阿里云镜像仓库
④指定k8s的安装版本
⑤指定k8s中service服务的IP地址段
⑥指定k8s中pod服务的IP地址段
几分钟的等待后,会出现初始化完毕
①kubeadm 初始化前的检查
②创建一些证书文件
③初始化组件的配置文件(kube-apiserver,etcd,kubelet、controller-manager、scheduler)
④创建上面组件的pod
⑤kube-apiservice的健康检查
⑥创建一些权限规则和namespace
⑦提示下一步如何配置kubelct和使用k8s的root权限,后面会有具体讲解
⑧提示如何将其他节点注册到这个集群,这一步在node01节点上来操作
查看节点
通过kubectl get node命令可以看到此时集群中有多少个节点
通过上面的命令,可以发现现在已经有一个节点加入了集群,但是状态为NotReady
配置kubectl
kubectl 是管理 k8s集群的命令行工具,刚才已经在所有的节点安装了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。
依照 kubeadm init
输出的第 ⑦ 步提示,推荐用 Linux 普通用户执行 kubectl(root 会有一些问题)。
当前使用的ubuntu操作系统为root用户,就直接执行下面命令即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
这里如果使用k8s集群的root用户,就直接执行下面的命令即可
export KUBECONFIG=/etc/kubernetes/admin.conf
最后为了使用更便捷,启用 kubectl 命令的自动补全功能。
echo "source <(kubectl completion bash)" >> ~/.bashrc
这样 当前root用户就可以使用 kubectl 了。
下节我们将安装 Pod 网络并添加 k8s-node01 完成集群部署。