找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1|回复: 0

Kubernetes运维面试必备题目

[复制链接]

49

主题

27

回帖

240

积分

管理员

积分
240
发表于 1 小时前 | 显示全部楼层 |阅读模式
学了Kubernetes技术,要想找一份真正的K8S运维工作,还需要对所学的技术进行总结,同时要熟练的解答面试官问到的面试题,虚拟化、K8S云计算100+常见面试题:

Docker虚拟化面试题

虚拟化技术的概念?

虚拟化技术是指在一台物理计算机上创建多个虚拟的计算机环境,每个虚拟环境都可以运行自己的操作系统和应用程序,就好像它们是在独立的物理计算机上运行一样。这种虚拟化技术可以让一台物理计算机同时运行多个虚拟机,从而充分利用硬件资源,提高计算机的利用率。

虚拟化技术的意义?

充分利用硬件资源:虚拟化技术可以让一台物理计算机同时运行多个虚拟机,从而充分利用硬件资源,提高计算机的利用率。

降低成本:通过虚拟化技术,用户可以在一台计算机上运行多个操作系统和应用程序,而无需购买和维护多台物理计算机,从而降低成本。

虚拟化技术的种类?

VMware ESXI;

XEN;

KVM;

Open-vz;

Hyper-v;

Podman;

Docker。

什么是Docker虚拟化?

Docker是一种应用程序容器化技术,它可以将应用程序及其依赖项打包为一个可移植的容器,从而实现在不同的计算机上快速部署和运行应用程序的目的。

Docker虚拟化与传统的虚拟化技术不同,传统虚拟化技术通过在物理计算机上运行多个操作系统实例或虚拟机实例来实现虚拟化。而Docker虚拟化是通过容器化技术实现的,容器是一个轻量级的虚拟化技术,它在操作系统层面上实现虚拟化,因此容器和宿主机共享同一个操作系统内核。

Docker和传统VMware workstation区别?

Docker虚拟化与传统的虚拟化技术不同,传统虚拟化技术通过在物理计算机上运行多个操作系统实例或虚拟机实例来实现虚拟化。而Docker虚拟化是通过容器化技术实现的,容器是一个轻量级的虚拟化技术,它在操作系统层面上实现虚拟化,因此容器和宿主机共享同一个操作系统内核。

Docker镜像和容器的区别?

Docker镜像是一个只读的文件系统,包含了用于创建Docker容器的所有文件和配置信息,可以看作是Docker容器的模板。Docker镜像可以包含操作系统、应用程序及其依赖项、运行环境、配置文件等。Docker镜像是通过在Dockerfile中描述镜像的构建过程,然后通过Docker命令构建出来的。

而Docker容器是Docker镜像的一个运行实例,可以看作是Docker镜像的一个可执行版本。当启动一个Docker容器时,Docker会在宿主机上创建一个独立的文件系统,然后将Docker镜像中的文件系统复制到这个文件系统中,同时启动容器中指定的应用程序。Docker容器在运行过程中可以修改文件系统和配置信息,但是这些修改不会影响到Docker镜像本身。

Dockerfile制作原理?

Dockerfile是Docker虚拟化技术中用于构建Docker镜像的一种文本格式文件,包含了构建镜像所需要的所有指令和配置信息。主要是基于一个基础镜像,在基础镜像上不断的叠加新功能。

Docker Harbor仓库工作流程?

用户使用Docker客户端构建Docker镜像,并将其推送到Docker Harbor仓库。用户可以通过Docker客户端的命令行界面或图形化界面来执行推送操作。

Docker Harbor接收到镜像推送请求后,根据用户配置的访问控制规则和镜像存储策略,对镜像进行验证、处理和存储。Docker Harbor支持使用HTTPS、TLS等安全协议来保护镜像传输的安全性。

Docker Harbor将存储的镜像信息存储在仓库的数据库中,用户可以通过Docker Harbor的Web界面来查看、搜索、管理仓库中的镜像。

用户可以通过Docker客户端从Docker Harbor仓库中拉取Docker镜像,以在自己的环境中部署和运行应用程序。用户可以根据需要选择特定的镜像版本或标签,以便在应用程序升级或回退时进行管理。

Docker bridge桥接模式原理?

在Docker桥接网络中,Docker会自动创建一个名为docker0的虚拟网桥,它作为桥接网络中所有容器的交换机。Docker0网桥有两个虚拟网络接口:一个用于和宿主机相连,一个用于和容器相连。当容器加入到桥接网络中时,Docker会为容器创建一个虚拟网卡veth pair,并将其中一端连接到容器的网络命名空间中,另一端连接到docker0网桥中。通过这种方式,容器可以使用docker0网桥上的IP地址与其他容器或宿主机进行通信。

Docker LXC Croup之间的区别?

Docker、LXC和Cgroups都是Linux容器技术的代表性工具,它们都可以用于创建和管理容器,但它们的设计理念和实现方式有所不同,主要区别如下:

Docker是一种基于应用的容器技术,旨在为应用提供一个独立的运行环境,具有轻量、可移植、可扩展等特点。Docker使用自己的容器格式,即Docker镜像,通过镜像分发、构建、发布和部署容器。

LXC(Linux Container)是Linux内核级别的容器技术,提供了一种轻量级的虚拟化解决方案,可以在同一台物理机上运行多个独立的Linux系统。LXC基于Linux命名空间和Cgroups技术实现,它使用Linux操作系统原生的进程和文件系统隔离机制来实现容器,可以直接运行标准的Linux发行版。

Cgroups(Control Groups)是Linux内核提供的一种资源管理机制,可以限制进程组使用的资源,例如CPU、内存、磁盘I/O等。Cgroups提供了一种灵活的资源隔离机制,可以帮助实现Linux容器的资源管理和限制。

相比之下,Docker在应用层面上提供了一种更高级别、更易用的容器技术,可以轻松创建、部署和管理容器,且具有更好的可移植性和版本控制功能。LXC和Cgroups则提供了更底层的容器技术,需要手动进行配置和管理,但它们的性能和隔离性更高,可以直接运行标准的Linux系统。因此,选择适合的容器技术取决于应用场景和具体需求。

Docker Compose编排原理?

Docker Compose是一个用于定义和运行多个Docker容器的工具,它基于YAML格式的配置文件,通过简单的命令即可完成容器的部署、管理和协同工作。Docker Compose的编排原理如下:

定义服务:在docker-compose.yml配置文件中定义一个或多个服务,每个服务对应一个Docker容器,可以指定容器的镜像、环境变量、端口映射、依赖关系等。

创建网络:Docker Compose会为每个项目创建一个默认的网络,可以将各个容器连接到同一个网络中,使它们可以直接相互通信。

启动容器:使用docker-compose up命令启动所有服务对应的容器,Docker Compose会根据定义的服务和依赖关系,自动创建、启动和管理容器,使它们能够协同工作,实现复杂的应用架构。

管理容器:Docker Compose提供了一系列管理命令,可以方便地启动、停止、重启、删除和查看容器,以及获取容器日志和状态信息。

扩展应用:在需要扩展应用时,可以通过修改docker-compose.yml文件来添加或删除服务,然后再次运行docker-compose up命令即可实现快速部署和扩容。

Docker swarm集群原理?

初始化集群:选择一台主机作为管理节点,使用docker swarm init命令初始化集群,创建一个Docker Swarm集群,自动创建一个默认的Swarm服务。

加入节点:使用docker swarm join命令让其他Docker主机加入Swarm集群,这样就可以统一管理多个主机上的Docker容器。

创建服务:使用docker service create命令创建一个服务,可以指定镜像、容器数量、环境变量、网络设置等信息,Swarm会自动分配服务到各个节点上,并启动容器实例。

负载均衡:使用内置的负载均衡算法,Swarm会自动将请求路由到运行相应服务的容器上,实现负载均衡和高可用。

扩展应用:可以通过docker service scale命令来扩展服务的容器数量,Swarm会自动将容器分配到集群的各个节点上,实现自动扩展。

服务更新:使用docker service update命令来更新服务的镜像、环境变量、网络设置等信息,Swarm会逐步停止旧容器并启动新容器,实现无缝升级。

故障转移:如果某个节点或容器发生故障,Swarm会自动检测到并重新分配服务,保证整个集群的高可用性。

