1.Pod参数定义

# 必填,版本号
apiVersion: string
kind: Pod
# 必填,元数据
metadata:
# 必填,Pod对象的名称(命名规范需要符合RFC 1035规范)
name: string
# 必填,Pod对象所属的命名空间,默认值为default
namespace: string
# 自定义标签列表(取值类型:List)
labels:
- name: string
# 自定义标签注解(取值类型:List)
annotations:
- name: string
# 必填,Pod对象中容器的详细定义
spec:
# 必填,Pod对象容器列表(取值类型:List)
containers:
# 必填,容器的名称(需要符合RFC 1035规范)
- name: string
# 必填,容器镜像名称
image: string
# 获取镜像的策略,默认值为:Always
# Always: 每次都尝试重新下载镜像
# Never: 仅使用本地镜像
# IfNotPresent: 如果本地不存在,就下载镜像
imagePullPolicy: [Always | Never | IfNotPresent]
# 容器启动命令列表,若不指定则使用镜像打包时使用的启动命令
command: [string]
# 容器的启动命令参数列表
args: [string]
# 容器的工作目录
workingDir: string
# 挂载到容器内部的存储卷配置(取值类型:List)
volumeMounts:
# 引用Pod定义的共享存储卷的名称,需使用镜像volumes[]部分定义的共享卷名称
- name: string
# 存储卷在容器内Mount的绝对路径(应少于512个字符)
mountPath: string
# 是否只读模式,默认false(读写模式)
readOnly: boolean
# 容器需要暴露的端口号(取值类型:List)
ports:
# 端口的名称
- name: string
# 容器需要监听的端口号
containerPort: int
# 容器所在主机需要监听的端口号,默认与containerPort相同
# (设置hostPort时,同一台宿主机将无法启动该容器的第二副本,由于端口占用问题)
hostPort: int
# 端口协议[TCP/UDP],默认为TCP
protocol: string
# 容器运行前需要设置的环境变量列表
env:
# 环境变量的名称
- name: string
# 环境变量的值
value: string
# 资源限制和资源请求的设置
resource:
# 资源限制设置
limits:
# CPU限制(单位为:core)将用于docker run --cpu-shares参数
cpu: string
# 内存限制(单位为:MiB/GiB)将用于docker run --memory参数
memory: string
# 资源限制设置(请求)
requests:
# CPU请求(单位为:core)将用于容器启动的初始化可用数量
cpu: string
# 内存请求(单位为:MiB/GiB)将用于容器启动的初始化可用数量
memory: string
# 对Pod对象内各个容器进行安全检查的设置,当探测无响应几次后,将自动重启该容器
# 包含[exec | httpGet | TcpSocket]三种方式,任选其一即可
livenessProbe:
exec:
# 需要执行的脚本
command: [string]
httpGet:
# 请求路径
path: string
# 请求端口
port: number
host: string
scheme: string
httpHeader:
- name: string
value: string
tcpSocket:
port: number
# 完成容器启动后首次进行探测的时间(单位为:s)
initialDelaySeconds: 0
# 对容器健康检查探测等待超时时间(单位为:s),默认值为1
timeoutSeconds: 0
# 对容器健康检查的探测时间周期(单位为:s),默认值为10
periodSeconds: 0
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: boolean
#
# Pod对象的重启策略,可选值[Always | Never | OnFailure]
#
# Always: Pod对象一旦终止,则不关心容器是如何停止的,kubelet都将重器容器
#
# Never: Pod对象终止后,kubelet将退出码返回给Master,不再重启该容器
#
# OnFailure: 只有当Pod对象以非零退出码终止时,kubelet才会重启该容器
# (容器正常结束的退出码为零)
#
restartPolicy: [Always | Never | OnFailure]
# 表示将Pod对象调度到包含这些label的Node上(以key:value形式指定)
nodeSelector: object
# Pull镜像时使用的secret名称(以name:secretValue形式指定)
imagePullSecrets:
- name: string
# 是否使用主机模式(默认值为:false)
#
# 如果设置为true,表示容器使用宿主机网络,不再使用Docker网桥
# 该Pod对象将无法在同一台宿主机上启动第二个副本
hostNetwork: boolean
# 在该Pod对象上定义的共享储存卷列表
volumes:
# 共享储存卷名称,一个Pod对象中每个储存卷定义一个名称(命名应按照RFC 1035规范)
- name: string
# Pod对象同生命周期的一个临时目录,值为{}空对象
emptyDir: {}
# 挂载Pod对象所在宿主机的目录
hostPath:
# 将用于容器中mount的目录
path: string
# 挂载集群中预定义的secret对象到容器内部
secret:
secretName: string
items:
- key: string
path: string
# 挂载集群预定义的configMap对象到容器内部
configMap:
name: string
items:
- key: string
path: string

