Trong Kubernetes, đối tượng Deployment là đối tượng chính đảm nhận việc deploy và quản lý ứng dụng của chúng ta. Nó cho phép chúng ta deploy các Pod, update Pod, rollback Pod và các ReplicaSet. Cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Điều đầu tiên, để tạo mới đối tượng Deployment, chúng ta cần định nghĩa thông tin cho nó sử dụng tập tin YAML.
Các bạn có thể định nghĩa thông tin của một Deployment sử dụng tập tin YAML có nội dung cơ bản như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apiVersion: apps/v1 kind: Deployment metadata: name: <name> spec: replicas: <replicas-number> selector: matchLabels: <label> template: metadata: labels: <label> spec: containers: - name: <container_name> image: <container_image> - name: <container_name> image: <container_image> |
Trong đó:
- <name> là tên của Deployment
- <replicas-number> là số lượng Pod mà chúng ta muốn Deployment đảm bảo.
- <label> định nghĩa label cho Pod, các bạn có thể định nghĩa label theo ý của mình.
- <container_name> là tên của container trong Pod sau khi khởi tạo
- <container_image> là tên của Image được sử dụng để tạo container.
Chúng ta định nghĩa tên của Deployment sử dụng field metadata.name.
Để định nghĩa số lượng replicas, số lượng Pod mà Deployment này quản lý, chúng ta sẽ sử dụng field spec.replicas.
Field spec.selector dùng để định nghĩa cách mà Deployment tìm các Pod cần quản lý. Ở đây, chúng ta đang sử dụng thuộc tính matchLabels để làm điều này. Bất kỳ Pod nào có label định nghĩa là “<label>” sẽ được Deployment select và quản lý. Chúng ta còn có thể sử dụng thuộc tính matchExpressions để làm điều này.
Field spec.template dùng để định nghĩa thông tin về Pod mà chúng ta muốn chạy. Các bạn có thể sử dụng thuộc tính metadata.labels trong field spec.template này để gán nhãn cho Pod.
Chúng ta sử dụng thuộc tính spec.containers để định nghĩa tất cả các container mà Pod sẽ có. Mỗi container sẽ có ít nhất là tên container và Image được sử dụng để tạo container.
Ví dụ bây giờ mình cần chạy một Deployment để deploy ứng dụng node-hello từ image “gcr.io/google–samples/node–hello:1.0″, mình có thể định nghĩa nội dung tập tin YAML với nội dung như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: apps/v1 kind: Deployment metadata: name: node-hello spec: replicas: 1 selector: matchLabels: app: node-hello template: metadata: labels: app: node-hello spec: containers: - name: node-hello image: gcr.io/google-samples/node-hello:1.0 |
Chạy command “apply” với tập tin cấu hình này:
1 |
kubectl apply -f k8s.yaml |
các bạn sẽ thấy kết quả như sau:
Các bạn có thể kiểm tra tất cả các Deployment có trong Kubernetes cluster sử dụng câu lệnh:
1 |
kubectl get deployments |
Kết quả của mình như sau:
Kiểm tra Pod, các bạn sẽ thấy kết quả như sau:
Về mặt tổng quan thì Deployment sẽ quản lý các ReplicaSet và các ReplicaSet sẽ quản lý các Pods để chạy các ứng dụng. Deployment sẽ tạo ra các ReplicaSet để đảm bảo số lượng Pod cho ứng dụng của chúng ta.
Khi ứng dụng của chúng ta được deploy với đối tượng Deployment, nó chỉ có thể access bên trong cluster.
Nên muốn kiểm tra xem kết quả của việc deploy này, các bạn cần phải login vào một trong các Pod đã được deploy ứng dụng. Ví dụ như, để kiểm tra kết quả của ví dụ trên, đầu tiên mình cần phải biết Container ID của Pod với câu lệnh:
1 |
docker ps -a |
sau đó thì truy cập vào Container này để kiểm tra kết quả:
1 |
docker exec -it <container-id> /bin/bash |
Như các bạn thấy, ứng dụng ví dụ của mình đã được deploy ở port 8080 và kết quả khi access tới ứng dụng này là “Hello Kubernetes!”.
Để xoá một Deployment, các bạn có thể sử dụng câu lệnh:
1 |
kubectl delete deployment <deloyment-name> |
Ví dụ mình có thể xoá Deployment node-hello của mình như sau:
1 |
kubectl delete deployment node-hello |
Kết quả: