jinheung90 2024. 5. 12. 00:16

nodeRole 생성

node 생성 role

 

node group 생성

https://stackoverflow.com/questions/57494369/kubectl-apply-deployment-to-specified-node-group-aws-eks

 

Kubectl apply Deployment to specified Node Group - AWS EKS

I have created multiple stacks (node groups) within my EKS cluster, and each group runs on a different instance type (for example, one group runs on GPU instances). I have added an entry in mapRole...

stackoverflow.com

 

레이블을 통한 배포 시 노드 그룹 배포 env를 보면 알겠지만 보통은 테스트 서버랑 릴리즈 서버의 두 그룹으로 나누는게 운영에서는 보통이므로 클러스터를 새로 만들기보다는 그룹단위로 관리한다. 

 

 

 

AWS Loadbalancer 연결

helm 설치 

helm은 패키지 매니져이며 현재는 AWS LoadBalancerController 나중에 Blue Green 배포를 위한 ArgoCD를 설치하기 위해 사용

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/helm.html

 

Amazon EKS에 Helm 사용 - Amazon EKS

openssl을 먼저 설치해야 한다는 메시지가 나타나는 경우 다음 명령으로 설치할 수 있습니다. sudo yum install openssl

docs.aws.amazon.com

AWS Loadbalancer Controller IAM

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy.json

 

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json

eksctl 설치

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

sudo mv /tmp/eksctl /usr/local/bin

eksctl version

 

// oidc-provider 

eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve

 

 

 

// role 생성 및 연결

// loadbalancer controller 
eksctl create iamserviceaccount \
  --cluster=my-app-cluster\
  --namespace=kube-system \
  --name=aws-load-balancer-controller \
  --role-name AmazonEKSLoadBalancerControllerRole \
  --attach-policy-arn=arn:aws:iam::471112975229:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

// /AmazonEKS_CNI_Policy

eksctl create iamserviceaccount \
    --name aws-node \
    --namespace kube-system \
    --cluster my-app-cluster \
    --role-name AmazonEKSVPCCNIRole \
    --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \
    --override-existing-serviceaccounts \
    --approve

AWS Loadbalancer Controller 설치 

helm repo add eks https://aws.github.io/eks-charts
helm repo update eks

 

helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=my-app-cluster\
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller 

kubectl get deployment -n kube-system aws-load-balancer-controller

 

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/lbc-helm.html

 

Helm을 사용하여 AWS Load Balancer Controller 설치 - Amazon EKS

AWS Management Console에서 정책을 보는 경우 콘솔에 ELB 서비스에 대한 경고는 표시되지만 ELB v2 서비스에 대한 경고는 표시되지 않습니다. 이는 정책의 작업 중 일부가 ELB v2에는 있지만 ELB에는 없기

docs.aws.amazon.com

 

에러

2m33s       Warning   FailedScheduling   pod/aws-load-balancer-controller-68b5c55b54-lkrx2   0/1 nodes are available: 1 Too many pods. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.
2m33s       Warning   FailedScheduling   pod/coredns-f94fb47d9-ntnff                         0/1 nodes are available: 1 Too many pods. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.
2m33s       Warning   FailedScheduling   pod/coredns-f94fb47d9-wxsmp                         0/1 nodes are available: 1 Too many pods. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.

 

pod/aws-load-balancer-controller 1/2만 pod 생성이 되는데 t2.micro로 했을 때 사양이 모자라서 그런 것이다.

 

추가

내가 생성한 서브넷 쪽에 태그를 달아줘야한다.

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/alb-ingress.html