Replication Controller giúp duy trì một số lượng bản sao của pod trong k8s. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Replication Controller là gì, cách hoạt động. Bắt đầu thôi
Xem thêm:
Containerd là gì ? So sánh Docker và Containerd
Container runtime là gì ? 2 loại phổ biến
1. Replication Controller là gì?
Replication Controller là một resource có trách nhiệm tạo và quản lý các pod. Số lượng các pod bằng với số lượng ta chỉ định ở replicas và quản lý các pod thông qua labels của pod.
Nói cách khác, Kubernetes Replication Controller là cấu trúc cho phép chúng ta tạo nhiều pod, và đảm bảo rằng luôn có một pod khả dụng. Nếu một pod gặp sự cố, Replication Controller sẽ thay thế pod đó bằng một pod mới. Replication Controller cung cấp các lợi ích khác như khả năng mở rộng số lượng pod và cập nhật hoặc xóa nhiều nhóm bằng một lệnh duy nhất.
apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 3 template: metadata: name: nginx labels: app: nginx spec: containers: name: nginx image: nginx ports: containerPort: 80
1.1 Tại sao cần Replication Controller?
– Vấn đề:
- Giả sử có một pod đang chạy ứng dụng.
- Nếu ứng dụng gặp lỗi, người dùng sẽ không thể truy cập được.
– Giải pháp:
Sử dụng Replication Controller để chạy nhiều phiên bản ứng dụng cùng lúc.
Replication Controller sẽ giám sát các pod và sẽ tự động tạo ra pod mới khi phát hiện một pod bị lỗi, đảm bảo ứng dụng luôn sẵn sàng.
– Ví dụ:
Bạn có một website với một pod duy nhất để xử lý yêu cầu từ người dùng. Nếu bạn sử dụng Replication Controller với 3 bản sao (replicas=3), bạn sẽ có 3 pod chạy ứng dụng, giúp tăng khả năng xử lý gấp 3 lần. Nếu replicas = 1, Replication Controller sẽ tạo 1 pod và giám sát nó. Khi một pod gặp sự cố, Replication Controller sẽ tạo 1 pod khác để đạt lại số lượng 1.
controlplane ~ ➜ kubectl get pods NAME READY STATUS RESTARTS AGE new-replica-set-bsc9j 0/1 ImagePullBackOff 0 4m7s new-replica-set-kq2sr 0/1 ImagePullBackOff 0 4m7s new-replica-set-hx77w 0/1 ImagePullBackOff 0 4m7s new-replica-set-qtzvd 0/1 ImagePullBackOff 0 4m7s controlplane ~ ➜ kubectl delete pod new-replica-set-bsc9j pod "new-replica-set-bsc9j" deleted controlplane ~ ➜ kubectl get pods NAME READY STATUS RESTARTS AGE new-replica-set-kq2sr 0/1 ImagePullBackOff 0 4m42s new-replica-set-hx77w 0/1 ImagePullBackOff 0 4m42s new-replica-set-qtzvd 0/1 ImagePullBackOff 0 4m42s new-replica-set-f97ff 0/1 ImagePullBackOff 0 17s
1.2 Lợi ích của Replication Controller
- Tính sẵn sàng: Luôn có ít nhất một phiên bản của ứng dụng hoạt động.
- Cân bằng tải: Phân phối tải lượng công việc lên nhiều container, giúp tăng hiệu suất xử lý.
- Mở rộng quy mô: Dễ dàng tăng số lượng container khi nhu cầu sử dụng tăng lên.
Replication Controller là một công cụ quan trọng trong Kubernetes, giúp đảm bảo tính sẵn sàng, cân bằng tải và mở rộng quy mô cho các ứng dụng.
2. ReplicaSet là gì
ReplicaSet là một resource tương tự Replication Controller nhưng nó là một phiên bản mới hơn và được sử dụng để thay thế Replication Controller. Chúng ta sẽ dùng ReplicaSets để deploy pod thay vì dùng Replication Controller.
ReplicaSet và Replication Controller hoạt động tương tự nhau. Nhưng ReplicaSet linh hoạt hơn ở phần label selector, trong khi label selector của Replication Controller chỉ có thể chọn pod hoàn toàn giống với label nó chỉ định, thì ReplicaSet sẽ cho phép dùng một số expressions hoặc matching để chọn pod nó quản lý.
Ví dụ, Replication Controller không thể nào match với pod mà có env=production và env=testing cùng lúc được, trong khi thằng Replication Controller có thể, bằng cách chỉ định label selector như env=* . Ngoài ra, ta có thể dùng operators với thuộc tính matchExpressions như sau:
selector: matchExpressions: - key: app operator: In values: - kubia
apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchExpressions: {key: app, operator: In, value: [nginx, fronted]} {key: environment, operator: Notin, value: [production]} template: metadata: name: nginx labels: app: nginx environment: dev spec: containers: name: nginx image: nginx ports: containerPort: 80
3. So sánh Replication Controller và ReplicaSet
Replication Controller | ReplicaSet |
Replication Controller là hình thức nhân bản ban đầu trong Kubernetes | ReplicaSets cao cấp hơn cung cấp khả năng dễ dàng chạy nhiều phiên bản của một pod nhất định |
Sử dụng equality-based selector để quản lý các pod | Sử dụng set-based selectors |
Rolling-update hoạt động với Replication Controller | Rolling-update không hoạt động với ReplicaSet |
Không còn được hỗ trợ | Khuyến khích sử dụng |
apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 3 selector: app: nginx |
apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: #<-- This was added tier: nginx |
4. Các thao tác với ReplicaSet
– Liệt kê các ReplicaSet trong hệ thống:
controlplane ~ ➜ kubectl get replicaset NAME DESIRED CURRENT READY AGE new-replica-set 4 4 0 13s
– Xem thông tin ReplicaSet:
controlplane ~ ✖ kubectl describe replicaset Name: new-replica-set Namespace: default Selector: name=busybox-pod Labels: <none> Annotations: <none> Replicas: 4 current / 4 desired Pods Status: 0 Running / 4 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: name=busybox-pod Containers: busybox-container: Image: busybox777 Port: <none> Host Port: <none> Command: sh -c echo Hello Kubernetes! && sleep 3600 Environment: <none> Mounts: <none> Volumes: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 105s replicaset-controller Created pod: new-replica-set-qtzvd Normal SuccessfulCreate 105s replicaset-controller Created pod: new-replica-set-kq2sr Normal SuccessfulCreate 105s replicaset-controller Created pod: new-replica-set-hx77w Normal SuccessfulCreate 105s replicaset-controller Created pod: new-replica-set-bsc9j
– Xóa một ReplicaSet:
controlplane ~ ✖ kubectl delete replicaset replicaset-1 replicaset.apps "replicaset-1" deleted
– Chỉnh sửa một ReplicaSet:
controlplane ~ ➜ kubectl edit replicaset new-replica-set replicaset.apps/new-replica-set edited
– Scale ReplicaSet lên 5:
controlplane ~ ➜ kubectl scale replicaset new-replica-set --replicas=5 replicaset.apps/new-replica-set scaled
Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về Replication Controller và tầm quan trọng của nó trong quản lý container. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.