1 cd mkdir 6 cd 6 1 (topasvga@eks-demo:N/A) [root@kops-ec2 6]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints 2 vi deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: 2048-deployment spec: replicas: 5 # <--- 이 숫자를 3에서 5로 변경하세요. selector: matchLabels: app: 2048-game template: metadata: labels: app: 2048-game spec: containers: - name: 2048-container image: alexwhen/docker-2048 # 사용하셨던 이미지 ports: - containerPort: 80 3 kubectl apply -f deployment.yaml 4 watch -d kubectl get svc,deploy,rs,pods NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/2048-deployment 0/5 3 0 4m22s NAME DESIRED CURRENT READY AGE replicaset.apps/2048-deployment-5bfc7bd79b 4 4 0 4m22s replicaset.apps/2048-deployment-789b488fd8 3 3 0 0s NAME READY STATUS RESTARTS AGE pod/2048-deployment-5bfc7bd79b-4wmdt 0/1 ImagePullBackOff 0 4m22s pod/2048-deployment-5bfc7bd79b-6tbdl 0/1 ImagePullBackOff 0 4m22s pod/2048-deployment-5bfc7bd79b-cgfkl 0/1 ImagePullBackOff 0 4m22s pod/2048-deployment-5bfc7bd79b-nsk24 0/1 ImagePullBackOff 0 4m22s pod/2048-deployment-789b488fd8-5j9qr 0/1 ContainerCreating 0 0s pod/2048-deployment-789b488fd8-pb986 0/1 ContainerCreating 0 0s pod/2048-deployment-789b488fd8-szzbx 0/1 ContainerCreating 0 0s 5 (topasvga@eks-demo:N/A) [root@kops-ec2 6]# kubectl describe pod 2048-deployment-5bfc7bd79b-4wmdt Name: 2048-deployment-5bfc7bd79b-4wmdt Namespace: default Priority: 0 Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 104s default-scheduler Successfully assigned default/2048-deployment-5bfc7bd79b-4wmdt to ip-192-168-12-38.ap-northeast-2.compute.internal Normal Pulling 14s (x4 over 104s) kubelet Pulling image "alexwhen/docker-2048" Warning Failed 13s (x4 over 102s) kubelet Failed to pull image "alexwhen/docker-2048": rpc error: code = Unimplemented desc = failed to pull and unpack image "docker.io/alexwhen/docker-2048:latest": not implemented: media type "application/vnd.docker.distribution.manifest.v1+prettyjws" is no longer supported since containerd v2.1, please rebuild the image as "application/vnd.docker.distribution.manifest.v2+json" or "application/vnd.oci.image.manifest.v1+json" Warning Failed 13s (x4 over 102s) kubelet Error: ErrImagePull Normal BackOff 2s (x6 over 102s) kubelet Back-off pulling image "alexwhen/docker-2048" Warning Failed 2s (x6 over 102s) kubelet Error: ImagePullBackOff (topasvga@eks-demo:N/A) [root@kops-ec2 6]# 메시지를 보면 다음과 같은 내용이 있습니다: media type "...manifest.v1+prettyjws" is no longer supported since containerd v2.1 즉, 이미지가 만들어진 지 너무 오래되어 최신 컨테이너 환경(containerd)에서 읽을 수 없는 구식 규격을 사용하고 있다는 뜻입니다. 6 apiVersion: apps/v1 kind: Deployment metadata: name: 2048-deployment labels: app: 2048-game spec: replicas: 5 selector: matchLabels: app: 2048-game template: metadata: labels: app: 2048-game spec: containers: - name: 2048-container # 최신 규격을 지원하는 안정적인 이미지로 교체되었습니다. image: public.ecr.aws/l6m2t8p7/docker-2048:latest ports: - containerPort: 80 kubectl apply -f deployment.yaml 7 서비스 vi service.yaml apiVersion: v1 kind: Service metadata: name: game-2048-service # 이름을 영문(game)으로 시작하도록 수정했습니다. spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: 2048-game # Deployment의 labels와 일치해야 합니다. type: LoadBalancer kubectl apply -f service.yaml ------------------------------------------ kubectl scale deployment 2048-deployment --replicas=4 ------------------ kubectl set image deployment/2048-deployment 2048-container=public.ecr.aws/l6m2t8p7/docker-2048:latest kubectl rollout status deployment/2048-deployment kubectl rollout history deployment/2048-deployment (topasvga@eks-demo:N/A) [root@kops-ec2 6]# kubectl rollout history deployment/2048-deployment deployment.apps/2048-deployment REVISION CHANGE-CAUSE 1 2 4. 핵심: 문제가 생겼을 때 되돌리기 (Rollback) 만약 새로 업데이트한 이미지에 버그가 있다면, 단 한 줄의 명령어로 이전 상태로 즉시 복구할 수 있습니다. 이것이 롤아웃의 핵심입니다 Every 2.0s: kubectl get svc,deploy,rs,pods Sat Feb 14 21:47:15 2026 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/game-2048-service LoadBalancer 10.100.170.126 a5b4ac29849144be2ad7df557ffd4ca4-570546123.ap-northeast-2.elb.amazonaws.com 80:30098/TCP 8m59s service/kubernetes ClusterIP 10.100.0.1 443/TCP 71m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/2048-deployment 3/4 2 3 18m NAME DESIRED CURRENT READY AGE replicaset.apps/2048-deployment-5bfc7bd79b 2 2 0 18m replicaset.apps/2048-deployment-789b488fd8 3 3 3 13m NAME READY STATUS RESTARTS AGE pod/2048-deployment-5bfc7bd79b-k72zn 0/1 ImagePullBackOff 0 2m43s pod/2048-deployment-5bfc7bd79b-tw2hw 0/1 ImagePullBackOff 0 2m43s pod/2048-deployment-789b488fd8-5j9qr 1/1 Running 0 13m pod/2048-deployment-789b488fd8-6r58k 1/1 Running 0 13m pod/2048-deployment-789b488fd8-mdgl4 1/1 Running 0 13m kubectl rollout undo deployment/2048-deployment 에러가 나던 5bfc... 포드들이 즉시 삭제됩니다. 789b... 포드들이 다시 원래 원하는 개수(5개)만큼 늘어납니다. 결국 다시 모든 서비스가 Running 상태로 돌아옵니다. 5 히스토리 kubectl rollout history deployment/2048-deployment deployment.apps/2048-deployment REVISION CHANGE-CAUSE 3 4 Every 2.0s: kubectl get svc,deploy,rs,pods Sat Feb 14 21:48:34 2026 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/game-2048-service LoadBalancer 10.100.170.126 a5b4ac29849144be2ad7df557ffd4ca4-570546123.ap-northeast-2.elb.amazonaws.com 80:30098/TCP 10m service/kubernetes ClusterIP 10.100.0.1 443/TCP 72m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/2048-deployment 4/4 4 4 19m NAME DESIRED CURRENT READY AGE replicaset.apps/2048-deployment-5bfc7bd79b 0 0 0 19m replicaset.apps/2048-deployment-789b488fd8 4 4 4 15m NAME READY STATUS RESTARTS AGE pod/2048-deployment-789b488fd8-5j9qr 1/1 Running 0 15m pod/2048-deployment-789b488fd8-6r58k 1/1 Running 0 15m pod/2048-deployment-789b488fd8-mdgl4 1/1 Running 0 15m pod/2048-deployment-789b488fd8-p4jd9 1/1 Running 0 58s