青铜至王者之 K8s Pods(下)

了解多容器 Pod

通常使用 pod 的单个容器,因为它们更容易构建和维护,尽管在某些情况下您可能希望在 Pod 中运行多个容器

使用多容器 Pod 时,容器通常通过共享存储共享数据。

了解 Sidecar 容器

这里我有一个用于创建多容器 sidecar pod 的示例 YAML 文件:

[root@controller ~]# cat create-sidecar.yml
kind: Pod
apiVersion: v1
metadata:
  name: sidecar-pod
spec:
  volumes:
  - name: logs
    emptyDir: {}

  containers:
  - name: app
    image: busybox
    command: ["/bin/sh"]
    args: ["-c", "while true; do date >> /var/log/date.txt; sleep 10; done"]
    volumeMounts:
    - name: logs
      mountPath: /var/log

  - name: sidecar
    image: centos/httpd
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs
      mountPath: /var/www/html

创建Sidecar 容器

[root@controller ~]# kubectl create -f create-sidecar.yml
pod/sidecar-pod created

验证状态,创建两个容器时需要一些时间:

[root@controller ~]# kubectl get pods
NAME          READY   STATUS              RESTARTS   AGE
nginx         1/1     Running             0          55m
sidecar-pod   0/2     ContainerCreating   0          25s

重新检查一段时间,Pod 应该处于运行状态:

[root@controller ~]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP          NODE                   NOMINATED NODE   READINESS GATES
nginx         1/1     Running   0          67m   10.36.0.4   worker-1.example.com              
sidecar-pod   2/2     Running   0          12m   10.44.0.1   worker-2.example.com              

以下命令连接到此 pod:

[root@controller ~]# kubectl exec -it sidecar-pod -c sidecar -- /bin/bash
[root@sidecar-pod /]#

现在,我们可以使用在循环中每 10 秒检查一次附加命令输出的内容:curl date.txt date

[root@sidecar-pod ~]# curl http://localhost/date.txt
Fri Nov 27 05:43:00 UTC 2020
Fri Nov 27 05:43:10 UTC 2020
Fri Nov 27 05:43:20 UTC 2020
Fri Nov 27 05:43:30 UTC 2020
Fri Nov 27 05:43:40 UTC 2020
Fri Nov 27 05:43:50 UTC 2020
Fri Nov 27 05:44:00 UTC 2020
Fri Nov 27 05:44:11 UTC 2020
Fri Nov 27 05:44:21 UTC 2020

查看Pods

检查和分析 pod 的不同命令,例如,目前我有我们在上一个示例中创建的 sidecar pod:

[root@controller ~]# kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
sidecar-pod   2/2     Running   0          111s

为了获取这个pod的更多详细信息,我们将使用命令,如你所见,它为我们提供了关于这个pod的一系列信息:kubectl describe pods

~]# kubectl describe pods sidecar-pod
Name:         sidecar-pod
Namespace:    default
Priority:     0
Node:         worker-1.example.com/192.168.43.49
Start Time:   Sat, 28 Nov 2020 00:10:56 +0530
Labels:       
Annotations:  
Status:       Running
IP:           10.36.0.1
IPs:
  IP:  10.36.0.1
Containers:
 
...

下一个命令可用于从 pod 获取 STDOUT 和 STDERR 消息,为了证明这一点,我创建了另一个 pod,它将每 5 秒在控制台上写入日期输出:sleepy

[root@controller ~]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP          NODE                   NOMINATED NODE   READINESS GATES
sidecar-pod   2/2     Running   0          15m   10.36.0.1   worker-1.example.com                            
sleepy        1/1     Running   0          12s   10.44.0.1   worker-2.example.com              

检查 Pod 中的日志

[root@controller ~]# kubectl logs sleepy
Fri Nov 27 18:56:32 UTC 2020
Fri Nov 27 18:56:37 UTC 2020
Fri Nov 27 18:56:42 UTC 2020

要连接到 Pod 内的容器:

kubectl exec -it  -c  -- 

例如,sidecar要连接到容器sidecar-pod

[root@controller ~]# kubectl exec -it sidecar-pod -c sidecar -- /bin/bash
[root@sidecar-pod /]#

您可以输入,然后按 ENTER 从容器脚本中退出来。exit