Docker export和commit区别?

Docker export和commit命令都是将容器转化为镜像的方法,但是它们的作用和应用场景有所不同。export适用于创建一个只包含文件系统的镜像文件,commit适用于保存容器的元数据信息和运行状态。

如何去监控Docker容器资源运行情况?

Docker提供了一个内置的命令docker stats,可以实时查看所有容器的资源占用情况,包括CPU、内存、网络I/O和磁盘I/O等信息。可以使用该命令来快速了解Docker容器的资源使用情况。

Docker如何对CPU、MEM扩容、缩容?

Docker对CPU的扩容和缩容,可以通过 docker update 命令来实现。该命令可以修改容器的配置,包括 CPU 的使用限制。而内存则采用内存的扩容和缩容,可以通过在启动容器时指定 --memory 参数来实现。

Docker如何对硬盘容器进行限制?

Docker可以通过对容器的磁盘进行限制来控制容器使用的存储空间大小。常用的限制方式有两种:

一是通过限制容器的磁盘使用空间大小:可以在启动容器时通过 --storage-opt 参数来设置容器的磁盘空间限制。

二是通过使用磁盘配额来限制容器的磁盘使用:可以使用文件系统的磁盘配额功能来限制容器的磁盘使用。

Docker hosts模式和Container模式区别?

Docker容器在Host 模式下,容器与宿主机共享同一个网络命名空间,即容器使用宿主机的网络配置,直接绑定宿主机的网络接口,不会进行网络地址转换 (NAT)。这意味着容器可以直接访问宿主机上的所有网络接口和端口,包括外部网络。

而在Container 模式下,Docker 会为每个容器创建一个独立的网络命名空间,容器之间相互隔离。每个容器都有自己的 IP 地址和网络配置,并且容器之间的网络通信需要进行 NAT。

使用 Container 模式可以更好地隔离容器之间的网络,但也会降低网络性能和访问外部网络的能力。

可以使用

Docker容器默认DNS是多少?为什么?

Docker采用的默认DNS是宿主机的DNS,可以查看宿主机/etc/resolv.conf文件查看即可。也可以给Docker容器配置其他的DNS服务器。

Docker超级特权有什么用?

Docker 的超级特权(privileged)模式可以给容器以宿主机的所有特权,包括访问宿主机的所有设备、文件系统、内核模块等。

描述Jenkins和Docker如何进行整合?工作流程?

Jenkins 是一个流行的持续集成和持续交付工具,而 Docker 是一个流行的容器化解决方案。将 Jenkins 和 Docker 进行整合,可以实现更高效、可靠和可重复的构建、测试和部署流程。

在 Jenkins 中安装 Docker 插件,以便 Jenkins 可以与 Docker 容器进行交互。

在 Jenkins 中创建一个 Docker 镜像构建任务,定义需要构建的 Docker 镜像的名称、版本和构建过程。

在构建任务中定义需要构建的 Docker 镜像所需的 Dockerfile 和其他构建文件。

在构建任务中使用 Docker 插件启动 Docker 容器,并将构建所需的文件复制到容器中。

在容器中运行构建命令,以生成新的 Docker 镜像。

在构建任务中使用 Docker 插件将新构建的 Docker 镜像推送到 Docker 仓库中,以便进行部署。

Kubernetes云计算面试题一

云计算技术分类?

云计算是指通过互联网提供的一种计算资源的共享方式,主要包括以下三个层次的技术分类:

基础设施即服务(IaaS,Infrastructure as a Service):提供虚拟化的计算资源、存储资源和网络资源,用户可以自己配置操作系统、应用程序等,具有最高的自定义性和灵活性。

平台即服务(PaaS,Platform as a Service):除了提供基础设施服务之外,还提供运行在云平台上的中间件、开发工具、数据库等服务,用户可以直接在云平台上开发、测试和部署自己的应用程序。

软件即服务(SaaS,Software as a Service):将应用程序作为一个服务直接提供给用户,用户不需要管理软件的安装、配置和维护等操作,只需通过互联网使用应用程序即可,如Google Docs、Salesforce等。

云计算技术概念?

云计算是一种通过互联网提供计算资源和服务的模式,它是一种基于互联网的计算方式,可以在不同的设备上共享和利用数据和软件。在云计算中,计算资源(例如处理器、内存、存储、网络等)可以被动态地分配和调整,以满足用户的需求,并按照使用量进行计费。

ETCD概念及其特点?

Etcd 是一个分布式键值存储系统,通常用于配置共享和服务发现。它由 CoreOS 开发,采用 Go 语言编写,可以轻松地在多个主机之间共享数据。

支持多个节点之间的数据同步和复制,保证数据的高可用性和可靠性。Etcd 使用 Raft 算法来实现一致性,确保多个节点之间的数据一致性,避免了分布式系统中常见的脑裂和数据丢失问题。

Etcd 是一个高可用、高性能、一致性保证的分布式键值存储系统,可以为分布式系统中的服务发现、配置共享、分布式锁等提供可靠的基础设施。

ETCD适应的场景?

服务发现:在微服务架构中,服务发现是非常重要的一环。Etcd 可以用于存储服务的地址和其他元数据,以便于服务之间的通信和调用。

配置共享:Etcd 可以用于存储应用程序的配置信息,以便于多个应用程序共享和更新,避免了配置信息的重复编写和维护。

分布式锁:Etcd 可以用于实现分布式锁,以确保多个节点之间的资源访问的互斥性和一致性,避免了因为资源竞争而导致的数据不一致问题。

负载均衡:Etcd 可以用于存储后端服务器的地址和状态信息,以便于负载均衡器进行请求转发和故障检测。

分布式任务调度:Etcd 可以用于存储任务的调度信息,以便于多个节点之间协调任务的执行顺序和时间。

ETCD分布式数据同步机制?

Etcd通过Raft协议实现分布式数据同步机制。Raft是一种分布式一致性算法,它的主要目的是确保在集群中所有节点之间达成一致性,从而保证数据的正确性和可靠性。etcd使用Raft协议来保证数据的一致性和可靠性。

在etcd集群中,每个节点都存储着相同的数据副本,每次数据的修改都需要经过Raft算法的一系列阶段,最终确定一个Leader节点来完成数据的更新和同步。如果Leader节点失效,则通过Raft协议重新选举一个新的Leader节点来保证集群的可用性和一致性。

什么是Kubernetes云计算?

Kubernetes是一个用于自动化容器化应用程序部署、扩展和管理的开源平台,它可以在云计算环境中使用。它最初是由Google开发的,现在由Cloud Native Computing Foundation (CNCF) 管理。

K8S提供了一种可扩展的平台,使应用程序可以以容器的形式运行,并动态地调度和管理它们的资源。Kubernetes可以自动化应用程序的部署、水平扩展、故障恢复和滚动升级等任务。同时,它还提供了丰富的API和工具,以便用户可以更轻松地管理他们的应用程序和资源。

Docker虚拟化和Kubernetes区别?

Docker和Kubernetes是两个不同的技术,它们在解决的问题、使用场景和应用方式上都有所不同。

Docker是一种虚拟化技术,它允许将应用程序和它们的依赖项打包到一个称为容器的独立运行环境中,从而实现轻量化和可移植的应用程序部署。Docker虚拟化技术主要解决的是应用程序部署和运行的问题,使得应用程序可以在不同的环境中运行,而无需考虑底层的操作系统和硬件环境。

Kubernetes则是一个用于自动化容器化应用程序部署、扩展和管理的开源平台,它可以在云计算环境中使用。Kubernetes解决的是分布式系统的管理和扩展问题,它可以自动化应用程序的部署、水平扩展、故障恢复和滚动升级等任务。Kubernetes提供了丰富的API和工具,以便用户可以更轻松地管理他们的应用程序和资源。

Docker和Kubernetes都是针对容器化应用程序的技术,但是它们的应用场景和解决问题的重点不同。Docker更侧重于应用程序部署和运行,而Kubernetes更侧重于分布式系统的管理和扩展。通常Kubernetes会使用Docker来实现容器化应用程序的打包和运行,从而提供更高效、可靠和可扩展的应用程序管理和部署环境。

剖析kubeadm、Kubectl、Kubelet概念?

