Cloud Databases 배치를 IBM Cloud Kubernetes Service 애플리케이션에 연결

Cloud Databases "Hello World" Kubernetes 예제 저장소는 다양한 프로그래밍 언어로 작성된 샘플 IBM Cloud® 애플리케이션을 보유하며 Cloud Databases 배치를 IBM Cloud Kubernetes Service 애플리케이션에 연결하는 방법을 자세히 설명합니다.

예제 저장소의 각 Git 분기는 Node.js를 사용하는 JavaScript 또는 python이라는 특정 프로그래밍 언어의 샘플에 해당합니다. 각 폴더의 파일은 데이터베이스 또는 메시지 큐에 해당합니다.

샘플 애플리케이션 사용해 보기

사용하려는 각각의 저장소를 복제하십시오. 예를 들어, 노드 분기를 선택하여 노드 저장소를 복제할 수 있습니다. 그런 다음, 복제 또는 다운로드를 클릭하여 SSH 또는 HTTPS를 통해 복제해야 하는 URL을 가져오십시오. 이 명령은 다음과 같습니다.

git clone -b node git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git

또는 HTTPS를 사용하여 복제:

git clone -b node https://github.com/IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git

분기가 복제되고 나면, 시도하려는 데이터베이스에 대한 적합한 디렉토리를 선택하십시오. 각 데이터베이스에는 IBM Cloud Kubernetes Service에 데이터베이스 또는 메시지 큐 및 애플리케이션을 프로비저닝하고 배치하는 방법에 대한 이러한 지시사항의 사본이 있습니다.

IBM Cloud에서 실행

  1. 아직 IBM Cloud 계정이 없는 경우, 여기서 등록하십시오.

  2. IBM Cloud CLI를 다운로드 및 설치하십시오. IBM Cloud CLI 도구를 사용하면 콘솔 또는 CLI에서 IBM Cloud와 통신할 수 있습니다.

  3. Kubernetes Service CLI 플러그인 및 Container Registry CLI 플러그인 설치

    ibmcloud plugin install container-service
    ibmcloud plugin install container-registry
    

    설치를 확인하려면 다음을 실행하십시오.

    ibmcloud plugin list
    

    다음과 같은 응답을 수신합니다.

    Listing installed plug-ins...
    
    Plugin Name                            Version   Status
    container-registry                     0.1.382
    container-service/kubernetes-service   0.3.34
    
  4. Kubernetes CLI를 다운로드하여 설치하십시오.

    사용 중인 플랫폼의 Kubernetes CLI 다운로드 및 설치에 대한 지시사항을 따르십시오.

  5. CLI 도구에서 IBM Cloud에 연결하고 프롬프트에 따라 로그인하십시오.

    ibmcloud login
    

    연합 사용자 ID가 있는 경우 싱글 사인온 ID로 로그인하려면 ibmcloud login --sso 명령을 사용하십시오.

데이터베이스 작성

이 프로세스는 지정하는 서비스에 표준 데이터베이스 인스턴스를 작성하며 선택한 플랜에 따라 추가 비용이 발생할 수 있습니다.

  1. 다음 명령을 사용하여 리소스 그룹을 대상으로 지정해야 합니다.

    ibmcloud target -g <RESOURCE_GROUP>
    

자세한 정보는 리소스 및 리소스 그룹(ibmcloud 리소스)에 대한 작업을 참조하십시오.

  1. ibmcloud resource service-instance-create 명령을 사용하여 CLI에서 데이터베이스를 작성할 수 있습니다. 이 명령은 서비스 인스턴스 이름, 서비스 이름, 플랜 이름, 위치를 사용합니다.

  2. 서비스 이름은 서비스 Cloud Databases 중 하나인, databases-for-elasticsearch, databases-for-mongodb databases-for-postgresql, databases-for-redis, messages-for-rabbitmq,, 또는 입니다 databases-for-mysql.

    ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
    

데이터베이스 인스턴스 이름을 기억하십시오. 여기서 지역 ID를 찾으십시오.

이전 예제에서는 공유 컴퓨팅 인스턴스를 프로비저닝합니다. 자세한 내용은 호스팅 모델 개요를 참조하세요.

