您的位置:首页 > 其它

Kubernetes 基本概念与核心组件整理

2018-08-14 17:59 691 查看

Kubernetes 是 Google 基于 Borg 开源的容器编排调度,用于管理容器集群自动化部署、扩容以及运维的开源平台。作为云原生计算基金会 CNCF(Cloud Native Computing Foundation)最重要的组件之一(CNCF 另一个毕业项目 Prometheus ),它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes 可以帮你将系统自动地达到和维持在这个状态,Kubernetes 也可以对容器(Docker)进行集群管理和服务编排(Docker Swarm 类似的功能)。

使用 Kubernetes,可以快速高效地响应客户需求:

  • 动态地对应用进行扩容。
  • 无缝地发布新特性。
  • 仅使用需要的资源以优化硬件使用。

Kubernetes 这个名字源自希腊语,意思是“舵手”,也是“管理者”,“治理者”等词的源头。k8s 是 Kubernetes 的简称(用数字『8』替代中间的8个字母『ubernete』)。

为何要使用容器技术

下面是一些关键点:

  • 以应用程序为中心的管理: 将抽象级别从在虚拟硬件上运行操作系统上升到了在使用特定逻辑资源的操作系统上运行应用程序。这在提供了 Paas 的简洁性的同时拥有 IssS的 灵活性,并且相对于运行12-factor应用程序有过之而无不及。
  • 开发和运维的关注点分离: 提供构建和部署的分离;这样也就将应用从基础设施中解耦。
  • 敏捷的应用创建和部署: 相对使用虚拟机镜像,容器镜像的创建更加轻巧高效。
  • 持续开发,持续集成以及持续部署: 提供频繁可靠地构建和部署容器镜像的能力,同时可以快速简单地回滚(因为镜像是固化的)。
  • 松耦合,分布式,弹性,自由的微服务: 应用被分割为若干独立的小型程序,可以被动态地部署和管理 -- 而不是一个运行在单机上的超级臃肿的大程序。
  • 开发,测试,生产环境保持高度一致: 无论是再笔记本电脑还是服务器上,都采用相同方式运行。
  • 兼容不同的云平台或操作系统上: 可运行与 Ubuntu,RHEL,on-prem 或者 Google Container Engine,覆盖了开发,测试和生产的各种不同环境。
  • 资源分离: 带来可预测的程序性能。
  • 资源利用: 高性能,大容量。

Kubernetes 不是 PaaS(平台即服务)

  • Kubernetes 并不对支持的应用程序类型有任何限制。 它并不指定应用框架,限制语言类型,Kubernetes 旨在支持各种多种多样的负载类型:只要一个程序能够在容器中运行,它就可以在Kubernetes中运行。
  • 由于 Kubernetes 运行再应用层而不是硬件层,所以它提供了一些一般 PaaS 提供的功能,比如部署,扩容,负载均衡,日志,监控,等等。无论如何,Kubernetes 不是一个单一应用,所以这些解决方案都是可选可插拔的。
  • Kubernetes 并不是单单的"编排系统";“编排”的技术定义为按照指定流程执行一系列动作:执行A,然后B,然后C。相反,Kubernetes 有一系列控制进程组成,持续地控制从当前状态到指定状态的流转。无需关注你是如何从A到C:只需结果如此。这样将使得系统更加易用,强大,健壮和弹性。

Kubernetes 核心组件

Kubernetes 集群可以部署在物理机或虚拟机上,用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作。 Kubernetes 的抽象性允许您将容器化的应用程序部署到集群,而不必专门将其绑定到单个计算机。为了利用这种新的部署模型,应用程序需要以将它们与各个主机分离的方式打包: 它们需要被容器化。容器化应用程序比过去的部署模型更灵活和可用,其中应用程序直接安装到特定机器上,作为深入集成到主机中的软件包。

Kubernetes 集群由两种类型的资源组成:

  • Master 节点是集群的调度节点 (Master 节点管理集群,而 Minion 用于托管正在运行的应用程序)
  • Minion 节点是应用程序实际运行的工作节点(Minion 节点使用 Master 公开的 Kubernetes API 与 Master 通信)

Master 负责管理集群,Minion 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。每个工作节点都有一个 Kubelet,Minion 节点上还应具有处理容器操作的工作,例如 Docker 或 rkt。

Master

Kubernetes 里的 Master 指的是集群控制节点,每个 Kubernetes 集群里需要有一个 Master节 点来负责整个集群的管理和控制,基本上 Kubernetes 所有的控制命令都是发给它,它来负责具体的执行过程,我们后面所有的执行命令基本都是在 Master 上运行的,它就是整个集群的“首脑”。

Master节点上运行着以下的一组进程

  • kube-apiserver 提供了 HTTP Rest 接口的关键服务进程,是 Kubernetes 里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进行。

  • kube-controller-manager,Kubernetes里所有资源对象的自动化控制中心,也可以理解为资源对象的“大总管”。

  • kube-scheduler 负责资源调度(Pod调度)的进程。

  • etcd  用于共享配置和服务发现,保存 Kubernetes 集群所有的网络配置和对象的状态信息。

Minion

除了 Master,Kubernetes 集群中的其它机器又被称为 Minion 节点,是 Kubernetes 集群中的工作负载节点,每个 Minion 都会被 Master 分配一些工作负载(Docker 容器),当某个Minion 宕机时,其上的工作负载会被 Master 自动转移到其它节点上。

每个 Minion 节点上都运行着以下的一组关键进程:

  • kubelet:负责 Pod 对应的容器的创建,启动等任务,同时与Master节点密切协作。

  • kube-proxy:实现 Kubernetes Service 的通信与负载均衡机制的重要组件。

  • lube-proxyContainer Runtime(Docker, rkt, runc):负责本机的容器创建和管理工作。

REFER:
https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
https://www.cncf.io/projects/
https://yq.aliyun.com/articles/596889?spm=a2c4e.11153940.blogcont596633.18.66d317fa5uUaVV

https://github.com/rootsongjc/kubernetes-handbook

https://github.com/ramitsurana/awesome-kubernetes

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: