一文入门Kubernetes

Kubernetes(一般缩写为K8S)是容器编排平台。segmentfault

Kubernetes提供了支持复杂容器应用程序所需的一切。对于开发人员和运营人员来讲,这是最便捷,最受欢迎的框架,几乎全部组织的DevOps团队都普遍使用它。服务器

v2-703d1417f2aa7eaf0477962b4dd9e379_720w.png

Kubernetes对计算机集群而言,就像操做系统对计算机而言。restful

为了方便管理和服务发现,Kubernetes将组成一个应用程序的容器分组为逻辑单元。这对于微服务应用程序特别有用。网络

尽管Kubernetes在Linux上运行,但它与平台无关,能够在裸机,虚拟机,云实例或OpenStack上运行。最新版本的Kubernetes已经支持在Windows上运行。架构

v2-6c854f4f98723ad0771fe4e533c003ba_720w.png

Kubernetes集群中的计算机或节点分为控制平面和工做负载平面。app

Kubernetes 集群架构负载均衡

Kubernetes集群由分为两组的节点组成:框架

  • 一组master节点,它们承载着控制平面组件,它们是系统的大脑,由于它们控制着整个集群。分布式

  • 一组构成工做负载平面的工做节点,工做负载(或应用程序)在此运行。ide

v2-e74e608e3e7b9e85c6f67d2affb07ecd_720w.png

这两个平面共同组成了Kubernetes集群。

Kubernetes Master 节点

这是Kubernetes控制面板或控制平面。这里作出有关集群的决策,例如调度和检测/响应集群事件。master服务器的组件能够在集群中的任何节点上运行。如下是每一个关键组件的细分:

  • API Server

  • 集群数据存储 (etcd)

  • Controller Manager

  • Scheduler

  • Dashboard (可选)

v2-63c7790a77051318224a2e25142f35fe_720w.png

让咱们逐一讨论这些组件。

API Server

这是Kubernetes控制面板中惟一用户可访问的API的组件,而且是你将与之交互的惟一主组件。 API Server公开了一个restful的Kubernetes API,并使用了JSON清单文件。

Kubernetes API Server公开了RESTful Kubernetes API。使用集群和其余Kubernetes组件的工程师经过此API建立对象。

集群数据存储

Kubernetes使用ETCD做为数据存储。这是一个一致性且高可用的键值存储,用于持久存储全部API对象。

因为API Server自己是无状态的,所以etcd分布式数据存储将持久保存经过API建立的对象。API Server 是与etcd通讯的惟一组件。

Controller Manager

kube-controller manager,它运行全部处理集群中任务的控制器。这些包括节点控制器,副本控制器,端点控制器以及服务账户和secret控制器。这些控制器中的每个都单独工做以维持所需状态。

控制器使你经过API建立的对象按照想要的状态运行。它们中的大多数仅建立其余对象,可是有些还与外部系统通讯(例如,经过其API的云提供商)。

Scheduler

调度程序监视新建立的Pod(一个或多个容器的组),并将其分配给节点。

调度程序决定每一个应用程序实例应在哪一个工做程序节点上运行。

v2-7193b81619b55852fa22ebfa9d6f072f_720w.png

master节点和工做节点的组件之间就是这样进行交互的。

Kubernetes 工做节点

master节点处理和管理集群,而工做节点运行容器并提供Kubernetes运行时环境。

主要组件有:

  • Kubelet

  • Container runtime

  • Kube-proxy

v2-0323df1f63481148b7139c230073f5e5_720w.png

让咱们逐一讨论这些组件。

Kubelet

工做节点包含一个kubelet。这是主要的节点代理。它监视API服务器以查找已分配给其节点的Pod。 Kubelet执行任务并维护向主节点报告pod状态的反向通道。

Kubelet是与API Server进行对话并管理在其节点上运行的应用程序的代理。它经过API报告这些应用程序和节点的状态。

Container Runtime

每一个pod内都有容器,kubelet经过Docker运行这些容器(拉取镜像,启动和中止容器等)。它还按期执行任何请求的容器活动性探测。它支持Docker和CRI-O等。

容器运行时,能够是Docker或与Kubernetes兼容的任何其余运行时。它按照Kubelet的指令在容器中运行你的应用程序。

Kube-proxy

这是节点的网络大脑,负责维护主机上的网络规则并执行链接转发。它还负责服务中全部Pod的负载平衡。

Kubernetes服务代理(Kube-proxy)对应用程序之间的网络流量进行负载平衡。

附加组件

大多数Kubernetes集群还包含其余几个组件。这包括DNS服务器,网络插件,日志记录代理等。

它们一般在工做节点上运行,但也能够配置为在master节点上运行。

Kubernetes 实战

v2-bae8eeeb6a0245b2b4e3cefa5c553a4b_720w.png

将应用程序部署到Kubernetes中的步骤。

在部署应用程序时,将发生如下操做:

  • 你将应用程序清单提交给Kubernetes API。 API Server将清单中定义的对象写入etcd。

  • 控制器会注意到新建立的对象,并建立几个新对象。

  • 调度程序将Pod分配给每一个工做节点。

  • Kubelet注意到已分配给本身的Pod。它经过Container Runtime运行应用程序实例。

  • Kube-proxy会注意到,应用程序实例已准备就绪,能够接受来自客户端的链接并为其配置负载均衡器。

  • Kubelet和控制器监视系统并保持应用程序运行。

Kubernetes是容器编排事实上的标准,固然在实际使用过程当中,须要了解更多的知识点,本文但愿能够帮助尚未接触过Kubernetes的小伙伴快速入门。

原文连接:https://segmentfault.com/a/1190000023380697

相关文章
相关标签/搜索