ETCD介绍 (四)

ETCD在K8S中

K8S与ETCD部署架构

image

  • ApiServer,提供了增删改查及watch接口,是各个组件的交互枢纽,同时提供认证、授权、准入、限速功能。
  • etcd,负责元数据的存储,k8s的状态数据全部存储在etcd上。
  • Controller-Manager,包含了各种控制器,就是使用监听,使得资源的实际状态和期望状态一致。
  • Scheduler,调度资源,负责Pod的调度,当有Pod需要调度时,通过一系列的筛选和评优算法,为Pod分配最佳的Node。
  • node节点,部署有kubelete,负责pod的创建运行;kubelet-proxy,负责节点上网络代理;另外还有容器运行时、各种插件

作为K8S存储

ETCD一般最佳内存在8G,太大太小都容易引起性能降低。所以我们不能拿etcd当做数据库使用,只能存储各种元数据信息。按照k8s的官方文档和业界的最佳实践,k8s可以管理到5000个节点,这么算每个节点可以分配到16M的存储。

# 在etcd中,资源命名
prefix + "/" + 资源类型 + "/" + namespace + "/" + 具体资源名
# 例如:
/registry/deployments/default/helloworld

# k8s命令:
	kubectl get deployments -n default
# 对应到etcd:
	etcdctl get --prefix /registry/deployments/default
	
# k8s命令:
	kubectl get deployments/helloworld
# 对应到etcd:
	etcdctl get --prefix /registry/deployments/default/helloworld

etcd在k8s中交互

image
一个Pod的创建过程:
1.用户通过kubectl或者APIServer的接口创建Pod
2.APIServer通过鉴权等后,构建出完整的Pod信息,并将该信息存储到etcd中。
3.Scheduler已经在watch pod的事件,发现有新的pod创建信息, 随即为该pod分配合适的node,然后调用APIServer的修改接口,将Pod与node绑定信息存入到etcd中
4.被分配node上的kubelet已经在watch pod事件,发现本节点的pod创建事件,开始调用运行时,创建pod。

可以注意到:
1.API Server被调用了多次,是因为K8S中所有的组件都只和APIServer交互,除此之外并不两两交互
2.watch是个很重要的功能,Scheduler、Controller-Manager、kubelet组件都通过watch来检测变化做出响应。
所以,pod创建过程中是异步处理的,其中都建立在watch机制上。

posted @ 2022-04-28 15:08  大切切  阅读(276)  评论(0编辑  收藏  举报