linux面试k8s篇

目录

    • 1.简述k8s master的组件及用途
    • 2.kube-proxy的作用是什么
    • 3.CNI 是什么
    • 4.etcd 是什么,与 k8s 有什么关系
    • 5.简述K8S创建容器的过程
    • 5.说明 Pod 生命周期
    • 6.如何查看、设置、删除标签
    • 7.说明 kubectl 子命令的用途
    • 8.k8s 中 Pod 出现故障的拍错步骤和思路
    • 9.如何为 Pod 进行资源配额
    • 10.注解全局资源配额策略limitRange
    • 11.注解全局资源配额策略Quota
    • 12.优先级 PreemptLowerPriority 与 Never 区别
    • 13.K8S 中的污点指的是什么
    • 14.特权 Pod 的安全策略有那三种
    • 15.卷 emptyDir 的特点和适用场景
    • 16.卷 configMap 的特点和适用场景
    • 17.卷 secret 的特点和适用场景
    • 18.卷 hostPath 的特点和适用场景
    • 19.K8S 中 PV/PVC 指的是什么
    • 20.PV/PVC资源文件注解
    • 21.K8S 中的 service 的类型有哪些
    • 22.如何将一个K8S的应用发布到集群之外
    • 23.说明 Ingress 与 nodePort 服务区别
    • 24.serviceAccount 是什么
    • 25.role 和 clusterRole 的用途和区别
    • 26.roleBinding 和 clusterRoleBinding 的用途和区别
    • 27.控制器是如何找到需要管理的 POD
    • 28.常用控制器有哪些,说明特点
    • 29.deployment 和 statefulsets 的用途和区别
    • 30.deployment 和 daemonset 的用途和区别
    • 31.job 和 cronJob 的用途和区别
    • 32.资源文件含义注释
    • 33.k8s解决了什么问题
    • 34.晚上出现高并发,怎么解决?
    • 35.k8s部署redis的方式?
    • 36.k8s如何合理规划pod的资源使用?
    • 37.k8s动态扩容
    • 38.自动化k8s部署的方式?
    • 40.CI/CD的流水线部署?
    • 41.云服务器的负载均衡?
    • 42.flannel和calico的区别?
    • 43.Dockerfile和docker commit创建镜像的工具的区别?
    • 44.容器和外部通信?
    • 45.目前用的监控软件,配置的监控报警?
    • 46.钉钉报警和微信报警?
    • 47.Docker需要先登录,K8s用账号密码去登录,机器多了之后就很麻烦,简化方式?

1.简述k8s master的组件及用途

apiserver 组件是整个系统的对外接口,供客户端和其它组件调用
scheduler 组件负责对集群内部的资源进行调度,相当于“调度室”
etcd 组件是一个键值对的数据库,K8S运行过程中的元数据存储在这里
controllermanager 组件负责管理控制器,相当于“大总管”

2.kube-proxy的作用是什么

kube-proxy 是 Kubernetes 的核心组件,主要负责为Pod对象提供代理
kube-proxy 是实现 Kubernetes Service 的通信与负载均衡机制的重要组件他通过 iptables 或 LVS 实现了负载均衡

3.CNI 是什么

CNI 的全称是 Container Network Interface,CNI 是容器网络的 API 接口。
常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。

4.etcd 是什么,与 k8s 有什么关系

etcd 是一个键值对的数据库,k8s 在运行过程中的元数据存储在 etcd 中
基于 etcd k8s 解决了服务发现、分布式锁等问题

5.简述K8S创建容器的过程

linux面试k8s篇_第1张图片

  • 1、用户发请求给 api-server
  • 2、api-server 记录到 etcd 中
  • 3、api-server给用户返回结果,客户端已经执行完成
  • 4、api-server 调用 scheduler 为容器选择运行的主机
  • 5、scheduler 返回容器的调度结果
  • 6、api-server 把结果记录到 etcd 中
  • 7、api-server 调用对应主机的 kubelet 创建容器
  • 8、kubelet 调用本机 docker 完成容器的创建,并返回结果给 api-server
  • 9、api-server 把结果记录到 etcd 中

5.说明 Pod 生命周期

linux面试k8s篇_第2张图片

  • init 初始化容器(可选),在主容器之前运行,主要作用是在主容器启动前的准备工作
  • postStart容器启动回调(可选),在主容器启动后立即执行,主要作用是在主容器启动时同步完成其他任务
  • livenessProbe
    存活探测器(可选),用来确定什么时候要重启容器。例如:服务崩溃、应用死锁、无响 应
  • readinessProbe
    就绪探测器(可选),服务需要满足特定的需求才能对外提供。例如:需要同步数据、或等待相关依赖服务启动。如果不能满足就绪条件,既不杀死应用,也不给它发送请求(通过 Kubernetes Service 的流量)。
  • preStop 容器终止前回调(可选),在主容器终止前最后执行,主要作用是在主容器终止前完成最后的任 务 main container
  • 容器主进程(必选),运行容器的核心服务。

