共事提出个我从未想过的问题,为什么Kubernetes要"多此一举"推出动态Pod概念?
咱们晓得k8s中Pod能够说是一个合格的容器小管家,Pod 被设计成反对多个容器能够一起进行调度,容器之间能够共享资源和依赖、彼此通信、协调何时以及何种形式运行或终止本身。
不晓得小伙伴有没有留神到咱们小管家的孪生兄弟动态Pod?
为什么k8s会推出动态Pod概念?
囧么肥事胡言乱语开课啦
动态 Pod 有什么非凡的中央呢?
失常状况下Pod是在Master上对立治理,指定,调配。所谓动态Pod就是不承受Master的治理,在指定的node受骗 kubelet
启动时,会主动启动所有定义的动态Pod。
动态 Pod 间接由特定节点上的 kubelet 过程来治理,不通过 master 节点上的 apiserver
。⽆法与咱们常⽤的控制器 Deployment
或者 DaemonSet
进⾏关联,kubelet
间接监控每个Pod,并在故障生效时进行重启自愈。
动态 Pod 始终绑定在某⼀个 kubelet
,并且始终运⾏在同⼀个节点上。
既然发现API不能治理,为什么能“看见”运行的动态Pod?
kubelet会为每个它治理的动态Pod,调用api-server
在 Kubernetes
的 apiserver
上创立⼀个镜像 Pod(Mirror Pod
)。因而咱们能够在 apiserver
中查问到该 Pod,也能通过kubectl等形式进行拜访,然而不能通过 apiserver 进⾏管制(例如不能删除)。
一般Pod失败自愈和动态Pod有什么区别?
惯例Pod用工作负载资源来创立和治理多个 Pod。 资源的控制器可能解决正本的治理、上线,并在 Pod 生效时提供自愈能力。
自身节点能够尝试重启或者齐全替换操作,kubernetes
默认的自愈机制是当Pod退出时对Pod进行重启。
如果重启失败,能够从新拉取Pod,实现替身替换:
例如,如果一个节点失败,控制器留神到该节点上的 Pod 曾经进行工作, 就能够创立替换性的 替身Pod。调度器会将替身 Pod 调度到一个衰弱的节点执行。
上面是一些治理一个或者多个 Pod 的工作负载资源的示例:
Deployment
StatefulSet
DaemonSet
动态Pod是指定在特定的节点上运行的Pod,齐全交给kubelet进行监督自愈,重启也会在同一个指定的节点上进行重启。动态 Pod 始终绑定在某⼀个 kubelet
,并且始终运⾏在同⼀个节点上。
如果kubectl进行或者删除动态Pod会怎么?
如果尝试删除或者进行,动态Pod会进入Pending
状态,并且很快会被kubelet
重启。
那如果我非要删除它呢?
kubelet
启动时,由 –Pod-manifest-path= or –manifest-url=
参数指定的⽬录下定义的所有 Pod 都会主动创立。
删除只须要在配置目录下删除对应的 yaml
配置文件。
运行中的 kubelet 会定期扫描配置的目录,并且依据文件中呈现或者隐没的 Pod配置文件来创立或者删除 Pod。
动态Pod有什么作用?有哪些内置动态Pod?
动态 Pod 通常绑定到某个节点上的 kubelet
。 其主要用途是运行自托管的管制面。
因为应用动态Pod能够无效预防通过kubectl
、或管理工具操作的误删除,能够利用它来部署一些外围组件利用,保障应用服务总是运行稳固数量和提供稳固服务。
在自托管场景中,应用 kubelet
来治理各个独立的管制面组件。例如:
- 调度组件
kube-scheduler
- 秘书组件
kube-apiserver
- 外围大脑组件
kube-controller-manager
- 数据仓组件
etcd
Kubernetes 举荐学习书
Kubernetes权威指南PDF
链接:https://pan.baidu.com/s/11huL... 提取码:sa88
k8s系列所有问题更新记录:GitHub