2.Pod的基本用法

Pod对象可以由1个或者多个容器组合而成。当两个或者多个容器应用为紧耦合关系,应该组合成一个整体对外提供服务,即将这两个容器打包为一个Pod对象。

2.1 静态Pod对象

静态Pod对象是由Kubelet进行管理的仅存在于特定Node上的Pod对象。他们不可以通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet也无法对他们进行健康检查。静态Pod对象总是由kubelet进行创建,并且总是运行在kubelet所在的Node上运行。

创建静态Pod对象的两种方式:

  • 配置文件

    a.设置kubelet的启动参数[--config]: 指定kubelet需要监控的配置文件所在的目录,kubelet将会定期扫描该目录,并根据该目录下的*.yaml或者*.json进行创建.

    b.重启kubelet服务

  • HTTP方式

    设置kubelet启动参数[--manifest-url]: kubelet将会定期请求此URL下载Pod对象的定义文件,并以*.yaml或*.json文件格式解析,创建Pod对象。

2.2 Pod对象容器共享卷

在同一个Pod对象中的多个容器能够共享Pod对象级别的存储卷。Volume可以被定义为各种类型,容器各自进行挂载操作,将一个Volume挂载为容器内容存储卷。

配置文件示例:

apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: tomcat
image: tomcat
ports:
- containerPort: 8080
volumeMounts:
- name: app-logs
mountPath: /usr/local/tomcat/log
- name: logreader
image: busybox
command: ["sh", "-c", "tail -f /logs/catalina*.log"]
volumeMounts:
- name: app-logs
mountPath: /logs
volumes: app-logs
- name: app-logs
emptyDir: {}
2.3 Pod对象的配置管理

为了提高应用部署的复用能力以及灵活性,可以将应用所需要的配置文件与程序进行分离。将应用打包为容器镜像后,可以通过环境变量配置、挂载外部文件的方式在创建容器时进行配置注入,但唯一的缺点维护性复杂性将会在大规模容器集群中所体现。但在Kubernetes中可以通过ConfigMap进行管理。

1)ConfigMap的概念

  • 生成为容器内的环境变量
  • 设置容器的启动命令参数
  • 通过Volume的形式挂载到容器内部

ConfigMap以一个或者多个[Key:Value]的形式保存在Kubernetes系统中。可以通过*.yaml配置文件或者kubelet create [-f configmap.yaml]命令进行创建配置管理内容。

2)创建ConfigMap资源对象

a) *.yaml实例

apiVersion: v1
kind: ConfigMap
metadata:
name: cm-appvars
data:
apploglevel: info
appdatadir: /var/data

b) kubelet命令

# 1.创建configmap.yaml配置文件
kubelet create -f cm-appvars.yaml
> configmap "cm-appvars" created # 2.查看创建完成的配置文件
kubelet get configmap
# NAME DATA AGE
# cm-appvars 2 3s # 3.查看指定配置的详细内容
kubelet get configmap cm-appvars -o yaml

