前言

本篇是Kubernetes第四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。从现在开始都是重要的核心概念,此篇偏一些Pod的概念介绍,后续每篇都会有实战。

Kubernetes系列文章:
  1. Kubernetes介绍
  2. Kubernetes环境搭建
  3. Kubernetes-kubectl介绍

什么是Pod

Pod是一个或一个以上的 容器(例如Docker容器)组成的,且具有共享存储/网络/UTS/PID的能力,以及运行容器的规范。并且在Kubernetes中,Pod是最小的可被调度的原子单位。


img

Pod就像是我们的一个虚拟机,上面除了运行我们的主应用程序之外,还可以运行一个与该应用紧密相关的进程。如日志收集工具、Git文件拉取器、配置文件更新重启器等。因为在Kubernetes中,一个Pod里的所有容器都只会被分配到同一台主机上运行。

为什么是Pod

  1. 对于容器来说采用单进程模型,不具备管理多个进程的能力,当我们想实现多个容器被绑定在一起进行管理的时候,容器就不能满足我们,我们可以制作为镜像,显然这是很麻烦的;
  2. 对于容器来说,与其它容器是完全隔离的,通常情况下,无法与其它容器共享网络、存储。只能通过暴露的端口进行相互访问,当容器之间存在共享存储并且相互依赖的时候,容器就不能满足我们;

由于容器不能满足以上情况,因此Kubernetes就设计出来Pod的概念,对于Pod来说可以包含一个或者多个容器,这样对于多个容器需要一起部署的情况就迎刃而解。此外每个Pod来说都运行着一个特殊的被称之为Pause的容器,其他容器被称为业务容器,业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。


img

此外Pod还可以定义Init Container,如果为一个 Pod 指定了多个 Init 容器,这些Init容器会按顺序逐个运行。每个 Init 容器都必须运行成功,下一个才能够运行。当所有的 Init 容器运行完成时,Kubernetes 才会为 Pod 初始化应用容器。如果Pod的Init容器失败,Kubernetes会不断地重启Pod,直到Init容器成功为止。


img

Init Container让我们解决当容器存在依赖关系时候的启动问题,比较经典的案例就是war和Tomcat之间的依赖问题,我们可以将war定义为Init Container,之后在启动Tomcat。

Pod配置文件介绍


image.png

Pod相关配置大致分为五类,这里重点介绍spec、metadata相关配置,关于version其实没有太多说的,kind会在后面类型介绍说明,status会在Pod的生命周期中介绍。

metadata

image.png

关于metadata就是给pod定义一些元数据,方便进行资源管理,大致分为是三种维度:

  1. NameSpace: 命名空间划分可以按照业务域或者团队,当然如果集群数量太少其实没必要的;
  2. Labels: 标签能够附加于 Kubernetes 的任何资源对象之上,可以在资源创建时指定,也可以随时按需添加在活动对象之中,由标签选择器进行匹配检查完成资源筛选。一个对象可拥有不止一个标签,而同一个标签也可以被添加至多个资源之上。在实践中可以按照多个不同维度的标签以实现灵活的资源分组管理功能,可以分为版本标签、环境标签、应用标签等等;
  3. Annotation: 与标签类似,注解也是“键值”类型的数据,不过它不能用于标签及筛选 Kubernetes 对象,仅可用于为资源提供“元数据”信息。另外,注解中的元数据不受字符数量的限制,它可大可小,可以为结构化或非结构化形式,也支持使用在标签中禁止使用的其他字段;
spec

image.png

spec可以分为两类:一类为pod相关的,另外一类是容器相关的;凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的,主要包括分为以下六种属性,可能漏掉的大家可以留言,我补充:

  1. NodeSelector: 设置NodeSelector表示将该Pod调度到包含这个label的node上;
  2. NodeName: 将Pod调度到指定的Node节点上,指定了nodeName的Pod会直接跳过Scheduler的调度逻辑,直接写入PodList列表;
  3. Volumes: 关于容器数据持久化的卷的定义,大致分为三类emptyDir、hostPath和projected,容器上有关于卷的挂载都是和pod相关的,图上图已经将每种卷的用途已经写明白了,大家可以认真阅读;
  4. RestartPolicy: Pod重启策略,分为三种Always、OnFailure、Never,后续还会有单独栏目专门来讲解Pod重启策略,这里先大致了解一下;
  5. 探针: 关于探针部分会在Pod的生命周期篇章中详细介绍,这里记住是三种类型:LivenessProbe、ReadinessProbe、StartupProbe;
  6. hostNetwork: 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络,容器上有关端口的定义与Pod的网络也是不可分割的;

