Kubernetes中常见的集群部署方式?
bash
场景/运维复杂度:
1.开发/测试
Minikube
2.生产自建
kubeadm
二进制包
3.自动化运维
kubespray
4.云托管
ACK(Alibaba),EKS(AWS),TKE(Tencent)
5.企业发行版
Rancher
Openshift
K3s
简述Kubernetes如何实现集群管理?
bash
1.控制平面+工作节点构成的双层架构:
控制平面(统一管理集群状态)
apiserver
etcd
scheduler
controller-manager
工作节点(负责实际容器的运行)
kubelet
kube-proxy
2.声明式API
用户编写Yaml文件(也就是声明期望状态) -> 控制器通过Controller-manager的控制循环,使实际状态向期望状态持续收敛。
典型:
ReplicaSet Controller - 保证副本数
Node Controller - 检测节点健康
Endpoints Controller - 维护Service后端列表
Deployment Controller - 管理版本发布及滚动更新
DaemontSet Controller - 全节点运行一个固定Pod
StatefulSet Controller - 管理有状态的应用,保证Pod有序启停,稳定网络标识及存储绑定
Namespace Controller - 管理Namespace生命周期,当指定ns被删除,自动清理该ns下的所有资源
...
我更喜欢这样子理解:
k8s集群管理就像一个"酒店管理系统"
游客说出入住需求(声明式Yaml)
|
前台(apiserver)接待
|
数据库(etcd)记录
|
大堂经理(controller-manager)检查房屋是否干净
|
前台领班(scheduler)分配任务(Pod)给具体楼层(Node工作节点)
|
保洁人员(kubelet)去具体工作(pull/start/...)
简述Kubernetes的优势、适应场景?
bash
a.三大主要优势:
1.声明式自动化 - 减少人为干预
2.弹性伸缩 - HPA(Pod水平伸缩--Pod副本数) VPA(Pod垂直伸缩--调整Pod资源请求) CA(集群节点伸缩--自动扩容节点池)
3.自愈能力 - 故障自动恢复
b.六大典型场景:
1.微服务架构
大规模服务治理,版本发布,灰度,回滚频繁情况
2.CI/CD流水线
结合Jenkins/GitLab CI 实现自动构建与部署
3.高弹性业务-突发流量
电商秒杀,直播弹幕
4.大数据/AI训练
训练任务(Job/Cron Job),分布式计算,GPU资源管理
5.混合云统一管理
跨集群联邦管理,资源调度与迁移,避单云厂商锁定
6.传统业务容器化上云
有状态应用,周期任务
简述Kubernetes创建一个Pod的主要流程?
bash
主要流程:
1.用户自主声明(Deployment/Job 等)
2.apiserver校验 -> 写入 etcd
3.controller-manager 内部多个控制器接力协作:Deployment Controller -> ReplicaSet Controller -> Pod(Pending状态)
4.scheduler 调度Pod:通过 List-Watch机制 感知 Pending Pod -> 选最优节点 -> etcd写入绑定关系
5.kubelet 执行:拉镜像、启动容器、上报 Running
说说Kubernetes的Service-Discovery服务发现?
bash
1.两大实现方式:环境变量(传统,有感知滞后缺陷)与 DNS(推荐,实时动态解析)。现代集群统一使用 CoreDNS 作为DNS服务。
2.DNS记录格式:<service>.<namespace>.svc.cluster.local
Headless Service 返回 Pod IP 列表,普通 Service 返回 ClusterIP。
集群DNS默认配置 /etc/resolv.conf 10.96.0.10 指向 CoreDNS
3.流量转发靠 kube-proxy: 核心是将 ClusterIP 流量 NAT 转发到后端 Pod。
4.底层数据源:Service + Endpoints/EndpointSlice 通过 List-Watch 实时同步,保证发现结果始终正确。
Endpoints - 全量更新
EndpointSlice - 分片+增量更新(仅更新受影响的分片)
# 兼容性:EndpointSlice 功能启用时,Kubernetes 自动维护 Endpoints 与 EndpointSlice 两套资源,向后兼容,用户无需手动迁移
设计意图:将服务发现与具体Pod IP解耦------应用通过稳定的服务名调用,后端 Pod 重建或漂移时前端完全无感知。