kubeadm是Kubernetes集群的初始化工具,它可以帮助用户快速地部署一个最小化的Kubernetes集群。kubeadm可以在物理机或虚拟机上安装和配置Kubernetes组件,如API Server、etcd、Controller Manager、Scheduler等。使用kubeadm可以大大简化Kubernetes集群的部署和管理。

kubectl是Kubernetes命令行工具,它用于管理和控制Kubernetes集群。kubectl提供了一组命令,用于创建、管理、监控和调试Kubernetes中的各种资源,如Pod、Service、Deployment等。kubectl还可以与Kubernetes API Server进行交互,从而实现集群的管理和控制。

kubelet是Kubernetes节点上的代理程序,它运行在每个节点上,负责管理节点上的容器。kubelet会从Kubernetes API Server中获取Pod的定义,并确保这些Pod在节点上运行。kubelet还会监控Pod的状态,如果发现Pod异常或终止,则会尝试自动重启或进行故障转移。

Kubernetes常见的部署方式?

单节点部署:单节点部署是最简单的部署方式,它可以在单个节点上运行所有Kubernetes组件,包括API Server、etcd、Controller Manager和Scheduler等。单节点部署适用于测试和学习,但不适用于生产环境。

多节点部署:多节点部署是在多个物理机或虚拟机上分布式运行Kubernetes集群。在多节点部署中,每个节点都可以运行Kubernetes组件和容器,从而实现容器化应用程序的管理和部署。

容器化部署:在容器化部署中,Kubernetes组件和容器都运行在容器中,可以使用Docker等容器化技术进行部署和管理。容器化部署可以提高Kubernetes集群的可移植性和可扩展性,从而更容易进行部署和管理。

云原生部署:在云原生部署中,Kubernetes集群部署在云服务提供商的平台上,如AWS、Google Cloud、Azure等。这种部署方式可以提供更多的服务和工具,如自动伸缩、负载均衡和自动备份等,以及更好的可用性和可靠性。

Kubernetes如何实现集群管理?

API Server:Kubernetes API Server是整个Kubernetes集群的核心组件,它提供了Kubernetes资源对象的访问接口。使用API Server,管理员和应用程序可以管理和控制Kubernetes中的各种资源,如Pod、Service、Replication Controller等。

etcd:etcd是Kubernetes集群的数据存储组件,它用于存储集群中的所有资源对象和配置信息。etcd使用分布式存储技术,可以实现高可用性和容错性,保证Kubernetes集群的稳定和可靠性。

控制器:控制器是Kubernetes集群的管理组件,它负责监控集群中的各种资源对象,并确保它们按照用户的期望进行部署和管理。Kubernetes中有很多控制器,如ReplicaSet、Deployment、StatefulSet等,它们可以自动化管理和维护Pod和应用程序的状态,保证它们始终保持在期望的状态下运行。

调度器:Kubernetes调度器负责将Pod分配到合适的节点上运行,以便实现最佳的资源利用和性能。调度器会根据Pod的资源需求和限制,以及节点的资源使用情况和负载情况,选择最佳的节点进行调度和分配。

网络:Kubernetes中的网络组件负责管理和连接容器和节点之间的网络,以便实现容器之间的通信和访问。Kubernetes中的网络模型是基于IP的,使用网络插件和网络策略来实现容器网络的管理和控制。

kube-proxy IPVS原理?

kube-proxy是Kubernetes集群中的一个组件,它负责实现Service对象的负载均衡功能,将请求转发到后端Pod上。kube-proxy支持多种负载均衡模式,包括iptables模式和IPVS模式。在IPVS模式下,kube-proxy使用IPVS实现负载均衡功能,以下是IPVS的原理:

IPVS(IP Virtual Server)是Linux内核的一个模块,它可以实现基于IP地址和端口的负载均衡功能。IPVS工作在内核空间中,可以实现高性能和高可靠性的负载均衡。

在Kubernetes中,当Service对象的类型为LoadBalancer或者ClusterIP时,kube-proxy会使用IPVS来实现负载均衡。具体的实现过程如下:

kube-proxy会在本地的IPVS表中创建一个服务条目,其中包括Service的IP地址和端口号。

当请求到达kube-proxy时,kube-proxy会根据Service的IP地址和端口号,在IPVS表中查找对应的服务条目。

如果找到了对应的服务条目,kube-proxy会根据负载均衡算法(如轮询、源地址哈希等)选择一个后端Pod,并将请求转发到该Pod上。

如果IPVS表中没有找到对应的服务条目,kube-proxy会将请求转发到Service的后端所有Pod中的一个,同时会创建一个新的服务条目,并将请求转发到该条目对应的Pod上。

当Pod的状态发生变化(如Pod被删除或者新增)时,kube-proxy会重新生成IPVS表,并更新对应的服务条目,以保证负载均衡的正确性。

kube-proxy采用的IPVS和Iptables的区别?

IPVS模式比iptables模式更高效、更快速、支持更多的负载均衡算法,并且具有更好的容错性。因此,在Kubernetes集群中,建议使用IPVS模式来实现负载均衡功能。

kube-proxy是Kubernetes集群中的一个组件,它负责实现Service对象的负载均衡功能,将请求转发到后端Pod上。kube-proxy支持多种负载均衡模式,包括iptables模式和IPVS模式。

iptables模式:kube-proxy使用iptables规则实现负载均衡功能。它会在每个节点上创建一组iptables规则,将请求转发到后端Pod上。IPVS模式比iptables模式更高效和更快速。iptables是在用户空间中实现的,性能相对较低。

IPVS模式:kube-proxy使用IPVS实现负载均衡功能。它会在每个节点上创建一个IPVS表,将请求转发到后端Pod上。IPVS是在内核空间中实现的,可以提供更好的性能和更高的吞吐量。

Kubernetes中什么是静态Pod?

在Kubernetes中,静态Pod是一种不依赖于Kubernetes API Server的Pod,可以由kubelet直接管理和调度。相比之下,通常情况下创建的Pod是动态的,需要通过API Server进行创建和管理。

静态Pod的缺点是它们不支持Kubernetes的高级功能,比如自动伸缩、自动恢复等,也不能与其他Kubernetes对象(比如Service和Deployment)进行关联和管理。因此,静态Pod主要适用于一些简单的、独立的服务或工具,而不适合于复杂的应用程序。

Kubernetes中Pod有哪些状态?

Pending:表示Pod正在被调度到某个节点上。在此状态下,Kubernetes会等待节点上的kubelet运行Pod容器。如果节点上没有足够的资源(比如CPU、内存、存储等)来调度Pod,那么Pod就会一直停留在Pending状态。

Running:表示Pod中的容器已经被成功地创建并且正在运行中。此时,kubelet会定期监控容器的运行状态和资源使用情况。

Succeeded:表示Pod中的所有容器已经成功地完成了它们的任务并已经退出。这个状态通常用于一次性任务,比如批处理作业。

Failed:表示Pod中的至少一个容器已经失败并且退出。这个状态通常表示Pod中的应用程序遇到了问题或者容器的配置有误。

Unknown:表示kubelet不能确定Pod的当前状态。这个状态通常是因为kubelet无法与API Server通信或者没有收到来自API Server的响应。

这些状态可以通过kubectl命令或者Kubernetes Dashboard查看,帮助用户了解Pod的状态和问题,进而进行问题排查和故障恢复。

Kubernetes创建一个Pod容器的流程?

在Kubernetes中,创建一个Pod容器的流程通常涉及以下步骤:

编写Pod清单文件:使用YAML或JSON格式编写一个Pod清单文件,指定Pod中的容器镜像、端口、卷、环境变量等相关配置。

提交Pod清单文件:使用kubectl命令提交Pod清单文件到Kubernetes API Server中。API Server会验证Pod清单文件的格式和内容,并生成一个唯一的Pod ID。

调度Pod到节点:Scheduler组件会根据Pod的资源需求和调度策略,选择一个最优的节点,并将Pod的清单文件发送给对应节点的kubelet。

kubelet创建Pod容器:kubelet会根据Pod的清单文件,创建对应的容器。在此过程中,kubelet会将Pod的清单文件解析为一个或多个容器的配置信息,并使用容器运行时(如Docker或CRI-O)来创建容器。

