面试问到了K8S原理,花5分钟来总结下,以后再也不怕了

开发 前端
K8S现在是一项必会的技能,它为软件工程师提供了强大的容器编排能力,模糊了开发和运维之间的边界,让我们开发、管理和维护一个大型的分布式系统和项目变得更加容易,并且每次面试多多少少都会问到,笔者也是被问到了很多次。本文就准备用最短的篇幅来介绍下K8S的工作过程。

前言

 

面试问到了K8S原理,花5分钟来总结下,以后再也不怕了
K8S

K8S现在是一项必会的技能,它为软件工程师提供了强大的容器编排能力,模糊了开发和运维之间的边界,让我们开发、管理和维护一个大型的分布式系统和项目变得更加容易,并且每次面试多多少少都会问到,笔者也是被问到了很多次。本文就准备用最短的篇幅来介绍下K8S的工作过程。

K8S架构组成

Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。

 

面试问到了K8S原理,花5分钟来总结下,以后再也不怕了
K8S架构图

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

k8s各组件间工作流程

 

面试问到了K8S原理,花5分钟来总结下,以后再也不怕了
K8S工作过程

①运维人员向kube-apiserver发出指令(我想干什么,我期望事情是什么状态)

(以下kube-apiserver简称apiserver、kube-controller-manager简称controller、kube-scheduler简称scheduler)

②api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化。(期望状态)

③controller通过list-watch机制,监测发现新的deployment,将该资源加入到内部工作队列,发现该资源没有关联的pod和replicaset,启用deployment controller创建replicaset资源,再启用replicaset controller创建pod。

④所有controller被创建完成后.将deployment,replicaset,pod资源更新存储到etcd。

⑤scheduler通过list-watch机制,监测发现新的pod,经过主机过滤、主机打分规则,将pod绑定(binding)到合适的主机。

⑥将绑定结果存储到etcd。

⑦kubelet每隔 20s(可以自定义)向apiserver通过NodeName 获取自身Node上所要运行的pod清单.通过与自己的内部缓存进行比较,新增加pod。

⑧kubelet创建pod。

⑨kube-proxy为新创建的pod注册动态DNS到CoreOS。给pod的service添加iptables/ipvs规则,用于服务发现和负载均衡。

⑩controller通过control loop(控制循环)将当前pod状态与用户所期望的状态做对比,如果当前状态与用户期望状态不同,则controller会将pod修改为用户期望状态,实在不行会将此pod删掉,然后重新创建pod。

总结

 

[[348916]]
K8S

Kubernetes的架构设计,理清楚之后,其实还是很简单的。面试的时候问到K8S原理,对于大部分人来说能答出这些,基本上就差不多了。Kubernetes深入的实现原理,还需要单独分析,本文只是一个抛砖引玉,如果有错误,欢迎大家批评指正。大家一起努力进步!

责任编辑:未丽燕 来源: 今日头条
相关推荐

2020-04-30 10:24:35

Spring循环依赖Java

2019-06-17 05:03:37

memcache内核架构

2020-02-19 19:26:27

K8S开源平台容器技术

2020-07-14 20:03:55

Windows 10Windows微软

2023-09-15 08:00:20

Ingress网关Istio

2023-11-15 13:44:00

k8s-域名日志

2023-11-27 13:54:00

kubernetes高可用

2021-08-10 18:36:02

Express原理面试

2020-11-24 07:48:32

React

2020-10-20 09:12:57

axios核心原理

2023-02-28 17:27:02

分库分表中间件

2023-09-27 08:09:22

2022-07-11 07:36:36

缓存缓存雪崩缓存击穿

2022-08-27 13:49:36

ES7promiseresolve

2020-10-15 12:52:46

SpringbootJava编程语言

2022-10-31 11:10:49

Javavolatile变量

2021-03-12 08:20:24

架构网络模型

2023-11-30 08:08:30

k8s优雅停机

2020-10-23 09:26:57

React-Redux

2023-06-06 08:14:18

核心Docker应用程序
点赞
收藏

51CTO技术栈公众号