Sử dụng Privileged Pod để debug Kubernetes Node – Cuongquach.com | Đôi khi bạn sẽ sử dụng dịch vụ Managed Kubernetes bởi các nhà cung cấp cloud như AKS (Azure), EKS (Amazon), Kubernetes Digital Ocean,.. điểm chung cơ bản là bạn sẽ không được cung cấp cơ chế truy cập vào các Kubernete Node như ssh. Điều này là nhằm giảm các tương tác quản lý cho người vận hành, giúp họ thoải mái tập trung cho việc deployment các service trên nền tảng dịch vụ Cloud Kubernetes Platform. Nhưng sẽ có những lúc chúng ta có nhu cầu :
- Truy cập vào Hệ điều hành Kubernetes Node để debug vài vấn đề liên quan đến Kubernetes Node.
- Hay chúng ta muốn tìm hiểu thử các nhà cung cấp họ đã đang làm gì với Kubernetes Node.
Thế thì bạn có thể sử dụng một Privileged Pod để thực hiện điều đó.
Privileged Pod
Đây là một mẹo thôi và đặt tên Pod cho nó tượng trưng, chứ không có khái niệm cụ thể Privileged Pod. Không khuyến khích hay thường nhìn thấy trong hoạt động quản lý Kubernetes Cluster.
Bạn sẽ tạo một Pod Container và mount toàn bộ root partition của OS Kubernetes Node vào một Volume. Rồi bạn chỉ cần mở shell terminal Pod container và thực hiện chuyển môi trường shell root “chroot” sang phân vùng mount volume OS Kubernetes Node.
Ví dụ:
– Sử dụng object DaemonSet để đảm bảo Pod này luôn được chạy ở các Node.
# vi debug-pod.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: privileged spec: selector: matchLabels: name: privileged-container template: metadata: labels: name: privileged-container spec: containers: - name: busybox image: busybox resources: limits: cpu: 200m memory: 100Mi requests: cpu: 100m memory: 50Mi stdin: true securityContext: privileged: true volumeMounts: - name: host-root-volume mountPath: /host readOnly: true volumes: - name: host-root-volume hostPath: path: / hostNetwork: true hostPID: true restartPolicy: Always # kubectl apply -f debug-pod.yaml
Liệt kê Pod ra nào.
# kubectl get pods -A | grep -i privileged default privileged-wvsw6 1/1 Running 0 11s
Mở shell chroot vào môi trường OS của Kubernetes Node nào.
# kubectl exec -ti privileged-wvsw6 chroot /host
Lúc này bạn đã có thể chạy các lệnh Linux trên Kubernetes Node.
Nguồn: https://cuongquach.com/