6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM CloudAdvent Calendar 2023

Day 14

IBM Cloudが提供するコンテナ3サービス触ってみた

Last updated at Posted at 2023-12-14

IBM Cloudが提供する以下の3つのコンテナサービス"Code Engine", "IBM Cloud Kubernetes Service", "Red Hat OpenShift on IBM Cloud" を利用したことのない方に向けて、サービス概要・料金体系・各サービス上でアプリケーションの実行・外部公開をできる手順を書きました。コンテナ・Kubernetesの一般的な用語の解説はしておりません。

IBM Cloud Code Engine

IBM Cloud® Code Engineは、Web アプリ、マイクロサービス、イベント・ドリブン機能、バッチ・ジョブなどのコンテナ化されたワークロードを実行する、フルマネージドのサーバーレス・プラットフォームです。インフラやクラスターを管理する必要が無いことが特徴です。

【アーキテクチャ】

スクリーンショット 2023-12-14 15.21.36.png

【料金体系】

Code Engineは従量課金制のサービスで、主にアプリケーションを動かしている分だけお金がかかります。

  • ビルド時のリソース使用量/秒 CPU, Memory/秒
    (ソースコードを元にコンテナイメージをビルドする場合のみ。
    ビルド済みのコンテナイメージを指定してデプロイする場合は不要です)
  • ランタイム時のリソース使用量/秒 CPU, Memory/秒
  • HTTPリクエスト数/月

【触ってみた】

目標:コンテナイメージからアプリケーションをデプロイし、インターネットからアクセスする。

Code Engineを使ってアプリケーションをデプロイする方法は幾つかあります。
・アプリケーションのソースコードを元にビルド・デプロイ
・Dockerfileを使ってビルド・デプロイ
・コンテナイメージを指定してデプロイ ←今回はこちら

1. プロジェクトの作成

プロジェクトとは、アプリケーション、ジョブ、ビルドなどの Code Engine エンティティーをグループにまとめるものです。ロケーション、名前、リソースグループを選択して、作成します。
スクリーンショット_2023-12-14_14_54_40.png

2. アプリケーションの作成

アプリケーションの作成時に、コンテナイメージを指定するか、ソースコードを元にビルドするか選ぶことができます。今回はCode Engineがサンプルとして提供しているhelloworldのイメージを使ってみます。
コンテナイメージを選択し、アプリケーション作成ボタンを押します。
スクリーンショット 2023-12-05 10.13.34.png
StatusがReadyになったらデプロイ完了です。
スクリーンショット 2023-12-05 10.17.20.png

プロジェクトのアプリ一覧の画面にて、今デプロイされたアプリケーションを確認することができます。
スクリーンショット 2023-12-05 10.20.45.png

3. アクセスしてみる

『URLを開く』からアプリケーションにアクセスしてみます。
スクリーンショット 2023-12-05 10.22.02.png

helloworldのアプリケーションが表示されました!
IBM Cloudの画面を使って簡単にアプリケーションをデプロイし、外部からアクセス出来ることがわかりました。

IBM Cloud Kubernetes Service

IBM Cloud Kubernetes Serviceは、オープンソースのコンテナオーケストレーションツール”Kubernetes”を、フルマネージドで提供するサービスです。

【アーキテクチャ】

スクリーンショット 2023-12-13 18.08.28.png

【料金体系(VPC)】

IBM Cloud Kubernetes Serviceは、主に作成するクラスターのサイズ(ワーカーノードのスペックと台数)によって値段が決まります。

  • ワーカーノード
    • 選択したマシンタイプと合計稼働台数に対して課金が発生
    • 仮想サーバーは時間課金
  • サブネットIPアドレス
    • Floating IPの費用が発生(月課金)
  • ロード・バランサー
    • Load Balancer for VPC の費用が発生(時間課金)
  • パブリックアウトバウンド利用料金
    • データ通信量に応じて課金発生

(Classicの料金体系は今回は記載しておりません)

【触ってみた】

目標:クラスターにアプリケーションをデプロイし、Ingressを用いてインターネットからアクセスできるようにする。

構成イメージ
スクリーンショット 2023-12-14 15.09.22.png

1. VPCにクラスターを作成

クラスターの作成画面です。
スクリーンショット_2023-12-05_14_44_21.png

今回はハンズオン用のため、以下のような最小構成にします。

  • インフラストラクチャー:VPC
  • ワーカーゾーン:シングルゾーン
  • 1ゾーンあたりのワーカーノード:2台
  • フレーバー(ノードが払い出されるサーバーのスペック):cx2.2x4(2vCPU,4GBメモリ)
  • サービスエンドポイント:public・private

2. アプリケーションをクラスターにデプロイ

作成したクラスターにアプリケーションをデプロイします。ここから、ブラウザーを介してアクセスできるIBM Cloud Shellを使って操作しました。ブラウザーベースのshell環境で、IBM Cloudのサービスリソースの作成や編集、操作をするために必要なCLIなどが事前にセットアップされています。画面右上のシェルアイコンから開きます。
image.png

以下のコマンドで、デプロイメントを作成します。
今回デプロイするアプリケーション:websphere-liberty
レプリカ数は3に指定しました。

kubectl create deployment websphere-liberty --image=websphere-liberty -r=3 

3. Serviceの作成

アプリケーションを公開するために、作成したデプロイメントのサービスを作成します。

kubectl expose deployment/websphere-liberty --name websphere-liberty --port 80 --target-port 9080

4. Ingressを使って、外部からアクセスできるようにする

外部からアプリケーションにアクセスできるように、Ingressを作成します。
IBM Cloud Kubernetes Serviceでは、クラスターごとに専用のアプリケーション公開用URLが提供されているので、今回はそちらを利用します。

提供されたドメイン名、TLSシークレットなどを確認する為、以下のコマンドでクラスターの情報を表示します。

ibmcloud ks cluster get --cluster クラスター名|grep Ingress

以下の内容が出力されました。

Ingress Subdomain:              XXXXXX.eu-de.containers.appdomain.cloud
Ingress Secret:                 YYYYYY
Ingress Status:                 healthy
Ingress Message:                All Ingress components are healthy.

出力結果を元に、以下のIngressファイルを作成します

vi ingress.yaml 

Ingressリソースファイルの中身:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: websphereIngress
spec:
  tls:
  - hosts:
    - webapp.XXXXXX.eu-de.containers.appdomain.cloud
    secretName: YYYYYY
  rules:
  - host: webapp.XXXXXX.eu-de.containers.appdomain.cloud
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: websphere-liberty 
            port:
              number: 80

作成したIngressファイルを適用します。

kubectl apply -f ingress.yaml 

5.外部からアクセスできるか確認

クラスターのドメイン webapp.XXXXXX.eu-de.containers.appdomain.cloudをブラウザで開いて、コンテナアプリにアクセス出来るか見てみます。

スクリーンショット 2023-12-13 15.12.22.png

表示されました!
IBM Kubernetes Serviceが提供しているドメインを利用して、アプリケーションを公開することができました。

Red Hat OpenShift on IBM Cloud

Red Hat OpenShiftとは、エンタープライズ対応の Kubernetes コンテナ・プラットフォームで、コンテナの開発、運用に必要な高度なツール類も提供します。Red Hat OpenShift on IBM Cloudは、そのOpenShiftをマネージドサービスとして提供します。

【アーキテクチャ】

スクリーンショット 2023-12-21 15.28.12.png

【料金体系(VPC)】

Red Hat OpenShift on IBM Cloudは、主に作成するクラスターのサイズ(ワーカーノードのスペックと台数)と、OpenShift Container Platform (OCP) ライセンスの有無によって値段が決まります。

  • ワーカーノード
    • 選択したマシンタイプと合計稼働台数に対して課金が発生
    • 仮想サーバーは時間課金
    • OpenShift Container Platform (OCP) ライセンスの有無によってワーカーノードの課金金額が変わります。
      • Cloud Paksに含まれるOCPライセンスの持ち込みも可能
  • サブネットIPアドレス
    • Floating IPの費用が発生(月課金)
  • ロード・バランサー
    • Load Balancer for VPC の費用が発生(時間課金)
  • パブリックアウトバウンド利用料金
    • データ通信量に応じて課金発生
  • ストレージ
    • イメージレジストリ用に、オブジェクトストレージが使用される

