使用kubeadm快速搭建Kubernetes集群的完整指南
·
1. 为什么选择kubeadm搭建Kubernetes集群
在容器编排领域,Kubernetes已经成为事实标准。而kubeadm作为官方推荐的集群部署工具,相比其他方案有几个显著优势:
- 官方维护 :由Kubernetes社区直接开发和维护,确保与最新版本兼容
- 最小化设计 :只提供必要的集群初始化功能,不强制特定配置
- 可扩展性 :初始化后可以灵活添加各种插件和组件
- 生产就绪 :v1.30.3版本经过充分测试,适合生产环境使用
提示:虽然kubeadm简化了安装过程,但理解其底层原理对后续运维至关重要。这也是为什么我们要详细解析每个步骤的原因。
2. 环境准备与系统配置
2.1 硬件需求建议
对于测试环境,最低配置要求:
- 2核CPU
- 2GB内存
- 20GB磁盘空间
生产环境推荐配置:
- 4核CPU及以上
- 8GB内存及以上
- 100GB SSD存储
2.2 操作系统要求
官方推荐使用以下Linux发行版:
- Ubuntu 20.04/22.04
- CentOS 7/8
- RHEL 7/8
- Debian 10/11
关键系统配置步骤:
- 禁用交换分区:
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
- 设置主机名解析:
sudo hostnamectl set-hostname k8s-master
echo "192.168.1.100 k8s-master" | sudo tee -a /etc/hosts
echo "192.168.1.101 k8s-node1" | sudo tee -a /etc/hosts
- 加载内核模块:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
sudo modprobe br_netfilter
3. 容器运行时安装与配置
3.1 容器运行时选型
Kubernetes v1.30.3支持以下容器运行时:
- containerd(推荐)
- CRI-O
- Docker Engine(已弃用)
安装containerd的步骤:
- 安装依赖:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
- 添加Docker仓库:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装containerd:
sudo apt-get update
sudo apt-get install -y containerd.io
- 配置containerd:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
4. 安装kubeadm、kubelet和kubectl
4.1 添加Kubernetes仓库
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
4.2 安装指定版本组件
sudo apt-get update
sudo apt-get install -y kubelet=1.30.3-1.1 kubeadm=1.30.3-1.1 kubectl=1.30.3-1.1
sudo apt-mark hold kubelet kubeadm kubectl
注意:锁定版本可以防止意外升级导致集群不兼容
5. 初始化控制平面节点
5.1 初始化命令解析
完整的初始化命令示例:
sudo kubeadm init \
--kubernetes-version=v1.30.3 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.1.100 \
--control-plane-endpoint=k8s-master:6443 \
--upload-certs
关键参数说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| --kubernetes-version | 指定K8s版本 | v1.30.3 |
| --pod-network-cidr | Pod网络CIDR | 10.244.0.0/16 (Flannel) |
| --apiserver-advertise-address | API服务器地址 | 主节点IP |
| --control-plane-endpoint | 控制平面端点 | 负载均衡器地址或主节点主机名 |
5.2 初始化后配置
成功初始化后会输出类似以下信息:
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
执行这些命令配置kubectl访问权限。
6. 安装Pod网络插件
6.1 网络插件选型
常见选择及特点对比:
| 插件 | 特点 | 适用场景 |
|---|---|---|
| Flannel | 简单稳定,性能一般 | 测试环境 |
| Calico | 功能丰富,支持网络策略 | 生产环境 |
| Cilium | 基于eBPF,高性能 | 高性能需求 |
安装Flannel的步骤:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
7. 加入工作节点
在主节点上获取加入命令:
kubeadm token create --print-join-command
在工作节点上执行输出的命令,格式类似:
sudo kubeadm join k8s-master:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
验证节点加入状态:
kubectl get nodes -w
8. 集群验证与基本操作
8.1 集群状态检查
kubectl get pods -A
kubectl get componentstatuses
kubectl cluster-info
8.2 部署测试应用
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
访问测试:
curl http://<node-ip>:<node-port>
9. 生产环境优化建议
9.1 高可用配置
对于生产环境,建议配置:
- 至少3个控制平面节点
- 使用外部etcd集群
- 配置负载均衡器
添加控制平面节点命令:
kubeadm join k8s-lb:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \
--control-plane --certificate-key abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
9.2 安全加固
- 启用RBAC
- 配置网络策略
- 定期轮换证书
- 启用审计日志
证书轮换命令:
kubeadm certs renew all
10. 常见问题排查
10.1 初始化失败
常见原因及解决方案:
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| kubelet无法启动 | CRI未正确配置 | 检查containerd状态 |
| API服务器不可用 | 端口冲突 | 检查6443端口占用 |
| etcd健康检查失败 | 证书问题 | 检查/etc/kubernetes/pki |
10.2 节点NotReady状态
排查步骤:
- 检查kubelet日志:
journalctl -u kubelet -f
- 验证网络插件:
kubectl get pods -n kube-system
- 检查节点资源:
kubectl describe node <node-name>
我在实际部署中发现,大多数初始化问题都与容器运行时配置或网络设置有关。特别是在Ubuntu系统上,确保containerd正确配置SystemdCgroup参数至关重要。另一个常见陷阱是忘记在所有节点上禁用交换分区,这会导致kubelet无法正常启动。
更多推荐
所有评论(0)