Cách tạo StatefulSet trong Kubernetes

theanh

Administrator
Nhân viên
StatefulSets chứa một tập hợp các Pod với các danh tính duy nhất, cố định và tên máy chủ ổn định. Một mẫu pod được sử dụng trong Statefulset, chứa thông số kỹ thuật cho các pod của nó, các pod được tạo bằng thông số kỹ thuật này. Chúng ta có thể triển khai các ứng dụng có trạng thái và các ứng dụng cụm bằng Statefulsets trong Kubernetes. StatefulSet có thể được cập nhật bằng cách thực hiện các thay đổi đối với thông số kỹ thuật Pod của nó, bao gồm các hình ảnh và khối lượng chứa của nó.

StatefulSet có thể được sử dụng khi các ứng dụng yêu cầu bất kỳ thuộc tính nào sau đây.
  • Định danh mạng duy nhất, ổn định.
  • Lưu trữ ổn định, liên tục.
  • Triển khai và mở rộng theo thứ tự, uyển chuyển.
  • Cập nhật lăn tự động, có thứ tự.
Đối với StatefulSet có N bản sao, khi các Pod đang được triển khai, chúng được tạo tuần tự, theo thứ tự từ {0..N-1}. Khi Pod đang bị xóa, chúng sẽ bị chấm dứt theo thứ tự ngược lại, từ {N-1..0}.

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

Trong bài viết này, chúng ta sẽ tạo một Statefulset với các bản sao của pod Nginx. Chúng ta sẽ thực hiện các thao tác trên Pod để xem cách chúng bị xóa và được tạo ra.

Đ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 18l04 EC2 Instances.

Những gì chúng ta sẽ làm​

  1. Tạo một Statefulset

Tạo một Statefulset​

Tạo một tệp và thêm định nghĩa Statefulset sau vào đó.

vim statefulset.yml
Mã:
apiVersion: v1kind: Servicemetadata: name: nginx labels: app: nginxspec: ports: - port: 80 name: web clusterIP: None selector: app: nginx---apiVersion: apps/v1kind: StatefulSetmetadata: name: webspec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 template: metadata: labels: app: nginx spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: k8s.gcr.io/nginx-slim:0.8 ports: - containerPort: 80 name: web


Trong ví dụ này,
  • Một Dịch vụ không có giao diện, có tên là nginx, được sử dụng để kiểm soát mạng.
  • StatefulSet, có tên là web, có 3 bản sao của container nginx sẽ được khởi chạy trong các Pod duy nhất.
  • Nginx Image với phiên bản slim:0.8 được sử dụng để triển khai Nginx.


Để tạo một Statefulset, hãy thực hiện các lệnh sau.

kubectl get statefulset

kubectl create -f statefulset.yml



Thực hiện 2 lệnh sau để liệt kê Statefulset và Dịch vụ được tạo ở bước trên.

kubectl get statefulset

kubectl get service



Lấy các pod bằng lệnh sau và xem các Pod có số là Hậu tố trong tên Pod.

kubectl get pods





Để có được thông tin chi tiết đầy đủ về Statefulset, hãy thực hiện các lệnh sau.

kubectl get statefulset

kubectl describe statefulset web



Bây giờ, hãy xóa các pod và xem tên được bảo toàn như thế nào ngay cả sau khi các pod mới được tạo.

Chúng tôi đang xóa 2 pod để xem tên nào sẽ được gán cho các pod mới khi tạo.

kubectl get pods

kubectl delete pods web-0 web-2

kubectl get pods





Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng, ngay cả sau khi xóa các pod, các pod mới tạo vẫn có cùng tên.

Kết luận​

Trong bài viết này, chúng tôi đã tạo một Statefulset và thực hiện các thao tác trên đó để kiểm tra thông tin chi tiết của nó. Chúng tôi cũng đã xóa các pod để xem tên của pod được bảo toàn như thế nào và tên đó được gán cho các pod mới tạo sau khi xóa nó.
 
Back
Bên trên