第一章、前言

  在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义

第二章、常用字段讲解

spec.containers <[]object>

spec.containers <[]object>
spec.containers.name <string>             #pod的名称,必须字段,名称唯一且对象创建后不可以被修改
spec.containers.image <string>               #镜像仓库的路径/镜像的名称:镜像的标签
spec.containers.image.imagePullPolicy <string>        #镜像的下载策略。有三种:Always(总是去仓库下载) ,Never(从不去仓库下载) , IfNotPresent(如果本地没有就去仓库下载)
默认是"IfNotPresent" 但是,如果镜像的标签是latest,则总会是"Always,并且对象一旦被创建,这个字段不允许被改变
spec.containers.ports:       #容器公开的端口列表。在这里公开端口可以为系统提供关于容器使用的网络连接的额外信息,但主要是提供信息。在这里不指定端口不会阻止该端口被公开。任何监听容器内默认的“0.0.0.0”地址的端口都可以从网络访问
spec.containers.ports.containerPort <integer> -required- #pod暴露的端口,此端口仅是额外的信息,对端口是否被暴露没有影响
spec.containers.ports.hostPort <integer> #主机上公开的端口
spec.containers.ports.protocol <string> #端口的协议
spec.containers.ports.hostIP <string> #指定要绑定的主机
spec.containers.command <[]string> #运行的程序,类似于docker中的entrypiont,并且这里的命令不会运行在shell中,如果没有这个字段docker镜像会运行自己entrypiont中的指令
spec.containers.args <[]string> #向docker镜像中传递参数 如果定义了这个字段,docker镜像中cmd命令不会被执行,如果引用变量使用$(VAR_NAME)格式引用,如果想使用命令引用的的方式,需要使用$$(VAR_NAME)方式来引用
#关于args和command的官方文档链接:https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/ 
pod.spec.containers.volumeMounts
  pod.spec.containers.volumeMounts.name
  pod.spec.containers.volumeMounts.mountPath #可以被容器挂载的存储卷的路径,路径不能包含':' 符号
  pod.spec.containers.volumeMounts.subPath #可以被容器挂载的存储卷的路径,并且不会覆盖挂载点中的文件
  pod.spec.containers.volumeMounts.readOnly #是否只读,默认为false
pod.spec.containers.resources
  spec.containers.resources.limits #资源限制
    spec.containers.resources.limits.cpu : CPU 上限, 可以短暂超过, 容器也不会被停止
    spec.containers.resources.limits.memory : 内存上限, 不可以超过; 如果超过, 容器可能会被终止或调度到其他资源充足的机器上
  spec.containers.resources.requests #资源需求
    spec.containers.resources.requests.cpu : CPU 请求, 也是调度 CPU 资源的依据, 可以超过
    spec.containers.resources.requests.memory : 内存请求, 也是调度内存资源的依据, 可以超过; 但如果超过, 容器可能会在 Node 内存不足时清理

spec.nodeSelector <map[string]string>

pod.spec.nodeSelector: #指定对象的调度节点,节点必须存在

pod.spec.restartPolicy <string>

pod.spec.restartPolicy:#容器的重启策略。有三种Always(只有退出就重启),OnFailure(失败退出时不重启),Never(只要退出就不重启),kubelet重新启动的已退出容器将以指数退避延迟(10秒,20秒,40秒......)重新启动,上限为五分钟,并在成功执行十分钟后重置

第三章、简单示例

1.常见pod清单(使用ConfigMap传递环境变量)

[root@k8s-master01 ~]#kubectl create configmap special-config --from literal=special.how=very --from-literal=sepcial.type=charm  #创建一个ConfigMap,ConfigMap是用来存储配置文件的kubernetes资源对象,获取命令帮助kubectl create configmap -h
[root@k8s-master01 ~]#kubectl create configmap env-config --from-literal=log_level=INFO
[root@k8s-master01 ~]#kubectl get configmap special-config -o go-template='{{.data}}' #查看ConfigMap的内容
[root@k8s-master01 ~]#kubectl get configmap env-config -o go-template='{{.data}}'
[root@k8s-master01 manifests]# kubectl label node k8s-node01 disk=ssd #对集群中的一个节点打上标签
[root@k8s-master01 manifests]# cat test-pod.yaml #创建一个测试pod清单
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container #容器名称
image: busybox #镜像路径
command: ["/bin/sh", "-c", "env"] #执行命令,需要注意command、args和container中的entrypiont中的命令和参数相互的关系
env: #配置env
- name: SPECIAL_LEVEL_KEY    #env名称
valueFrom:    #指定env的来源
configMapKeyRef:    #表示从ConfMap中选择
name: special-config    #ConfigMap的文件名称
key: special.how    #ConfigMap中的key名称
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: sepcial.type
envFrom:     #容器中填充环境变量的列表
- configMapRef:           #指定ConfigMap文件
name: env-config         #ConfigMap文件
restartPolicy: Never         #定义重启策略
nodeSelector:           #node选择器
disk: ssd

2.常见pod清单(使用secret传递环境变量)

[root@k8s-master01 manifests]# cat secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: MTIzNDU2Cg== #这里的环境变量的值需要使用base64加密,例如:echo "admin"|base64[加密] , echo "YWRtaW4K"|base64 -d [解密]
username: YWRtaW4K
[root@k8s-master01 manifests]# cat secrets-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-nginx
labels:
name: secret-nginx
spec:
volumes:
- name: secret-nginx
secret:
secretName: mysecret
containers:
- name: secret-nginx
image: nginx:1.14.-alpine
volumeMounts:
- name: secret-nginx
mountPath: "/etc/secrets"
readOnly: true
ports:
- name: www
containerPort:
hostPort:

pod清单配置3(定义pod postStart或preStop,即容器创建后和容器中止前需要做的操作)

[root@k8s-master01 manifests]# cat poststart-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: poststart-pod
spec:
containers:
- name: buxybox-httpd
image: busybox
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command: ["mkdir", "-p"," /data/web/html"] #注意,此处command和下面的command不可以有强依赖关系,下面的command会在此处command先执行
command: ["/bin/sh","-c","sleep 3600"]

pod清单配置4(以exec方式对pod进行存活性探测)

[root@k8s-master01 manifests]# cat liveness-exec.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
spec:
containers:
- name: liveness-exec-pod
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy;sleep 3600"]
livenessProbe:
exec: #探测方式由三种,exec(执行命令探测) HttpGet(Http请求) tcpSocket(TCP端口探测)
command: ["test","-e","/tmp/healthy"]
initialDelaySeconds: 2 #容器启动后多长时间开始探测
periodSeconds: 5 #每次探测的间隔时间,单位为秒

pod清单配置5(以HttpGet方式对pod进行存货性探测)

[root@k8s-master01 manifests]# cat liveness-httpget.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-httpget-pod
spec:
containers:
- name: liveness-httpget-pod
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
port:
path: /index.html
initialDelaySeconds:
periodSeconds:

pod清单配置6(使用httpget方式对pod进行就绪性探测)

[root@k8s-master01 manifests]# cat readiness-httpget.yaml  #与存活性探测相类似
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
spec:
containers:
- name: readiness-httpget-pod
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port:
path: /index.html
initialDelaySeconds:
periodSeconds:

k8s学习笔记之五:Pod资源清单spec字段常用字段及含义的更多相关文章

  1. k8s学习笔记之六:Pod控制器(kube-controller-manager)

    第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...

  2. K8S学习笔记之Pod的Volume emptyDir和hostPath

    0x00 Volume的类型 Volume是Kubernetes Pod中多个容器访问的共享目录. Volume被定义在Pod上,被这个Pod里的多个容器挂在到相同或不同的路径下. Volume的生命 ...

  3. k8s学习笔记之四:资源清单定义入门

    第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...

  4. 【K8s学习笔记】K8s是如何部署应用的?

    本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...

  5. Pod中spec的字段常用字段及含义

    一.Pod中spec的字段常用字段及含义 1.pod.spec.containers ²  spec.containers.name <string>  #pod的名称,必须字段,名称唯一 ...

  6. Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息

    Kubernetes在创建Pod时,会为Pod和容器设置一些额外的信息,比如Pod名称.Pod IP.Node IP.Label.Annotation.资源限制等,我们经常会在应用程序中使用到这些数据 ...

  7. k8s学习笔记

    9.deployment:声明式的升级应用 9.1.使用RC实现滚动升级 #kubectl rolling-update kubia-v1 kubia-v2 --image=luksa/kubia:v ...

  8. k8s 学习笔记

    常用的kubectl命令   kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1   --image 指定镜像 - ...

  9. ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...

随机推荐

  1. Java面试(一) -- 基础部分(1)

    1 .一个".java" 源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致.. ...

  2. Spring源码学习(3)—— 自定义标签

    上一篇讲了Spring对默认标签的解析,Spring提供了很多属性,可以供开发者根据不同情况使用.绝大多数情况下,这些功能就已经足够了.但是,当用户有更特殊的需求,又或者很多公司自己实现的服务治理框架 ...

  3. open live writer安装教程和账号配置

    第一步:Open Live Writer软件下载.官方地址:http://openlivewriter.org/ 第二步:双击安装文件(OpenLiveWriterSetup.exe),然后点击下一步 ...

  4. c++结构体的排序

    出处:https://blog.csdn.net/weixin_39460667/article/details/82695190 引入头文件 #include<algorithm> 结构 ...

  5. php优秀框架codeigniter学习系列——CI_Output类的学习

    这篇文章主要介绍CI核心框架工具类CI_Output. 根据CI文档自己的定义,这个类主要就是生成返回的页面给浏览器.以下选取类中的重点方法进行说明. __construct() 在构造函数中,主要确 ...

  6. 2017年3月28日15:59:16 终于明白spring这套鬼东西是怎么玩的了

    先说重点,新东家公司的项目框架没有一样是我之前用过的,首先pm和我说的是一套微服务的概念,微服务不同于传统的功能模块实现,他将服务松散化分不到各个系统之间,这样也是实现分散压力的一种. 微服务是由sp ...

  7. winform 写入txt

    StreamWriter sw; FileStream fs = new FileStream(@"D:\" + txtStringfield03.Text + ".tx ...

  8. sed语法

    Sed 命令行 以下是我们可以指定单引号在命令行sed命令的格式如下: sed [-n] [-e] 'command(s)' files 例子 考虑一下我们有一个文本文件books.txt待处理,它有 ...

  9. 重开ES6

    一.ES6的开发环境搭建 现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法自动的转变成ES5的语法. 1.建立工程目录: 先建立一个项 ...

  10. C语言笔记1

    第一部分 计算机常识 1,人与计算机交流 2,人机交互方式 3,计算机的组成结构 4,计算机的系统组成 5,进制 6,程序和指令  第二部C开发环境 1 人与计算机交流 现实中人与人交流靠语言,那么人 ...