一、namespace
对资源进行隔离,service和网络不隔离
二、resource
对cpu和内存资源进行管理,一般是用request和limit,通常让request=limit
内存超limit会被kill,cpu超limit不会。
三、Label
用于标识和删选,可用表达式
四、健康检查
一般是对pod的服务进行检查,进行存活(live)和可用(read)检查。
五、scheduler
scheduler去决定pod应该在哪些节点部署,告诉ApiServer后,ApiServer再通知kubelet去负责pod的创建
六、部署策略
https://www.jianshu.com/p/71e14c31cb82
一个deployment,更新里面的pod版本:
重建(recreate):停止旧版本部署新版本
滚动更新(rolling-update):一个接一个地以滚动更新方式发布新版本
2个版本deployment,切换Service的选择:
蓝绿(blue/green):新版本与旧版本一起存在,然后切换流量
金丝雀(canary):将新版本面向一部分用户发布,然后继续全量发布
A/B测(a/b testing):以精确的方式(HTTP 头、cookie、权重等)向部分用户发布新版本。A/B测实际上是一种基于数据统计做出业务决策的技术。在 Kubernetes 中并不原生支持,需要额外的一些高级组件来完成改设置(比如Istio、Linkerd、Traefik、或者自定义 Nginx/Haproxy 等)。
七:Pod
是k8s最小调度单位,对container进行隔离。
可以将多个容器的服务组成一个pod服务。
lifecycle有两种回调函数:
PostStart:容器创建成功后,运行前的任务,用于资源部署、环境准备等。
PreStop:在容器被终止前的任务,用于优雅关闭应用程序、通知其他系统等等。
Kubernetes 在容器创建后立即发送 postStart 事件。然而,postStart 处理函数的调用不保证早于容器的入口点(entrypoint) 的执行。postStart 处理函数与容器的代码是异步执行的,但 Kubernetes 的容器管理逻辑会一直阻塞等待 postStart 处理函数执行完毕。只有 postStart 处理函数执行完毕,容器的状态才会变成 RUNNING。
Kubernetes 在容器结束前立即发送 preStop 事件。除非 Pod 宽限期限超时,Kubernetes 的容器管理逻辑 会一直阻塞等待 preStop 处理函数执行完毕