1 # 터미널 1 watch -d kubectl get ing,pods,deployment,rs,svc # 터미널 2 kubectl run my-pod --image=nginx kubectl run my-pod --image=nginx --dry-run=client -o yaml > pod.yaml kubectl delete pod/my-pod pod "my-pod" deleted 3 cat < my-pod.yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx-container image: nginx:latest EOF # 이후 실행하세요. kubectl apply -f my-pod.yaml kubectl delete pod/my-pod 5 파드와 서비스를 하나의 YAML 덩어리로 묶어서 cat 명령어로 한 번에 실행하는 방법입니다. Kubernetes에서는 --- 구분자를 사용해 여러 리소스를 한 파일에 정의할 수 있습니다. # name: my-web-pod # name: my-web-service cat < --approve --------- 참고 먼저 목록을 확인하세요. # 퍼블릭 서브넷들에 태그 추가 (공용 태그 포함) aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$(aws eks describe-cluster --name $CLUSTER_NAME --query 'cluster.resourcesVpcConfig.vpcId' --output text)" \ --query "Subnets[*].{ID:SubnetId,Name:Tags[?Key=='Name'].Value | [0]}" \ --output table # 1. 서브넷 ID를 변수에 담기 (본인의 서브넷 ID로 교체하세요) export PUBLIC_SUBNETS="subnet-xxxxxxxxxxxxxx subnet-yyyyyyyyyyyyyy" # 2. 태그 생성 실행 aws ec2 create-tags \ --resources $PUBLIC_SUBNETS \ --tags Key=kubernetes.io/role/elb,Value=1 \ Key=kubernetes.io/cluster/$CLUSTER_NAME,Value=shared # 서브넷 # 클러스터에 연결된 서브넷 ID들을 한 줄로 가져와 변수에 저장 export ALL_SUBNETS=$(aws eks describe-cluster --name $CLUSTER_NAME --query "cluster.resourcesVpcConfig.subnetIds" --output text) # 잘 가져왔는지 확인 echo "내 서브넷 목록: $ALL_SUBNETS" # 서브넷 테크 보기 aws ec2 create-tags \ --resources $ALL_SUBNETS \ --tags Key=kubernetes.io/role/elb,Value=1 \ Key=kubernetes.io/cluster/$CLUSTER_NAME,Value=shared kubectl logs -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller -f 13 # 본인의 AWS 계정 ID와 클러스터 이름을 변수에 담습니다. export CLUSTER_NAME="free-vpc-cluster" export AWS_REGION="ap-northeast-2" export AWS_ACCOUNT_ID="588752323301" # 생성할 정책의 ARN을 변수로 미리 정의합니다. export POLICY_ARN="arn:aws:iam::${AWS_ACCOUNT_ID}:policy/AWSLoadBalancerControllerIAMPolicy" 14 eksctl utils associate-iam-oidc-provider \ --region=${AWS_REGION} \ --cluster=${CLUSTER_NAME} \ --approve eksctl create iamserviceaccount \ --cluster=${CLUSTER_NAME} \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --role-name AmazonEKSLoadBalancerControllerRole \ --attach-policy-arn=${POLICY_ARN} \ --approve \ --region ${AWS_REGION} # 1. IAM 정책 파일 다운로드 및 생성 curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json # 2. iamserviceaccount 생성 (변수 사용) eksctl create iamserviceaccount \ --cluster=${CLUSTER_NAME} \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --role-name AmazonEKSLoadBalancerControllerRole \ --attach-policy-arn=${POLICY_ARN} \ --approve \ --region ${AWS_REGION} 15 # 1. Helm 레포지토리 추가 및 업데이트 helm repo add eks https://aws.github.io/eks-charts helm repo update # 2. 컨트롤러 설치 (변수 사용) helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --set clusterName=${CLUSTER_NAME} \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller # 3. 설치 완료 대기 및 로그 확인 kubectl get pods -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller NAME READY STATUS RESTARTS AGE aws-load-balancer-controller-66b88fc646-gr7fb 1/1 Running 0 32s aws-load-balancer-controller-66b88fc646-vvg27 1/1 Running 0 32s (arn:aws:eks:ap-northeast-2:588752323301:cluster/free-vpc-cluster:N/A) [root@kops-ec2 ~ 16 ingress 배포 테스트 cat < ingress-test.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-alb namespace: default annotations: # 인터넷에서 접속 가능하도록 설정 alb.ingress.kubernetes.io/scheme: internet-facing # 타겟 타입을 IP로 설정 (Fargate나 성능 최적화에 유리) alb.ingress.kubernetes.io/target-type: ip spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Prefix backend: service: # 현재 실행 중인 서비스 이름을 적으세요 (없다면 아래 '2048' 예시 참고) name: service-2048 port: number: 80 EOF # 파일 생성 후 바로 배포 kubectl apply -f ingress-test.yaml 17 79 k delete pod/my-web-pod 80 k delete pod/aws-web-pod 18 # 2048 cat < game-2048.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deployment-2048 namespace: default spec: replicas: 2 selector: matchLabels: app: game-2048 template: metadata: labels: app: game-2048 spec: containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: service-2048 namespace: default spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app: game-2048 EOF # 파일 생성 후 즉시 배포 kubectl apply -f game-2048.yaml 19 cat < 삭제 kubectl delete ingress test-alb kubectl delete -f game-2048.yaml helm uninstall aws-load-balancer-controller -n kube-system eksctl delete iamserviceaccount \ --cluster=${CLUSTER_NAME} \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --region ${AWS_REGION} aws iam delete-policy --policy-arn ${POLICY_ARN} eksctl delete cluster --name ${CLUSTER_NAME} --region ${AWS_REGION}