【笔记5】yaml基础与pod

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

Pod

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

kubectl api-resources

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

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"

精简后如下,以下文件即可独立启动一个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
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值