美文网首页
Kubernetes YAMl 详解之 POD (POD、Con

Kubernetes YAMl 详解之 POD (POD、Con

作者: 河码匠 | 来源:发表于2023-02-17 13:36 被阅读0次

YAML 语法

map[string]string 示例:

labels:
  key: value

Object 示例:

hostPath:
  path: /root/aaa
  type: DirectoryOrCreate

[]Object 示例:

containers:
- name: xxx
  image: xxx

或

containers: {name: xxx, image: xxx}

[]string 示例:

command:
- "/bin/sh"
- "-c"
- "sleep 3600"

或

command: ["/bin/sh", "-c", "sleep 3600"]

一、 Pod YAML

  • 查看 pod 相关 yaml 字段说明

kubectl explain pod

字段说明

字段 值类型 说明
apiVersion string 使用的 API 版本
kind string 创建资源类型 Pod
metadata Object 定义元数据信息 \color{red}{看}\color{blue}{Pod 的 pod.meatdata字段}
spec Object 定义规则 \color{red}{看}\color{blue}{Pod 的 pod.spec字段}
status Object pod 状态,不用定义
  • Pod 的 pod.meatdata 字段,pod 元数据

kubectl explain pod.metadata
字段 值类型 说明
annotations map[string]string 注解没有实际作用,就是描述信息,key-value 形式
finalizers []string inalizer 是带有命名空间的键,告诉 Kubernetes 等到特定的条件被满足后, 再完全删除被标记为删除的资源
labels map[string]string 标签是附加到对象(例如 pod)的键/值对。可以随时添加和修改
name string pod 名称
generateName string 当不写 name 字段是时,系统生成一个唯一的 name
namespace string 命名空间,资源隔离
ownerReferences []Object
uid string 系统自动生成,资源创建成功后自动生成,唯一值
generation integer 系统自动生成,表示所需状态的特定生成的序列号
resourceVersion string 系统自动生成,资源的一个版本
deletionTimestamp string 系统自动生成。删除此资源的日期和时间
creationTimestamp string 系统自动生成,创建资源的时间戳
deletionGracePeriodSeconds integer 此对象在从系统中删除之前允许正常终止的秒数。仅在同时设置了删除时间戳时设置。只能缩短。
kubectl explain pod.spec
字段 值类型 说明
activeDeadlineSeconds integer Pod 运行的最长时间
affinity Object 定义亲核性,就是定义资源创建时选择节点的策略。\color{red}{看}\color{blue}{Pod 的 pod.spec.affinity 字段}
automountServiceAccountToken boolean 是否将 ServiceAcount 账户将默认挂载到 Pod 中,默认是 true
* containers []Object 定义容器信息 \color{red}{看}\color{blue}{Pod 的 pod.spec.containers 字段}
dnsConfig Object DNS 配置
dnsPolicy string DNS 策略

Default: Pod 从运行所在的节点继承名称解析配置

ClusterFirst: 与配置的集群域后缀不匹配的任何 DNS 查询(例如 "www.kubernetes.io") 都会由 DNS 服务器转发到上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器

ClusterFirstWithHostNet: 对于以 hostNetwork 方式运行的 Pod,应将其 DNS 策略显式设置为 ClusterFirstWithHostNet。否则,以 hostNetwork 方式和 ClusterFirst 策略运行的 Pod 将会做出回退至 Default 策略的行为。

None: 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。Pod 会使用其 dnsConfig 字段所提供的 DNS 设置
enableServiceLinks boolean 是否应将有关服务的信息注入到 Pod 的环境变量中。默认为 true
hostAliases []Object /etc/hosts 中添加内容

hostnames: 别名
ip: ip 地址
hostIPC boolean 使用主机的 IPC 名字空间。可选:默认为 false
hostNetwork boolean true 时使用宿主机网络 ip,和物理机 ip 一样。如果设置了此选项,则必须指定将使用的端口。默认为 false
hostPID boolean 使用主机的 PID 名字空间。默认为 false
hostname string 指定 Pod 的主机名
imagePullSecrets []Object 从私有仓库拉取镜像的凭证
initContainers []Object 初始化容器,在 Pod 内的应用容器启动之前运行。初始化容器必须运行成功,才会继续运行其他容器。

initContainersContainers 几乎一样。
只是初始化容器不支持就 readinessProbe 绪探测。
nodeName string 节点选择器,指定一个 node 创建资源,根据 node 名定位到 node 节点
nodeSelector map[string]string 节点标签选择器,根据 node 标签选择 node 来创建资源,nodeNamenodeSelector 是且的关系,如:nodeSelector: node:123
os Object 指定 Pod 中容器的操作系统。如果设置了此属性,则某些 Pod 和容器字段会受到限制。具体官网
overhead map[string]string 该字段将由 RuntimeClass 准入控制器在准入时自动填充
preemptionPolicy string 用来抢占优先级较低的 Pod 的策略。取值为 NeverPreemptLowerPriority 之一。 如果未设置,则默认为 PreemptLowerPriority
priority integer 优先级值。各种系统组件使用该字段来确定 Pod 的优先级。当启用 Priority 准入控制器时, 该控制器会阻止用户设置此字段。准入控制器基于 priorityClassName 设置来填充此字段。 字段值越高,优先级越高。
priorityClassName string 如果设置了此字段,则用来标明 Pod 的优先级。 system-node-criticalsystem-cluster-critical 是两个特殊关键字, 分别用来表示两个最高优先级,前者优先级更高一些。 任何其他名称都必须通过创建具有该名称的 PriorityClass 对象来定义。 如果未指定此字段,则 Pod 优先级将为默认值。如果没有默认值,则为零。
readinessGates []Object
restartPolicy string 重启策略
Always: 默认,只要容器异常退出就重启
OnFailure:容器退出,且退出码不为 0 ,则重启
Never:无论容器什么状态都从不重启
runtimeClassName string
schedulerName string 如果设置了此字段,则 Pod 将由指定的调度器调度。如果未指定,则使用默认调度器来调度 Pod。
securityContext Object 安全策略上下文
serviceAccountName string 服务帐户名称是用于运行此容器的服务帐户的名称
setHostnameAsFQDN boolean
shareProcessNamespace boolean 在 pod 中的所有容器之间共享一个进程命名空间。
设置后,容器将能够查看同一 pod 中其他容器的进程并发出信号,并且每个容器中的第一个进程将不会分配 PID 1
\color{red}{注意:}HostPIDShareProcessNamespace 不能同时设置。
subdomain string 如果设置了此字段,则完全限定的 Pod 主机名将是 <hostname>.<subdomain>.<Pod 名字空间>.svc.<集群域名>。 如果未设置此字段,则该 Pod 将没有域名。
terminationGracePeriodSeconds interger 为 kubelet 配置从为失败的容器触发终止操作到强制容器运行时停止该容器之前等待的宽限时长。默认 30
tolerations []Object 容忍度,node 上会定义污点类型,当 pod 和 node 定义的污点类型匹配时可创建资源 容忍度相关说明
topologySpreadConstraints []Object
volumes []Object \color{red}{看}: \color{blue}{pod.spec.volume YAML}
  • Pod 的 pod.spec.affinity 字段,亲和性

kubectl explain pod.spec.affinity
字段 值类型 说明
nodeAffinity Object node 亲和性,pod 根据哪些条件调度到 node 上

preferredDuringSchedulingIgnoredDuringExecution: 软亲和性,就是说有节点满足这个亲和性,就在该节点创建,没有就随便找创建。
软亲和性匹配方式:
preference:匹配方式:
        matchExpressions:匹配节点标签
        matchFields:匹配节点字段
weight: 权重,在一个软亲和性中定了多个条件,执行条件的权重

requiredDuringSchedulingIgnoredDuringExecution: 硬亲和性,必须满足这个亲和性条件,否则不创建资源。
硬亲和性匹配方式: nodeSelectorTerms

关于匹配规则matchExpressionsmatchFields具体条件写法参考官网 或命令 kubectl explain
podAffinity Object pod 和 pod 之间的亲和性,当 pod1 和 pod2 有关联时,根据 pod1 和 pod2 的亲和性将他们创建到同一个 node 上。

软亲和性,能在一起就在一起,不能就算了

硬亲和性,必须在一起

软亲和性匹配方式:
requiredDuringSchedulingIgnoredDuringExecution
  labelSelector: 标签选择器
  namespaceSelector: 命名空间选择器
  namespaces:指定命名空间
  * topologyKey: 根据 pod 所在 node 上的标签定位,也就是说 node 上有相同标签且值相同时进行判断

硬亲和性匹配方式:
preferredDuringSchedulingIgnoredDuringExecution:
  podAffinityTerm:
      labelSelect:根据 pod 标签匹配到要在一起的 pod
      namespaceSelector: 通过 namespace 的 selector(标签选择器) 定位
      namespaces: 通过 namespace 定位
      * topologyKey: 根据 pod 所在 node 上的标签定位,也就是说 node 上有相同标签且值相同时进行判断

weight: 权重
podAntiAffinity Object pod 和 pod 之间的反亲和性,pod 不在同一个 node 上创建。其他同上

示例: node 硬亲和性,pod 必须创建在满足条件的 node 上
节点标签 xxx 的值必须包含 aaa 或 bbb 才能创建

spec:
  affinity:
    nodeAffinity:                                     # 定义 node 亲和性
      requiredDuringSchedulingIgnoredDuringExecution: # 定义 硬亲和性
        - matchExpressions:                           # 使用表达式匹配机制
          - key: xxx                                  # 定义标签 key 值
            operator: In                              # 使用规则是 in 只要包括下面 values 中一个即可
            values:                                   # 定义匹配的值
            - aaa
            - bbb

示例: node 软亲和性,需要定义 weight 权重,当有多个匹配条件且都满足时根据权重选择 node

spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - preference:
          - matchExpressions:
            - key: xxx
              operator: In
              values:
              - aaa
              - bbb
          weight: 10
        - preference:
          - matchExpressions:
            - key: xxx2
              operator: In
              values:
              - aaa2
              - bbb2
          weight: 6

示例: pod 亲和性与反亲和性
pod1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    keyaaa1: valueaaa1 # 这里定义标签,会在 pod2 中亲和性调用
    keybbb1: valuebbb1
spec:
  containers:
  - name: pod1-con
    image: nginx
    imagePullPolicy: IfNotPresent

pod2.yaml 与 pod1 亲和性与反亲和性

apiVersion: v1
kind: Pod
metadata:
  name: pod2
  labels:
    aaa2: aaa2
    bbb2: bbb2
spec:
  containers:
  - name: pod2-con
    image: nginx
    imagePullPolicy: IfNotPresent
  affinity:
    # 反亲和性使用 podAntiAffinity 其他匹配方式一样
    podAffinity:                                      # pod 亲和性
      requiredDuringSchedulingIgnoredDuringExecution: # pod 硬亲和性
      - labelSelector:                                # 定义标签选择器规则
          matchExpressions:                           # 表达式匹配,在 pod 中搜索标签 key=keyaaa1 的标签,且值包含 valueaaa1
          - key: keyaaa1
            operator: In
            values: 
            - valueaaa1
        # 这里是 node 节点的 label 的 key,会根据 key 的值定位;
        # 也就是说会在有 key=kubernetes.io/hostname 的 node 上面进行判断
        # 查看 node label 命令:kubectl get nodes --show-labels
        topologyKey: kubernetes.io/hostname  # 只会在符合这个要求的节点上搜索 pod 和创建
  • Pod 的 pod.spec.containers 字段,容器

kubectl explain pod.spec.containers
字段 值类型 说明
args []string 在容器中执行命令
command []string 要在容器中运行的命令

commandargs 区别:

1. 如果 commandargs 均没有指定,那么则使用 Dockerfile 的配置。

2. 如果 command 没有指定,但指定了 args,那么 Dockerfile 中配置的 ENTRYPOINT 的命令行会被执行,并且将 args 中填写的参数追加到 ENTRYPOINT 中。

3. 如果 command 指定了,但 args没有写,那么 Dockerfile 默认的配置会被忽略,执行输入的 command (不带任何参数,当然 command 中可自带参数)。

4. 如果 commandargs 都指定了,那么 Dockerfile 的配置被忽略,执行 command 并追加上 args 参数。
env []Object 环境变量,

* name: 环境变量的名字

value: 直接给 name 赋值

valueFrom: 加载指定 ConfigMap 下的某个 keyvalue 值,然后赋值给 name
\color{red}{看}\color{blue}{Pod 的 `pod.spec.containers.env.valueFrom` 字段,环境变量}
envFrom []Object 加载环境变量,加载整个 ConfigMap 所有配置到环境变量

configMapRef:指定 ConfigMap
image string 容器使用的镜像
imagePullPolicy string 镜像拉取策略
Always: 总是去指定的镜像仓拉取无视本地。默认
IfNotPresent: 使用节点上存在的镜像,没有再去拉取。
Never: 只用当前节点的镜像,没有也不拉取
lifecycle Object 生命周期钩子
postStart: 容器创建之后立刻执行,用于资源部署、环境准备等
preStart: 在容器被终止前执行,用于优雅关闭应用程序、通知其他系统等。

postStartpreStart 的参数:
exec: 执行 command 命令
httpGet: 执行一个http get 请求:
    host: 主机名
    httpHeaders:请求头
    path:路径
    port:端口
    scheme: https 还是 http
startupProbe Object 启动探测,探测容器是否正常运行,先运行 startupProbe,在执行 livenessProbelivenessProbe,这两个并行关系; \color{red}{看}\color{blue}{pod 的 startupProbe、livenessProbe、readinessProbe字段}
livenessProbe Object 存活性探测,判断容器是否处于 runnning 状态,根据重启策略决定是否重启容器; \color{red}{看}\color{blue}{pod 的 startupProbe、livenessProbe、readinessProbe字段}
readinessProbe Object 就绪性检测,判断容器内程序是否准备就绪并对外提供服务,将容器设置为不可用,不接受 service 转发的请求; \color{red}{看}\color{blue}{pod 的 startupProbe、livenessProbe、readinessProbe字段}
* name string 容器名
ports []Object pod 端口配置 \color{red}{看}\color{blue}{Pod 的 pod.spec.containers.ports 字段}
resources Object 限制容器使用资源
limits <map[string]string>: 限制资源
requests <map[string]string>: 限制请求,最少有这么多空闲资源才能在 node 上创建
securityContext Object 安全策略上下文
terminationMessagePath string 将容器终止的一些信息写入到,挂载在容器中的文件系统的路径。
terminationMessagePolicy string 容器终止写入信息策略。FallbackToLogsOnError 将使用容器日志输出的最后一部分,大小限制为 2048 字节80 行 。默认 File
volumeDevices []Object
volumeMounts []Object 挂载存储

* mountPath: 将卷挂载到容器中的地址
* name: 名字必须和创建的 volume 的 name 相同
readOnly: 只读,默认 False
subPath:
subPathExpr:
mountPropagation:
workingDir string 容器的工作目录。如果未指定,将使用容器运行时的默认值,该默认值可能在容器映像中配置。无法更新。
stdin boolean
stdinOnce boolean
tty boolean
  • Pod 的 pod.spec.containers.env 字段,环境变量

字段 值类型 说明
* name string 变量名,将配置文件中对应值赋值给这个 name
value string 引用环境变量中的值 $(VAR_NAME),如果值不存在出入 value 中的值。
valueFrom Object 自定义环境变量 \color{red}{看}\color{blue}{Pod 的 pod.spec.containers.env.valueFrom`字段,定义环境变量}
  • Pod 的 pod.spec.containers.env.valueFrom 字段,定义环境变量

字段 值类型 说明
configMapKeyRef Object 加载创建好的 ConfigMap 中的值

name: ConfigMap 的名字
key: ConfigMap 中变量的 key
secretKeyRef Object 加载 Secret 的配置信息

name: Secret 的名字
key: Secret 中变量的 key;用法同 configMap 看示例
fieldRef Object 文件引用 * fieldPath: 引用文件的路径
resourceFieldRef Object 选择容器的资源:目前仅支持资源限制与请求(limits.cpulimits.memoryrequests.cpurequests.memory

containerName: 容器的名字
resource: 限制资源类型

示例:
定义一个 ConfigMap创建 comfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql    # 这个 name 会在 env.valueFrom.name 中被调用
data:
    log: "1"     # 这个配置的 key 会在下面 pod 中加载时的 env.valueFrom.configMapKeyRef .key 中被调用

pod 加载 ConfigMap

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
  - name: mysql
    image: mysql
    imagePullPolicy: IfNotPresent
    env:                   # 定义环境变量
    # 总结:就是在 configmap 资源里面搜索 name 为 mysql 的 configmap。然后在这里面把 key 是 log 的参数的值取出来,赋值给环境变量 log_bin
    - name: log_bin        # 定义环境变量名字为 log_bin
      valueFrom:           # 值来源
        configMapKeyRef:   # 定义 configmap 
          name: mysql      # 指定 configmap.metadata.name 的值。来搜索 configmap
          key: log         # 指定 configmap.data.log 自定义的 log; 这里获取到 log 的值后会赋值给 log_bin。log_bin=1
  • Pod 的 pod.spec.containers.ports 字段,容器暴露端口

kubectl explain pod.spec.containers.ports
字段 值类型 说明
* containerPort integer 容器要暴露的端口号
hostIP string 将容器中的服务暴露到宿主机的端口上时,可以指定绑定的宿主机 IP
hostPort integer 容器中的服务在宿主机上映射的端口
name string 端口名
protocol string 端口使用的协议 SCTP TCP UDP
  • pod 的 pod.spec.containers.startupProbe livenessProbe readinessProbe 字段,启动探测,存活探测,就绪探测

livenessProbereadinessProbe 区别:
readinessProbelivenessProbe 可以使用相同探测方式,

只是对 Pod 的处置方式不同:
readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。
livenessProbe 当检测失败后,将销毁容器然后根据 Pod 重启策略执行后续任务。

字段 值类型 说明
exec Object 执行命令,退出码为 0,探测成功
failureThreshold integer 探测失败几次算失败,在 readinessProbe 探针中,Pod 会被标记为未就绪,默认为 3,最小值为 1
httpGet Object GET 请求容器的 hostporthttpHeaderpath组成的地址,如果响应的状态码大于等于200且小于400,则认为容器健康
initialDelaySeconds integer 容器启动多少秒后开始探测,默认是 0 秒,最小值是 0
periodSeconds integer 执行探测的时间间隔,默认为 10s,单位“秒”,最小值是1
successThreshold integer 连续成功几次算成功,默认为 1,在 livenessProbe 探针中必须为1,最小值为1
tcpSocket Object 通过容器的 hostport 执行 TCP 检查,如果能够建立 TCP 连接,则表明容器健康
terminationGracePeriodSeconds integer 为 kubelet 配置从为失败的容器触发终止操作到强制容器运行时停止该容器之前等待的宽限时长
timeoutSeconds integer 探测超时的秒数。默认为 1 秒

示例: 启动探测 startupProbeexectcpSocket

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  containers:
  - name:  nginx-1
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    startupProbe:             # 定义启动探测
      # exec:                 # 定义要执行的命令
      #   command:
      #   - "/bin/bash"
      #   - "-c"
      #   - "ps aux | grep nginx"

      # tcpSocket:            # tcp socket 探测
      #   port: 80

      httpGet:                # http get 探测。不写 host 默认就是当前容器
        path: /
        port: 80
      initialDelaySeconds: 20 # 容器启动多久后探测
      periodSeconds: 10       # 执行探测的时间间隔
      successThreshold: 1     # 成功几次算成功
      failureThreshold: 3     # 失败几次算失败

示例: 存活探测

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
  namespace: default
  labels:
    app: ubuntu
spec:
  containers:
  - name:  ubuntu-1
    image: ubuntu
    imagePullPolicy: IfNotPresent
    # 在容器中创建一个文件 aaa
    args: ["/bin/sh", "-c", "touch /root/aaa; sleep 60; rm -rf /root/aaa; sleep 300"]
    livenessProbe:                       # 定义 存活探测
      exec:
        command: ["cat", "/root/aaa"]    # 执行命令查看创建的 aaa 文件是否存在
      initialDelaySeconds: 20
      periodSeconds: 10
      successThreshold: 1
      failureThreshold: 3

示例: 就绪探测

pod 起来后,等待 pod 里面容器服务正常启动,才会把 pod 加入到 service 代理。

就绪探测:不使用就绪探测时,只要 pod 启动成功,系统默认认为 pod 的所有服务都已经正常运行,实际上有些服务在 pod 启动成功后还需要一些时间来启动。
这个时候就需要就绪探测来监测 pod 里面的服务是否启动成功。

有些资源和 pod 绑定需要 pod 里面的服务完全启动才能绑定,如: service

# 启动一个 service
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - name: server
    port: 80
    targetPort: 80
    nodePort: 31180
  selector:
    app: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - name: server
      containerPort: 80
    readinessProbe:            # 定义就绪探测
      initialDelaySeconds: 20   
      periodSeconds: 5          
      timeoutSeconds: 10   
      httpGet:                 # 定义 http get 方式
        scheme: HTTP
        port: 80
        path: /

二、pod.spec.volume YAML

挂载持久化存储,一下列出为常用的存储方式

kubectl explain pod.spec.volumes
字段 值类型 说明
* name string 存储名
emptyDir Object 临时目录,pod 销毁数据销毁

都是默认值的写法: emptyDir: {}

medium: 支持此目录的存储介质类型。 默认值为 “”,表示使用节点的默认介质
sizeLimit: 大小限制
hostPath Object 宿主机目录挂载到容器

* path: 宿主机目录地址
type: 类型,如下:

  : 空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。
  DirectoryOrCreate: 目录不存在创建,存在直接用,权限为 0755。
  Directory: 路径上目录必须存在。
  FileOrCreate: 文件不存在创建,存在直接用,权限为 0644。
  File: 路径上文件必须存在。
  Socket: 在给定路径上必须存在的 UNIX 套接字。
  CharDevice: 在给定路径上必须存在的字符设备。
  BlockDevice: 在给定路径上必须存在的块设备。
nfs Object nfs 网络存储

* path: nfs 目录地址
readOnly: 是否只读,默认 false
* server: nfs 服务器地址
persistentVolumeClaim Object 创建 pvc 卷

* claimName: 要使用的 pvc 名字
readOnly:只读,默认 false
cephfs Object ceph fs 文件存储
glusterfs Object glusterfs 分布式存储
configMap Object 指定 ConfigMap 配置文件,做成卷被 pod 挂载,下面示例

defaultMode: 文件设置权限,0000 0755 这种
items: 当不写 items 时文件的名称是 key,而文件的内容是 keyvalue
name: ConfigMap 的名字
rbd Object ceph rbd 块存储
secret Object 加密存储

defaultMode: 文件设置权限,0000 0755 这种
items: 当不写 items 时文件的名称是 key,而文件的内容是 keyvalue
secretName: Secret 的名字

示例:挂载临时卷 emptyDir

临时卷所在物理机地址为 /var/lib/kubelete/pods
根据 pod uid 匹配 kubectl get pods xxx -o yaml | grep uid

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  volumes:                        # 定义卷
  - emptyDir: {}                  # 定义临时卷类型
    name: empty-volume            # 卷名字
  containers:                     # 定义容器
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:                 # 挂载卷设置
    - name: empty-volume          # 挂载卷的名字,必须和 volume.name 相同
      mountPath: /usr/share/html           # 挂载到容器中的地址

示例: 挂载宿主机文件 hostPath

......
spec:
  volumes:                         # 定义 volume
  - name: host-volume              # 创建的 volume 名字
    hostPath:                      # 使用 hostPath 类型的 volume
      path: /root/aaa              # 宿主机目录所在位置
      type: DirectoryOrCreate      # 使用 DirectoryOrCreate 类型。目录不存在创建,存在直接用,权限为 0755
......

示例: 挂载宿主机文件 nfsnfs 搭建参考这里

......
spec:
  volumes:                        # 定义 volume
  - name: nfs-volume              # 创建的 volume 名字
    nfs:                          # 使用 nfs 类型的 volume
      path: /root/nfs_data        # 宿主机目录所在位置
      server: fns_ip              # nfs ip 地址
......

示例: 挂载 pvc persistentVolumeClaimpv,pvc 创建

......
spec:
  volumes:                        # 定义卷
  - persistentVolumeClaim:        # 定 pvc 卷类型
      claimName: pvc-1            # 指定要使用的 pvc 名字
    name: pvc-volume              # 卷名字
......

示例: 挂载 configMapconfigMap 创建

......
spec:
  volumes:                        # 定义卷
  - configMap:                    # 定 pvc 卷类型
      name: configmap-name        # 指定要使用的 pvc 名字
    name: configmap               # 卷名字
......

相关文章

网友评论

      本文标题:Kubernetes YAMl 详解之 POD (POD、Con

      本文链接:https://www.haomeiwen.com/subject/jspmkdtx.html