참고:

Oracle Cloud Infrastructure에서 Arm 기반 Kubernetes 클러스터 시작하기

이 사용지침서에서는 OCI(Oracle Cloud Infrastructure)에서 Ampere A1 컴퓨트 플랫폼을 사용하는 Arm 기반 Kubernetes 클러스터를 생성하는 방법을 설명합니다. 또한 주요 웹 컨테이너인 Apache Tomcat을 kubernetes 클러스터에 배포합니다. 이 자습서의 방법을 사용하여 Arm 기반 kubernetes 클러스터와 x86(Intel 및 AMD) 기반 클러스터 간에 원활하게 이식 가능한 애플리케이션 배포를 생성할 수 있습니다.

소개

목표

이 자습서에서는 다음을 수행합니다.

Ampere A1 컴퓨팅 플랫폼이란 무엇인가

Ampere Altra CPU 기반의 Ampere A1 컴퓨팅 플랫폼은 에지 장치에서 클라우드 데이터 센터까지 확장할 수 있는 워크로드를 개발하는 기업 및 애플리케이션 개발자를 위한 세대별 변화를 나타냅니다. 이 플랫폼의 고유한 설계는 컴퓨트 코어 내에서 리소스 경합이 없으므로 일관되고 예측 가능한 성능을 제공하며 격리 및 보안을 개선합니다. Oracle Cloud Infrastructure의 새로운 컴퓨트 구성은 Altra CPU의 강력한 성능과 OCI 기반의 보안, 확장성, 서비스 시스템을 결합하는 탁월한 플랫폼을 제공합니다.

환경에 Arm 아키텍처 소개

응용 프로그램 개발 프로세스에 Arm 구조를 도입하면 대부분의 경우 개발 워크플로우가 동일하게 유지됩니다. 현재 사용하는 도구와 프로세스는 원활하게 진행되며 개발 워크스테이션 설정은 동일하게 유지됩니다. 이는 일반적으로 매우 전문적인 도구를 사용하여 특정 CPU 기능을 대상으로 하는 낮은 레벨의 시스템 응용 프로그램입니다. 대부분의 경우 워크플로우의 빌드 또는 패키징 단계가 약간 변경되어 Arm 아키텍처를 지원할 수 있습니다. 기존 워크플로우를 분석하여 플랫폼별 빌드 또는 패키징 단계가 있는지 확인합니다.

Arm 기반 Kubernetes 클러스터 생성

Container Engine for Kubernetes는 사용이 간편하며 OCI Cloud Shell과 결합되어 로컬 환경을 설정하지 않고도 완벽한 제어 기능을 사용할 수 있습니다. 시작하려면 OCI에 새 Kubernetes 클러스터를 생성하십시오.

  1. Oracle Cloud 콘솔의 탐색 메뉴에서 개발자 서비스로 이동하고 Kubernetes 클러스터를 누릅니다.

  2. 클러스터 생성을 누릅니다. 빠른 생성 옵션을 사용하여 기본값을 사용하거나 사용자정의 생성 옵션을 사용하여 고급 설정을 지정할 수 있습니다. 여기서 선택하는 기본값은 큰 시작이므로 빠른 생성을 사용합니다.

    그림 생성 클러스터에 대한 설명

  3. Create Cluster 페이지에서 실행할 Kubernetes 버전, 클러스터 노드 수 및 구성과 같은 몇 가지 기본 구성 옵션을 선택합니다. 이 튜토리얼에서는 노드에 대한 Ampere A1 모양을 선택합니다.

    표시된 대로 노드에 대한 VM.Standard.A1.Flex 구성을 선택합니다.

    그림 생성 워크플로우에 대한 설명

    클러스터의 이름과 구획을 지정할 수도 있습니다. 가시성 유형은 클러스터의 노드가 인터넷(예: SSH를 통해)에서 연결할 수 있는지 여부를 나타냅니다. 개인 네트워크에 유지하고 공용 네트워크에서 배스천 또는 점프 호스트를 사용하여 액세스 경로를 제공하는 것이 더 일반적입니다. 여기서는 노드를 비공개로 유지하는 기본값을 선택합니다.

  4. 클러스터 생성을 누르면 워크플로우가 필요한 모든 리소스 및 클러스터 자체를 생성하기 시작합니다.

    지원 리소스가 생성되면 클러스터 세부정보 페이지가 표시됩니다. 몇 분 안에 클러스터가 생성되고 활성화됩니다.

  5. 클러스터 상태가 Active(활성)이면 Access Cluster(클러스터 액세스) 버튼을 눌러 클러스터에 액세스하는 방법을 확인합니다.

  6. Cloud Shell 옵션을 선택합니다. Cloud Shell은 완전한 기능을 갖춘 온라인 터미널 환경입니다. Cloud Shell에는 Kubernetes 클러스터와의 상호작용에 필요한 모든 툴이 있으며, 로컬 개발 환경을 구성하지 않고도 가장 빠른 시작 방법입니다.

    그림 Access Cloudshell에 대한 설명

    페이지에서 직접 Cloud Shell을 실행할 수 있습니다. Cloud Shell에 대한 액세스는 항상 콘솔 맨 위에 제공되어 빠르게 액세스할 수 있습니다.

    이 페이지에는 Cloud Shell 내에서 실행할 명령도 포함됩니다. 이 명령은 OCI CLI를 사용하여 kubeconfig 파일을 만듭니다. kubectl와 같은 Kubernetes 클라이언트는 클러스터에 쉽게 액세스할 수 있는 구성 파일로 작업할 수 있습니다. 이러한 파일을 일반적으로 kubeconfig 파일이라고 합니다. 일반적으로 이 구성 파일은 ~/.kube에 있습니다. 단일 구성 파일에는 여러 클러스터에 대한 액세스 구성이 포함될 수 있습니다.

    OCI CLI는 Cloud Shell 환경에서 이미 설치되어 구성되었습니다.

  7. Cloud Shell을 실행한 후 명령을 복사하여 Cloud Shell에 붙여 넣으십시오. Kubernetes용 표준 명령줄 클라이언트는 kubectl이며, Cloud Shell 환경에 사전 설치됩니다.

    이제 클러스터와 상호 작용하고 클러스터 노드를 볼 수 있는지 살펴보겠습니다.

  8. 다음 명령을 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

이 매니페스트에는 다음 객체 및 작업이 포함됩니다.

  1. 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을 사용하여 응용 프로그램을 마운트하는 방법은 편의용이며 운용 응용 프로그램에서 사용하면 안됩니다.

  2. 매니페스트를 배치합니다. 그러면 배치 및 서비스를 포함하여 kubernetes 객체가 생성됩니다. 배치를 만들 때 도커 런타임은 teh 암 구조에서 실행 중인 것을 감지하고 Apache Tomcat 컨테이너의 Arm 변형을 자동으로 선택합니다. 컨테이너에 배치된 Java 응용 프로그램은 플랫폼에 포함되어 있으므로 모든 구조에 동일한 .war 파일을 배치할 수 있습니다.

    kubectl apply -f tomcat.yaml
    
  3. 배치 상태를 확인하십시오.

    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 기반 클러스터에 사용할 수 있습니다.

  4. 선택적으로 실행하여 자세한 노드 레벨 세부 정보를 얻을 수 있습니다.

    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를 참조하십시오.