Kubernetes

[ Kans 3 Study - 8w ] 실습 환경 구성

su''@ 2024. 10. 27. 05:04
CloudNetaStudy - Kubernets Networtk 3기 실습 스터디 게시글입니다.
실습 환경 : VPC 1개(퍼블릭 서브넷 2개), EC2 인스턴스 3대 (Ubuntu 22.04 LTS, t3.xlarge - vCPU 4 , Mem 16) , testpc 1대는 t3.small
  • VPC 1개(퍼블릭 서브넷 2개), EC2 인스턴스 4대 (Ubuntu 22.04 LTS, t3.medium - vCPU 2 , Mem 4)
    • CloudFormation 스택 실행 시 파라미터를 기입하면, 해당 정보가 반영되어 배포됩니다.
    • CloudFormation 에 EC2의 UserData 부분(Script 실행)으로 실습 환경에 필요한 기본 설정들이 자동으로 진행됩니다.
    • CloudFormation 스택 배포 ← 실행하는 PC에 aws cli 설치되어 있고, aws configure 자격증명 설정 상태.
      설치 옵션 : kubeadm init ... --skip-phases=addon/kube-proxy
      # YAML 파일 다운로드
      curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-8w.yaml
      
      # CloudFormation 스택 배포
      # aws cloudformation deploy --template-file kans-8w.yaml --stack-name mylab --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region ap-northeast-2
      예시) aws cloudformation deploy --template-file kans-8w.yaml --stack-name mylab --parameter-overrides KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2
      
      ## Tip. 인스턴스 타입 변경 : MyInstanceType=t3.xlarge (vCPU 4, Mem 16)
      예시) aws cloudformation deploy --template-file kans-8w.yaml --stack-name mylab --parameter-overrides MyInstanceType=t3.xlarge KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2
      
      # CloudFormation 스택 배포 완료 후 작업용 EC2 IP 출력
      aws cloudformation describe-stacks --stack-name mylab --query 'Stacks[*].Outputs[0].OutputValue' --output text --region ap-northeast-2
      
      # [모니터링] CloudFormation 스택 상태 : 생성 완료 확인
      while true; do 
        date
        AWS_PAGER="" aws cloudformation list-stacks \
          --stack-status-filter CREATE_IN_PROGRESS CREATE_COMPLETE CREATE_FAILED DELETE_IN_PROGRESS DELETE_FAILED \
          --query "StackSummaries[*].{StackName:StackName, StackStatus:StackStatus}" \
          --output table
        sleep 1
      done
      
      # 배포된 aws ec2 유동 공인 IP 확인
      aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text
      
      # EC2 SSH 접속 : 바로 접속하지 말고, 5~7분 정도 후에 접속 할 것
      ssh -i ~/.ssh/kp-gasida.pem ubuntu@$(aws cloudformation describe-stacks --stack-name mylab --query 'Stacks[*].Outputs[0].OutputValue' --output text --region ap-northeast-2)
      ...
      (⎈|kubernetes-admin@kubernetes:N/A) root@k8s-s:~# <- kubeps 가 나오지 않을 경우 ssh logout 후 다시 ssh 접속 할 것!

    •  EC2 생성 수량 부족 실패 시 : 사용자 계정의 해당 리전에 EC2 최대 갯수 제한 일 경우, Service Quotas (EC2) 증설 요청으로 해결 - 링크 EC2 요청
      • Limit Type(EC2 Instances) ⇒ 서울 리전, All Standard (A, C, D, H, I, M, R, T, Z) Instances, New limit value(40 정도)
    • k8s-s , testpc 각각 접속 후 확인
      • 실습 환경은 K8S v1.30.5 , 노드 OS(Ubuntu 22.04.5) , CNI(Cilium) , kube-proxy 미설치
      • [자신의 PC] 배포된 aws ec2 유동 공인 IP 확인
        aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text

      • k8s-s 접속 후 확인 : ssh -i <> ubuntu@3.38.151.222
        # config rename-context
        kubectl config rename-context "kubernetes-admin@kubernetes" "CiliumLab"
        
        # 기본 정보 확인
        kubectl cluster-info
        
        # node 상태 확인
        kc get node -owide
        NAME     STATUS     ROLES           AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
        k8s-s    NotReady   control-plane   5m54s   v1.30.5   192.168.10.10    <none>        Ubuntu 22.04.5 LTS   6.8.0-1015-aws   containerd://1.7.22
        k8s-w1   NotReady   <none>          5m32s   v1.30.5   192.168.10.101   <none>        Ubuntu 22.04.5 LTS   6.8.0-1015-aws   containerd://1.7.22
        k8s-w2   NotReady   <none>          5m34s   v1.30.5   192.168.10.102   <none>        Ubuntu 22.04.5 LTS   6.8.0-1015-aws   containerd://1.7.22
        
        # kube-proxy 없다!
        kc get pod -A
        NAMESPACE     NAME                            READY   STATUS    RESTARTS   AGE
        kube-system   coredns-55cb58b774-8l84j        0/1     Pending   0          8m17s
        kube-system   coredns-55cb58b774-9prtv        0/1     Pending   0          8m17s
        kube-system   etcd-k8s-s                      1/1     Running   0          8m31s
        kube-system   kube-apiserver-k8s-s            1/1     Running   0          8m31s
        kube-system   kube-controller-manager-k8s-s   1/1     Running   0          8m31s
        kube-system   kube-scheduler-k8s-s            1/1     Running   0          8m31s
        
        hostnamectl
        
        # cilium 의 제대로?된 동작을 위해서 커널 버전은 최소 5.8 이상 권장
        uname -a
        Linux k8s-s 6.8.0-1015-aws #16~204.1-Ubuntu SMP Mon Aug 19 19:38:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

      • testpc 각각 접속 후 확인 : ssh -i <> ubuntu@54.180.243.135
        ip -br -c addr
        hostnamectl 
        curl localhost