(Classicの料金体系は今回は記載しておりません)

【触ってみた】

目標:クラスターにアプリケーションをデプロイし、インターネットからアクセスできるようにする。

構成イメージ
スクリーンショット 2023-12-21 14.07.18.png

1. VPCにクラスターを作成

クラスターの作成画面
スクリーンショット 2023-12-18 12.24.27.png
選択した構成は以下の通りです。

  • インフラストラクチャー:VPC
  • ワーカーゾーン:シングルゾーン
  • ワーカーノード:2台
  • OpenShift Container Platform (OCP) ライセンス:ライセンスの購入
  • フレーバー(ノードに利用されるサーバーのスペック):bx2.4x16(4vCPU,16GBメモリ)
  • サービスエンドポイント:public・private

2. CLIでクラスターにログイン

OpenShiftのクラスターにログインする際は、ocコマンドを利用します。tokenを取得するために、まずRed Hat OpenShift Web コンソールにアクセスします。

2-1. クラスター画面右上の「OpenShift Web コンソール」をクリック
スクリーンショット 2023-12-18 12.09.35.png
新しいタブで、このような画面が表示されます。
スクリーンショット 2023-12-18 12.42.03.png
2-2. 右上の「IAM...」のプルダウンを表示し、「ログインコマンドのコピー」をクリックします。
スクリーンショット 2023-12-18 12.06.31.png

2-3. 新しいタブに「Display Token」の文字が出てくるので、文字をクリック
image.png

2-4. Log in with this tokenというところに表示されるocコマンドをコピーします。
image.png

2-5. IBM Cloud Portalのクラスター画面にもどり、Cloud Shellを開きます。コピーしたtokenをペーストします。
スクリーンショット 2023-12-18 12.58.30.png

CLIでクラスターへのログインができました。

3. アプリケーションをクラスターにデプロイ

Red Hat OpenShift on IBM Cloud クラスターにアプリケーションを作成します。

3-1. プロジェクトを作成
今回試すアプリケーション用のプロジェクトを作成します。

oc new-project haruna

3-2. プロジェクトにアプリケーションを作成

oc new-app --image websphere-liberty --name webapp

このコマンドで、イメージを元に、アプリケーションに必要なコンポーネント(デプロイメントとサービス)も作成してくれます。

<出力例>

--> Found container image 812d841 (4 days old) from Docker Hub for "websphere-liberty"

    * An image stream tag will be created as "webapp:latest" that will track this image

--> Creating resources ...
    imagestream.image.openshift.io "webapp" created
    deployment.apps "webapp" created
    service "webapp" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose service/webapp' 
    Run 'oc status' to view your app.

デプロイメントとサービスも作成されていることがわかります。

4. ルートの作成

続いて、アプリケーションを公開するために、ルートを作成します。
Red Hat OpenShift では、アプリケーションが必要とする TLS 終端処理のタイプに基づいて、4 つのタイプの経路を利用できます。今回は、エッジルートを作成します。

oc create route edge --service webapp --port 9080

以下の通り返答が来ました。

route.route.openshift.io/webapp created

ルートが作成されました。

5. 外部からアクセスできるか確認

以下のコマンドで、ルートの情報を出力します。

oc get route 

<出力例>

NAME     HOST/PORT                                                     PATH   SERVICES   PORT   TERMINATION   WILDCARD
webapp   webapp-haruna.XXXXXX.eu-de.containers.appdomain.cloud         webapp     9080   edge          None

出力されたホスト名にhttps://をつけてブラウザからアクセスしてみます。

https://webapp-haruna.XXXXXX.eu-de.containers.appdomain.cloud

スクリーンショット 2023-12-21 16.18.35.png

アクセスが出来ました!

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?