Kubernetes 实战 —— 04. 副本机制和其他控制器:部署托管的 pod (5)

假设有一个名为 ssd-monitor 的守护进程,它需要在包含 SSD 的所有节点上运行。包含 SSD 的节点已被添加了 disk=ssd 标签,所以我们需要创建一个 DaemonSet ,它只在拥有上述标签的节点上运行守护进程。 P109

创建一个 DaemonSet 描述文件 P110

为了模拟 ssd-monitor 的监控程序,我们将使用以下 Dockerfile 创建一个每 5 秒中打印 SSD OK 的镜像。

FROM busybox ENTRYPOINT while true; do echo 'SSD OK'; sleep 5; done

为了将 ssd-monitor 部署到符合要求的每个节点上,我们还需要使用以下 ssd-monitor-daemonset.yaml 描述文件进行部署。

# 遵循 apps/v1 版本的 Kubernetes API apiVersion: apps/v1 # 资源类型为 DaemonSet kind: DaemonSet metadata: # DaemonSet 的名称 name: ssd-monitor spec: # 指定 DaemonSet 操作对象 selector: # 需要匹配以下指定的标签 matchLabels: app: ssd-monitor # 启动 pod 使用的模版 template: metadata: # 指定标签为 app=ssd-monitor labels: app: ssd-monitor spec: # 指定选择具有 disk=ssd 标签的节点部署 nodeSelector: disk: ssd containers: # 容器的名称 - name: main # 创建容器所使用的镜像 image: idealism/ssd-monitor

实践 P110

kubectl create -f ssd-monitor-daemonset.yaml: 按照指定的描述文件创建一个 DaemonSet

kubectl get daemonsets: 可以发现所有的值都是 0 ,因为目前还没有节点拥有 disk=ssd 标签

kubectl get pods: 可以发现目前还没有 pod

kubectl label node minikube-m03 disk=ssd: 给节点 minikube-m03 打上标签 disk=ssd

kubectl get pods: 可以发现刚刚启动了一个 podNAME READY STATUS RESTARTS AGE ssd-monitor-bbqbp 0/1 ContainerCreating 0 2s

kubectl label node minikube-m03 disk=hdd --overwrite: 将节点 minikube-m03 的标签 disk=ssd 修改为 disk=hdd

kubectl get pods: 可以发现刚刚启动的 pod 正在终止NAME READY STATUS RESTARTS AGE ssd-monitor-bbqbp 1/1 Terminating 0 2m37s

运行执行单个任务的 pod P112 介绍 Job 资源 P112

Kubernetes 通过 Job 资源支持运行一种 pod ,该 pod 子啊内部进程成功结束时,不重启容器。一旦任务完成, pod 就被认为处于完成状态。 P112

在节点发生故障时,该节点上由 Job 管理的 pod 将被重新安排到其他节点。如果进程本身异常退出(进程返回错误退出码时),可以将 Job 配置为重新启动容器。 P112

定义 Job 资源 P113

为了模拟耗时的任务,我们将使用以下 Dockerfile 创建一个调用 sleep 120 命令的镜像。

FROM busybox ENTRYPOINT echo "$(date) Batch job starting"; sleep 120; echo "$(date) Finished succesfully"

为了管理部署 batch-job ,我们还需要使用以下 batch-job.yaml 描述文件进行部署。

# 遵循 batch/v1 版本的 Kubernetes API apiVersion: batch/v1 # 资源类型为 Job kind: Job metadata: # Job 的名称 name: batch-job spec: # 启动 pod 使用的模版 template: metadata: # 指定标签为 app=batch-job labels: app: batch-job spec: # Job 不能使用 Always 为默认的重启策略 restartPolicy: OnFailure containers: # 容器的名称 - name: main # 创建容器所使用的镜像 image: idealism/batch-job

设置 Job 的重启策略为 OnFailure 或 Never 可以防止容器在完成任务时重新启动。 P114

Job 运行一个 pod P114

kubectl create -f batch-job.yaml: 根据描述文件创建指定的 Job

kubectl get jobs: 查看 job ,可以发现刚刚创建的 JobNAME COMPLETIONS DURATION AGE batch-job 0/1 5s 5s

kubectl get pods: 查看 pod ,可以发现 Job 创建的 pod 正在运行NAME READY STATUS RESTARTS AGE batch-job-d59js 1/1 Running 0 10s

kubectl get pods: 等两分钟后再查看 pod ,可以发现 Job 创建的 pod 状态已经变为 Completed ,即任务已经完成。 pod 未被删除,所以我们可以查看 pod 的日志NAME READY STATUS RESTARTS AGE batch-job-d59js 0/1 Completed 0 2m56s

kubectl logs pod batch-job-d59js: 查看 pod 的日志Sun Jun 7 22:36:04 UTC 2020 Batch job starting Sun Jun 7 22:38:04 UTC 2020 Finished succesfully

kubectl get jobs: 再次查看 job ,可以发现需要运行的 1 个 pod 已经完成NAME COMPLETIONS DURATION AGE batch-job 1/1 2m45s 6m25s

在 Job 中运行多个 pod 实例 P114

在 Job 配置中设置 spec.completions 和 spec.parallelism 可以让 Job 创建多个 pod 实例,并允许以并行的方式运行它们。 P114

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdjsy.html