当前位置:   article > 正文

【笔记5】yaml基础与pod_default.yaml 示例

default.yaml 示例

yaml

1、什么是yaml

yaml语言创建于2001年,支持整数、浮点数、布尔、字符串、数组和对象等数据类型。
在K8S中,yaml与json同时用于对资源的定义,与json相比,yaml的语法更加简洁,主要语法如下:

  • 使用空格缩进表示层次,同一层级空格数一致
  • 使用 “#” 书写注释
  • 数组是使用“-” 开头的清单形式
  • 对象的格式与json基本相同,但key不需要使用双引号
  • 表示对象的”:“和表示数组的”-“ 后面必须要有空格
  • 可以使用 ”—“ 在一个文件中分隔多个yaml内容

2、yaml示例

以下是使用yaml定义一个Deployment资源

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busy-box
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busy-box
  template:
    metadata:
      labels:
        app: busy-box
    spec:
      containers:
      - name: busy-box
        image: busybox
        command:
        - /bin/sh
        - -c
        - sleep 3000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

Pod

K8S中存在多个资源对象,可以使用以下命令查看

kubectl api-resources
  • 1

pod是K8S中的最小管理单元,其本身是一组容器的集合,一组容器在pod内共享网络、存储等资源。
每一个pod在启动前会创建一个根容器,叫pause容器,主要作用是为了在业务容器启动前创建共享名称空间以及分配资源,并负责管理pod内其他容器的生命周期。

  • 网络名称空间共享
  • pid名称空间共享(需要特殊配置)
  • 生命周期管理
  • 保持pod状态

pod的生命周期包括以下几个阶段:

  • Pending:表示pod已经被创建,但暂时未进行调度
  • Running:表示pod正在运行,注意此状态不代表容器正常
  • Succeeded:表示pod中的容器都已成功终止,并且不会再重启
  • Failed:表示pod中的容器非正常退出
  • Unknown:表示K8S无法判断pod状态
  • ContainerCreating:表示正在创建容器
  • Terminating:表示容器正在终止
  • Terminated:表示容器已经终止
  • Waiting:表示容器处于等待状态
  • Completed:表示pod已执行完某项工作并正常退出

可以使用以下命令创建一个pod:

kubectl run pod-demo --image=nginx
  • 1

pod定义文件由五个部分组成,分别是:

  • apiVersion:定义调用的api接口以及版本信息
  • kind:定义资源类型
  • metadata:定义资源的元数据信息
  • spec:定义容器相关配置信息
  • status:运行后的状态信息(K8S自动生成,不需要手动定义)
    以下是导出的正在运行的pod资源文件内容
apiVersion: v1										# 接口版本
kind: Pod											# 资源名称
metadata:											# 元数据信息
  annotations:										# 注释信息
    cni.projectcalico.org/podIP: 10.64.104.50/32	# 网络插件自动补充注释,部分网络插件可以通过修改注释的方式调整功能
    cni.projectcalico.org/podIPs: 10.64.104.50/32	# 网络插件自动补充注释,部分网络插件可以通过修改注释的方式调整功能
    ovn.kubernetes.io/logical_router: ovn-cluster	# 网络插件自动补充注释,部分网络插件可以通过修改注释的方式调整功能
    ovn.kubernetes.io/pod_nic_type: veth-pair		# 网络插件自动补充注释,部分网络插件可以通过修改注释的方式调整功能
  creationTimestamp: "2023-11-20T09:49:09Z"
  generateName: busybox-5f98dbbb9b-					# 可选参数,用于自动生成唯一名称
  labels:											# 资源标签,用于与其他资源进行关联
    app: busybox
    pod-template-hash: 5f98dbbb9b
  name: busybox-5f98dbbb9b-7bvct					# 资源名称
  namespace: default								# 资源所属名称空间
  ownerReferences:									# 表示此资源是由其他资源自动生成,以下是属主的信息(系统自动生成)
 - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet								# 属主资源名
    name: busybox-5f98dbbb9b						# 属主名
    uid: 5cd1df23-687e-4bba-9c7f-6ac1601f1e3b		# 唯一id(系统自动生成)
  resourceVersion: "505879"							# 资源版本(系统自动生成)
  uid: f42ae3e3-9455-4257-8f95-4c3f9e4b84bd			# 唯一id(系统自动生成)
spec:												# 定义容器模板
  containers:										# 定义容器模板
 - args:											# 命令参数
    - /bin/sh
    - -c
    - sleep 10; touch /tmp/healthy; sleep 30000
    image: busybox									# 镜像地址
    imagePullPolicy: Always							# 重启策略
    name: busybox									# 容器名称
    readinessProbe:									# 定义就绪探针
      exec:
        command:
        - cat
        - /tmp/healthy
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 5
      successThreshold: 1
      timeoutSeconds: 1
    resources: {}									# 定义资源分配
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:									# 定义文件挂载
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-772v6
      readOnly: true
  dnsPolicy: ClusterFirst							# 定义dns策略
  enableServiceLinks: true
  nodeName: node2									# 定义运行在哪个主机
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always								# 定义重启策略
  schedulerName: default-scheduler
  securityContext: {}								# 定义安全上下文
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30					# 容器停止宽限期
  tolerations:										
 - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
 - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:											# 数据卷信息
 - name: kube-api-access-772v6
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace
status:												# 当前运行状态
  conditions:
 - lastProbeTime: null
    lastTransitionTime: "2023-11-20T09:51:16Z"
    status: "True"
    type: Initialized
 - lastProbeTime: null
    lastTransitionTime: "2023-12-04T13:15:32Z"
    status: "True"
    type: Ready
 - lastProbeTime: null
    lastTransitionTime: "2023-12-04T13:15:32Z"
    status: "True"
    type: ContainersReady
 - lastProbeTime: null
    lastTransitionTime: "2023-11-20T09:51:16Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
 - containerID: containerd://29103e04c2a6cb8e545e12eeabc4dd7bdf17904c4f3d1775af5e4b5e8bde6ebb
    image: docker.io/library/busybox:latest
    imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
    lastState:
      terminated:
        containerID: containerd://72c879dd6772addbe07e61b3ce388294ad7611a81058b86e38a974a7f51f4e5b
        exitCode: 255
        finishedAt: "2023-12-04T13:14:58Z"
        reason: Unknown
        startedAt: "2023-12-01T06:10:19Z"
    name: busybox
    ready: true
    restartCount: 9
    started: true
    state:
      running:
        startedAt: "2023-12-04T13:15:21Z"
  hostIP: 192.168.129.130
  phase: Running
  podIP: 10.64.104.50
  podIPs:
 - ip: 10.64.104.50
  qosClass: BestEffort
  startTime: "2023-11-20T09:51:16Z"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132

精简后如下,以下文件即可独立启动一个pod

apiVersion: v1										# 接口版本
kind: Pod											# 资源名称
metadata:											# 元数据信息
  labels:											# 资源标签,用于与其他资源进行关联
    app: busybox
  name: busybox-5f98dbbb9b-7bvct					# 资源名称
  namespace: default								# 资源所属名称空间
spec:												# 定义容器模板
  containers:										# 定义容器模板
 - args:											# 命令参数
    - /bin/sh
    - -c
    - sleep 10; touch /tmp/healthy; sleep 30000
    image: busybox									# 镜像地址
    imagePullPolicy: Always							# 重启策略
    name: busybox									# 容器名称
    readinessProbe:									# 定义就绪探针
      exec:
        command:
        - cat
        - /tmp/healthy
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 5
      successThreshold: 1
      timeoutSeconds: 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/613978
推荐阅读
相关标签
  

闽ICP备14008679号