Red Hat OpenShift on IBM Cloud로 마이크로서비스 배치
이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.
이 학습서에서는 Red Hat OpenShift on IBM Cloud 에 애플리케이션을 배치하는 방법을 보여줍니다. Red Hat OpenShift on IBM Cloud 에서는 개발자가 소프트웨어 애플리케이션을 배치하고 시스템 관리자가 프로덕션에서 애플리케이션을 스케일링하고 관찰할 수 있도록 우수한 경험을 제공합니다.
목표
- 배포 Red Hat OpenShift on IBM Cloud 무리
- 마이크로서비스 배치
- 마이크로서비스 스케일링
- Operator를 사용하여 IBM Cloudant 및 마이크로서비스에 대한 바인드 배치
- IBM Cloud Logs를 사용하여 클러스터 관찰
- IBM Cloud Monitoring를 사용하여 클러스터 관찰
- 개발자가 URL 리포지토리로 Red Hat OpenShift 애플리케이션을 초기화하면 빌더, 배포 구성 및 서비스가 생성됩니다.
- 빌더는 소스를 복제하고 이미지를 생성한 다음 Red Hat OpenShift 레지스트리에 푸시하여 DeploymentConfig 프로비저닝합니다.
- 사용자가 프론트 엔드 애플리케이션에 액세스합니다.
- IBM Cloudant 데이터베이스 인스턴스가 IBM Cloud Operator Service를 통해 프로비저닝됩니다.
- 백엔드 애플리케이션이 IBM Cloud Operator Binding을 사용하여 데이터베이스에 연결됩니다.
- IBM Cloud Logs가 프로비저닝되고 에이전트가 배치됩니다.
- Monitoring가 프로비저닝되고 에이전트가 배치됩니다.
- 관리자가 IBM Cloud Logs 및 Monitoring을 사용하여 앱을 모니터합니다.
아래 단계 중 일부를 수행하는 스크립트가 있습니다. README.md에
설명되어 있습니다. 문제가 발생하여 다시 시작하려면 destroy.sh
스크립트를 실행하고 복구 단계에 해당하는 스크립트를 순차적으로 진행하십시오.
시작하기 전에
이 튜토리얼에는 다음 항목이 필요합니다.
- IBM Cloud CLI
- IBM Cloud Kubernetes Service 플러그인(
kubernetes-service
)
- IBM Cloud Kubernetes Service 플러그인(
- OpenShift와 상호작용하는 데 필요한
oc
.
튜토리얼 시작하기 안내서에는 사용자 운영 체제에 맞게 이 도구를 다운로드하고 설치하기 위한 지시사항이 있습니다.
이러한 도구가 설치되지 않도록 하려면 Cloud ShellIBM Cloud 콘솔에서 oc version
을(를) 사용하여 Red Hat OpenShift on IBM Cloud CLI의 버전이 자신의 클러스터 버전(4.12.x
)에 대응하는지 확인하십시오. 대응하지 않는 경우에는 이러한 지시사항에
따라 대응하는 버전을 설치하십시오.
Red Hat OpenShift on IBM Cloud 클러스터 작성
Red Hat OpenShift on IBM Cloud Red Hat OpenShift 클러스터는 개발 라이프사이클 운영에 일관성과 유연성을 제공하는 컨테이너 오케스트레이션을 기반으로 구축되어 엔터프라이즈 워크로드를 클러스터에 빠르고 안전하게 컨테이너화 및 배포할 수 있습니다. Kubernetes
이 절에서는 2개의 작업자 노드로 구성된 1개의 구역에 Red Hat OpenShift on IBM Cloud 클러스터를 프로비저닝합니다.
- IBM Cloud® 카탈로그 에서 Red Hat OpenShift on IBM Cloud 클러스터를 작성하십시오.
- 오케스트레이션 서비스를 Red Hat OpenShift on IBM Cloud 의 4.12.x 버전으로 설정합니다.
- OCP 인타이틀먼트를 선택하십시오.
- 인프라에서 클래식 또는 VPC를 선택하십시오.
- VPC 인프라에 있는 Red Hat OpenShift의 경우에는 하나의 VPC 및 서브넷이 있어야 Red Hat OpenShift on IBM Cloud 클러스터를 작성할 수 있습니다. 다음 항목을 염두에 두고 원하는 VPC를 작성하거나 검사하십시오(표준 VPC 클러스터 작성에
제공된 지시사항 참조).
- 이 튜토리얼에 사용할 수 있는 한 개의 서브넷. 서브넷의 구역과 이름을 기록해 두십시오.
- 퍼블릭 게이트웨이가 서브넷에 연결됨
- 기존 Cloud Object Storage 서비스를 선택하거나, 필요한 경우 해당 서비스를 작성하십시오
- VPC 인프라에 있는 Red Hat OpenShift의 경우에는 하나의 VPC 및 서브넷이 있어야 Red Hat OpenShift on IBM Cloud 클러스터를 작성할 수 있습니다. 다음 항목을 염두에 두고 원하는 VPC를 작성하거나 검사하십시오(표준 VPC 클러스터 작성에
제공된 지시사항 참조).
- 위치에서 다음을 수행하십시오.
- VPC 인프라에 있는 Red Hat OpenShift의 경우
- 리소스 그룹을 선택하십시오.
- 적용할 수 없는 구역을 선택 취소하십시오.
- 원하는 구역에서 원하는 서브넷 이름을 확인하고, 없는 경우 편집 연필을 클릭하여 원하는 서브넷 이름을 선택하십시오.
- 클래식 인프라에 있는 Red Hat OpenShift의 경우 표준 클래식 클러스터 작성 지시사항을 따르십시오.
- 리소스 그룹을 선택하십시오.
- 지역을 선택하십시오.
- 가용성으로 단일 구역을 선택하십시오.
- 데이터 센터를 선택하십시오.
- VPC 인프라에 있는 Red Hat OpenShift의 경우
- 작업자 풀에서 다음을 수행하십시오.
- 유형으로 4개 vCPU 16GB 메모리를 선택하십시오.
- 이 튜토리얼에서는 데이터 센터당 2개 작업자 노드를 선택하십시오(클래식만 해당: 로컬 디스크 암호화 유지).
- 통합아래에서 로깅 및 Monitoring 을 사용으로 설정하고 구성하십시오.
- 리소스 세부 정보에서
<your-initials>
를 자신의 이니셜로 대체하여 클러스터 이름을 <사용자 이니셜>-myopenshiftcluster로 설정합니다. - 작성 을 클릭하여 Red Hat OpenShift on IBM Cloud 클러스터를 프로비저닝하십시오.
앞에서 선택한 리소스 그룹을 기록해 두십시오. 이 실습의 모든 리소스에 동일한 이 리소스 그룹이 사용됩니다.
Cloud Shell 초기화
Red Hat OpenShift 컨테이너 플랫폼 CLI는 애플리케이션 관리를 위한 명령어와 시스템의 각 구성 요소와 상호 작용할 수 있는 하위 수준의 도구를
제공합니다. CLI는 oc
명령을 통해 사용 가능합니다.
명령행 도구를 설치하지 않으려는 경우 권장되는 접근 방식은 IBM Cloud Shell을(를) 사용하는 것입니다.
IBM Cloud Shell은 브라우저를 통해 액세스할 수 있는 클라우드 기반 쉘 작업공간입니다. 이는 전체 IBM Cloud CLI, 그리고 앱, 리소스 및 인프라를 관리하는 데 사용할 수 있는 여러 플러그인 및 도구로 사전 구성되어 있습니다.
이 단계에서는 IBM Cloud 쉘을 사용하여 본인에게 지정된 클러스터를 가리키도록 oc
를 구성합니다.
-
클러스터가 준비되면 오른쪽 상단에 있는 단추(계정 옆)를 클릭하여 Cloud 쉘을 실행하십시오. 이 창/탭을 닫지 마십시오.
-
OpenShift CLI의 버전을 확인하십시오.
oc version
버전이 최소 4.12.x 이상이어야 하며, 그렇지 않은 경우 다음 지침에 따라 최신 버전을 설치하세요.
-
모든 클러스터를 나열할 때 자신의 클러스터가 표시되는지 확인하십시오.
ibmcloud oc clusters
-
<귀하의 클러스터 이름> 자리 표시자를 대체하여
oc
명령 환경을 초기화합니다:ibmcloud oc cluster config -c <your-cluster-name> --admin
-
oc
명령이 작동하는지 확인하십시오.oc get projects
애플리케이션 배치
이 섹션에서는 Red Hat OpenShift 기능을 시연하기 위해 환자 건강 기록 시스템용 사용자 인터페이스인 patient-health-frontend
이라는 Node.js Express 애플리케이션을 배포합니다. 샘플 애플리케이션 GitHub 저장소는 https://github.com/IBM-Cloud/patient-health-frontend에서 찾을 수 있습니다.
프로젝트 작성
프로젝트는 DevOps 팀에서 관리하는 리소스 콜렉션입니다. 관리자는 프로젝트를 작성하고, 개발자는 빌드하여 배치할 수 있는 애플리케이션을 작성할 수 있습니다.
- 선택한 클러스터에서 OpenShift 웹 콘솔 버튼을 클릭하여 Red Hat OpenShift 웹 콘솔로 이동합니다.
- 왼쪽 탐색 분할창의 관리자 퍼스펙티브에서 홈 > 프로젝트 보기를 선택하여 모든 프로젝트를 표시하십시오.
- 프로젝트 작성을 클릭하여 새 프로젝트를 작성하십시오. 팝업 이름에서
example-health
프로젝트의 표시 이름 및 설명을 비워 두고 작성을 클릭하십시오. - 새 프로젝트의 프로젝트 세부사항 페이지가 표시됩니다. 컨텍스트가 왼쪽은 관리자 > 홈 > 프로젝트이고 윗쪽은 프로젝트 > 프로젝트 세부사항 > example-health입니다.
애플리케이션 빌드 및 배치
- 관리자에서 개발자 퍼스펙티브로 전환하십시오. 컨텍스트는 왼쪽이 개발자 > +추가, 맨 위가 프로젝트: example-health여야 합니다.
프로젝트 보기 - 이제 Git에서 가져오기를 선택하여 애플리케이션을 빌드하고 배치하십시오.
- Git 저장소 URL 필드에
https://github.com/IBM-Cloud/patient-health-frontend.git
저장소를 입력하십시오.- 초록색 체크 표시
Builder image detected
및 Node.js 16 (UBI 8) 에 유의하십시오. - 빌더 이미지가 자동으로 언어 Node.js를 감지하는 것을 볼 수 있습니다. 감지되지 않은 경우에는 제공된 목록에서
Node.js
을(를) 선택하십시오. - 빌더 이미지 버전은 기본값으로 유지됩니다.
- 애플리케이션 이름: 모든 문자를 삭제하고 비워 두십시오. 기본적으로 이름으로 설정됩니다.
- 이름: patient-health-frontend.
- 자원 유형 링크를 클릭하고 DeploymentConfig 를 선택하십시오.
- 다른 선택사항에 대해서는 기본값을 그대로 두십시오.
- 초록색 체크 표시
- 창의 맨 아래에 있는 작성을 클릭하여 애플리케이션을 빌드하고 배치하십시오.
애플리케이션 보기
-
방금 배치한 앱이 표시되어야 합니다. 개발자 퍼스펙티브에서 example-health 프로젝트의 토폴로지 보기에 있습니다. 프로젝트에 있는 모든 애플리케이션이 표시됩니다.
-
노드 patient-health-frontend를 선택하여
DeploymentConfig
의 세부사항보기를 표시하십시오. patient-health-frontend 옆에 있는 DC를 주목하십시오. 팟(Pod), 빌드, 서비스 및 경로가 표시됩니다.앱 세부사항 - 팟(Pod): Node.js 애플리케이션 컨테이너
- 빌드: Node.js 소스 코드에서 Docker 이미지를 작성하고 Red Hat OpenShift 컨테이너 레지스트리에 배치한 후 배치 구성을 시작하는 자동 생성 빌드입니다.
- 서비스: 팟(Pod)을 서비스로 그룹화하고 청취할 포트를 정의하여 팟(Pod) 액세스 방법을 Red Hat OpenShift에 알립니다.
- 라우트: IBM Cloud 네트워크에서 제공하는 LoadBalancer를 사용하여 서비스를 외부에 공개합니다.
-
완성된 빌드 옆에 있는 로그 보기를 클릭하십시오. Node.js 애플리케이션에 대한 종속 항목을 설치하고 Docker 이미지를 빌드/푸시하기 위해 Red Hat OpenShift에서 수행한 프로세스가 표시됩니다. 마지막 항목은 다음과 같아야 합니다.
Successfully pushed image-registry.openshift-image-registry.svc:5000/example-health/patient-health-frontend@sha256:f9385e010144f36353a74d16b6af10a028c12d005ab4fc0b1437137f6bd9e20a Push successful
-
돌아가서 토폴로지를 클릭하고 본인의 앱을 다시 선택하십시오.
-
라우트 아래에 있는 URL을 클릭하여 해당 URL을 방문하십시오. 앱이 데모 모드로 실행 중이므로 사용자 이름 및 비밀번호로 아무 문자열이나 입력하십시오(예:
test:test
).
Node.js
앱이 Red Hat OpenShift 컨테이너 플랫폼에 배치되었습니다. 요약하면 다음과 같습니다.
- "Example Health" Node.js 애플리케이션은 GitHub에서 클러스터로 직접 배치되었습니다.
- Red Hat OpenShift on IBM Cloud 콘솔에서 애플리케이션을 검사했습니다.
- 빌드 구성이 작성되었습니다. 애플리케이션 세부 사항의 빌드 섹션에서 빌드 시작을 클릭하여 새 커미트를 빌드 및 배치할 수 있습니다.
로깅 및 모니터링
이 절에서는 Red Hat OpenShift on IBM Cloud에서 제공하는 즉시 사용 가능한 로깅 및 모니터링 기능을 살펴봅니다.
애플리케이션 로드 시뮬레이션
로드를 시뮬레이션할 스크립트를 작성하십시오.
- 앱을 배치한 프로젝트에 연결되어 있는지 확인하십시오.
oc project example-health
- 애플리케이션에 액세스할 수 있는 공용 라우트를 검색하십시오.
출력은 다음과 유사합니다. Host 값을 기록해 두십시오.oc get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD patient-health-frontend patient-health-frontend-example-health.roks07-872b77d77f69503584da5a379a38af9c-0000.eu-de.containers.appdomain.cloud patient-health-frontend 8080-tcp None
- host로 변수를 정의하십시오.
HOST=$(oc get routes -o json | jq -r '.items[0].spec.host')
- 애플리케이션에 대한 액세스 권한을 확인하십시오. 환자 정보가 출력됩니다.
출력은 다음과 같습니다.curl -s -L http://$HOST/info
$ curl -s -L http://$HOST/info {"personal":{"name":"Ralph DAlmeida","age":38,"gender":"male","street":"34 Main Street","city":"Toronto","zipcode":"M5H 1T1"},"medications":["Metoprolol","ACE inhibitors","Vitamin D"],"appointments":["2018-01-15 1:00 - Dentist","2018-02-14 4:00 - Internal Medicine","2018-09-30 8:00 - Pediatry"]}
- 애플리케이션에 요청을 끝없이 보내고 트래픽을 생성하는 다음 스크립트를 실행하십시오.
스크립트를 중지하려면 키보드에서while sleep 0.2; do curl --max-time 2 -s -L http://$HOST/info >/dev/null; echo -n "." done
CTRL + c
를 누르십시오.
Red Hat OpenShift on IBM Cloud 로깅
팟(Pod)이 한 개뿐이므로 애플리케이션 로그를 보는 것은 간단합니다.
-
개발자 퍼스펙티브의 토폴로지 보기에 있는지 확인하십시오.
-
앱을 선택하여 자신의 팟(Pod)으로 이동하십시오.
-
실행 중인 애플리케이션의 스트리밍 로그를 보려면 **팟(Pod)**에서 팟(Pod) 이름 옆에 있는 로그 보기를 클릭하십시오. 여전히 트래픽을 생성 중인 경우에는 요청이 발생할 때마다 로그 메시지가 표시되어야 합니다.
팟 (Pod) 로그
Red Hat OpenShift on IBM Cloud 터미널
Kubernetes의 가장 큰 장점 중 하나는 SSH 터미널로 애플리케이션 팟(Pod)을 빠르게 디버깅할 수 있다는 것입니다. 개발 환경에서는 유용하지만 일반적으로 프로덕션 환경에서는 권장하지 않습니다. Red Hat OpenShift 대시보드에서 바로 터미널을 실행할 수 있도록 하여 훨씬 더 쉽게 사용할 수 있습니다.
- 로그 탭에서 터미널 탭으로 전환하십시오.
- 다음 쉘 명령을 실행하십시오.
명령 | 설명 |
---|---|
ls |
프로젝트 파일을 나열합니다. |
ps aux |
실행 중인 프로세스를 나열합니다. |
cat /etc/redhat-release |
기반 OS를 표시합니다. |
curl localhost:8080/info |
노드 app.js 프로세스의 출력입니다. |
Red Hat OpenShift on IBM Cloud 모니터링
새 앱을 배치하거나 구성을 변경하거나 단순히 클러스터 상태를 검사하는 경우 프로젝트 범위 대시보드에서 개발자에게 명확한 정보를 제공합니다.
- 왼쪽 메뉴에서 관찰을 클릭하여 개발자 관점에서 대시보드에 액세스합니다.
- 이벤트 탭을 클릭하여 좀 더 자세히 살펴볼 수도 있습니다. 이벤트는 이벤트의 타임라인을 식별하고 잠재적 오류 메시지를 찾는 데 유용합니다. 새 롤아웃의 상태를 추적하거나, 기존 자산을 관리하거나, 경로 공개와 같은 간단한 작업을 수행할 때 이벤트 보기는 활동의 타임라인을 식별하는 데 중요합니다. 여러 Operator가 단일 클러스터에 대해 작동 중일 수 있다는 점을 고려할 때 더욱 유용합니다.
Red Hat OpenShift의 거의 모든 조치로 인해 이 보기에서 이벤트가 발생합니다. 이벤트는 실시간으로 업데이트되므로 상태 변경을 추적할 수 있는 좋은 방법입니다.
메트릭 및 대시보드
이 섹션에서는 Red Hat OpenShift 에 포함된 모니터링 및 메트릭 대시보드를 살펴봅니다.
대시보드
Red Hat OpenShift 은 프로젝트를 모니터하기 위해 사전 정의된 대시보드와 함께 제공됩니다.
- 먼저 개발자 퍼스펙티브에서 관리자 퍼스펙티브로 전환하십시오.
- 왼쪽 막대에서 관찰 > 대시보드로 이동하십시오.
- 드롭 다운에서 **Kubernetes / 컴퓨팅 리소스 / 네임스페이스(팟(Pod))**를 선택하고 네임스페이스를 example-health로 선택하십시오.
- 애플리케이션의 CPU 및 메모리 사용량을 확인하십시오. 프로덕션 환경에서는 특히 이러한 사용량이 하루 종일 변동할 수 있으므로 애플리케이션에서 사용하는 평균 CPU 또는 메모리 양을 식별하는 데 유용합니다. 자동 스케일링은 변동을 처리하는 한 가지 방법이며 뒷부분에서 설명할 예정입니다.
메트릭
Red Hat OpenShift 은 조회를 실행하고 플롯에서 시각화된 메트릭을 검사하기 위한 웹 인터페이스를 제공합니다. 이 기능은 클러스터 상태에 대한 광범위한 개요를 제공하므로 문제점을 해결하는 데 도움이 됩니다.
-
관찰 > 메트릭으로 이동하십시오.
-
다음 표현식을 입력하고 조회 실행을 클릭하십시오. 조회와 연관된 값과 그래프가 표시됩니다.
sum(container_cpu_usage_seconds_total{container="patient-health-frontend"})
메트릭 그래프
애플리케이션 스케일링
이 절에서는 이전 절에서 관찰한 메트릭을 사용하여 로드에 대응하여 UI 애플리케이션을 스케일링할 수 있습니다.
리소스 한계 사용
자동 스케일링 전에 최대 CPU 및 메모리 리소스 한계를 설정해야 합니다.
앞서 대시보드에서 ".002"에서 ".02" 코어 사이의 부하를 사용하고 있음을 확인할 수 있었습니다. 이것은 2-20"밀리초"로 변환됩니다. 안전을 위해 상한을 30밀리코어로 조정하겠습니다. 또한 데이터는 앱이 약 25
-65
MB의 RAM을 사용함을 표시합니다. 다음 단계에서는 배치 구성의 리소스 한계를 설정합니다.
-
트래픽을 생성하는 스크립트가 실행 중인지 확인하십시오.
-
관리자 퍼스펙티브로 전환하십시오.
-
워크로드 > DeploymentConfig로 이동하십시오.
-
example-health 프로젝트를 선택하십시오.
-
patient-health-frontend
의 조치 메뉴(세 개의 세로 점)에서 DeploymentConfig 편집을 선택하십시오.배치 -
YAML 보기에서 스펙 > 템플리트 > 스펙 > 컨테이너 섹션을 찾아, 빈 리소스에 다음 리소스 제한을 추가하십시오.
resources {}
를 대체하고 간격이 올바른지 확인하십시오. YAML은 엄격한 들여쓰기를 사용합니다.resources: limits: cpu: 30m memory: 100Mi requests: cpu: 3m memory: 40Mi
다음은 변경 후 스니펫입니다.
ports: - containerPort: 8080 protocol: TCP resources: limits: cpu: 30m memory: 100Mi requests: cpu: 3m memory: 40Mi terminationMessagePath: /dev/termination-log
-
저장하여 변경사항을 적용하십시오.
-
이벤트 탭으로 이동하여 복제 제어기가 변경되었는지 확인하십시오.
자원 제한
Autoscaler 사용
리소스 한계가 구성되었으므로 팟(Pod) Autoscaler를 사용으로 설정할 수 있습니다.
기본적으로 Autoscaler를 사용하면 CPU 또는 메모리를 기준으로 스케일링할 수 있습니다. 팟(Pod)은 사용자가 지정한 최소 및 최대 팟(Pod) 수 사이에서 균형을 유지합니다. Autoscaler를 사용할 경우 팟(Pod)의 평균 CPU 사용량이 정의된 CPU 요청 목표보다 낮도록 팟(Pod)이 자동으로 생성되거나 삭제됩니다. 일반적으로 팟(Pod) CPU 사용량의 50
-90
%에
근접하면 스케일링 업을 시작할 수 있습니다. 이 경우 제공되는 로드로 1
%를 사용할 수 있습니다.
-
관리자 퍼스펙티브 워크로드 > HorizontalPodAutoscalers로 이동한 다음 HorizontalPodAutoscaler 작성을 클릭하십시오.
HPA 편집기의 컨텐츠를 이 yaml로 대체하십시오.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: patient-hpa namespace: example-health spec: scaleTargetRef: apiVersion: apps.openshift.io/v1 kind: DeploymentConfig name: patient-health-frontend minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: averageUtilization: 1 type: Utilization
-
작성을 클릭하십시오.
Autoscaler 테스트
로드 시뮬레이션 스크립트를 실행 중이지 않은 경우 팟(Pod) 수가 1로 유지되어야 합니다.
-
배치 구성의 개요 페이지를 열어 확인하십시오. 워크로드 > DeploymentConfig를 클릭하고 patient-health-frontend를 클릭한 후 세부사항 패널이 선택되었는지 확인하십시오.
-
로드 시뮬레이션을 시작하십시오. 애플리케이션 로드를 시뮬레이션하려면 이전 절을 참조하십시오.
4/10팟 (Pod) 으로 스케일링 Autoscaler가 조정을 수행하는 데 몇 분 정도 걸릴 수 있습니다.
모두 완료되었습니다. 30
이제 가용성이 높고 자동으로 확장되는 프론트엔드 Node.js 애플리케이션이 있습니다. Red Hat OpenShift 파드의 CPU 사용량이 리소스 제한인 1
밀리코어의 3%를 크게 초과했기 때문에 애플리케이션 파드를 자동으로 확장하고 있습니다.
명령행에서 자동 스케일링
명령행을 사용하여 Autoscaler와 같은 리소스를 삭제하고 작성할 수도 있습니다.
- 먼저 컨텍스트가 자신의 프로젝트인지 확인하십시오.
oc project example-health
- 앞에서 작성한 Autoscaler를 가져오십시오.
oc get hpa
- 앞에서 작성한 Autoscaler를 삭제하십시오.
oc delete hpa/patient-hpa
- 최대 9개의 팟(Pod)을 포함하는 Autoscaler를 새로 작성하십시오.
oc autoscale deploymentconfig/patient-health-frontend --name patient-hpa --min 1 --max 9 --cpu-percent=1
- ** 배치에 대한 **워크로드 > DeploymentConfigs
patient-health-frontend
세부사항 페이지를 다시 방문하여 작동하는지 확인하십시오.
IBM Cloud Operator를 사용하여 Cloudant DB 작성
현재 Example Health patient-health-frontend
앱은 더미 인메모리 환자를 사용하고 있습니다. 이 연습에서는 IBM Cloud에서 Cloudant 서비스를 작성한 후 환자 데이터로 채웁니다. Cloudant는 CouchDB를 기반으로 하는 NoSQL DBaaS(Database-as-a-Service)입니다.
IBM Cloud Operator 사용
Operator의 작동 방식을 정확하게 이해해 봅시다. 첫 번째 연습에서는 Red Hat OpenShift과 함께 제공되는 기본 자원 유형인 DeploymentConfig 를 사용하여 단순 애플리케이션을 배치하기 위해 빌더를 사용했습니다. 사용자 정의 리소스 정의를 사용하면 IBM Cloud 서비스와 같이 Red Hat OpenShift on IBM Cloud 에 사전 설치되지 않은 리소스 유형을 만들 수 있습니다. Operator는 리소스의 라이프사이클을 관리하고 사용자 정의 리소스 디스크립터(CRD)를 작성하므로 사용자 정의 리소스를 기본 "Kubernetes" 방식으로 관리할 수 있습니다.
- 관리자 퍼스펙티브에서 Operator > OperatorHub를 클릭하십시오.
- IBM Cloud Operator를 찾아 설치를 클릭하십시오.
- 기본 옵션을 유지하고 설치를 클릭하십시오.
- 몇 초 후에
installed operator - ready for use
가 표시되어야 합니다.
CRD를 사용하여 Cloudant 서비스 및 바인드 작성
열려면 클릭하십시오. 전제조건 섹션으로 스크롤하십시오.
이 절에서는 IBM Cloudant 데이터베이스를 작성하는 데 적절한 권한이 있는 API 키가 필요합니다. API 키는 Kubernetes 시크릿 리소스에 저장되며, 쉘을 사용하여 작성해야 합니다. 지시사항은 설치된 Operator의 전제조건 섹션에 있습니다. 단계:
-
클러스터와 연관된 동일한 리소스 그룹 및 지역을 사용하십시오.
ibmcloud target -g <resource_group> -r <region>
계정에 있는 리소스 그룹을 보려면
ibmcloud resource groups
명령을 실행하십시오. -
리소스 그룹 및 리젼이 클러스터와 일치하는지 확인하십시오. 다음 명령은 클러스터를 리턴해야 합니다.
ibmcloud oc cluster ls
출력은 다음과 같습니다.
$ ibmcloud oc cluster ls
OK
Name ID State Created Workers Location Version Resource Group Name Provider
osmicro ck68svdd0vvcfs6ad9ag normal 18 hours ago 2 Dallas 4.12.26_1562_openshift default vpc-gen2
-
IBM에서 제공하는 헬퍼 스크립트를 사용하여 다음 리소스를 작성하십시오.
- 본인 및 IBM Cloud 사용 권한을 나타내는 IBM Cloud API 키
secret-ibm-cloud-operator
네임스페이스에 있는 Kubernetes 시크릿default
. 이 시크릿에는 키api-key
및region
이 있습니다. Operator는 이 데이터를 사용하여 Cloudant 서비스 인스턴스를 작성합니다.- 지역 및 리소스 그룹을 보유할
config-ibm-cloud-operator
네임스페이스에서 이름이default
인 Kubernetes ConfigMap 리소스
제공된 curl 명령을 사용하십시오.
curl -sL https://raw.githubusercontent.com/IBM/cloud-operators/master/hack/configure-operator.sh | bash
-
Red Hat OpenShift 웹 콘솔로 돌아가서 IBM Cloud Operator 페이지의 설치된 Operator에 있는 서비스 탭 아래에서 서비스 작성을 클릭하고 YAML 보기를 선택하여 yaml 편집기를 여십시오.
-
serviceClass가 cloudantnosqldb이고 플랜이 lite 또는 standard(계정당 하나의 Lite 플랜만 허용됨)인, 제안된 대체를 수행하십시오.
<your-initials>
을(를) 바꾸십시오.apiVersion: ibmcloud.ibm.com/v1 kind: Service metadata: annotations: ibmcloud.ibm.com/self-healing: enabled name: <your-initials>-cloudant-service namespace: example-health spec: serviceClass: cloudantnosqldb plan: standard
-
작성을 클릭하여 IBM Cloudant 데이터베이스 인스턴스를 작성하십시오. 컨텍스트는 서비스 패널에 프로젝트: example-health가 있는 관리자 퍼스펙티브의 Operator > 설치된 Operator > IBM Cloud Operator여야 합니다.
-
방금 만든 서비스인 <귀하의 이니셜>-cloudant-service를 클릭하면 시간이 지나면 상태 필드가 프로비저닝에서 온라인 상태로 변경되어 사용할 수 있습니다.
-
방금 작성한 Cloudant 서비스에 대해 바인딩 리소스 및 시크릿 리소스를 작성하십시오. Operator > 설치된 Operator > IBM Cloud Operator > 바인딩 탭으로 돌아가십시오. 바인딩 탭을 열고 바인딩 작성을 클릭한 후 YAML 보기를 선택하십시오. serviceName
<your-initials>-cloudant-service
(이는 앞서 작성된 서비스에 대해 제공된 이름임)과(와) 연관된 cloudant-binding을 작성하십시오.apiVersion: ibmcloud.ibm.com/v1 kind: Binding metadata: name: cloudant-binding namespace: example-health spec: serviceName: <your-initials>-cloudant-service
-
선택적으로, Red Hat OpenShift 리소스(서비스, 서비스 바인딩, 바인딩 시크릿)과 IBM Cloud 리소스(서비스, 서비스 인스턴스, 인스턴스의 서비스 인증 정보) 간의 관계를 이해하기 위해 조금 더 깊이 파고 들 수 있습니다. 클라우드 쉘을 사용하여 다음을 수행하십시오.
ibmcloud resource service-instances --service-name cloudantnosqldb
YOURINITIALS=<your-initials>
ibmcloud resource service-instance $YOURINITIALS-cloudant-service
ibmcloud resource service-keys --instance-name $YOURINITIALS-cloudant-service --output json
출력은 다음과 같습니다.
youyou@cloudshell:~$ ibmcloud resource service-instances --service-name cloudantnosqldb Retrieving instances with type service_instance in all resource groups in all locations under .. OK Name Location State Type <your-initials>-cloudant-service us-south active service_instance youyou@cloudshell:~$ ibmcloud resource service-instance <your-initials>-cloudant-service Retrieving service instance <your-initials>-cloudant-service in all resource groups under ... OK Name: <your-initials>-cloudant-service ID: crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET GUID: SECRET Location: us-south Service Name: cloudantnosqldb Service Plan Name: standard Resource Group Name: Default State: active Type: service_instance Sub Type: Created at: 2020-05-06T22:39:25Z Created by: youyou@us.ibm.com Updated at: 2020-05-06T22:40:03Z Last Operation: Status create succeeded Message Provisioning is complete Updated At 2020-05-06 22:40:03.04469305 +0000 UTC youyou@cloudshell:~$ ibmcloud resource service-keys --instance-name $YOURINITIALS-cloudant-service --output json [ { "guid": "01234560-902d-4078-9a7f-20446a639aeb", "id": "crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET", "url": "/v2/resource_keys/01234560-902d-4078-9a7f-20446a639aeb", "created_at": "2020-05-06T23:03:43.484872077Z", "updated_at": "2020-05-06T23:03:43.484872077Z", "deleted_at": null, "name": "cloudant-binding", "account_id": "0123456789507a53135fe6793c37cc74", "resource_group_id": "01234567836d49029966ab5be7fe50b5", "source_crn": "crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET", "state": "active", "credentials": { "apikey": "SECRET", "host": "SECRET", "iam_apikey_description": "Auto-generated for key SECRET", "iam_apikey_name": "cloudant-binding", "iam_role_crn": "SECRET", "iam_serviceid_crn": "SECRET", "password": "SECRET", "port": 443, "url": "https://01234SECRET", "username": "01234567-SECRET" }, "iam_compatible": true, "resource_instance_url": "/v2/resource_instances/SECRET", "crn": "crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET" } ]
Node.js 환자 백엔드 데이터베이스 앱 배치
이제 Cloudant DB를 환자 데이터로 채울 Node.js 앱을 작성합니다. 또한 앞에서 배치한 프론트 엔드 애플리케이션에 데이터도 제공합니다.
- 컨텍스트가 example-health 프로젝트인지 확인하십시오.
oc project example-health
- 다음 new-app 명령은 빌드 구성 및 배치 구성을 작성합니다. 다음은 add 애플리케이션의 CLI 호출을 보여줍니다(프론트 엔드용 GUI 콘솔 사용).
oc new-app --name=patient-health-backend --as-deployment-config registry.access.redhat.com/ubi9/nodejs-20-minimal:latest~https://github.com/IBM-Cloud/patient-health-backend
- 콘솔로 돌아와 개발자 퍼스펙티브의 토폴로지 보기에서 patient-health-backend 앱을 열고 빌드가 완료될 때까지 기다리십시오. **팟(Pod)**이 시작에 실패하고 있는 것을 볼 수 있습니다. 팟(Pod) 로그를 클릭하여 다음을 확인하십시오.
> node app.js /opt/app-root/src/app.js:23 throw("Cannot find Cloudant credentials, set CLOUDANT_URL.") ^ Cannot find Cloudant credentials, set CLOUDANT_URL.
- DeploymentConfig의 환경 변수를 앞의 Operator 바인딩 절에서 작성한 cloudant-binding 시크릿으로 설정하여 문제를 수정하십시오.
patient-health-backend
앱을 클릭한 후 DC 옆에 있는 이름을 선택하여 이 앱에 대한 배치 구성으로 이동하십시오.배치 구성 - 환경 탭으로 이동하여 ConfigMap 또는 시크릿에서 추가를 클릭하고 CLOUDANT_URL이라는 새 환경 변수를 작성하십시오. cloudant-binding 시크릿을 선택한 후 키의 url을 선택하십시오. 저장을 클릭하십시오.
시크릿의 환경 - 토폴로지 탭으로 돌아가서 patient-health-backend를 클릭하십시오. 팟(Pod) 섹션이 바로 실행 중으로 표시되는지 확인하십시오. 실행 중인 팟(Pod) 옆에 있는 로그 보기를 클릭하고 데이터베이스가 작성되었는지 확인하십시오.
Patient Health 백엔드 앱을 사용하도록 Patient Health 프론트 엔드 앱 구성
patient-health-frontend
애플리케이션에는 백엔드 마이크로 서비스 URL에 대한 환경 변수가 있습니다.
-
API_URL 환경 변수를 프론트엔드 DeploymentConfig에서 default로 설정하십시오.
patient-health-frontend
토폴로지** 보기에서 프론트 엔드 앱을 클릭한 후 DC 옆에 있는 이름을 선택하여 ** 앱에 대한 배치 구성으로 이동하십시오. -
환경 탭으로 이동한 후 단일 값(env) 섹션에서 이름
API_URL
및 값default
를 추가하십시오. 저장, 다시 로드를 차례로 클릭하십시오. 그러면http://patient-health-backend:8080/
에 연결됩니다. 이는 팟(Pod) 로그를 검토하면 확인할 수 있습니다. 이 명령의Pod Template / Containers / Port
출력을 스캔하여 올바른 포트인지 확인할 수 있습니다.oc describe dc/patient-health-backend
애플리케이션이 이제 Cloudant DB의 샘플 환자 데이터를 통해 지원됩니다! 이제 "opall:opall"을 사용하여 Cloudant DB의 사용자 ID/비밀번호를 사용하여 로그인할 수 있습니다.
- 실제 애플리케이션에서는 이러한 비밀번호를 일반 텍스트로 저장하면 안됩니다. Cloudant DB에서 환자(및 대체 로그인)를 검토하려면 IBM Cloud 리소스 목록에서
services
으로 이동하세요. < your-initials> -cloudant - service 를 클릭하십시오. - 대시보드 실행 단추를 클릭한 후
patients
db를 클릭하여 Cloudant 대시보드를 실행하십시오. - 로그인할 수 있는 다양한 환자를 클릭하세요.
Red Hat OpenShift on IBM Cloud 로그 및 모니터링을 IBM 서비스로 전달합니다
클러스터 로그는 IBM Cloud® 로그 서비스로 전달되어 클라우드의 완전한 로깅 분석 및 저장 환경에 통합될 수 있습니다( 클러스터에 대한 로깅 참조). 클러스터 메트릭을 클라우드 모니터링 시스템과 통합할 수 있습니다 - 클러스터 상태 모니터링
로깅 및 메트릭 데이터가 분석 시스템을 통과하는 데 몇 분 정도 걸릴 수 있으므로 나중에 사용할 수 있도록 이 때 두 가지를 모두 연결하는 것이 가장 좋습니다.
클러스터 모니터
IBM Cloud Monitoring는 IBM Cloud 아키텍처의 일부로 포함시킬 수 있는, 클라우드 네이티브 및 컨테이너 인텔리전스 관리 시스템입니다. 애플리케이션, 서비스 및 플랫폼의 성능과 상태에 대한 운영 가시성을 확보할 수 있습니다. 또한 관리자, DevOps 팀 및 개발자에게 성능 문제를 모니터링 및 해결하고 경보를 정의하며 사용자 정의 대시보드를 디자인할 수 있는 고급 기능을 갖춘 전체 스택 텔레메트리를 제공합니다. 자세히 알아보십시오.
다음 단계에서는 대시보드 및 메트릭을 사용하여 애플리케이션의 상태를 모니터하는 방법에 대해 학습합니다.
사전 정의된 모니터링 보기 및 대시보드 보기
보기 및 대시보드를 사용하여 인프라, 애플리케이션 및 서비스를 모니터하십시오. 사전 정의된 대시보드를 사용할 수 있습니다. 웹 UI를 통해 또는 프로그래밍 방식으로 사용자 정의 대시보드를 작성할 수도 있습니다. 사용자는 Python 스크립트를 사용하여 대시보드를 백업 및 복원할 수 있습니다.
다음 표는 사전 정의된 대시보드의 여러 유형을 보여줍니다.
유형 | 설명 |
---|---|
워크로드 상태 및 성능 | 팟 (Pod) 을 모니터하는 데 사용할 수 있는 대시보드입니다. |
Node 상태 및 성과 | 호스트 및 컨테이너에서 리소스 활용률 및 시스템 활동을 모니터하는 데 사용할 수 있는 대시보드입니다. |
네트워크 | 네트워크 연결 및 활동을 모니터하는 데 사용할 수 있는 대시보드입니다. |
Monitoring 대시보드 보기
- Red Hat OpenShift on IBM Cloud 클러스터로 이동하여 Red Hat OpenShift 클러스터를 확인하십시오.
- 클러스터를 클릭하고 왼쪽의 개요 탭이 선택되어 있는지 확인하십시오.
- 모니터링옆에 있는 통합 섹션에서 실행 단추를 클릭하십시오.
새로 작성된 모니터링 인스턴스에서는 초기 데이터가 사용 가능하지 않을 수 있습니다.
- 몇 분 후에 원시 데이터가 표시됩니다.
- 1시간 정도 후에 인덱싱을 통해 이 튜토리얼을 진행하는 데 필요한 세부사항이 제공됩니다.
- 대시보드 섹션에서 Kubernetes > 파드 상태 및 성능을 선택하여 클러스터에서 실행 중인 모든 워크로드에 대한 원시 메트릭을 확인합니다.
- namespace 필터를 example-health 로 설정하여 애플리케이션의 팟 (Pod) 에 초점을 맞추십시오.
- 왼쪽 분할창의 대시보드에서 대시보드 템플리트의 애플리케이션을 펼치십시오. 그런 다음 HTTP를 선택하여 클러스터 HTTP 노드의 글로벌 보기를 표시하십시오.
클러스터 및 노드 용량 탐색
-
대시보드를 선택하고 두 개의 대시보드 템플리트를 확인해 보십시오.
- 컨테이너 > 컨테이너 리소스 사용량
- 호스트 인프라 > 호스트 리소스 사용량
-
Kubernetes > Pod Rightsizing & Workload Capacity Optimization 템플리트를 선택하십시오. 이 대시보드를 사용하면 팟 (Pod) 의 크기가 올바르게 조정되도록 하여 인프라를 최적화하고 클러스터 비용을 더 잘 제어할 수 있습니다. 메모리 및/또는 CPU 요청을 줄여 자원을 해제할 수 있는지 이해하십시오.
애플리케이션 탐색
-
대시보드 및 템플리트 Kubernetes > 워크로드 상태 및 성능을 선택하십시오.
클러스터의 모든 팟 (Pod) 을 표시하는 자세한 대시보드입니다.
-
사용자 정의 대시보드를 만든 다음 특정 네임스페이스로 범위를 지정하십시오.
- 오른쪽 상단에서 내 대시보드에 복사 를 클릭하고 이름을
Workload Status & Performanceapp example-health
로 지정하십시오. - 작성 및 열기 를 클릭하여 고유한 대시보드를 작성하십시오.
- 대시보드 범위를 편집하십시오.
kube_namespace_name
,is
,example-health
에 대한 필터를 설정하십시오.- 저장 을 클릭하십시오.
이제 대시보드는 example-health 네임스페이스에 초점을 맞춘 정보를 표시합니다.
HTTP, 지연, 오류 등의 성능을 이해하려면 TimeCharts 스크롤을 내려가세요.
사용자 정의 네트워크 트래픽 및 대역폭 - 오른쪽 상단에서 내 대시보드에 복사 를 클릭하고 이름을
IBM Cloud Monitoring에 대한 자세한 정보는 IBM Cloud 문서를 참조하십시오.
자원 제거
리소스 목록에서 제거하려는 리소스를 찾아서 삭제하십시오.
- Red Hat OpenShift on IBM Cloud 클러스터를 삭제하십시오.
- 클러스터를 삭제하지 않고 Red Hat OpenShift 리소스를 삭제하려면 아래 명령을 실행하십시오.
oc delete all --all --namespace example-health oc delete project/example-health
- IBM Cloud Logs 인스턴스를 삭제하십시오.
- IBM Cloud Monitoring 삭제
- IBM Cloudant 및 마이크로서비스에 대한 바인드를 삭제하십시오.
- IBM Cloudant 서비스
리소스에 따라 즉시 삭제되지 않고 보유될 수 있습니다(기본 7일 동안). 리소스를 영구적으로 삭제하여 재확보하거나 보유 기간 내에 리소스를 복원할 수 있습니다. 리소스 재확보 사용 방법은 이 문서를 참조하십시오.