# Node

代表 Kubernets 集群运行的宿主物理机或者虚拟服务器, 为容器提供必要的计算资源: 内存 与 CPU 等.

# Pod

最底层的抽象. 一个 Pod 中可以包含一个或者多个运行的容器, 这些容器运行在同一个 Node 上, 并共享次 Node 的资源. 在同一个 Pod 中的容器, 可以相互通过 localhost 的方式通信, 这样就可以以集群与可扩展方式运行一个应用提供了支持.

Pod 是 Kubernetes 中的 '不可变层 (immutable layer)' ; Pod 不会升级, 只会关闭,丢弃与被代替. 他们可以被手动停止, 但是, 不推荐这样. 在 Kubernetes 集群中对 Pod 的配置与管理都是通过 "Deployment" 来完成.

# Deployment

Deployment 是 Kubernetes 集群的管理殷勤, 负责管理集群中繁琐的 Pod 启停工作, 如 : 它负责部署一个集群中一共需要跑多少个 Pod, Pod 运行的内容, 以及根据部署方案或者 Node , 集群发生的问题来决定如何启停 Pod (技术上来讲, Deployment 把上面的一些工作交给了 Replica Set 来做).

示例 , 一次部署 3 个 nginx_pod :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
role: web
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

# Service : 将容器中运行的服务暴露给外网.

Service 是一个 Pod 逻辑集合和访问这个集合的策略, 逻辑上代理后端 Pod. 代表 Pod 集合与其他服务进行交互, 进行请求的分发和负载均衡.

集合是通过定义 Service 时, 提供的 Label 选择器完成的.

kube-proxy 通过 iptables 实现.

Service 提供了一个从 Deployment 与 Pod 到外部网络以及外部网络到内部容器的一个双工通道.

NodePort Service : 提供容器内部访问机制, 但是也能将部分高段的端口(30000-35000)映射给集群外部以访问集群内部的容器.

LoadBalancer Service : 可以通过配置一些规则在你的云环境中实现一个 负载均衡器.

ClusterIP : 默认类型. 自动分配一个仅 Cluster 内部可以访问的虚拟IP, 这种类型的服务只能在集群内部使用访问. 用户从且只能从 kubernetes node 节点,使用 clusterIp 和 port 就可以访问 service 里的服务了。

externalName : 同事分配 Cluster IP , 并进一步在集群中所有节点的同一端口上暴露服务, 用户可以通过任意的 <NodeIP>:NodePort 访问服务. 用户可以从任意 kubernetes node 节点 和 非 kubernetes node 节点,只要和 kubernetes node 正常通信的机器,都可以访问service的服务。

示例配置:

我们在一个rails应用的前端加一个nginx的负载均衡,同时使用redis作为此应用的数据后端,只需要内部访问。我们的负载均衡指向nginx,nginx将请求路由到rails应用程序,同时通过redis读写数据。下面是Service的配置文件,注意其中的selector节点中label值role:web让Kubernetes知道此LoadBalancer类型的Service的具体Deployment在哪 (上节讲Deployment时例子中的3个nginx)。

##
# nginx
# Listen to the world on port 80 and 443
##
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
role: web
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
selector:
# Find all Resources that are tagged with the "role: web" label
# In our case, it will find the nginx Deployment mentioned above
role: web
---
##
# Rails
# Listen for traffic on 8080 so we don't have to run as root.
##
apiVersion: v1
kind: Service
metadata:
name: rails
labels:
role: rails
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
role: rails
---
##
# Redis
##
apiVersion: v1
kind: Service
metadata:
name: redis
labels:
role: redis
spec:
type: NodePort
ports:
- port: 6379
targetPort: 6379
selector:
role: redis

# Namespace : 封装/划分基础设施

在 Service 上面, 还可以定义它的 Namespace 属性, 它实际上只是一个标识符, 用于封装,划分你的基础设施.

Kubernetes 内部就是用命名空间的方式来区分自己内部的服务(kubedns,kube-proxy等)与用户自定义的服务, Kubernetes 的命名空间是 : kube-system.

如果用户未定义命名空间, Kubernetes 会将"资源"放置到一个默认的命名空间中, 在大多数情况下, 这就足够了; 但是, 在多团队合作的情况下, 使用命名空间可以防止资源的冲突与混淆.

示例:

apiVersion: v1
kind: Namespace
metadata:
name: my-app

# Labels : 用与标记与查找资源.

Kubernetes中大量使用Label在整个集群中来标记与查找资源。

