CloudNetaStudy - Kubernets Networtk 3기 실습 스터디 게시글입니다.
실습 환경 : K8S v1.30.x - 현재 ingress-nginix controller 1.30.x까지 버전 호환 테스트 완료
- 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 자격증명 설정 상태.
# YAML 파일 다운로드 curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-6w.yaml # CloudFormation 스택 배포 # aws cloudformation deploy --template-file kans-1w.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-6w.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-6w.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 # EC2 SSH 접속 : 바로 접속하지 말고, 3~5분 정도 후에 접속 할 것 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) ... (⎈|default:N/A) root@k3s-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 정도)
- k3s : Lightweight Kubernetes. Easy to install, half the memory, all in a binary of less than 100 MB - Docs
- rancher 회사에서 IoT 및 edge computing 디바이스 위에서도 동작할 수 있도록 만들어진 경량 k8s 입니다.
- 장점 : 설치가 쉽다, 가볍다(etcd, cloud manager 등 무거운 컴포넌트 제거), 학습용 및 테스트 시 필요한 기능들은 대부분 탑재
- K3s란 무엇인가요?
K3s는 다음과 같은 향상된 기능을 갖춘 완벽한 호환 Kubernetes 배포판입니다.- 단일 바이너리 또는 최소 컨테이너 이미지로 배포됩니다.
- 기본 스토리지 백엔드로 sqlite3를 기반으로 하는 가벼운 데이터 저장소입니다. etcd3, MySQL, Postgres도 사용할 수 있습니다.
- TLS와 옵션의 복잡성을 대부분 처리하는 간단한 런처로 포장되었습니다.
- 가벼운 환경에서는 적절한 기본값을 사용하여 기본적으로 보안을 유지합니다.
- 모든 Kubernetes 제어 평면 구성 요소의 작동은 단일 바이너리와 프로세스에 캡슐화되므로 K3는 인증서 배포와 같은 복잡한 클러스터 작업을 자동화하고 관리할 수 있습니다.
- 외부 종속성은 최소화되었습니다. 유일한 요구 사항은 최신 커널과 cgroup 마운트입니다.
- 간편한 "배터리 포함" 클러스터 생성을 위해 필요한 종속성을 패키지로 제공합니다.
- containerd / cri-dockerd 컨테이너 런타임(CRI)
- 플란넬 컨테이너 네트워크 인터페이스(CNI)
- CoreDNS 클러스터 DNS
- Traefik Ingress 컨트롤러
- ServiceLB 로드 밸런서 컨트롤러
- Kube-router 네트워크 정책 컨트롤러
- 로컬 경로 프로비저너 영구 볼륨 컨트롤러
- Spegel 분산 컨테이너 이미지 레지스트리 미러
- 호스트 유틸리티(iptables, socat 등)
- Architecture - Docs
- 서버(Controlplane) 와 에이전트(Work nodes)
- 서버 노드는 명령을 실행하는 호스트로 정의되며 k3s server, 제어 평면과 데이터 저장소 구성 요소는 K3에 의해 관리됩니다.
- 에이전트 노드는 k3s agent데이터 저장소나 제어 평면 구성 요소 없이 명령을 실행하는 호스트로 정의됩니다.
- 서버와 에이전트 모두 kubelet, 컨테이너 런타임, CNI를 실행합니다. 에이전트 없는 서버를 실행하는 방법에 대한 자세한 내용은 고급 옵션 설명서를 참조하세요.
- Single-server Setup with an Embedded DB : 1대 K3S 서버(경량 DB = SQLite), 필요한 만큼의 K3S Agents(워커 노드들)
- High-Availability K3s : EmbeddedDB, External DB
- 서버(Controlplane) 와 에이전트(Work nodes)
- k3s 기본 정보 확인 : k8s v1.30.x → 현재 ingress-nginx controller 이 1.30.x 까지 버전 호환 테스트 완료 임 (‘24.10.6 일 기준)
- (참고) k3s 설치 옵션 : aws cloudformation 에 ec2 에 userdata 로 실행되어 있음 - Docs , Server , Agent
# Install k3s-server curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC=" --disable=traefik" sh -s - server --token kanstoken --cluster-cidr "172.16.0.0/16" --service-cidr "10.10.200.0/24" --write-kubeconfig-mode 644 # Install k3s-agent curl -sfL https://get.k3s.io | K3S_URL=https://192.168.10.10:6443 K3S_TOKEN=kanstoken sh -s -
- k3s 는 경량화를 위해서 k8s 와 다름
# 노드 확인 kubectl get node -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k3s-s Ready control-plane,master 23m v1.30.5+k3s1 192.168.10.10 <none> Ubuntu 22.04.5 LTS 6.8.0-1015-aws containerd://1.7.21-k3s2 k3s-w1 Ready <none> 23m v1.30.5+k3s1 192.168.10.101 <none> Ubuntu 22.04.5 LTS 6.8.0-1015-aws containerd://1.7.21-k3s2 k3s-w2 Ready <none> 23m v1.30.5+k3s1 192.168.10.102 <none> Ubuntu 22.04.5 LTS 6.8.0-1015-aws containerd://1.7.21-k3s2 k3s-w3 Ready <none> 23m v1.30.5+k3s1 192.168.10.103 <none> Ubuntu 22.04.5 LTS 6.8.0-1015-aws containerd://1.7.21-k3s2 # kubecolor alias 로 kc 설정 되어 있음 kc describe node k3s-s # Taints 없음 kc describe node k3s-w1 # 파드 확인 kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-7b98449c4-jmhgk 1/1 Running 0 21m local-path-provisioner-6795b5f9d8-w6h8s 1/1 Running 0 21m metrics-server-cdcc87586-m4ndt 1/1 Running 0 21m # kubectl top node kubectl top pod -A --sort-by='cpu' kubectl top pod -A --sort-by='memory' kubectl get storageclass # config 정보(위치) 확인 kubectl get pod -v=6 I1006 13:04:02.858105 4325 loader.go:395] Config loaded from file: /etc/rancher/k3s/k3s.yaml I1006 13:04:02.872677 4325 round_trippers.go:553] GET https://127.0.0.1:6443/api/v1/namespaces/default/pods?limit=500 200 OK in 5 milliseconds No resources found in default namespace. cat /etc/rancher/k3s/k3s.yaml export | grep KUBECONFIG # 네트워크 정보 확인 : flannel CNI(vxlan mode), podCIDR ip -c addr ip -c route cat /run/flannel/subnet.env kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' ;echo kubectl describe node | grep -A3 Annotations brctl show # 서비스와 엔드포인트 확인 kubectl get svc,ep -A # iptables 정보 확인 iptables -t filter -S iptables -t nat -S iptables -t mangle -S # tcp listen 포트 정보 확인 ss -tnlp
- (참고) k3s 설치 옵션 : aws cloudformation 에 ec2 에 userdata 로 실행되어 있음 - Docs , Server , Agent
- EC2 생성 수량 부족 실패 시 : 사용자 계정의 해당 리전에 EC2 최대 갯수 제한 일 경우, Service Quotas (EC2) 증설 요청으로 해결 - 링크 EC2 요청
'Kubernetes' 카테고리의 다른 글
[ Kans 3 Study - 6w ] 3. Host 기반 라우팅 / 카나리 업그레이드 (0) | 2024.10.13 |
---|---|
[ Kans 3 Study - 6w ] 2. Ingress (2) | 2024.10.12 |
[ Kans 3 Study - 5w ] 3. External IP / IPVS Proxy 모드 (2) | 2024.10.05 |
[ Kans 3 Study - 5w ] 2. MetalLB (2) | 2024.10.05 |
[ Kans 3 Study - 5w ] 1. LoadBalancer (0) | 2024.10.05 |