k8s 中的 Deployment,DaemonSet,Job

2024-01-08  本文已影响0人  wayyyy

k8s 通常不会直接创建Pod,而是通过 Controller 来管理Pod的,Controller 定义了Pod的部署特性,比如有几个副本,在什么样的Node上运行等。为了满足不同的业务场景,k8s提供了多种Controller ,包括Deployment,DaemonSet,Job 等。

Deployment

配置文件简介
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web_server
  template:
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.0

使用kubectl apply -f nginx.yml 部署完成我们第一个deployment。

# kubectl get deployment 
image.png
伸缩

伸缩指的是在线增加或减少Pod的副本数。


image.png

从上面可以看出,nginx deployment 初始是2个副本,分别被调度到了 viros2 和 viros3 上执行。现在我们将副本数从2改为5。再重新部署,发现新建的副本被部署到了viros1, viros2,viros3。


image.png

如果我们再将副本数改为3,再重新部署,发现有2个副本被删除:


image.png
Failover

我们模拟viros3 故障,关闭该节点。

label 实现控制POD的位置

默认情况下,Scheduler 会将Pod调度到所有可用的Node,


DaemonSet

Deployment 部署的副本Pod 会分布在各个Node上,每个Node可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行一个副本。

DaemonSet 典型应用场景有:

其实k8s 自己就在用 DaemonSet 运行系统组件:


image.png

Job

容器按照持续运行的时间可分为两类:

  1. 服务类容器
    服务类容器通常持续提供服务,需要一直运行,比如HTTP Server,Daemon 等。
  2. 工作类容器
    工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。

定义 job.yml 文件如下:

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: [ "echo", "Hello kids jobs" ]
      restartPolicy: Never

通过kubectl apply -f job.yml,启动:

# kubectl get job
image.png

我们可以通过查看pod的状态和输出来确定我们Job是否已经成功执行:
因为pod已经退出,所以我们需要使用-A 选项查看。

image.png
Job 的并行性
定时Job

Linux 中有cron程序定时执行任务,k8s 中也有 CronJob 提供类似的功能,可以定制执行Job。

定义 cronjob.yml 文件如下:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: mycronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: [ "echo", "Hello kids cronjobs" ]
          restartPolicy: Never

通过 kubectl apply -f cronjob.yml,启动:

# kubectl get cronjob
image.png

可以看到每隔1分钟就会启动一个Job,可以查看相应的Pod输出:


image.png
上一篇下一篇

猜你喜欢

热点阅读