Kubernetes概念

简介

kubernetes是一个Google开源的容器编排系统,用于自动部署,扩展和管理容器化应用程序。

  • 随处运行:支持公有云,私有云,混合云,物理机
  • 以集群的方式运行、管理跨机器的容器,解决Docker跨机器容器之间的通讯问题。
  • 可拓展:模块化,可插拔,支持钩子,可任意组合
  • 自修复:自动重调度,自动重启,自动复制

主要概念:

  • 容器组(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组,Pod 是可以被创建,调度,是 Kubernetes 管理最小部署单元,同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来,这样,您就能更加轻松地在集群中移动容器。
  • 节点(Node):一个节点是一个运行 Kubernetes 中的主机,虚拟机或物理主机。
  • 管理节点 (Master Node):用于控制 Kubernetes 节点的计算机,所有任务分配都来自于此。
  • 工作节点 (Minion Node):执行请求和分配任务的计算机,由 Kubernetes 主机负责对节点进行控制。
  • 命名空间(Namespace):Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 namespace 的(默认是 default),而 node, persistentVolumes 等则不属于任何 namespace。
  • 部署(Deployment):Deployment 是新一代用于 Pod 管理的对象,与 Replication Controller 相比,它提供了更加完善的功能,使用起来更加简单方便。
  • Replication Controllers:主要负责指定数量的 pod 在同一时间一起运行并保持平衡。解决Pod的线性扩容缩容问题。
  • 服务(services):解决Pod的服务发现问题,服务为一组 Pod 提供单一稳定的名称和地址,服务可将工作定义与容器集分离,Kubernetes 服务代理会自动将服务请求分配到正确的容器集 — 无论这个容器集会移到集群中的哪个位置,即使它已被替换,也是如此。
  • 标签(labels):逻辑上的标记。用来关联service、replication controller和pod.
  • 卷(Volume):Pod中能够被多个容器访问的共享目录,其生命周期与Pod相同跟容器无关。

Kubernetes 中,所有的容器都运行在 Pod 中,一个 Pod 来容纳一个单独的容器,或者多个合作的容器。在后一种情况,Pod 中的容器被保证放置在同一个机器上,可以共享资源。一个 Pod 也能包含零个或者更多的的 volume,volume 是对一个容器私有的目录或者可以在 Pod 中的容器间共享。对于用户每个创建的 Pod,系统会找一个健康运转并且有足够的容量的机器,然后开始将相应的容器在那里启动。如果一个容器失败,它会被 Kubernetes 的 node agent 自动重启,这个 node agent 被称作 Kubelet。但是如果 Pod 或者他的机器出故障,它不会被自动转移或者重启,除非用户也定义了一个 Replication Controller。

Pod 的副本集合可以共同组成一整个应用,一个微服务,或者在一个多层应用的一层。一旦 Pod 创建好,系统会持续的监控他们的健康状态,和它们运行时所在的机器的健康状况。如果一个 Pod 因为软件问题或者所在机器故障出现问题,Replication 控制器会自动在健康的机器上创建一个新的 Pod。

Kubernetes 支持一种独特的网络模型。Kubernetes 鼓励用扁平的地址空间,并且不会动态的分配端口,而是采用让用户可以选择任意合适自己的端口。为了实现这点,它给每一个 Pod 分配了一个 IP 地址。

Kubernetes 提供了 Service 的抽象,其提供了一稳定的 IP 地址和 DNS 名字,来对应一组动态的 Pod,例如一组构成一个微服务的 Pod。这个 Pod 组是通过 Label 选择器来定义的,因为可以指定任何的 Pod 组。当一个运行在 Kubernetes Pod 里的容器连接到这个地址时,这个连接会被本地的代理转发(称作 kube proxy)。该代理运行在来源机器上,转发的目的地是一个相应的后端容器,确切的后端是通过 round-robin 的策略进行选择,以均衡负载。kube proxy 也会追踪后端的 Pod 组的动态变化,如当 Pod 被位于新机器上的新的 Pod 取代的时候,因而服务的 IP 和 DNS 名字不用改变。

每一个 Kubernetes 中的资源,如 Pod,都通过一个URI来被识别,并且有一个 UID。URI 中一个总要的组件是,对象的类型(如:Pod),对象的名字,和对象的 namespace(命名空间)。对于一个特定的对象类型,每一个名字在其命名空间都是独一无二的,在一个对象的名字没有带着命名空间的形式给出,那就是默认的命名空间,UID 在时间和空间的范围都是唯一的。

关于 Service 的更多说明:Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。
每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。

总体结构

  • Master组件:

    • ApiServer:作为kubernetes系统的入口,封装了核心对象的增删改查操作。
    • Scheduler:插件式的调度器,负责集群的资源调度,为新建的pod分配机器。
    • Controller:负责管理各种控制器。如- - ReplicationController,
    • EndPointController等。
  • Node组件:
    • kubelet:负责管控docker容器,如启动/停止、监控运行状态等。
    • proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。
  • 公共组件:
    • Etcd
    • flannel

参考

Kubernetes是什么的更多相关文章

  1. [笔记]kubernetes 无法启动问题

    在启动kubernetes的时候报错误. ERROR: timed out for http://localhost:4001/v2/keys/ 原因是无法启动etcd, etcd 监听4001本地端 ...

  2. 基于Kubernetes在AWS上部署Kafka时遇到的一些问题

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 交代一下背景:我们的后台系统是一套使用Kafka消息队列的数据处理管线 ...

  3. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  4. Docker中部署Kubernetes

    Kubernetes为Google开源的容器管理框架,提供了Docker容器的夸主机.集群管理.容器部署.高可用.弹性伸缩等一系列功能:Kubernetes的设计目标包括使容器集群任意时刻都处于用户期 ...

  5. kubernetes部署Fluentd+Elasticsearch+kibana 日志收集系统

    一.介绍 1. Fluentd 是一个开源收集事件和日志系统,用与各node节点日志数据的收集.处理等等.详细介绍移步-->官方地址:http://fluentd.org/ 2. Elastic ...

  6. kubernetes 文档

    kubernetes 官方文档:http://kubernetes.io/docs/ null

  7. kubernetes 1.4.5集群部署

    2016/11/16 23:39:58 环境: centos7 [fu@centos server]$ uname -a Linux centos 3.10.0-327.el7.x86_64 #1 S ...

  8. kubernetes单机板

    参考地址: *** http://blog.csdn.net/carter115/article/details/51121223 ** http://www.cnblogs.com/dongdong ...

  9. 一次kubernetes资源文件创建失败的排查

    今天在jenkins中创建kubernetes的rc时,检查目标yaml文件时报出如下错误: + /opt/jenkins/kube/kubectl -s http://10.xx.xx.xx:808 ...

  10. kubernetes&tensorflow

    谷歌内部--Borg Google Brain跑在数十万台机器上 谷歌电商商品分类深度学习模型跑在1000+台机器上 谷歌外部--Kubernetes(https://github.com/kuber ...

随机推荐

  1. View Pi's Status on WebBrowser

    1. install php and cgi support sudo apt-get install php5-common sudo apt-get install php5-cgi sudo a ...

  2. Ubuntu 16.04.2 LTS 安装 jdk1.6 和 tomcat6 (二)

    上一篇记录和分享了jdk1.6 在Ubuntu 16.04.2 环境下的安装配置,本文开始安装和配置tomcat 6     2 安装tomcat   http://tomcat.apache.org ...

  3. Visual Studio for mac从入门到放弃1

    MAC  第一步:从微软官网下载:https://www.visualstudio.com/vs/visual-studio-mac/ 第二步:安装软件过程出现 It was not possible ...

  4. PostgreSQL操作数据表

    1.创建表(SysUser) create table "SysUsers"( "UserId" serial, --用户Id,自增 "LoginNa ...

  5. Android 获取模拟器与真机数据库

    模拟器: localuser:~ localhost$ adb shell shell@android:/ $ su // 数据库复制到 Download 下 shell@android:/ # cp ...

  6. 466. Count The Repetitions

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  7. 【OCP|052】OCP 11g最新考题收集整理-第6题

    6.You are installing Oracle Grid Infrastructure by using the Oracle Universal Installer (OUI). You s ...

  8. FlowPortal-BPM——创建新模块

    一.设置webconfig (1)数据源设置 添加所有所用到数据库 (2)修改企业信息 二.Main.ashx——添加新的功能选项卡 new { id = "EXECUTE", t ...

  9. F6&F7adjust the volume

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard La ...

  10. MyBatis学习笔记(一)创建第一个MyBatis项目

    一.新建Maven项目 http://www.mybatis.org/mybatis-3/zh/index.html 该链接为MyBatis官方地址 创建MyBatis项目主要有两种办法,一种是导入j ...