1. Kubernetes(k8s)是什么?

  1. 首先,它是一个全新的基于容器技术的分布式架构领先方案,目的是实现资源管理的自动化。
  2. 其次,k8s 是一个开放的开发平台,它不局限于任何一种语言,没有限定任何编程接口,所以不论是用Java、Go、C++还是python编写的服务,都可以毫无困难地映射为 k8s 的Service,并通过标准的TCP通信协议进行交互。此外,由于 k8s 平台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到Kubernetes平台上。
  3. 最后,k8s 是一个完备的分布式系统支撑平台。K8s 具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,k8s 还提供了完善的管理工具,这些工具涵盖了包括开放、部署测试、运维监控在内的各个环节。

因此,k8s是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开放和支撑平台。

1.1 k8s的基本知识

在k8s中,Service(服务)是分布式集群架构的核心,一个Service对象拥有如下关键特征:

  • 拥有一个唯一指定的名字(如 my-mysql-server);

  • 拥有一个虚拟IP(Cluster IP、Service IP或VIP)和端口号;

  • 能够提供某种远程服务能力;

  • 被映射到了提供这种服务能力的一组容器应用上。

    Service的服务进程目前都基于Socket通信方式对外提供服务,比如 Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的一个特定的TCP Server进程。虽然一个 Service 通常由多个相关的服务进程来提供服务,每个服务进程都有一个独立的 EndPoint(IP+Port)访问点,但k8s能够让外面通过Service(虚拟Cluster IP + Service Port)连接到指定的 Service上。

    容器提供了强大的隔离功能,所以有必要把为 Service 提供服务的这组进程放入容器中进行隔离。为此,k8s设计了 Pod 对象,将每个服务进程包装到相应的 Pod 中,使其成为 Pod 中运行的一个容器(Container)。为了建立 Service 和 Pod 间的关联关系,k8s首先给每个 Pod 贴上一个标签(Label),给运行的 MySQL 的 Pod 贴上 name=mysql 标签,给运行 PHP 的 Pod 就贴上 name=php 标签,然后给相应的 Service 定义标签选择器(Label Selector),比如 MySQL Service 的标签选择器的选择条件为 name=mysql,意为该 Service 要作用于所有包含 name=mysql 的 Pod 上。这样就解决了 Service 与 Pod 的关联关系。

    ​Pod 运行在一个我们称之为 节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个 Pod;其次,每个 Pod 里运行着一个特殊的被称为 Pause 的容器,其他容器则为业务容器,这些 业务容器共享 Pause 容器的 网络栈和 Volume 挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以 **将一组密切相关的服务进程放入同一个 Pod中;**最后,需要注意的是,并不是每个 Pod 和它里面运行的容器都能 ”映射“ 到一个 Service 上,只有那些提供服务(无论是对内还是对外)的一组 Pod 才会被 “映射”成一个服务。

    ​在集群管理方面,k8s 将集群中的机器划分为一个 Master 节点和一群工作节点(Node)。 其中,在 Master 节点上运行着集群管理的一组进程 kube-apiserver、kube-controller-manager 和 kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是全自动完成的。Node 作为集群中的工作节点,运行真正的应用程序,在 Node 上 k8s 管理的最小运行单位是 Pod。Node 上运行着 k8s 的 kubelet、kebu-proxy 服务进程,这些服务进程负责 Pod 的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。

使用 k8s 进行服务扩容和服务升级

​ 在 k8s 集群中,你只需为需要扩容的 Service 关联的 Pod 创建一个 Replication Controller(简称 RC),在一个 RC 定义文件中包括以下 3个关键信息:

  • 目标 Pod 的定义;

  • 目标 Pod 需要运行的副本数量 (Eplicas);

  • 要监控的目标 Pod 的标签(Label)

    ​在创建好 RC 后(系统将自动创建好 Pod),k8s会通过 RC 中定义 的 Label 筛选出对应的 Pod 实例并实时监控其状态和数量,如果实例少于定义的副本数量(Replicas),则会根据 RC 中定义的 Pod 模板来创建一个新的 Pod,然后将此 Pod 调度到合适的 Node 上启动运行,知道 Pod 实例数量达到预定目标。服务的扩容也只需要 修改 RC 中的副本数量即可。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