Kubernetes自测题(一)-基础部分

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 什么是 Kubernetes ?Kubernetes 是一个基于容器技术的分布式开源平台,主要功能是生产环境中的容器编排。

什么是 Kubernetes ?

Kubernetes 是一个基于容器技术的分布式开源平台,主要功能是生产环境中的容器编排。

在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。并且具有完备的集群管理能力,多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现自我修复能力服务滚动升级在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。

网络异常,图片无法展示
|


Kubernetes 的常见场景如下:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用


Kubernetes 有那些特点 ?

Kubernetes 特点如下:

  • 可移植:支持公有云,私有云,混合云,多重云(multi-cloud)。
  • 可扩展:模块化,插件化,可挂载,可组合。
  • 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展。


简述Kubernetes的优势 ?

Kubernetes 作为一个完备的分布式系统支撑平台,其主要优势:

  • 容器编排
  • 轻量级
  • 开源
  • 弹性伸缩
  • 负载均衡

简述 Kubernetes 的缺点或当前的不足之处?

Kubernetes当前存在的缺点(不足)如下:

  • 安装过程和配置相对困难复杂。
  • 管理服务相对繁琐。
  • 运行和编译需要很多时间。
  • 它比其他替代品更昂贵。

对于简单的应用程序来说,可能不需要涉及Kubernetes即可满足。


Kubernetes 服务的负载均衡是如何实现的?

Pod 中的容器很可能因为各种原因发生故障而死掉。Deployment 等 Controller 会通过动态创建和销毁 Pod 来保证应用整体的健壮性。

换句话说,Pod 是脆弱的,但应用是健壮的。每个 Pod 都有自己的 IP 地址。当 Controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址。

这样就产生了一个问题:如果一组 Pod 对外提供服务(比如: HTTP),它们的 IP 很有可能发生变化,那么客户端如何找到并访问这个服务呢?

Kubernetes 给出的解决方案是 Service。Kubernetes Service 从逻辑上代表了一组 Pod,具体是哪些 Pod, 则是由 Label 来挑选。 Service 有自己 IP,而且这个 IP 是不变的。客户端只需要访问 Service 的 IP,Kubernetes 则负责建立和维护 Service 与 Pod 的映射关系。

无论后端 Pod 如何变化,对客户端不会有任何影响,因为 Service 没有变。


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

容器的中心思想就是秒级启动,一次封装、到处运行

这是主机部署应用无法达到的效果,但同时也更应该注重容器的数据持久化问题。

另外,容器部署可以将各个服务进行隔离,互不影响,这也是容器的另一个核心概念。

简述 Kubernetes 和 Docker 的关系?

Docker 提供容器的生命周期管理和 Docker 镜像构建运行时容器。它的主要优点是将软件/应用程序运行所需的设置和依赖项打包到一个容器中,从而实现了可移植性等优点。

Kubernetes 用于关联和编排在多个主机上运行的容器

什么是 Kubectl 和 Kubelet ?

Kubectl 是一个命令行工具,可以使用该工具控制 Kubernetes 集群管理器,如检查群集资源,创建、删除和更新组件,查看应用程序。

Kubelet 是一个代理服务,它在每个节点上运行,并使从服务器与主服务器之间进行通信


简述Kubernetes kubelet的作用?

在Kubernetes集群中,在每个 Node(又称 Worker)上都会启动一个 kubelet 服务进程。

该进程用于处理 Master 下发到本节点的任务,管理 Pod 及 Pod 中的容器

每个 kubelet 进程都会在 API Server 上注册节点自身的信息,定期向Master 汇报节点资源的使用情况,并通过 cAdvisor 监控容器和节点资源。


简述Kubernetes如何实现集群管理?

在集群管理方面,Kubernetes 将集群中的机器划分为一个 Master 节点和一群工作(Node)节点。

其中,在 Master 节点运行着集群管理相关的一组进程 kube-apiserverkube-controller-managerkube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。


