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 ...
随机推荐
- Less 创建css3动画@keyframes函数
封装: /** * animation */ .keyframes (@prefix,@name,@content) when (@prefix=def) { @keyframes @name { @ ...
- bzoj 2726 任务安排(3)/loj 10184-10186 斜率优化
任务安排1 #include<bits/stdc++.h> #define int long long using namespace std; ; int n,s,t[N],c[N],f ...
- dp题2
1.seq 给出数组 A,则 l 到 r 的一段序列可以选择以下两种得分方式之一进行得分:1.得到
- poj2559/hdu1506 单调栈经典题
我实在是太菜了啊啊啊啊啊 到现在连个单调栈都不会啊啊啊 写个经典题 #include<cstdio> #include<algorithm> #include<cstri ...
- PHP中使用jQuery+Ajax实现分页查询多功能操作
1.首先做主页面Ajax_pag.php 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UT ...
- datatable转换为list<model> 映射
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...
- html页面设置<span>的高度和宽度
<span>标签属于行内元素(inline),所以无法设置高度和宽度:如果需要改变其宽高,就需要将其转变为块体元素(block)或行内块体元素(inle-block): 1 span{di ...
- [C++]常识回顾
1.基本/常用数据类型及其取值范围 类型标识 名称 占用字节数(位数) 取值范围 bool 逻辑型 1(1) 常量true或者false char 字符型 1(8) [2^7, 2^7 - 1] 或者 ...
- Understanding a project which include NodeJS, Webpack, Vue
公司有一个web 项目是用 Vue 写的, 前段时间负责这个tool的人离职了没有人维护,其他人又很忙,我就去看了一下以便以后能加一些新功能在上面 没有接触过Vue, 这些理解了一下关系做一些学习记录 ...
- Codeforces Round #494 (Div. 3) D. Coins and Queries(贪心
题目链接 题目大意:给你n个物品,第iii个物品价值aia_iai,询问q次,问你能不能凑出价值为qiq_iqi的物品. 小贪心吧.从大到小找,能拿就拿就行了. #include<bits/ ...