Kubernetes删除Pod作业

时间:2018-10-11 15:21:28

标签: kubernetes kubernetes-helm

我想知道在Kubernetes中是否有可能每小时运行一次并删除某些吊舱的工作。我暂时需要这个 缩小差距以解决问题。

3 个答案:

答案 0 :(得分:1)

是的,有可能。

我认为最简单的方法是直接从作业中调用Kubernernes API。考虑到已配置RBAC,如下所示:

apiVersion: batch/v1
kind: Job
metadata:
  name: cleanup
spec:
  serviceAccountName: service-account-that-has-access-to-api
  template:
    spec:
      containers:
      - name: cleanup
        image: image-that-has-curl
        command:
        - curl
        - -ik 
        - -X
        - DELETE
        - -H
        - "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
        - https://kubernetes.default.svc.cluster.local/api/v1/namespaces/{namespace}/pods/{name}
      restartPolicy: Never
  backoffLimit: 4

您还可以运行kubectl代理sidecar以使用localhost连接到集群。更多信息here

或者甚至在容器中运行普通kubectl也是一种选择:Kubernetes - How to run kubectl commands inside a container?

答案 1 :(得分:0)

每小时使用CronJob(12)运行作业。

可以使用适当的权限从Pod(3)访问

K8S API。创建Pod时,默认情况下会为其分配一个default ServiceAccount4)。 default ServiceAccount没有RoleBinding,因此default ServiceAccount以及Pod也没有调用API的权限。

如果创建了一个角色(具有权限)并将其映射到default ServiceAccount,则默认情况下,所有Pod都将获得这些权限。因此,最好创建一个新的ServiceAccount而不是修改default ServiceAccount

因此,这是RBAC(5)的步骤

  • 创建一个ServiceAccount
  • 创建具有适当权限的角色(删除窗格)
  • 使用RoleBinding使用角色映射ServiceAccount
  • 在Pod定义中使用以上ServiceAccount
  • 使用代码/命令创建容器/容器以删除容器

我知道这有点令人困惑,但这就是K8S的工作方式。

答案 2 :(得分:-2)

可能还有另一种解决方法。

您可以创建一个liveness probe(如果还没有,则非常简单),直到一个小时后才能运行,并且始终会失败。

livenessProbe:
  tcpSocket:
    port: 1234
  initialDelaySeconds: 3600

这将等待3600秒(1小时),然后尝试连接到端口1234,如果失败,它将杀死容器(不是吊舱!)。