跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes控制器
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kubernetes控制器 = == 介绍 == '''Kubernetes控制器'''(Controller)是Kubernetes控制平面的核心组件之一,负责维护集群的期望状态(Desired State)。它们通过监控集群中资源对象的当前状态,并在检测到偏差时采取纠正措施,确保系统始终符合用户声明的配置。 控制器遵循Kubernetes的声明式API设计理念——用户只需定义“期望状态”,控制器则负责实现和维护该状态。典型的控制器包括Deployment、StatefulSet、DaemonSet等,每种控制器管理特定类型的工作负载。 == 控制器的工作原理 == 控制器通过以下机制实现状态协调: 1. '''监视机制''':通过API Server监听(Watch)相关资源的变化 2. '''对比机制''':比较资源的当前状态(Current State)与期望状态(Desired State) 3. '''调和循环'''(Reconciliation Loop):当发现状态不一致时,执行预定义操作使其一致 <mermaid> graph LR A[用户定义期望状态] --> B[API Server] B --> C[控制器] C --> D[检查当前状态] D -->|不一致| E[执行调和操作] D -->|一致| F[等待下次检查] E --> D </mermaid> == 主要控制器类型 == === Deployment控制器 === 管理无状态应用的部署和更新,支持滚动更新和回滚。 示例YAML: <syntaxhighlight lang="yaml"> apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 </syntaxhighlight> === StatefulSet控制器 === 管理有状态应用,提供稳定的网络标识和持久化存储。 === DaemonSet控制器 === 确保所有(或特定)节点运行一个Pod副本,常用于日志收集、监控等场景。 === Job/CronJob控制器 === 管理一次性任务和定时任务。 == 控制器模式详解 == === 调和循环 === 控制器的核心逻辑,可以用伪代码表示为: <syntaxhighlight lang="python"> while True: current_state = get_current_state() desired_state = get_desired_state() if current_state != desired_state: reconcile() sleep(poll_interval) </syntaxhighlight> === 级联删除 === Kubernetes提供两种删除策略: * '''级联删除'''(默认):删除控制器时自动删除其管理的Pod * '''孤儿删除''':仅删除控制器,保留Pod == 自定义控制器开发 == 高级用户可以通过client-go库开发自定义控制器,基本结构包括: 1. Informer:监听资源变化 2. Workqueue:处理变更事件 3. Reconcile:实现业务逻辑 示例代码框架: <syntaxhighlight lang="go"> func (c *Controller) Run(stopCh <-chan struct{}) { defer utilruntime.HandleCrash() defer c.workqueue.ShutDown() if !cache.WaitForCacheSync(stopCh, c.informerSynced) { return } go wait.Until(c.runWorker, time.Second, stopCh) <-stopCh } </syntaxhighlight> == 实际应用案例 == === 案例1:应用滚动更新 === 通过Deployment实现零停机更新: <syntaxhighlight lang="bash"> kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 </syntaxhighlight> === 案例2:自动扩展 === 结合HorizontalPodAutoscaler实现自动伸缩: <syntaxhighlight lang="yaml"> apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 </syntaxhighlight> == 常见问题与解决方案 == {| class="wikitable" |- ! 问题 !! 解决方案 |- | Pod不断被重建 || 检查控制器配置的replicas数量 |- | 更新未生效 || 检查Deployment的strategy配置 |- | 资源不足 || 调整资源请求/限制或扩容集群 |} == 数学表达 == 控制器的调和过程可以形式化为: <math> \lim_{n \to \infty} \| S_{current} - S_{desired} \| = 0 </math> 其中<math>S_{current}</math>表示当前状态,<math>S_{desired}</math>表示期望状态。 == 总结 == Kubernetes控制器是实现集群自动化的关键组件,它们: * 持续监控系统状态 * 自动修复偏差 * 支持多种工作负载模式 * 提供扩展机制 理解控制器的工作原理对于有效使用Kubernetes至关重要,也是开发自定义操作符(Operator)的基础。 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes核心概念]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)