我想知道在Kubernetes中是否有可能每小时运行一次并删除某些吊舱的工作。我暂时需要这个 缩小差距以解决问题。
答案 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)
K8S API。创建Pod时,默认情况下会为其分配一个default ServiceAccount
(4)。 default ServiceAccount
没有RoleBinding,因此default ServiceAccount
以及Pod也没有调用API的权限。
如果创建了一个角色(具有权限)并将其映射到default ServiceAccount
,则默认情况下,所有Pod都将获得这些权限。因此,最好创建一个新的ServiceAccount而不是修改default ServiceAccount
。
因此,这是RBAC(5)的步骤
我知道这有点令人困惑,但这就是K8S的工作方式。
答案 2 :(得分:-2)
可能还有另一种解决方法。
您可以创建一个liveness probe(如果还没有,则非常简单),直到一个小时后才能运行,并且始终会失败。
livenessProbe:
tcpSocket:
port: 1234
initialDelaySeconds: 3600
这将等待3600秒(1小时),然后尝试连接到端口1234,如果失败,它将杀死容器(不是吊舱!)。