- vừa được xem lúc

Kubernetes - deployment.yaml explained

0 0 76

Người đăng: ledangtuanbk

Theo Viblo Asia

Trong bài trước, mình có giới thiệu chạy các câu lệnh K8S bằng Command Line Để tạo 1 deloyment đơn giản chỉ cần chạy lệnh

kubectl create deployment hello-app --image=nginx:latest

Trong câu lệnh trên đã lược bỏ hầu như hết các thuộc tính không bắt buộc, nó chạy được, nhưng muốn mở rộng thì khó hơn nhiều. Khi đó phải truyền thêm các điều kiện vào command line khiến nó rất rồi mắt.

Chính vì vậy deployment sinh ra để giải quyết vấn đề này, nó cũng giống như việc chạy Docker trên command line và sử dụng docker-compose vậy.

1. K8S deployment là gì

Theo định nghĩa nó là 1 Object để quản lý resource của K8S giúp khai báo và update thông tin cho ứng dụng: Image sử dụng để chạy, số lượng Pods ... Và giúp việc cập nhật ứng dụng nhanh chóng và hiệu quả hơn.

A Kubernetes deployment is a resource object in Kubernetes that provides declarative updates to applications. A deployment allows you to describe an application’s life cycle, such as which images to use for the app, the number of pods there should be, and the way in which they should be updated. 

2. Ưu điểm của deployment

  • Giảm thiểu nhàm chán khi phải updating 1 ứng dụng một cách thủ công (stop ứng dụng cũ, chạy câu lệnh chạy ứng dụng với version mới, chờ và kiểm tra version mới chạy thành công, hay rollback nếu có lỗi ...).
  • Thao tác thủ công dễ dấn đến nhầm lẫn khi số lượng pod nhiều.

Tóm lại K8S deployment object giúp bạn làm những việc sau:

  • Deploy cho replica set hay pod
  • Update replica sets hay pods
  • Rollback vesion cũ nếu có lỗi
  • Scale deployment
  • Dừng chạy hay tiếp tục 1 deployment

3. Những thuộc tính quan trọng của deployment

apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1
kind: Deployment
metadata: name: deployment-name
spec: selector: matchLabels: app: app-labels tier: frontend replicas: 2 template: metadata: labels: app: app-labels tier: frontend spec: containers: - name: nginx image: nginx:latest resources: requests: cpu: 100m memory: 100Mi env: - name: GET_HOSTS_FROM value: dns ports: - containerPort: 80 

File deployment được lưu dưới định dạng *.yaml

  • kind: Vì mình đang tạo deployment nên giá trị là Deployment
  • metadata.name: Tên của deployment dùng để tương tác với deployment. ví dụ khi delete deployment.
kubectl delete deployment deployment-name
  • spec.replicas: Số lượng replicated pods. trong ví dụ này mình tạo ra 2 replicated pods.

  • .spec.selector: Định nghĩa cash Deployment tìm Pods để quản lý (scale up, scale down, delete ...) trong trường hơp này giá trị nó bằng giá trị trong spec.template.metadata. Có 2 cặp {key, value} dùng để lựa chọn (app:app-labels) và (tier: frontend).

  • template: Chứa thông tin của container sẽ chạy trên pod. template.metadata.labels giúp deployment match với pod để quản lý các thông số còn lại tương tự như thông tin của container. name: Tên của container. image: Image của container resources: maximum resource cho mỗi container .....

4. Ví dụ thực tế

Tạo 1 file test-deployment.yaml

apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1
kind: Deployment
metadata: name: deployment-name
spec: selector: matchLabels: app: app-labels tier: frontend replicas: 2 template: metadata: labels: app: app-labels tier: frontend spec: containers: - name: nginx image: nginx:latest resources: requests: cpu: 100m memory: 100Mi env: - name: GET_HOSTS_FROM value: dns ports: - containerPort: 80

Chạy deployment

kubectl apply -f test-deployment.yaml

kết quả

deployment.apps/deployment-name created

Kiểm tra thông tin Deployment mới tạo

kubectl get deployments

->

NAME READY UP-TO-DATE AVAILABLE AGE
deployment-name 1/1 1 1 84s

Ở bài viết tiếp theo mình sẽ giải thích thi tiết về service trong k8s, tác dụng của nó và cách publish ra bên ngoài.

5. Tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 80

- vừa được xem lúc

Thực hành K8S trên Google Cloud

Kubernetes (K8S) trở nên quá phổ biến ở thời điểm hiện tại, ai cũng nói về nó. Trong bài hôm nay mình sẽ không đi quá nhiều vào các định nghĩa, mà đi thẳng vào thực tế để mọi người dễ hình dung.

0 0 19

- vừa được xem lúc

Kubernetes best practices - Liveness và Readiness Health checks

Mở đầu. Kubernetes cung cấp cho bạn một framework để chạy các hệ phân tán một cách mạnh mẽ.

0 0 35

- vừa được xem lúc

Tìm hiểu cơ bản về Kubernetes - K8s (Part 2): Minikube

Lời mở đầu. .

0 0 35

- vừa được xem lúc

ETCD - Bộ não của Kubernetes và cách cài đặt cụm ETCD Cluster (High Availability)

Hello anh em, sau vài ngày nghiên cứu đọc lại liệu cũng như cài cắm thủ công đủ thể loại, với vô số lỗi fail thì mình cũng cài đặt thành công cụm etcd cluster một cách thủ công. Trước giờ chuyên tạo c

0 0 31

- vừa được xem lúc

HPA là gì? Auto scaling pod bằng HPA và KEDA

Auto Scaling Pod là gì. Auto Scaling để làm gì.

0 0 43