Kubernetes-Pod介绍(-)
前言
本篇是Kubernetes第四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。从现在开始都是重要的核心概念,此篇偏一些Pod的概念介绍,后续每篇都会有实战。
Kubernetes系列文章:
什么是Pod
Pod是一个或一个以上的 容器(例如Docker容器)组成的,且具有共享存储/网络/UTS/PID的能力,以及运行容器的规范。并且在Kubernetes中,Pod是最小的可被调度的原子单位。

Pod就像是我们的一个虚拟机,上面除了运行我们的主应用程序之外,还可以运行一个与该应用紧密相关的进程。如日志收集工具、Git文件拉取器、配置文件更新重启器等。因为在Kubernetes中,一个Pod里的所有容器都只会被分配到同一台主机上运行。
为什么是Pod
对于容器来说采用单进程模型,不具备管理多个进程的能力,当我们想实现多个容器被绑定在一起进行管理的时候,容器就不能满足我们,我们可以制作为镜像,显然这是很麻烦的; 对于容器来说,与其它容器是完全隔离的,通常情况下,无法与其它容器共享网络、存储。只能通过暴露的端口进行相互访问,当容器之间存在共享存储并且相互依赖的时候,容器就不能满足我们;
由于容器不能满足以上情况,因此Kubernetes就设计出来Pod的概念,对于Pod来说可以包含一个或者多个容器,这样对于多个容器需要一起部署的情况就迎刃而解。此外每个Pod来说都运行着一个特殊的被称之为Pause的容器,其他容器被称为业务容器,业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。

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

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

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

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

