เป็นไปได้ไหมที่จะเรียกใช้งาน Kubernetes อีกครั้ง


35

ฉันมีการกำหนดค่างาน 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ทำงานและสร้างพ็อดแล้ว Docker container จะทำงานจนเสร็จและได้รับสถานะนี้:

$ 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แต่ฉันสงสัยว่าฉันสามารถปลุกงานที่มีอยู่แล้วซ้ำอีกครั้งได้หรือไม่?

คำตอบ:


22

ไม่แน่นอนไม่มีวิธีในการรับหน้าที่ผู้ได้รับรางวัล คุณต้องลบมันก่อน


23

คุณสามารถจำลองการรันซ้ำโดยแทนที่งานด้วยตัวเอง:

  • 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 -

1
ขอแนะนำอย่างยิ่งให้บันทึกสำเนาของงาน json ไว้ในไฟล์ก่อน kubectl replaceลบงานก่อนที่จะพบข้อผิดพลาดในการสร้างใหม่
Jeremy Huiskamp

บันทึก json ก่อนแล้วจึงสร้างขึ้นใหม่ !!
deepdive

14

คุณสามารถหลีกเลี่ยงข้อผิดพลาดที่คุณกล่าวถึงโดยการระบุ

metadata: generateName: dbload

แทนที่จะเป็นเพียง name

ในกรณีที่คุณส่งงานกับแฟ้ม yaml dbloada1b2cนี้แต่ละคนจะมีชื่อไม่ซ้ำกันที่จะมีลักษณะบางอย่างเช่น จากนั้นคุณสามารถตัดสินใจได้ว่าคุณจะต้องลบงานเก่าหรือไม่ แต่คุณไม่จำเป็นต้องทำ


ฉันเชื่อว่า generateName จะใช้กับ kind = pod และไม่ทำงานเท่านั้น
user518066

2
ไม่มีมันเป็นส่วนหนึ่งของมาตรฐาน ObjectMeta และนำไปใช้ทั้งฝักและงานของ: อ้างอิง k8s ฉันใช้มันตลอดเวลามันเป็นหัวใจหลักของสิ่งที่ฉันทำ
vp124

1
ขอบคุณมากสำหรับการหลบครั้งนี้ สำหรับเอกสารประกอบสิ่งนี้ใช้ได้กับkubectl create
Ohmen เท่านั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.