6.如何查看、设置、删除标签

[查看标签 ~]# kubectl get 资源对象 --show-labels
[添加标签 ~]# kubectl label 资源对象 资源对象名称 key=value
[删除标签 ~]# kubectl label 资源对象 资源对象名称 key-

7.说明 kubectl 子命令的用途

linux面试k8s篇_第3张图片

8.k8s 中 Pod 出现故障的拍错步骤和思路

查看 pod 状态: kubectl get Pod Pod名称
查看 pod 信息: kubectl describe Pod Pod名称
查看 pod 日志: kubectl logs Pod名称 -c 容器名称

9.如何为 Pod 进行资源配额

可以为 Pod 配额的资源有 cpu、memory
可以配置 resource.requests 最小资源需求,也可以配置 resource.limits 最大资源限额

10.注解全局资源配额策略limitRange

linux面试k8s篇_第4张图片
linux面试k8s篇_第5张图片

11.注解全局资源配额策略Quota

linux面试k8s篇_第6张图片

12.优先级 PreemptLowerPriority 与 Never 区别

Never 不抢占,对于已经调度完成的容器没有影响,优先调度高优先级的Pod
PreemptLowerPriority 抢占,优先调度高优先级的Pod,如果资源不足,杀死优先级低的,保证高优先级的Pod运行

13.K8S 中的污点指的是什么

linux面试k8s篇_第7张图片

14.特权 Pod 的安全策略有那三种

linux面试k8s篇_第8张图片

15.卷 emptyDir 的特点和适用场景

在这里插入图片描述

16.卷 configMap 的特点和适用场景

在这里插入图片描述

17.卷 secret 的特点和适用场景

在这里插入图片描述

18.卷 hostPath 的特点和适用场景

hostPath 是持久卷,卷的本质是使用本地设备,例如磁盘、分区、目录等。
hostPath 卷里面的数据不会随着 Pod的结束而消失。注意:不同节点上的数据可能表现不一致

19.K8S 中 PV/PVC 指的是什么

PV 指的是持久卷(PersistentVolume),PV 是资源的提供者,根据集群的基础设施变化而变化,由K8s集群管理员配置
PVC 指的是持久卷声明(Persistent VolumeClaim),PVC 是资源的使用者,根据业务服务的需求变化 来配置PV/PVC 的引入使K8s集群具备了存储的逻辑抽象能力

20.PV/PVC资源文件注解

linux面试k8s篇_第9张图片
linux面试k8s篇_第10张图片

21.K8S 中的 service 的类型有哪些

1、ClusterIP:通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问,这也是默认的ServiceType
2、NodePort: 通过每个节点上的 IP 和静态端口(NodePort)暴露服务
3、LoadBalancer:使用云提供商的负载均衡器向外部暴露服务(一般需要购买和付费)
4、ExternalName:通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容

22.如何将一个K8S的应用发布到集群之外

1、使用 NodePort 服务,映射端口(四层)
2、使用 ingress 服务(七层)
3、使用 LoadBalancer 依赖云供应商,需要购买和付费

23.说明 Ingress 与 nodePort 服务区别

nodePort 工作在4层,通过协议、端口、路由转发实现的对外发布服务,可以发布任何服务
Ingress 工作在7层,可以发布 http、https 服务,可以实现 session 粘滞、地址重写、多虚拟主机等功能

24.serviceAccount 是什么

系统服务的账户,主要用途为运行在 kubernetes 中的 Pod 程序提供可鉴别的身份和权限

25.role 和 clusterRole 的用途和区别

role 普通角色,受限于名称空间,只能在名称空间内部使用
clusterRole 集群角色,可以在整个集群中使用

26.roleBinding 和 clusterRoleBinding 的用途和区别

roleBinding 普通角色授权,可以使用 role 和 clusterRole 进行授权,该授权只在名称空间内有效
clusterRoleBinding 集群角色授权,只能使用 clusterRole 授权,该授权在整个集群中均有效

27.控制器是如何找到需要管理的 POD

linux面试k8s篇_第11张图片

28.常用控制器有哪些,说明特点

  • ReplicationController # 多副本控制器,不支持集合,已经被 ReplicaSet 和 Deployment 代替
  • ReplicaSet # 多副本控制器,支持集合,一般不直接使用,而是由 Deployment 调用
  • Deployment # 该控制器由 ReplicaSet、Pod 组成、支持集群扩容缩容、滚动、更新、回滚、自动维护 Pod 可用性及副本数量等功能
  • DaemonSet #该控制器无法自定义副本数量,会在每个硬件节点都创建一个 Pod,会自动随同硬件节点数量自动增减 Pod
  • Job #单任务控制器,保证一次任务正确执行完成,执行单一任务后结束
  • CronJob # 周期性计划任务,按照时间周期创建Job,保留最后三次的执行结果
  • HorizontalPodAutoscaler # 可以在集群中基于CPU利用率度量指标实现水平自动缩放POD的数量
  • StatefulSet # 该控制器可以结合 Headless服务、存储卷、DNS 等服务,使用稳定的网络标识、存 储、按顺序扩缩容Pod。

