运维面试题之k8s

吐槽:

我干嘛要知道这些,能用不就行了k8s真香

 

Kubernetes有哪些特性?

Kubernetes是自动化容器编排的开源平台,目标是让部署容器化的应用简单并且高效,提供了应用部署,规划,更新,维护的一种机制

Kubernetes一个核心的特点就是可以让容器按照用户的期望状态运行

 

Kubernetes有哪些核心组件这些组件负责什么工作?

etcd:提供数据库服务保存了整个集群的状态
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
cloud-controller-manager:是与底层云计算服务商交互的控制器
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
container-runtime:是负责管理运行容器的软件,比如docker

 

Pod是什么?

在k8s中最小的管理元素不是容器而是Pod,Pod的上下文可以理解为多个linux命名空间的联合,包括PID命名空间同一个Pod中的容器可以互相看到PID、网络命名空间同一个Pod中的容器可以使用同一IP

 

为什么Kubernetes要设计Pod?

Pod中的容器可以共用Pod提供的基础设施

Pod的生命周期与管理器的生命周期的分离

调度和管理的易用性,解偶控制器和服务,后段管理器仅仅监控Pod

 

描述一下Pod的生命周期有哪些状态?

status 属性里面有一个phase字段记录了Pod的状态

正常情况下起一个新Pod的过程

Pending表示Pod已经被同意创建,正在等待kube-scheduler选择合适的节点创建,一般是在准备镜像

Running表示Pod中所有容器已经被创建,并且至少有一个容器正在运行或者是正在启动或者正在重启

Succeeded表示所有容器已经成功终止,且不会再启动

Failed表示Pod中所有容器都是非0状态退出

Unknown表示无法读取Pod状态通常是kube-controller-manager无法与Pod通信

 

怎么看Pod中的容器是否健康?

status 属性里面有一个conditions字段记录了容器状态

其中 type: Ready=True 表示Pod已经准备就绪,切已经加入了Service的负载均衡当中

type: ContainersReady=True表示所有Pod中所有容器都通过了健康检查(如有),并全部准备就绪

 

创建一个Pod会发生什么事?

1、客户端提交Pod的配置信息(可以是Deployment定义好的信息)到kube-apiserver,kube-apiserve会把Pod信息存储到ETCD当中

2、kube-scheduler 检测到Pod信息会开始调度

3、kube-scheduler 开始调度预选,主要是过滤掉不符合Pod要求的节点

4、kube-scheduler 开始调度调优,主要是会给节点打分以选择更加适合的节点

5、kube-scheduler 选择好节点后会把结果存储到ETCD

6、kubelet  根据调度结果执行Pod创建操作

 

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

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

此时Pod的状态是Terminating,Kubelet看到Pod标记为Terminating开始了关闭Pod的工作

1、Pod从service的列表中被删除

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

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

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

 

kubernetes 常用的集群网络模型,有哪些特性?
Flanneld:
常用于OpenStack等云平台配合host-gw防止数据被多次封装,支持多种协议UDP、VxLAN、AWS VPC等,不支持Network Policy
Open vSwitch:
可以用于实现k8s多租户的网络隔离,支持多种隧道协议GRE、VxLAN、 IPsec
Contiv:
常用于面向应用的网络策略,甚至可以配合硬件设备使用比如Cisco-SDN,并且支持BGP、VxLAN等协议

 

k8s的Service是什么?

Pod每次重启或者从新部署IP地址都会产生变化,这使得Pod间通信和Pod与外部通信变得困难,这时候Pod就需要一个固定的入口这就是Service

每个Service都有一个clusterIP,clusterIP是固定的是外界访问Pod的唯一入口,Service背后通常绑定了一组相同配置的Pod,通过负载均衡的方式把外界请求分配的多个Pod

 

k8s是怎么进行服务注册的?

Pod启动后会加载当前环境所有Service信息,以便不同Pod根据Service名进行通信

 

k8s集群外流量怎么访问Pod?

可以通过Service的NodePort方式访问,会在所有节点监听同一个端口比如30000端口,访问节点30000端口的流量会被重定向到对应的Service上面

 

转载于:https://www.cnblogs.com/37yan/p/10730648.html

  • 8
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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平台的高可用性、高性能和高安全性,确保业务的稳定运行和快速迭代。 ### 回答3: K8s(Kubernetes)是一个开源的容器编排系统,可以将多个容器编排在同一个集群中,从而能够有效地管理和分发容器,在分布式系统中扮演着一个重要的角色。对于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、付费专栏及课程。

余额充值