每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

k8s基本概念和术语

Master

Master是集群的控制节点,每个K8s集群里需要有一个Master节点来负责整个集群的管理和控制。基本上k8s的所有控制命令都发给它,它来负责整个具体的执行过程。Master节点通常占据一个独立的服务器(高可用部署建议3台服务器)。

Master节点运行着以下一组关键过程:

  • API Server:集群控制的入口进程。
  • k8s Controller Manager:K8s里所有资源对象的自动化控制中心
  • K8s Scheduler:负责资源调度的进程。
  • etcd:所有资源对象的数据全部保存在etcd。

Node

Node节点是K8s集群中的工作负载节点,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上。

Node节点运行着以下一组关键过程:

  • kubelet: 负责Pod对应容器的创建、启停等任务。
  • kube-proxy: 实现k8s service的通信和负载均衡机制的重要组件。

Pod

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

Pods提供两种共享资源:网络和存储。

网络

每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。

存储

Pod可以指定一组共享存储volumes。Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。

Pod、容器与Node的关系如下图所示:

Pod生命周期:

Pod 的 status 定义在 PodStatus 对象中,其中有一个 phase 字段。

下面是 phase 可能的值:

  • 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
  • 运行中(Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  • 成功(Succeeded):Pod 中的所有容器都被成功终止,并且不会再重启。
  • 失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
  • 未知(Unknown):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。

Labels

Labels其实就一对 key/value ,其中key与value由用户自己指定。Label可以附加到各种资源对象上。例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label。

我们可以给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作。一些常用的Label示例:

  • 版本标签:“release”,"stable"...
  • 环境标签: "dev","pro"...

ReplicationController

RC是K8s系统中的核心概念之一,简单来说,它其实定义了一个期望的场景。即声明某种Pod的副本数量在任意时刻都符合某个预期值。RC包括以下几个部分:

  • Pod期待的副本数
  • 用于筛选目标Pod的Label Selector。
  • 当Pod的副本数量小于预期数量时,用于创建新的Pod模板(template)

当我们定义了一个RC并提交到了K8s集群以后,Master几点上的Controller Manager组件就得到通知,定时巡检系统中目前存活的目标Pod,并且确保目标Pod实例的数量刚好等于此RC的期望值。如果有过多的副本在运行,系统就会停掉一些Pod,否则系统就会再自动创建一些Pod。

Deployment

Deployment是V1.2引入的新概念,引入的目的是为了更好地解决Pod的编排问题。为此Deployment在内部使用了Replica Set来实现目的。Deployment相对于RC的一个最大升级是我们可以随时知道当前Pod部署的进度。

Deployment的使用场景:

  • 创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程。
  • 检查Deployment的状态来看部署动作是否完成。
  • 更新Deployment以创建新的Pod(比如镜像升级)
  • 如果当前的Deployment不稳定,则回滚到早先的Deployment版本
  • 拓展Deployment以应对高负载。
  • 清理不在需要的旧版本ReplicaSets。

Service

Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。如果有一组Pod组成一个集群来提供服务,那么如何来访问他们呢?

一个Service可以看成一组提供相同服务的Pod的对外访问接口。

Pod的Ip地址和Service的Cluster IP地址:

Pod的Ip地址是Docker Daemon根据docker0网桥的Ip地址段进行分配的,但Service的Cluster IP地址是k8s系统中的虚拟IP地址。Service的Cluster IP地址相对于Pod的IP地址来说相对稳定。

外部访问Service

由于Service对象在Cluster IP Range池中分配的IP地址只能在内部访问,所以其他Pod都可以无障碍地访问它。

K8s提供两种对外提供服务的Service的Type定义:Nodeport和LoadBalance

1)Nodeport

apiVersion: v1kind: Servicemetadata:  labels:    name: hello  name: hellospec:  type: NodePort  ports:  - port: 8080    nodePort: 30008  selector:    name: hello

假设有3个hello Pod运行在3个不同的Node上,客户端访问其中任意一个Node都可以访问到这个服务。

2)LoadBalance

kind: ServiceapiVersion: v1metadata:  name: my-servicespec:  selector:    app: MyApp  ports:    - protocol: TCP      port: 80      targetPort: 9376      nodePort: 30061  clusterIP: 10.0.171.239  loadBalancerIP: 78.11.24.19  type: LoadBalancerstatus:  loadBalancer:    ingress:      - ip: 146.148.47.155

status.loadBalancer.ingress.ip设置的146.148.47.155为云提供商提供的负载均衡器的IP地址,

Volume

默认情况下容器中的磁盘文件是非持久化的,对于运行在容器中的应用来说面临两个问题,第一:当容器挂掉kubelet将重启启动它时,文件将会丢失;第二:当Pod中同时运行多个容器,容器之间需要共享文件时。Kubernetes的Volume解决了这两个问题。

在Docker中也有一个docker Volume的概念 ,Docker的Volume只是磁盘中的一个目录,生命周期不受管理。Kubernetes Volume具有明确的生命周期 - 与pod相同。在容器重新启动时能可以保留数据,当然,当Pod被删除不存在时,Volume也将消失。注意,Kubernetes支持许多类型的Volume,一个Pod可以同时使用任意类型/数量的Volume。

Kubernetes支持Volume类型有:

  • emptyDir 使用emptyDir,当Pod分配到Node上时,将会创建emptyDir,并且只要Node上的Pod一直运行,Volume就会一直存。当Pod(不管任何原因)从Node上被删除时,emptyDir也同时会删除,存储的数据也将永久删除。注:删除容器不影响emptyDir。

