Amazon EKS 클러스터에서 Kubernetes 대시보드를 설정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 17일

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 Kubernetes 대시보드를 설정하려면 어떻게 해야 합니까?

간략한 설명

Kubernetes 대시보드를 설정하려면 더 이상 사용되지 않는 지표 공급자 Heapster가 필요합니다. Heapster는 더 이상 사용되지 않으므로 Amazon EKS 최적화 AMI(버전 1.10.11으로 시작)에서 kubelet의 읽기 전용 포트(10255)가 비활성화됩니다. 이 비활성화된 포트로 인해 Heapster 로그에서 "dial tcp x.x.x.x:10255:getsockopt: connection refused"라고 표시되는 오류가 발생합니다. 이 오류로 인해 Kubernetes 대시보드에 액세스할 때 CPU 및 메모리 지표를 볼 수 없습니다.

해결 방법

환경 설정

참고: 필요한 경우, SSH를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 연결합니다. 아래 코드 예제의 구문은 Linux 서버에 적용됩니다.

1.    kubectlaws-iam-authenticator를 설치합니다.

2.    Amazon EKS 제어 영역을 가리키도록 kubeconfig 파일을 구성하려면 다음 명령을 실행합니다.

$ aws eks update-kubeconfig --name EKS_ClusterName

참고: EKS_ClusterName을 사용자의 EKS 클러스터 이름으로 교체합니다. kubeconfig 파일 구성에 대한 자세한 내용은 update-kubeconfig를 참조하십시오.

3.    환경에서 작업자 노드가 실행 중인지 확인하려면 다음 명령을 실행합니다.

$ kubectl get nodes

4.    환경에서 Kubernetes 서비스가 실행 중인지 확인하려면 다음 명령을 실행합니다.

$ kubectl get svc

Kubernetes 대시보드 생성

1.    Kubernetes 대시보드를 생성하려면 다음 명령을 실행합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

2.    Heapster를 통해 대시보드에서 지표 및 그래프를 사용하려면 다음 명령을 실행합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml

중요: Heapster에서 Kubernetes 대시보드에 나타나는 CPU 및 메모리 지표를 수집하려면 AWS CloudFormation용 amazon-eks-nodegroup 템플릿을 사용하여 EKS 작업자 노드를 프로비저닝할 수 있습니다. 간단한 설명 섹션에서 오류가 발생하지 않도록 하려면 AWS CloudFormation 템플릿의 Amazon EKS 최적화 AMI에서 읽기 전용 포트(10255)를 활성화합니다. 또한 EKS 작업자 노드를 생성할 때 BootstrapArguments 파라미터를 --kubelet-extra-args '--read-only-port=10255'로 설정합니다.

3.    배포 및 서비스를 생성하려면 다음 명령을 실행합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml

4.    대시보드에 대한 클러스터 역할 바인딩을 생성하려면 다음 명령을 실행합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml

5.    클러스터 관리 권한이 있는 새 서비스 계정을 생성하려면 다음 명령을 실행합니다.

cat > eks-admin-service-account.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: eks-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: eks-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: eks-admin
  namespace: kube-system
EOF

6.    이전 단계에서 매니페스트 파일이 생성되었는지 확인하려면 다음 명령을 실행합니다.

$ cat eks-admin-service-account.yaml

7.    클러스터 역할 바인딩에 eks-admin을 바인드하려면 다음 명령을 실행합니다.

$ kubectl apply -f eks-admin-service-account.yaml

8.    Amazon EC2 인스턴스 localhost 포트에서 Kubernetes 대시보드 포트로 모든 요청을 전달하려면 다음 명령을 실행합니다.

$ kubectl port-forward svc/kubernetes-dashboard -n kube-system 6443:443

9.    SSH 터널을 통해 로컬 시스템에서 포트에 액세스하려면 다음 명령을 실행합니다.

ssh -i EC2KeyPair.pem ec2-user@IP -L 6443:127.0.0.1:6443

참고: EC2KeyPair.pem을 키 페어로 교체합니다.

브라우저에서 Kubernetes 대시보드에 액세스

1.    브라우저에서 Kubernetes 대시보드에 액세스하려면 https://127.0.0.1:6443을 입력합니다.

Kubernetes 대시보드가 브라우저로 로드되고 입력을 요청합니다.

2.    인증을 위해 보유자 토큰을 가져오려면 명령줄로 돌아가 다음 명령을 실행합니다.

$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

3.    명령줄 출력에서 토큰을 복사합니다.

4.    브라우저의 Kubernetes 대시보드 팝업 창에서 [Token]을 선택합니다.

5.    출력에서 [Enter token] 상자로 토큰을 붙여넣고 [SIGN-IN]을 선택합니다.

이제 브라우저의 Kubernetes 대시보드에 액세스할 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?