容器准备就绪:kubelet会检查容器的状态,直到容器准备就绪。此时,容器已经被创建并且正在运行中。

更新Pod状态:kubelet会将Pod的状态更新到API Server中,标记为“Running”状态。

监控和调整容器状态:kubelet会定期监控容器的状态和资源使用情况,如果发现容器异常或者资源使用超出限制,kubelet会进行调整和恢复。

Kubernetes中Pod的重启策略?

在Kubernetes中,可以通过定义Pod的重启策略来控制Pod的重启行为。Pod的重启策略有以下三种:

Always:Pod一旦终止,就立即重启。这是默认的重启策略。

OnFailure:只有在Pod因为错误而终止时才重启。

Never:Pod终止时不重启。需要手动重启。

Kubernetes的优势、适应场景及其特点?

Kubernetes 是一个用于容器编排和管理的开源平台,它的优势和适应场景如下:

高度可扩展性:Kubernetes 可以在不影响应用程序的情况下自动进行容器的部署、扩展和管理,这样可以提高应用程序的可用性和可扩展性。

灵活的部署选项:Kubernetes 支持多种部署选项,包括单节点、多节点和混合云环境。这些选项可以根据应用程序的需求进行定制化。

自动化:Kubernetes 可以自动管理容器的部署、扩展、升级和故障转移,这样可以减少人工干预,提高应用程序的可靠性和可用性。

多样化的容器支持:Kubernetes 支持多种容器技术,包括 Docker、rkt、CRI-O 等,这样可以让开发者选择自己喜欢的技术。

多云支持:Kubernetes 可以在多个云平台上运行,包括 AWS、Azure、Google Cloud 等,这样可以让开发者在不同的云环境中使用相同的工具和技术。

灵活的服务发现和负载均衡:Kubernetes 支持多种服务发现和负载均衡的方式,包括 DNS、IPVS 等,这样可以让应用程序在多个节点上运行时自动发现和负载均衡。

安全性:Kubernetes 提供多层安全机制,包括网络安全、访问控制、密钥管理等,可以保证应用程序的安全性。

Kubernetes组件有哪些?

Kubernetes是一个开源的容器编排平台,它由多个组件组成。以下是Kubernetes的主要组件:

kube-apiserver:Kubernetes API Server,是Kubernetes系统中的控制中心。它负责验证和处理API请求,以及管理Kubernetes集群状态的存储。

etcd:是一个高可用的分布式键值存储,用于存储Kubernetes集群的配置数据和状态信息。

kube-scheduler:是Kubernetes的调度器组件,负责将容器调度到适合它们的节点上,以便在整个集群中实现最优的资源利用。

kube-controller-manager:是Kubernetes的控制器管理器组件,它运行多个控制器,以确保集群的状态与用户所定义的期望状态一致。控制器管理器包括节点控制器、副本控制器、服务控制器等。

kubelet:是每个节点上的主要代理组件,负责管理节点上的容器和它们的生命周期,同时与kube-apiserver进行通信以获取指令和更新状态。

kube-proxy:是负责Kubernetes服务发现和负载均衡的代理组件,可以在每个节点上运行一个或多个实例。

Container Runtime:Kubernetes支持多种容器运行时,包括Docker、containerd、CRI-O等。

Kubernetes RC的机制?

Kubernetes Replication Controller是Kubernetes中的一个核心组件,支持定义副本数,监视Pod状态,修复失效的Pod,控制Pod版本等,用于保证Pod数量的高可用性和自动修复,支持版本控制和协同工作,并可以与其他Kubernetes组件集成使用,从而为Kubernetes集群提供强大的功能。

Kubernetes Apiserver的用途?

Kubernetes Apiserver是Kubernetes集群中最核心的组件之一,它为整个系统提供了一致的API服务端点,并负责集群状态的管理、API请求的处理、身份验证和授权等重要功能。

Kubernetes云计算面试题二

kube-proxy作用?

Kube-proxy是Kubernetes集群中的一个重要组件,主要用于实现Kubernetes Service的负载均衡和网络代理。它可以在节点上创建iptables规则,将来自客户端的流量转发到后端的Pod上,支持不同的负载均衡方式,为Kubernetes集群提供了强大的网络功能。

kube-proxy Iptables原理?

Kube-proxy使用Iptables实现负载均衡的原理是,它会在节点上维护一个iptables规则集,根据Service的定义更新规则集,并通过代理进程将来自客户端的流量转发到后端的Pod上。Kube-proxy通过这种方式实现了Service的负载均衡功能,为Kubernetes集群提供了强大的网络功能。

Kubernetes中Pod的健康检查方式?

在Kubernetes中,Pod的健康检查是通过两种方式进行的:Liveness Probe和Readiness Probe。

Liveness Probe可以避免Pod因为应用程序错误或死锁等问题而无法正常工作,而Readiness Probe可以确保Pod已经准备好接收流量,避免流量被转发到尚未准备好的Pod上。同时,Liveness Probe和Readiness Probe还可以对应用程序进行自定义的健康检查,以确保应用程序正常运行。

Kubernetes Pod的常见调度方式?

Kubernetes Pod的常见调度方式包括:

基于Node标签的调度;

基于资源需求的调度;

基于Pod亲和性的调度;

基于Pod反亲和性的调度;

自定义调度器。

Kubernetes deployment升级过程?

创建新的pod版本,新版本的pod可以通过新的Docker镜像或更新的配置文件来实现。

在deployment中的spec.replicas字段指定新的pod数量,这个数量可以跟之前的版本一样,也可以有所变化。

在deployment控制器就会开始逐步将新的pod版本逐个替换掉之前的版本,直到新版本的pod全部替换完成。

这个过程中,deployment控制器会先逐步减少旧版本pod的数量,再逐步增加新版本pod的数量,以避免对服务的影响。

Kubernetes deployment升级策略?

Kubernetes deployment有多种升级策略可供选择,这些策略可以在deployment配置文件的spec.strategy字段中指定,例如:

RollingUpdate:默认策略,表示逐步升级,即先逐步减少旧版本pod的数量,再逐步增加新版本pod的数量。

Recreate:表示先删除所有旧版本pod,然后再创建新版本的pod,这个过程会导致服务的停机时间。

Paused:表示暂停升级,等待手动恢复升级过程。

Canaray:表示逐步将流量转移到新版本的pod上,以确保新版本的pod能够正常工作,然后再将流量全部转移到新版本的pod上。

Kubernetes DaemonSet类型的资源特性?

Kubernetes DaemonSet是一种用于在所有或一部分节点上运行守护进程的控制器,其特性包括:

自动扩缩:当节点的数量增加或减少时,DaemonSet会自动调整守护进程的数量。

节点亲和性:可以通过节点标签和选择器来控制DaemonSet运行在哪些节点上。

网络:可以使用service或headless service为DaemonSet中的pod提供网络服务。

生命周期:可以控制DaemonSet中pod的生命周期,包括创建、更新、删除等。

Kubernetes自动扩容机制?

Kubernetes自动扩容机制是通过Horizontal Pod Autoscaler(HPA)实现的。HPA可以根据CPU利用率、内存利用率、请求速率等指标自动调整pod的数量,以满足服务的负载需求。HPA可以在deployment、replica set和stateful set等资源类型上使用,其原理是根据指标的变化调整pod的数量,并且可以设置最大和最小pod数量以控制扩容的范围。

Kubernetes Service类型?

Kubernetes Service是一种用于暴露应用程序的网络服务的资源类型,其主要作用是将一组pod组成的服务提供给其他应用程序或用户使用。Kubernetes Service有以下几种类型:

ClusterIP:默认类型,只在集群内部暴露服务,通过虚拟IP地址提供服务访问。

NodePort:在每个节点上暴露一个静态端口,可以通过节点的IP地址和这个端口来访问服务。

LoadBalancer:将服务暴露到外部负载均衡器上,可以将流量分配到多个节点和pod上。

ExternalName:将服务映射到集群外部的DNS名称,可以在集群内部使用这个名称来访问服务。

Kubernetes Service分发后端的策略?

Kubernetes Service的分发后端策略可以在Service配置文件的spec.sessionAffinity字段中指定,有以下两种策略:

None:默认策略,表示不考虑客户端的请求,按照负载均衡算法分配后端pod。

