从零开始:Kubernetes 集群部署与实战指南
2025.09.26 16:39浏览量:0简介:本文详细讲解 Kubernetes 集群部署的全流程,涵盖环境准备、安装配置、核心组件验证及生产优化建议,适合开发者和运维人员快速掌握集群搭建与维护技能。
一、环境准备与规划
1.1 节点资源分配
生产环境建议采用 3个控制平面节点 + N个工作节点 的架构,控制平面节点需配置至少 2核CPU、4GB内存,工作节点根据业务负载动态扩展(建议起步 4核CPU、8GB内存)。节点间需确保 网络互通,推荐使用万兆内网以降低Pod间通信延迟。
1.2 操作系统选择
- Linux发行版:Ubuntu 22.04 LTS 或 CentOS 8 Stream(需关闭SELinux)
- 内核参数优化:
# 调整文件描述符限制
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
# 禁用交换分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.3 网络模型选择
- Overlay网络:Calico(推荐)或 Weave Net
- Underlay网络:需支持VXLAN或BGP协议,适合物理机环境
- CNI插件配置:以Calico为例,需在
install-cni.sh
中指定IP_AUTODETECTION_METHOD=interface=eth.*
二、控制平面组件部署
2.1 使用kubeadm初始化集群
# 生成初始化配置文件
kubeadm config print init-defaults > kubeadm-init.yaml
# 修改关键参数
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: <控制平面IP>
bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.0
controlPlaneEndpoint: "<负载均衡VIP>:6443" # 高可用场景必备
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
# 执行初始化
kubeadm init --config kubeadm-init.yaml
2.2 核心组件验证
- etcd健康检查:
kubectl exec -n kube-system etcd-<节点名> -- etcdctl endpoint health
- API Server负载:通过
kubectl get --raw /readyz
验证,返回ok
表示正常 - 控制器管理器状态:
kubectl get pods -n kube-system | grep kube-controller-manager
三、工作节点加入集群
3.1 获取加入令牌
# 生成新令牌(有效期24小时)
kubeadm token create --ttl 24h --print-join-command
# 输出示例:
# kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
# --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxx
3.2 节点标签管理
# 为节点添加角色标签
kubectl label nodes <节点名> node-role.kubernetes.io/worker=worker
# 污点管理(禁止调度)
kubectl taint nodes <节点名> dedicated=special:NoSchedule
四、核心组件配置优化
4.1 CoreDNS性能调优
修改/etc/kubernetes/manifests/coredns.yaml
,增加以下参数:
spec:
template:
spec:
containers:
- name: coredns
args: ["-conf", "/etc/coredns/Corefile", "-dns.port=53", "-dns.tcp.listen=:53"]
resources:
limits:
cpu: 500m
memory: 256Mi
4.2 调度器策略定制
创建/etc/kubernetes/scheduler-policy.yaml
:
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
pluginConfig:
- name: PrioritySort
args:
add:
- name: "dedicated-node"
weight: 10
五、生产环境加固建议
5.1 安全防护措施
- RBAC权限控制:
# 禁止匿名访问
kubectl edit apiserver-kubelet-config.yaml
# 修改authentication.anonymous.enabled为false
- Pod安全策略:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
hostPID: false
hostIPC: false
runAsUser:
rule: MustRunAsNonRoot
seLinux:
rule: RunAsAny
5.2 监控告警体系
- Prometheus配置:
- job_name: 'kubernetes-nodes'
static_configs:
- targets: ['<节点IP>:9100'] # Node Exporter
metrics_path: /metrics
- Alertmanager规则示例:
groups:
- name: node.rules
rules:
- alert: NodeMemoryPressure
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
六、故障排查指南
6.1 常见问题处理
- 证书过期:
# 备份旧证书
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak
# 重新生成证书
kubeadm certs renew all
# 重启静态Pod
docker restart $(docker ps -aqf "name=k8s_kube-")
- 网络不通:
# 检查CNI插件状态
journalctl -u kubelet -n 100 | grep cni
# 验证iptables规则
iptables -t nat -L | grep KUBE
6.2 日志分析技巧
# 获取API Server日志
kubectl logs -n kube-system kube-apiserver-<节点名> --tail=100
# 实时监控节点事件
kubectl get events --sort-by='.metadata.creationTimestamp' -w
七、升级与维护
7.1 版本升级流程
# 1. 升级kubeadm
apt-get install kubeadm=1.28.0-00
# 2. 检查升级可行性
kubeadm upgrade plan
# 3. 执行控制平面升级
kubeadm upgrade apply v1.28.0
# 4. 升级kubelet和kubectl
apt-get install kubelet=1.28.0-00 kubectl=1.28.0-00
systemctl restart kubelet
7.2 备份恢复方案
- etcd数据备份:
ETCDCTL_API=3 etcdctl --endpoints=<控制平面IP>:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /backup/etcd-snapshot.db
- 资源定义备份:
kubectl get all --all-namespaces -o yaml > full-cluster-backup.yaml
八、进阶实践建议
- 多集群管理:考虑使用Cluster API或Karmada实现统一管控
- GPU调度:配置Device Plugin实现GPU资源隔离
- 服务网格:集成Istio或Linkerd实现服务治理
- 边缘计算:通过KubeEdge扩展至边缘节点
通过本文的详细指导,开发者可系统掌握Kubernetes部署的全生命周期管理,从基础环境搭建到生产级优化,最终构建出高可用、高性能的容器编排平台。建议在实际操作中结合具体业务场景调整参数,并通过混沌工程验证集群容错能力。
发表评论
登录后可评论,请前往 登录 或 注册