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. windows 使用ssh连接docker容器

    在Windows上搭建docker服务器需要在Windows模拟一个Linux平台,然后在Linux平台上搭建的docker服务器,所以在使用ssh工具连接docker容器的时候,使用的ip地址不是d ...

  2. Codeforces_846

    A.简单dp. #include<bits/stdc++.h> using namespace std; ],dp[][] = {}; int main() { ios::sync_wit ...

  3. MySQL必知必会官方提供的数据库和表

    创建表 Create customers table CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name c ...

  4. VFP执行 SQL Server 储存过程示例

    PUBLIC errvalPUBLIC errmsgPUBLIC handleerrval=0errmsg=' ' *Sql Server 连接参数sourcename= 'test'user= 's ...

  5. win10电脑搭建网站

    新建网站之后,IIS错误提示是:在计算机“.”上没有找到服务W3SVC,需要在“启动或关闭windows功能”添加.net 3.5下面的两个程序. https://img-blog.csdn.net/ ...

  6. Angular目录结构

    一. Angular目录结构 e2e:在e2e/下是端到端测试 node_modules:安装的第三方模块都在这,使用npm install安装的1 Src:我们项目的所有文件 { App:组件,以a ...

  7. vue 鼠标移入移出 列表蒙层展示

    <template> <section class="base"> <ul> <li v-for="(item, index) ...

  8. 学Python必背的初级单词,你都背了吗?

    今天给大家分享一些学习Python必须认识的英文单词,同时也是学习编程都必须会的单词,新手赶快学起来!有点长耐心看完. 小编推荐一个学Python的学习裙:九三七六六七 五零九,无论你是大牛还是小白, ...

  9. C# DateTime 工具类

    项目gitHub地址 点我跳转 今天给大家带来一个C#里面的时间工具类,具体的直接看下面代码 using System; namespace ToolBox.DateTimeTool { public ...

  10. Sunset: dusk: Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/sunset-dusk,404/ 主机IP扫描: IP端口扫描: 21 端口  pyftpdlib 1.5.5 版本漏洞 25 ...