ClientIP:表示根据客户端的IP地址将请求分配到同一后端pod上,可以保持会话一致性。

Kubernetes Headless Service?

Kubernetes Headless Service是一种特殊的Service类型,它不会分配虚拟IP地址,而是直接将每个pod的IP地址暴露出来。Headless Service的主要作用是用于服务发现,可以通过DNS名称查询pod的IP地址,以实现直接访问pod的需求。

Kubernetes外部如何访问集群内的服务?

可以通过以下几种方式将集群内的服务暴露给外部访问:

使用NodePort类型的Service,将服务暴露到节点上的静态端口上。

使用LoadBalancer类型的Service,将服务暴露到外部负载均衡器上。

使用Ingress控制器,将多个服务映射到同一个IP地址和端口上,并且可以使用规则来控制访问权限和流量转发。

Kubernetes ingress?

Kubernetes Ingress是一种用于管理服务入口的资源类型,可以将多个Service映射到同一个IP地址和端口上,以实现流量的转发和负载均衡。Ingress控制器是一个单独的组件,可以使用多种负载均衡算法来分配流量,支持HTTPS和SSL证书等安全特性。

Kubernetes镜像的下载策略?

Kubernetes 的镜像下载策略包括以下几种:

Always:总是从镜像源下载最新的镜像,这是默认的下载策略。

Never:不从镜像源下载镜像,使用本地已存在的镜像,如果本地不存在,则会失败。

IfNotPresent:如果本地已存在该镜像,则使用本地的镜像,否则从镜像源下载最新的镜像。

Kubernetes的负载均衡器?

Kubernetes 支持多种负载均衡器,如 kube-proxy、Ingress 和 Service。其中,kube-proxy 是 Kubernetes 默认的负载均衡器,它是一个运行在每个节点上的网络代理,可以将服务的请求转发到后端 Pod 上。Ingress 则是一种 HTTP 和 HTTPS 路由器,可以将外部流量转发到不同的服务上。Service 则是一个抽象层,它为后端 Pod 提供了一个统一的入口地址,并负责将请求转发到后端 Pod 上。

Kubernetes各模块如何与API Server通信?

Kubernetes 的各个组件与 API Server 之间的通信都是通过 RESTful API 实现的。每个组件都有自己的 ServiceAccount 和对应的 Token,用于向 API Server 进行身份认证和权限控制。在与 API Server 进行通信时,组件会向 API Server 发送 HTTP 请求,请求中包含了组件的身份信息和需要执行的操作,API Server 接收到请求后进行身份认证和权限控制,然后返回相应的结果。

Kubernetes Scheduler作用及实现原理?

Kubernetes Scheduler 是 Kubernetes 的一个核心组件,负责将未调度的 Pod 分配到可用的节点上。Scheduler 的实现原理如下:

Scheduler 会定期轮询 API Server,查询未调度的 Pod;

对于每个未调度的 Pod,Scheduler 会将其与各个节点进行匹配,并计算出最佳的节点;

Scheduler 会将 Pod 绑定到最佳的节点上,并将绑定关系写入 API Server。

Kubernetes Scheduler使用哪两种算法将Pod绑定到worker节点?

Kubernetes Scheduler使用两种算法将Pod绑定到worker节点:

Inter-pod affinity/anti-affinity:该算法根据Pod与其他Pod之间的亲和性/反亲和性进行选择,以便将它们调度到同一节点或不同节点上。这可以用来实现一些约束,例如将相关的服务部署在同一个节点上,以减少网络延迟。

Node affinity/anti-affinity:该算法根据节点的标签进行选择,以便将Pod调度到符合特定条件的节点上,例如需要某个特定硬件或软件配置的节点,或避免调度到某些节点上以实现资源隔离。

Kubernetes kubelet的作用?

kubelet作为每个节点上的代理,负责与Kubernetes API服务器通信并接收Pod的指令。当Kubernetes调度器决定要在节点上启动一个新的Pod时,kubelet会根据Pod规范拉取相关的镜像,启动并管理容器的生命周期。

Kubernetes kubelet监控Worker节点资源是使用什么组件来实现的?

Kubernetes kubelet监控Worker节点资源是使用kubelet自带的cAdvisor组件来实现的。cAdvisor是一个轻量级的容器资源使用和性能分析代理,用于监视容器和其内部的进程。kubelet会在节点上运行cAdvisor,以监测Pod和容器的资源使用情况,并将这些数据报告给Kubernetes API服务器和其他监控工具。

Kubernetes如何保证集群的安全性?

RBAC授权:使用基于角色的访问控制(RBAC)来定义谁可以对Kubernetes API执行哪些操作。

网络隔离:使用Kubernetes Network Policy来定义Pod之间和Pod与外部网络之间的网络流量。

沙箱环境:使用Kubernetes中的Pod Security Policies来定义哪些容器可以在Pod中运行以及使用哪些安全机制。

容器镜像安全:使用容器镜像扫描工具,如Kubernetes Admission Controllers和kube-bench等工具来保证镜像的安全性。

机密管理:使用Kubernetes中的Secrets和ConfigMaps来管理机密和配置信息,并使用Secrets来安全地将这些信息传递给Pod。

安全扩展:使用Kubernetes中的Security Contexts来为Pod和容器指定安全上下文,并确保它们在运行时具有足够的权限和资源限制。

Kubernetes云计算面试题三

Kubernetes RBAC及其特点(优势)?

RBAC(Role-Based Access Control)是Kubernetes中的一种授权机制,它基于角色进行授权管理。RBAC通过将权限授予特定的角色,再将角色授予用户或用户组,来实现对Kubernetes资源的授权访问。

RBAC的优势包括:

细粒度授权:RBAC提供了对Kubernetes资源的细粒度控制,可以通过角色和绑定控制用户对不同资源的访问权限。

灵活性:RBAC提供了更灵活的授权机制,可以根据实际需求来定义角色和权限。

安全性:RBAC提供了更高的安全性,可以限制用户的权限,避免用户对敏感资源进行非法操作。

简单易用:RBAC的使用和配置都相对简单,易于上手和管理。

Kubernetes Secret作用?

Kubernetes Secret用于存储敏感数据,如API密钥、密码等,并且能够确保这些敏感数据在Kubernetes集群中的传输和存储过程中不被暴露。Secret可以被Pod、ReplicationController、Deployment等Kubernetes资源引用,用于配置容器运行时的环境变量、挂载到容器的数据卷中、以及其他一些需要使用敏感数据的场景中。

Kubernetes共享存储的作用?

Kubernetes共享存储允许多个Pod访问相同的持久化存储,从而可以实现数据共享和协作,提高应用程序的可用性和可靠性。共享存储通常由网络文件系统(NFS)、iSCSI、Ceph等存储后端提供支持。

Kubernetes数据持久化的方式有哪些?

主机路径(HostPath):使用主机节点上的文件系统存储数据。

空白存储(EmptyDir):用于在容器之间临时共享数据,也可以用于一些缓存等非持久性数据的存储。

持久卷(PersistentVolume):提供了一种抽象层,将存储资源从底层存储中解耦出来,以便更容易地管理和使用。

动态存储卷(Dynamic Provisioning):自动创建PersistentVolume,并将其与申请者的PersistentVolumeClaim绑定,使Pod可以使用持久化存储。

Kubernetes PV和PVC?

PV(Persistent Volume)是Kubernetes中抽象的存储卷,它可以与具体的存储后端绑定,如NFS、GlusterFS、Ceph等。

PVC(Persistent Volume Claim)则是对PV的请求和声明,它表示对一定容量和访问模式的存储的需求。PVC可以通过指定StorageClass,请求符合特定要求的PV。

Kubernetes PV生命周期内的阶段?

Kubernetes PV的生命周期包含四个阶段:

Available:PV被成功地创建并且尚未被绑定到PVC

Bound:PV被绑定到PVC,表示已经被使用

Released:PVC被删除后,PV从绑定的状态返回到可用状态

Failed:PV的后端存储已经不可用,无法再绑定到PVC

Kubernetes所支持的存储供应模式?

Kubernetes支持以下三种存储供应模式:

静态供应模式:管理员预先创建PV,并将其设置为"Available"状态。然后用户可以通过PVC请求PV,该请求将自动与可用的PV进行绑定。

