1. Kubernetes集群搭建概述
Kubernetes作为当前最流行的容器编排系统,已经成为云原生应用部署的事实标准。对于刚接触Kubernetes的开发者来说,搭建一个可用的生产级集群往往面临诸多挑战。本指南将使用kubeadm工具,带你从零开始构建一个符合最佳实践的Kubernetes集群。
kubeadm是Kubernetes官方推荐的集群引导工具,它能够:
- 快速初始化符合一致性测试标准的控制平面
- 简化节点加入流程
- 支持集群生命周期管理(如升级、证书续期等)
- 作为其他自动化工具的基础组件
2. 环境准备
2.1 硬件要求
至少需要2台Linux主机(物理机或虚拟机):
- 控制平面节点:2核CPU/2GB内存/30GB磁盘
- 工作节点:1核CPU/1GB内存/20GB磁盘
生产环境建议控制平面节点配置4核CPU/8GB内存以上
2.2 系统要求
所有节点需要:
- 禁用swap:
swapoff -a并注释/etc/fstab中的swap行 - 确保唯一主机名:
hostnamectl set-hostname <name> - 时间同步:安装并启用chrony或ntpd
- 加载内核模块:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter
2.3 网络配置
确保:
- 节点间网络互通
- 开放6443(API Server)、2379-2380(etcd)等端口
- 为Pod和Service分配独立CIDR(不与主机网络重叠)
3. 安装基础组件
3.1 容器运行时安装
以containerd为例:
# 安装依赖 apt-get update && apt-get install -y apt-transport-https ca-certificates curl # 添加Docker仓库 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 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 # 安装containerd apt-get update && apt-get install -y containerd.io # 配置containerd mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml systemctl restart containerd3.2 安装kubeadm/kubelet/kubectl
# 添加Kubernetes仓库 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF # 安装指定版本(示例为1.26.0) apt-get update && apt-get install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00 apt-mark hold kubelet kubeadm kubectl4. 初始化控制平面
4.1 初始化命令
kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --pod-network-cidr=10.244.0.0/16 \ --upload-certs \ --control-plane-endpoint=cluster.example.com:6443关键参数说明:
--pod-network-cidr:必须与后续安装的CNI插件匹配--control-plane-endpoint:高可用集群的负载均衡地址--upload-certs:自动分发证书到其他控制平面节点
4.2 初始化后配置
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config4.3 安装网络插件
以Calico为例:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml验证网络插件:
watch kubectl get pods -n kube-system # 等待所有Pod变为Running状态5. 添加工作节点
在控制平面初始化输出的join命令基础上添加参数:
kubeadm join cluster.example.com:6443 \ --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --node-labels="node-role.kubernetes.io/worker=worker"验证节点加入:
kubectl get nodes # 应看到新节点状态为Ready6. 集群验证
6.1 基础检查
kubectl get componentstatus kubectl cluster-info kubectl get all -A6.2 部署测试应用
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginx访问测试:
curl http://<node-ip>:<node-port>7. 生产级配置建议
7.1 证书管理
自动续期配置:
# /etc/kubernetes/kubelet.conf rotateCertificates: true serverTLSBootstrap: true手动续期检查:
kubeadm certs check-expiration kubeadm certs renew all7.2 高可用方案
推荐架构:
- 3个控制平面节点
- 外部etcd集群(非堆叠式)
- 负载均衡器(如HAProxy+Keepalived)
7.3 监控与日志
基础监控栈:
# 安装Metrics Server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml # 推荐Prometheus Operator helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack8. 常见问题排查
8.1 节点NotReady
检查步骤:
- 查看kubelet状态:
systemctl status kubelet - 检查容器运行时:
crictl ps -a - 查看节点详情:
kubectl describe node <node-name>
8.2 网络问题
诊断方法:
# 检查CNI插件日志 kubectl logs -n kube-system -l k8s-app=calico-node # 测试Pod间通信 kubectl run test-nginx --image=nginx kubectl exec test-nginx -- curl <other-pod-ip>8.3 证书过期
应急处理:
# 备份原有证书 cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak # 更新证书 kubeadm certs renew all # 重启控制平面组件 docker ps | grep kube-apiserver | awk '{print $1}' | xargs docker restart9. 维护与升级
9.1 版本升级流程
- 升级kubeadm:
apt-get update && apt-get install -y kubeadm=1.27.0-00 - 检查升级计划:
kubeadm upgrade plan - 升级控制平面:
kubeadm upgrade apply v1.27.0 - 升级节点:
kubeadm upgrade node apt-get install -y kubelet=1.27.0-00 kubectl=1.27.0-00 systemctl restart kubelet
9.2 日常维护命令
# 查看集群事件 kubectl get events -A --sort-by=.metadata.creationTimestamp # 检查资源使用 kubectl top nodes kubectl top pods -A # 清理终止状态的Pod kubectl delete pods -A --field-selector=status.phase==Failed10. 安全加固建议
启用Pod安全准入:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/security/podsecurity-psa.yaml限制kubelet权限:
# /var/lib/kubelet/config.yaml authorization: mode: Webhook authentication: x509: clientCAFile: /etc/kubernetes/pki/ca.crt网络策略示例:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress - Egress
通过以上步骤,你应该已经成功搭建了一个生产可用的Kubernetes集群。实际环境中还需要根据具体需求调整存储配置、网络策略、资源配额等参数。