服务器自己搭建k8s
在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称K8s)已成为容器编排领域的行业标准,它通过自动化部署、扩展和管理容器化应用,极大地简化了运维复杂度,虽然云服务商提供了托管式K8s服务(如EKS、GKE、AKS),但许多企业和开发者仍倾向于在自有服务器上搭建K8s集群,以获得更高的控制权、成本效益和数据安全性,本文将详细介绍如何在服务器上从零开始搭建一个功能完备的K8s集群,涵盖环境准备、组件安装、网络配置及高可用实现等关键环节。

环境规划与准备
在搭建K8s集群之前,合理规划服务器环境是基础,一个最小的高可用集群建议包含3台或以上的master节点和2台及以上的worker节点,所有节点需满足以下要求:
-
硬件配置:
- CPU:每个节点至少2核(master节点建议4核及以上);
- 内存:每个节点至少4GB(master节点建议8GB及以上);
- 存储:系统盘至少50GB SSD,数据盘根据业务需求扩展;
- 网络:所有节点需在同一局域网内,确保内网互通,且每个节点有独立的静态IP地址。
-
操作系统:
推荐使用稳定版的Linux发行版,如CentOS 7+/Ubuntu 20.04 LTS,本文以CentOS 7为例进行演示。 -
网络与域名:
- 确保所有节点能通过主机名互相解析(可修改
/etc/hosts文件); - 防火墙需开放必要端口:master节点(6443、2379、2380)、worker节点(10250)、etcd(2379-2380);
- 关闭Swap分区(K8s要求禁用Swap,可通过
swapoff -a并注释/etc/fstab中Swap相关行实现)。
- 确保所有节点能通过主机名互相解析(可修改
-
基础软件安装:
所有节点需安装Docker(容器运行时)、kubelet、kubeadm(集群初始化工具)、kubectl(命令行工具),建议提前配置好Yum或Apt源。
安装基础组件
-
安装Docker:
Docker是K8s默认的容器运行时,需在每个节点安装,以CentOS为例,执行以下命令: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 docker-ce docker-ce-cli containerd.io systemctl enable docker && systemctl start docker
安装后需配置Docker使用systemd作为cgroup驱动,修改
/etc/docker/daemon.json:
{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": {"max-size": "100m"}, "storage-driver": "overlay2" }重启Docker服务并验证:
docker run hello-world。 -
安装K8s组件:
在所有节点执行以下命令安装kubelet、kubeadm、kubectl: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 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable kubelet
初始化Master节点
选择一台服务器作为master节点(假设IP为192.168.1.100),执行以下命令初始化集群:
kubeadm init --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all
--apiserver-advertise-address:指定master节点的API服务器监听地址;--pod-network-cidr:Pod子网网段,需与后续网络插件匹配(如Flannel使用10.244.0.0/16)。
初始化成功后,根据提示执行以下命令配置kubectl:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
验证master节点状态:kubectl get nodes,此时master节点状态应为NotReady(需安装网络插件后变为Ready)。
安装网络插件
Pod之间的通信需要网络插件支持,这里选择轻量级的Flannel,在master节点执行:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待几分钟,再次执行kubectl get nodes,master节点状态将变为Ready。

添加Worker节点
在worker节点上执行master节点初始化后输出的kubeadm join命令(示例格式):
kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
<token>和<hash>可通过在master节点执行kubeadm token create --print-join-command重新获取。
worker节点加入后,在master节点执行kubectl get nodes,可查看所有节点状态,当worker节点状态变为Ready时,集群搭建完成。
高可用与扩展性优化
生产环境中需实现master节点高可用,避免单点故障,常见方案包括:
- 多master节点:通过
kubeadm init初始化多个master节点,使用负载均衡器(如Nginx、HAProxy)对外暴露API服务器; - etcd集群:将etcd部署为集群模式(建议3或5节点),确保数据一致性;
- 持久化存储:为master节点和etcd配置持久化存储,防止数据丢失。
扩展性方面,可通过增加worker节点提升集群容量,或使用K8s的HPA(Horizontal Pod Autoscaler)实现应用自动扩缩容。
常见问题与维护
- 节点NotReady:检查网络插件是否正常安装、Docker服务状态、防火墙规则;
- Pod无法启动:查看Pod日志(
kubectl logs <pod-name>),检查镜像拉取、资源限制等问题; - 证书过期:K8s集群证书默认1年有效期,可通过
kubeadm certs renew all更新证书。
在自有服务器上搭建K8s集群虽然需要一定的技术积累,但能够满足企业对定制化、安全性和成本控制的需求,通过合理规划环境、逐步安装组件、配置网络插件并优化高可用架构,可构建一个稳定可靠的容器编排平台,后续可基于该集群部署微服务、CI/CD流水线等,进一步释放容器化技术的优势,随着对K8s理解的深入,还可探索Operator、Service Mesh等高级特性,为业务创新提供强大支撑。




















