kube-controller-manager 가 조회되지 않습니다

0

안녕하세요,

현재 EKS 클러스터를 만들어 사용 중입니다. (Cluster : Servicenow-Demo) 외부 솔루션을 통해 해당 클러스터에 API 콜을 날리게 되는데, 이 과정에서 pod, node, namespace 등은 정상적으로 조회가 되는데 kube-controller-manager만 조회되지 않고 404 에러가 떨어집니다. 아래 명령어 및 결과 첨부 합니다 : curl -sSk -H "Authorization: Bearer $KUBE_TOKEN" https://5057F5D0FB24F92AF25F1E483D48F199.gr7.ap-northeast-2.eks.amazonaws.com/api/v1/namespaces/kube-system/endpoints/kube-controller-manager { "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "endpoints "kube-controller-manager" not found", "reason": "NotFound", "details": { "name": "kube-controller-manager", "kind": "endpoints" }, "code": 404 }%

그래서 해당 모듈이 있는지 확인하기 위해서 모든 네임스페이스의 엔드포인트와 파드를 조회 해보면 kube-controller-manager 모듈이 존재하지 않는 것으로 확인됩니다.  kubectl get endpoints --all-namespaces NAMESPACE NAME ENDPOINTS AGE default frontend 10.0.28.62:80,10.0.31.87:80,10.0.9.228:80 14d default kubernetes 10.0.12.142:443,10.0.19.217:443 14d default redis-follower 10.0.2.156:6379,10.0.20.74:6379 14d default redis-leader 10.0.22.202:6379 14d kube-system kube-dns 10.0.24.30:53,10.0.27.174:53,10.0.24.30:53 + 1 more... 14d

 kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default frontend-57df59b89c-8s8jg 1/1 Running 0 14d default frontend-57df59b89c-df8vl 1/1 Running 0 14d default frontend-57df59b89c-mg7zt 1/1 Running 0 14d default redis-follower-84fcc94dfc-66h22 1/1 Running 0 14d default redis-follower-84fcc94dfc-h69kq 1/1 Running 0 14d default redis-leader-766465cd9c-5759s 1/1 Running 0 14d kube-system aws-node-cxvw9 1/1 Running 0 14d kube-system aws-node-kppxx 1/1 Running 0 14d kube-system aws-node-xds25 1/1 Running 0 14d kube-system coredns-d596d9655-t8z2j 1/1 Running 0 14d kube-system coredns-d596d9655-td5mv 1/1 Running 0 14d kube-system kube-proxy-c5jww 1/1 Running 0 14d kube-system kube-proxy-shg6h 1/1 Running 0 14d kube-system kube-proxy-tpcms 1/1 Running 0 14d

제가 최초에 EKS 클러스터를 만들때 eksctl을 이용하여 CLI로 생성을 했었고, 이후에는 다른 설정은 하지 않았습니다. kube-controller-manager 가 조회되지 않는것이 정상인가요? 아니라면 어떻게 조치해야할까요?

더 필요한 정보가 있으시면 말씀 부탁드립니다.

감사합니다

질문됨 10달 전327회 조회
2개 답변
0

Hello,

Please note that kube-controller-manager is a control plane component [1] that runs controller processes. The control plane components are managed by Amazon EKS. Logically, each controller is a separate process, but to reduce complexity, they are all compiled into a single binary and run in a single process.

Some types of these controllers are:

  • Node controller: Responsible for noticing and responding when nodes go down.
  • Job controller: Watches for Job objects that represent one-off tasks, then creates Pods to run those tasks to completion.
  • EndpointSlice controller: Populates EndpointSlice objects (to provide a link between Services and Pods).
  • ServiceAccount controller: Create default ServiceAccounts for new namespaces.

If you want to confirm that kube-controller-manager is managing endpoints you enable the control plane logging on the cluster and check the related log. When you enable control plane logging [2] the Controller manager logs are shipped to CloudWatch.

Additionally, If there is a question specific to a EKS cluster in your account please feel free to open a support case with AWS Premium Support and our team will be glad to look at your setup and suggest best practices accordingly.

[1] https://kubernetes.io/docs/concepts/overview/components/#kube-controller-manager

[2] Amazon EKS control plane logging - https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html

Thank you !


Translated for your convenience:

안녕하세요,

kube-controller-manager는 컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트 [1] 라는 점에 유의하시기 바랍니다.컨트롤 플레인 구성 요소는 Amazon EKS에서 관리합니다.논리적으로 각 컨트롤러는 별도의 프로세스이지만 복잡성을 줄이기 위해 모두 단일 바이너리로 컴파일되어 단일 프로세스에서 실행됩니다.

