Kubernetes
Minikube
EBS 볼륨 사이즈 변경
curl -s https://raw.githubusercontent.com/youngwjung/aws-tools/main/resize.sh \ | bash /dev/stdin 30Minikube 설치
{ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube }클러스터 생성
minikube start실행중인 Pod 확인
minikube kubectl -- get pod --all-namespaces데모 애플리케이션 배포
minikube kubectl -- run nginx --image=nginx서비스 엔드포인트 생성
minikube kubectl -- expose pod nginx --port=80 --type=NodePort서비스 엔드포인트 및 포트 확인
minikube service nginx서비스 엔드포인트로 접속되는지 확인
curl $(minikube service nginx --url)클러스터 삭제
minikube delete
쿠버네티스 클러스터 생성
실습 환경 생성
{ cd ~/environment/container-labs git pull terraform init terraform apply --target=module.kubernetes --auto-approve }인스턴스 정보 확인
terraform show -json |\ jq -r '.values.root_module.child_modules | .[].resources | .[] | select(.address | contains("module.kubernetes.aws_instance")) | .name + ": " + .values.public_ip'SSH 비밀번호 확인
terraform show -json |\ jq -r '.values.root_module.child_modules | .[].resources | .[] | select(.address == "module.kubernetes.random_password.this").values.result'새로운 터미널을 열고 첫번째 컨트롤 플레인 노드로 사용할 인스턴스로 SSH 연결
ssh root@CP_IP_ADDRESS시스템 구동에 필요한 라이브러리 설치
sudo apt update && sudo apt install -y \ curl apt-transport-https vim git wget gnupg2 net-tools \ software-properties-common lsb-release ca-certificates uidmap컨테이너 런타임 구동에 필요한 overlay와 br_netfilter 커널 모듈 불러오기
{ cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter }컨테이너 런타임 구동에 필요한 커널 파라미터 설정
{ cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system }containerd 설치
{ sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update && apt install -y containerd.io sudo containerd config default | tee /etc/containerd/config.toml sudo sed -e 's/SystemdCgroup = false/SystemdCgroup = true/g' -i /etc/containerd/config.toml sudo systemctl restart containerd }쿠버네티스 설치 및 구동에 필요한 바이너리 설치
{ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update && sudo apt install -y kubelet=1.28.1-00 kubeadm=1.28.1-00 kubectl=1.28.1-00 }/etc/hosts파일에 아래와 같은 라인 추가 - CP_IP_ADDRESS는 CP 노드 IP주소CP_IP_ADDRESS k8scp예를들어 CP의 IP주소가 123.45.67.89라면 아래처럼 입력
123.45.67.89 k8scp클러스터 설정 파일 생성
cat << EOF | tee kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: 1.28.1 controlPlaneEndpoint: "k8scp:6443" networking: podSubnet: 192.168.0.0/16 EOF컨트롤 플레인 노드 구성
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.outkubeconfig 파일 복사
{ mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config }kubeconfig 파일 확인
cat ~/.kube/config실행중인 Pod 확인
kubectl get pod --all-namespacesPending 상태의 Pod의 상세내용 확인
kubectl describe pod \ $(kubectl get pod -A --field-selector=status.phase=Pending -o=jsonpath='{.items[0].metadata.name}') \ -n $(kubectl get pod -A --field-selector=status.phase=Pending -o=jsonpath='{.items[0].metadata.namespace}')노드 목록 확인
kubectl get nodeCP 노드 상태 확인
kubectl describe node cpkubelet 로그 확인
sudo journalctl -u kubelet -n 10 --no-pagerCNI 플러그인 설치
kubectl apply -f \ https://raw.githubusercontent.com/youngwjung/lf-training/main/LFS458/v1.28.1/SOLUTIONS/s_03/cilium-cni.yaml실행중인 Pod 확인
kubectl get pod -ACP 노드 상태 확인
kubectl describe node cpkubectl 명령어에 대한 bash completion 설정
{ echo 'source <(kubectl completion bash)' >>~/.bashrc source <(kubectl completion bash) }새로운 터미널을 열고 워커 노드로 사용할 인스턴스로 SSH 연결
ssh root@WORKER_IP_ADDRESS시스템 구동에 필요한 라이브러리 설치
sudo apt update && sudo apt install -y \ curl apt-transport-https vim git wget gnupg2 net-tools \ software-properties-common lsb-release ca-certificates uidmap컨테이너 런타임 구동에 필요한 overlay와 br_netfilter 커널 모듈 불러오기
{ cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter }컨테이너 런타임 구동에 필요한 커널 파라미터 설정
{ cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system }containerd 설치
{ sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update && apt install -y containerd.io sudo containerd config default | tee /etc/containerd/config.toml sudo sed -e 's/SystemdCgroup = false/SystemdCgroup = true/g' -i /etc/containerd/config.toml sudo systemctl restart containerd }쿠버네티스 설치 및 구동에 필요한 바이너리 설치
{ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update && sudo apt install -y kubelet=1.28.1-00 kubeadm=1.28.1-00 kubectl=1.28.1-00 }/etc/hosts파일에 아래와 같은 라인 추가 - CP_IP_ADDRESS는 CP 노드 IP주소CP_IP_ADDRESS k8scp컨트롤 플레인 노드에 연결된 터미널로 이동
Worker 노드 조인 명령어 생성
kubeadm token create --print-join-command --ttl 0Worker 노드에 연결된 터미널로 이동해서 위의 명령어를 실행하고 나온 명령어를 실행
컨트롤 플레인 노드에 연결된 터미널로 이동
노드 상태 확인
kubectl get no
샘플 애플리케이션 배포
Deployment 생성
kubectl create deployment nginx --image=nginxDeployment 상태 확인
kubectl get deployPod가 생성되었는지 확인
kubectl get pod생성된 NGINX Deployment 상태 상세 확인
kubectl describe deployment nginx클러스터에 발생한 이벤트 확인
kubectl get events --sort-by='.metadata.creationTimestamp'Deployment에 속하는 Pod 삭제
kubectl delete pod -l app=nginxPod가 존재하는지 확인
kubectl get podService 생성
kubectl expose deploy nginx --port 80NGINX 서비스 확인
kubectl get svc nginxNGINX 서비스에 연결된 Endpoints 확인
kubectl get ep nginx실행중인 Pod의 IP 주소 확인
kubectl get pod -l app=nginx -o wide서비스 엔드포인트 및 포트 확인
kubectl get svc nginxNGINX 서비스의 ClusterIP에 HTTP 요청
curl $(kubectl get svc nginx -o=jsonpath='{.spec.clusterIP}')NGINX 서비스에 연결된 Endpoints 주소로 HTTP 요청
curl $(kubectl get ep nginx -o=jsonpath='{.subsets[0].addresses[0].ip}:{.subsets[0].ports[0].port}')NGINX Deployment의 Replica 갯수를 3개로 변경
kubectl scale deployment nginx --replicas=3Pod가 추가로 생성됐는지 확인
kubectl get pod -l app=nginx -o wideNGINX 서비스에 연결된 Endpoints 확인
kubectl get ep nginxNGNIX 서비스를 NodePort 타입으로 변경
kubectl patch svc nginx --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'NGINX Service 엔드포인트 및 포트 확인
kubectl get svc nginx웹브라우저에서
ANY_NODE_IP:SERVICE_NODE_PORT로 접속되는지 확인 - 아래 명령어로 주소 확인 가능echo "$(curl -s ifconfig.io):$(kubectl get svc nginx -o=jsonpath='{.spec.ports[0].nodePort}')"NGINX Deployment의 Replica 갯수를 0개로 변경
kubectl scale deployment nginx --replicas=0웹브라우저에서
ANY_NODE_IP:SERVICE_PORT로 접속되는지 확인NGINX Deployment의 Replica 갯수를 2개로 변경
kubectl scale deployment nginx --replicas=2웹브라우저에서
ANY_NODE_IP:SERVICE_PORT로 접속되는지 확인리소스 삭제
{ kubectl delete deployment nginx kubectl delete svc nginx }
고가용성 쿠버네티스 클러스터 구성
HAProxy로 SSH 접속
ssh root@HAPROXY_IP_ADDRESSHAProxy 설치
sudo apt update && sudo apt install -y haproxyHAProxy 설정파일
/etc/haproxy/haproxy.cfg에 아래의 라인들을 추가 - CP_IP_ADDRESS에 CP 노드의 IP 주소를 넣으세요.frontend kubernetes-cp mode tcp option tcplog bind *:6443 default_backend kubernetes-cp-nodes backend kubernetes-cp-nodes mode tcp balance roundrobin server cp1 CP_IP_ADDRESS:6443 check listen stats bind :9999 mode http stats enable stats hide-version stats uri /statsHAProxy 데몬을 재시작하고 상태 확인
{ sudo systemctl restart haproxy sudo systemctl status haproxy --no-pager }CP 노드에 연결된 터미널로 이동
/etc/hosts파일에서 k8scp에 지정된 IP주소를 HAProxy IP 주소로 변경HAPROXY_IP_ADDRESS k8scpWorker 노드에 연결된 터미널로 이동
/etc/hosts파일에서 k8scp에 지정된 IP주소를 HAProxy IP 주소로 변경HAPROXY_IP_ADDRESS k8scp웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속
CP 노드에 연결된 터미널로 이동
kubectl 명령어로 API 호출
{ kubectl get node kubectl get pod -A }HAProxy 통계 페이지를 리프레시해서 트래픽 정보가 업데이트 되는지 확인
SecondCP로 SSH 접속
ssh root@SECOND_CP_IP_ADDRESS시스템 구동에 필요한 라이브러리 설치
sudo apt update && sudo apt install -y \ curl apt-transport-https vim git wget gnupg2 net-tools \ software-properties-common lsb-release ca-certificates uidmap컨테이너 런타임 설치
{ cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf overlay br_netfilter EOF sudp modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update && apt install -y containerd.io sudo containerd config default | tee /etc/containerd/config.toml sudo sed -e 's/SystemdCgroup = false/SystemdCgroup = true/g' -i /etc/containerd/config.toml sudo systemctl restart containerd }쿠버네티스 설치
{ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update && apt install -y kubelet=1.28.1-00 kubeadm=1.28.1-00 kubectl=1.28.1-00 }/etc/hosts파일에 아래와 같은 라인 추가HAPROXY_IP_ADDRESS k8scpThirdCP로 SSH 접속
ssh root@THIRD_CP_IP_ADDRESS14번부터 17번 단계를 실행
CP 노드에 연결된 터미널로 이동
컨트롤 플레인 조인 명령어 생성
echo "sudo kubeadm join k8scp:6443 --control-plane \ --token $(sudo kubeadm token create) \ --discovery-token-ca-cert-hash sha256:$(openssl x509 -pubkey \ -in /etc/kubernetes/pki/ca.crt | openssl rsa \ -pubin -outform der 2>/dev/null | openssl dgst \ -sha256 -hex | grep -oE '[A-z0-9]+$') \ --certificate-key $(sudo kubeadm init phase upload-certs --upload-certs| tail -1)"위에서 생성한 명령어를 SecondCP 노드 및 ThirdCP 노드에 실행
HAProxy 노드에 연결된 터미널로 이동
HAProxy 설정파일
/etc/haproxy/haproxy.cfg을 아래와 같이 수정... ... backend kubernetes-cp-nodes mode tcp balance roundrobin server cp1 CP_IP_ADDRESS:6443 check server cp2 SECOND_CP_IP_ADDRESS:6443 check server cp3 THIRD_CP_IP_ADDRESS:6443 checkHAProxy 데몬을 재시작하고 상태 확인
{ sudo systemctl restart haproxy sudo systemctl status haproxy --no-pager }웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 위에서 추가한 노드들의 연결 상태 확인
CP 노드에 연결된 터미널로 이동
Node 목록 확인
kubectl get nodekubectl 명령어로 몇가지 API 호출을 실행하고 HAProxy 통계사이트에서 로드가 분산되는지 확인
for i in {1..10}; do kubectl get pod; done
고가용성 테스트
실행중인 ETCD Pod 확인
kubectl get pod -n kube-system -l component=etcdETCD Pod 로그 확인
kubectl -n kube-system logs etcd-secondcp | grep leader실행중인 ETCD Pod의 IP 주소 확인
kubectl get pod -n kube-system -l component=etcd -o wideETCD 클러스터의 멤버 목록 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member listETCD 클러스터 멤버 목록을 환경변수로 지정
{ export ETCD_ENDPOINTS=$(kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w json \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member list \ | jq -r '.members | map(.clientURLs[]) | join(",")') echo $ETCD_ENDPOINTS }ETCD 클러스터의 리더 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint statusETCD 클러스터의 각 멤버별 상태 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint healthETCD 클러스터의 리더 Pod가 배포된 노드에 가서 kubelet 및 컨테이너 런타임 정지- CP 노드의 ETCD가 가장 먼저 구성되었기 때문에 일반적으로 CP 노드에 배포된 ETCD가 리더
{ sudo systemctl stop kubelet sudo crictl --runtime-endpoint=unix:///run/containerd/containerd.sock \ stop $(sudo crictl --runtime-endpoint=unix:///run/containerd/containerd.sock ps -q) sudo systemctl stop containerd.service }ETCD Pod 로그 확인
kubectl -n kube-system logs etcd-secondcp | grep leader웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 위에서 노드들의 연결 상태 확인
ETCD 클러스터의 리더가 변경되었는지 확인
kubectl -n kube-system exec -it etcd-secondcp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint statusETCD 클러스터 각 멤버별 상태 확인
kubectl -n kube-system exec -it etcd-secondcp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint healthNode 상태 확인
kubectl get nodeCP 노드에서 kubelet 및 컨테이너 런타임을 재실행
{ sudo systemctl start containerd.service sudo systemctl start kubelet }웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 위에서 노드들의 연결 상태 확인
노드 상태 확인
kubectl get node모든 Pod가 정상적으로 실행되고 있는지 확인
kubectl get pod -A -o wideETCD 클러스터의 리더가 다시 변경되었는지 확인
kubectl -n kube-system exec -it etcd-secondcp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint statusETCD 클러스터 각 멤버별 상태 확인
kubectl -n kube-system exec -it etcd-secondcp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint healthCloud9에 연결된 터미널로 이동해서 리소스 삭제
{ cd ~/environment/container-labs terraform destroy --target=module.kubernetes --auto-approve }

Amazon EKS
eksctl 설치
{ cd ~/environment 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 버전 확인
eksctl version현재 로그인된 IAM 자격증명 확인
aws sts get-caller-identityEKS 클러스터 생성
eksctl create cluster \ --name mycluster \ --nodes-min=2 \ --nodes-max=5 \ --region ap-northeast-2kubectl 설치
{ curl -LO "https://dl.k8s.io/release/v1.27.1/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl echo 'source <(kubectl completion bash)' >>~/.bashrc source <(kubectl completion bash) }Node 목록 확인
kubectl get node쿠버네티스 클러스터 버전 확인
kubectl version --shortDeployment 생성
kubectl create deployment nginx --image=nginx --replicas=3생성된 Pod 확인
kubectl get poService 생성
kubectl expose deployment nginx --port 80 --type LoadBalancer생성된 Service 확인
kubectl get svc nginx생성된 ELB 주소 확인
kubectl get svc nginx \ -o=jsonpath='{.status.loadBalancer.ingress[0].hostname}{"\n"}'웹브라우저에서 위에서 확인한 URL로 접속
리소스 삭제
{ kubectl delete deploy nginx kubectl delete svc nginx }데모 애플리케이션 배포 - https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#run-and-expose-php-apache-server
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: php-apache spec: selector: matchLabels: app: php-apache replicas: 1 template: metadata: labels: app: php-apache spec: containers: - name: php-apache image: k8s.gcr.io/hpa-example ports: - containerPort: 80 resources: limits: cpu: 2 requests: cpu: 1 --- apiVersion: v1 kind: Service metadata: name: php-apache labels: app: php-apache spec: ports: - port: 80 selector: app: php-apache EOFPod의 리소스 사용량 확인
kubectl top pod -l app=php-apacheMetrics Server 설치 - https://github.com/kubernetes-sigs/metrics-server#kubernetes-metrics-server
kubectl apply -f \ https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlPod의 리소스 사용량 확인
kubectl top pod -l app=php-apache데모 애플리케이션에 부하를 발생시키는 Pod 생성
kubectl create deploy load-generator \ --image=busybox:1.28 \ --replicas=10 \ -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"Pod의 리소스 사용량 확인
kubectl top pod -l app=php-apacheHPA 생성
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=5위에서 생성한 HPA 상태 확인
kubectl get hpa php-apacheHPA 상태 모니터링
kubectl get hpa php-apache -wCtrl+C를 입력해서 HPA 모니터링을 중지하고 Pod가 생성되었는지 확인
kubectl get pod -l app=php-apachePod의 리소스 사용량 확인
kubectl top pod -l app=php-apachePending 상태의 Pod가 있다면 아래의 명령어를 통해서 그 이유를 확인
kubectl describe pod \ $(kubectl get pod -o=jsonpath='{.items[?(@.status.phase=="Pending")].metadata.name}')Cluster Autoscaler 설치
{ export CLUSTER_NAME=$(kubectl get node \ -o=jsonpath='{.items[0].metadata.labels.alpha\.eksctl\.io\/cluster-name}') export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) export ASG_NAME=$(aws autoscaling describe-auto-scaling-groups --query \ "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='$CLUSTER_NAME']].AutoScalingGroupName" --output text) eksctl utils associate-iam-oidc-provider --region=ap-northeast-2 \ --cluster=$CLUSTER_NAME --approve eksctl create iamserviceaccount \ --cluster=$CLUSTER_NAME \ --namespace=kube-system \ --name=cluster-autoscaler \ --attach-policy-arn=arn:aws:iam::aws:policy/AmazonEC2FullAccess \ --override-existing-serviceaccounts \ --approve \ --region ap-northeast-2 kubectl apply -f \ https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml kubectl -n kube-system patch deployment cluster-autoscaler --type=json \ -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/command", "value": [ "./cluster-autoscaler", "--v=4", "--stderrthreshold=info", "--cloud-provider=aws", "--skip-nodes-with-local-storage=false", "--expander=least-waste", "--node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/'${CLUSTER_NAME}'", "--balance-similar-node-groups", "--skip-nodes-with-system-pods=false" ]}]' }Cluster Autoscaler 로그 확인
kubectl -n kube-system logs deploy/cluster-autoscalerPending 상태였던 Pod가 생성 되었는지 확인
kubectl get pod -l app=php-apacheNode 갯수 확인
kubectl get nodePod의 리소스 사용량 확인
kubectl top pod -l app=php-apache데모 애플리케이션에 부하를 발생시키는 Pod 삭제
kubectl delete deploy load-generatorPod의 리소스 사용량 확인
kubectl top pod -l app=php-apacheHPA 상태 확인
kubectl get hpa php-apacheHPA 상세 내용 확인
kubectl describe hpa php-apache데모 애플리케이션의 복제본 갯수는 1개로 강제 지정
kubectl scale deployment php-apache --replicas=1Pod가 삭제 되었는지 확인
kubectl get pod -l app=php-apache데모 애플리케이션 삭제
kubectl delete deploy php-apachePod가 삭제 되었는지 확인
kubectl get pod -l app=php-apacheNode가 삭제 되는지 확인
kubectl get nodeCluster Autoscaler 로그 확인
kubectl -n kube-system logs deploy/cluster-autoscalerEKS 클러스터 삭제
eksctl delete cluster --name mycluster --region ap-northeast-2
Last updated