Kubernetes重要概念理解

kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者。2018年的kubernetes第一个版本1.10已经发布。下面整理一下,kubernetes的一些基本概念。kubernetes将集群中的机器划分为Master节点和工作节点(Node)。其中Master节点上面运行着管理集群的一组进程kube-apiserver、kube-controller-manager,和kube-schedule,还有etcd服务。node作为集群中的工作节点,运行真正的应用程序,在node上Kubernetes管理的最小运行单元是Pod,Node上面运行着kubelet、kube-proxy、docker引擎服务进程。如下图:

备:图片来自网络

Master节点:集群的控制节点
Kubernetes API Server(kube-apiserver):提供了HTTP rest 接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。
kube-controller-manager:Kubernetes里所有资源的自动化控制中心,可以理解为资源对象的“大总管”。
kube-schedule:负责资源调度(Pod调度)的进程,相当于公交公司的“调度室”
etcd:Kubernetes里面的所有资源对象的数据都是保存在etcd中。

Node节点:Node节点可以是一台物理机,也可以是一台虚拟机。当某个Node宕机时,其上的工作会被Master自动转移到其他节点上去。
kubelet:负责Pod对应的容器的创建、起停等任务。同时与Master节点密切协作,实现集群管理的基本功能。
kube-proxy:实现Kubernetes Service的通信和负载均衡机制的重要组件。
Docker Engine(Docker ):Docker引擎,负责本机容器的创建和管理工作。

Pod 概念
Pod是Kubernetes的最重要也是最基本的概念,每个Pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。
Kubernetes里的所有资源对象都可以采用yaml或者JSON格式的文件来定义或者描述,如下是一个Pod的定义:
apiServer:v1
kind:Pod
metadata:
  name:myweb
  labels:
    name:myweb
spec:
  containers:
  -name:myweb
   image:kubeguide/tomcat-app:v1
   ports:
  -containterPort:8080
  env:
  -name:MYSQL_SERVICE_HOST
  value:'mysql'
 -name: MYSQL_SERVICE_PORT
  value:‘3306’

Kind为Pod表明这是一个Pod的定义,metadata里的name属性为Pod的名字,metdata里还能定义资源对象的标签(Label),这里声明myweb拥有一个name=myweb的标签(Label)。Pod里所含的容器组成的定义则在spec一节中声明,这里定义了一名字为myweb、对应镜像为kubeguide/tomcat-app:v1的容器,该容器注入了MYSQL_SERVICE_HOST=‘mysql’和MYSQL_SERVICE_PORT='3306'的环境变量(env关键字),并在8080端口(containerPort)上启动容器进程。

Pod与其他组件关系示意图如下:

Label

Label是Kubernetes系统中的另外一个核心概念,一个Label是一个key=label的键值对,其中key与value由用户指定。Label可以附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。

Replication Controller

Replication Controller(简称 RC)是Kubernetes系统中的核心概念之一,决定了一个pod有多少个同时运行的副本。简单来说,它其实是定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个期望值,所以RC的定义包括如下的几个部分。

所以,只要创建了一个pod,一般都推荐同时给pod创建一个replacation controller,让这个rc一直守护pod,直到pod删除
  • Pod期待的副本数(replicas)

  • 用于筛选目标Podde Label Selector。

  • 当Pod的副本数量小于预期数量的时候,用于创建新的Pod模板

要注意的是,删除RC并不会影响通过该RC已经创建好的Pod。为了删除所有的Pod,可以设置replicas的值为0,然后更新该RC。另外,kubectl提供了stop和delete命令来一次性删除RC和RC控制的全部Pod。

RC 对pod数量和监控情况的控制是通过replica selector, label selector 的一种来实现的。

replica selector定义了RC和它所控制的pod之间的一种松耦合关系。这种松耦合关系可以通过修改pod的label将一个pod从replication controller的控制集中移除。比如可以把出现故障的pod从工作集群中移除,然后对pod进行debug。

Deployment

Deployment是Kubernetes1.2引入的新概念,引入的目的是为了更好解决Pod的编排问题。