spec可以分为两类:一类为pod相关的,另外一类是容器相关的;凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的,主要包括分为以下六种属性,可能漏掉的大家可以留言,我补充:
NodeSelector: 设置NodeSelector表示将该Pod调度到包含这个label的node上; NodeName: 将Pod调度到指定的Node节点上,指定了nodeName的Pod会直接跳过Scheduler的调度逻辑,直接写入PodList列表; Volumes: 关于容器数据持久化的卷的定义,大致分为三类emptyDir、hostPath和projected,容器上有关于卷的挂载都是和pod相关的,图上图已经将每种卷的用途已经写明白了,大家可以认真阅读; RestartPolicy: Pod重启策略,分为三种Always、OnFailure、Never,后续还会有单独栏目专门来讲解Pod重启策略,这里先大致了解一下; 探针: 关于探针部分会在Pod的生命周期篇章中详细介绍,这里记住是三种类型:LivenessProbe、ReadinessProbe、StartupProbe; hostNetwork: 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络,容器上有关端口的定义与Pod的网络也是不可分割的;
对于容器相关的属性,其实也离不开容器相关的镜像、容器网络、启动参数、环境、资源限制、挂载目录,看过之前我Docker介绍应该很容易理解这些配置文件的定义:
Name: 定义容器的名称; Image: 拉取镜像名称; ImagePullPolicy: 镜像拉取的策略,包括Always、ifNotPresent、Never,Always总数拉取镜像仓库的镜像,如果标签是lastest那么说明每次都是拉取最新镜像;ifNotPresent仅当本地镜像缺失时方才从目标仓库下载镜像,Never禁止从仓库下载镜像,仅使用本地镜像; ports: 主要定义容器关于网络的参数,控制主要是Pod; 容器启动命令参数:command容器的启动命令列表,args传入的命名参数,类似于Dockerfile 中 ENTRYPOINT 定义义; 环境变量: env主要用于指定容器的环境变量; resources: 现在容器使用的CPU、内存相关的资源; 容器的卷: workingDir指定容器工作的目录,volumeMounts用于指定挂载到容器内部的存储卷配置;
结束
欢迎大家点点关注,点点赞!
Kubernetes-Pod介绍(-)的更多相关文章
- Kubernetes Pod 全面知识
Pod 是在 Kubernetes 中创建和管理的.最小的可部署的计算单元,是最重要的对象之一.一个 Pod 中包含一个或多个容器,这些容器在 Pod 中能够共享网络.存储等环境. 学习 Kubern ...
- 三十五、kubernetes NameSpace介绍
Kubernetes NameSpace 介绍 Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题.命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制.无论是 ...
- 三十四、kubernetes证书介绍
Kubernetes 证书介绍 一.证书机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控 ...
- 三十一、kubernetes网络介绍
Kubernetes 网络介绍 Service是Kubernetes的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上 ...
- Kubernetes Pod 驱逐详解
原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...
- Kubernetes Pod 镜像拉取策略
Kubernetes Pod 镜像拉取策略 官方文档:https://kubernetes.io/docs/concepts/containers/images/ • IfNotPresent:默认值 ...
- Kubernetes Pod 资源限制
Kubernetes Pod 资源限制 官方文档:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources- ...
- Kubernetes Pod 调度约束
Kubernetes Pod 调度约束 可以将pod调度到指定的节点Node内 默认:根据节点资源利用率等分配Node节点. nodeName用于将Pod调度到指定的Node名称上 nodeSelec ...
- Kubernetes Pod故障归类与排查方法
Pod概念 Pod是kubernetes集群中最小的部署和管理的基本单元,协同寻址,协同调度. Pod是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合. Pod中可以共享网络和存储(可以简单 ...
- Python Django撸个WebSSH操作Kubernetes Pod(下)- 终端窗口自适应Resize
追求完美不服输的我,一直在与各种问题斗争的路上痛并快乐着 上一篇文章Django实现WebSSH操作Kubernetes Pod最后留了个问题没有解决,那就是terminal内容窗口的大小没有办法调整 ...
随机推荐
- SQL SERVER Date列和Time列合并成一列处理报表数据
问题原由: intouch项目中,利用intouch脚本来存储数据时,存入的时间格式为:date,time分开存储.在报表需求中,有需要利用查询两个时间段之间的数据. 问题解决: 1.直接写脚本(写出 ...
- 使用java AWT做一个增加按钮的简单菜单窗体
package com.ysq.Swing; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Flow ...
- 电脑桌面与群晖NAS双向实时同步-20210105
电脑桌面与群晖NAS双向实时同步 2021年1月15日星期五 一.购买群晖DS920+网络存储服务器.NEC超轻笔记本电脑(重量小于800克).小米10至尊版安卓智能手机和intel i9 1 ...
- 最高级的AutoHotkey重试源代码结构20191221.docx
;; 最高级的AutoHotkey重试源代码结构20191221.docx;; 在编写AutoHotkey脚本时经常要用到重试,; 单击控件无效时需要重新再单击,; 发送模拟按键无效时需要重新发送.; ...
- OpenGL学习笔记(二)画三角形
目录 渲染管线(Graphics Pipeline) 编码实现 顶点数据 顶点缓冲对象(VBO) 顶点着色器 编译着色器 片段着色器 着色器程序 链接顶点属性 顶点数组对象 最终绘制三角形 索引缓冲对 ...
- 2019.06.28 MERGE INTO备忘
--保存主表 MERGE INTO dbo.DeliveryReceiving AS t USING @ReceiveMainDt AS s ON t.Id=s.id WHEN MATCHED THE ...
- 虚拟基站(VRS)
虚拟参考站技术(Virtual Reference Station,简称VRS)也称虚拟基准站技术,是一种网络实时动态测量实时动态测量(RTK)技术,通过在某一区域内建立构成网状覆盖的多个GPS基 ...
- Java多线程操作同一个对象,线程不安全
Java多线程操作同一个对象 发现问题:多个线程操作同一资源的情况下,线程不安全,数据紊乱 代码: package multithreading; // Java多线程操作同一个对象 // 买火车票的 ...
- python数据统计之禅道bug统计
背景 通过定期输出 每条产品的 BUG 情况,以此来反馈开发解决问题.测试跟进问题的情况:钉钉群推送提醒开发及时解决 以此我这边开始着手准备编写一个小工具,最终达到目的:自动定期发送统计报告,报告维度 ...
- MySQL索引篇之索引存储模型
本文重点介绍下索引的存储模型 二分查找 给定一个1~100的自然数,给你5次机会,你能猜中这个数字吗? 你会从多少开始猜? 为什么一定是50呢?这个就是二分查找的一种思想,也叫折半查找,每 ...