kenernetes/k8s笔试面试

k8s的基础概念

k8s本质是一个容器编排系统,可以管理容器的生命周期,应用部署,更新,维护,应用提供服务,扩容缩容应用,故障自愈。

k8s与docker的关系

docker:是一种轻量级的虚拟化技术。运维层面主要用途是:隔离各个应用部署时在系统上的冲突。一般使用dockerfile来自定义容器创建。

k8s是容器管理工具。它可以实现容器集群的自动化部署,自动化扩容,缩容等功能

K8s集群工作模式

k8s集群将机器划分为一个master结点和一群工作结点node

在mster结点机器上运行这一组进程: kube-apiserver, kube-controller-manager 和 kube-scheduler , 这些进程管理这集群资源的调度, 弹性伸缩 Pod调度, 安全控制,系统监控 等功能

简述k8s中的 minikube Kubectl kubelet?

Minikube 是一个本地运行单节点的k8s集群工具

Kubectl 是一个命令行工具,检查集群资源,创建,删除和更新组件,查看应用程序

Kubelet是一个代理服务,在每个结点上运行,并使从服务器与主服务器通信

工作节点kubelet的功能,作用是什么?

  1. 节点管理

kubelet启动时会向api-server进行注册,然后定义的向api-server汇报本节点的状态,资源使用情况,节点是否失联等相关信息,master知道整个集群所有节点的资源情况。

  1. pod管理

kubelet负责维护node节点上pod的生命周期(创建,更新,删除)

  1. 容器健康检查

pod中包含: 启动探针,存活探针,就绪探针。k8s会定期使用探针来检测容器是否存活,是否就绪。

  1. metrics Server资源监控

node节点上metrics Server 用于监控Pod 的内存,CPU,网络等资源使用情况。

pod是什么?

k8s不会直接处理容器,使用多个容器共存的理念,这组容器就叫做pod

pod是k8s中可以创建管理的最小单元,也是基本单元。

pod有什么特点?

  1. 每个pod就像一个独立的逻辑机器,k8s会为每个pod分配一个集群内部唯一的IP地址,所以每个pod都有自己的IP地址,主机名,进程等。

  2. 一个pod可以包含一个或多个容器,1个pod只能运行在单个节点上,不可能1个pod跨节点运行。

  3. 每个pod都有一个被称为"根容器"的pause容器,也称info容器,pause容器对应的镜像属于k8s的一部分

  4. 一个pod里的多个容器共享一个pod的IP , 意味这一个pod里面的多个容器所占用的端口不能相同,否则端口冲突。

  5. pod是k8s中扩容,缩容的基本单位,k8s的缩容 扩容都是针对pod 而非容器、

pod的重启策略有哪些?

Pod重启容器的策略是针对pod内所有容器的重启策略 , 不是重启pod

Always: 当容器终止退出后,总是重启容器,默认策略是Always

OnFilure: 当容器异常退出,退出状态码非0时,才重启容器

Never: 当容器终止退出,不管退出状态码是什么,从不重启容器。

Pod一直处于pending状态,一般有哪些情况,怎么排查?

  1. 一个pod刚创建的时候,会处于pending状态,正在拉取镜像,或正在创建容器的过程中

2, 调度器调度失败,Scheduler调度器无法为pod分配一个合适的node结点

  1. pvc pv 无法动态创建。

deployment如何扩容或缩容

直接修改pod副本数即可

  1. 修改yaml文件replicates字段数值, 然后 kubectl apply -f xxx.yaml 来实现更新

  2. 使用 kubectl scale --replicates=5 deployment/deployment-nginx 命令来扩容缩容

deployment的更新策略有哪些?

  1. recreate 重建更新, 会杀死集群所有正在运行的pod 然后在重新创建pod

  2. rollingUpdate 滚动更新,在集群中逐个更新pod

deployment的回滚命令是什么?

在升级deployment时kubectl set image 命令加上 --record 参数可以记录具体的升级历史信息

使用 kubectl rollout history deployment/deployment-nginx 命令查看deployment升级历史记录

回滚到某个指定版本 kubectl rollout undo deployment/deployment-nginx --to-revision=2 命令来实现

k8s发布(暴露)服务 ,service 的类型有哪些?

  1. nodeport: 最常用 用来对集群外暴露service 可以通过NodeIP:NodePort方式访问到service后端的endpoint

  2. ClusterIP: k8s默认的ServiceType 通过集群内的ClusterIP在内部发布服务

简述ETCD是什么

etcd 是一个分布式,高可用,一致的key-value存储数据库

1 完全复制: 集群中每个节点都可以使用完整的存档

2.高可用性: 避免单点故障或网络延迟问题

3.一致性: 每次读取都会返回多主机的最新写入。

简述k8s自动扩容机制?

使用 HPA(Horizotal Pod Autoscaler) 控制器基于CPU使用率自动进行Pod扩缩容的功能

HPA周期性检查Pod资源性能指标,并与HPA资源对象中的扩缩容条件进行对比,满足条件对Pod副本数量进行调整。

相关推荐
m0_741768852 小时前
使用docker的小例子
运维·docker·容器
最新小梦5 小时前
Docker日志管理
运维·docker·容器
鱼跃鹰飞6 小时前
Leetcode面试经典150题-349.两个数组的交集
算法·leetcode·面试
有你的晚安._6 小时前
pod基本概念
kubernetes
Persistence is gold9 小时前
cassandra指定配置文件的docker启动方法
运维·docker·容器
C语言扫地僧10 小时前
Docker 镜像制作(Dockerfile)
linux·服务器·docker·容器
程序猿进阶12 小时前
如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?
java·ide·vscode·算法·面试·职场和发展·架构
无名之逆13 小时前
云原生(Cloud Native)
开发语言·c++·算法·云原生·面试·职场和发展·大学期末
Richardlygo14 小时前
(k8s)Kubernetes部署Promehteus
云原生·容器·kubernetes
炸裂狸花猫15 小时前
Kubernetes从零到精通(12-Ingress、Gateway API)
容器·kubernetes·gateway