ITPub博客

首页 > 数据库 > 数据库开发技术 > 运维必须知道的Kubernetes(k8s)面试题

运维必须知道的Kubernetes(k8s)面试题

原创 数据库开发技术 作者:运维book思议 时间:2024-05-13 18:44:35 0 删除 编辑

你好,我是李逸皓,我的梦想是:运维,永不背锅!

放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

开启Linux新时代

新兴Linux命令行工具,不学就要被淘汰

Linux新命令:一条命令解决两个问题

Python脚本实现Linux日志巡检

Linux新趋势:直接弃用AWK



1.如何在K8S中实现服务发现?

在Kubernetes(K8s)中,服务发现主要依赖于Kubernetes的Service和Ingress对象。
Service:Service是Kubernetes中的一个核心概念,它为一组运行相同应用程序的Pods提供一个统一的访问入口。Service有自己的IP地址和端口号,其他的Pod可以通过这个IP地址和端口号来访问Service背后的Pods。Service通过标签选择器来选择后端的Pods,当后端的Pods发生变化时,Service会自动更新。
DNS:Kubernetes提供了内置的DNS服务,可以为每个Service创建一个DNS记录。这个DNS记录的格式通常是..svc.cluster.local。因此,Pod可以通过Service的DNS名称来访问Service,而不需要知道Service的IP地址。
Ingress:Ingress是Kubernetes中用于管理外部访问集群内部Service的对象。你可以为Service定义Ingress规则,这样外部的请求就可以通过Ingress来访问Service。
Headless Service:如果你不需要或不想使用Kube-proxy进行负载均衡,你可以使用无头服务(Headless Service)。无头服务没有集群IP,DNS查询会直接返回后端Pod的IP地址列表。
2.如何在K8S中进行水平扩展?
在Kubernetes(K8s)中进行水平扩展主要涉及到两个概念:Horizontal Pod Autoscaler(HPA)和Cluster Autoscaler。
Horizontal Pod Autoscaler(HPA):HPA是Kubernetes中的一个对象,它可以自动地根据CPU利用率或者自定义的度量指标来调整Pod的数量。你可以设置最小和最大的Pod数量,HPA会根据实际的负载来增加或减少Pod的数量。这样可以确保应用程序在负载增加时能够提供足够的容量,而在负载减少时不会浪费资源。
Cluster Autoscaler:Cluster Autoscaler是一个在集群级别进行自动扩缩容的组件。当集群的所有节点都无法满足新的Pod的调度需求时,Cluster Autoscaler可以自动地向集群添加节点。同样,当一些节点上的Pod都被删除,并且这些节点已经空闲一段时间后,Cluster Autoscaler也可以自动地删除这些节点。

以下是一个使用HPA进行水平扩展的例子:

apiVersion: autoscaling/v2beta2kind: HorizontalPodAutoscalermetadata:  name: my-app-hpaspec:  scaleTargetRef:    apiVersion: apps/v1    kind: Deployment    name: my-app  minReplicas: 1  maxReplicas: 10  metrics:  - type: Resource    resource:      name: cpu      target:        type: Utilization        averageUtilization: 50

3.有哪些常见的Pod调度策略?

在Kubernetes中,Pod的调度策略主要由Kubernetes的调度器(Scheduler)来决定。以下是一些常见的Pod调度策略:
NodeSelector:NodeSelector是最简单的Pod调度策略,它允许你基于节点的标签(Labels)来选择节点。你可以在Pod的spec中设置nodeSelector字段,指定希望Pod运行的节点的标签。
Affinity and Anti-Affinity:亲和性(Affinity)和反亲和性(Anti-Affinity)提供了更复杂的节点选择规则。亲和性可以让Pod尽可能地调度到符合某些条件的节点上,反亲和性则可以让Pod尽可能地避开符合某些条件的节点。
Taints and Tolerations:污点(Taints)和容忍(Tolerations)是一种可以将Pod驱逐到(或者阻止Pod调度到)特定的节点的方法。节点可以应用一个或多个污点,然后Pod可以应用相应的容忍来允许(或者阻止)自己被调度到这些节点上。
PodTopologySpreadConstraints:Pod拓扑扩散约束可以让你控制Pod在拓扑域(例如节点、区域、数据中心等)之间的分布。这可以用来实现高可用性或者负载均衡。
Resource Based Scheduling:基于资源的调度策略考虑节点的CPU、内存等资源使用情况,以确保Pod有足够的资源运行。
Custom Scheduler:如果内置的调度策略不能满足需求,你还可以编写自定义的调度器。

粉丝进群方式如下图:

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

  ↓↓↓ 点个在看,无需赞赏!

原文作者:运维book思议;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-09-24

  • 博文量
    333
  • 访问量
    215198