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 命令来实现。

相关推荐
chuanauc2 小时前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉2 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信2 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记3 小时前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花3 小时前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay3 小时前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu3 小时前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记7 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
疯子的模样11 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
虚伪的空想家12 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook