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