YAML如何操作Kubernetes核心对象

本文围绕Kubernetes展开,介绍了Minikube环境搭建、基本架构等内容。重点讲解了核心对象Pod,包括其描述与操作;Job/CronJob用于调度离线业务;ConfigMap和Secret分别存储明文与机密配置,并说明了它们以环境变量和Volume方式注入Pod的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Minikube 环境搭建
Kubernetes 的基本架构
Kubernetes 声明式语言 YAML
YAML操作Kubernetes核心对象
CentOs搭建Kubernetes集群
Kubernetes进阶对象Deployment、DaemonSet、Service
Kubernetes进阶对象Ingress、Ingress Class、Ingress Controller
Kubernetes集群部署项目实践
Kubernetes高级对象PersistentVolume、PersistentVolumeClaim、StorageClass
CentOS部署NFS
Kubernetes使用NFS实现数据持久化
Kubernetes高级对象StatefulSet
Kubernetes 应用滚动更新
Kubernetes 容器资源管理Resources和探针Probe
Kubernetes 名称空间Namespace
Kubernetes 系统监控Metrics Server、HorizontalPodAutoscaler、Prometheus
Kubernetes集群持久化部署实践
Kubernetes Dashboard

Pod

Kubernetes 最核心对象Pod

Pod 是对容器的“打包”,里面的容器多个容器)是一个整体,总是能够一起调度、一起运行,绝不会出现分离的情况,而且 Pod 属于 Kubernetes,可以在不触碰下层容器的情况下任意定制修改。

Kubernetes 让 Pod 去编排处理容器,然后把 Pod 作为应用调度部署的最小单位。

以 Pod 为中心的 Kubernetes 资源对象关系图:

在这里插入图片描述

如何使用 YAML 描述 Pod

下面这段 YAML 代码就描述了一个简单的 Pod,名字是“busy-pod”,再附加上一些标签:

apiVersion: v1
kind: Pod
metadata:
  name: busy-pod
  labels:
    owner: chrono
    env: demo
    region: north
    tier: back
spec:
  containers:
  - image: busybox:latest
    name: busy
    imagePullPolicy: IfNotPresent
    env:
      - name: os
        value: "ubuntu"
      - name: debug
        value: "on"
    command:
      - /bin/echo
    args:
      - "$(os), $(debug)"

“containers”是一个数组,里面的每一个元素又是一个 container 对象,也就是容器。

和 Pod 一样,container 对象也必须要有一个 name 表示名字,然后当然还要有一个 image 字段来说明它使用的镜像,这两个字段是必须要有的,否则 Kubernetes 会报告数据验证错误。

container 对象的其他字段

  • ports:列出容器对外暴露的端口,和 Docker 的 -p 参数有点像。
  • imagePullPolicy:指定镜像的拉取策略,可以是
  • Always/Never/IfNotPresent,一般默认是 IfNotPresent,也就是说只有本地不存在才会远程拉取镜像,可以减少网络消耗。
  • env:定义 Pod 的环境变量,和 Dockerfile 里的 ENV 指令有点类似,但它是运行时指定的,更加灵活可配置。
  • command:定义容器启动时要执行的命令,相当于 Dockerfile 里的 ENTRYPOINT 指令。
  • args:它是 command 运行时的参数,相当于 Dockerfile 里的 CMD 指令,这两个命令和 Docker 的含义不同,要特别注意。

如何使用 kubectl 操作 Pod

  • kubectl apply、kubectl delete 这两个命令,它们可以使用 -f 参数指定 YAML 文件创建或者删除 Pod,例如:
kubectl apply -f busy-pod.yml
kubectl delete -f busy-pod.yml
  • 如果在 YAML 里定义了“name”字段,也可以在删除的时候直接指定名字来删除:
kubectl delete pod busy-pod
  • 使用命令 kubectl get pod 可以查看 Pod 列表和运行状态:
kubectl get pod

Kubernetes 的 Pod 不会在前台运行,只能在后台(相当于默认使用了参数 -d),所以输出信息不能直接看到。

  • 可以用命令 kubectl logs,它会把 Pod 的标准输出流信息展示出来,在这里就会显示出预设的两个环境变量的值:
kubectl logs busy-pod

在这里插入图片描述
这个 Pod 运行有点不正常,状态是“CrashLoopBackOff

可以使用命令 kubectl describe 来检查它的详细状态,它在调试排错时很有用:

kubectl describe pod busy-pod

在这里插入图片描述
需要关注的是末尾的“Events”部分,它显示的是 Pod 运行过程中的一些关键节点事件。

对于这个 busy-pod,因为它只执行了一条 echo 命令就退出了,而 Kubernetes 默认会重启 Pod,所以就会进入一个反复停止 - 启动的循环错误状态。因为 Kubernetes 里运行的应用大部分都是不会主动退出的服务,所以我们可以把这个 busy-pod 删掉

在这里插入图片描述

kubectl 也提供与 docker 类似的 cp 和 exec 命令,kubectl cp 可以把本地文件拷贝进 Pod,kubectl exec 是进入 Pod 内部执行 Shell 命令,用法也差不多。

  • 启动一个之前的nginx pod试验一下
#启动nginx pod
kubectl apply -f ngx-pod.yml
#查看状态
kubectl get pod 
#查看日志
kubectl logs
  • 将一个“a.txt”文件,那么就可以使用 kubectl cp 拷贝进 Pod 的“/tmp”目录里
echo 'aaa' > a.txt
kubectl cp a.txt ngx-pod:/tmp

在这里插入图片描述

  • kubectl exec 的命令格式与 Docker 有一点小差异,需要在 Pod 后面加上 --,把 kubectl 的命令与 Shell 命令分隔开,在用的时候需要小心一些:
kubectl exec -it ngx-pod -- sh

在这里插入图片描述

Job/CronJob

为什么要有 Job/CronJob

前面文章中运行了两个 Pod:Nginx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值