Skip to content

Latest commit

 

History

History
70 lines (54 loc) · 2.72 KB

4.1-controllermanager-jie-shao.md

File metadata and controls

70 lines (54 loc) · 2.72 KB
description
controller

4.1 controller-manager 介绍

背景

在Kubernetes 集群中,Controller通过 API Server提供的(List & Watch)接口实时监控集群中资源对象的状态变化,当发生故障,导致资源对象的状态变化时,Controller会尝试将其状态调整为期望的状态。

比如当某个Pod出现故障时,Deployment Controller会及时发现故障并执行自动化修复流程,确保集群里的Pod始终处于预期的工作状态。

工作原理

Kubernetes控制器是通过定期重复执行如下 3 个步骤来完成控制任务的:

  1. 从API Server读取资源对象的期望状态和当前状态。
  2. 比较两者的差异,然后运行控制器操作现实中的资源对象,将资源对象的真实状态修正为Spec中定义的期望状态。
  3. 变动执行成功后,将结果状态写回到在API Server上的目标资源对象的status字段中。

常见的 Controller

Kubernetes 中内置了许多 Controller,Controller Manager是这些 Controller 的管理者,当资源状态发生变化时,Controller Manager 会通知这些 Controller 做出决策和执行操作。

  • Deployment Controller:负责部署和管理 Pod 副本。
  • ReplicaSet Controller:负责管理 Pod 副本的数量。
  • DaemonSet Controller:确保每个节点都运行指定的 Pod。
  • Job Controller:负责执行一次性任务。
  • CronJob Controller:负责按照指定的频率执行任务。
  • StatefulSet Controller:确保 Pod 的顺序性和持久性。
  • Garbage collector Controller:负责回收kubernetes中的资源对象,监听资源对象事件,更新对象之间的依赖关系,并根据对象的删除策略来决定是否删除其关联对象。
  • ...

Deployment

管理一组Pod,假设设置副本数 replicas=2,这时 node01和node02上会各自分配一个Pod,现在将node02关闭,则会发现node01上会部署两个Pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: test
  labels:
    app: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-deployment-tp
  template:
    metadata:
      labels:
        app: nginx-deployment-tp
    spec:
      containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
      tolerations:
        - key: "node.kubernetes.io/unreachable"
          operator: "Exists"
          effect: "NoExecute"
          tolerationSeconds: 30