10 个问题测试你对 K8s 的理解程度

Rifewang 2025-02-10 16:02:56

10 个 Kubernetes 问题,测试你对 Kubernetes 的理解程度:

原文:https://medium.com/@rifewang/kubernetes-10-questions-to-test-your-understanding-of-k8s-c2860c9f3cbf

  • 1.在具有两个节点的集群中,一个节点有 Pod,另一个没有,新 Pod 将被调度到哪个节点?
  • 2.如果容器中运行的应用程序遇到 OOM(内存不足)错误,容器会重启,还是会重新创建整个 Pod?
  • 3.是否可以在不重新创建 Pod 的情况下动态应用环境变量或 ConfigMap 更新等应用程序配置?
  • 4.Pod 一旦创建,即使用户没有采取进一步的行动,是否也就稳定下来了?
  • 5.ClusterIP 类型的 Service 能否确保 TCP 流量的负载均衡?
  • 6.应如何收集应用程序日志,是否存在丢失日志的风险?
  • 7.如果 HTTP Server 类型的 Pod 的 livenessProbe 运行正常,是否意味着该应用程序没有问题?
  • 8.应用程序如何扩展以应对流量波动?
  • 9.当你执行 kubectl exec -it <pod> -- bash 时,你是否登录了 Pod?
  • 10.如果 Pod 中的容器反复退出和重启,您将如何排除故障?

看到这些问题时,内心是否能够立马有准确的答案呢?下面是答案:

1.在具有两个节点的集群中,一个节点有 Pod,另一个没有,新 Pod 将被调度到哪个节点?

调度过程包括几个阶段:

Kubernetes调度过程

结果取决于 Pod 亲和性、污点和容忍度以及调度插件等配置。但是,假设两个节点上的默认配置和相同的资源可用性,NodeResourcesFit 插件起着关键作用。其评分策略包括 LeastAllocated (默认,优先考虑资源使用率最低的节点)、MostAllocated (优先考虑资源使用率较高的节点)和 RequestedToCapacityRatio(平衡资源利用率)。使用 MostAllocated 策略,新 Pod 将被调度到具有现有 Pod 的节点,而其他两种策略则更喜欢空节点。

2.如果容器中运行的应用程序遇到 OOM(内存不足)错误,容器会重启,还是会重新创建整个 Pod?

当容器内存不足时,它通常会根据 Pod 的 RestartPolicy(默认为 Always)重启。Pod 本身保持不变。但是,在极端情况下,例如节点上的严重内存压力,Pod 可能会被驱逐,从而导致其重新创建。

3.是否可以在不重新创建 Pod 的情况下动态应用环境变量或 ConfigMap 更新等应用程序配置?

环境变量无法动态更新。但是,如果 ConfigMap 更新作为文件挂载(不使用 subPath),则可以动态应用。同步延迟取决于 kubelet 的 syncFrequency(默认为 1 分钟)和 configMapAndSecretChangeDetectionStrategy。

4.Pod 一旦创建,即使用户没有采取进一步的行动,是否也就稳定下来了?

不能保证 Pod 保持稳定。资源短缺或网络中断等因素可能会导致 Pod 驱逐,即使没有用户干预也是如此。

5.ClusterIP 类型的 Service 能否确保 TCP 流量的负载均衡?

ClusterIP 的服务依靠 Linux 内核 Netfilter 进行负载均衡。其 connection tracking 机制维护已建立的 TCP 连接的会话持久性。这可能会导致长期连接的负载分配不均匀。

6.应用程序日志应该如何收集,是否存在丢失日志的风险?

日志可以输出到 stdout/stderr 或写入文件。对于 stdout/stderr,日志保存在节点上,可以使用 Fluentd 或 Filebeat(通常部署为 DaemonSet)等日志代理进行收集。但是,如果删除了 Pod,则其日志可能会在 Agent 收集之前丢失。将日志写入持久性存储上的文件可以防止丢失。

7.如果 HTTP Server Pod 的 livenessProbe 运行正常,是否意味着该应用程序没有问题?

从应用程序的角度来看,livenessProbe 只检查应用程序是否处于活动状态,而不检查它是否正常运行。应用程序可能处于降级状态,但仍通过探测。从网络角度来看,livenessProbe(例如 httpGet)检查来自节点 kubelet 的请求,这并不能保证跨节点网络的可靠性。

8.应用程序如何扩展以应对流量波动?

Kubernetes 支持水平 Pod 自动扩展 (HPA) 和垂直 Pod 自动扩展 (VPA)。VPA 涉及使用调整后的资源重新创建 Pod,从而限制其场景。HPA 更常用,它根据 CPU 使用率、请求速率或自定义指标等指标动态调整 Pod 计数。外部系统也可以通过向 kube-apiserver 发送请求来触发扩展。

9.当你执行 kubectl exec -it <pod> -- bash 时,你是否登录了 pod?

不可以,kubectl exec 需要指定一个容器(默认为单容器 Pod 中的唯一容器)。Pod 是隔离的 Linux 命名空间的集合。容器共享 Network、IPC 和 UTS 命名空间,而 PID 和 Mount 命名空间保持独立。kubectl exec -it <pod> -- bash 在目标容器的隔离环境中启动一个新的 bash 进程,但不“登录”到 Pod。

10.如果 Pod 中的容器反复退出和重启,您将如何排除故障?

如果容器反复崩溃,kubectl exec 将不起作用。相反,请检查节点和容器日志,检查 Pod 的状态,并使用 kubectl debug 启动临时容器来调查环境和依赖项。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat