Kubernetes重要概念理解
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重要概念理解的更多相关文章
- 转 Kubernetes 入门 概念理解
你闺女也能看懂的插画版Kubernetes指南 原创 2016-06-30 作者 周小璐 译 编者按:Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码.有一天女儿走进书 ...
- 十分钟带你理解Kubernetes核心概念
什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...
- 后端技术杂谈11:十分钟理解Kubernetes核心概念
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 本文转自 https://github.com/h2pl/Java-Tutorial 喜欢的 ...
- [转]十分钟带你理解Kubernetes核心概念
本文将会简单介绍 Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些 ...
- 容器技术研究-Kubernetes基本概念
最近在研究容器技术,作为入门,基本概念必须搞明白,今天整理一下Kubernetes的基本概念. 一.什么是Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部 ...
- Kubernetes 核心概念
什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...
- Kubernetes核心概念简介
本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...
- Kubernetes基本概念之Name和NameSpace
在Kubernetes中,所有对象都会被指定一个唯一的Name和UID. 用户还可以指定一些不要求唯一性的数据附加到对象上,例如Label和Annotation. 1. Name Name是创建一个K ...
- 1-2、kubernetes架构概述和kubernetes基础概念
kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...
随机推荐
- Part-One
首先,必须要声明一下,这个目录下的所有东西,是我对一本书复习,只是敲出部分代码让自己不至于眼高手低,其中有很多东西可能都是我的个人理解,如果有兴趣的朋友可以看一下,同时也欢迎大家指正. 1.Hello ...
- Nginx 学习笔记(九)申请Let's Encrypt通配符HTTPS证书
Let's Encrypt 宣布 ACME v2 正式支持通配符证书,并将继续清除 Web 上采用 HTTPS 的障碍,让每个网站轻松获取管理证书.消息一出,马上就有热心用户分享出了 Let's En ...
- webservice 项目中遇到的问题
redshift database 连接异常 解决方案 url 修改添加参数如下 jdbc:redshift://hostname:5439/dbname?ssl=true&sslfactor ...
- json 模块 与 pickle 模块
1 import json 3 dic={'name':'alvin','age':23,'sex':'male'} 4 print(type(dic))#<class 'dict'> 6 ...
- 052、overlay如何实现跨主机通信?(2019-03-19 周二)
参考https://www.cnblogs.com/CloudMan6/p/7305989.html 今天开始学习 overlay 网络跨主机通信的原理 root@host01:~# ufw ...
- 谈谈java程序代码保护及license设计
理论上讲,不存在牢不可破的漏洞,只是时间和成本问题.通常我们认为的不可破解,说的是破解需要难以接受的时间和成本.对于java程序来说,class文件很容易被反编译,所以理论上而言,对java程序做li ...
- kudu系列: Java API使用和效率测试
Kudu+Impala很适合数据分析, 但直接使用Insert values语句往Kudu表插入数据, 效率实在不好, 测试下来insert的速度仅为80笔/秒. 原因也是显然的, Kudu本身写入效 ...
- 堆栈Stack介绍
堆栈(Stack)代表了一个后进先出的对象集合.当您需要对各项进行后进先出的访问时,则使用堆栈.当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素. Stack 类的方法和属性 ...
- steps/train_lda_mllt.sh
LDA+MLLT指的是在计算MFCC后对特征进行的变换:首先对特征进行扩帧,使用LDA降维(默认降低到40),然后经过多次迭代轮数估计一个对角变换(又称为MLLT或CTC) .详见 http://ka ...
- flask的基础认识
刚开始学习flask基础知识,有了一点点的认识,所以在此大概写一下自己的理解,详细步骤和功能在代码段介绍: from flask import Flask,render_template,reques ...