Kubernetes 앱 구성

  1. Kubernetes Service를 작성하십시오.. 클러스터를 설정하려는 위치 및 리소스 그룹을 선택하십시오. 사용할 클러스터 유형을 선택하십시오. 이 예제에는 하나의 작업자 노드와 함께 제공되는 Lite 플랜만 필요합니다. 클러스터가 프로비저닝된 후에는 액세스 탭에서 환경 변수를 설정하고 클러스터에 액세스하기 위한 단계 목록이 제공됩니다. 또한 배치가 정상적으로 프로비저닝되어 실행 중인지 확인할 수 있습니다.

  2. IBM Cloud의 올바른 Kubernetes Service 리소스 그룹을 대상으로 지정하고 있는지 확인하십시오.

    리소스 그룹에 default 이외의 이름이 지정되는 경우 다음 명령을 사용하여 클러스터 리소스 그룹을 대상으로 지정하십시오.

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    

    이 예제에서는 default 리소스 그룹을 사용합니다.

  3. Container Registry에서 자체 개인용 이미지 저장소를 작성하여 애플리케이션의 Docker 이미지를 저장하십시오. 이미지를 개인용으로 설정하려고 하기 때문에 사용자 이미지 저장소에 대한 고유 URL을 작성하는 네임스페이스를 작성해야 합니다.

    ibmcloud cr namespace-add <YOUR_NAMESPACE>
    
  4. 클러스터에 Cloud Databases 배치를 추가하십시오.

    ibmcloud ks cluster service bind --cluster <YOUR_CLUSTER_NAME> --namespace default    --service <INSTANCE_NAME_OR_CRN>
    

    "기본" 네임스페이스는 사용자가 작성한 이미지 저장소 네임스페이스가 아닌 Kubernetes 인스턴스를 말합니다. 마찬가지로 데이터베이스가 공용 및 개인용 엔드포인트를 사용하는 경우 기본적으로 공용 엔드포인트가 사용됩니다. 따라서 개인용 엔드포인트를 선택하려면 먼저 데이터베이스에 대한 서비스 키를 작성하여 Kubernetes가 데이터베이스에 바인드할 때 이 서비스 키를 사용할 수 있도록 해야 합니다. 다음 명령을 사용하여 서비스 키를 설정합니다.

    ibmcloud resource service-key-create <YOUR-PRIVATE-KEY> --instance-name    <INSTANCE_NAME_OR_CRN> --service-endpoint private  
    

    개인용 서비스 엔드포인트는 --service-endpoint private로 선택됩니다. 그런 다음, 명령을 사용하여 개인 엔드포인트를 통해 데이터베이스를 Kubernetes 클러스터에 바인드합니다.

    ibmcloud ks cluster service bind <YOUR_CLUSTER_NAME> default    <INSTANCE_NAME_OR_CRN> --key <YOUR-PRIVATE-KEY>
    
  5. Kubernetes 시크릿이 클러스터 네임스페이스에서 작성되었는지 확인하십시오. Kubernetes는 시크릿을 사용하여 IBM Cloud Identity and Access Management(IAM) API 키 및 컨테이너가 액세스를 얻기 위해 사용하는 URL과 같은 기밀 정보를 저장합니다. 클러스터를 이 세션에 대한 컨텍스트로 설정한 후 배치 인스턴스에 액세스하기 위해 API 키를 가져오려면, 다음 명령을 실행하십시오.

    ibmcloud ks cluster config --cluster <CLUSTER_NAME_OR_ID>
    

    그러면

    kubectl get secrets --namespace=default
    

    your_database_name을 Kubernetes Service에 바인드할 때 생성된 시크릿의 이름을 저장하십시오.

  6. 아직 없는 경우 다음 명령을 사용하여 사용 가능한 언어 중 하나로 된 앱을 콘솔에서 로컬 환경으로 복제하십시오.

    git clone -b <LANGUAGE> git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git
    
  7. 이 새로 작성된 디렉토리로 cd를 수행하고 데이터베이스 폴더로 cd를 수행하십시오. 서비스에 연결, 데이터베이스에서 읽기, 데이터베이스 업데이트를 위한 코드는 server.js에 있습니다. 앱의 기능에 대한 정보는 코드 구조 및 코드 주석을 참조하십시오. public 디렉토리에는 웹 앱에 대한 html, 스타일시트 및 JavaScript가 포함되어 있습니다. 그러나 애플리케이션이 작동하게 하려면, 먼저 이 애플리케이션의 Docker 이미지를 Container Registry에 푸시해야 합니다.

  8. 애플리케이션의 Docker 이미지를 빌드하여 Container Registry에 푸시하십시오. 적절한 지역을 지정하고 컨테이너에 이름을 지정하십시오.

    ibmcloud cr build -t <REGION>.icr.io/<NAMESPACE>/<CONTAINER_NAME> .
    

    다음을 사용하여 컨테이너 레지스트리의 이미지를 볼 수 있습니다.

    ibmcloud cr images
    

    다음 응답과 비슷한 응답을 받습니다.

    REPOSITORY                                TAG      DIGEST        NAMESPACE   CREATED       SIZE    SECURITY STATUS
    <region>.icr.io/mynamespace/container_name latest   81c3959ea657  mynamespace 4 hours ago   28 MB   No Issues
    
  9. Kubernetes 배치 구성 파일 clouddb-deployment.yaml을 업데이트하십시오.

    image 이름을 이전 단계에서 가져온 저장소 이름으로 변경하십시오.

    image: "<REGION>.icr.io/mynamespace/<container_name>" # Edit me
    

    이제 secretKeyRef에서 데이터베이스 배치를 Kubernetes 클러스터에 바인드할 때 작성된 시크릿의 이름과 일치하도록 <db-secret-name>의 이름을 변경하십시오.

    secretKeyRef:
       name: <DB-SECRET-NAME> # Edit me
    

    파일 끝에 있는 service 구성의 경우, nodePort은(는) 애플리케이션에 액세스할 수 있는 포트를 표시합니다. 30000 - 32767 범위의 포트를 사용할 수 있지만 30081이 선택되었습니다. TCP 포트는 8080으로 설정되며 이는 Node.js 애플리케이션이 컨테이너에서 실행되는 포트입니다.

