K8S面试题学习4

参考K8S面试题(史上最全 + 持续更新)_kubernetes常见面试题-CSDN博客做的个人总结,规划是每天看10题,thx!

1. pause容器作用是什么?

每个pod里运行一个特殊的容器称为pause容器,也称根容器,其他的容器成为业务容器。

创建pause容器主要是为了为业务容器提供 Linux命名空间,共享基础:包括 pid、icp、net 等,以及启动 init 进程,并收割僵尸进程;

这些业务容器共享pause容器的网络命名空间和volume挂载卷;

当pod被创建时,pod首先会创建pause容器,从而把其他业务容器加入pause容器,从而让所有业务容器都在同一个命名空间中,这样可以就可以实现网络共享;

pod还可以共享存储,在pod级别引入数据卷volume,业务容器都可以挂载这个数据卷从而实现持久化存储。

2. 标签及标签选择器是什么,如何使用?

标签是键值对类型,可以添加到任何资源对象上,主要用于管理对象、查询以及筛选。

3. service是如何与pod关联的?

通过标签选择器关联,每一个由deployment创建的pod都带有标签,service可以定义标签选择器来关联哪些pod作为service的后端。

4. service的类型有哪几种?

ClusterIP:表示service仅供集群内部访问

NodePort:表示service可以对外提供访问,访问方式为:集群节点IP:NodePort

LoadBalance:表示service可以对外提供访问,需要通过公网IP来访问,一般是用于公有云

ExternalName:这种类型的service会把集群外部的服务引入集群内部,这样集群内直接访问service就可以间接的使用集群外部服务了

5. Pod到Service的通信?

k8s在创建服务的时候,会分配一个虚拟IP地址客户端通过该IP访问服务,服务则将请求转发到后端的Pod上;

service是通过kube-proxy服务进程实现,该进程会在每个node上均运行一个透明代理兼负载均衡器;

对每个TCP类型Service,kube-proxy都会在本地Node建立一个SocketServer来负责接受请求,然后均匀的发送到后端Pod,默认采用的负载均衡算法为轮询Round Robin;

Service的Cluster IP和NodePort等概念是kube-proxy通过iptabls的NAT转换实现,kube-proxy进程动态创建与service相关的iptables规则;

kube-proxy通过查询和监听Api-Server中Server和endpoints的变化来实现其主要功能,包括为新创建的Service打开一个本地代理对象,接受请求针对发生变化的Service列表,kube-proxy会逐个处理。

6. service、endpoint、kube-proxy三种的关系?

service:service是一种为一组相同功能的pod提供单一不变的接入点资源,当service被创建的时候,service的IP和端口不会变,客户端会通过这些IP:端口来访问后端pod的服务

endpoint:service维护endpoint的资源列表,endpoint资源对象保存这service关联的pod的IP和端口

kube-proxy:kube-proxy运行在Node节点上,在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡,kube-proxy会监听api-server中获取service和endpoint的变化,创建并维护路由规则提供IP和负载均衡功能,其核心功能是将service的请求转发到后端的多个pod实例上

7. deployment怎么扩容缩容?

直接通过vi修改yaml文件replicas字段,在用kubectl apply -f来更新

kubectl edit deployment来实现在线更新

kubectl scale --replicas=2 deployment来扩缩容

8. deployment的滚动更新策略有两个特别主要的参数,解释一下它们是什么意思?

maxUnavailable:最大不可用数,maxUnavailable用于指定deployment在更新的过程中不可用状态的pod的最大数量,maxUnavailable的值可以是一个整数值,也可以是pod期望副本的百分比,如25%,计算时向下取整。

maxSurge:最大激增数,maxSurge指定deployment在更新的过程中pod的总数量最大能超过pod副本数多少个,maxUnavailable的值可以是一个整数值,也可以是pod期望副本的百分比,如25%,计算时向上取整。

9. deployment更新的命令有哪些?

同扩缩容一样三种方法:

直接丢该yaml后用kubectl apply -f来更新

kubectl edit deployment来实现在线更新

kubectl set image deployment命令来制定新镜像更新

10. deployment的回滚使用什么命令

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

使用kubectl rollout history deployment/deployment-nginx 命令来查看指定的deployment升级历史记录,

如果需要回滚到某个指定的版本,可以使用kubectl rollout undo deployment/deployment-nginx --to-revision=2 命令来实现。

相关推荐
可观测性用观测云10 小时前
云原生网关 Ingress-Nginx 链路追踪实战:OpenTelemetry 采集与观测云集成方案
nginx·kubernetes
哈里谢顿1 天前
Kubernetes Operator核心概念、实现原理和实战开发
云原生
阿里云云原生1 天前
你的 OpenClaw 真的在受控运行吗?
云原生
阿里云云原生1 天前
5 分钟零代码改造,让 Go 应用自动获得全链路可观测能力
云原生·go
Shanyoufusu121 天前
RKE2 单节点集群安装 Rancher+ 私有镜像仓库搭建 完整教程
云原生
阿里云云原生1 天前
Dify 官方上架 Higress 插件,轻松接入 AI 网关访问模型服务
云原生
AI攻城狮2 天前
OpenClaw Session 管理完全指南:Context 压缩、重置与持久化
人工智能·云原生·aigc
蝎子莱莱爱打怪2 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
阿里云云原生6 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪6 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes