Kubernetes作为容器编排领域的事实标准,其架构设计体现了分布式系统工程的精髓。整个系统采用经典的"控制平面-工作节点"二分法,就像人类的中枢神经系统与运动系统的关系。控制平面(Control Plane)扮演着集群"大脑"的角色,而工作节点(Node)则相当于执行具体任务的"手脚"。
在实际生产环境中,这种架构设计带来了几个关键优势:
API Server是Kubernetes所有组件通信的枢纽,采用声明式API设计。它通过以下机制保证集群状态的一致性:
典型配置示例:
yaml复制apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
etcd作为分布式键值存储,保存了整个集群的状态数据。生产环境部署建议:
性能优化参数:
bash复制--auto-compaction-retention=1h # 自动压缩历史数据
--quota-backend-bytes=8589934592 # 8GB存储配额
--max-request-bytes=1572864 # 单请求最大1.5MB
控制器通过控制循环(Reconcile Loop)机制工作,主要流程:
常见内置控制器:
调度器通过多阶段流水线工作:
自定义调度策略示例:
go复制type PriorityConfig struct {
Name string
Weight int64
Map PriorityMapFunction
Reduce PriorityReduceFunction
}
kubelet核心职责包括:
关键配置参数:
bash复制--max-pods=110 # 单节点最大Pod数
--kube-reserved=cpu=500m,memory=1Gi # 为系统进程预留资源
--eviction-hard=memory.available<100Mi # 资源驱逐阈值
实现服务抽象的三种模式对比:
| 模式 | 原理 | 性能 | 适用场景 |
|---|---|---|---|
| userspace | 用户态代理 | 差 | 兼容性测试 |
| iptables | 内核态规则链 | 好 | 中小规模集群 |
| IPVS | 内核态哈希表 | 最优 | 大规模服务 |
IPVS配置示例:
bash复制ipvsadm -Ln # 查看当前IPVS规则
主流容器运行时比较:
性能优化建议:
bash复制# 限制容器日志大小
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
时序图关键点:
code复制用户 -> API Server -> etcd <- 调度器 -> API Server -> etcd
kubelet <- API Server -> 容器运行时
Endpoint控制器维护的典型数据结构:
go复制type Endpoints struct {
Subsets []EndpointSubset
}
type EndpointSubset struct {
Addresses []EndpointAddress
Ports []EndpointPort
}
DNS解析示例:
code复制my-svc.my-namespace.svc.cluster.local
控制平面多节点部署建议:
拓扑示例:
code复制可用区A: etcd1, api1, controller1
可用区B: etcd2, api2, controller2
可用区C: etcd3, api3
控制平面核心指标:
工作节点关键指标:
API Server连接问题诊断:
bash复制kubectl get --raw='/readyz?verbose'
curl -k https://localhost:6443/healthz
journalctl -u kube-apiserver -n 100
etcd性能问题排查:
bash复制etcdctl endpoint status --write-out=table
etcdctl check perf
滚动升级关键步骤:
版本差异检查:
bash复制kubectl convert --validate -f pod.yaml --output-version v1.21
RBAC最小权限示例:
yaml复制apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
网络策略配置:
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
spec:
podSelector:
matchLabels:
role: db
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
CRD开发示例:
go复制type CronTabSpec struct {
CronSpec string `json:"cronSpec"`
Image string `json:"image"`
Replicas int32 `json:"replicas"`
}
调度器扩展点:
在大型电商系统实践中,我们通过自定义调度器实现了基于机房亲和性的智能调度,将跨机房流量降低了70%。具体实现中,我们扩展了Filter插件排除不符合标签要求的节点,并在Score插件中根据网络拓扑计算得分。