Deployment相对于RC的一个最大升级是我们可以随时知道当前Pod“部署”的进度。

Deployment的典型使用场景有以下几个:

  • 创建一个Deployment对象生成对应的Replica Set并完成Pod副本的创建过程

  • 检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值)

  • 更新Deployment以创建新的Pod(比如镜像升级)

  • 如果当前Deployment不稳定,则回滚到一个早先的Deployment版本

  • 挂起或者恢复一个Deployment

Service

Service相当于我们微服务架构中的一个“微服务”。

Service这个概念存在的意义在于pod在Kubernetes中的IP地址不是固定的,因此需要一个代理来确保需要使用pod的应用不需要知晓pod的真实IP地址。另外一个原因是当使用rc创建了多个pod副本时,需要一个代理为这些pod做负载均衡。

设计原则:任何一个kube-proxy都能将流量正确导向任何一个被代理的pod,而这个kube-proxy不需要和被代理的pod在同一个宿主机上。

目前,kubernetes主要支持两种service的发现机制:环境变量和DNS。

上面是Kubernetes中的一些最基本的概念,详细内容后续会持续更新!

Kubernetes重要概念理解的更多相关文章

  1. 转 Kubernetes 入门 概念理解

    你闺女也能看懂的插画版Kubernetes指南 原创  2016-06-30 作者 周小璐 译 编者按:Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码.有一天女儿走进书 ...

  2. 十分钟带你理解Kubernetes核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  3. 后端技术杂谈11:十分钟理解Kubernetes核心概念

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 本文转自 https://github.com/h2pl/Java-Tutorial 喜欢的 ...

  4. [转]十分钟带你理解Kubernetes核心概念

    本文将会简单介绍 Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些 ...

  5. 容器技术研究-Kubernetes基本概念

    最近在研究容器技术,作为入门,基本概念必须搞明白,今天整理一下Kubernetes的基本概念. 一.什么是Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部 ...

  6. Kubernetes 核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  7. Kubernetes核心概念简介

    本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...

  8. Kubernetes基本概念之Name和NameSpace

    在Kubernetes中,所有对象都会被指定一个唯一的Name和UID. 用户还可以指定一些不要求唯一性的数据附加到对象上,例如Label和Annotation. 1. Name Name是创建一个K ...

  9. 1-2、kubernetes架构概述和kubernetes基础概念

    kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...

随机推荐

  1. Subversion Edge部署

    1.配置java的jdk vim /etc/profile 上面文件中加入export JAVA_HOME=/****/jdk*****,然后在path中加入$JAVA_HOME/bin:  ,保存退 ...

  2. Python 连接MongoDB并比较两个字符串相似度的简单示例

    本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...

  3. iOS快捷代码块

    //数据请求 /**<#封装数据请求(只适用本人)#>*/ NSString * requestUrl = [NSString stringWithFormat:@"%@%@&q ...

  4. 【BZOJ3697】采药人的路径 点分治

    [BZOJ3697]采药人的路径 Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材.采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是 ...

  5. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 “冬天到了天气冷了小明不想上学去了”,点击右边的按钮,发现对每个字都进行分词. ...

  6. [C++]数组处理相关函数(memcpy/memset等)

    头文件:string.h或者memory.h [1]void *memcpy(void *dest, const void *src, size_t n);//数组元素拷贝 功能:从源src所指的内存 ...

  7. 向dnsrecord.txt 中添加 配置

    #!/bin/bash Ip_addr=`cat /etc/dnsrecord.txt |awk '{print $1}' |head -1` Check_dns_url(){ grep $1 /et ...

  8. steps/train_sat.sh

    <<LDA_MLLT_fMLLR三音素HMM的训练流程图.vsdx>>    

  9. python之字典的增删改查

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.字典都是无序的,但查询速度快. 字典是一个key/value的集合,key可以是任意可被哈希(内部key ...

  10. Python基础3(2017-07-20)

    1.文件操作 现有文件如下: We were both young when I first saw you 当我第一次看见你的时候,我们都还年轻 I close my eyes and the fl ...