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. kubectl 및 aws-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 대시보드에 액세스할 수 있습니다.