게시글
질문&답변
2024.05.03
EKS 관리용 인스턴스(myeks-host)가 사라졌습니다.
안녕하세요. CloudNet@ 팀입니다. myeks-host 를 수동으로 종료했다는 의미인것이죠? 먼저 인스턴스 종료는 자원 삭제를 의미하는데요. 일정 시간 동안 EC2 인스턴스 메뉴에 노출되지만 자원 삭제된 상태인 것이죠. 인스턴스 중지와 종료에 대해 헤깔리는 경우가 종종 있습니다. 어떤 이유로 myeks-host 를 종료하신 것지 모르겠지만.. 기존 원클릭 배포 삭제 후 재배포 후 새롭게 진행하셔야 할 것 같네요. 감사합니다.
- 0
- 2
- 70
질문&답변
2024.04.28
5장 원클릭 실습 프로메테우스 이슈
안녕하세요. CloudNet@ 팀입니다. 오류 메시지만 봤을 때는 PVC 바인딩되지 않는 문제를 표현하는 것 같은데요. 프로메테우스와 그라파나의 설치 파라미터에 Storage Class를 gp3로 사용하도록 선언하고 있습니다. 원클릭 배포 후에 기본 환경 설정에서 gp3 Storage Class 설정이 정상적으로 이루어져 졌는지 확인이 필요해 보이네요. 혹시 다른 이슈일 수도 있으니 저도 테스트를 위한 자원 배포 중에 있습니다. 배포까지 시간 소요되고~ 확인까지 시간이 필요하니 작업 후에 추가적으로 답변 드리겠습니다. 감사합니다.
- 0
- 1
- 46
질문&답변
2024.04.14
안녕하세요, NatGateway 구성 질문 드립니다.
안녕하세요. CloudNet@ 팀입니다. 인프런 AI 인턴에서 빠른 답변을 했네요. 답변 내용이 조금 모호한 면이 있는 것 같아 질문에 대한 추가 답변 드립니다. 일단 NAT Gataway를 구성해야 하는 경우는 아래 설명과 같이 프라이빗 서브넷에 자원이 외부 인터넷 구간 통신을 위함 입니다. 이러한 NAT Gateway 구성은 사용량과 시간에 따른 과금이 발생하는데요. 아무래도 실습 환경에서 이러한 과금을 줄여보고자 환경적인 구성을 퍼블릭하게 구성한 것이죠. EKS 클러스터를 프라이빗한 환경을 구성한다면 필수적으로 NAT Gateway가 필요합니다. 프라이빗 서브넷에서 외부 간으로 통신이 필요할테니깐요 강의 상으로 보면 실습을 위한 환경일뿐 보안적인 측면을 고려한다면 비즈니스 환경에서는 EKS Fully Private Cluster 구성을 추천합니다. 그로 인해 NAT Gateway나 VPC Endpoint 등이 필요하겠네요. 이러한 환경을 구성하는 방법에 대해서는 AWS Docs나 검색을 통해 확인해야 할 것입니다. 참고로 Amazon EKS 확장판 강의를 6월 목표로 작업 중에 있는데 여기서 EKS Fully Private Cluster에 대해 다룰 예정입니다. 감사합니다.
- 1
- 3
- 82
질문&답변
2024.04.04
Amazon VPC CNI 아키텍처와 통신 흐름
안녕하세요. CloudNet@ 팀입니다. 먼저 질문하신 사항을 정리해보면... 서로 다른 노드에 위치한 파드가 통신할 때 IP 헤더를 캡슐화하는 것에 대해 어떻게 식별해서 IP 헤더를 붙이는 지에 대한 질문으로 보이는데요. Amazon VPC CNI 통신 흐름이 아닌 Kubernetes Calico CNI 통신 흐름에 대한 질문 같네요. Amazon VPC CNI 환경은 노드와 파드가 같은 대역으로 별도의 IP 헤더를 캡슐화하지 않으니깐요. Calico CNI 통신 방식은 총 3가지 유형이 있는데요. Amazon VPC CNI 동작과 대조하는 측면에서 IP-IN-IP 모드로 예를 들어 설명드린 것입니다. 결론부터 말씀드리면 Calico CNI의 IP-IN-IP 방식은 BGP로 Calico에서 관리하는 라우팅 테이블에 의해 파드 간의 정보를 파악하고 경로를 가지고 있으며 이를 통해 IP 헤더를 캡슐화하는 개념입니다. 즉, Calico 관리 라우팅 테이블을 참조해서 IP 헤더를 덧붙이는 것이죠. 참고로 Calico CNI의 다른 모드들도 간단히 설명드리자면… VXLAN 모드도 캡슐화를 통해 동작하는데 IP 레벨이 아닌 MAC 레벨의 캡슐화가 일어납니다. 그런 측면에서 Calico에서 관리하는 BGP 라우팅 테이블을 사용하지 않아 BGP 동작 없이 Calico 내부적으로 VXLAN 정보를 관리하고 활용합니다. 마지막으로 BGP 모드는 별도의 캡슐화 없이 직접적인 통신이 가능합니다. 그 이유는 노드 레벨의 라우팅 테이블에 BGP 라우팅 정보를 모두 가지고 있기 때문이죠. 직접적인 통신으로 오버헤드가 줄어들 수 있겠지만 대규모 환경이라면 노드 입장에서 모든 라우팅을 관리하는 점에 부담이 될 수 있겠네요. 이렇게 다양한 환경 조건에 따라 Calico CNI 통신 방식을 정할 수 있습니다. 이에 대비해서 VPC CNI는 캡슐화 없이 직접적인 통신이 가능하며 라우팅 테이블 관리도 AWS VPC 영역에서 관리하기에 여러모로 유연한 통신 환경을 가질 수 있는 것이죠. 답변이 되었나 모르겠네요. 감사합니다 :)
- 0
- 1
- 82
질문&답변
2024.03.26
내부에서 DNS 질의할때 CoreDNS 동작방식
안녕하세요. CloudNet@ 팀입니다. 강의 잘 듣고 계신다니 다행이네요. 🙂 질문하신 내용에 대해 답변드립니다. 내부에서 DNS 질의를 할때 동작을 살펴보면… 1. 파드에서 DNS Query를 수행하면 먼저 파드 내부에 Local DNS Resolver로 전달합니다. 여기서 resolv.conf에 구성된 파일을 확인하고 DNS 조회를 수행합니다. 2. NodeLocalDNS는 DNS 요청 결과를 기록해 두는 캐시 역할을 수행하며 빠르게 DNS Query를 처리하도록 돕습니다. 3. 만약 캐싱된 정보에 대상이 없을 경우 CoreDNS로 전달합니다. 4. CoreDNS는 Kubernetes 클러스터 내부의 서비스와 리소스에 대한 DNS 조회를 처리합니다. (서비스 조회, 외부 DNS 조회, 캐싱) 5. CoreDNS 구성은 corefile에 의해 관리되며 필요에 따라 커스터마이징할 수 있습니다. 참고로 2022년 10월 EKS 에서 Add-On에 대한 편집 기능을 도입하여 CoreDNS corefile 수정으로 사용자 정의가 가능합니다. https://aws.amazon.com/ko/blogs/containers/amazon-eks-add-ons-advanced-configuration/ (사진)[출처: By NsLookup.io. Licensed under CC By 4.0] 감사합니다.
- 0
- 1
- 109
질문&답변
2024.03.22
ALB 리스너 규칙 설정 부분 업데이트 필요
안녕하세요. CloudNet@ 팀입니다. 강의 관련해서 의견 감사드립니다. 전반적인 콘텐츠 확인 후 필요한 부분 업데이트 진행 계획 잡아두겠습니다. 감사합니다.
- 0
- 1
- 57
질문&답변
2024.03.20
기존 ALB에 추가로 path 붙여서 helm install 하기
안녕하세요. CloudNet@ 팀입니다. 개인 일이 있어 확인이 늦었네요. 죄송합니다. 🥲 🥲 🥲 질문을 쭉 읽어보았는데.. " 기존 ALB "라는 것이 어떤 것인지 잘 이해가 안되네요. 어디선가 ingress로 정의되어 생성된 ALB를 다른 서비스에서 활용한다는 것일까요? alb.ingress.kubernetes.io/group.name 과 alb.ingress.kubernetes.io/load-balancer-name 를 통해 그룹화하여 동일한 ALB를 활용할 수 있습니다만... 아무래도 externalDNS로 연결할 대상 서비스가 어떻게 구성되는지 알면 답변이 좀 더 수월할 것 같네요ㅠㅠ 감사합니다.
- 0
- 1
- 69
질문&답변
2024.03.18
Amazon EKS Data Plane - 노드
안녕하세요. CloudNet@ 팀입니다. EKS Data Plane을 구성하는 방식에 대해 어떤 방식을 선호하는지 질문 주셨는데요. 이 부분은 비즈니스 환경과 요구에 따라 선택할 수 있는 영역이라 어떤 부분을 선호하는지 말씀드리기 애매한 측면이 있네요. 관리형 노드 그룹과 자체 관리형 노드 그룹, AWS Fargate에 대한 특징은 강의에 설명드렸으니 생략하겠습니다. 질문에서 ECS 같은 경우 예를 들어 말씀주셨는데 EKS도 맥락은 비슷하다 생각합니다. 어찌보면 비용과 관리 편의가 트레이드 오프되는 것 같네요. 결국 서버리스 아키텍처를 선호하고, 인프라 관리를 최소화하고 싶은 환경이라면 AWS Fargate를 선호할 수 있겠네요. EKS Fargate와 EKS Managed Node Group에 대한 비교 표가 잘 나와있는 링크가 있어 공유드립니다. https://cloudonaut.io/versus/docker-containers/eks-fargate-vs-eks-managed-node-group/ 감사합니다.
- 1
- 1
- 107
질문&답변
2024.03.10
karpenter 동작이 이상합니다..(안됩니다)
안녕하세요. 메일로 보내주신 로그 잘 보았습니다. 로그 상에서 눈여겨 볼 부분이 아래와 같은데요. 2024-03-10T04:59:23.584Z ERROR controller Reconciler error {"commit": "637a642", "controller": "machine.lifecycle", "controllerGroup": "karpenter.sh", "controllerKind": "Machine", "Machine": {"name":"default-ws4pf"}, "namespace": "", "name": "default-ws4pf", "reconcileID": "112747a4-1c68-449e-8bd8-e3bc202806af", "error": "creating machine, creating instance, with fleet error(s), UnauthorizedOperation: You are not authorized to perform this operation. User: arn:aws:sts::...:assumed-role/myeks2-karpenter/1710046124308773194 is not authorized to perform: ec2:RunInstances on resource: arn:aws:ec2:ap-northeast-2:...:instance/* with an explicit deny in a service control policy. Encoded authorization failure message: UnauthorizedOperation 오류로 AWS IAM 권한 오류에 따라 인스턴스를 생성하는 권한이 없다고 출력되네요. 이에 따라 2 가지 측면을 체크해 볼 필요가 있겠습니다. 먼저 Karpenter에서 사용하는 IAM 역할(myeks2-karpenter)은 실습 코드에 의해 생성되서 저와 다를 거 같진 않습니다. 그 외에 로그 상에 with an explicit deny in a service control policy 이 있는 것으로 보면 SCP(Service Control Policy)에서 인스턴스 생성을 명시적으로 거부했을 가능성도 보이네요. 메일 상에서 SCP 정책은 확인이 어렵다고 하셨는데... 가능하다면 해당 조직 담당자에게 문의 요청을 별도로 드려야 할 것 같습니다. 아무래도 위 과정이 번거롭거나 애매할 경우 'IAM 권한 오류 때문에 그런 것인지' 확인해 보는 방법으로... 새로운 AWS 프리티어 계정을 생성 후 테스트 해보는 것은 어떨까 싶습니다. 참고로 해당 의견은 로그 상 출력된 메시지로 해석한 것이라... 별도의 다른 이유 때문에 그럴 수도 있으니 참고바랍니다. 혹시나 진행 사항 있으면 코멘트 주세요~ 같이 고민해 보시죠. 🙂 아!! 추가로 생각난 것인데 CloudTrail 정보를 보면 유추할 만한 단서가 나올 수도 있어 보입니다.
- 1
- 2
- 199
질문&답변
2024.03.10
karpenter 동작이 이상합니다..(안됩니다)
안녕하세요. CloudNet@ 팀입니다. 질문주신 사항에 대해 테스트해 보니 정상적으로 동작하네요. 😭 😭 😭 (admin@myeks2:default) [root@myeks2-bastion-EC2 ~]# kubectl scale deployment inflate --replicas 5 deployment.apps/inflate scaled (admin@myeks2:default) [root@myeks2-bastion-EC2 ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE inflate 5/5 5 5 90s (admin@myeks2:default) [root@myeks2-bastion-EC2 ~]# kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controller | grep provisioner 2024-03-09T18:24:48.690Z INFO controller.provisioner found provisionable pod(s) {"commit": "637a642", "pods": 5} 2024-03-09T18:24:48.690Z INFO controller.provisioner computed new machine(s) to fit pod(s) {"commit": "637a642", "machines": 1, "pods": 5} 2024-03-09T18:24:48.705Z INFO controller.provisioner created machine {"commit": "637a642", "provisioner": "default", "machine": "default-f8q7x", "requests": {"cpu":"5150m","pods":"7"}, "instance-types": "c4.2xlarge, c4.4xlarge, c4.8xlarge, c5.12xlarge, c5.2xlarge and 95 other(s)"} 2024-03-09T18:24:49.383Z DEBUG controller.machine.lifecycle created launch template {"commit": "637a642", "machine": "default-f8q7x", "provisioner": "default", "launch-template-name": "karpenter.k8s.aws/9596557386432317423", "id": "lt-0911f1666a1257f25"} 2024-03-09T18:24:49.506Z DEBUG controller.machine.lifecycle created launch template {"commit": "637a642", "machine": "default-f8q7x", "provisioner": "default", "launch-template-name": "karpenter.k8s.aws/18355487179494316340", "id": "lt-03e2b35a60e46fd83"} 2024-03-09T18:24:49.638Z DEBUG controller.machine.lifecycle created launch template {"commit": "637a642", "machine": "default-f8q7x", "provisioner": "default", "launch-template-name": "karpenter.k8s.aws/1925139460811799108", "id": "lt-0b5a8728a037f2af6"} 2024-03-09T18:24:51.960Z INFO controller.machine.lifecycle launched machine {"commit": "637a642", "machine": "default-f8q7x", "provisioner": "default", "provider-id": "aws:///ap-northeast-2d/i-08510f4d3504238c1", "instance-type": "m7i-flex.2xlarge", "zone": "ap-northeast-2d", "capacity-type": "spot", "allocatable": {"cpu":"7910m","ephemeral-storage":"17Gi","memory":"29317Mi","pods":"58"}} 2024-03-09T18:25:14.449Z DEBUG controller.machine.lifecycle registered machine {"commit": "637a642", "machine": "default-f8q7x", "provisioner": "default", "provider-id": "aws:///ap-northeast-2d/i-08510f4d3504238c1", "node": "ip-192-168-98-48.ap-northeast-2.compute.internal"} 2024-03-09T18:25:25.528Z DEBUG controller.machine.lifecycle initialized machine {"commit": "637a642", "machine": "default-f8q7x", "provisioner": "default", "provider-id": "aws:///ap-northeast-2d/i-08510f4d3504238c1", "node": "ip-192-168-98-48.ap-northeast-2.compute.internal"} (admin@myeks2:default) [root@myeks2-bastion-EC2 ~]# kubectl get node --label-columns=eks.amazonaws.com/capacityType,karpenter.sh/capacity-type,node.kubernetes.io/instance-type NAME STATUS ROLES AGE VERSION CAPACITYTYPE CAPACITY-TYPE INSTANCE-TYPE ip-192-168-8-100.ap-northeast-2.compute.internal Ready 18m v1.26.12-eks-5e0fdde ON_DEMAND m5.large ip-192-168-93-11.ap-northeast-2.compute.internal Ready 18m v1.26.12-eks-5e0fdde ON_DEMAND m5.large ip-192-168-98-48.ap-northeast-2.compute.internal Ready 3m32s v1.26.12-eks-5e0fdde spot m7i-flex.2xlarge 혹시 증상 재현을 위해 제가 참고할 만한 사항이 있을까요?? 사소한 것이라도 괜찮습니다.. 그 외에 주의 사항을 다시 점검해 보자면... 1) 환경 변수 선언하고 제대로 출력되는지 다시 한번 체크 echo $KARPENTER_VERSION echo $CLUSTER_NAME echo $AWS_DEFAULT_REGION echo $AWS_ACCOUNT_ID echo $TEMPOUT 2) EC2 Spot Fleet 사용을 위한 service-linked-role 생성 확인 (이미 생성됐다는 에러가 나와야 정상) (admin@myeks2:default) [root@myeks2-bastion-EC2 ~]# aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 확인 부탁드려요... 감사합니다. 추가적으로 grep 옵션 없이 로그 정보 확인 부탁드려요. 너무 길면 메일로 첨부해서 보내셔도 좋습니다. (ongja@cloudneta.net) kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controller
- 1
- 2
- 199