kubernetes 작업을 다시 실행할 수 있습니까? – name:

다음 Kubernetes 작업 구성이 있습니다.

---
apiVersion: batch/v1
kind: Job
metadata:
  name: dbload
  creationTimestamp:
spec:
  template:
    metadata:
      name: dbload
    spec:
      containers:
      - name: dbload
        image: sdvl3prox001:7001/pbench/tdload
        command: ["/opt/pbench/loadTpcdsData.sh",  "qas0063", "dbc", "dbc", "1"]
      restartPolicy: Never
      imagePullSecrets:
        - name: pbenchregkey
status: {}

내가 할 때 kubectl create -f dbload-deployment.yml --record작업과 포드를 완료 도커 컨테이너 실행을 만들고 나는이 상태를 얻을 수 있습니다 :

$ kubectl get job dbload
NAME      DESIRED   SUCCESSFUL   AGE
dbload    1         1            1h
$ kubectl get pods -a
NAME           READY     STATUS      RESTARTS   AGE
dbload-0mk0d   0/1       Completed   0          1h

이 작업은 일회성 계약이므로 다시 실행할 수 있어야합니다. kubectl create명령 으로 다시 실행 하려고 하면이 오류가 발생합니다.

$ kubectl create -f dbload-deployment.yml --record
Error from server: error when creating "dbload-deployment.yml": jobs.batch "dbload" already exists

물론 내가 할 수있는 중 kubectl delete job dbload다음 실행 kubectl create하지만 어떻게 든 것을 이미 존재하는 작업을-각성을 다시 할 수 있는지 궁금하네요?



답변

아니요. kubernetes 작업을 다시 실행할 수있는 방법은 없습니다. 먼저 삭제해야합니다.


답변

작업을 자체로 교체하여 재실행을 시뮬레이션 할 수 있습니다.

  • kubectl get job "your-job" -o json | kubectl replace --force -f -

자동 생성 된 레이블 또는 선택기로 인해 오류가 발생하면 jq를 사용하여 해당 레이블 또는 선택기를 삭제하거나 편집 할 수 있습니다.

  • kubectl get job "your-job" -o json | jq 'del(.spec.selector)' | jq 'del(.spec.template.metadata.labels)' | kubectl replace --force -f -

답변

다음을 지정하여 언급 한 오류를 피할 수도 있습니다

metadata:
generateName: dbload

단순히 대신 name

이 경우이 yaml 파일로 제출 한 각 작업의 이름은 다음과 같습니다 dbloada1b2c. 그럼 당신은 당신이 이전 작업을 삭제해야할지 여부를 결정할 수 있습니다,하지만 당신은하지 않습니다 그것을 할 수 있습니다.


답변