2-1.了解Pod对象的更多相关文章

  1. Kubernetes — 深入解析Pod对象:基本概念(一)

    在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念. 现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位.将这个设计落实到 A ...

  2. Kubernetes — 深入解析Pod对象:基本概念(二)

    作为 Kubernetes 项目里最核心的编排对象,Pod 携带的信息非常丰富.其中,资源定义(比如 CPU.内存等),以及调度相关的字段.在本篇,我们就先从一种特殊的 Volume 开始,来帮助你更 ...

  3. [Kubernetes]深入解析Pod对象

    k8s集群搭建是比较容易的,但是我们为什么要搭建,里面涉及到的内容,我们为什么需要? 这篇文章就尝试来讲讲,我们为什么需要一个Pod,对Pod对象来一个深入解析. 我们为什么需要Pod 我们先来谈一个 ...

  4. 14. 深入解析Pod对象(一)

    14. 深入解析Pod对象(一) """ 通过前面的讲解,大家应该都知道: Pod,而不是容器,它是 Kubernetes 项目中的最小编排单位.将这个设计落实到 API ...

  5. 15. 深入解析Pod对象(二):使用进阶

    15. 深入解析Pod对象(二):使用进阶 15.1 Projected Volume,投射数据卷 备注:Projected Volume 是 Kubernetes v1.11 之后的新特性 在 Ku ...

  6. kubernetes-深入理解pod对象(七)

    Pod中如何管理多个容器 Pod中可以同时运行多个进程(作为容器运行)协同工作.同一个Pod中的容器会自动的分配到同一个 node 上.同一个Pod中的容器共享资源.网络环境和依赖,它们总是被同时调度 ...

  7. kubernetes实践之三:深入理解Pod对象

    一.Pod定义 最小部署单元 一组容器集合 一个pod中的容器共享网络命名空间 Pod是短暂的 二.Pod容器分类 基础容器 维护整个Pod的网络命名空间 初始化容器 先于业务容器开始执行,在应用启动 ...

  8. 第6章:深入理解Pod对象

    Pod是最小的部署单元,也是后面经常配置的地方,本章节带你熟悉Pod中常见资源配置及参数. 也就是YAML这部分: ... template: metadata: labels: app: web s ...

  9. Kubernetes对象之Pod

    系列目录 Pod是Kubernetes调度的最小单元.一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机.Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统 因此 ...

随机推荐

  1. Codeforces_794

    A.统计两个guard之间的钞票数. #include<bits/stdc++.h> #define MOD 1000000009 using namespace std; int a,b ...

  2. springcloud微服务feign组件报错

    今天在用springcloud搭建微服务时,利用feign做通讯组件,结果报错 java.lang.IllegalStateException: Failed to introspect Class ...

  3. 第2章 Java并行程序基础(一)

    2.1 有关线程你必须知道的事 进程是系统进行资源分配和调度的基本单位,是程序的基本执行实体. 线程就是轻量级进程,是程序执行的最小单位. 线程的生命周期,如图2.3所示. 线程的所有状态都在Thre ...

  4. Go语言实现:【剑指offer】字符串的排列

    该题目来源于牛客网<剑指offer>专题. 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,b ...

  5. 阿里巴巴Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢?

    集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生. 关于HashMap,很多人都对他有一些基本的了解,比如他和hashtab ...

  6. 简化 Spring Boot 项目部署,Flyway 搞起来

    虽然我之前录了一个微人事(https://github.com/lenve/vhr)部署视频(新版微人事部署教程来啦),但是由于这次升级涉及到了 Redis 和 RabbitMQ,所以在本地跑微人事还 ...

  7. 通过open上网并设置开机自启与自动连接

    注意:这里所说的上网并不是FQ.只是简单的通过iptables让客户端可以访问外网.因为有些时候有这样的需求 上一篇文章为大家介绍了OpenVPN.以及它的部署工作.而这一篇主要就是讲解如何让客户端可 ...

  8. iOS - 一个简单的带标题的图标的实现

    代码不复杂,直接上代码: ImageViewButton.h // // ImageViewButton.h// // 带有图片.底部标题或者顶部的按钮 // // #import <UIKit ...

  9. Centos7 LVM扩容实例

    Centos7 lvm 扩容与以往版本有所不同   1.插入硬盘,我是在虚拟机上做的测试  直接添加一块5G的硬盘   2.系统读取硬盘信息     # echo "- - -" ...

  10. HDU 1042 大数阶乘

    B - 2 Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...