allforcloud

《Kubernetes权威指南》01_Kubernetes入门——Kubernetes 是什么

01_Kubernetes入门

1.1 Kubernetes 是什么?

 基于容器技术的分布式架构领先方案。
 Kubernetes 是一个完备的分布式系统支撑平台,Kubernetes 具备完备的集群管理能力,包括:
        多层次的安全防护和准入机制、
        多租户应用支撑能力、
        透明的服务注册和服务发现机制、
        内建的智能负载均衡、
        强大的故障发现和自我修复能力、
        服务滚动升级和在线扩容能力、
        可扩展的资源自动调度机制、
        多粒度的资源配额管理能力。
Service
 在Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征:
        拥有唯一指定的名称(比如mysql-server)。
        拥有一个虚拟IP(Cluster IP、ServiceIP或VIP)和端口号。
        能够提供某种远程服务能力。
        被映射到提供这种服务能力的一组容器应用上。
 Service的服务进程目前都是基于Socket通信方式对外提供服务,比如Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的特定TCP Server进程。
 虽然一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endponit(IP + Port)访问点,但Kubernetes能够让我们通过Service(虚拟ClusterIP + ServicePort)连接到指定的Service。
 有了Kubernetes内建的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其他机器,都不会影响对服务的正常调用。
Pod
 容器提供了强大的隔离功能,所有有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程都包装到相应的Pod中,使其成为在Pod中运行的一个容器(Container)。为了建立Service和Pod间的关联关系,Kubernetes首先给每个Pod都贴上一个标签(Label),给运行MySQL的Pod贴上name=mysql的标签,然后给相应的Service定义标签选择器(Label Selector),比如MySQL Service的标签选择器的选择条件为name=mysql,意为该Servie要作用于所有包含name=mysql Label的Pod
 Pod的概念:
        Pod运行在一个被成为节点(Node)的环境中。这个节点可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个Pod;
        每个Pod中都运行着一个特殊的被成为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间的通信和数据交换更为高效,在设计时我们可以充分的利用这一特性将一组密切相关的服务进程放入同一个Pod中。
        并不是每个Pod和它里面运行的容器都能被映射到一个Service上,只有提供服务的 那组Pod才会被映射为一个服务。
集群管理
 Kubernetes 将集群中的机器划分为一个Master和一些Node。在Master上运行着集群管理相关的一组进程 kube-apiserver、kube-controller-manager 和 kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小单元时Pod。在Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。
服务扩容和服务升级
 只需要为需要扩容的Service关联的Pod创建一个RC(Replication Controller),在一个RC定义文件中包括以下3个关键信息:
        目标Pod的定义;
        目标Pod需要运行的副本数量(Replicas);
        要监控的目标Pod的标签;
        在创建好RC(系统将自动创建好Pod)后,Kubernetes会通过在RC中定义的Label筛选出对应的Pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则会根据在RC中定义的Pod模板创建一个新的Pod,然后将此Pod调度到合适的Node上启动运行,直到Pod实例的数量达到预定目标。

1.2 为什么要用Kubernetes?

 可以“轻装上阵”地开发复杂系统:
        一名架构师负责系统中服务组件的架构设计;
        几名开发工程师负责业务代码的开发;
        一名系统兼运维工程师负责Kubernetes的部署和运维;
 可以全面拥抱微服务;
 可以随时随地将系统整体“迁移”到公有云上;
 Kubernetes内在的服务弹性扩容机制可以让我们轻松应对突发流量;
 Kubernetes系统架构超强的横向扩容能力可以让我们的竞争力大大提升;
 
 
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2020-02-05 11:51  allforcloud  阅读(111)  评论(0编辑  收藏  举报

导航