如何在 20 天后自动自毁 Kubernetes Pod?

Lui*_*ado 5 demo kubernetes rancher kubernetes-pod

我需要设置一个 kubernetes pod 来为我的 Web 应用程序的客户端创建演示环境,试用期为 20 天。20天后,pod应该会自动删除,如何让pod在20天后自毁?我使用 Rancher 来部署我的 Pod。

Har*_*var 4

您可以使用两种方式实现此目的,编写自己的代码并在 K8s 上运行以检查状态,这将在 20 天后删除部署 (POD)

参考github: https: //github.com/dignajar/clean-pods

您的 Pod 无法自动删除。

您可以以20的间隔运行cronjob,这将删除特定的部署,但在这种情况下,您必须传递部署或 pod名称,以便 cronjob 具有该变量。

示例:1

使用delete_namespaced_pod

    from kubernetes import client, config
    from kubernetes.client.rest import ApiException
    config.load_incluster_config() # if running inside k8s cluster config.load_kube_config()
    
    configuration = client.Configuration()
    
    with client.ApiClient(configuration) as api_client:
        api_instance = client.CoreV1Api(api_client)
        
        namespace = '<Namespace name>'
        name = '<POD name>'  
api_instance.list_namespaced_pod(namespace)
        
        try:
            api_response = api_instance.delete_namespaced_pod(name, namespace)
            print(api_response)
        except ApiException as e:
            print("Exception when calling CoreV1Api->delete_namespaced_pod: %s\n" % e) 
Run Code Online (Sandbox Code Playgroud)

示例:2

定时任务

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cleanup
spec:
  schedule: "30 1 1,20 * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: kubectl-container
            image: bitnami/kubectl:latest
            command: ["sh", "-c", "kubectl delete pod <POD name or add variable here>"]
          restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

额外的

您还可以编写shell 脚本每天运行几个命令来检查PODAGE,如果等于20天则删除

kubectl get pods --field-selector=status.phase=Pending --sort-by=.metadata.creationTimestamp | awk 'match($5,/[20-9]d|[0-9][0-9]d|[0-9][0-9][0-9]d/) {print $0}'
Run Code Online (Sandbox Code Playgroud)

更新

如果您遇到任何禁止错误,请创建服务帐户并将其与 cronjob 一起使用

apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa-name
  namespace: default

---
 
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: sa-role
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["list", "delete"]

---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: sa-rolebinding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: sa-role
subjects:
- kind: ServiceAccount
  name: sa-name
  namespace: default

---

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: jobs
spec:
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: sa-role
Run Code Online (Sandbox Code Playgroud)