k8s-经典⾯试题
K8s的集群组件有哪些?功能是什么?
分类别的说明方法kubernetes组件
etcd
etcd 是兼具⼀致性和⾼可⽤性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。在⼆进制部署etcd集群的时候,必须要考虑到⾼可⽤⽅案,⼀般部署三个或者三个以上的奇数个节点,因为当master宕机时,是通过选举制度来选择master的。
master组件
master和node是两个逻辑上节点,当服务器资源充⾜时,可以将其分开在不同的机器上部署,当服务器资源不⾜时,也可以放到同⼀台机器上部署。master节点在部署的时候必须要考虑⾼可⽤⽅案,⾄少部署两个master。
apirver
主节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制⾯的前端。是整个集群中资源操作的唯⼀⼊⼝,并提供认证、授权、访问控制、API注册和发现等机制。apirver提供了集群管理的restful api接⼝(鉴权、数据校验、集群变更等),负责和其它模块之间进⾏数据交互,承担了通信枢纽功能。通过kubectl操作集群资源时需要登陆到master节点之上,⽽跨主机调⽤apirver时,直接通过master前端的负载均衡来实现
controller manager
controller manager 译为“控制器管理器”,k8s内部有很多资源控制器,⽐如:Node Controller、Replication Controller、Deployment Controller、Job Controller、Endpoints Controller等等,为了降低复杂度,将这些控制切都编译成了⼀个可执⾏⽂件,并且在同⼀个进程中运⾏。controller manager 负责维护集群的状态,⽐如故障检测、⾃动扩展、滚动更新
scheduler
调度器组件监视那些新创建的未指定运⾏节点的 Pod,并选择节点让 Pod 在上⾯运⾏。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、⼯作负载间的⼲扰和最后时限。
当前各个node节点资源会通过kubelet汇总到etcd中,当⽤户提交创建pod请求时,apirver将请求交给controller manager处
理,controller manager通知scheduler进⾏筛选合适的node。此时scheduler通过etcd中存储的node信息进⾏预选(predict),将符合要求的node选出来。再根据优选(priorities)策略,选择最合适的node⽤于创建pod
node组件
kubelet
kubelet 接收⼀组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运⾏状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器
功能:
1、接收pod的期望状态(副本数、镜像、⽹络等),并调⽤容器运⾏环境(container runtime)来实现预期状态,⽬前container runtime基本都是docker ce。需要注意的是,pod⽹络是由kubelet管理的,⽽不是kube-proxy。
七上语文
2、定时汇报节点的状态给 apirver,作为scheduler调度的基础
3、对镜像和容器的清理⼯作,避免不必要的⽂件资源占⽤磁盘空间
kube-porxy
kube-proxy 是集群中每个节点上运⾏的⽹络代理,是实现rvice资源功能组件之⼀。kube-proxy 建⽴了pod⽹络和集群⽹络之间的关系,即 cluster ip 和 pod ip 中间的关系。不同node上的rvice流量转发规则会通过kube-proxy进⾏更新,其实是调⽤apirver访问etcd进⾏规则更新。
梦见猫是什么意思
rvice流量调度⽅式有三种⽅式: urspace(废弃,性能很差)、iptables(性能差,复杂)、ipvs(性能好,转发⽅式清晰)。
container runtime白色鼻毛
kube-proxy 是集群中每个节点上运⾏的⽹络代理,是实现rvice资源功能组件之⼀。kube-proxy 建⽴了pod⽹络和集群⽹络之间的关系,即 cluster ip 和 pod ip 中间的关系。不同node上的rvice流量转发规则会通过kube-proxy进⾏更新,其实是调⽤apirver访问etcd进⾏规则更新。
rvice流量调度⽅式有三种⽅式: urspace(废弃,性能很差)、iptables(性能差,复杂)、ipvs(性能好,转发⽅式清晰)。Ingress
苏轼
Ingress: 是⽤于将外部 HTTP(S)流量路由到服务(Service)的规则集合。
如何修改副本数,如何滚动更新和回滚,如何查看pod的详细信息,如何进⼊pod交互?
如何修改副本数,如何滚动更新和回滚
直接更改yaml ⽂件的Replicas 字段
回滚:
假设你在更新 Deployment 时犯了⼀个拼写错误,将镜像名称命名设置为 nginx:1.161 ⽽不是 nginx:1.16.1:(回滚命令如下)kubectl t image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true
回滚到之前修订版本:
检查修订版本:
kubectl rollout history deployment.v1.apps/nginx-deployment
回滚到上次修订版本:
kubectl rollout undo deployment.v1.apps/nginx-deployment
回滚到特定修改版本:脚气泡脚
kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2(2是指第⼏次修定的版本)
就绪探针和判活探针的区别和作⽤?
kubelet 使⽤存活探测器来知道什么时候要重启容器。 例如,存活探测器可以捕捉到死锁(应⽤程序在运⾏,但是⽆法继续执⾏后⾯的步骤)国画枇杷
kubelet 使⽤就绪探测器可以知道容器什么时候准备好了并可以开始接受请求流量, 当⼀个 Pod 内的
所有容器都准备好了,才能把这个Pod 看作就绪了。 这种信号的⼀个⽤途就是控制哪个 Pod 作为 Service 的后端。 在 Pod 还没有准备好的时候,会从 Service 的负载均衡器中被剔除的。
如何修改Pod的时间,且不会影响其他Pod,只作⽤于修改的那个Pod?
部署应⽤时,单独读取主机的“/etc/localtime”⽂件,即创建pod时同步时区,⽆需修改镜像,但是每个应⽤都要单独设置。
PV和PVC的关系,StorageClass是什么?
PV:PV描述的是持久化存储卷,主要定义的是⼀个持久化存储在宿主机上的⽬录,⽐如⼀个NFS的挂载⽬录。
PVC:PVC描述的是Pod所希望使⽤的持久化存储的属性,⽐如,Volume存储的⼤⼩、可读写权限等等。
Kubernetes管理员设置好⽹络存储的类型,提供对应的PV描述符配置到Kubernetes,使⽤者需要存储的时候只需要创建PVC,然后在Pod中使⽤Volume关联PVC,即可让Pod使⽤到存储资源,它们之间的关系如下图所⽰。
满江红诗词
StorageClass:
Kubernetes提供了CSI接⼝(Container Storage Interface,容器存储接⼝),基于CSI这套接⼝,可以开发定制出CSI插件,从⽽⽀持特定的存储,达到解耦的⽬的。例如在Namespace:资源分组中看到的kube-system命名空间下everest-csi-controller和everest-csi-driver就是华为云CCE开发存储控制器和驱动。有了这些驱动就可以使⽤华为云上的EVS、SFS、OBS存储。
kube-proxy⼯作原理
1、kube-proxy其实就是管理rvice的访问⼊⼝,包括集群内Pod到Service的访问和集群外访问rvice
2、kube-proxy管理vice的Endpoints,该rvice对外暴露⼀个Virtual IP,也成为Cluster IP, 集群内通过访问这个Cluster IP:Port就能访问到集群内对应的rivce下的Pod。
3、rvice是通过Selector选择的⼀组Pods的服务抽象,其实就是⼀个微服务,提供了服务的LB和反向代理的能⼒,⽽kube-proxy的主要作⽤就是负责rvice的实现。
4、rvice另外⼀个重要作⽤是,⼀个服务后端的Pods可能会随着⽣存灭亡⽽发⽣IP的改变,rvice的出现,给服务提供了⼀个固定的IP,⽽⽆视后端Endpoint的变化。