Việc làm tại Kubernetes

theanh

Administrator
Nhân viên
Một công việc tạo ra một hoặc nhiều Pod để thực hiện một hoạt động cụ thể và đảm bảo các pod kết thúc thành công. Khi một số lượng pod được chỉ định hoàn thành thành công, công việc được coi là hoàn tất. Khi một công việc bị xóa, nó sẽ xóa các Pod mà nó đã tạo. Một công việc cũng có thể được sử dụng để chạy nhiều Pod song song.

Để biết thêm về Kubernetes Jobs, hãy nhấp vào đây.

Trong bài viết này, chúng ta sẽ xem cách triển khai một công việc đơn giản, một công việc có giới hạn thời gian và một cronjob.

Điều kiện tiên quyết​

  1. Cụm Kubernetes có ít nhất 1 nút worker.
    Nếu bạn muốn tìm hiểu cách tạo Cụm Kubernetes, hãy nhấp vàođây. Hướng dẫn này sẽ giúp bạn tạo cụm Kubernetes với 1 Master và 2 Node trên AWS Ubuntu 18.04 EC2 Instances.

Chúng ta sẽ làm gì?​

  1. Tạo Jobs

CreateJobs​

Simple Job​

Tạo tệp định nghĩa cổng đa vùng chứa bằng nội dung sau.
Mã:
vim simple-job-1.yml
Mã:
apiVersion: batch/v1kind: Jobmetadata: name: simple-job-1spec: template: spec: containers: - name: job-1 image: busybox args: - /bin/sh - -c - date; echo sleeping....; sleep 30s; echo exiting!; date restartPolicy: Never


Lấy danh sách các pod và công việc hiện có trong Kubernetes Cluster và tạo một công việc bằng các lệnh sau.
Mã:
kubectl get pods
Mã:
kubectl get jobs
Mã:
kubectl create -f simple-job-1.yml


Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng không có pod và công việc trong cụm hiện có và một công việc mới đã được tạo.

Khi bạn tạo một công việc, một pod có tên công việc sẽ được tạo cùng với công việc.

Bạn có thể lấy pod và công việc bằng các lệnh sau.
Mã:
kubectl get pods
Mã:
kubectl get jobs


Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng công việc được hoàn thành sau khi thực thi.

Khi bạn không còn cần công việc của mình nữa, bạn có thể xóa nó bằng lệnh sau.
Mã:
kubectl delete -f simple-job-1.yml
Mã:
kubectl get pods
Mã:
kubectl get jobs

Một công việc có Enforce Time Limit​

Bạn có thể áp dụng giới hạn thời gian trong công việc để đảm bảo rằng công việc phải hoàn tất quá trình thực thi trong thời hạn đã chỉ định.

Tạo tệp định nghĩa công việc có nội dung sau.
Mã:
vim enforce-time-limit-job-2.yml
Mã:
apiVersion: batch/v1kind: Jobmetadata: name: enforce-time-limit-job-2spec: activeDeadlineSeconds: 20 template: spec: containers: - name: job-2 image: busybox args: - /bin/sh - -c - date; echo một số tác vụ phải hoàn thành trong 30 giây....nhưng do activeDeadlineSeconds=5 nên sẽ bị chấm dứt trong vòng 5 giây trước khi hoàn thành; sleep 30 giây; echo thoát!; date 
 restartPolicy: Never


Lấy lại danh sách các pod và công việc trong cụm Kubernetes và tạo một công việc bằng tệp ở trên.
Mã:
kubectl get jobs
Mã:
kubectl get pods
Mã:
kubectl create -f enforce-time-limit-job-2.yml


Sau khi bạn tạo công việc, nếu bạn kiểm tra thông tin chi tiết của công việc, bạn có thể thấy rằng pod được tạo sau khi tạo công việc sẽ kết thúc trước khi hoàn tất, tức là nó không thực thi trong 30 giây và bị chấm dứt

Kiểm tra lý do chấm dứt bằng cách sử dụng lệnh sau
Mã:
kubectl get pods
Mã:
kubectl get jobsenforce-time-limit-job-2 -o yaml


Trong ảnh chụp màn hình ở dòng đầu tiên, bạn có thể thấy rằng chúng tôi đã chỉ định activeDeadlineSeconds=20. Và chúng tôi đã chỉ định sleep=30 seconds. Điều này có nghĩa là pod của chúng tôi phải hoạt động trong 30 giây nhưng nó đã bị chấm dứt trong vòng 20 giây.

Bây giờ để xóa công việc, bạn có thể sử dụng lệnh sau.
Mã:
kubectl delete -f enforce-time-limit-job-2.yml
Mã:
kubectl get jobs

Cronjob​

Để tạo công việc acronjob dưới dạng đối tượng trong Kubernetes, hãy tạo một tệp có nội dung sau. Cronjob này trong Kubernetes giống với Cronjob trong Linux.
Mã:
vim cronjob-3.yml
Mã:
apiVersion: batch/v1beta1kind: CronJobmetadata: name: cronjob-3spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: cronjob-container image: busybox args: - /bin/sh - -c - date; echo sleeping for 5 secs....; sleep 5s; echo exiting...; restartPolicy: Never


Định nghĩa trên cho biết công việc sẽ được tạo sau mỗi 1 phút và sẽ kéo dài trong 5 giây.

Sử dụng các lệnh sau để lấy danh sách các công việc và pod hiện có và tạo acronjob.
Mã:
kubectl get jobs
Mã:
kubectl get pods
Mã:
kubectl create -f cronjob-3.yml


Để xem công việc mới được tạo sau mỗi 1 phút để hoàn thành tác vụ đã xác định, hãy sử dụng lệnh sau.
Mã:
kubectl get jobs -w


Bây giờ bạn có thể kiểm tra nhật ký trong đó bạn có thể quan sát thấy công việc bắt đầu sau mỗi 1 phút.
Mã:
kubectl get pods
Mã:
kubectl logs cronjob-3-1594359720-jfkcl


Trong ảnh chụp màn hình ở trên, bạn có thể thấy nhật ký của các pod khác nhau whichgot created as a part of job after every one minute.

Điều này có nghĩa là job được kích hoạt after every one minute.

Khi bạn không cần job nữa, bạn có thể xóa nó bằng lệnh sau.
Mã:
kubectl delete -f cronjob-3.yml
Mã:
kubectl get pods
Mã:
kubectl get jobs

Kết luận​

Trong bài viết này, chúng ta đã học cách tạo một job đơn giản trong Kubernetes. Chúng ta đã thấy cách chúng ta có thể áp dụng giới hạn thời gian cho job để đảm bảo job không thực thi quá lâu. Cuối cùng, chúng ta đã thấy các bước để tạo một cronjob được tạo riêng để hoàn thành nhiệm vụ tại thời điểm đã chỉ định. Đối tượng Cronjob này trong Kubernetes tương tự như Cronjob job trong Linux.
 
Back
Bên trên