Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes删除pod作业_Kubernetes_Kubernetes Helm - Fatal编程技术网

Kubernetes删除pod作业

Kubernetes删除pod作业,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我想知道是否有可能在Kubernetes中有一个每小时运行一次的作业,并删除某些播客。我暂时需要这个 临时解决问题。使用CronJob(,)每小时运行一次作业 K8S API可以通过Pod()以适当的权限访问。创建Pod时,默认情况下会为其分配一个默认ServiceAccount。默认ServiceAccount没有角色绑定,因此默认ServiceAccount和Pod没有调用API的权限 如果创建了一个角色(具有权限)并将其映射到默认ServiceAccount,则默认情况下,所有POD都将获

我想知道是否有可能在Kubernetes中有一个每小时运行一次的作业,并删除某些播客。我暂时需要这个 临时解决问题。

使用CronJob(,)每小时运行一次作业

K8S API可以通过Pod()以适当的权限访问。创建Pod时,默认情况下会为其分配一个
默认ServiceAccount
默认ServiceAccount
没有角色绑定,因此
默认ServiceAccount
和Pod没有调用API的权限

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

下面是RBAC()的步骤

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

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

可能还有另一种解决方法

您可以创建一个直到一小时后才运行且总是失败的(如果您还没有的话,则非常简单)

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

是的,这是可能的

我认为最简单的方法就是直接从作业中调用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
您还可以使用
localhost
运行kubectl代理侧车来连接集群。更多信息


甚至在pod中运行普通的
kubectl
也是一个选项:

如果命令返回非零值,kubelet将终止容器并重新启动它。--所以,我们回到原点。是的,当一个吊舱被删除时,这就是应该发生的事情。或者它不是复制集/部署的一部分?但是pod可以使用,或者pod中的应用程序也可以同时使用?web应用程序服务流量OP是关于Pod删除的。但是在这个解决方案中它不会被删除。@user1555190,不会。一旦它被删除,它将从任何包装它的服务中删除。一旦容器重新启动,它将在服务中可用。如果目的是使pod不可用,则此操作将不起作用。如果目的是让应用程序重新启动,那么这将非常有效。为什么不在k8s之外运行一个cron来
每小时删除某些pod
。这容易多了?