动态供应模式:管理员创建StorageClass,定义了PV应该如何创建以及如何与PVC绑定。用户只需创建PVC并指定StorageClass名称,PV会根据StorageClass的规则自动创建。

外部供应模式:外部存储插件通过Kubernetes的Volume插件接口来实现存储的供应。

Kubernetes Worker节点加入集群的过程?

Kubernetes Worker节点加入集群的过程包括以下几个步骤:

在Master节点上使用kubectl命令或在Kubernetes API Server上创建新的Node对象。

Worker节点通过kubelet组件向Kubernetes API Server注册自己,此时Worker节点的状态为"Unschedulable",即还没有调度到Pod。

Scheduler组件会根据调度算法将Pod分配到某个Worker节点上。

kubelet将Pod部署到Worker节点上并启动容器。

Kubernetes Pod如何实现对节点的资源控制?

Kubernetes Pod可以通过设置资源限制(Limits)和资源请求(Requests)来实现对节点资源的控制。资源限制指的是Pod最大可使用的资源量,超过该值容器将被终止,而资源请求则是容器启动时需要的资源数量。Kubernetes会基于Pod的资源请求和限制来调度Pod,确保每个节点上的容器不会超过节点的资源限制。

Kubernetes Requests和Limits如何影响Pod的调度?

Kubernetes中的Requests和Limits可以帮助集群管理员更好地管理资源。Requests指定Pod所需的资源数量,而Limits指定Pod可以使用的资源数量上限。当集群资源有限时,调度程序可以使用这些信息来决定将Pod放置在哪个节点上。

如果某个节点上的Pod请求的资源超出了节点的可用资源,则该节点不会调度该Pod。如果一个节点上的Pod在运行时需要超过它的Limits指定的资源量,则Pod会被驱逐,因为它超出了允许使用的资源范围。

Kubernetes Secret有哪些使用方式?

Kubernetes Secret用于存储敏感数据,如密码、密钥等。它有以下使用方式:

使用命令行工具kubectl创建Secret;

使用YAML文件来创建Secret;

在Pod的环境变量中使用Secret;

在Pod的卷中使用Secret。

Kubernetes PodSecurityPolicy机制?

PodSecurityPolicy是一种Kubernetes资源对象,用于限制Pod的安全特性,例如运行特权容器、使用主机网络命名空间、挂载主机文件系统等。 PodSecurityPolicy可以应用于整个集群或特定的命名空间,并允许管理员控制哪些Pod可以创建和运行。

Kubernetes PodSecurityPolicy机制能实现哪些安全策略?

PodSecurityPolicy可以用来实现以下安全策略:

限制Pod对主机文件系统的访问;

限制Pod对网络命名空间的访问;

限制Pod的运行特权容器;

限制Pod的权限;

限制Pod的主机端口使用。

Kubernetes网络模型?

Kubernetes的网络模型是基于CNI(容器网络接口)规范的,它使用插件来实现网络抽象。每个节点上都有一个CNI插件,负责在节点上创建网络接口,并将Pod连接到网络。

Kubernetes中的每个Pod都有一个独立的IP地址,并且可以在集群中的任何节点之间自由移动。这种网络模型使得Kubernetes中的Pod可以像虚拟机一样运行,而不必考虑网络拓扑或IP地址冲突的问题。

Kubernetes CNI模型?

Kubernetes的网络模型是基于CNI(容器网络接口)规范的。CNI是一个轻量级的规范,定义了如何在容器和宿主机之间创建网络接口,并将容器连接到网络。

Kubernetes使用CNI插件来实现网络抽象。每个节点上都有一个CNI插件,负责在节点上创建网络接口,并将Pod连接到网络。Kubernetes支持多种CNI插件,例如flannel、Calico、Weave Net等。

Kubernetes网络策略?

Kubernetes网络策略(Network Policies)是一种用于控制Pod之间通信的机制。它允许管理员定义在集群中允许或拒绝的网络通信。网络策略可以控制哪些Pod可以与其他Pod通信,以及如何通信,例如允许或拒绝特定协议或端口的通信。

Kubernetes网络策略原理?

Kubernetes网络策略的实现原理基于网络插件和iptables规则。网络插件需要支持Network Policy API,以便Kubernetes API Server可以将网络策略规则传递给网络插件。网络插件然后使用iptables规则来配置Pod的网络策略。iptables规则是一组规则,用于检查和修改数据包的流量。

Kubernetes中flannel的作用?

Flannel是Kubernetes中的一个网络插件,它提供了一种简单的方法来配置集群中Pod之间的网络连接。Flannel创建了一个虚拟网络,该网络将Pod的IP地址映射到宿主机上的一个网络接口上。这使得Pod可以通过虚拟网络互相通信,而无需考虑它们在哪个宿主机上运行。

Kubernetes Calico网络组件实现原理?

Calico是一种Kubernetes网络组件,它使用BGP路由协议和Linux内核的netfilter框架来实现网络连接。Calico使用BGP路由协议来动态地计算网络路径,以便将数据包从源地址转发到目的地址。它使用netfilter框架来配置iptables规则,以便对入站和出站流量进行筛选和转发。

Kubernetes中,如何使用EFK实现日志的统一管理?

EFK是指Elasticsearch、Fluentd和Kibana。它们是一组开源工具,用于实现日志的统一管理。Kubernetes中使用EFK,需要在集群中部署Elasticsearch、Fluentd和Kibana组件,并配置它们来处理和存储Pod生成的日志。Fluentd是负责收集Pod日志的组件,它将日志发送到Elasticsearch进行存储和索引。Kibana是一个Web界面,用于搜索和可视化存储在Elasticsearch中的日志。

Kubernetes如何不影响业务对节点关机维护?

在Kubernetes中,可以使用节点亲和性(Node Affinity)和 Pod 亲和性(Pod Affinity)来指定 Pod 应该在哪些节点上运行。这样,在维护一个节点时,可以首先将节点上的 Pod 调度到其他节点上,然后对节点进行关机维护。在维护完成后,再将 Pod 调度回该节点。这个过程可以使用 Kubernetes 中的滚动升级(Rolling Update)机制来实现。

另外,还可以使用 Pod Disruption Budget(PDB)来限制在一个时间段内可以停止的 Pod 的数量。这可以确保在关机维护期间,只有受 PDB 限制的数量的 Pod 被停止,从而减少对业务的影响。

Kubernetes Helm及其优势?

Kubernetes Helm 是一个开源的应用程序包管理器,用于简化 Kubernetes 应用程序的安装、升级和配置。Helm 允许用户创建和共享可重用的应用程序包,称为 Charts,这些 Charts 包含了应用程序所需的 Kubernetes 资源和参数配置。Helm Charts 可以像软件包一样分发,从而简化了应用程序的安装和部署。

简化应用程序的安装和部署:通过 Helm Charts,用户可以轻松地将 Kubernetes 应用程序打包并部署到集群中,从而简化了应用程序的安装和部署过程。

提供可重用的 Charts:用户可以创建和共享自己的 Charts,这些 Charts 包含了常见应用程序的 Kubernetes 配置,从而提高了部署的效率。

管理应用程序版本:Helm 允许用户轻松地升级和回滚应用程序的版本,从而简化了应用程序的管理和维护。

提供参数化配置:Helm Charts 支持参数化配置,使用户可以轻松地自定义应用程序的配置选项。

社区支持:Helm 是一个开源项目,拥有一个庞大的社区,提供了广泛的文档、教程和示例代码,使用户可以更轻松地使用和定制 Helm。

Kubernetes云计算面试题四

Kubernetes是什么?请说出你的了解?

Kubernetes是一种开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了一种简单而有效的方式来管理应用程序和服务,并确保它们始终可用。Kubernetes可以自动管理容器的部署、网络和存储等方面,从而使开发人员能够专注于编写代码而不是部署和管理基础设施。

Kubernetes架构的组成是什么?

Master节点: 负责管理和控制整个集群,包括调度、部署、监控、管理等。

Worker节点: 运行应用程序容器的节点,也称为Minion节点。

Pod: 一组紧密关联的容器,共享存储和网络资源。

Controller: 用于自动化管理Pod的副本数、自动扩缩容等。

