【kubernetes】k8s概念、核心及组件详细说明

kubernetes说明

  • .背景介绍

    • 云计算飞速发展
      • IaaS(基础设施即服务)
        提供给消费者的服务是对所有计算基础设施的利用,包括处理CPU、内存、存储、网络和其它基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。
      • PaaS(平台即服务)
        提供给消费者的服务是把客户采用提供的开发语言和工具(例如Java,python, .Net等)开发的或收购的应用程序部署到供应商的云计算基础设施上去。
      • SaaS(软件即服务)
        提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储等等;
    • Docker技术突飞猛进
      • 一次构建,到处运行
      • 容器的快速轻量
      • 完整的生态环境
  • Kubernetes (通常称为 K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统,是 Google内部工具 Borg 的“开源版”。

  • kubernets=k8s原因是因为 k和s中间有8个字母。

  • kubernetes是用来管理容器的
    容器是由runtime(运行时)来生产的

  • 容器的编排工具

    • swarm
    • compose
    • mesos
    • openshift
    • kubernetes
  • kubernetes读音有以下几种

    • Q博耐替私
    • Q博耐tiu私
    • 酷博乃提私
    • 酷博乃tiu私
  • k8s并不直接管理一个个的容器,而是管理的一个个pod
    pod翻译成中文—豆荚
    最小的管理单位是pod

  • Kubernetes 目前是公认的最先进的容器集群管理工具,在 1.0 版本发布后,Kubernetes 的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos、rancher 等,诸多提供公有云服务的厂商在提供容器服务时也都基于 Kubernetes 做二次开发来提供基础设施层的支撑,比如华为。可以说 Kubernetes 也是 Docker 进军容器集群管理和服务编排领域最为强劲的竞争对手(Docker Swarm)。

  • Kubernetes 定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成 Kubernetes 的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由 Kubernetes API 提供——它被作为扩展的内部组件以及 Kubernetes 上运行的容器等使用。

  • 因为 Kubernetes 是由很多组件构成的一个系统,所以对于 Kubernetes 的安装部署来说,还是有些困难的,并且 Kubernetes 是 Google 开发的,有很多内部的依赖包都是需要穿墙访问的。

  • 当然,也有快速安装的工具,比如 kubeadm,kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes 集群的工具,目前的还处于孵化开发状态,伴随 Kubernetes 每个版本的发布都会同步更新,当然,目前的 kubeadm 是不能用于生产环境的。

kubernetes虚拟化环境框架图

下面的每张图都是独立的,是用不同的方法展示出来而已。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Kubernetes 特点

  • 简洁的:轻量级,简单,易上手
    • 可移植的:公有,私有,混合,多重云(multi-cloud)
    • 可扩展的: 模块化, 插件化, 可挂载, 可组合
    • 可自愈的: 自动布置, 自动重启, 自动复制
  • 通俗来说:
    • 自动化容器的部署和复制
    • 随时扩展或收缩容器规模
    • 将容器组织成组,并且提供容器间的负载均衡
    • 很容易地升级应用程序容器的新版本
    • 提供容器弹性,如果容器失效就替换它

Kubernetes 术语【核心概念】

Master【管理节点 (Master Node)】

  • 简单来说: 用于控制 Kubernetes 节点的计算机,所有任务分配都来自于此。
  • k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;Kubernetes Schedule是负责资源调度(Pod调度)的进程。

Node【工作节点 (Minion Node)】

  • 简单来说:执行请求和分配任务的计算机,由 Kubernetes 主机负责对节点进行控制。
  • Node也称之为worker。
  • Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,拥有名称和IP、系统资源信息。运行docker eninge服务,守护进程kunelet及负载均衡器kube-proxy.
    • 每个Node节点都运行着以下一组关键进程
    • kubelet:负责对Pod对于的容器的创建、启停等任务
    • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
    • Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作
  • Node节点可以在运行期间动态增加到Kubernetes集群中,默认情况下,kubelet会想master注册自己,这也是Kubernetes推荐的Node管理方式,kubelet进程会定时向Master汇报自身情报,如操作系统、Docker版本、CPU和内存,以及有哪些Pod在运行等等,这样Master可以获知每个Node节点的资源使用情况,冰实现高效均衡的资源调度策略。

Pod【容器集 (Pod)】

  • 简单来说:被部署在单个节点上的,且包含一个或多个容器的容器组,Pod 是可以被创建,调度,并与 Kubernetes 管理最小部署单元,同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来,这样,您就能更加轻松地在集群中移动容器。
  • 运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址,同一个Pod中,端口不能重复,否则报错,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。
  • Pod其实有两种类型:普通Pod和静态Pod,后者比较特殊,它并不存在Kubernetes的etcd存储中,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动。普通Pod一旦被创建,就会被放入etcd存储中,随后会被Kubernetes Master调度到摸个具体的Node上进行绑定,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器冰启动起来,在。在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问起并且重启这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。

Service【服务 (Service)】

  • 简单来说:服务为一组 Pod 提供单一稳定的名称和地址,服务可将工作定义与容器集分离,Kubernetes 服务代理会自动将服务请求分配到正确的容器集 — 无论这个容器集会移到集群中的哪个位置,即使它已被替换,也是如此。
  • Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行。
    • 外部系统访问Service的问题
      首先需要弄明白Kubernetes的三种IP这个问题
      • Node IP:Node节点的IP地址
      • Pod IP: Pod的IP地址
      • Cluster IP:Service的IP地址
    • 首先,Node IP是Kubernetes集群中节点的物理网卡IP地址,所有属于这个网络的服务器之间都能通过这个网络直接通信。这也表明Kubernetes集群之外的节点访问Kubernetes集群之内的某个节点或者TCP/IP服务的时候,必须通过Node IP进行通信
    • 其次,Pod IP是每个Pod的IP地址,他是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络。
    • 最后Cluster IP是一个虚拟的IP,但更像是一个伪造的IP网络,原因有以下几点
      • Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址
      • Cluster IP无法被ping,他没有一个“实体网络对象”来响应
      • Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
  • Kubernetes集群之内,Node IP网、Pod IP网于Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊路由规则。

Replication Controller【复制控制器 (Replication Controller)】

  • 简单来说:复制控制器管理 Pod 的生命周期,它们保证指定数量的 Pod 在任何给定的时间都在运行,他们通过创建或删除 Pod 做到这一点
  • Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。

Deployment【部署(Deployment)】

  • 这个东西是Replication Controller的升级版,了解下就行,平常还是使用Replication Controller更多。
  • Deployment 是新一代用于 Pod 管理的对象,与 Replication Controller 相比,它提供了更加完善的功能,使用起来更加简单方便。

Label【标签(Lable)】

  • 简单来说:标签用于组织和选择基于键值对的对象组,它们被用于每一个 Kubernetes 组件。

  • Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key于value由用户自己指定。Label可以附加在各种资源对象上,如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。

  • 我们可以通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便的进行资源分配、调度、配置等管理工作。
    一些常用的Label如下:

    • 版本标签:“release”:“stable”,“release”:“canary”…
    • 环境标签:“environment”:“dev”,“environment”:“qa”,“environment”:“production”
    • 架构标签:“tier”:“frontend”,“tier”:“backend”,“tier”:“middleware”
    • 分区标签:“partition”:“customerA”,“partition”:“customerB”
    • 质量管控标签:“track”:“daily”,“track”:“weekly”
  • Label相当于我们熟悉的标签,给某个资源对象定义一个Label就相当于给它大了一个标签,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。
    Label Selector在Kubernetes中重要使用场景如下:

    • kube-Controller进程通过资源对象RC上定义Label Selector来筛选要监控的Pod副本的数量,从而实现副本数量始终符合预期设定的全自动控制流程
    • kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service岛对应Pod的请求转发路由表,从而实现Service的智能负载均衡
    • 通过对某些Node定义特定的Label,并且在Pod定义文件中使用Nodeselector这种标签调度策略,kuber-scheduler进程可以实现Pod”定向调度“的特性

Kubernetes 组建说明

重要组建

kubectl

客户端命令行工具,将接受的命令格式化后发送给 kube-apiserver,作为整个系统的操作入口。

Kubernetes API Server

  • 作为整个系统的控制入口,以 REST API 服务提供接口。
  • 其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。

kube-controller-manager

用来执行整个系统中的后台任务,包括节点状态状况、Pod 个数、Pods 和 Service 的关联等。

kube-scheduler(将 Pod 调度到 Node 上)

  • 负责节点资源管理,接受来自 kube-apiserver 创建 Pods 任务,并分配到某个节点。
  • 为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。

etcd

负责节点间的服务发现和配置共享。

kube-proxy

运行在每个计算节点上,负责 Pod 网络代理。定时从 etcd 获取到 Service 信息来做相应的策略。

kubelet

运行在每个计算节点上,作为 agent,接受分配该节点的 Pods 任务及管理容器,周期性获取容器状态,反馈给 kube-apiserver。

DNS

一个可选的DNS服务,用于为每个 Service 对象创建 DNS 记录,这样所有的 Pod 就可以通过 DNS 访问服务了。

flannel

Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署。我们知道当我们启动 Docker 后会有一个用于和容器进行交互的 IP 地址,如果不去管理的话可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的 Docker 容器。Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP 通信。

其他组建

Replication Controller

管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。

Node Controller

管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。

Namespace Controller

管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。

Service Controller

管理维护Service,提供负载以及服务代理。

EndPoints Controller

管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。

Service Account Controller

管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。

Persistent Volume Controller

管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。

Daemon Set Controller

管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。

Deployment Controller

管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。

Job Controller

管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目

Pod Autoscaler Controller

实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

Kubernetes Node运行节点,运行管理业务容器,包含如下组件:

Kubelet

负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。

Kubernetes Proxy

负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。

Docker

Node上需要运行容器服务

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

҉人间无事人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值