Kubernetes架构简介
Kubernetes是什么?
我们首先看一下“维基百科
”对Kubernetes的说明:
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“
容器化(containerized)应用程序
”的开源系统。该系统由
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker
等。CNCF于2017年宣布首批Kubernetes认证服务提供商(KCSPs),包含IBM、华为、MIRANTIS等服务商。
Kubernetes能做什么?
Kubernetes 的主要优势在于,它提供了一个便捷有效的平台,让您可以在物理机和虚拟机集群上调度和运行容器。更广泛一点说,它可以帮助您在生产环境中,完全实施并依托基于容器的基础架构运营。由于 Kubernetes 的实质在于实现操作任务自动化,所以您可以将其它应用平台或管理系统分配给您的许多相同任务交给容器来执行。
利用 Kubernetes,您能够达成以下目标:
- 跨多台主机进行容器编排。
- 通过Node label机器实现对不同类型机器的统一管理及定向调度。
- 更加充分地利用硬件,最大程度获取运行企业应用所需的资源。
- 有效管控应用部署和更新,并实现自动化操作。
- 挂载和增加存储,用于运行有状态的应用。
- 快速、按需扩展容器化应用及其资源。
- 对服务进行声明式管理,保证所部署的应用始终按照部署的方式运行。
- 利用自动布局、自动重启、自动复制以及自动扩展功能,对应用实施健康状态检查和自我修复。
- 借助Kubernetes中的Service对象,可以帮助我们轻松实现服务发现功能。
- 轻松实现对多个服务实例的负载均衡,有效分担服务压力。
- 实现应用滚动更新,实现服务的平滑升级。
- 可以通过
kubectl logs
命令获取应用实时日志,也可以使用ELK实现日志采集和存储。 - Kubernetes提供了ABAC、RBAC、Webhook等多种机制来帮助我们轻松实现认证和鉴权。
- 实现容器、节点、集群等多个维度的资源使用监测。
Kubernetes架构图
上面描述了Kubernetes这么多强大的功能,相信你已经迫不及待想对Kubernetes有更深入的了解了。我们就先从下面的这张图来了解一下Kubernetes的整体架构吧。
iKubernetes架构图每一个 Kubernetes 就集群都由一组 Master 节点和一系列的 Worker 节点组成,其中 Master 节点主要负责存储集群的状态并为 Kubernetes 对象分配和调度资源。
Master
作为管理集群状态的 Master 节点,它主要负责接收客户端的请求,安排容器的执行并且运行控制循环,将集群的状态向目标状态进行迁移,Master 节点内部由三个组件构成:
- kube-apiserver
提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制; - kube-controller-manager
负责维护集群的状态,比如故障检测、自动扩展、滚动更新等; - kube-scheduler
负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
Worker
其他的 Worker 节点负责运行应用,它主要由 kubelet 、Container runtime 和 kube-proxy 三部分组成:
- kubelet
负责维持容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;kubelet 周期性地从 API Server 接受新的或者修改的 Pod 规范并且保证节点上的 Pod 和其中容器的正常运行,还会保证节点会向目标状态迁移,该节点仍然会向 Master 节点发送宿主机的健康状况。 - Container runtime
负责镜像管理以及 Pod 和容器的真正运行(CRI),默认的容器运行时为 Docker; - kube-proxy
负责宿主机的子网管理,同时也能将服务暴露给外部,其原理就是在多个隔离的网络中把请求转发给正确的 Pod 或者容器。
etcd
etcd 是一个分布式的一个存储系统,kube-apiserver 中所需要的这些原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。etcd可以以组件的形式部署在Master节点,也可以以高可用的形式单独部署在集群外。
kubectl
kubectl 是Kubernetes集群的命令行管理工具,通过kubectl命令可以实现与Kubernetes集群的交互。
除了核心组件,还有一些推荐的 Add-ons:
kube-dns 负责为整个集群提供 DNS 服务
Ingress Controller 为服务提供外网入口
Heapster 提供资源监控
Dashboard 提供 GUI
Federation 提供跨可用区的集群
Fluentd-elasticsearch 提供集群日志采集、存储与查询