Kubernetes 的官方 logo 是一个舵,docker 的官方 logo 是一个集装箱,那集装箱装在船上,需
要去哪,往哪走,是靠船的舵来掌控方向的,舵相当于一个方向盘,所以可以看出 kubernetes 是管理容器的。
1、Kubernetes 是一个可移植、可扩展的、开源的容器管理平台,简称 k8s:
2、Kubernetes 提供了应用程序的快速部署、升级和回滚的能力,利用 service 可以实现服务注
册、发现;通过 kube-proxy 可以实现负载均衡,通过 cordns 可实现域名解析,通过 Ingresscontroller
可以实现七层负载均衡等功能。
3、可以对 pod 自动化部署、自动化扩缩容、跨主机管理等;K8s 部署服务,都是封装到 pod 里的,这个 pod 自动扩缩容很有必要
4、可以对代码进行灰度发布、金丝雀发布、蓝绿发布、滚动更新等;
5、具有完整的监控系统和日志收集平台,具有故障自恢复的能力。
Kubernetes 单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。
来源于 Google 的 Borg 项目
Borg 是谷歌内部的一个容器编排工具,谷歌业务 90%以上都在 Borg 上运行,Borg 在谷歌内部已 经使用了大概 15 年。 K8S是在 Borg 的基础上开发出来的轻量级容器编排工具。K8S 的根基非常牢固,是站在巨人的肩膀上发展起来的项目。开源之后,迅速称霸容器编排技术领域
单节点和高可用架构:
k8s 的物理架构是 master/node 模式:
k8s 集群至少需要一个主节点(Master)和多个工作节点(Worker),主节点是集群的控制节点,负责
整个集群的管理和控制,主节点主要用于暴露 API,调度部署和节点的管理。工作节点主要是运行 pod
的。
单 master 节点架构如下:
多 master 节点架构如下:
kubectl:管理 k8s 的命令行工具,可以操作 k8s 中的资源对象。
etcd: 是一个高可用的键值数据库,存储 k8s 的资源状态信息和网络信息的,etcd 中的数据变更
是通过 api server 进行的。
apiserver: 提供 k8s api,是整个系统的对外接口,提供资源操作的唯一入口,供客户端和其它组
件调用,提供了 k8s 各类资源对象(pod,deployment,Service 等)的增删改查,是整个系统的数据总线和数据中心,并提供认证、授权、访问控制、API 注册和发现等机制,并将操作对象持久化到 etcd中。相当于“营业厅”。
scheduler:负责 k8s 集群中 pod 的调度的 , scheduler 通过与 apiserver 交互监听到创建 Pod
副本的信息后,它会检索所有符合该 Pod 要求的工作节点列表,开始执行 Pod 调度逻辑。调度成功后将Pod绑定到目标节点上,相当于“调度室”。
controller-manager:作为集群内部的管理控制中心,负责集群内的 Node、Pod 副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额
(ResourceQuota)的管理,当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
kubelet: 每个 Node 节点上的 kubelet 定期就会调用 API Server 的 REST 接口报告自身状态,
API Server 接收这些信息后,将节点状态信息更新到 etcd 中。kubelet 也通过 API Server 监听 Pod信息,从而对 Node 机器上的 POD 进行管理:如创建、删除、更新 Pod
kube-proxy:提供网络代理和负载均衡,是实现 service 的通信与负载均衡机制的重要组件,kube-proxy 负责为 Pod 创建代理服务,从 apiserver 获取所有 service 信息,并根据 service 信息创
建代理服务,实现 service 到 Pod 的请求路由和转发,从而实现 K8s 层级的虚拟转发网络,将到
service 的请求转发到后端的 pod 上。
Calico:Calico 是一个纯三层的网络插件,calico 的 bgp 模式类似于 flannel 的 host-gw,calico
在 kubernetes 中可提供网络功能和网络策略
Cordns:k8s1.11 之前使用的是 kube dns,1.11 之后才有 coredns,coredns 是一个 DNS 服务器,能够为 Kubernetes services 提供 DNS 记录
Calico:Calico 是一个纯三层的网络插件,calico 的 bgp 模式类似于 flannel 的 host-gw,calico在 kubernetes 中可提供网络功能和网络策略
kube-proxy:提供网络代理和负载均衡,是实现 service 的通信与负载均衡机制的重要组件,kube-proxy 负责为 Pod 创建代理服务,从 apiserver 获取所有 service 信息,并根据 service 信息创建代理服务,实现 service 到 Pod 的请求路由和转发,从而实现 K8s 层级的虚拟转发网络,将到service 的请求转发到后端的 pod 上。
kubelet: 每个 Node 节点上的 kubelet 定期就会调用 API Server 的 REST 接口报告自身状态,API Server 接收这些信息后,将节点状态信息更新到 etcd 中。kubelet 也通过 API Server 监听 Pod信息,从而对 Node 机器上的 POD 进行管理:如创建、删除、更新 Pod
Web UI(Dashboard):Dashboard 是 k8s 集群的一个 web ui 界面,通过这个界面可以对 k8s资源进行操作,如创建 pod,创建存储,创建网络等,也可以监控 pod 和节点资源使用情况。
prometheus+alertmanager+Grafana:监控系统,可以对 kubernetes 集群本身的组件监控,也可对物理节点,容器做监控,对监控到的超过报警阀值的数据进行报警,这个报警会发送到指定的目标,如钉钉,微信,qq,slack 等。
efk(全称 elasticsearch、fluentd、kibana):日志管理系统,可以对物理节点和容器的日志进行统一收集,把收集到的数据在 kibana 界面展示,kibana 提供按指定条件搜索和过滤日志。
Metrics:用于收集资源指标,hpa 需要基于 metrics 实现自动扩缩容