网站首页 > 博客文章 正文
前言
K8S现在是一项必会的技能,它为软件工程师提供了强大的容器编排能力,模糊了开发和运维之间的边界,让我们开发、管理和维护一个大型的分布式系统和项目变得更加容易,并且每次面试多多少少都会问到,笔者也是被问到了很多次。本文就准备用最短的篇幅来介绍下K8S的工作过程。
K8S架构组成
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。
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各组件间工作流程
①运维人员向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。
总结
Kubernetes的架构设计,理清楚之后,其实还是很简单的。面试的时候问到K8S原理,对于大部分人来说能答出这些,基本上就差不多了。Kubernetes深入的实现原理,还需要单独分析,本文只是一个抛砖引玉,如果有错误,欢迎大家批评指正。大家一起努力进步!
- 上一篇: k8s 的原理以及基本使用(k8s的主要功能)
- 下一篇: 30分钟了解K8S(30分钟了解唐朝)
猜你喜欢
- 2024-09-11 K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?
- 2024-09-11 从零开始入门 K8s | Kubernetes 存储架构及插件使用
- 2024-09-11 「云原生」Spark on k8s 讲解与实战操作
- 2024-09-11 K8S扫盲什么是云?什么是云架构?什么是云原生?什么是K8S?
- 2024-09-11 K8S | 核心原理分析(k8s原理图)
- 2024-09-11 《深入浅出Prometheus》 原理、应用、源码与拓展详解
- 2024-09-11 Kubernetes原理最全详解(图文全面总结)
- 2024-09-11 Kubernetes(k8s)CNI(flannel)网络模型原理
- 2024-09-11 「云原生」k8s 中的 hostNetwork 和 NetworkPolicy 讲解与实战操作
- 2024-09-11 「云原生」Kubernetes(k8s)最完整版环境部署(V1.24.1)
你 发表评论:
欢迎- 06-23MySQL合集-mysql5.7及mysql8的一些特性
- 06-23MySQL CREATE TABLE 简单设计模板交流
- 06-23MYSQL表设计规范(mysql设计表注意事项)
- 06-23MySQL数据库入门(四)数据类型简介
- 06-23数据丢失?别慌!MySQL备份恢复攻略
- 06-23MySQL设计规范(mysql 设计)
- 06-23MySQL数据实时增量同步到Elasticsearch
- 06-23MySQL 避坑指南之隐式数据类型转换
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)