Deployment 中有 labels 节点, 他的值跟下面的 Service 中 selectors 中的值是对应的. Kubernetes 用 Label 将各种资源重定义的配置关联在一起, 引用层级:

Service --> Deployment --> Pod --> Container

# secrets : 在 Pod 与容器中保存敏感信息

# DaemonSet : 定义在部分或者所有 Nodes 中都冗余的运行一个 Pod

# Job : 创建一次性任务.

# kubernetes 支持的卷插件(v1.6)



红色的为 v1.6 新增.

Kubernets 资源类型简介的更多相关文章

  1. Android资源文件简介

    Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源 ...

  2. 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )

    [嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )     一. 内存 ...

  3. PHP资源类型

    在PHP中,我们经常使用到资源类型变量.例如:mysql连接.文件句柄等. 这些变量无法使用标量来表示,那么在Zend内核中是如何将PHP中的资源变量与C语言中的资源衔接的呢? 一.资源变量在PHP中 ...

  4. python——动态类型简介

    动态类型简介 类型属于对象,而不是变量 每一个对象都有两个标准的头部信息:类型标志符和引用计数器. 对象的垃圾收集,就是通过引用计数器实现的.可以在脚本中任意使用对象而不需要考虑释放内存空间. 循环饮 ...

  5. php扩展开发-资源类型

    资源类型在内核中的结构 //zend_list.h typedef struct _zend_rsrc_list_entry { void *ptr; int type; int refcount; ...

  6. [置顶] kubernetes资源类型--PetSets/StatefulSet

    PetSet首次在K8S1.4版本中,在1.5更名为StatefulSet.除了改了名字之外,这一API对象并没有太大变化. 注意:以下内容的验证环境为CentOS7.K8S版本1.5.2,并部署Sk ...

  7. [置顶] kubernetes资源类型--持久化存储Persistent Volume和Persistent Volume Claim

    概念 存储管理跟计算管理是两个不同的问题.理解每个存储系统是一件复杂的事情,特别是对于普通用户来说,有时并不需要关心各种存储实现,只希望能够安全可靠地存储数据. 为了简化对存储调度,K8S对存储的供应 ...

  8. PHP-Manual的学习----【语言参考】----【类型】-----【Resource 资源类型】

    2017年8月24日11:29:361.资源 resource 是一种特殊变量,保存了到外部资源的一个引用.资源是通过专门的函数来建立和使用的.2.由于资源类型变量保存有为打开文件.数据库连接.图形画 ...

  9. PHP的资源类型

    PHP的资源类型 php的资源类型 常见的有:打开文件.数据库连接.图形画布等. 常用操作:创建.使用.释放. 以文件操作为示例: //文件路径 $file_url = './data.txt'; / ...

随机推荐

  1. 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home

    https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...

  2. ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集

    前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...

  3. UNIX 系统概述

    UNIX体系结构(UNIX Architecture) 调用内核的接口叫做系统调用(system call,图1.1中的阴影部分),普通函数库是建立在系统调用接口的基础之上.应用(applicatio ...

  4. elasticsearch系列(二) esrally压测

    环境准备 linux centOS(工作环境) python3.4及以上 pip3 JDK8 git1.9及以上 gradle2.13级以上 准备过程中的坑 这些环境准备没什么太大问题,都是wget下 ...

  5. Numpy的使用

    Numpy的主要功能: 可以观察以上的规律,会发现,代码类型的简写,计量都是以8作为起始1的. # -*- coding: utf-8 -*- #向量相加-Python def pythonsum(n ...

  6. sqlmap连接Mysql实现getshell(原创)

    前言 昨天群友发了一知乎的帖子..才发现sqlmap玩了那么久有些玩意我居然没玩过...然后看着群友玩= =今天也想试试. 0x01 首先得知道这个玩意,sqlmap -help,不说大家也懂搜嘎. ...

  7. DevCloud让代码检查更科学

    代码检查是软件开发工作中不可或缺的一部分,众所周知,规范化的编码是一个优质项目的保证.华为软件开发云(DevCloud)便提供了专业科学的自动化代码检查工作. 一.华为软件开发云(DevCloud)目 ...

  8. j2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 分布式架构

    介绍 <modules>        <!-- jeesz 工具jar -->        <module>jeesz-utils</module> ...

  9. vgrant使用简易教程

    认识vagrant vagrant用于创建和部署虚拟化开发环境 避免了多次重新配置环境 节约了开发时间,同时可以体验不同的操作系统 对于新手也是一个不错的方式,当我们配置出错,直接删除重新安装即可 准 ...

  10. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

    前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...