核心架构解析
Kubernetes作为容器编排的事实标准,其架构设计遵循声明式API和控制器模式。Master节点包含四个关键组件:
– API Server:唯一与etcd通信的组件,提供RESTful接口
– Controller Manager:运行Deployment、StatefulSet等控制器
– Scheduler:通过预选和优选算法分配节点
– etcd:分布式键值存储,保存集群状态
Node节点核心组件包括:
– kubelet:节点代理,管理Pod生命周期
– kube-proxy:实现Service的IP虚拟化和负载均衡
– 容器运行时:支持containerd、CRI-O等实现
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
工作负载管理
Deployment与ReplicaSet
Deployment提供声明式更新能力,底层通过ReplicaSet控制副本数。滚动更新策略通过maxUnavailable和maxSurge参数控制:
kubectl set image deployment/nginx nginx=nginx:1.26 --record
滚动更新过程:
1. 创建新ReplicaSet并逐步扩容
2. 旧ReplicaSet同步缩容
3. 保留历史版本支持回滚
适用场景:
– 无状态应用部署
– 需要版本回滚的场合
– 自动化滚动升级
StatefulSet设计原理
针对有状态服务的特殊设计:
– 稳定的网络标识(
– 持久化存储(PVC模板)
– 有序部署/扩展(序数索引)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
replicas: 3
template:
spec:
containers:
- name: mysql
image: mysql:8.0
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
网络模型实现
CNI插件机制
Kubernetes通过CNI(Container Network Interface)规范实现网络插件化:
– 每个Pod获得唯一IP地址
– 跨节点Pod直接通信
– 支持NetworkPolicy隔离
主流CNI插件对比:
– Calico:基于BGP的路由方案,支持网络策略
– Flannel:简单的Overlay网络
– Cilium:基于eBPF的高性能方案
Service抽象层
Service类型及适用场景:
– ClusterIP:默认类型,集群内部访问
– NodePort:通过节点端口暴露
– LoadBalancer:云厂商负载均衡器集成
– Headless:无ClusterIP,用于StatefulSet
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: LoadBalancer
存储方案设计
持久卷生命周期
关键资源对象交互关系:
1. PersistentVolume (PV):集群存储资源
2. PersistentVolumeClaim (PVC):用户存储请求
3. StorageClass:动态供应模板
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
fsType: ext4
CSI驱动架构
Container Storage Interface标准化存储插件开发:
– Node Plugin:处理节点挂载操作
– Controller Plugin:管理存储生命周期
– 支持快照、克隆等高级功能
安全最佳实践
RBAC授权模型
基于角色的访问控制关键元素:
– Role/ClusterRole:权限集合
– RoleBinding/ClusterRoleBinding:主体与角色关联
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
安全上下文配置
Pod安全策略替代方案:
– PodSecurity Admission:实施PSP替代方案
– SecurityContext字段:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
运维监控体系
可观测性方案
推荐监控组合:
– Metrics Server:核心资源指标
– Prometheus + Grafana:自定义监控
– OpenTelemetry:分布式追踪
# 查看资源使用情况
kubectl top pods --all-namespaces
自动扩缩容策略
HPA v2支持多指标扩缩容:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
高级调度策略
污点与容忍
节点排斥机制典型应用:
– 专用GPU节点
– 边缘计算节点
– 维护模式隔离
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 6000
拓扑分布约束
多可用区部署保障:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: nginx
生态工具链
声明式管理工具
- kustomize:原生配置管理
- helm:包管理解决方案
- operator-sdk:自定义控制器开发
helm install my-release bitnami/nginx \
--set replicaCount=3 \
--set service.type=LoadBalancer
GitOps实践
ArgoCD工作流程:
1. 监听Git仓库变更
2. 自动同步集群状态
3. 健康状态检测
4. 可视化差异对比