Service: 为一组Pod提供访问的稳定网络端点。

Volume: 提供Pod所需的持久化存储。

Label和Annotation: 用于标识和描述Kubernetes对象。

API Server: 用于提供对集群状态的访问。

etcd: 用于存储集群状态和配置信息。

Scheduler: 用于决定在哪个节点上运行新的Pod。

Container Runtime: 用于管理和运行容器。

Kubernetes有几种查看标签的方式?

在Kubernetes中,有多种查看标签的方式,包括:

使用kubectl get命令,使用-l选项指定标签,例如:kubectl get pods -l app=nginx。

在Kubernetes Web控制台中查看资源的标签信息。

使用kubectl describe命令查看资源的详细信息,包括标签信息。

Kubernetes添加、修改、删除标签的命令?

在Kubernetes中,可以使用kubectl命令来添加、修改和删除标签。下面是一些示例命令:

添加标签:kubectl label pods my-pod app=nginx。

修改标签:kubectl label pods my-pod app=Nginx --overwrite。

删除标签:kubectl label pods my-pod app-。

Kubernetes DaemonSet资源对象的特性?

Kubernetes中的DaemonSet是一种用于在每个节点上运行一个副本的Pod的资源对象。它有以下特性:

每个节点上只会运行一个副本的Pod。

新节点加入集群时,会自动在新节点上启动一个Pod。

当节点离开集群时,与该节点上的Pod相对应的Pod也会被删除。

当需要对所有节点运行的Pod进行更新时,可以使用DaemonSet进行滚动更新。

说说你对Job这种资源对象的了解?

Job是Kubernetes中的一种资源对象,用于执行一批并发或连续的任务,它确保其中一个或多个Pod成功完成任务,而其他Pod则会自动停止。Job定义了任务需要完成的工作,以及完成工作所需的容器镜像。一旦任务完成,与Job关联的Pod将不再存在。

描述一下pod的生命周期有哪些状态?

Pending:Pod正在被调度,且需要等待一些资源才能运行。

Running:Pod已经被调度到节点上并正在运行。

Succeeded:Pod内的所有容器都已成功完成并退出。

Failed:Pod内至少有一个容器以非零状态退出。

Unknown:无法获取Pod的状态,通常是由于与Pod通信的组件发生故障。

创建一个pod的流程是什么?

编写Pod的配置文件(Pod YAML文件)。

使用kubectl命令行工具将Pod配置文件发送到Kubernetes API服务器。

Kubernetes API服务器接受到Pod配置文件后,将根据其中的定义来调度和运行Pod。

调度器(Scheduler)将为Pod选择一个节点,并将Pod绑定到该节点上。

kubelet代理程序将在该节点上启动Pod中定义的容器。

当Pod中的所有容器成功启动并且至少一个容器仍在运行时,该Pod将进入Running状态。

容器和主机部署应用的区别是什么?

容器部署是指将应用程序的组件打包为容器镜像,然后将这些容器镜像部署在Kubernetes集群中的Pod中。这种部署方式可以为每个容器提供独立的运行环境,使得应用程序更加稳定和可靠。

相比之下,主机部署是将应用程序的组件直接安装在主机上运行,这种部署方式需要手动管理依赖项和配置,容易产生版本冲突和依赖性问题,不够灵活。

请你说一下Kubernetes针对pod资源对象的健康监测机制?

Kubernetes通过livenessProbe和readinessProbe两种机制来监测Pod中容器的健康状态。livenessProbe用于检测容器是否存活,readinessProbe用于检测容器是否准备好接受流量。如果livenessProbe或readinessProbe返回错误状态,Kubernetes会自动重启容器或者将容器从负载均衡器中移除,以确保Pod中的容器始终处于健康状态。

Kubernetes如何控制滚动更新过程?

Kubernetes使用滚动更新机制来控制Pod的更新过程,可以通过控制器中的两个参数来定义滚动更新策略:maxUnavailable和maxSurge。其中,maxUnavailable指定在更新过程中最多可以有多少个Pod不可用,maxSurge指定在更新过程中最多可以有多少个Pod新增。这些参数可以根据需要进行调整,以满足应用程序更新。

Kubernetes中镜像的下载策略是什么?

Kubernetes中使用的镜像下载策略主要有以下两种:

Always:始终拉取镜像,即使本地已经存在相同镜像。

IfNotPresent:只有在本地不存在相同镜像时才会拉取镜像,否则直接使用本地镜像。

Kubernetes image的状态有哪些?

Kubernetes中的镜像状态主要有以下三种:

Image:表示该镜像已经成功地被拉取并存储在本地,可供容器使用。

ImagePullBackOff:表示拉取镜像的尝试已经失败了多次,无法拉取镜像。

ErrImagePull:表示拉取镜像的尝试已经失败了多次,无法拉取镜像。

Kubernetes pod的重启策略是什么?

Kubernetes中的Pod有以下两种重启策略:

Always:始终重启容器。当容器因为异常退出或被删除时,Kubernetes将自动重启该容器。

OnFailure:仅在容器非正常退出时才重启容器。如果容器因为异常退出或被删除,则Kubernetes将重启该容器。

Kubernetes Service这种资源对象的作用是什么?

Kubernetes中的Service是一种虚拟的资源对象,用于将一组具有相同标签的Pod暴露为一个网络服务。Service的主要作用是为Pod提供一个稳定的IP地址和DNS名称,并实现负载均衡和服务发现。当创建Service时,Kubernetes会创建一个代理,负责将所有来自Service的流量分发到后端的Pod上。

Kubernetes 版本回滚相关的命令?

Kubernetes提供了以下命令来进行版本回滚操作:

kubectl rollout history:查看Deployment或者ReplicaSet的历史版本信息。

kubectl rollout undo:回滚到指定版本的Deployment或者ReplicaSet。

kubectl rollout pause:暂停Deployment或者ReplicaSet的滚动升级。

kubectl rollout resume:恢复Deployment或者ReplicaSet的滚动升级。

Kubernetes 标签与标签选择器的作用是什么?

Kubernetes 中的标签是一个键值对,可以将它们添加到 Kubernetes 资源对象的元数据中,以便于识别和分类这些对象。标签通常用于选择和过滤资源,以便在群集中定位和操作它们。标签选择器是用于根据资源标签对 Kubernetes 资源进行选择和筛选的机制。

Kubernetes 常用的标签分类有哪些?

Kubernetes 中的标签分类通常根据业务需求进行自定义,但是也有一些通用的标签分类,如下所示:

应用程序:通常使用应用程序的名称、版本和部署环境来标记资源。

环境:标记资源的运行环境,如开发、测试、生产等。

部门:标记资源所属的部门或团队。

版本:标记资源的版本。

安全:标记资源的安全级别或风险等级。

需求:标记资源的用途或业务需求。

Kubernetes 删除一个Pod会发生什么事情?

当一个 Pod 被删除时,Kubernetes 控制平面会通知工作节点,工作节点会将 Pod 中运行的容器杀死并清理 Pod 所占用的资源,例如网络端口、存储卷等。此外,Pod 的状态将更改为“Terminating”,并删除该 Pod 的所有相关资源,例如日志和事件。

Kubernetes的Service是什么?

在Kubernetes 中,Service 是一种虚拟对象,用于定义一组 Pod 的逻辑集合和一种访问这些 Pod 的方式。Service 提供一个固定的 IP 地址和 DNS 名称,使得其他应用程序可以轻松地访问到这组 Pod。Service 还支持负载均衡、服务发现和故障恢复等功能。

Kubernetes是怎么进行服务注册的?

在Kubernetes 中,Service 的 IP 地址和 DNS 名称是通过 DNS 服务自动注册和解析的。当 Service 被创建时,Kubernetes 控制平面会自动将该 Service 的 IP 地址和 DNS 名称添加到群集内的 DNS 服务中,其他应用程序可以通过这些信息来访问该 Service。

Kubernetes集群外流量怎么访问Pod?

使用服务(Service):创建一个Kubernetes服务,服务会绑定一个唯一的IP地址和端口,然后将请求路由到后端Pod的IP地址和端口。

使用节点端口(NodePort):在Kubernetes节点上监听一个端口,然后将请求路由到后端Pod的IP地址和端口。这个端口范围是30000-32767。

