Pod thường có một container duy nhất, tức là pod container đơn là trường hợp sử dụng phổ biến nhất và không nhất thiết phải có một container duy nhất trong pod. Có một số trường hợp sử dụng khi một pod đơn có thể có nhiều container bên trong. Pod đa container là pod chứa hai hoặc nhiều container có liên quan chia sẻ tài nguyên như không gian mạng, ổ đĩa được chia sẻ, v.v. và hoạt động cùng nhau như một đơn vị duy nhất.
Một trong những lý do để sử dụng pod đa container là giao tiếp giữa các container đơn giản hơn. Tất cả các container bên trong pod chia sẻ cùng một không gian mạng để giao tiếp thông qua localhost. Một lý do khác để sử dụng pod đa container là tất cả các container đều có cùng vòng đời, chạy trên cùng một nút. Khi cần gắn tất cả các container cùng một ổ đĩa để chúng có thể giao tiếp với nhau bằng cách đọc và sửa đổi các tệp trong ổ đĩa lưu trữ, có thể sử dụng nhiều pod container.
Trong bài viết này, chúng ta sẽ tạo một pod có 2 container bên trong. Ví dụ này sẽ giúp bạn hiểu cách tạo một pod có nhiều container.
Tệp này có định nghĩa cho 2 container sẽ chia sẻ cùng một mạng, tài nguyên, ổ đĩa.
Lấy danh sách các cổng hiện có và tạo một cổng đa container bằng các lệnh sau.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có 2/2 pod có trạng thái READY. Điều này có nghĩa là có 2 pod và trong số 2 pod đó, 2 pod đang chạy.
Lấy danh sách các pod và mô tả pod mà chúng ta vừa tạo.
Khi bạn mô tả pod, bạn sẽ nhận được thông tin chi tiết về cả hai container bên trong pod đó.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có hai container là container-1 và container-2. Cả hai container này đều thuộc cùng một pod.
Bây giờ để kiểm tra nhật ký của một container cụ thể, bạn có thể thêm tên container vào lệnh mà chúng ta sử dụng để lấy nhật ký của pod.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng nếu tên container không được cung cấp cho lệnh thì bạn sẽ nhận được lỗi yêu cầu chỉ định tên container trong lệnh.
Bạn có thể chỉ định tên của một container duy nhất chứ không thể chỉ định nhiều container trong lệnh để lấy nhật ký.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng khi chỉ định 2 container để lấy nhật ký, lệnh sẽ không thành công.
Lệnh đơn giản để đăng nhập vào pod không hoạt động khi có nhiều container bên trong một pod duy nhất.
Để đăng nhập vào container cụ thể, chúng ta cần chỉ định tên container trong lệnh. Ngoài ra, bạn không thể đăng nhập vào 2 pod cùng lúc.
Khi bạn không cần dùng nữa Bạn có thể xóa nó bằng lệnh sau.
Một trong những lý do để sử dụng pod đa container là giao tiếp giữa các container đơn giản hơn. Tất cả các container bên trong pod chia sẻ cùng một không gian mạng để giao tiếp thông qua localhost. Một lý do khác để sử dụng pod đa container là tất cả các container đều có cùng vòng đời, chạy trên cùng một nút. Khi cần gắn tất cả các container cùng một ổ đĩa để chúng có thể giao tiếp với nhau bằng cách đọc và sửa đổi các tệp trong ổ đĩa lưu trữ, có thể sử dụng nhiều pod container.
Trong bài viết này, chúng ta sẽ tạo một pod có 2 container bên trong. Ví dụ này sẽ giúp bạn hiểu cách tạo một pod có nhiều container.
Điều kiện tiên quyết
- 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 18.04 EC2 Instances.
Chúng ta sẽ làm gì?
- Tạo Pod đa container
Tạo Pod đa container
Tạo tệp định nghĩa cổng đa container bằng nội dung sau.
Mã:
vim multi-container-pod-example.yml
Mã:
apiVersion: v1kind: Podmetadata: name: multi-container-podspec: containers: - name: container-1 image: nginx ports: - containerPort: 80
- name: container-2 image: alpine command: ["watch", "wget", "-qO-", "localhost"]
Tệp này có định nghĩa cho 2 container sẽ chia sẻ cùng một mạng, tài nguyên, ổ đĩa.
Lấy danh sách các cổng hiện có và tạo một cổng đa container bằng các lệnh sau.
Mã:
kubectl get pods #Lấy danh sách các pod hiện có
Mã:
kubectl create -f multi-container-pod-example.yml #Tạo một pod đa container
Mã:
kubectl get pods #Kiểm tra các pod sau khi tạo ở bước trên
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có 2/2 pod có trạng thái READY. Điều này có nghĩa là có 2 pod và trong số 2 pod đó, 2 pod đang chạy.
Lấy danh sách các pod và mô tả pod mà chúng ta vừa tạo.
Mã:
kubectl get pods
Mã:
kubectl describe pod multi-container-pod #Lấy thông tin chi tiết về Pod.
Khi bạn mô tả pod, bạn sẽ nhận được thông tin chi tiết về cả hai container bên trong pod đó.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có hai container là container-1 và container-2. Cả hai container này đều thuộc cùng một pod.
Bây giờ để kiểm tra nhật ký của một container cụ thể, bạn có thể thêm tên container vào lệnh mà chúng ta sử dụng để lấy nhật ký của pod.
Mã:
kubectl get pods
Mã:
kubectl logs multi-container-pod #Điều này không có tác dụng
Mã:
kubectl logs multi-container-pod container-1 #Chỉ định tên container để lấy nhật ký
Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng nếu tên container không được cung cấp cho lệnh thì bạn sẽ nhận được lỗi yêu cầu chỉ định tên container trong lệnh.
Bạn có thể chỉ định tên của một container duy nhất chứ không thể chỉ định nhiều container trong lệnh để lấy nhật ký.
Mã:
kubectl get pods
Mã:
kubectl logs multi-container-pod #
Mã:
kubectl logs multi-container-pod container-1 container-2 #Không thể chỉ định hai container
Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng khi chỉ định 2 container để lấy nhật ký, lệnh sẽ không thành công.
Lệnh đơn giản để đăng nhập vào pod không hoạt động khi có nhiều container bên trong một pod duy nhất.
Mã:
kubectl get pods
Mã:
kubectl exec -it multi-container-pod /bin/bash
Để đăng nhập vào container cụ thể, chúng ta cần chỉ định tên container trong lệnh. Ngoài ra, bạn không thể đăng nhập vào 2 pod cùng lúc.
Mã:
kubectl get pods
Mã:
kubectl exec -it multi-container-pod -c container-1 /bin/bash #Đăng nhập vào container
Khi bạn không cần dùng nữa Bạn có thể xóa nó bằng lệnh sau.
Mã:
kubectl get pod
Mã:
kubectl delete pod multi-container-pod #Xóa pod