이러한 컨트롤러의 일부 유형은 다음과 같습니다.

  • **노드 컨트롤러: ** 노드가 다운될 때 이를 감지하고 대응하는 역할을 담당합니다.
  • **잡 컨트롤러: ** 일회성 태스크를 나타내는 잡 오브젝트를 감시한 다음 해당 태스크를 완료할 수 있도록 파드를 생성한다.
  • **엔드포인트슬라이스 컨트롤러: ** 엔드포인트슬라이스 오브젝트를 채웁니다 (서비스와 파드 간의 링크를 제공하기 위해).
  • **서비스 어카운트 컨트롤러: ** 새 네임스페이스에 대한 기본 서비스 어카운트를 생성합니다.

'kube-controller-manager'가 엔드포인트를 관리하고 있는지 확인하려면 클러스터에서 컨트롤 플레인 로깅을 활성화하고 관련 로그를 확인하십시오.컨트롤 플레인 로깅 [2] 을 활성화하면 컨트롤러 관리자 로그가 CloudWatch로 전송됩니다.

또한 계정의 EKS 클러스터와 관련된 질문이 있는 경우 언제든지 AWS Premium Support에 지원 사례를 제기해 주시면 저희 팀에서 기꺼이 설정을 살펴보고 그에 따라 모범 사례를 제안해 드리겠습니다.

[1] https://kubernetes.io/docs/concepts/overview/components/#kube-controller-manager

[2] 아마존 EKS 컨트롤 플레인 로깅 - https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html

고맙습니다!

AWS
답변함 10달 전
0

Amazon Elastic Kubernetes Service(Amazon EKS)는 AWS와 온프레미스에서 손쉽게 Kubernetes를 실행할 수 있는 관리형 Kubernetes 서비스입니다. Amazon EKS는 컨테이너 예약, 애플리케이션 가용성 관리, 클러스터 데이터 저장 및 다른 주요 작업을 담당하는 Kubernetes 컨트롤 플레인 노드의 가용성과 확장성을 관리합니다.

Amamzon EKS 컨트롤 플레인에는 API 서버, 스케줄러, etcd 및 kube-controller-manager와 같은 구성 요소를 실행하는 Kubernetes API 서버 인스턴스 즉, 컨트롤 플레인 노드가 실행됩니다. 그리고 2개 이상의 API 서버 인스턴스와 AWS 리전 내 3개의 가용 영역에서 실행되는 3개의 etcd 인스턴스로 구성됩니다. Amazon EKS는 높은 가용성 보장을 위해 위와 같이 구성된 컨트롤 플레인에서 비정상적인 컨트롤 플레인 노드를 자동으로 감지하고 교체합니다. 이로 인해 고객은 Kubernetes 실행에 따른 운영 부담이 줄어들며, AWS 인프라를 관리하는 대신 애플리케이션 빌드에 집중할 수 있습니다. 참고링크

따라서 Amazon EKS에서는 kube-controller-manager를 포함한 다른 컨트롤 플레인 components는 AWS에 의해서 관리되는 관리형 서비스로, 클러스터 관리자가 직접 접근하거나 확인할 수 없습니다.

EKS API server endpoint(eks.amazonaws.com/api/v1/namespaces/kube-system/endpoints/kube-controller-manager)로 동일한 curl 명령어를 실행하여 테스트 했을 때 동일한 결과(404 error)가 출력 되었습니다.

{ "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "the server could not find the requested resource", "reason": "NotFound", "details": {}, "code": 404 }

kube-controller-manager가 정상적으로 endpoint, nodes 등을 관리하고 있음을 확인하려면 kube-controller-manager의 로그를 활성화 하여 관련 로그를 확인하는 것을 권장합니다.

  1. EKS 콘솔 로그인
  2. Cluster > Logging
  3. Manage logging
  4. Controller manager 토글 버튼 클릭
  5. Controller manager "on" 하이퍼링크 클릭

로그가 이미 활성화 되어 있다면 CloudWatch의 Logs >> Log groups에서 설정하신 클러스터의 로그 그룹에서 Log streams 검색에 "kube-controller-manager"를 검색하시면 확인하실 수 있습니다.

추가로 API 서버 호출로 kube-system 네임 스페이스에서 kube-controller-manager가 endpoints를 관리하고 있음을 확인하려면 아래의 명령어를 통해 "managedFields.manager"를 확인해 간접적으로 kube-controller-manager에 의해 관리됨을 확인할 수 있습니다.

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

$ ENDPOINT=$(kubectl config view --minify --raw -o json | jq -r '.clusters[].cluster.server')

$ curl -sSk -H "Authorization: Bearer $(aws eks get-token --cluster-name <클러스터 명> --region <리젼 코드> | jq -r '.status.token')" $ENDPOINT/api/v1/namespaces/kube-system/endpoints

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

추가적인 문의 및 자세한 Support를 원하신다면 Support Center에서 한국어 케이스 지원을 통해 직접 문의주시길 바랍니다. Support case를 생성하시면 구축되어 있는 EKS 리소스 확인 및 더욱 자세한 가이드를 제공 받을 수 있습니다.

profile pictureAWS
지원 엔지니어
답변함 10달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