一、准备环境
- 硬件要求:至少 2 台机器(1 主节点,1 工作节点),建议最小硬件配置:2核CPU、2G内存、20G硬盘。
- 操作系统:CentOS 7/8,确保所有节点的操作系统版本一致。
- 网络配置:确保节点间网络互通,关闭防火墙或开放必要端口。
二、初始化配置
2.1 设置主机名和 hosts 文件
-
为每个节点设置唯一的主机名:
sudo hostnamectl set-hostname <主机名> # 例如 master-node 或 worker-node
-
编辑 /etc/hosts 文件,添加所有节点的 IP 和主机名映射:
<主节点IP> master-node <工作节点IP> worker-node
2.2 关闭防火墙
关闭防火墙可以避免阻碍节点之间的网络通信,确保集群的正常运行。
# 关闭防火墙
systemctl stop firewalld# 禁止防火墙开机自启
systemctl disable firewalld
2.3 关闭 SELinux
关闭 SELinux 可以简化 Kubernetes 集群的配置和维护,避免潜在的权限问题。
# 临时关闭 SELinux
setenforce 0# 永久关闭 SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config# 重启系统使更改生效
reboot
2.4 禁用交换分区(swap)
Kubernetes 官方建议在所有集群节点上禁用 swap 分区,以确保容器可以充分利用主机的物理内存,并避免因为交换空间导致的性能问题。
# 临时关闭 Swap
swapoff -a# 永久关闭 Swap
sed -ri 's/.*swap.*/#&/' /etc/fstab# 验证 Swap 是否已关闭
free -h
三、安装依赖工具
在所有节点上安装以下工具:
3.1 安装 Docker(容器运行时)
# 更新包索引
sudo apt-get update# 安装 Docker
sudo apt-get install -y docker.io# 启动并启用 Docker
sudo systemctl enable docker
sudo systemctl start docker# 验证 Docker 是否安装成功
docker --version
3.2 安装 kubeadm、kubelet 和 kubectl
# 添加 Kubernetes 源
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 更新并安装工具
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 防止自动更新# 验证安装
kubeadm version
kubectl version --client
四、初始化Master节点
在主节点上执行以下命令初始化集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- –pod-network-cidr:指定 Pod 网络的 CIDR,Flannel 插件需要此参数。
- 初始化完成后,会输出 kubeadm join 命令,我们需要保存好这个命令,用于后续将工作节点加入集群。
4.1 配置 kubectl
在主节点上配置 kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.2 检查主节点状态
kubectl get nodes
- 此时主节点状态应为 NotReady,因为尚未安装网络插件。
4.3 部署网络插件
选择并安装网络插件(如 Flannel):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待几分钟后,检查主节点状态:
kubectl get nodes
- 此时主节点状态应变为 Ready
五、加入工作节点
在每个工作节点上运行初始化时输出的 kubeadm join 命令:
sudo kubeadm join <主节点IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
- <主节点IP>:主节点的 IP 地址。
- 和 :初始化主节点时输出的值。
5.1 检查节点状态
在主节点上运行以下命令,查看节点是否成功加入:
kubectl get nodes
- 所有节点状态应为 Ready。
六、验证集群
6.1 部署测试应用
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
6.2 查看服务信息
kubectl get svc nginx
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.96.123.123 <none> 80:30001/TCP 10s
6.3 访问应用
通过工作节点的 IP 和 NodePort 访问应用:
http://<工作节点IP>:30001
七、管理和维护
7.1 升级集群
# 升级 kubeadm
sudo apt-get update
sudo apt-get install -y kubeadm# 升级主节点
sudo kubeadm upgrade apply v1.28.0 # 替换为目标版本# 升级 kubelet 和 kubectl
sudo apt-get install -y kubelet kubectl
sudo systemctl restart kubelet
7.2 备份和恢复
-
备份 etcd 数据:
kubectl exec -n kube-system etcd-master-node -- etcdctl snapshot save /tmp/etcd-backup.db
-
恢复 etcd 数据:
kubectl exec -n kube-system etcd-master-node -- etcdctl snapshot restore /tmp/etcd-backup.db
7.3 监控和日志
- 使用 Prometheus 和 Grafana 监控集群。
- 使用 kubectl logs 查看 Pod 日志。