K8S面试题学习3

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

1. Pod的重启策略是什么?

        Always:默认策略,只要pod终止就重启

        OnFailure:仅在pod对象出现错误时重启

2. Pod创建过程?

        1.使用kubectl run来创建pod

                首先,用户通过kubectl提交需要创建pod的基本信息到api-server;

                api-server会优先验证客户端的权限信息,验证通过开始处理创建请求生成pod对象信息,并将信息存入到etcd,然后返回信息给客户端;

                api-server开始反馈etcd中pod对象的变化,其他组件通过watch机制来跟踪apiserver上的变化;

                scheduler发现有新的pod对象要创建时,开始调用内部的算法机制为pod分配最佳主机,并将结果更新到api-server;

                node上的kubelet通过watch机制跟踪apiserver发现有pod要调度到本节点的时候,尝试调用docker并启动容器,并将结果反馈给api-server;

                api-server将收到的pod状态信息存入etcd中。

        2.使用deployment来创建pod

                首先,用户通过kubectl create命令或者kubelet apply来提交需要创建的deployment资源请求;

                api-server收到资源创建请求后,会对客户端进行身份认证,在客户端~./kube文件夹下,已经设置好了相关的用户认证信息,当api-server确定用户请求合法后,会接受本次操作,并把相关信息保存到etcd中,然后返回确认信息给客户端;

                api-server开始反馈etcd中pod对象的变化,其他组件通过watch机制来跟踪apiserver上的变化;

                controller-manager组件会监听api-server的信息,此时Deployment Controller发现有新的deployment要创建,那么它就会去创建一个ReplicaSet,一个ReplicaSet的产生,又被另一个叫做ReplicaSet Controller监听到了,紧接着它就会去分析ReplicaSet的语义,它了解到是要依照ReplicaSet的template去创建Pod, 它一看这个Pod并不存在,那么就新建此Pod,当Pod刚被创建时,它的nodeName属性值为空,代表着此Pod未被调度;

                调度器Scheduler组件开始介入工作,Scheduler也是通过watch机制跟踪apiserver上的变动,发现有未调度的Pod,则根据内部算法、节点资源情况,pod定义的亲和性反亲和性等等,调度器会综合的选出一批候选节点,在候选节点中选择一个最优的节点,然后将pod绑定该该节点,将信息反馈给api-server;

        kubelet组件布署于Node之上,它也是通过watch机制跟踪apiserver上的变动,监听到有一个Pod应该要被调度到自身所在Node上来,kubelet首先判断本地是否在此Pod,如果不存在,则会进入创建Pod流程,创建Pod有分为几种情况,第一种是容器不需要挂载外部存储,则相当于直接docker run把容器启动,但不会直接挂载docker网络,而是通过CNI调用网络插件配置容器网络,如果需要挂载外部存储,则还要调用CSI来挂载存储。kubelet创建完pod,将信息反馈给api-server,api-servier将pod信息写入etcd;
        Pod建立成功后,ReplicaSet Controller会对其持续进行关注,如果Pod因意外或被我们手动退出,ReplicaSet Controller会知道,并创建新的Pod,以保持replicas数量期望值。

3. 简述pod终止的流程?

        用户向apiserver发送删除pod对象的命令;

        apiserver中的pod对象信息会随着时间的推移而更新,在宽限期30s内,pod被视为dead;

        将pod标记为terminating状态;

        kubectl在监控到pod对象为terminating状态就会启动pod关闭过程;

        endpoint控制器监控到pod对象的关闭行为时将其从所有匹配到此endpoint的server资源endpoint列表中删除;
        如果当前pod对象定义了preStop钩子处理器,则在其被标记为terminating后会意同步的方式启动执行;
        pod对象中的容器进程收到停止信息;
        宽限期结束后,若pod中还存在运行的进程,那么pod对象会收到立即终止的信息;
        kubelet请求apiserver将此pod资源的宽限期设置为0从而完成删除操作,此时pod对用户已不可见。

4. pod的生命周期有哪几种?

        Pending:API server已经创建pod,但是pod还有一个或者多个容器的镜像没有创建,包括正在下载镜像的过程;

        Running:Pod内所有的容器已经创建,且至少有一个处于运行状态;

        Succeed:Pod内所有容器均已退出,并且不会在重启;

        Failed:Pod内所有容器均已退出,并且至少有一个容器为退出失败状态;

        Unknown:某种原因导致api-server无法获取pod状态,可能由于网络通信问题导致。

5. pod一致处于pending状态一般有哪些情况,怎么排查?

        1.调度失败

        2.pv、PVC无法创建

6. DaemonSet资源对象的特性?

        DaemonSet资源会在每个k8s集群节点上运行,并且每个节点只能运行一个pod,这是他与deployment资源对象最大的也是唯一的区别,所以在yaml编写中,不支持定义replicas,一般使用的场景为:去做每个节点的日志收集,监控每个节点的运行状态。

7. 删除一个Pod会发生什么事情?

        Kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,

        此时Pod的状态Terminating,kubelet看到pod标记为Terminating就开始了关闭Pod的工作;

        关闭流程如下:

        1)pod从service的endpoint列表中被移除;

        2)如果该pod定义了一个停止前的钩子,其会在pod内部被调用,停止钩子一般定义了如何优雅的结束进程;

        3)进程被发送TERM信号(kill -14);

        4)当超过优雅退出的时间后,Pod中的所有进程都会被发送SIGKILL信号(kill -9);