29.deployment 和 statefulsets 的用途和区别

Deployment 创建的 Pod 名称、存储都是随机配置,多个 Pod 副本并发创建,无法通过 service 单独访问 Pod 应用
StatefulSet 使用稳定的网络标识、存储、按顺序扩缩容Pod,可以通过 service 单独访问 Pod 应用

30.deployment 和 daemonset 的用途和区别

Deployment 可以自定义副本数量,同一个节点可以运行多个 Pod 副本 DaemonSet
无法定义副本数量,副本与硬件节点绑定,每节点运行一个 Pod

31.job 和 cronJob 的用途和区别

Job 是单任务控制器,执行任务成功后就结束了,后续不在执行
CronJob 是周期性计划任务,是按时间周期触发的 Job 任务执行

32.资源文件含义注释

linux面试k8s篇_第12张图片
linux面试k8s篇_第13张图片

33.k8s解决了什么问题

K8s 是容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、自维护等功能

34.晚上出现高并发,怎么解决?

  1. 可以基于K8s的HPA控制器,通过监控性能实现动态扩容,解决临时高并发问题
  2. 没有k8s的情况下,也可以通过自己编写脚本,实现虚拟化主机的扩容

35.k8s部署redis的方式?

单机部署比较简单,使用 Pod 启动容器即可
主从集群较复杂,需要使用 StatefulSet 先启动 master,然你再启动 slave
分片更加复杂,还需要在 InitContainer 中先划分数据槽位,在加入集群

36.k8s如何合理规划pod的资源使用?

根据不通的业务场景,设置不通的资源限制
比如:对于单个pod可以使用request配置最小需求,可以使用limit设置最大限额
对于很多pod,可以设置limitrange和resourcequota配置全局资源配额
实际使用时,也需要根据实际业务场景结合实际允许的效果,动态调整资源限制。

37.k8s动态扩容

使用 Deployment控制器创建 Pod,通过 metrics-server 监控Pod资源使用情况,使用
horizontalpodautoscalers 实现基于资源利用率的自动扩容

38.自动化k8s部署的方式?

如果是k8s的自动化部署:可以使用类似kubeasz第三方工具实现一键部署集群。
如果是k8s中容器的自动化部署:编写资源文件,应用资源文件。

40.CI/CD的流水线部署?

代码上线git,jenkins拉取代码,测试代码,编译代码,发布代码到服务器整个流程的自动化部署,其中
jenkins可以调用很多插件完成测试、编译工作,甚至可以定义pipeline语句,将代码封装到容器,推送
镜像到镜像仓库,然后到k8s中启动容器,部署业务。

41.云服务器的负载均衡?

华为云使用 ELB
阿里云使用SLB

42.flannel和calico的区别?

Flannel是覆盖网络,有封包和解包的过程,对CPU等有一定程度的消耗,只适用于简单网络;calico基
于BGP协议,使用Linux 内核来虚拟出vroute,转发数据,没有封包和解包的过程,对CPU等资源消耗
量会更小。
Calico 可以配置基于k8s的的网络安全策略。
Flannel 不支持网络安全策略

43.Dockerfile和docker commit创建镜像的工具的区别?

Docker commit手动修改容器,保存镜像
Dockerfile是编写容器脚本文件,读取文件自动构建镜像

44.容器和外部通信?

容器可以使用外部服务
外部服务使用容器,1 使用端口映射,2 绑定宿主机网络 3,使用路由转发

45.目前用的监控软件,配置的监控报警?

传统业务使用zabbix,监控主机性能和业务指标,创建触发器、设置报警媒介、创建报警动作
容器监控使用Prometheus,监控容器性能和业务指标,配置altermanager,添加报警规则,报警方式
(邮件、钉钉等)

46.钉钉报警和微信报警?

钉钉:创建一个群聊机器人,可以获取token或id,编写python脚本,zabbix设置报警,调用python脚
本,聊天机器人在群中发布报警消息。
微信报警:创建微信企业账户,编写python代码,zabbix调用报警脚本,在微信群发报警消息。

47.Docker需要先登录,K8s用账号密码去登录,机器多了之后就很麻烦,简化方式?

Secret 配置登录的用户名和密码,Pod中使用 imagePullSecrets 调用即可完成自动登录

你可能感兴趣的:(面试,kubernetes,linux,面试)