简述 Kubernetes 相关基础概念?

  • Master:Kubernetes 集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程。
  • Node(Worker):Node(Worker)是Kubernetes集群架构中运行Pod的服务节点,是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。运行Docker Engine服务,守护进程kunelet及负载均衡器kube-proxy
  • Pod:运行于 Node 节点上,一个Pod可以包含一个容器或者多个相关容器。Pod 是 Kurbernetes 进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。 Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。
  • Label:Kubernetes中的Label实质是一系列的Key/Value键值对,其中key与value可自定义。Label可以附加到各种资源对象上,如Node、Pod、Service、RC等。一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Kubernetes通过Label Selector(标签选择器)查询和筛选资源对象。
  • Replication Controller:Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量。反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
  • Deployment:Deployment 在内部使用了 RS 来实现目的,Deployment相当于 RC 的一次升级,其最大的特色为可以随时获知当前 Pod 的部署进度。
  • HPA(Horizontal Pod Autoscaler):Pod 的横向自动扩容,也是Kubernetes 的一种资源,通过追踪分析 RC 控制的所有 Pod 目标的负载变化情况,来确定是否需要针对性的调整 Pod 副本数量。
  • Service:Service 定义了 Pod 的逻辑集合和访问该集合的策略,是真实服务的抽象。Service 提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同 Label 的 Pod,用户不需要了解后台Pod是如何运行。
  • Volume:Volume 是 Pod 中能够被多个容器访问的共享目录,Kubernetes 中的 Volume 是定义在 Pod 上,可以被 Pod 中一个或多个的容器挂载到某个目录下。
  • Namespace:Namespace 用于实现多租户的资源隔离,可将集群内部的资源对象分配到不同的Namespace中,形成逻辑上的不同项目、小组或用户组,便于不同的Namespace在共享使用整个集群的资源的同时还能被分别管理。

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

答:可通过命令kubectl explain pod.spec.containers来查看imagePullPolicy这行的解释。

K8s的镜像下载策略有三种:Always、Never、IfNotPresent;

  • Always:总是从指定的仓库中获取镜像;
  • Never:禁止从仓库中下载镜像,也就是说只能使用本地镜像;
  • IfNotPresent:仅当本地没有对应镜像时,才从目标仓库中下载。

默认的镜像下载策略是:

  • 当镜像标签是latest时,默认策略是Always;
  • 当镜像标签是自定义时(也就是标签不是latest),那么默认策略是IfNotPresent。


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

Pod启动后,会加载当前环境所有Service信息,以便不同Pod根据Service名进行通信。

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

Kubernetes API Server作为集群的核心,负责集群各功能模块之间的通信。

集群内的各个功能模块通过API Server将信息存入etcd,当需要获取和操作这些数据时,则通过API Server提供的REST接口(用GET、LIST或WATCH方法)来实现,从而实现各模块之间的信息交互。

  • kubelet进程与API Server的交互:每个 Node 上的 Kubelet 每隔一个时间周期,就会调用一次API Server的REST接口报告自身状态,API Server在接收到这些信息后,会将节点状态信息更新到etcd中。
  • kube-controller-manager进程与API Server的交互:kube-controller-manager中的 Node Controller模块通过API Server提供的Watch接口实时监控Node的信息,并做相应处理。
  • kube-scheduler进程与API Server的交互:Scheduler通过API Server的Watch接口监听到新建 Pod 副本的信息后,会检索所有符合该 Pod 要求的Node列表,开始执行 Pod 调度逻辑,在调度成功后将 Pod 绑定到目标节点上。


简述 Kubernetes Scheduler 作用及实现原理?

Kubernetes Scheduler是负责 Pod 调度的重要功能模块。

Kubernetes Scheduler在整个系统中承担了“承上启下”的重要功能:

  • “承上”是指它负责接收 Controller Manager 创建的新 Pod,为其调度至目标 Node;
  • “启下”是指调度完成后,目标 Node 上的 kubelet 服务进程接管后继工作,负责 Pod 接下来生命周期。

Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的 Node 上,并将绑定信息写入 etcd 中。

