-
如何给controller-manager和scheduler组件授权?
组件进行授权的资源对象是user -
kustomize
制定基础模板,添加多环境的yaml配置在基础模板上进行覆盖 -
buildkit
使密码等私密文件对dockfile不可见、多阶段构建 -
更新web服务镜像导致偶尔502的情况
endpoint未及时更新pod ip,因为apiserver速率进行了限制
参考:K8S集群优化之修复ServiceEndpoint更新的延迟-ubuntu nvidia-WinFrom控件库|.net开源控件库|HZHControls官网 -
etcd的raft一致性算法client请求leader,leader等大多数follower写入entry,leader再进行提交,提交后通知follower已提交
The election timeout is the amount of time a follower waits until becoming a candidate.
These messages are sent in intervals specified by the heartbeat timeout.
参考:thesecretlivesofdata.com/raft -
calico、flannel多模式下流量是怎么出去的
calico ipip:node ip做为网关,发往其他node的流量从tunl0出去
calico BGP:node ip做为网关,发往其他node的流量从bond0出去
flannel vxlan:docker0 > flannel > bond0 封包解包的操作 -
自带的namepsace作用
kube-system:系统创建对象所使用的namespace
kube-public:不需要认证
kube-node-lease:保存所有node相关的lease对象,kubelet每10s更新lease对象,是一种轻量级资源 -
storeclass保留策略
删除:删除pvc之后,pv也会删除
保留:删除pvc之后,pv会保留,再使用时需要手动释放
回收:删除pvc之后,pv会自动删除数据后回收,可以绑定其他的pvc -
RC和RS的区别
RS使用基于集合的选择器,RC使用基于权限的选择器 -
kube-proxy ipvs为什么比iptables快
iptables是为防火墙而设计的,ipvs则专门用于高性能负载,并使用更高效的数据结构(Hash表),允许几乎无限的规模扩张 -
pod的重启策略
always:容器失效时重启
onfailure:容器终止运行且退出码不为0时 -
HPA原理
hpa控制器通过metrics server的api(heapster的api或聚合api)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标pod服务数量,当目标pod数量与当前副本数量不同时,hpa控制器就向pod副本控制器发起scale操作 -
各组件如何与api server通信
kubelet调用api server的rest接口报告自身状态,apiserver接收到信息后更新到etcd中
controller-manager中node controller模块通过apiserver提供的watch接口实时监控node的信息
scheduler通过apiserver的watch接口监听到新建pod副本后,开始执行调度 -
pod是按照limit请求资源还是request请求资源进行调度的
request
docker创建容器过程
-
Docker daemon 完成镜像管理的操作(拉取、更新镜像)
-
daemon 会为创建容器进行准备工作(创建 OCI bundles[3]):镜像的信息和运行时的信息。
-
daemon 调用 containerd 的 API。
-
收到请求的 containerd 不会直接去操作容器(不直接作为容器的父进程,防止 containerd 挂掉影响容器),而是先创建一个 container-shim 进程。
-
container-shim 调用 runc cli[4] 来运行容器,并启动 Unix domain socket 暴露 API 提供给 containerd进行容器的管理。
CRI(Container Runtime Interface 容器运行时接口)本质上就是 Kubernetes 定义的一组与容器运行时进行交互的接口,所以只要实现了这套接口的容器运行时都可以对接到 Kubernetes 平台上来。不过 Kubernetes 推出 CRI 这套标准的时候还没有现在的统治地位,所以有一些容器运行时可能不会自身就去实现 CRI 接口,于是就有了 shim(垫片), 一个 shim 的职责就是作为适配器将各种容器运行时本身的接口适配到 Kubernetes 的 CRI 接口上,其中 dockershim 就是 Kubernetes 对接 Docker 到 CRI 接口上的一个垫片实现。Kubernetes 是直接内置了 dockershim 在 kubelet 中的。Kubelet 通过 gRPC 框架与容器运行时或 shim 进行通信,dockershim 收到请求后, 转化成 Docker Daemon 能识别的请求, 发到 Docker Daemon 上请求创建一个容器。
[3]
OCI bundles:
chromium.googlesource.com/external/gi…
[4]
runc cli: