前言

本篇是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. 记录一个SQL语句 case select 1

    select Code, CodeName, CodeAlias, ComCode, OtherSign from ldcode where codetype = 'edorapptype' and ...

  2. 「必知必会」最细致的 ArrayList 原理分析

      从今天开始也正式开 JDK 原理分析的坑了,其实写源码分析的目的不再是像以前一样搞懂原理,更重要的是看看他们编码风格更进一步体会到他们的设计思想.看源码前先自己实现一个再比对也许会有不一样的收获! ...

  3. Linux下-LNMP环境搭建博客网站(全过程)

    通常我们所说的LNMP是指一个网站基本的组织框架,即Linux系统支持,Nginx静态服务,Mysql数据库支持以及PHP动态编程语言支持.目前Mysql数据库被Oracle数据库分析公司收购,其创始 ...

  4. Python小白的数学建模课-10.微分方程边值问题

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型边值问题的建模与求解,不涉及算法推导和编程,只探讨如何使用 Pytho ...

  5. [Ynoi2011]初始化 题解

    第一道Ynoi,纪念一下. 众所周知,Ynoi会进行惨无人道的卡常操作,所以我们可以使用暴力去做Ynoi. 于是乎,我们考虑分块+暴力. 对于操作2,不难发现是道裸的分块,可以抄P3372的代码. 对 ...

  6. Jetpack MVVM 实战项目,附带源码+视频,收藏!

    从读者的反馈来看,近期大部分安卓开发已跳出舒适圈,开始尝试认识和应用 Jetpack MVVM 到实际的项目开发中. 只可惜,关于 Jetpack MVVM,网上多是 东拼西凑.人云亦云.通篇贴代码  ...

  7. rabbitMQ批量删除指定的队列

    首先进入到rabbitmq目录下的sbin目录 方法1: ./rabbitmqctl list_queues| grep helloQueue | awk '{print $1}' | xargs - ...

  8. DVWA-全等级文件包含

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  9. DHCP服务-中继代理

    DHCP中继代理(即DHCP Relay Agent)用于转发来自于另一个没有DHCP服务器子网段中客户端的DHCP请求,即当一台DHCP客户端发起请求后,此时DHCP中继代理就会将已经预先定义好的D ...

  10. CTFre-getit-WP

    攻防世界getit-WP 日子忙起来人也就忙,CTF慢慢刷,慢就是快. 下载之后,也没管别的直接就IDA打开:下载之后,也没管别的直接就IDA打开: 随便点点看得到三个可以字符串.F5看看: 懂个大概 ...