在云计算时代,Kubernetes(简称K8s)已经从一种新兴技术演变为云原生的基石。对于运维新人和开发人员来说,搭建一个属于自己的K8s集群不仅是学习云原生技术的必经之路,更是深入理解容器编排、微服务架构的绝佳实践。本文将一步步指导你在本地或服务器上搭建一个高可用的K8s集群,帮助你快速入门云原生世界。
一、 环境准备与基础配置
搭建集群前,必须确保基础环境的稳定。 至少准备两台服务器,一台作为主节点(Master),另一台作为工作节点(Node)。在CentOS 7系统上,第一步是关闭防火墙和SELinux,具体操作如下:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
这是因为Kubernetes与CNI网络插件和Kubelet的服务交互非常频繁,关闭防火墙可以避免不必要的连接中断。 为了系统的稳定性,必须关闭系统的Swap交换分区(虽然K8s 1.24之后对Swap的支持有所放宽,但 在搭建环境时关闭):
swapoff -a
接着,配置iptables的转发规则,这是容器网络通信的基础:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl system
二、 安装Container Runtime(运行时)
Kubernetes默认使用容器运行时接口(CRI)来管理容器的生命周期。对于运维新人,推荐安装轻量且强大的containerd。
安装依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
添加阿里云Docker仓库:
bashyum-config-manager add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装containerd及安装插件:
bashyum install -y containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
将配置文件中的 SystemdCgroup = false 改为 true,以便containerd能够利用系统的cgroup管理资源:
toml
[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]
SystemdCgroup = true
启动containerd服务:
bash
systemctl start containerd
systemctl enable containerd
三、 部署Master节点
Master节点负责集群的决策和管理,是集群的“大脑”。
配置阿里云的K8s yum源:
bash
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]

name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
安装组件:
bashyum install -y kubeadm-1.24.0 kubectl-1.24.0 kubelet-1.24.0
kubeadm init初始化集群:
使用
指令初始化Master节点,指定网络插件(如flannel),并指定Pod网段。
bash
kubeadm init
apiserver-advertise-address=
image-repository registry.aliyuncs.com/google_containers
kubernetes-version v1.24.0
service-cidr=10.96.0.0/12
pod-network-cidr=10.244.0.0/16
初始化成功后,会生成一段 join 命令,请务必复制保存,稍后要在Worker节点执行。
配置Kubectl:
普通用户需要配置kubectl才能访问集群,复制以下命令:
bash
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
此时,通过kubectl get nodes应该能看到Master节点状态为 Ready。 四、 添加Worker节点Worker节点是容器运行的地方。在Worker节点上,使用之前保存的 join 命令将节点加入集群。
bash
kubeadm join :6443 token discovery-token-ca-cert-hash sha256:
可以执行kubeadm token create print-join-command来重新生成token。如果在Worker节点执行后无法连接,请检查Master节点的防火墙是否开放了6443端口,或者检查Node节点的DNS解析是否正常。
五、 部署网络插件为了让Pod之间能够正常通信,必须安装CNI网络插件。对于运维新人,Flannel是最简单且兼容性最好的选择:
bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待一段时间后,再次执行kubectl get nodes,所有节点的状态应该都变为 Ready。 六、 部署Dashboard(可选)为了更直观地管理集群,可以部署Kubernetes的Web仪表盘。
bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
创建访问账号和服务账户:
bash
kubectl -n kubernetes-dashboard create serviceaccount dashboard-admin
kubectl create clusterrolebinding dashboard-admin clusterrolecluster-admin serviceaccountkubernetes-dashboard:dashboard-admin
kubectl describe secret -n kubernetes-dashboard $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk ‘{print $1}')
使用输出的 token 登录 Dashboard 进行可视化操作。
搭建K8s集群是一个从理论到实践的完整过程,对于运维新人而言,这不仅是一次技术实践,更是一次对云原生架构理解的深化。通过亲手配置Master节点的决策管理、Worker节点的资源调度以及Pod间的网络通信,你将真正掌握云时代的核心运维能力。在实践中遇到问题不要气馁,多查阅官方文档,逐步排查,祝你在云原生之路上越走越远。
感兴趣的伙伴可以在下方添加一下,也是为了大家有个属于纯爱好者的、纯净的平台来交流沟通、入圈、寻找自己的partner,少走弯路、少踩坑,毕竟鱼龙混杂、知己难觅~
(备用微信号: domsm789 )









