(Bài tiếp) K9S

Cài đặt DashBoard trên hệ thống đầy đủ

Kubernetes Dashboard là công cụ trên nền Web, kết nối đến Kubernetes để thực hiện việc quản lý (giống kubectl), ưu điểm của nó là trực quan dễ sử dụng. Thông tin chính về nó tại dashboard, các phiên bản Dashboard Release

Cài đặt Kubernetes Dashboard trên Cluster

Để triển khai Kubernetes trước tiên lấy file cấu hình bản phù hợp về tại Dashboard Release, giả sử chọn v2.0.0-beta6 thì file cấu hình triển khai là:

https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml

Tải file này về lưu thành tên dashboard-v2-beta6.yaml

curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml > dashboard-v2-beta6.yaml

Mở file đó ra chỉnh các nội dung sau:

Nhiều phần trong quá trình chỉnh sửa như các khái niệm Pod, Service ... bạn có thể vẫn chưa hiểu ở giai đoạn này nhưng hãy cố thực hiện đúng - những khái niệm đó sẽ là nội dung chính của Kubernetes tìm hiều sau!

Thiết lập cho truy cập Dashboard qua địa chỉ IP các Node

Mặc định dịch vụ này không truy cập trực tiếp qua IP máy mà phải qua proxy, mở file dashboard-v2-beta6.yaml, tìm đến phần kind: Service bên trong có tên name: kubernetes-dashboard sửa thành:

---

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  # Đổi kiểu sang NodePort
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      # Chọn cổng truy cập qua Node là 3100
      nodePort: 31000
  selector:
    k8s-app: kubernetes-dashboard

---

Do cấu hình mặc định của Kubernetes Cluster, cổng được mở ra ngoài phải chọn trong khoảng 30000-32767 sau này bạn có thể sửa cấu hình này với tham số chạy Cluster --service-node-portrange

Xóa Secret có tên kubernetes-dashboard-certs

Đoạn cấu hình này để khởi tạo Secret cấu hình xác thực SSL khi truy cập Dashboard, ta xóa nó đi bằng cách comment như sau:

# ---

# apiVersion: v1
# kind: Secret
# metadata:
#   labels:
#     k8s-app: kubernetes-dashboard
#   name: kubernetes-dashboard-certs
#   namespace: kubernetes-dashboard
# type: Opaque

Sau này sẽ tạo thủ công Secret có tên kubernetes-dashboard-certs thủ công từ certificates sinh ra từ OpenSSL.

Triển khai dashboard-v2-beta6.yaml

Bây giờ ta sẽ triển khai các thành phần định nghĩa, cấu hình trong dashboard-v2-beta6.yaml, bạn thực hiện lệnh:

kubectl apply -f dashboard-v2-beta6.yaml
kubernetes

Tạo kubernetes-dashboard-certs, xác thực SSL

Ta sẽ dùng OpenSSL để sinh certificates tự xác thực SSL (ngoài ra khi triển khai thực tế có thể lấy các certificate do mua hoặc miễn phí từ https://letsencrypt.org/ theo Domain), chạy các lệnh sau:

sudo mkdir certs
sudo chmod 777 -R certs
openssl req -nodes -newkey rsa:2048 -keyout certs/dashboard.key -out certs/dashboard.csr -subj "/C=/ST=/L=/O=/OU=/CN=kubernetes-dashboard"
openssl x509 -req -sha256 -days 365 -in certs/dashboard.csr -signkey certs/dashboard.key -out certs/dashboard.crt
sudo chmod -R 777 certs

Trên Windows nếu không có lệnh openssl có thể tạo một Image có cài OpenSSL ví dụ Dockerfile sau:

FROM alpine

RUN apk update && \
  apk add --no-cache openssl && \
  rm -rf /var/cache/apk/*

WORKDIR /

ENTRYPOINT ["openssl"]

Build image đặt tên ví dụ, myopenssl

docker build -t myopenssl -f Dockerfile .

Sau đó phát sinh cert trên Windows

mkdir certs
docker run --rm -v ${PWD}/certs:/certs/ myopenssl req -nodes -newkey rsa:2048 -keyout /certs/dashboard.key -out /certs/dashboard.csr -subj "/C=/ST=/L=/O=/OU=/CN=kubernetes-dashboard"
docker run --rm -v ${PWD}/certs:/certs/ myopenssl x509 -req -sha256 -days 365 -in /certs/dashboard.csr -signkey /certs/dashboard.key -out /certs/dashboard.crt

Sau khi hoàn thành thì các thông tin certificate lưu ở thư mục certs, chạy lệnh sau để tạo Secret

kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kubernetes-dashboard

Giờ truy cập địa chỉ https://192.168.10.100:31000 sẽ vào màn hình đăng nhập

kubernetes

Lấy Token đăng nhập Dashboard

Tạo một file có tên admin-user.yaml cập nhật nội dung sau:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

Sau đó chạy lệnh:

kubectl apply -f admin-user.yaml
(Tham khảo: )

Tiếp theo chạy lệnh sau để lấy Token

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

Copy toàn bộ đoạn Token để đưa vào đăng nhập

kubernetes kubernetes

Như vậy đã hoàn thành cài đặt, khi truy cập có thể bạn cần dùng trình duyệt khác Chrome vì nó chặn truy cập khi SSL là tự xác thực.

Dashboard với Kubernetes trong Docker Desktop

Đối với Docker Desktop chỉ việc chạy lệnh sau để cài đặt (Tất nhiên nếu muốn có thể thực hiện cách trên) :

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml

Sau đó chạy proxy

kubectl proxy

Truy cập địa chỉ sau để đăng nhập: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

Để có Token đăng nhập bạn cũng cần làm theo cách trên, tức triển khai file admin-user.yaml, rồi chạy lệnh lấy Token

Tổng kết: đến đây bạn đã có thể dùng công cụ lệnh kubectl hoặc dùng Dashboard trực quan để làm việc với Cluster. Tuy nhiên, trước mắt hãy cố gắng dùng kubectl, sau khi thành thạo rồi hãy dùng Dashboard. Bản thân Dashboard có đủ thông tin từ Node, Pod, Deployment ... Bạn có thể cập nhật, scale hay deploy ứng dụng từ Dashboard.

Triển khai metrics server

metrics server trong kubernetes (metrics server) giám sát về tài nguyên sử dụng trên cluster, cung cấp các API để các thành phần khác truy vấn đến biết được và mức độ sử dụng tài nguyên (CPU, Memory) của Pod, Node ... Cần có Metric Server để HPA hoạt động chính xác

Để triển khai, lấy về mã nguồn từ GitHub

git clone git@github.com:kubernetes-sigs/metrics-server.git

Mở file metrics-server/deploy/1.8+/metrics-server-deployment.yaml tìm đến dòng args: sửa lại thành

        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname

Sau đó triển khai

kubectl apply -f deploy/1.8+/

Mới cập nhật

Các cập nhật mới của mã nguồn Metric trên GitHub đã xóa thư mục triển khai metrics-server/deploy/1.8+/, để triển khai bạn tải về file components.yaml mới tại metrics-server/releases

Sửa file components.yml như trên rồi thực hiện lệnh:

kubectl apply -f components.yml

Khi có Metric server thì trong Dashboard có thêm thống kê về CPU, Memory của các POD, và có thêm lệnh xem tài nguyên về Node, Pod

kubectl top no
kubectl top pod

Đăng ký nhận bài viết mới
(Bài tiếp) K9S