删除容器

kubectl delete pod 

因此,要删除我们的nginx pod,我们将使用:

[root@controller ~]# kubectl delete pod nginx
pod "nginx" deleted

在Job中运行 pod 实例

了解不同的可用作业类型

可以通过指定完成和并行参数来创建 3 种不同的作业类型:

非并行工作(Non-parallel Jobs):启动一个Pod,除非Pod失败

completions=1
parallelism=1

具有固定完成计数的并行作业:作业在成功运行 jobs.spec.completions 中指定的次数后完成

completions=n
parallelism=m

具有工作队列的并行作业:启动多个作业,当一个作业成功完成时,作业完成

completions=1
parallelism=n

按顺序运行作业 pod

如果您需要一个 Job 运行多次,您可以将完成次数设置为您希望 Job 的 pod 运行的次数。对于此演示,我们需要创建一个Job让我们检查所需的apiVersion.

apiVersion所以Job KIND 的要求是batch/v1

[root@controller ~]# kubectl explain Job
KIND:     Job
VERSION:  batch/v1

下面是一个示例 YAML 文件:

[root@controller ~]# cat pod-simple-job.yml
apiVersion: batch/v1
kind: Job
metadata:
  name: pod-simple-job
spec:
  completions: 3
  template:
    spec:
      containers:
      - name: sleepy
        image: alpine
        command: ["/bin/sleep"]
        args: ["5"]
      restartPolicy: Never

在这里,我们定义了 completion: 3,因此我们希望作业的 pod 按顺序运行 3 次。

[root@controller ~]# kubectl create -f pod-simple-job.yml
job.batch/pod-simple-job created

检查可用 Pod 的列表:

[root@controller ~]# kubectl get pods
NAME                            READY   STATUS              RESTARTS   AGE
nginx                           1/1     Running             0          47m
pod-simple-job-52vr7            0/1     ContainerCreating   0          3s

一个新的 Pod 启动,根据我们 YAML 文件中的描述创建容器。一旦我们在这个容器中执行的命令完成,另一个 Pod 应该会自动启动,因为希望按顺序发生:

[root@controller ~]# kubectl get pods
NAME                            READY   STATUS              RESTARTS   AGE
nginx                           1/1     Running             0          48m
pod-simple-job-52vr7            0/1     Completed           0          13s
pod-simple-job-bhrf5            0/1     ContainerCreating   0          2s

一旦第一个 Pod 状态完成,另一个 Pod 就会启动。您可以使用以下方法检查作业的状态:

[root@controller ~]# kubectl get jobs
NAME             COMPLETIONS   DURATION   AGE
pod-simple-job   1/3           16s        16s

完成所有作业后:

[root@controller ~]# kubectl get jobs
NAME             COMPLETIONS   DURATION   AGE
pod-simple-job   3/3           36s        3m36s

删除作业

当 Job 完成时,不会再创建 Pod,但也不会删除 Pod。保留它们允许您仍然查看已完成的 pod 的日志以检查错误、警告或其他诊断输出。作业对象在完成后也会保留,以便您可以查看其状态。在注意到旧作业的状态后,由用户删除旧作业。

[root@controller ~]# kubectl delete jobs pod-simple-job
job.batch "pod-simple-job" deleted

终止作业的另一种方法是设置有效截止日期。通过将 .spec.activeDeadlineSeconds 作业的字段设置为秒数来执行此操作。适用 activeDeadlineSeconds 于作业的持续时间,无论创建了多少个 Pod。一旦 Job 到达 activeDeadlineSeconds,它所有正在运行的 Pod 都会终止,并且 Job 状态将变为 type: Failed with reason: DeadlineExceeded

自动清理完成的作业

系统中通常不再需要已完成的作业。将它们保留在系统中会给 API 服务器带来压力。如果 Jobs 直接由更高级别的控制器管理,例如 CronJobs,则 Jobs 可以根据指定的基于容量的清理策略由 CronJobs 清理

欢迎各位小伙伴关注、点赞、评论、转发,你的关注和转发是我最大的动力!

展开阅读全文

页面更新:2024-04-14

标签:目的   作业   示例   青铜   容器   王者   顺序   命令   次数   状态   文件   日志

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top