Kubernetes一词来源于希腊语,翻译来的意思就是舵手或者船长的意思,而它的logo也是很符合这个词的
至于k8s则是通过将ubernetes这8个字母替换为8而导出的缩写
Kubernetes是什么?
k8s是Google开源的容器集群管理系统(思想来源于谷歌内部系统Borg)。在Docker技术的基础上,为容器化的应用提供以下一系列功能来提高大规模容器集群管理的便捷性:
- 服务发现
- 负载均衡
- 自动发布与回滚
- 资源调度
- 弹性伸缩
- 自动恢复
- 健康检查
- 。。。
现在的k8s托管于CNCF基金会,也是CNCF的第一个项目。下面是CNCF的全景图
Kubernetes的架构组成
k8s由 Master 和 Node 两种节点组成,而这两种角色分别对应着控制节点和计算节点
其中最上方是UI和CLI代表了两种操控k8s的方式,即dashboar和命令行方式
Master节点是集群中的控制节点,它是由以下几个独立组件组合而成的:
- 负责 API 服务的 kube-apiserver
- 提供集群管理的 REST API 接口,包括认证授权、数据校验以及集群状态变更
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过 API Server 查询或修改数据
- 负责调度的 kube-scheduler
- 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点
- 调度器需要充分考虑诸多的因素:
- 公平调度
- 资源高效利用
- QoS
- affinity 和 anti-affinity
- 数据本地化
- 内部负载干扰
- deadlines
- 负责容器编排的 kube-controller-manager
- 由 kube-controller-manager 和 cloud-controller-manager 组成,是 Kubernetes 的大脑,它通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态
- 整个集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd中
- 分布式存储Etcd
- 分布式 key-value 存储,可用于服务发现、共享配置以及一致性保障
计算节点上是运行所有业务容器的节点
- 在 Kubernetes 项目中,每个节点上都运行一个 kubelet 服务进程,默认监听 10250 端口,接收并执行 master 发来的指令,管理 Pod 及 Pod 中的容器。每个 kubelet 进程会在 API Server 上注册节点自身信息,定期向 master 节点汇报节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源
- 每台机器上都运行一个 kube-proxy 服务,它监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载均衡
除了主节点和计算节点还有一些组件是全局通用的
- 负责整个集群dns服务的CoreDNS
- 提供跨 Region 跨服务商 K8s 集群服务的集群联邦(Federation)
- Kubernetes 的命令行工具(CLI)kubectl
Kubernetes的组件通信
以用户需要操作一个pod为例:
- 当用户在k8s的ui界面或者是通过命令行与APIServer交互
- APIServer首先会把用户的命令存储到etcd中
- 调度器kube-scheduler会通过watch机制从APIServer获取到需要调度一个pod的信息
- kube-scheduler得到信息后根据自身的内存状态进行一次决策,然后再通知到APIServer
- APIServer得到kube-scheduler的通知同样先把命令存储到etcd中
- 相应节点的kubelet通过watch机制得知需要操作的pod去调用相应的存储插件、网络插件来操作响应的pod
推荐阅读
- SpringCloud学习系列汇总
- 为什么一线大厂面试必问redis,有啥好问的?
- 多线程面试必备基础知识汇总
- Java集合源码分析汇总-JDK1.8
- Linux常用命令速查-汇总篇
- JVM系列文章汇总
- MySQL系列文章汇总
- RabbitMQ系列文章汇总
博客所有文章首发于公众号《Java学习录》转载请保留
扫码关注公众号即可领取2000GJava学习资源