이 페이지 개선에 도움 주기
이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.
샘플 애플리케이션 배포
이 주제에서는 샘플 애플리케이션을 생성하고 클러스터에 배포합니다.
사전 조건
-
노드가 하나 이상 있는 기존 Kubernetes 클러스터. 기존 Amazon EKS 클러스터가 없는 경우 Amazon EKS 시작하기 가이드 중 하나를 사용하여 Amazon EKS 클러스터를 배포할 수 있습니다. Windows 애플리케이션을 배포하는 경우 클러스터와 하나 이상의 Amazon EC2 Windows 노드에 대해 Windows 지원이 사용 설정되어 있어야 합니다.
-
컴퓨터에 설치된
Kubectl
. 자세한 내용은 kubectl 및 eksctl 설정 단원을 참조하십시오. -
클러스터와 통신하도록 구성된
Kubectl
. 자세한 내용은 kubeconfig 파일을 생성하여 kubectl을 EKS 클러스터에 연결 단원을 참조하십시오. -
샘플 워크로드를 Fargate에 배포하려는 경우 이름을 변경하지 않는 한 이 자습서에서 생성한 것과 동일한 네임스페이스(
eks-sample-app
)를 포함하는 기존 Fargate 프로파일이 있어야 합니다. 시작 안내서 중 하나를 사용하여 클러스터를 생성한 경우 시작 안내서에서 생성된 프로파일이 이 자습서에서 사용하는 네임스페이스를 지정하지 않기 때문에 새 프로파일을 생성하거나 기존 프로파일에 네임스페이스를 추가해야 합니다. 또한 VPC에 프라이빗 서브넷이 하나 이상 있어야 합니다.
샘플 애플리케이션 배포
다음 단계에서 많은 변수를 변경할 수 있지만 지정된 경우에만 변수 값을 변경하는 것이 좋습니다. Kubernetes Pods, 배포, 서비스를 더 잘 이해하면 다른 값을 변경해 볼 수 있습니다.
-
네임스페이스를 생성합니다. 네임스페이스를 사용하면 Kubernetes에서 리소스를 그룹화할 수 있습니다. 자세한 내용은 Kubernetes 설명서의 네임스페이스
를 참조하세요. 샘플 애플리케이션을 AWS Fargate를 사용한 컴퓨팅 관리 간소화에 배포하려는 경우 시작 시 AWS Fargate를 사용하는 Pods 정의의 namespace
값이eks-sample-app
인지 확인합니다.kubectl create namespace eks-sample-app
-
Kubernetes 배포를 생성합니다. 이 샘플 배포는 퍼블릭 리포지토리에서 컨테이너 이미지를 가져와 클러스터에 3개의 복제본(개별 Pods)을 배포합니다. 자세한 내용은 Kubernetes 설명서의 배포
를 참조하세요. 애플리케이션을 Linux 또는 Windows 노드에 배포할 수 있습니다. Fargate에 배포하는 경우 Linux 애플리케이션만 배포할 수 있습니다. -
다음 콘텐츠를
eks-sample-deployment.yaml
이라는 파일에 저장합니다. 샘플 애플리케이션의 컨테이너는 네트워크 스토리지를 사용하지 않지만 필요한 애플리케이션이 있을 수 있습니다. 자세한 내용은 클러스터에 대한 애플리케이션 데이터 저장 단원을 참조하십시오. -
배포 매니페스트를 클러스터에 적용합니다.
kubectl apply -f eks-sample-deployment.yaml
-
-
서비스를 생성합니다. 서비스를 사용하면 단일 IP 주소 또는 이름을 통해 모든 복제본에 액세스할 수 있습니다. 자세한 내용은 Kubernetes 설명서의 서비스
를 참조하세요. 샘플 애플리케이션에서는 구현되지 않았지만 다른 AWS 서비스와 상호 작용해야 하는 애플리케이션이 있는 경우 Pods에 대한 Kubernetes 서비스 계정을 생성하고 이를 AWS IAM 계정에 연결하는 것이 좋습니다. 서비스 계정을 지정하면 Pods가 다른 서비스와 상호 작용하기 위해 지정한 최소 권한만 갖게 됩니다. 자세한 내용은 서비스 계정에 대한 IAM 역할 단원을 참조하십시오. -
다음 콘텐츠를
eks-sample-service.yaml
이라는 파일에 저장합니다. Kubernetes는 클러스터 내에서만 액세스할 수 있는 자체 IP 주소를 서비스에 할당합니다. 클러스터 외부에서 서비스에 액세스하려면 AWS Load Balancer Controller 로드 밸런서 애플리케이션 또는 네트워크 트래픽을 서비스에 배포합니다. -
서비스 매니페스트를 클러스터에 적용합니다.
kubectl apply -f eks-sample-service.yaml
-
-
eks-sample-app
네임스페이스에 있는 모든 리소스를 봅니다.kubectl get all -n eks-sample-app
예제 출력은 다음과 같습니다.
Windows 리소스를 배포한 경우 다음 출력에서 모든
인스턴스는linux
windows
입니다. 다른예제 값
은 출력과 다를 수 있습니다.NAME READY STATUS RESTARTS AGE pod/eks-sample-
linux
-deployment-65b7669776-m6qxz
1/1 Running 0 27m pod/eks-sample-linux
-deployment-65b7669776-mmxvd
1/1 Running 0 27m pod/eks-sample-linux
-deployment-65b7669776-qzn22
1/1 Running 0 27m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eks-sample-linux
-service ClusterIP10.100.74.8
<none> 80/TCP 32m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/eks-sample-linux
-deployment 3/3 3 3 27m NAME DESIRED CURRENT READY AGE replicaset.apps/eks-sample-linux
-deployment-776d8f8fd8
3 3 3 27m이 출력에는 이전 단계에서 배포된 샘플 매니페스트에 지정된 서비스 및 배포가 표시됩니다. 3개의 Pods도 확인할 수 있습니다. 동일한 매니페스트에
3
replicas
가 지정되었기 때문입니다. Pods에 대한 자세한 내용은 Kubernetes 설명서의 포드를 참조하세요. Kubernetes는 샘플 매니페스트에서 지정되지 않은 경우에도 자동으로 replicaset
리소스를 생성합니다.ReplicaSets
에 대한 자세한 내용은 Kubernetes 설명서의 ReplicaSet를 참조하세요. 참고
Kubernetes는 매니페스트에 지정된 복제본의 수를 유지합니다. 프로덕션 배포이고 Kubernetes가 복제본 수를 수평적 또는 수직적으로 조정하여 Pods의 컴퓨팅 리소스를 조정하도록 하려는 경우 Horizontal Pod Autoscaler를 사용하여 포드 배포 규모 조정 및 Vertical Pod Autoscaler를 사용하여 포드 리소스 조정를 사용합니다.
-
배포된 서비스의 세부 정보를 확인합니다. Windows 서비스를 배포한 경우
를linux
windows
로 바꿉니다.kubectl -n eks-sample-app describe service eks-sample-
linux
-service예제 출력은 다음과 같습니다.
Windows 리소스를 배포한 경우 다음 출력에서 모든
인스턴스는linux
windows
입니다. 다른예제 값
은 출력과 다를 수 있습니다.Name: eks-sample-
linux
-service Namespace: eks-sample-app Labels: app=eks-sample-linux
-app Annotations: <none> Selector: app=eks-sample-linux
-app Type: ClusterIP IP Families: <none> IP:10.100.74.8
IPs:10.100.74.8
Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints:192.168.24.212
:80,192.168.50.185
:80,192.168.63.93
:80 Session Affinity: None Events: <none>이전 출력에서
IP:
의 값은 클러스터 내의 모든 노드 또는 Pod에서 도달할 수 있는 고유한 IP 주소이지만 클러스터 외부에서는 도달할 수 없습니다.Endpoints
의 값은 VPC 내에서 서비스의 일부인 Pods에 할당된 IP 주소입니다. -
이전 단계에서 네임스페이스를 볼 때 출력에 나열된 Pods 중 하나의 세부 정보를 봅니다. Windows 앱을 배포한 경우
를linux
windows
로 바꾸고
을 Pods 중 하나에 대해 반환된 값으로 바꿉니다.776d8f8fd8-78w66
kubectl -n eks-sample-app describe pod eks-sample-
linux
-deployment-65b7669776-m6qxz
간략한 출력
Windows 리소스를 배포한 경우 다음 출력에서 모든
인스턴스는linux
windows
입니다. 다른
는 출력과 다를 수 있습니다.example values
Name: eks-sample-
linux
-deployment-65b7669776-m6qxz
Namespace: eks-sample-app Priority: 0 Node: ip-192-168-45-132
.us-west-2
.compute.internal/192.168.45.132
[...] IP:192.168.63.93
IPs: IP:192.168.63.93
Controlled By: ReplicaSet/eks-sample-linux
-deployment-65b7669776
[...] Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned eks-sample-app/eks-sample-linux
-deployment-65b7669776-m6qxz
to ip-192-168-45-132
.us-west-2
.compute.internal [...]이전 출력에서
IP:
의 값은 노드가 있는 서브넷에 할당된 CIDR 블록에서 Pod에 할당되는 고유한 IP입니다. Pods에 다른 CIDR 블록의 IP 주소를 할당하려면 기본 동작을 변경할 수 있습니다. 자세한 내용은 사용자 지정 네트워킹을 통해 대체 서브넷에 pods 배포 단원을 참조하십시오. Kubernetes 스케줄러가 IP 주소
를 사용하여192.168.45.132
Node
의 Pod를 예약했는지 확인할 수도 있습니다.작은 정보
명령줄을 사용하는 대신 AWS Management Console에서 Pods, 서비스, 배포, 기타 Kubernetes 리소스에 대한 많은 세부 정보를 볼 수 있습니다. 자세한 내용은 AWS Management Console에서 Kubernetes 리소스 보기 단원을 참조하십시오.
-
이전 단계에서 설명한 Pod에서 셸을 실행하여
를 Pods 중 하나의 ID로 바꿉니다.65b7669776-m6qxz
-
Pod 셸에서 이전 단계에서 배포와 함께 설치된 웹 서버의 출력을 봅니다. 서비스 이름만 지정하면 됩니다. 기본적으로 Amazon EKS 클러스터와 함께 배포되는 CoreDNS에 의해 서비스의 IP 주소로 확인됩니다.
-
Pod 셸에서 Pod의 DNS 서버를 봅니다.
-
exit
를 입력하여 Pod에서 연결을 해제합니다. -
샘플 애플리케이션 사용이 끝나면 다음 명령을 사용하여 샘플 네임스페이스, 서비스 및 배포를 제거할 수 있습니다.
kubectl delete namespace eks-sample-app
다음 단계
샘플 애플리케이션을 배포한 후 다음 연습 중 일부를 시도해 볼 수 있습니다.