IT

kuberentes(쿠버네티스) 대시보드 설치, metrics-server설치, 대시보드 접속 본문

Kubernetes(쿠버네티스)

kuberentes(쿠버네티스) 대시보드 설치, metrics-server설치, 대시보드 접속

셋글자 2020. 8. 14. 14:01
728x90

※ 목표

쿠버네티스(kubernetes),도커(docker) 설치(1)

kuberentes(쿠버네티스) 대시보드 설치, metrics-server설치, 대시보드 접속(2)

kuberentes(쿠버네티스) 대시보드 외부접속 작업(3)

docker private registry 생성 (4)

kubernetes(쿠버네티스)를 통해  deployment pod 배포 (5)

kuberentes(쿠버네티스), 프로메테우스(prometheus), 그라파나(grafana) 연동 (6)

현재 서비스와 kubernets api를 연동하여 deplyment replicas를 제어 (7)

 

 

 

kuberentes(쿠버네티스) 대시보드 설치, metrics-server설치, 대시보드 접속

 

※ ~.yaml파일 작성시 tab은 오류(인식못함). 온니 스페이스바로만 작성.!!

 

--대시보드 적용

> 쿠버네티스 공식홈페이지 대시보드 적용방법

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

 

Web UI (Dashboard)

Dashboard is a web-based Kubernetes user interface. You can use Dashboard to deploy containerized applications to a Kubernetes cluster, troubleshoot your containerized application, and manage the cluster resources. You can use Dashboard to get an overview

kubernetes.io

> 대시보드 적용

(1)

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

또는

(2)

# cd ~

# mkdir dashboard

# cd dashboard

# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

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

 

위의 방법은 취향대로 하면 될것같다. 나의경우는 다운받아서 적용하는것이 더 좋아서 (2)번으로 진행

 

[대시보드 적용확인]

kubectl get services --all-namespaces 또는 kubectl get service -n kubernetes-dashboard

NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE

default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  21m

default                nginx                       NodePort    10.101.211.51   <none>        80:30219/TCP             16m

kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   21m

kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.97.93.46     <none>        8000/TCP                 75s

kubernetes-dashboard   kubernetes-dashboard        NodePort    10.106.35.182   <none>        443:32162/TCP            76s

 

> 기억해야할 사항

**대시보드 서비스의 namespaces가 이전버전에는 kube-system이였지만 특정버전이후 kubernetes-dashboard로 변경된것으로 보임.

검색하여 대시보드에 무언가 적용할때 뭔가 안되는게 많았는데 namespace때문이였다.

기억해야될 사항인 것 같다.

 

--메트릭 서버 적용

대시보드 적용시 cpu나 memory정보를 수집하는 애드온도 설치하여야 하며

검색당시 hepster설치가 많았지만 버전이 많이 지난 후 지원하지 않는것 같음.

heapster 설치는 아래와 같은 이유로 정상설치 안되는 이유가 많았음.

쿠버네티스 v1.11부터 heapster가 deprecated 되었습니다 (자세한 내용은 문서를 참고 바랍니다.) 그래서 HPA(horizontal pod autoscaler)나 kubectl top 명령어를 사용하라면 metrics-server를 사용해야 합니다.

 

그래서 metrice server(매트릭서버를 설치)

# cd ~

# mkdir metric

# cd metric

# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

 

# vi components.yaml

============================================= 

apiVersion: apps/v1

kind: Deployment

metadata:

  name: metrics-server

  namespace: kube-system

  labels:

    k8s-app: metrics-server

spec:

  selector:

    matchLabels:

      k8s-app: metrics-server

  template:

    metadata:

      name: metrics-server

      labels:

        k8s-app: metrics-server

    spec:

      serviceAccountName: metrics-server

      volumes:

      # mount in tmp so we can safely use from-scratch images and/or read-only containers

      - name: tmp-dir

        emptyDir: {}

      containers:

      - name: metrics-server

        image: k8s.gcr.io/metrics-server-amd64:v0.3.6

        imagePullPolicy: IfNotPresent

        args:

          - --cert-dir=/tmp

          - --secure-port=4443

          - --kubelet-insecure-tls=true                

          - --kubelet-preferred-address-types=InternalIP   

        ports:

        - name: main-port

          containerPort: 4443

          protocol: TCP

        securityContext:

          readOnlyRootFilesystem: true

          runAsNonRoot: true

          runAsUser: 1000

        volumeMounts:

        - name: tmp-dir

          mountPath: /tmp

      nodeSelector:

        kubernetes.io/os: linux

        kubernetes.io/arch: "amd64"

============================================= 

 

위와 같이 

- --kubelet-insecure-tls=true 

- --kubelet-preferred-address-types=InternalIP 

추가한다. (tab으로 들여쓰기X 스페이스바로만)

 

> metricserver 적용

# kubectl apply -f components.yaml

 

[metric-server 적용확인]

아래의 명령어가 실행되어야 metric-server가 정상적으로 설치된것

# kubectl top nodes

NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   

master   138m         6%     2251Mi          61%       

node1    48m          2%     1277Mi          74%       

node2    39m          1%     1283Mi          74%   

 

# kubectl top pods

NAME                                CPU(cores)   MEMORY(bytes)   

sj-cataloger-749f87bb95-glgn4       1m           143Mi           

sj-cataloger-749f87bb95-tkl88       1m           144Mi           

sj-deletemanager-7f4f5fb49c-5l2t8   1m           142Mi           

sj-deletemanager-7f4f5fb49c-g494n   1m           146Mi           

sj-deletemanager-7f4f5fb49c-xvdr6   1m           165Mi           

sj-tr-54c6dfbb59-d7rdh              1m           144Mi

 

*메트릭서버 명령어 사용시 오류

             Error from server (ServiceUnavailable): the server is currently unable to handle the request (get pods.metrics.k8s.io) -> 기다리면됨

error: metrics not available yet -> 기다리면됨

 

메트릭 서버같은경우 설치후 정보수집이 필요하기때문에? 3분정보 기다린듯함.

 

# kubectl logs -n kube-system deploy/metrics-server 메트릭서버 오류로그 보는법

 

 

--대시보드 접속방법(Master서버에서만 가능)

기본적으로 대시보드 접속하는 방법이며 Master서버에서만 가능하다.

linux gui환경이 아니라면 계정 생성까지만하면 됨

 

> serviceaccount 계정 생성

* 위치상관없음

# vi serviceaccount.yaml

apiVersion: v1

kind: ServiceAccount

metadata:

   name: admin-user

   namespace: kubernetes-dashboard

#kubectl apply -f serviceaccount.yaml

 

> ClusterRoleBinding 생성

#vi ClusterRoleBinding.yaml

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

 

> 생성된 계정정보로 토큰 생성, 출력된 토큰으로 로그인 페이지에 토큰 입력

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

 

~

~
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkhRVjgwaGFXb3NRV3doM1FORU80RlB2ZDUyOUd1Y0hRMU9y.....~~~

 

**참고사항**

서비스 계정생성시 admin-user같은건 자기가 원하는 ID로 바꿔서 진행

 

[쿠버네티스 서버 프록시 실행]

# kubectl proxy --port=8001 &

 

[접속]

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

대시보드 접속 후 로그인시 token값 입력후 로그인하면 되며

Master서버에서만 접속되며 localhost로만 된다.(127.0.0.1 x)