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内容窗口的大小没有办法调整 ...
随机推荐
- Linux下Nginx基础应用
Nginx简介: Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.其将源代码以类BSD许可证的形式发布,因 ...
- 快速上手pandas(下)
和上文一样,先导入后面会频繁使用到的模块: In [1]: import numpy as np import pandas as pd import matplotlib.pyplot as p ...
- Python: 解析crontab正则,增加+操作
以下是使用Python解析crontab时间格式的一个类, 同时minute和hour支持了 + 的操作. 记录一下备忘. 其中的line参数是字符串分拆后的格式, 包含了 "week&qu ...
- noip模拟测试10
T1 这道题在考场上想到了二维前缀和,就是自己算前缀和的方式有点麻烦,导致花的时间较长,但还是成功搞了出来. 因为暴力计算的话需要不停枚举左上角和右下角的 i ,j, 时间复杂度为 n^4 ,我当时就 ...
- web浏览器知识点
网页是怎么形成的 前端的代码(英文字母)---->浏览器渲染 ------- > 客户眼中的效果 浏览器(显示代码) 游览器是网页显示,运行的平台,常用的的游览器有IE(Edge).火狐 ...
- 数字化转型:敏捷和DevOps如何降低风险,提高速度
进行数字化转型就意味着团队需要应对经常发生冲突的挑战--例如,要应对在复杂的相互依赖环境中快速变化的需求.对软件开发人员来说,这是一个熟悉的困境. 如果使用传统的瀑布方法来应对这些挑战,就会发现,在线 ...
- JavaWeb单体项目的分层设计与实现
1.概述 为什么要把一个完整的项目(Project)按层拆分成多个模块(Module)? 1)使项目层次更加的清晰: 2)提高代码的复用性: 3)细化分工: 4)解耦. 是不是听起来很高大尚,今天就简 ...
- Azkaban入门(启动一个Simple Example)
Azkaban简介 azkaban是一个开源的任务调度系统 Azkaban是一套简单的任务调度服务,整体包括三部分webserver.dbserver.executorserver. 开发语言为Jav ...
- WPF Popup 右下角提示框 定时消失 ,以及任意位置定位
------------恢复内容开始------------ 好久没写WPF的博客了,其实有很多心得要总结下,但是懒..... 今天工作需要,需要实现一个 1 右下角的提示窗口,然后过三五秒自动消失这 ...
- Quartz任务调度(3)存储与持久化操作配置详细解
内存存储RAMJobStore Quartz默认使用RAMJobStore,它的优点是速度.因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快.而无须访问数据库或IO ...