Kubernetes Dashboard 웹 UI 배포하기

1. Kubernetes Dashboard 배포 개요

Kubernetes Dashboard는 Kubernetes 클러스터를 웹 기반 인터페이스로 모니터링하고 관리할 수 있게 해주는 공식 웹 UI 도구입니다. 본 문서에서는 Dashboard를 클러스터에 배포하는 과정을 설명합니다.

2. 배포 전 노드 상태 확인

Dashboard를 배포하기 전에 모든 노드가 정상 상태인지 확인합니다.

[root@kube-master ~]# kubectl get node
NAME         STATUS    AGE
node-1       Ready     35d
node-2       Ready     35d

3. Deployment 리소스 생성

Dashboard Pod을 관리하기 위한 Deployment 리소스 설정 파일을 작성합니다.

[root@kube-master ~]# vim dashboard-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard-latest
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
        version: latest
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
        - name: kubernetes-dashboard
          image: docker.io/bestwu/kubernetes-dashboard-amd64:v1.6.3
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              cpu: 100m
              memory: 50Mi
            requests:
              cpu: 100m
              memory: 50Mi
          ports:
            - containerPort: 9090
          args:
            - --apiserver-host=http://192.168.1.100:8080
          livenessProbe:
            httpGet:
              path: /
              port: 9090
            initialDelaySeconds: 30
            timeoutSeconds: 30

4. Service 리소스 생성

Dashboard에 대한 외부 접근을 위한 Service 설정 파일을 작성합니다.

[root@kube-master ~]# vim dashboard-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
    - port: 80
      nodePort: 30303
      targetPort: 9090

5. 필수镜像 다운로드

모든 노드에서 필요한 이미지를 다운로드합니다. 클러스터 환경에 따라 자동 다운로드되기도 합니다.

[root@node-1 ~]# docker pull docker.io/bestwu/kubernetes-dashboard-amd64:v1.6.3
Trying to pull repository docker.io/bestwu/kubernetes-dashboard-amd64 ... 
v1.6.3: Pulling from docker.io/bestwu/kubernetes-dashboard-amd64
ff9e00b73eb4: Pull complete 
Digest: sha256:d820c9a0a0a7cd7d0c9d3630a2db0fc33d190db31f3e0797d4df9dc4a6a41c6b
Status: Downloaded newer image for docker.io/bestwu/kubernetes-dashboard-amd64:v1.6.3

6. Dashboard Deployment 및 Service 시작

설정 파일을 사용하여 리소스를 생성합니다.

[root@kube-master ~]# kubectl create -f dashboard-deployment.yaml
deployment "kubernetes-dashboard-latest" created
[root@kube-master ~]# kubectl create -f dashboard-service.yaml
service "kubernetes-dashboard" created

리소스 생성 후 상태를 확인합니다.

[root@kube-master ~]# kubectl get deployment --namespace=kube-system
NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-dashboard-latest   1         1         1            1           3d

[root@kube-master ~]# kubectl get service --namespace=kube-system
NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   10.254.146.81   <none>        80/TCP    3d

[root@kube-master ~]# kubectl get pod --namespace=kube-system -o wide
NAME                                           READY     STATUS    RESTARTS   AGE       IP            NODE
kubernetes-dashboard-latest-4124080496-dprcl   1/1       Running   1          3d        10.255.39.2   node-1

7. 웹 인터페이스 접근

브라우저에서 다음 URL로 접속합니다.

http://192.168.1.100:8080/ui

접속成功后 Dashboard 메인 페이지가 표시됩니다.

8. 리소스 정리

Dashboard 사용이 완료되었을 경우 리소스를 삭제합니다. 단기적인 사용 중단은 Service만, 장기적인 중단은 Deployment와 Service 모두 삭제합니다.

[root@kube-master ~]# kubectl delete -f dashboard-service.yaml 
service "kubernetes-dashboard" deleted

[root@kube-master ~]# kubectl delete -f dashboard-deployment.yaml
deployment "kubernetes-dashboard-latest" deleted

태그: kubernetes dashboard web-ui k8s container-orchestration

6월 1일 17:56에 게시됨