对于容器相关的属性,其实也离不开容器相关的镜像、容器网络、启动参数、环境、资源限制、挂载目录,看过之前我Docker介绍应该很容易理解这些配置文件的定义:

  1. Name: 定义容器的名称;
  2. Image: 拉取镜像名称;
  3. ImagePullPolicy: 镜像拉取的策略,包括Always、ifNotPresent、Never,Always总数拉取镜像仓库的镜像,如果标签是lastest那么说明每次都是拉取最新镜像;ifNotPresent仅当本地镜像缺失时方才从目标仓库下载镜像,Never禁止从仓库下载镜像,仅使用本地镜像;
  4. ports: 主要定义容器关于网络的参数,控制主要是Pod;
  5. 容器启动命令参数:command容器的启动命令列表,args传入的命名参数,类似于Dockerfile 中 ENTRYPOINT 定义义;
  6. 环境变量: env主要用于指定容器的环境变量;
  7. resources: 现在容器使用的CPU、内存相关的资源;
  8. 容器的卷: workingDir指定容器工作的目录,volumeMounts用于指定挂载到容器内部的存储卷配置;

结束

欢迎大家点点关注,点点赞!

Kubernetes-Pod介绍(-)的更多相关文章

  1. Kubernetes Pod 全面知识

    Pod 是在 Kubernetes 中创建和管理的.最小的可部署的计算单元,是最重要的对象之一.一个 Pod 中包含一个或多个容器,这些容器在 Pod 中能够共享网络.存储等环境. 学习 Kubern ...

  2. 三十五、kubernetes NameSpace介绍

    Kubernetes NameSpace 介绍 Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题.命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制.无论是 ...

  3. 三十四、kubernetes证书介绍

    Kubernetes 证书介绍 一.证书机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控 ...

  4. 三十一、kubernetes网络介绍

    Kubernetes 网络介绍 Service是Kubernetes的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上 ...

  5. Kubernetes Pod 驱逐详解

    原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...

  6. Kubernetes Pod 镜像拉取策略

    Kubernetes Pod 镜像拉取策略 官方文档:https://kubernetes.io/docs/concepts/containers/images/ • IfNotPresent:默认值 ...

  7. Kubernetes Pod 资源限制

    Kubernetes Pod 资源限制 官方文档:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources- ...

  8. Kubernetes Pod 调度约束

    Kubernetes Pod 调度约束 可以将pod调度到指定的节点Node内 默认:根据节点资源利用率等分配Node节点. nodeName用于将Pod调度到指定的Node名称上 nodeSelec ...

  9. Kubernetes Pod故障归类与排查方法

    Pod概念 Pod是kubernetes集群中最小的部署和管理的基本单元,协同寻址,协同调度. Pod是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合. Pod中可以共享网络和存储(可以简单 ...

  10. Python Django撸个WebSSH操作Kubernetes Pod(下)- 终端窗口自适应Resize

    追求完美不服输的我,一直在与各种问题斗争的路上痛并快乐着 上一篇文章Django实现WebSSH操作Kubernetes Pod最后留了个问题没有解决,那就是terminal内容窗口的大小没有办法调整 ...

随机推荐

  1. CAS 原理 应用

    原子CAS操作 原子操作指令里,有原子加,原子减,cas到底是什么呢? 首先看一段代码, bool compare_and_swap(int *accum, int *dest, int newval ...

  2. 构建前端第4篇之---使用css用法 height

    张艳涛 写于2021-1-20 height: 100%; What:  html的元素标签,例如 <html>,<body>,<div>都有height的css属 ...

  3. Idea快捷键 累积大全

    分类 Editing 这个 Searching/Replcae Navigation Atl +1                                           打开和关闭左侧p ...

  4. Vue slot 插槽用法:自定义列表组件

    Vue 框架的插槽(slot)功能相对于常用的 v-for, v-if 等指令使用频率少得多,但在实现可复用的自定义组件时十分有用.例如,如果经常使用前端组件库的话,就会经常看到类似的用法: < ...

  5. fastbin attack学习小结

    fastbin attack学习小结   之前留在本地的一篇笔记,复习一下. 下面以glibc2.23为例,说明fastbin管理动态内存的细节.先看一下释放内存的管理: if ((unsigned  ...

  6. C++ //关系运算符重载 < = > !=

    1 //关系运算符重载 < = > != 2 #include <iostream> 3 #include <string> 4 using namespace s ...

  7. 一、MinIO的基本概念

    MinIO的官方网站非常详细,以下只是本人学习过程的整理 一.MinIO的基本概念 二.Windows安装与简单使用MinIO 三.Linux部署MinIO分布式集群 四.C#简单操作MinIO 一. ...

  8. 简单的整合 shiro + SpringMVC 例子

    简单的整合shiro和springmvc的例子 想要整合Shiro和springmvc,在网上找了很多例子,感觉都有一点复杂.所以就自己写了一个最简单整合项目,记录在这里以备后面查看. 这个例子包含如 ...

  9. 七夕特别篇|用Python绘画牛郎织女在鹊桥相见

    大家好,我是辰哥~ 今天就是七夕节,首先提前祝福有伴侣的小伙伴,七夕快乐,没有伴侣的小伙伴,今天就会找到伴侣,(给看到这句话的你好运加持,哈哈哈). 作为会Python的我们必须做点好玩且有意义的东西 ...

  10. 跟我一起写 Makefile(七)

    使用变量 ---- 在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方.其与C/C++所不同的是 ...