Kubernetes数据持久化的方式有哪些?

Persistent Volumes(PVs):PV是一种独立于Pod的资源,用于将存储卷挂载到Pod中。管理员可以创建PV,并将其提供给用户使用。

Persistent Volume Claims(PVCs):PVC是一个声明,它请求PV的一部分容量和一些访问模式(如读/写或只读)。PVC使用户无需关心如何配置PV。

StatefulSets:StatefulSet是一种控制器,用于管理有状态应用程序的Pod。它确保Pod按顺序启动和关闭,并为每个Pod分配一个稳定的网络标识符和持久存储。

ConfigMaps和Secrets:ConfigMaps和Secrets是将配置信息和密码等敏感信息存储为Kubernetes对象的方法。它们可以被挂载到Pod中,以便应用程序可以读取配置信息和密码。

Kubernetes云计算面试题五

Kubernetes与Docker Swarm的区别如何?

Kubernetes具有更多的功能和扩展性,可以用于大规模的、复杂的应用程序部署和管理,而Docker Swarm更适用于小规模、简单的应用程序。

Kubernetes使用API对象来定义应用程序和资源,而Docker Swarm使用类似于Docker Compose文件的声明式语法。

Kubernetes提供了更多的扩展和自定义选项,例如通过插件支持不同的网络和存储解决方案,而Docker Swarm的功能相对较少。

在主机和Pod容器上部署应用程序有什么区别?

在主机上部署应用程序通常意味着直接在主机的操作系统上运行应用程序,而在Pod容器中部署应用程序意味着应用程序运行在容器化的环境中,这个环境可以隔离应用程序的运行环境,使其不受主机操作系统的影响。此外,使用Pod容器还可以更好地管理应用程序的生命周期,如启动、停止、扩展和缩减等。

你对Kube-proxy有什么了解?

Kube-proxy是Kubernetes中的一个网络代理组件,主要用于在集群节点之间路由网络流量。它负责维护每个节点上的网络规则,以及为Service对象提供服务发现和负载均衡功能。Kube-proxy通过在节点上运行iptables规则来实现这些功能。

能否介绍一下Kubernetes中主节点的工作情况?

Kubernetes中的主节点(Master)是集群的控制平面,它负责管理整个集群的状态和配置,包括节点的注册和发现、应用程序的调度和扩缩容、服务发现和负载均衡、监控和日志收集等。主节点通常包含以下组件:

API Server:接受来自客户端和集群节点的API请求,验证和处理请求,并将结果返回给请求方。

Controller Manager:包含各种控制器,如ReplicaSet Controller、Deployment Controller、Service Controller等,用于管理集群状态和实现各种自动化功能。

Scheduler:根据调度策略和资源约束,将应用程序调度到最合适的节点上运行。

etcd:一个分布式键值存储系统,用于存储集群状态和配置信息。

kube-apiserver和kube-scheduler的作用是什么?

kube-apiserver是Kubernetes的控制平面组件之一,它是集群的API服务器,用于接受来自客户端和集群节点的API请求,验证和处理请求,并将结果返回给请求方。kube-scheduler是Kubernetes的另一个控制平面组件,用于根据调度策略和资源约束,将应用程序调度到最合适的节点上运行。

你对Kubernetes的负载均衡器有什么了解?

Kubernetes的负载均衡器通常使用Service对象来实现,它可以将客户端请求分发给后端Pod容器,以实现负载均衡和高可用性。Service对象通常使用一种称为ClusterIP的虚拟IP地址来代表后端Pod,客户端可以通过这个虚拟IP地址访问后端服务。此外,Kubernetes还支持外部负载均衡器和Ingress网络来实现更复杂的负载均衡场景。

什么是Ingress网络,它是如何工作的?

Ingress网络是Kubernetes中的一个资源对象,用于将外部流量路由到后端服务。它允许管理员定义规则,指定如何将外部流量路由到服务。通常情况下,Ingress对象使用一个或多个负载均衡器将流量路由到后端服务,同时支持HTTPS、虚拟主机和路径匹配等高级特性。

什么是Heapster?

Heapster是Kubernetes中的一个监控和性能分析工具,用于收集集群和容器级别的度量指标,并将其展示在Kubernetes的Dashboard中。Heapster可以收集CPU、内存、网络和磁盘等资源的使用情况,并将其转换为可视化的图表和指标数据。

什么是Kubeadm?

Kubeadm是Kubernetes的一个命令行工具,用于快速部署和初始化Kubernetes集群。它提供了一种简单的方式来自动化集群的创建、节点注册和配置,以及安装必要的组件和插件。

什么是Kubectl?

Kubectl是Kubernetes的命令行客户端工具,用于与集群进行交互,并管理容器化应用程序。它支持多种操作,如部署和管理应用程序、查看和监控集群状态、扩缩容应用程序、创建和管理资源对象等。

什么是Kubelet?

Kubelet是Kubernetes的一个组件,它运行在每个节点上,用于管理节点上的容器。它负责将Pod描述符转换为一组容器,并确保这些容器正常运行。Kubelet还负责将容器的状态报告给Kubernetes的控制平面。

什么是Container资源监控?

Container资源监控是指Kubernetes监控容器运行时的资源使用情况,例如CPU、内存和网络等。它可以帮助管理员和开发人员了解容器的性能和健康状态,并优化资源使用。

Replica Set和Replication Controller之间有什么区别?

Replica Set和Replication Controller都是Kubernetes中用于管理Pod副本的控制器。其中,Replication Controller是Kubernetes早期版本的控制器,而Replica Set是其后续版本中引入的一种控制器。相较于Replication Controller,Replica Set具有更丰富的选择器支持和更灵活的Pod副本控制能力。

什么是Headless Service?

Headless Service是一种特殊类型的Kubernetes服务,它不使用ClusterIP,而是使用自己的IP地址列表来表示后端Pod,通常用于需要直接访问Pod IP地址的场景,例如数据库集群。

Kubernetes数据持久化的方式有哪些?

Kubernetes提供了多种方式来持久化数据,包括使用本地存储卷、动态存储卷、网络存储卷和对象存储等。其中,本地存储卷和动态存储卷是常用的方式,可以使用本地磁盘或网络存储提供商来持久化数据。

Kubernetes创建一个pod的流程是什么?

创建一个Pod的流程通常包括以下几个步骤:首先,用户创建一个Pod描述符,描述要运行的容器和其它属性;接着,Kubernetes的API服务器接收到Pod描述符并进行验证和存储;然后,调度器将Pod分配到适合的节点上;最后,Kubelet在该节点上创建并运行Pod中的容器,并将容器的状态报告给控制平面。

Kubernetes Ingress和Service区别什么?

Kubernetes中Service用于将外部流量路由到后端Pod,而Ingress用于将外部流量路由到Service,同时支持高级特性如路径匹配和TLS终止等。Service和Ingress是两个不同的Kubernetes资源,Service通常用于内部服务发现,而Ingress用于外部流量管理。

Kubernetes中yaml配置清单的最基本结构?

Kubernetes中yaml配置清单的最基本结构通常包括apiVersion、kind、metadata和spec四个字段。其中,apiVersion和kind用于指定清单的类型和版本,metadata用于指定清单的名称和标签等元数据信息,spec用于指定清单的规格和配置信息。

Ingress-Nginx的工作原理?

Ingress-Nginx 作为 Kubernetes 集群中的一个组件,可以通过使用 kubectl 命令部署在 Kubernetes 集群中。

用户可以在 Kubernetes 中创建 Ingress 对象,以便将请求路由到 Kubernetes 集群中的服务。Ingress 对象定义了一组规则,指定如何将入站请求转发到服务。每个规则指定一个主机名、一个 URL 路径和一个服务。

当一个入站请求到达 Ingress-Nginx,Ingress-Nginx 会检查该请求是否匹配任何规则。如果匹配,则它会将请求转发到相应的服务。

Ingress-Nginx 会根据 Ingress 对象中定义的规则,将请求路由到正确的后端服务。它还支持负载均衡,可以将请求均匀地分配给多个后端服务。

Ingress-Nginx 还支持 SSL 终止,可以在负载均衡器级别上实现 SSL 加密和解密,从而减轻后端服务的负担。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表