一、环境准备
1. 操作系统版本确认
- 本文基于 CentOS Linux 7 (Core) 进行安装
cat /etc/os-release
2. 关闭防火墙和交换分区(swap)
# 关闭防火墙(生产环境建议配置安全组代替)
systemctl stop firewalld && systemctl disable firewalld
# 关闭 SELinux(临时关闭)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭交换分区(swap),k8s 要求关闭交换分区
swapoff -a
sed -i '/swap/d' /etc/fstab
3. 配置系统内核参数(k8s 网络所需)
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
二、安装 Container Runtime(containerd)
Kubernetes 1.20+ 官方推荐 containerd,性能和稳定性更好。
1. 安装 containerd
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y containerd.io
2. 配置 containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
你可以编辑 /etc/containerd/config.toml
调整配置(通常默认即可)。
3. 启动并开启 containerd
systemctl enable --now containerd
systemctl status containerd
三、安装 Kubernetes 组件(kubeadm、kubelet、kubectl)
1. 添加 Kubernetes yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
2. 安装 Kubernetes 三大组件
yum install -y kubelet kubeadm kubectl
3. 启动 kubelet 并设置开机启动
systemctl enable --now kubelet
systemctl status kubelet
四、初始化 Kubernetes 集群
注意:初始化时 kubeadm 会自动拉取 Kubernetes 所需镜像,如果网络不佳,可能会卡住或失败。推荐提前手动拉取镜像,或使用国内镜像加速。
1. 手动拉取镜像(官方镜像地址较慢)
kubeadm config images pull --cri-socket unix:///run/containerd/containerd.sock
如果无法拉取,可参考阿里云、网易等国内镜像仓库地址,使用 ctr
手动拉取。
2. 初始化集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///run/containerd/containerd.sock
--pod-network-cidr=10.244.0.0/16
是为了后续使用 Flannel 网络插件,如果你用其他插件请对应调整。--cri-socket
指定 containerd 的 socket。
3. 配置 kubectl 使用权限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
五、部署 Pod 网络插件(以 Flannel 为例)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待网络插件部署完成,所有节点状态变为 Ready。
六、查看集群状态
kubectl get nodes
kubectl get pods -A
七、常用 Kubernetes 命令整理
1. 节点管理
kubectl get nodes # 查看节点状态
kubectl describe node <node-name> # 查看节点详细信息
kubectl cordon <node-name> # 标记节点不可调度
kubectl uncordon <node-name> # 标记节点可调度
kubectl drain <node-name> # 驱逐节点上的 Pod,准备维护
2. Pod 和服务管理
kubectl get pods -A # 查看所有命名空间的 Pod
kubectl get pods # 查看当前命名空间 Pod
kubectl describe pod <pod-name> # 查看 Pod 详细信息
kubectl logs <pod-name> # 查看 Pod 日志
kubectl exec -it <pod-name> -- bash # 进入 Pod 容器终端
3. 部署与管理应用
kubectl apply -f <filename.yaml> # 创建或更新资源
kubectl delete -f <filename.yaml> # 删除资源
kubectl rollout status deployment/<deployment-name> # 查看滚动更新状态
kubectl scale deployment/<name> --replicas=3 # 扩缩容
4. 集群信息查看
kubectl cluster-info # 查看集群信息
kubectl get namespaces # 查看命名空间列表
kubectl get svc # 查看服务
八、排查及常见问题
1. kubeadm 初始化卡镜像拉取
- 检查网络是否能访问 Google Container Registry
- 使用国内镜像加速,或者手动用
ctr
拉取镜像 - 可以尝试跳过镜像拉取阶段,先把镜像准备好
2. kubectl 连接失败
- 确认
$HOME/.kube/config
是否正确配置 - 确认 kubelet 和控制平面容器正常运行
总结
通过以上步骤,你可以在 CentOS 7 系统上搭建一个基础的 Kubernetes 集群。
后续根据需求,可添加更多节点、安装 Dashboard、配置持久化存储、Ingress 控制器等。
如果你需要,我也可以帮你写一份脚本自动化安装,或者帮你分析具体卡住的问题,随时告诉我!