kubernetes面试题
pause容器
Pause容器,又叫Infra容器,Pause容器对应的镜像属于k8s平台的一部分,除了pause容器,每个pod还包含一个或者多个紧密相关的用户业务容器
pause容器的作用
(1).pod里的多个业务容器共享pause容器的ip,共享pause容器挂载的volume,这样简化了业务容器之间的通信问题,也解决了容器之间的问题件共享问题。
(2).pod中的容器共享同一个ip地址。故同一个pod中container可以做到直接通过localhost直接通信。
网络通信
同一个节点多个pod通信机制:
pause容器启动之前,会为容器创建虚拟一对ethernet接口,一个保留在宿主机vethxxx(插在网桥上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,从另一端出来。任何pod连接到该网桥的pod都可以收发数据
跨节点pod通信机制:
跨节点pod通信,这里需要用到网络插件就是cni,当然,这种是基于overlay网络,相当于创建一个整个集群公用的 [网桥] ,然后把集群中所有的pod连接起来,就可以通信了
跨主机连接不通(pod和pod)的故障排查方法:
1).排查宿主机网络是否正常,在宿主机上ping www.baidu.com,或tcpdump抓包看是否丢包.
2).查看k8s中的网络插件是否正常,查看网络组件calico或flannel的日志。
常用命令
kubectl get cs //查看组件是否都是health
简述ETCD及其特点
ETCD 是一个分布式、高可用、一致性强的键值数据库,它是 Kubernetes 集群中的重要组件,用于存储集群的配置信息。ETCD 采用 Raft 算法保证数据的强一致性,并且支持多数据中心部署,具有高可用性。ETCD 的特点如下:
分布式:ETCD 是一个分布式系统,可以部署在多个节点上,每个节点都保存了一份数据的拷贝。 高可用:ETCD 采用 Raft 算法保证数据的强一致性,并且支持多数据中心部署,具有高可用性。 一致性强:ETCD 采用 Raft 算法保证数据的强一 致性,即在所有节点上的数据都是完全相同的。 支持多数据中心部署:ETCD 支持多数据中心部署,可以将数据分布在不同的数据中心,提高数据的可用性。 简单易用:ETCD 的 API 简单易用,可以通过 HTTP 协议进行访问。 ETCD 是 Kubernetes 集群中的重要组件,用于存储集群的配置信息。ETCD 的特点是分布式、高可用、一致性强、支持多数据中心部署、简单易用
简述ETCD适应的场景
ETCD 适用于以下场景:
需要存储配置信息的场景。 需要保证数据强一致性的场景。 需要支持多数据中心部署的场景。 需要简单易用的 API 的场景。 ETCD 是 Kubernetes 集群中的重要组件,用于存储集群的配置信息。ETCD 采用 Raft 算法保证数据的强一致性,并且支持多数据中心部署,具有高可用性。ETCD 的 API 简单易用,可以通过 HTTP 协议进行访问。
简述什么是Kubernetes
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了一个可靠的、可扩展的平台,用于在集群中运行和管理容器化应用程序。
Kubernetes的主要目标是简化容器应用程序的部署和管理。它提供了一组丰富的功能,包括自动化部署、自动伸缩、负载均衡、存储管理、自我修复等。通过使用Kubernetes,开发人员可以更轻松地构建、部署和管理容器化应用程序,同时运维人员 可以更高效地管理和扩展应用程序。
Kubernetes的核心概念包括以下几个方面:
Pod:是Kubernetes中最小的可部署单元,包含一个或多个容器。 ReplicaSet:用于定义Pod的副本数量,确保Pod的可用性和扩展性。 Deployment:用于定义应用程序的部署策略,包括Pod的副本数量、更新策略等。 Service:提供了一个稳定的网络入口,用于访问一组Pod。 Namespace:用于将集群划分为多个虚拟集群,实现资源隔离和管理。 Kubernetes是一个强大的容器编排平台,广泛应用于云原生应用程序的开发和部署。它提供了丰富的功能和灵活的架构,使得应用程序的部署和管理变得更加简单和可靠。
简述Kubernetes常见的部署方式
Kubernetes 有三种常见的部署方式:
本地部署:在本地机器上部署 Kubernetes 集群。这种方式适合于开发和测试环境。 云原生部署:在云平台上部署 Kubernetes 集群。这种方式适合于生产环境。 混合部署:在本地机器和云平台上部署 Kubernetes 集群。这种方式适合于需要兼顾开发和生产环境的场景。 Kubernetes 的部署方式有很多种,可以根据自己的实际情况选择合适的部署方式
简述Kubernetes如何实现集群管理
Kubernetes 通过一组 API 来实现集群管理。这些 API 包括:
创 建、修改和删除集群 创建、修改和删除节点 创建、修改和删除 Pod 创建、修改和删除 Service 创建、修改和删除 Deployment 创建、修改和删除 StatefulSet 创建、修改和删除 ReplicaSet 创建、修改和删除 DaemonSet 创建、修改和删除 CronJob 这些 API 可以通过 Kubernetes 的命令行工具 kubectl 来使用。
Kubernetes 还提供了一个 Web 界面,可以用来管理集群。这个 Web 界面可以通过 kubectl proxy 来访问。
Kubernetes 还提供了一个 CLI 工具,可以用来管理集群。这个 CLI 工具可以通过 kubectl 来使用。
Kubernetes 还提供了一个 Web 界面,可以用来管理集群。这个 Web 界面可以通过 kubectl proxy 来访问
简述Kubernetes相关基础概念
Kubernetes 有许多基础概念,包括:
Pod:Pod 是 Kubernetes 中最小的可部署单元,它包含一个或多个容器。 ReplicaSet:ReplicaSet 用于定义 Pod 的副本数量,确保 Pod 的可用性和扩展性。 Deployment:Deployment 用于定义应用程序的部署策略,包括 Pod 的副本数量、更新策略等。 Service:Service 提供了一个稳定的网络入口,用于访问一组 Pod。 Namespace:Namespace 用于将集群划分为多个虚拟集群,实现资源隔离和管理。 Label:Label 用于标记 Pod 和其他 Kubernetes 资源,以便于管理和调度。 Selector:Selector 用于选择具有特定标签的 Pod 和其他 Kubernetes 资源。 Volume:Volume 用于在 Pod 之间共享数据。 PersistentVolume:PersistentVolume 是一种持久化存储卷,它可以保证数据在 Pod 被删除后仍然存在。 PersistentVolumeClaim:PersistentVolumeClaim 用于申请 PersistentVolume,它可以保证 Pod 能够访问 PersistentVolume 中的数据。 ConfigMap:ConfigMap 用于存储配置数据,它可以被 Pod 使用。 Secret:Secret 用于存储敏感数据,它可以被 Pod 使用。 Job:Job 用于执行一次性任务,例如数据导入、数据迁移等。 CronJob:CronJob 用于定期执行任务,例如数据备份、日志收集等。 这些是 Kubernetes 的一些基础概念,了解这些概念有助于理解 Kubernetes 的工作原理。
简述Kubernetes集群相关组件
Kubernetes 集群由以下组件组成:
Kubernetes(k8s)的控制面组件包括以下几个主要组件:
etcd:用于存储 Kubernetes 集群的所有信息,包括 Pod、Service、ConfigMap 和 Secret 等对象的配置信息。
kube-apiserver:核心组件之一,处理 API 请求并管理其他组件。
kube-controller-manager:负责控制器的管理和运行,比如 Replication Controller 和 Deployment 控制器。
kube-scheduler:调度器,根据 Pod 的资源需求和可用性将 Pod 分配到不同的节点上
Node 节点:Node 节点是 Kubernetes 集群中的计算节点,负责运行容器。Node 节点包括以下组件: Kubelet:Kubelet 负责在 Node 节点上运行容器。 Docker:Docker 是容器运行时,负责创建和管理容器。 CRI-O:CRI-O 是另一种容器运行时,可以替代 Docker。 Kubernetes 集群通过 Master 节点和 Node 节点之间的通信来工作。Master 节点通过 API Server 向 Node 节点发送指令,Node 节点通过 Kubelet 执行这些指令。
简述kube-proxy作用
Kube-proxy是Kubernetes中的一个核心组件,主要负责在集群内部实现网络代理和负载均衡。12
Kube-proxy的作用包括:
- 服务代理。Kube-proxy将Kubernetes的服务抽象(Service)转换为实际的网络路由规则,使得Pod可以相互通信,并且外部流量可以正确地流入到服务背后的一组Pod中。例如,当创建一个Service时,kube-proxy会确保所有匹配该Service标签选择器的Pod能够通过Service的虚拟IP地址(ClusterIP)或NodePort、LoadBalancer类型的外部IP地址进行访问。
- 网络模式支持。Kube-proxy支持多种代理模式,包括[User Space](https://m.baidu.com/s?word=User Space&sa=re_dqa_zy)、IPtables和IPVS。在这些模式下,它通过监控Kubernetes API服务器的变化,动态更新节点上的网络规则,从而将流入服务IP或端口的流量转发到后端对应的Pod实例。
- 网络策略实施。虽然不直接管理网络策略,但kube-proxy通过配置相应的网络规则间接实现了网络策略的一部分,允许或拒绝来自特定源到特定目标的服务请求。
- 处理连接持久性。对于需要会话亲和性(session affinity)的服务,kube-proxy能够确保来自同一客户端的请求被转发到相同的Pod,这对于某些特定的应用场景是必需的。
- 提供服务发现机制。kube-proxy负责实现Kubernetes服务的发现机制。当一个服务被创建时,它会使用IPtables(或者在一些环境中使用IPVS)来重定向到服务的后端Pod。
此外,在托管版Kubernetes集群上,如ACK托管版,kube-proxy也被用作容器化服务,用于管理Windows节点上的Service访问入口,包括集群内Pod到Service的访问和集群外访问。
简述kube-proxy ipvs和iptables的异同
kube-proxy 可以使用 iptables 或 ipvs 来实现服务的负载均衡。两者都是 Linux 内核提供的网络负载均衡工具,但它们有不同的特点。
iptables 是 Linux 内核提供的网络防火墙工具,它可以用来实现各种网络功能,包括负载均衡。iptables 使用规则表来定义网络规则,这些规则可以用来过滤、修改或转发网络流量。 ipvs 是 Linux 内核提供的虚拟 IP 服务器工具,它可以用来实现各种网络功能,包括负载均衡。ipvs 使用虚拟 IP 地址来实现负载均衡,这些虚拟 IP 地址可以绑定到多个物理 IP 地址,从而实现负载均衡。 iptables 和 ipvs 的异同
相同点
两者都是 Linux 内核提供的网络负载均衡工具。
两者都可以用来实现各种网络功能,包括负载均衡。
两者都可以用来实现基于源 IP 地址的负载均衡。
两者都可以用来实现基于目的 IP 地址的负载均衡。
不同点
iptables 使用规则表来定义网络规则,这些规则可以用来过滤、修改或转发网络流量。
ipvs 使用虚拟 IP 地址来实现负载均衡,这些虚拟 IP 地址可以绑定到多个物理 IP 地址,从而实现负载均衡。
iptables 的配置比较复杂,需要了解 iptables 的规则表才能正确配置。
ipvs 的配置比较简单,不需要了解 ipvs 的规则表就可以正确配置