Nhãn không gì khác ngoài cặp khóa-giá trị được gán cho các Đối tượng Kubernetes như Pod, Dịch vụ, v.v. Nhãn có thể được sử dụng để sắp xếp và chọn các đối tượng Kubernetes. Nhãn có thể được đính kèm vào các đối tượng tại thời điểm tạo và có thể được sửa đổi bất kỳ lúc nào. Chúng ta có thể thêm nhiều Nhãn vào các đối tượng Kubernetes.
Người dùng sử dụng các bộ chọn để chọn một tập hợp các đối tượng. Bộ chọn nhãn là nguyên thủy nhóm cốt lõi trong Kubernetes. API Kubernetes hỗ trợ hai loại bộ chọn
Trong bài viết này, chúng ta sẽ tạo một Pod có Nhãn và chuyển hướng các yêu cầu từ dịch vụ đến Pod bằng Selector. Chúng ta cũng sẽ thực hiện các thao tác get, delete trên Pod và Service bằng Label/Selectors trên dòng lệnh.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22416%22%3E%3C/svg%3E
Để tạo một dịch vụ có bộ chọn, hãy tạo một tệp có định nghĩa dịch vụ sau sử dụng mặc định không gian tên.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22574%22%3E%3C/svg%3E
Để tạo một Pod, hãy thực hiện lệnh sau lệnh.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22181%22%3E%3C/svg%3E
Để tạo một Dịch vụ, hãy thực hiện lệnh sau lệnh.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22160%22%3E%3C/svg%3E
Bây giờ, để kiểm tra xem Bộ chọn nhãn có hoạt động không, hãy thử truy cập dịch vụ trênNodeIP:NodePort.
Ở đây, Ip của Node của tôi là 106.210.138.189 và dịch vụ được hiển thị trên Port=30385.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22129%22%3E%3C/svg%3E
Vì chúng ta có thể truy cập Nginx Pod bằng Dịch vụ chúng ta đã tạo, điều đó có nghĩa là Nhãn và Bộ chọn đã hoạt động.
Để có được các Pod khớp với nhãn chúng ta chọn, chúng ta có thể "--selector" trong lệnh như theo sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22166%22%3E%3C/svg%3E
Chúng ta cũng có thể sử dụng "-l" thay vì "--selector" để có được các Pod khớp với nhãn của chúng ta lựa chọn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Chúng ta thậm chí có thể thực hiện thao tác xóa pod bằng cách chỉ định nhãn. Các pod khớp với nhãn có thể bị xóa bằng các lệnh sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22248%22%3E%3C/svg%3E
Cách chúng ta có thể xóa các Pod khớp với nhãn, chúng ta cũng có thể xóa dịch vụ.
Để xóa dịch vụ khớp với nhãn, hãy sử dụng lệnh sau. Ngoài ra, nếu không có dịch vụ nào khớp với nhãn được chỉ định trong lệnh, sẽ không có thao tác xóa nào được thực hiện đã thực hiện.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Người dùng sử dụng các bộ chọn để chọn một tập hợp các đối tượng. Bộ chọn nhãn là nguyên thủy nhóm cốt lõi trong Kubernetes. API Kubernetes hỗ trợ hai loại bộ chọn
- Bộ chọn dựa trên sự bình đẳng:
Điều này cho phép lọc theo khóa và giá trị, trong đó các đối tượng khớp phải thỏa mãn tất cả các nhãn đã chỉ định. - Bộ chọn dựa trên tập hợp:
Điều này cho phép lọc các khóa theo một tập hợp các giá trị.
Trong bài viết này, chúng ta sẽ tạo một Pod có Nhãn và chuyển hướng các yêu cầu từ dịch vụ đến Pod bằng Selector. Chúng ta cũng sẽ thực hiện các thao tác get, delete trên Pod và Service bằng Label/Selectors trên dòng lệnh.
Điều kiện tiên quyết
- Kubernetes Cluster với ít nhất 1 worker node.
Nếu bạn muốn tìm hiểu cách tạo Kubernetes Cluster, 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
- Tạo Pod và Dịch vụ với Nhãn và Bộ chọn
- Hiểu về Nhãn
Tạo Pod và Dịch vụ với Nhãn và Bộ chọn
Để tạo Pod với nhãn, hãy tạo tệp mới và thêm nội dung sau vào nó.
Mã:
vim my-lable-demo-pod.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name: label-demo-pod labels: environment: test app: nginx
spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22416%22%3E%3C/svg%3E
Để tạo một dịch vụ có bộ chọn, hãy tạo một tệp có định nghĩa dịch vụ sau sử dụng mặc định không gian tên.
Mã:
vim my-selector-demo-service.yml
Mã:
apiVersion: v1
kind: Service
metadata: name: selector-demo-service namespace: default labels:
environment: test app: nginx
spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22574%22%3E%3C/svg%3E
Để tạo một Pod, hãy thực hiện lệnh sau lệnh.
Mã:
kubectl create -f my-lable-demo-pod.yml
Mã:
kubectl get pods
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22181%22%3E%3C/svg%3E
Để tạo một Dịch vụ, hãy thực hiện lệnh sau lệnh.
Mã:
kubectl create -f my-selector-demo-service.yml
Mã:
kubectl get service
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22160%22%3E%3C/svg%3E
Bây giờ, để kiểm tra xem Bộ chọn nhãn có hoạt động không, hãy thử truy cập dịch vụ trênNodeIP:NodePort.
Ở đây, Ip của Node của tôi là 106.210.138.189 và dịch vụ được hiển thị trên Port=30385.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22129%22%3E%3C/svg%3E
Vì chúng ta có thể truy cập Nginx Pod bằng Dịch vụ chúng ta đã tạo, điều đó có nghĩa là Nhãn và Bộ chọn đã hoạt động.
Hiểu Nhãn
Bây giờ, chúng ta có thể thực hiện nhiều thao tác khác nhau trên Pod và Dịch vụ chúng ta đã tạo bằng Nhãn.Để có được các Pod khớp với nhãn chúng ta chọn, chúng ta có thể "--selector" trong lệnh như theo sau.
Mã:
kubectl get pods --selector environment=test
Mã:
kubectl get pods --selector app=nginx
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22166%22%3E%3C/svg%3E
Chúng ta cũng có thể sử dụng "-l" thay vì "--selector" để có được các Pod khớp với nhãn của chúng ta lựa chọn.
Mã:
kubectl get pods -l environment=test
Mã:
kubectl get pods -l environment=prod
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Chúng ta thậm chí có thể thực hiện thao tác xóa pod bằng cách chỉ định nhãn. Các pod khớp với nhãn có thể bị xóa bằng các lệnh sau.
Mã:
kubectl get pods
Mã:
kubectl delete pods -l environment=test
Mã:
kubectl get pods
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22248%22%3E%3C/svg%3E
Cách chúng ta có thể xóa các Pod khớp với nhãn, chúng ta cũng có thể xóa dịch vụ.
Để xóa dịch vụ khớp với nhãn, hãy sử dụng lệnh sau. Ngoài ra, nếu không có dịch vụ nào khớp với nhãn được chỉ định trong lệnh, sẽ không có thao tác xóa nào được thực hiện đã thực hiện.
Mã:
kubectl get service
Mã:
kubectl delete service -l environment=test
Mã:
kubectl get service
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E