示例:

apiVersion: v1kind: Podmetadata:  name: test-pdspec:  containers:  - image: gcr.io/google_containers/test-webserver    name: test-container    volumeMounts:    - mountPath: /cache      name: cache-volume  volumes:  - name: cache-volume    emptyDir: {}
  • hostPath hostPath允许挂载Node上的文件系统到Pod里面去。如果Pod需要使用Node上的文件,可以使用hostPath。示例:
apiVersion: v1kind: Podmetadata:  name: test-pdspec:  containers:  - image: gcr.io/google_containers/test-webserver    name: test-container    volumeMounts:    - mountPath: /test-pd      name: test-volume  volumes:  - name: test-volume    hostPath:      # directory location on host      path: /data

Namespace

Namespace是K8s系统中非常重要的概念,通过将系统内部的对象“分配”到不同Namespace。K8s集群在启动后,会创建一个名为“default”的Namespace。

创建一个名为redis-master的Pod,放入到redis-namespace这个Namespace里。示例:

apiVersion: v1kind: Podmetadata:  name: redis-master  namespace: redis-namespacespec:  

k8s记录-k8s基本概念和术语的更多相关文章

  1. k8s上的基础概念和术语

    kubernetes基本概念和术语   kubeernetes中的大部分概念如Node,Pod,Replication Controller ,Serverce等都可以看作一种“资源对象”,几乎所有的 ...

  2. k8s记录-k8s部署参考

    一.环境准备 yum -y install epel-release yum -y install wget nmap lsof iotop lrzsz ntpdate tree rm -rf /et ...

  3. k8s 基础概念和术语

    Master k8s里的master指的是集群控制节点,每个k8s集群里需要有一个Master节点来负责整个集群的管理和控制,基本k8s所有控制命令都发给它,它负责整个具体的执行过程,后面执行操作基本 ...

  4. 在k8s中的基本概念

    在k8s中的基本概念 一.Pod1. podk8s下最重要也最基本的概念,由一个根容器Pause和许多用户业务容器组成,是容器的载体. 2. pod的yaml定义格式及字段 apiVersion: v ...

  5. 深入解析Windows操作系统笔记——CH1概念和术语

    1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具 1.1操作系统版本 1.2基础概念和术语 1.2.1Windows API 1.2.2 服务.函数和例程 1.2.3 ...

  6. Oracle知识梳理(一)理论篇:基本概念和术语整理

    理论篇:基本概念和术语整理 一.关系数据库           关系数据库是目前应用最为广泛的数据库系统,它采用关系数据模型作为数据的组织方式,关系数据模型由关系的数据结构,关系的操作集合和关系的完整 ...

  7. 《Kubernetes权威指南第2版》学习(四)kubernetes基本概念和术语

    1: etcd是干什么的: 键-值存储仓库,用来配置共享和服务发现. k8s把Node, pod,replication controller, Services看做是资源对象,这些资源对象可以通过K ...

  8. 【转载】【时序约束学习笔记1】Vivado入门与提高--第12讲 时序分析中的基本概念和术语

    时序分析中的基本概念和术语 Basic concept and Terminology of Timing Analysis 原文标题及网址: [时序约束学习笔记1]Vivado入门与提高--第12讲 ...

  9. 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语

    有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...

随机推荐

  1. 用JAVA实现找出输入字符串中的出现次数最多的字符及其次数;

    //通过Map 类实现,通过键值对的方式,可以将输入的字符串的每一个字符,作为键,每个字符出现的次数作为值:如下: public class Find { public static void mai ...

  2. Zabbix4.0如何添加监控信息

    二.添加监控信息 监控Windows主机: 首先需要在Windows主机上安装好Zabbix agent,安装方法,见另一篇博客,https://www.cnblogs.com/opsprobe/p/ ...

  3. 树莓派使用root操作图形界面使用自带的文件管理器

    使用pi用户通过VNC登录图形界面之后,在需要修改一些文件则时提示权限不够, 命令行下使用sudo 运行就可以了.或者直接用root账户. 修改管理员密码:sudo passwd root 修改启用管 ...

  4. 图论 - 图的深度优先遍历c++实现

    图的深度优先遍历c++实现 深度优先搜索 邻接矩阵的创建 int i, j, m, a, b; cin >> n >> m; //初始化二维矩阵 for (i = 1; i & ...

  5. python应用-一组数的最大值,最小值,平均数

    def foo(n): c=[] for _ in range (n): var=randint(60,100) c.append(var) print(c) total=0 max = c[0] m ...

  6. UI系统综述:iOS的图形绘制、动画与runloop

    一.一条业务pipeline: 一个连接核心:coreanimation 二.两个进程: 1.app进程: 2.render进程: 首先,由 app 处理事件(Handle Events),如:用户的 ...

  7. React Virtual DOM Explained in Simple English

    If you are using React or learning React, you must have heard of the term “Virtual DOM”. Now what is ...

  8. react native 依赖库管理:入门

    目标文件:package.json { .... "dependencies": { "react": "16.8.3", "re ...

  9. redux:基于函数式编程的事件处理和状态维护机制

    redux = monand + pipeline + highorder componet + decouple + middleware redex = store based + event h ...

  10. 68-Flutter中极光推送的使用

    1.申请极光账号和建立应用 极光推送的官方网址为:https://www.jiguang.cn/ 注册好后,进入'服务中心',然后再进入'开发者平台',点击创建应用. 这时候会出现新页面,让你填写“应 ...