kubernetes 核心数据 (存储于ETCD 有数据变化通知的功能(watch-dog))

kubernetes 设计综述 (中英文对照)(http://www.oschina.net/translate/kubernetes-design-overview?cmp)

先看设计综述 理解POD 的什么东西
/
/registry
  /pods
    /${PODID}->VALUE
  /hosts
    /${MACHINE}
      /kubelet->VALUE
  /controllers
    /${CONTROL_ID}->VALUE
  /services
    /specs
      /${SVR_ID}->VALUE
    /endpoints
      /${SVR_ID}->VALUE
  /minions
    /${ID}->VALUE

VALUE 对应 kubernetes/pkg/api/types.go 中定义

kubernetes 的系统中进程负责的功能

  进程的入口main函数 对应 目录 kubernetes/cmd/ 中

  api-server

    kubernetes/pkg/registry/中 定义有 pods endpoints bindings controller service minion 这几个资源 提供POST PUT GET DELETE 作为动作 去操作 (熟悉REST API 设计应该理解的)

    负责维护以上的树形结构 并提供了select 操作 (以 ETCD 作为一致性的KV存储)

  kubecfg

    用于控制用户输入( create -> pod service controller ) 

  controller-manager 
    关注 /registry/controllers
    读取 controllers controllers 有 POD 模版 以及 POD 运行数量

    根据模版来创建 POD 分配POD (/registry/pods) --> 产生未分配的POD

    定期检测 controllers POD 活动数量 少则增加启动 多则 停止删除 ( see scheduler )


    
关注 /registry/services/specs 
    读取 services 
    检测 services 标签下(看下面标签概念) 所有的POD 
    读取POD的ip和containers的port 生成 endpoints ( see proxy  )

    services 的作用就是生成代理 由 代理 转发数据到 对应标签下POD内部

  scheduler

    关注 /registry/pods/ (使用selector 只读取到未分配的POD)
    获取未分配的POD 
    为POD分配机器 
    写入 /registry/pods/{ID}标记为分配过的。
    同时/registry/hosts/{machine}/kubelet ( see kubelet )

  kubelet

    关注/registry/hosts/{machine}/kubelet
    获取pods 并 启动Pod

  proxy 
    关注 /registry/services/specs 变化 
    关注 /registry/services/endpoints 变化
    获取services/specs 生成代理 代理到 specs.ID 对应的 endpoints.ID
    ( TCP 将每个连接负载均衡到 services ($SVR_ID} 下所有的 endpoints (pod address) )
    specs 代表服务的外部PORT endpoints对应容器内部 address

4个进程都是通过apiserver来操作DB以及watch DB的变化 来达到通信的

流程
  create POD
    1. kubecfg 提交 create a pod 
    2. apiserver 将该pod 写入 /registry/pods 中 标记为 未分配
    3. scheduler 由于关注了 /registry/pods 收到通知 读取未分配的 POD 然后从 kubernetes系统的节点中找到一台机器分配给POD 写入/registry/hosts/{machine}/kubelet 并写回到/registry/pods标记为分配的
    4. kubelet 由于关注了/registry/hosts/{machine}/kubelet 读取到分配给自己的POD 然后 用docker 运行该POD中定义的所有容器 写回到 /registry/hosts/{machine}/kubelet 标记运行
  create controller
    1. kubecfg 提交 create a controller 
    2. apiserver 将该pod 写入 /registry/controllers
    3. controller-manager 关注了 /registry/controllers 读取到新的 controllers 
      启动定时器定期检测 定期检测 controllers POD 活动数量 少了 会想apiserver 提交一个create pod 多了 则 stop pod
    next create POD 
  services 的作用是分配代理 并不影响POD的启动运行

思考

  proxy 的作用 考虑 如下情况 
    当你通过 kubercfg create a pod 这个Pod 运行在哪个服务器 你不知道 也就是说 你无法接入到你 服务
    这个时候你创建一个service提交后 系统内部知道POD运行在那里 会根据service的PROT代理到你的POD中 
    之后你连接proxy对应的PORT后 proxy会为你转发数据到对应的POD proxy代理对POD来说是透明的(正向代理,但是你知道这事连接的PROXY);

关键概念:标签 
pod用标签进行组织。每个pod具备一个key/value键值映射的标签。

通过“标签查询”,用户可以识别一系列的pod集合。这个简单的方法是services和replicationControllers如何工作的关键部分。一个service指向的pod集合由一个标签查询定义。类似的,由replicationController监听的pod的数量同样也是由标签查询定义。

标签查询通常会用于,我们讲,在一个应用程序层次上面识别和分组的pod。同样可以用来识别栈,例如dev、staging或者production。

kubernetes 概览的更多相关文章

  1. Kubernetes概览

    Kuberbetes这个名字是什么意思?k8s又是什么?Kubernetes这个名字源自希腊语,意思是“舵手”,也是“管理者”,“治理者”等词的源头.k8s是 Kubernetes的简称(用数字『8』 ...

  2. Kubernetes 概念整理

    注:以下大部分内容来自网上摘录,以便后期查阅. Kubernetes (通常称为 K8s) 是用于自动部署.扩展和管理容器化(containerized)应用程序的开源系统,是 Google 内部工具 ...

  3. 基于Docker本地运行Kubernetes

    基于Docker本地运行Kubernetes 概览 下面的指引将高速你如何通过Docker创建一个单机.单节点的Kubernetes集群. 下图是最终的结果: 先决条件 \1. 你必须拥有一台安装有D ...

  4. kubernetes社区项目生态概览

    原文  http://dockone.io/article/2075 作为容器集群管理技术的最流行的技术,kubernetes,自从2014在github上开源后,已经通过多个项目形成了一个生态,以下 ...

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

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

  6. Kubernetes初步

    Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上.为容器化的应用提供资源调度.部署执行.服务发现.扩容缩容等整一套功能.本质上可看作是基于容器技术的mini-Pa ...

  7. Docker 生态概览

    Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...

  8. 101 - kube-scheduler源码分析 - k8s源码组织结构概览

    ps:本来应该先发这一篇,再开始讲cobra的,昨天不小心先把 cobra发出去了,今天补上源码概览~ 如上,我们下载好后切换到1.10版本的分支,项目目录结构是这样的(目录部分).有很多,我们先不纠 ...

  9. Kubernetes & Docker

    Docker核心技术原理及其应用 Docker 概览 Docker版本与安装介绍 Docker 核心技术之镜像 Docker 核心技术之容器 Docker 核心技术之容器与镜像 Docker 核心技术 ...

随机推荐

  1. SQL SERVER 的前世今生--各版本功能对比

    背景 今天举办的 Data Amp 大会上,微软向开发者们强调了 数据如何影响他们的应用和服务 ,顺道还宣布了几个小新闻.这个免费的线上研讨会不仅展示了未来的机器学习远景,还发布了 SQL Serve ...

  2. Quartz (一)

    1 核心接口 1.1 Scheduler---核心调度器 1.2 Job---任务 1.3 JobDetail---任务描述 1.4 Trigger---触发器 2 触发器 Tigger(CornTr ...

  3. EmpyoyeeManger_1.0

    整体结构 首先创建一个名为employee的数据库 create database employee; 然后在该数据库下建一张表 CREATE TABLE t_emp( id BIGINT PRIMA ...

  4. swap与dd命令使用详解

    处理交换文件和分区 交换分区是系统RAM 的补充 基本设置包括: 创建交换分区或者文件 使用mkswap 写入特殊签名 在/etc/fstab 文件中添加适当的条目 使用swapon -a 挂载交换分 ...

  5. java内存模型1

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信 ...

  6. Windows 2008 R2下 如何简单使用IIS来配置PHP网站

    虽然PHP网站配置一般大多数人可能会联想到用Apache+php+mysql来配置,但是呢,如果是为了安全性考虑或者是说是为了便捷高效快速的完成工作,那么Apache+php+mysql这个配置工作就 ...

  7. [C#] BarcodeLib -- 一个精简而不失优雅的条形码生成库

    BarcodeLib -- 一个精简而不失优雅的条形码生成库 引言 在百度进行“C# 条形码”等类似关键字搜索的时候,基本上是使用 ZXing 类库进行条形码的生成.今天我所介绍的是另一款类库 Bar ...

  8. 浅谈一下web移动端基本

    屏幕尺寸.屏幕分辨率.屏幕像素密度 屏幕尺寸: 指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米. 常见的屏幕尺寸有2.4.2.8.3.5.3.7.4.2.5.0.5.5.6.0等. 屏幕分辨率 ...

  9. JAVA栈帧

    简介 Java栈是一块线程私有的内存空间.java堆和程序数据相关,java栈就是和线程执行密切相关的,线程的执行的基本行为是函数调用,每次函数调用的数据都是通过java栈来传递的. Java栈与数据 ...

  10. c++堆与栈的简单认识

    堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给程序,另外,对于大多数 ...