在整个调度过程中涉及三个对象,分别是待调度 Pod 列表、可用 Node 列表,以及调度算法和策略。

Kubernetes Scheduler 通过调度算法为待调度 Pod 列表中的每个 Pod从 Node 列表中选择一个最适合的Node来实现Pod的调度。随后,目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件,然后获取对应的 Pod 清单,下载Image镜像并启动容器。


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

Kubernetes Scheduler根据如下两种调度算法将 Pod 绑定到最合适的工作节点:

  • 预选(Predicates) :输入是所有节点,输出是满足预选条件的节点。kube-scheduler根据预选策略过滤掉不满足策略的Nodes。如果某节点的资源不足或者不满足预选策略的条件则无法通过预选。如:Node的label必须与Pod的Selector一致。
  • 优选(Priorities): 输入是预选阶段筛选出的节点,优选会根据优先策略为通过预选的 Nodes 进行打分排名,选择得分最高的Node。例如,资源越富裕、负载越小的Node可能具有越高的排名。


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

kubelet使用 cAdvisor 对 worker 节点资源进行监控。

在 Kubernetes 系统中,cAdvisor 已被默认集成到 kubelet 组件内,当 kubelet 服务启动时,它会自动启动 cAdvisor 服务;然后, cAdvisor 会实时采集所在节点的性能指标及在节点上运行的容器的性能指标


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

通常需要对Worker节点进行扩容,从而将应用系统进行水平扩展。

主要过程如下:

  1. 在该 Node 上安装Docker、kubelet和kube-proxy服务;
  2. 然后配置kubelet和kube-proxy的启动参数,将Master URL指定为当前Kubernetes集群Master的地址;最后,启动这些服务;
  3. 通过kubelet默认的自动注册机制,新的Worker将会自动加入现有的Kubernetes集群中;
  4. Kubernetes Master在接受了新Worker的注册之后,会自动将其纳入当前集群的调度范围。


简述 Kubernetes 如何进行优雅的节点关机维护?

由于Kubernetes节点运行大量Pod,因此在进行关机维护之前,建议先使用kubectl drain将该节点的Pod进行驱逐,然后进行关机维护。

简述 Kubernetes 集群联邦?

Kubernetes集群联邦可以将多个Kubernetes集群作为一个集群进行管理。因此,可以在一个数据中心/云中创建多个Kubernetes集群,并使用集群联邦在一个地方控制/管理所有集群。

简述 Helm?

Helm 是 Kubernetes 的软件包管理工具。类似 Ubuntu 中使用的apt、Centos中使用的yum或者Python中的 pip 一样。

Helm能够将一组K8S资源打包统一管理,方便查找、共享和使用,是为Kubernetes构建软件的最佳方式。

在Helm中,通常每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。


简述 Helm 的优势

在 Kubernetes中部署一个可以使用的应用,需要涉及到很多的 Kubernetes 资源的共同协作。

使用helm则具有如下优势:

  • 统一管理、配置和更新这些分散的 k8s 的应用资源文件;
  • 分发和复用一套应用模板;
  • 将应用的一系列资源当做一个软件包管理。

对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库

对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes 搜索推荐
Kubernetes自测题(四)-存储部分
简述 Kubernetes 共享存储的作用? Kubernetes对于有状态的容器应用或者对数据需要持久化的应用,需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。因此,需要使用共享存储
|
Kubernetes 网络协议 Linux
Kubernetes自测题(三)-网络部分
简述Kubernetes网络模型? Kubernetes网络模型中每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个Node(宿主机)中,都要求它们可以直接通过对方的IP进行访问。
|
Kubernetes 监控 网络协议
Kubernetes自测题(二)-资源对象部分
Deployment 简述 Kubernetes Deployment 升级过程? 初始创建Deployment时,系统创建了一个ReplicaSet,并按用户的需求创建了对应数量的Pod副本。
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
23天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
120 17
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
456 1
|
1月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
105 1
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
50 1
|
1月前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。