8. pod的初始化容器是干什么的?

        init container,初始化容器用于在启动应用容器之前完成应用容器所需要的前置条件,

初始化容器本质上和应用容器是一样的,但是初始化容器是仅允许一次就结束的任务,初始化容器具有两大特征:

        1、初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成;
        2、初始化容器必须按照定义的顺序执行,当且仅当前一个初始化容器成功之后,后面的一个初始化容器才能运行;

9. pod的资源请求、限制如何定义?

        pod的资源请求、资源限制可以直接在pod中定义

        主要包括两块内容:

                limits,限制pod能使用的最大cpu和内存,

                requests,pod启动时申请的cpu和内存。

10. pod的定义中有个command和args参数,这两个参数不会和docker镜像的entrypointc冲突吗?

        不会。在pod中定义的command参数用于指定容器的启动命令列表,如果不指定,则默认使用Dockerfile打包时的启动命令,args参数用于容器的启动命令需要的参数列表;

        特别说明:

        kubernetes中的command、args其实是实现覆盖dockerfile中的ENTRYPOINT的功能的。

 

        

### 回答1: K8s运维工程师需要具备哪些技能和经验? K8s是目前最流行的容器编排和管理平台,因此,K8s运维工程师需要掌握基本的Linux系统管理和网络知识,具备Docker和K8s的实践经验和技能。在面试中,以下问题是K8s运维工程师经常会遇到的问题: 1.描述Docker镜像的构成和制作过程。 Docker容器是通过Docker镜像构建的,而Docker镜像是由多个层次构成的。运维工程师需要理解Docker镜像的构成和创建过程,掌握Dockerfile文件的编写和基本的构建命令。 2.如何使用Kubernetes创建和管理容器Kubernetes是一个开源的容器编排和管理平台。运维工程师需要理解Kubernetes的组件和工作原理,熟悉Kubernetes的部署和管理,能够使用Kubernetes创建和管理容器化应用程序。 3.Kubernetes中的Service和Ingress有什么区别? Kubernetes的Service和Ingress都是用于暴露服务和路由流量的机制。运维工程师需要理解Service和Ingress的区别和各自的使用场景,能够根据不同的要求配置和管理Service和Ingress。 4.如何管理Kubernetes集群的安全? Kubernetes集群的安全管理是K8s运维工程师必须掌握的关键技能。运维工程师需要了解Kubernetes的安全机制和最佳实践,能够配置和管理Kubernetes集群的安全策略和证书。 总之,K8s运维工程师需要具有扎实的英语和计算机技能、出色的问题解决能力、敏捷的反应能力和良好的团队合作能力。在实践中不断学习、不断探索,并遵循最佳实践,才能成为一名成功的K8s运维工程师。 ### 回答2: k8s运维工程师需要具备哪些技能和能力? 作为一名k8s运维工程师,需要具备以下几个方面的技能和能力: 1.熟练掌握k8s基础知识:k8s是目前最流行的容器编排平台,需要熟练掌握其概念模型、架构设计等基础知识,了解k8s各个组件的作用和相互关系。 2.熟悉Linux操作系统:Linux作为k8s最常用的操作系统,需要熟悉其操作和维护,包括文件系统、进程管理、网络配置等,可以快速解决生产环境中的问题。 3.编程语言:k8s的开源社区主要使用Go语言进行开发,因此需要掌握基础的Go语言编程能力,同时还需了解常用的Shell脚本语言。 4.容器技术:熟悉Docker容器技术,能够对镜像进行管理、发布和更新,了解容器网络、存储和安全领域的相关技术。 5.自动化和DevOps:熟练使用自动化工具,如Ansible、Puppet等,了解CI/CD的实践流程,掌握DevOps基本理念和实践方法。 6.团队合作和沟通能力:k8s运维工程师需要与开发人员、QA、安全、运维等不同部门进行沟通和协作,因此需要具备良好的团队合作和沟通能力。 在实际工作中,k8s运维工程师需要根据生产环境中的实际情况,灵活应用各种技能和能力,维护k8s平台的高可用性、高性能和高安全性,确保业务的稳定运行和快速迭代。 ### 回答3K8sKubernetes)是一个开源的容器编排系统,可以将多个容器编排在同一个集群中,从而能够有效地管理和分发容器,在分布式系统中扮演着一个重要的角色。对于K8s运维工程师来说,需要掌握K8s集群的搭建和运维,具有一定的Linux操作系统基础和Docker容器技术。 在K8s运维工程师的面试过程中,常见的面试题目包括以下几个方面: 一、K8s基础知识:K8s的架构、常用概念、K8s资源对象、K8s组件和服务等。 二、K8s集群搭建:如何构建和部署一个K8s集群,如何管理Master和Node节点,如何配置Kubelet、Kube-proxy等。 三、K8s应用容器化:如何通过Docker将应用程序打包成容器,如何基于容器部署一个应用程序,如何将应用程序与K8s相关联。 四、K8s网络和存储:如何设置K8s网络和存储,如何配置网络插件和存储卷等。 五、K8s监控和调试:如何监控和调试K8s集群和应用程序,如何使用Prometheus、Grafana等监控工具。 综上所述,K8s运维工程师需要具备良好的K8s基础知识和实践经验,以及熟练的Linux系统操作和Docker容器技术,从而能够快速定位和解决K8s集群运维中的问题,提高系统的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值