참고:
- 이 사용지침서에서는 Oracle Cloud에 접근해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure 무료 계층 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값이 사용됩니다. 랩을 완료한 후에는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
Oracle Cloud Infrastructure에서 Arm 기반 Kubernetes 클러스터 시작하기
이 사용지침서에서는 OCI(Oracle Cloud Infrastructure)에서 Ampere A1 컴퓨트 플랫폼을 사용하는 Arm 기반 Kubernetes 클러스터를 생성하는 방법을 설명합니다. 또한 주요 웹 컨테이너인 Apache Tomcat을 kubernetes 클러스터에 배포합니다. 이 자습서의 방법을 사용하여 Arm 기반 kubernetes 클러스터와 x86(Intel 및 AMD) 기반 클러스터 간에 원활하게 이식 가능한 애플리케이션 배포를 생성할 수 있습니다.
소개
목표
이 자습서에서는 다음을 수행합니다.
- Ampere A1 컴퓨팅을 기반으로 하는 Kubernetes 클러스터(OKE)를 생성합니다.
- 클러스터에 Apache Tomcat을 배포합니다.
- x86 및 Arm 기반 kubernetes 클러스터 간에 원활하게 이식 가능한 배포를 생성합니다.
- Tomcat 웹 컨테이너에 Java 응용 프로그램 및 마이크로 서비스를 배치합니다.
Ampere A1 컴퓨팅 플랫폼이란 무엇인가
Ampere Altra CPU 기반의 Ampere A1 컴퓨팅 플랫폼은 에지 장치에서 클라우드 데이터 센터까지 확장할 수 있는 워크로드를 개발하는 기업 및 애플리케이션 개발자를 위한 세대별 변화를 나타냅니다. 이 플랫폼의 고유한 설계는 컴퓨트 코어 내에서 리소스 경합이 없으므로 일관되고 예측 가능한 성능을 제공하며 격리 및 보안을 개선합니다. Oracle Cloud Infrastructure의 새로운 컴퓨트 구성은 Altra CPU의 강력한 성능과 OCI 기반의 보안, 확장성, 서비스 시스템을 결합하는 탁월한 플랫폼을 제공합니다.
환경에 Arm 아키텍처 소개
응용 프로그램 개발 프로세스에 Arm 구조를 도입하면 대부분의 경우 개발 워크플로우가 동일하게 유지됩니다. 현재 사용하는 도구와 프로세스는 원활하게 진행되며 개발 워크스테이션 설정은 동일하게 유지됩니다. 이는 일반적으로 매우 전문적인 도구를 사용하여 특정 CPU 기능을 대상으로 하는 낮은 레벨의 시스템 응용 프로그램입니다. 대부분의 경우 워크플로우의 빌드 또는 패키징 단계가 약간 변경되어 Arm 아키텍처를 지원할 수 있습니다. 기존 워크플로우를 분석하여 플랫폼별 빌드 또는 패키징 단계가 있는지 확인합니다.
- 플랫폼별 빌드 단계는 C/C++, Go, Rust와 같은 컴파일된 언어의 경우 컴파일러 옵션이 될 수 있습니다. 이 경우 일반적으로 응용 프로그램의 x86 버전과 함께 Arm에 대해 응용 프로그램을 컴파일하는 빌드 단계를 추가합니다. 바이트 코드 언어, JIT(Just-In-Time) 컴파일 언어 또는 Java, JavaScript, TypeScript, Python 또는 Ruby와 같은 해석된 언어를 사용하는 경우 일반적으로 컴파일 시간 플래그나 옵션이 없습니다. 이러한 언어는 플랫폼별 실행 파일 바이너리를 생성하지 않고, 여러 플랫폼에서 동일한 소스 코드를 실행하는 Arm에 대한 Java 또는 Node.js 런타임과 같은 플랫폼별 런타임을 사용합니다.
- 플랫폼별 패키징에는 애플리케이션을 Docker 이미지, 커스터마이징 VM 이미지 또는 플랫폼별 배포 아티팩트로 패키징할 수 있습니다. 이 경우 Arm 특정 애플리케이션 패키지를 생성하기 위해 추가 단계로 빌드 프로세스를 수정하려고 합니다. 예를 들어 컨테이너 이미지의 경우 Arm 시스템에 배치할 애플리케이션 이미지의 버전이 있어야 합니다. 컨테이너 이미지 형식은 여러 구조를 지원하므로 각 플랫폼의 컨테이너 런타임은 해당 이미지를 인출하고 애플리케이션을 실행하기만 하면 됩니다. 다중 단계 이미지 및 이미지 구축 방법에 대해 자세히 알아보려면 Docker 블로그를 참조하십시오.
Arm 기반 Kubernetes 클러스터 생성
Container Engine for Kubernetes는 사용이 간편하며 OCI Cloud Shell과 결합되어 로컬 환경을 설정하지 않고도 완벽한 제어 기능을 사용할 수 있습니다. 시작하려면 OCI에 새 Kubernetes 클러스터를 생성하십시오.
-
Oracle Cloud 콘솔의 탐색 메뉴에서 개발자 서비스로 이동하고 Kubernetes 클러스터를 누릅니다.
-
클러스터 생성을 누릅니다. 빠른 생성 옵션을 사용하여 기본값을 사용하거나 사용자정의 생성 옵션을 사용하여 고급 설정을 지정할 수 있습니다. 여기서 선택하는 기본값은 큰 시작이므로 빠른 생성을 사용합니다.
-
Create Cluster 페이지에서 실행할 Kubernetes 버전, 클러스터 노드 수 및 구성과 같은 몇 가지 기본 구성 옵션을 선택합니다. 이 튜토리얼에서는 노드에 대한 Ampere A1 모양을 선택합니다.
주 표시된 대로 노드에 대한
VM.Standard.A1.Flex
구성을 선택합니다.클러스터의 이름과 구획을 지정할 수도 있습니다. 가시성 유형은 클러스터의 노드가 인터넷(예: SSH를 통해)에서 연결할 수 있는지 여부를 나타냅니다. 개인 네트워크에 유지하고 공용 네트워크에서 배스천 또는 점프 호스트를 사용하여 액세스 경로를 제공하는 것이 더 일반적입니다. 여기서는 노드를 비공개로 유지하는 기본값을 선택합니다.
-
클러스터 생성을 누르면 워크플로우가 필요한 모든 리소스 및 클러스터 자체를 생성하기 시작합니다.
지원 리소스가 생성되면 클러스터 세부정보 페이지가 표시됩니다. 몇 분 안에 클러스터가 생성되고 활성화됩니다.
-
클러스터 상태가 Active(활성)이면 Access Cluster(클러스터 액세스) 버튼을 눌러 클러스터에 액세스하는 방법을 확인합니다.
-
Cloud Shell 옵션을 선택합니다. Cloud Shell은 완전한 기능을 갖춘 온라인 터미널 환경입니다. Cloud Shell에는 Kubernetes 클러스터와의 상호작용에 필요한 모든 툴이 있으며, 로컬 개발 환경을 구성하지 않고도 가장 빠른 시작 방법입니다.
페이지에서 직접 Cloud Shell을 실행할 수 있습니다. Cloud Shell에 대한 액세스는 항상 콘솔 맨 위에 제공되어 빠르게 액세스할 수 있습니다.
이 페이지에는 Cloud Shell 내에서 실행할 명령도 포함됩니다. 이 명령은 OCI CLI를 사용하여 kubeconfig 파일을 만듭니다.
kubectl
와 같은 Kubernetes 클라이언트는 클러스터에 쉽게 액세스할 수 있는 구성 파일로 작업할 수 있습니다. 이러한 파일을 일반적으로 kubeconfig 파일이라고 합니다. 일반적으로 이 구성 파일은 ~/.kube에 있습니다. 단일 구성 파일에는 여러 클러스터에 대한 액세스 구성이 포함될 수 있습니다.주 OCI CLI는 Cloud Shell 환경에서 이미 설치되어 구성되었습니다.
-
Cloud Shell을 실행한 후 명령을 복사하여 Cloud Shell에 붙여 넣으십시오. Kubernetes용 표준 명령줄 클라이언트는 kubectl이며, Cloud Shell 환경에 사전 설치됩니다.
이제 클러스터와 상호 작용하고 클러스터 노드를 볼 수 있는지 살펴보겠습니다.
-
다음 명령을 Cloud Shell로 복사하고 실행합니다.
kubectl get nodes -o wide
클러스터의 노드 수에 따라 다음 예와 유사한 출력이 표시됩니다. 커널 버전은
aarch64
(Arm 64비트)용 Oracle Linux를 실행 중임을 보여줍니다.NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 10.0.10.229 Ready node 3d7h v1.19.7 10.0.10.229 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11 10.0.10.29 Ready node 3d7h v1.19.7 10.0.10.29 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11 10.0.10.87 Ready node 3d7h v1.19.7 10.0.10.87 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11
이제 완전히 작동하는 Kubernetes 클러스터가 있고 이를 사용하는 툴을 설정했으므로 모든 Kubernetes 작업 로드를 이 클러스터에 배포할 수 있습니다.
Kubernetes 클러스터에 원활하게 배포
이제 Arm 기반 kubernetes 클러스터에 컨테이너화된 워크로드를 배포할 수 있습니다. 컨테이너 이미지는 특정 구조를 위해 작성됩니다. Docker 또는 Buildah와 같은 컨테이너 툴은 이러한 이미지와 배포를 원활하게 관리하는 방법을 제공합니다. 이 예에서는 주요 Java 웹 컨테이너인 Apache Tomcat을 kubernetes 클러스터에 배치합니다. docker 런타임은 Arm에서 실행할 때 arm64v8
이미지를 인출하고, x86 아키텍처에서 실행할 경우 amd64
이미지를 인출합니다. 따라서 두 아키텍처에 대한 애플리케이션 이미지를 구축하는 경우 이식 가능한 kubernetes 배포 매니페스트를 원활하게 만들 수 있습니다.
먼저 아키텍처 중립적 배포 매니페스트를 만듭니다. 컨테이너 런타임이 정확한 아키텍처를 감지하고 적절한 이미지를 풀링할 수 있으므로 매니페스트는 아키텍처 특정 컨테이너를 참조해서는 안됩니다. 매니페스트를 만들려면 아래 시작을 실행합니다. tomcat.yaml
라는 새 파일을 생성합니다.
cat <<EOF > tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
labels:
app: tomcat
spec:
replicas: 3
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9
ports:
- containerPort: 8080
volumeMounts:
- name: app-volume
mountPath: /usr/local/tomcat/webapps/
volumes:
- name: app-volume
configMap:
name: app-bundle
---
apiVersion: v1
kind: Service
metadata:
name: tomcat
labels:
app: tomcat
spec:
ports:
- port: 80
name: http
targetPort: 8080
selector:
app: tomcat
type: LoadBalancer
EOF
이 매니페스트에는 다음 객체 및 작업이 포함됩니다.
- 이름이
tomcat
이고 레이블이app: tomcat
인 배포 객체입니다. - 배치에는 3개의 복제본이 있습니다.
- 배치의 POD에는
tomcat:9
라는 단일 컨테이너가 있습니다. 매니페스트는 구조를 지정하지 않으므로 모든 아키텍처에서 유효하게 만듭니다. Docker는 런타임 시 적합한 아키텍처를 지원하는 이미지를 풀링합니다. - 볼륨 객체는 ConfigMap에서 만들어지고 컨테이너에 마운트됩니다. 이 ConfigMap은 나중에 생성되며 애플리케이션을 포함합니다.
- 매니페스트는 또한 서비스 객체를 포함하며 LoadBalancer를 통한 배치를 노출합니다.
-
Apache Tomcat에 대한 샘플 응용 프로그램을 다운로드하고 ConfigMap으로 만듭니다.
wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war kubectl create configmap app-bundle --from-file sample.war
주 ConfigMap을 사용하여 응용 프로그램을 마운트하는 방법은 편의용이며 운용 응용 프로그램에서 사용하면 안됩니다.
-
매니페스트를 배치합니다. 그러면 배치 및 서비스를 포함하여 kubernetes 객체가 생성됩니다. 배치를 만들 때 도커 런타임은 teh 암 구조에서 실행 중인 것을 감지하고 Apache Tomcat 컨테이너의 Arm 변형을 자동으로 선택합니다. 컨테이너에 배치된 Java 응용 프로그램은 플랫폼에 포함되어 있으므로 모든 구조에 동일한
.war
파일을 배치할 수 있습니다.kubectl apply -f tomcat.yaml
-
배치 상태를 확인하십시오.
kubectl get deploy,svc
다음과 유사한 출력이 표시됩니다.
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tomcat 2/2 2 2 9s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d9h service/tomcat LoadBalancer 10.96.120.212 <pending> 80:32547/TCP 9s
이는 Tomcat이 Arm 기반 kubernetes 클러스터에 성공적으로 배치되었으며 Java 웹 애플리케이션을 제공하고 있음을 보여줍니다. 사용한 배치 매니페스트는 아키텍처와 연관되지 않으며 x86 및 Arm 기반 클러스터에 사용할 수 있습니다.
-
선택적으로 실행하여 자세한 노드 레벨 세부 정보를 얻을 수 있습니다.
kubectl get nodes -o wide kubectl describe node <node_name>
해당 노드에서 일정이 잡힌 아키텍처 및 POD를 비롯하여 노드에 대한 자세한 정보가 표시됩니다.
LoadBalancer에 대한 외부 IP 주소를 사용할 수 있는 경우(몇 분 정도 걸릴 수 있음) 웹 브라우저를
http://<your_loadbalancer_ip_address>/sample
으로 가리켜 배포를 방문할 수 있습니다.
다음 단계
공식 arm64v8
이미지의 도커 허브 저장소를 방문하면 Arm 기반 kubernetes 클러스터에 더 많은 워크로드를 배포하실 수 있습니다.여기
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 찾아보거나 Oracle Learning YouTube channel에서 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 변경하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Get started with Arm-based Kubernetes clusters in Oracle Cloud Infrastructure
F50329-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.