Kubernetes 앱 배치

  1. 애플리케이션을 Kubernetes Service에 배치하십시오. 애플리케이션을 배치할 때 이 애플리케이션은 자동으로 Kubernetes 클러스터에 바인드됩니다.

    kubectl apply -f clouddb-deployment.yaml
    
  2. 애플리케이션의 IP를 가져오십시오.

    ibmcloud ks workers -c <CLUSTER_NAME>
    

    결과는 다음과 같습니다.

    ID                                                 Public IP        PrivateIP      Machine Type   State    Status   Zone    Version
    kube-hou02-pa1a59e9fd92f44af9b4147a27a31db5c4-w1   199.199.99.999   10.76202.188   free           normal   Ready    hou02   1.10.11_1536
    

    이제 포트 30082의 공인 IP에서 애플리케이션에 액세스할 수 있습니다.

    clouddatabases-helloworld 앱은 예제 데이터베이스의 컨텐츠를 표시합니다. 앱이 서비스에 연결되어 있음을 보여주려면 데이터베이스에 몇 가지 단어를 추가하십시오. 단어를 추가할 때 단어가 표시되며 가장 최근에 추가된 단어가 먼저 표시됩니다.

코드 구조

코드 구조
파일 설명
server.js BINDING(신임 정보를 표시하기 위해 Kubernetes 배치 파일에서 작성한 이름)의 신임 정보를 사용하여 데이터베이스에 대한 연결을 설정하고 해당 데이터베이스에서 작성 및 읽기 조작을 처리합니다.
main.js PUT 명령에 대한 사용자 입력을 처리하고 GET 명령의 결과를 구문 분석하여 데이터베이스의 컨텐츠를 출력합니다.

앱이 PUT 및 GET 오퍼레이션을 사용합니다.

  • PUT

    • main.js에서 사용자 입력을 가져옵니다.
    • 데이터베이스에 사용자 입력을 추가합니다.
  • GET

    • 데이터베이스의 컨텐츠를 검색합니다.
    • 데이터베이스 명령의 응답을 main.js로 리턴합니다.