第一章Kubernetes入门

Kubernetes是什么

kubernetes是一个全新的基于容器急速的分布式架构领先方案。是谷歌Borg的开源版本。Borg是谷歌内部的集群管理系统,基于容器化技术,目的是实现资源管理道德自动化,以及跨多个数据中心的资源利用率最大化。

使用Kubernetes提供的解决方案,可以节省开发成本,并且Kubernetes提供了强大的自动化机制,使得系统后期的运维难度和成本大幅度降低。Kubernetes提供的是一个开放的开发平台,不及局限于任何的语言,没有限定任何的编程接口,什么语言编写的服务,都可以被映射为Kubernetes的服务,并通过TCP协议进行交互。Kubernetes平台对现有的编程语言,编程框架、中间件没有任何侵入性。

Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有全的集群管理能力,包括多层次的安全防护和准入机制、多租户的应用支撑能力、透明的服务注册和服务发现机制、内建的只能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容机制,可拓展的资源自动调度机制,以及多粒度的资源配额管理能力。

Kubernetes提供了完善的管理工具,包括开发、测试、部署、运维监控。Kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式完备的分布式系统开发和支撑平台。

Kubernetes中的基本概念
Service是分布式集群架构的核心,一个Service对象拥有

  • 唯一指定的名称
  • 拥有一个虚拟IP和端口号
  • 能提供远程服务的能力
  • 被映射到提供这种服务能力的一组容器应用上

Service的服务进程目前都基于Socket通信方式对外提供服务,或者是实现了某个具体业务的特定的TCP Server进程。每个服务进程都提供独立的Endpoint(IP + Port)访问点,Kubernetes可以让我们通过Service(虚拟IP + Server Port)连接到指定的Service。不管有多少个服务进程,服务进程是否正常工作,都不会影响对服务的正常调用。

容器提供了强大的隔离功能,所以有必要为把Service提供服务的这组进程放入容器进行隔离。所以Kubernetes设计了Pod对象,将每个服务进程包装到响应的Pod,时期成为Pod中运行的一个容器。

为了建立Service和Pod的联系,Kubernetes为每一个Pod都贴了一个标签。然后给Service定义标签选择器,通过选择器选择条件来选择不同的Pod。

Pod运行在一个被称为节点的环境中,这个节点既可以物理节点,也可以是私有云或公有云中的一个虚拟机,通常一个节点运行几百个Pod;每个Pod运行着一个特殊的被称为Pause的容器,其他容器责则称为业务容器。这些业务容器共享Pause容器之间的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更高效,在设计Pod的时候,可以将一组密切的进程放入同一个Pod,并不是每个Pod和他里面运行的容器都能被映射到一个Service上,只有提供服务的那组Pod才被映射为一个Pod

集群管理
Kubernetes将集群中的机器划分为一个Master和一些Node。在Master上运行着集群管理相关的一组进程kube-apiserver、kuber-controller-manager和kube-schduler,这些进程实现了集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错的那个管理功能。

Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单位是Pod。在Node上运行着Kubernetes的Kubelet、Kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器
IT系统中服务扩容和服务升级的问题
在Kubernetes集群中,只需要为需要扩容的Service关联的Pod创建一个RC(Replication Controller),服务扩容的问题就可以解决了。在一个RC定义文件中包括以下三个关键信息

  • 目标Pod的定义
  • 目标Pod需要运行的副本数量
  • 需要监控的目标Pod的标签

在创建好RC后,Kubernetes会通过RC中的Label选出对应的Pod实例并实时监控状态和数量,如果实例数量少于定义的副本数量,就会根据在RC中定义的Pod模板创建一个新的Pod,然后将此Pod调度到合适的Node上启动运行,直到Pod实例的数量达到预定目标。有了RC之后,服务扩容就只需要调整副本数量即可

为什么需要Kubernetes

从单机走向集群化已成为必然,Kubernetes是业界认可和看好的基于Docker的大规模容器分布式系统解决方案
使用Kubernetes的好处

  • 可以轻装上阵开发复杂系统
  • 可以全面拥抱微服务架构。微服务架构的核心是将一个巨大的单体应用分解为很多个相互连接的微服务,一个微服务可由多个服务实例连接,副本的数量可以随着系统的负荷变化进行调整

微服务架构使得每个服务可以独立开发、升级和扩展,所以系统具有很高的稳定性和快速迭代能力。

Kubernetes的架构方案完全屏蔽了底层网络的细节,基于Service的虚拟IP的设计思路让架构与底层硬件拓扑无关,我们无需改变运行期的配置文件,就你那个将系统从物理机环境迁移到公有云。

Kubernetes内部的弹性服务扩容机制,可以让我们轻松面对突发流量。在服务高峰期,我们可以通过选择在公有云中扩容某些Service实例的副本来提升系统的吞吐量。

Kubernetes提供强大的扩容机制,可以利用Kubernetes提供的工具,不需要修改代码,就很容易将Kubernetes集群从包含几个Node的集群扩展到上百个Node的集群,甚至可以完成在线扩容

原文地址:https://www.cnblogs.com/zykBlog/p/13855359.html