Khi một Pod trong hệ thống Kubernetes gặp vấn đề gì đó, nó không thể tự khắc phục, điều này sẽ làm cho ứng dụng của chúng ta không ổn định nếu phải gặp bất cứ vấn đề gì với Pod. Để giải quyết vấn đề này, chúng ta cần sử dụng ReplicaSet để đảm bảo rằng số lượng Pod cần thiết cho ứng dụng của chúng ta chạy luôn ở trạng thái ổn định. Có nghĩa là, nếu một Pod gặp vấn đề, ReplicaSet sẽ tạo mới lại Pod đó cho chúng ta. 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é!
Ví dụ bây giờ, mình cần đảm bảo Kubernetes luôn luôn có 2 Pods để chạy ứng dụng huongdanjava của mình thì mình sẽ định nghĩa tập tin spec của ReplicaSet 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: ReplicaSet metadata: name: frontend labels: app: huongdanjava spec: replicas: 2 selector: matchLabels: purpose: blog template: metadata: labels: purpose: blog spec: containers: - name: node-hello image: gcr.io/google-samples/node-hello:1.0 |
Trong định nghĩa spec trên thì “kind: ReplicaSet” là tên đối tượng Kubernetes mà chúng ta cần tạo với name và các Label được gán cho đối tượng ReplicaSet này được định nghĩa trong phần metadata. Phần chính trong định nghĩa đối tượng ReplicaSet nằm trong phần spec với định nghĩa số lượng Pod mà chúng ta cần, sử dụng Pod với Label như thế nào và thông tin các Pod sẽ được sử dụng nằm trong phần template.
Sau khi đã định nghĩa xong ReplicaSet, các bạn có thể sử dụng command “apply” để submit ReplicaSet này cho Kubernetes như sau:
1 |
kubectl apply -f huongdanjava.yaml |
Kết quả:
Kiểm tra ReplicaSet có trong Kubernetes:
1 |
kubectl get rs |
các bạn sẽ thấy kết quả như sau:
Kiểm tra thông tin của ReplicaSet:
1 |
kubectl describe rs/frontend |
Kiểm tra số lượng Pod đang có:
1 |
kubectl get pods |
các bạn sẽ thấy kết quả như sau:
Như các bạn có thể thấy, 2 Pod được duy trì để đảm bảo định nghĩa của ReplicaSet.
Nếu bây giờ mình xoá Pod 1 trong 2 pod frontend đi:
1 |
kubectl delete pods frontend-9pq2l |
rồi kiểm tra Pod, các bạn sẽ thấy kết quả một Pod frontend được tạo lại như sau:
Để xoá một ReplicaSet, các bạn có thể sử dụng command sau:
1 |
kubectl delete rs/frontend |
Kết quả của mình như sau: