一、kubectl create/apply 区别
create命令
是需要先删除所有现有的东西,重新根据yaml文件生成新的。所以要求yaml文件中的配置必须是完整的
kubectl create命令,用同一个yaml 文件执行替换replace命令,将会不成功,fail掉。
apply命令
根据配置文件里面列出来的内容,升级现有的。所以yaml文件的内容可以只写需要升级的属性
二、pause容器作用
pause容器,每个业务容器共享pause容器的网络栈和挂载的Volume
kubernetes中的pause容器主要为每个业务容器提供以下功能:
PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。
网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。
IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。
UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷):
Pod中的各个容器可以访问在Pod级别定义的Volumes。
三、什么情况触发deploy的更新
修改spec区域的字段,会触发更新
四、annotations 更新是否会触发pod更新?
不会
五、pod驱逐-软驱逐(soft eviction)和硬驱逐(hard eviction)
因为驱逐 pod 是具有毁坏性的行为,因此必须要谨慎。有时候内存使用率增高只是暂时性的,有可能 20s 内就能恢复,这时候启动驱逐程序意义不大,而且可能会导致应用的不稳定,我们要考虑到这种情况应该如何处理;另外需要注意的是,如果内存使用率过高,比如高于 95%(或者 90%,取决于主机内存大小和应用对稳定性的要求),那么我们不应该再多做评估和考虑,而是赶紧启动驱逐程序,因为这种情况再花费时间去判断可能会导致内存继续增长,系统完全崩溃。
为了解决这个问题,kubernetes 引入了 soft eviction 和 hard eviction 的概念。
软驱逐
可以在资源紧缺情况并没有哪些严重的时候触发,比如内存使用率为 85%,软驱逐还需要配置一个时间指定软驱逐条件持续多久才触发,也就是说 kubelet 在发现资源使用率达到设定的阈值之后,并不会立即触发驱逐程序,而是继续观察一段时间,如果资源使用率高于阈值的情况持续一定时间,才开始驱逐。并且驱逐 pod 的时候,会遵循 grace period ,等待 pod 处理完清理逻辑。和软驱逐相关的启动参数是:
- —eviction-soft:软驱逐触发条件,比如 memory.available<1Gi
- —eviction-sfot-grace-period:触发条件持续多久才开始驱逐,比如 memory.available=2m30s
- —eviction-max-pod-grace-period:kill pod 时等待 grace period 的时间让 pod 做一些清理工作,如果到时间还没有结束就做 kill
前面两个参数必须同时配置,软驱逐才能正常工作;后一个参数会和 pod 本身配置的 grace period 比较,选择较小的一个生效。
硬驱逐
更加直接干脆,kubelet 发现节点达到配置的硬驱逐阈值后,立即开始驱逐程序,并且不会遵循 grace period,也就是说立即强制杀死 pod。对应的配置参数只有一个 —eviction-hard,可以选择上面表格中的任意条件搭配。
设置这两种驱逐程序是为了平衡节点稳定性和对 pod 的影响,软驱逐照顾到了 pod 的优雅退出,减少驱逐对 pod 的影响;而硬驱逐则照顾到节点的稳定性,防止资源的快速消耗导致节点不可用。
软驱逐和硬驱逐可以单独配置,不过还是推荐两者都进行配置,一起使用。
六、健康检查
Liveness:存活性检查,检查失败会根据Depolyment中设置RestartPolicy(None,Always,OnFailure)进行重启Pod;
Readiness:就绪性检查,检查失败会从Service的EndPoint中剔除Pod IP;
七、controller manager 中包含了哪些controller
这些控制器包括:
- 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
- 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
- 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
- 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌.
Kubernetes出现了哪些问题
- 证书过期
- 跨版本升级
- Node节点Not Ready
- 磁盘写满导致Pod被驱逐
