kubernetes 概览
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 概览的更多相关文章
- Kubernetes概览
Kuberbetes这个名字是什么意思?k8s又是什么?Kubernetes这个名字源自希腊语,意思是“舵手”,也是“管理者”,“治理者”等词的源头.k8s是 Kubernetes的简称(用数字『8』 ...
- Kubernetes 概念整理
注:以下大部分内容来自网上摘录,以便后期查阅. Kubernetes (通常称为 K8s) 是用于自动部署.扩展和管理容器化(containerized)应用程序的开源系统,是 Google 内部工具 ...
- 基于Docker本地运行Kubernetes
基于Docker本地运行Kubernetes 概览 下面的指引将高速你如何通过Docker创建一个单机.单节点的Kubernetes集群. 下图是最终的结果: 先决条件 \1. 你必须拥有一台安装有D ...
- kubernetes社区项目生态概览
原文 http://dockone.io/article/2075 作为容器集群管理技术的最流行的技术,kubernetes,自从2014在github上开源后,已经通过多个项目形成了一个生态,以下 ...
- 基于Python+Django的Kubernetes集群管理平台
➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...
- Kubernetes初步
Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上.为容器化的应用提供资源调度.部署执行.服务发现.扩容缩容等整一套功能.本质上可看作是基于容器技术的mini-Pa ...
- Docker 生态概览
Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...
- 101 - kube-scheduler源码分析 - k8s源码组织结构概览
ps:本来应该先发这一篇,再开始讲cobra的,昨天不小心先把 cobra发出去了,今天补上源码概览~ 如上,我们下载好后切换到1.10版本的分支,项目目录结构是这样的(目录部分).有很多,我们先不纠 ...
- Kubernetes & Docker
Docker核心技术原理及其应用 Docker 概览 Docker版本与安装介绍 Docker 核心技术之镜像 Docker 核心技术之容器 Docker 核心技术之容器与镜像 Docker 核心技术 ...
随机推荐
- TypeScript基本知识(为学习AngularJS2框架做个小铺垫)
学习angularjs2框架,需要了解一些TypeScript知识点,基本了解下面这几个知识点学习AngularJS2 就够用了 1.TypeScript 1.1显示类型的定义 TypeScript类 ...
- Quartz (二) 和Spring整合
先给个场景:每五分钟扫描并关闭7天未付款的订单 1.quartz pom.xml依赖 <dependencies> <dependency> <groupId>or ...
- Play学习 - 体验网页模板
在经过无数个尝试后,最终用sbt把play所依赖的所有包都下载下来了,现在可以非常快速编译运行了.今天体验了下网页模板,觉得非常不错,在这里做个简单的介绍. 原文说明: A Play Scala te ...
- jQuery的hover方法搭配css的hover选择器,实现选中元素突出显示
问题简述: 今天做帮一个师姐做网页遇到一个这样的要求: 鼠标不移动进表格,表格透明度不变. 鼠标移动进表格,hover到的单元格透明度不变,没hover到的单元格透明度改变. 先贴我已经实现好的效果, ...
- OC中的私有变量和私有方法
在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private得.在 .m中定义的成员变量不能和它的头文件.h中 ...
- java-cef嵌入基于Chrome内核浏览器,做页面爬虫(可以尽在ajax异步请求数据)
1 CentOS 7.0 上安装和配置 VNC 服务器 2.1 2.1.1 首先,我们需要一个可用的桌面环境(X-Window),如果没有的话要先安装一个. 注意:以下命令必须以 root 权限运行. ...
- Rxjava学习小记
最近同事离职,接了个锅,里面的代码都是RxJava的味道,逼的自己不得不学习一波.看了网上的很多入门篇的博客,写的很不错.链接奉上: [Android]RxJava的使用(三)转换--map.flat ...
- C/s从文件(TXT)中读取数据插入数据库
流程: 1.当按钮单击时,弹出OpenFileDialog 2.判断后缀名是否合法 3.导入数据库 按钮事件中的代码: 1.判断用户是否选中文件. 2.判断用户选择的文件是否为txt //第一步,当按 ...
- gitlab 取消注册功能
gitlab 默认安装完成以后是允许用户注册,公司内部使用所以准备禁用了注册功能,只允许管理员从后台开通权限: 1.进入"Admin Area" 2.在左边菜单栏最低下点击&quo ...
- 【转】纯手工玩转 Nginx 日志
Nginx 日志对于大部分人来说是个未被发掘的宝藏,总结之前做某日志分析系统的经验,和大家分享一下 Nginx 日志的纯手工分析方式. Nginx 日志相关配置有 2 个地方:access_log 和 ...