一、关于k8s的理解
- k8s作为一个容器编排平台,其核心功能是编排。
- Pod是k8s的最小调度单位,具有很多的字段和属性。其编排的实现主要是通过一个个控制器根据被控制对象的属性和字段实现的。
- 在k8s中,每个build-in资源类型(Deployment,Statefulset...也就是内置类型)都有对应的控制器,都遵循一个通用的编排模式:Reconcile loop(调谐循环).
for {
actualState := GetResourceActualState(rsvc)
expectState := GetResourceExpectState(rsvc)
if actualState == expectState {
// do nothing
} else {
Reconcile(rsvc)
}
}
调谐循环;
实现方式类似于一个无限循环,通过不断地对比资源的实际状态于我们期望的状态(事件驱动+定时同步),如果不同则进行Reconcile(调谐:最终结果一般是对被控制对象的某种写操作,比如增/删/改 pod)。
4.声明式api
所谓声明式就是“告诉 K8s 你要什么,而不是告诉它怎么做的命令”,一个很熟悉的例子就是 SQL,你“告诉 DB 根据条件和各类算子返回数据,而不是告诉它怎么遍历,过滤,聚合”。在 K8s 里面,声明式的体现就是 kubectl apply 命令,在对象创建和后续更新中一直使用相同的 apply 命令,告诉 K8s 对象的终态即可,底层是通过执行了一个对原有 API 对象的 PATCH 操作来实现的,可以一次性处理多个写操作,具备 Merge 能力 diff 出最终的 PATCH,而命令式一次只能处理一个写请求。
<
最低0.47元/天 解锁文章
4632

被折叠的 条评论
为什么被折叠?



