一.Kubernetes是什么
Kubernetes是Google开源的一个容器编排引擎,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效。它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
二.Kubernetes的特性
☸ 1.自动化上线和回滚
Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。
☸ 2.服务发现与负载均衡
无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。关于服务发现和负载均衡的概念我在之前的Spring Cloud总结篇已经讲得非常清楚了,这里不做过多的解释。 服务发现:服务可以通过自动发现的形式找到它所依赖的服务。 负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡。
☸ 3.存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。可以根据容器自身的需求自动创建存储卷。
☸ 4.自动完成装箱计算
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
☸ 5.自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。如果发现新发布的程序版本有问题,可以立即回退到原来的版本。
☸ 6.密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。Kubernetes 的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。它的目的就是实现资源管理的自动化.
三.Kubernetes的设计架构
1.Kubernetes 组件介绍
一个 kubernetes 集群主要由若干个控制节点(Master Node)和 工作节点(Worker Node)构成,每个节点上都会安装不同的组件。
控制节点(Master Node):集群的控制平面,负责集群的决策。每个集群要求至少有一个 Master 节点来负责集群的管控。
○ API Server:集群操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。
○ Scheduler:负责集群资源调度,按照预定的调度策略将 Pod 调度到相应的 node 节点上。
○ ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展和滚动更新等。
○ Etcd:负责存储集群中各种资源对象的信息。
工作节点(Worker Node) :集群的数据平面,负责为容器提供运行环境。工作负载节点,由 Master 分配容器到这些 Node 工作节点上,然后 Node 节点上的 Docker 负责容器的运行。
○ Kubelet:负责维护容器的生命周期,即通过控制 Docker ,来创建、更新、销毁容器。
○ KubeProxy:负责提供集群内部的服务发现和负载均衡。
○ Docker:负责节点上容器的各种操作。
2.kubernetes 组件调用关系的应用示例
以部署一个 Nginx 服务来说明 Kubernetes 系统各个组件调用关系:
● ① 首先需要明确,一旦 Kubernetes 环境启动之后,master 和 node 都会将自身的信息存储到etcd数据库中。
● ② 一个Nginx服务的安装请求首先会被发送到 master 节点上的 API Server 组件。
● ③ API Server 组件会调用 Scheduler 组件来决定到底应该把这个服务安装到那个 node 节点上。此时,它会从 etcd 中读取各个 node 节点的信息,然后按照一定的算法进行选择,并将结果告知 API Server 。
● ④ API Server 调用 Controller-Manager 去调用 Node 节点安装 Nginx 服务。
● ⑤ Kubelet 接收到指令后,会通知 Docker ,然后由 Docker 来启动一个 Nginx 的 Pod 。Pod 是 Kubernetes 的最小操作单元,容器必须跑在 Pod 中,一个 Pod 中可以有一个或多个容器。
● ⑥ 一个 Nginx 服务就运行了,如果需要访问 Nginx ,就需要通过 kube-proxy 来对 Pod 产生访问的代理,这样,外界用户就可以访问集群中的 Nginx 服务了。
3.kubernetes 相关的基本概念
● Master:集群控制节点,每个集群要求至少有一个 Master 节点来负责集群的管控。
● Node:工作负载节点,由 Master 分配容器到这些 Node 工作节点上,然后 Node 节点上的 Docker 负责容器的运行。
● Pod:Kubernetes 的最小控制单元,容器都是运行在 Pod 中的,一个 Pod 中可以有一个或多个容器。
● Controller:控制器,通过它来实现对 Pod 的管理,比如启动 Pod 、停止 Pod 、伸缩 Pod 的数量等等。控制器是一类概念,也就是说,不仅仅只有一种控制器,而是很多种控制器的,每一种控制器都有他特殊的应用场景。
● Service:Pod 对外服务的统一入口,可以维护同一类的多个 Pod 。
● Label:标签,用于对 Pod 进行分类,同一类 Pod 会拥有相同的标签。
● NameSpace:命名空间,用来隔离 Pod 的运行环境。
先写到这里,下一节再来学习k8s集群环境的搭建。