首页 > 解决方案 > Kubernetes 作业每分钟删除一个 pod

问题描述

我想创建一个作业,以每分钟或创建时的任何时间杀死以下 pod。

我的测试吊舱是:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
    containers: 
    -   name: myapp-container
        image: busybox
        command: ['sh', '-c', 'echo Hello && sleep 3600']

有可能这样做吗?

标签: kubernetescronjobsminikube

解决方案


是的,您可以在集群中使用 kubectl 删除 pod。首先,您需要创建一组 RBAC(基于角色的访问控制)对象。这是示例。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: test # this is service account for binding the pod
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: test # This defines a role and what API it can access
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["delete", "get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test # This will bind the role and service account
subjects:
- kind: ServiceAccount
  name: test
roleRef:
  kind: Role 
  name: test 
  apiGroup: rbac.authorization.k8s.io

这些对象将定义适当的 RABC 规则,以便创建的 pod 可以与 Kubernetes 的相应 API 交互。然后,您可以使用这样的 Cronjob 类型定义您的 Job。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: kill-pod
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: test
          containers:
          - name: kill-pod
            image: bitnami/kubectl:latest
            command:
            - kubectl
            args:
            - delete
            - pod
            - sth
          restartPolicy: OnFailure

推荐阅读