从零开始:k8s集群搭建与部署全流程指南(超详细)
2025.10.13 17:26浏览量:1545简介:本文详细解析了k8s集群搭建与部署的全流程,涵盖环境准备、组件安装、集群配置、Pod部署及高可用性优化等关键步骤,适合不同层次开发者参考。
一、环境准备与规划
1.1 硬件与软件要求
k8s(Kubernetes)作为容器编排领域的标杆,对硬件和软件环境有明确要求。硬件方面,建议每台节点(Master/Worker)配置至少2核CPU、4GB内存和50GB磁盘空间,实际生产环境需根据负载动态调整。软件层面,需准备Linux系统(推荐CentOS 7/8或Ubuntu 20.04)、Docker容器引擎(v20.10+)、kubeadm工具(v1.26+)及网络插件(如Calico或Flannel)。
1.2 网络拓扑设计
k8s集群的网络设计直接影响性能与可用性。推荐采用三层架构:Master节点负责控制平面(API Server、Scheduler、Controller Manager),Worker节点承载工作负载(kubelet、容器运行时),Etcd集群存储元数据。网络规划需考虑以下要点:
- 子网划分:为Pod分配独立CIDR(如10.244.0.0/16),避免与主机网络冲突。
- 负载均衡:Master节点前部署HAProxy或Nginx,实现API Server的高可用。
- 跨主机通信:使用Overlay网络(如VXLAN)或Underlay网络(如BGP),确保Pod间互通。
二、组件安装与配置
2.1 Docker与容器运行时安装
以Ubuntu为例,执行以下步骤安装Docker:
# 添加官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加APT源echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装Dockersudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 配置cgroup驱动(与k8s兼容)sudo sed -i 's/^ExecStart=.*/ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock --exec-opt native.cgroupdriver=systemd/' /lib/systemd/system/docker.servicesudo systemctl daemon-reload && sudo systemctl restart docker
2.2 kubeadm初始化集群
2.2.1 Master节点初始化
# 关闭交换分区sudo swapoff -a# 配置内核参数echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.confsudo sysctl -p# 安装kubeadm、kubelet、kubectlsudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl# 初始化集群(指定Pod网络CIDR)sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.26.0# 配置kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
2.2.2 Worker节点加入
在Master节点执行kubeadm token create --print-join-command获取加入命令,例如:
kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2.3 网络插件部署
以Calico为例,在Master节点执行:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
验证网络状态:
kubectl get pods -n kube-system | grep calico
三、集群验证与基础操作
3.1 节点状态检查
kubectl get nodes# 预期输出:# NAME STATUS ROLES AGE VERSION# master01 Ready control-plane 10m v1.26.0# worker01 Ready <none> 8m v1.26.0
3.2 部署第一个Pod
创建nginx-pod.yaml:
apiVersion: v1kind: Podmetadata:name: nginx-podspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
应用配置并验证:
kubectl apply -f nginx-pod.yamlkubectl get podskubectl describe pod nginx-pod
四、高可用性与扩展配置
4.1 Master节点高可用
通过堆叠Etcd模式部署多Master:
# 在第二台Master执行(需预先安装kubeadm)sudo kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxx \--control-plane --certificate-key xxxxxxxxxxxxxxxx
4.2 资源配额与限制
创建resource-quota.yaml限制命名空间资源:
apiVersion: v1kind: ResourceQuotametadata:name: compute-quotaspec:hard:requests.cpu: "1"requests.memory: 1Gilimits.cpu: "2"limits.memory: 2Gi
五、常见问题与解决方案
5.1 Pod卡在Pending状态
原因:资源不足、网络插件未就绪或调度失败。
排查步骤:
- 执行
kubectl describe pod <pod-name>查看事件。 - 检查节点资源:
kubectl top nodes。 - 验证网络插件状态:
kubectl get pods -n kube-system。
5.2 证书过期处理
证书默认有效期为1年,可通过以下命令续期:
# 在Master节点执行sudo kubeadm certs renew all# 重启kubeletsudo systemctl restart kubelet
六、进阶部署实践
6.1 使用Helm管理应用
安装Helm并部署WordPress:
# 添加Bitnami仓库helm repo add bitnami https://charts.bitnami.com/bitnami# 部署WordPresshelm install my-wordpress bitnami/wordpress --set mariadb.auth.rootPassword=strongpassword
6.2 监控体系搭建
通过Prometheus Operator实现监控:
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
七、总结与最佳实践
- 版本兼容性:确保kubeadm、kubelet、kubectl版本一致。
- 备份策略:定期备份Etcd数据(
etcdctl snapshot save)。 - 升级路径:遵循小版本迭代(如1.25→1.26),避免跨大版本升级。
- 日志管理:集成EFK(Elasticsearch+Fluentd+Kibana)或Loki栈。
通过以上步骤,读者可完成从单机到高可用集群的完整部署,并掌握基础运维能力。实际生产环境中,还需结合CI/CD流水线、服务网格(Istio)等工具构建云原生生态。

发表评论
登录后可评论,请前往 登录 或 注册