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에서 실행
-
아직 IBM Cloud 계정이 없는 경우, 여기서 등록하십시오.
-
IBM Cloud CLI를 다운로드 및 설치하십시오. IBM Cloud CLI 도구를 사용하면 콘솔 또는 CLI에서 IBM Cloud와 통신할 수 있습니다.
-
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 -
Kubernetes CLI를 다운로드하여 설치하십시오.
사용 중인 플랫폼의 Kubernetes CLI 다운로드 및 설치에 대한 지시사항을 따르십시오.
-
CLI 도구에서 IBM Cloud에 연결하고 프롬프트에 따라 로그인하십시오.
ibmcloud login연합 사용자 ID가 있는 경우 싱글 사인온 ID로 로그인하려면
ibmcloud login --sso명령을 사용하십시오.
데이터베이스 작성
이 프로세스는 지정하는 서비스에 표준 데이터베이스 인스턴스를 작성하며 선택한 플랜에 따라 추가 비용이 발생할 수 있습니다.
-
다음 명령을 사용하여 리소스 그룹을 대상으로 지정해야 합니다.
ibmcloud target -g <RESOURCE_GROUP>
자세한 정보는 리소스 및 리소스 그룹(ibmcloud 리소스)에 대한 작업을 참조하십시오.
-
ibmcloud resource service-instance-create명령을 사용하여 CLI에서 데이터베이스를 작성할 수 있습니다. 이 명령은 서비스 인스턴스 이름, 서비스 이름, 플랜 이름, 위치를 사용합니다. -
서비스 이름은 서비스 Cloud Databases 중 하나인,
databases-for-elasticsearch,databases-for-mongodbdatabases-for-postgresql,databases-for-redis,messages-for-rabbitmq,, 또는 입니다databases-for-mysql.ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
데이터베이스 인스턴스 이름을 기억하십시오. 여기서 지역 ID를 찾으십시오.
이전 예제에서는 공유 컴퓨팅 인스턴스를 프로비저닝합니다. 자세한 내용은 호스팅 모델 개요를 참조하세요.
Kubernetes 앱 구성
-
Kubernetes Service를 작성하십시오.. 클러스터를 설정하려는 위치 및 리소스 그룹을 선택하십시오. 사용할 클러스터 유형을 선택하십시오. 이 예제에는 하나의 작업자 노드와 함께 제공되는 Lite 플랜만 필요합니다. 클러스터가 프로비저닝된 후에는 액세스 탭에서 환경 변수를 설정하고 클러스터에 액세스하기 위한 단계 목록이 제공됩니다. 또한 배치가 정상적으로 프로비저닝되어 실행 중인지 확인할 수 있습니다.
-
IBM Cloud의 올바른 Kubernetes Service 리소스 그룹을 대상으로 지정하고 있는지 확인하십시오.
리소스 그룹에
default이외의 이름이 지정되는 경우 다음 명령을 사용하여 클러스터 리소스 그룹을 대상으로 지정하십시오.ibmcloud target -g <RESOURCE_GROUP_NAME>이 예제에서는
default리소스 그룹을 사용합니다. -
Container Registry에서 자체 개인용 이미지 저장소를 작성하여 애플리케이션의 Docker 이미지를 저장하십시오. 이미지를 개인용으로 설정하려고 하기 때문에 사용자 이미지 저장소에 대한 고유 URL을 작성하는 네임스페이스를 작성해야 합니다.
ibmcloud cr namespace-add <YOUR_NAMESPACE> -
클러스터에 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> -
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=defaultyour_database_name을 Kubernetes Service에 바인드할 때 생성된 시크릿의 이름을 저장하십시오. -
아직 없는 경우 다음 명령을 사용하여 사용 가능한 언어 중 하나로 된 앱을 콘솔에서 로컬 환경으로 복제하십시오.
git clone -b <LANGUAGE> git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git -
이 새로 작성된 디렉토리로
cd를 수행하고 데이터베이스 폴더로cd를 수행하십시오. 서비스에 연결, 데이터베이스에서 읽기, 데이터베이스 업데이트를 위한 코드는server.js에 있습니다. 앱의 기능에 대한 정보는 코드 구조 및 코드 주석을 참조하십시오.public디렉토리에는 웹 앱에 대한 html, 스타일시트 및 JavaScript가 포함되어 있습니다. 그러나 애플리케이션이 작동하게 하려면, 먼저 이 애플리케이션의 Docker 이미지를 Container Registry에 푸시해야 합니다. -
애플리케이션의 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 -
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 앱 배치
-
애플리케이션을 Kubernetes Service에 배치하십시오. 애플리케이션을 배치할 때 이 애플리케이션은 자동으로 Kubernetes 클러스터에 바인드됩니다.
kubectl apply -f clouddb-deployment.yaml -
애플리케이션의 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로 리턴합니다.