ROSA について学ぶ


Red Hat OpenShift Service on AWS 4

Red Hat OpenShift Service on AWS について学ぶ

Red Hat OpenShift Documentation Team

概要

このドキュメントには、クラスターの作成とアプリケーションのデプロイに関するワークショップが含まれています。

第1章 クラスターワークショップの作成

1.1. クラスターの作成

このワークショップに従って、サンプルの Red Hat OpenShift Service on AWS (ROSA) クラスターをデプロイします。その後、次のワークショップでクラスターを使用できます。

ワークショップの目的

  • クラスター作成の前提条件を学習します。

    • サンプル Virtual Private Cloud (VPC) の作成
    • サンプル OpenID Connect (OIDC) リソースの作成
  • サンプル環境変数を作成します。
  • サンプル ROSA クラスターをデプロイします。

前提条件

  • ROSA バージョン 1.2.31 以降
  • Amazon Web Services (AWS) コマンドラインインターフェイス (CLI)
  • ROSA CLI (rosa)

1.1.1. クラスター作成の前提条件

ROSA クラスターをデプロイする前に、VPC リソースと OIDC リソースの両方が必要です。そのため、最初にこれらのリソースを作成します。ROSA は、独自の VPC (BYO-VPC) モデルを使用します。

1.1.1.1. VPC の作成
  1. AWS CLI (aws) が、ROSA が利用可能なリージョンを使用するように設定されていることを確認します。次のコマンドを実行して、AWS CLI でサポートされているリージョンを確認します。

    $ rosa list regions --hosted-cp
    Copy to Clipboard Toggle word wrap
  2. VPC を作成します。このワークショップでは、次の スクリプトで VPC とその必要なコンポーネントを作成します。aws CLI で設定されたリージョンを使用します。

    #!/bin/bash
    
    set -e
    ##########
    # This script will create the network requirements for a ROSA cluster. This will be
    # a public cluster. This creates:
    # - VPC
    # - Public and private subnets
    # - Internet Gateway
    # - Relevant route tables
    # - NAT Gateway
    #
    # This will automatically use the region configured for the aws cli
    #
    ##########
    
    VPC_CIDR=10.0.0.0/16
    PUBLIC_CIDR_SUBNET=10.0.1.0/24
    PRIVATE_CIDR_SUBNET=10.0.0.0/24
    
    # Create VPC
    echo -n "Creating VPC..."
    VPC_ID=$(aws ec2 create-vpc --cidr-block $VPC_CIDR --query Vpc.VpcId --output text)
    
    # Create tag name
    aws ec2 create-tags --resources $VPC_ID --tags Key=Name,Value=$CLUSTER_NAME
    
    # Enable dns hostname
    aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-hostnames
    echo "done."
    
    # Create Public Subnet
    echo -n "Creating public subnet..."
    PUBLIC_SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block $PUBLIC_CIDR_SUBNET --query Subnet.SubnetId --output text)
    
    aws ec2 create-tags --resources $PUBLIC_SUBNET_ID --tags Key=Name,Value=$CLUSTER_NAME-public
    echo "done."
    
    # Create private subnet
    echo -n "Creating private subnet..."
    PRIVATE_SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block $PRIVATE_CIDR_SUBNET --query Subnet.SubnetId --output text)
    
    aws ec2 create-tags --resources $PRIVATE_SUBNET_ID --tags Key=Name,Value=$CLUSTER_NAME-private
    echo "done."
    
    # Create an internet gateway for outbound traffic and attach it to the VPC.
    echo -n "Creating internet gateway..."
    IGW_ID=$(aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text)
    echo "done."
    
    aws ec2 create-tags --resources $IGW_ID --tags Key=Name,Value=$CLUSTER_NAME
    
    aws ec2 attach-internet-gateway --vpc-id $VPC_ID --internet-gateway-id $IGW_ID > /dev/null 2>&1
    echo "Attached IGW to VPC."
    
    # Create a route table for outbound traffic and associate it to the public subnet.
    echo -n "Creating route table for public subnet..."
    PUBLIC_ROUTE_TABLE_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID --query RouteTable.RouteTableId --output text)
    
    aws ec2 create-tags --resources $PUBLIC_ROUTE_TABLE_ID --tags Key=Name,Value=$CLUSTER_NAME
    echo "done."
    
    aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW_ID > /dev/null 2>&1
    echo "Created default public route."
    
    aws ec2 associate-route-table --subnet-id $PUBLIC_SUBNET_ID --route-table-id $PUBLIC_ROUTE_TABLE_ID > /dev/null 2>&1
    echo "Public route table associated"
    
    # Create a NAT gateway in the public subnet for outgoing traffic from the private network.
    echo -n "Creating NAT Gateway..."
    NAT_IP_ADDRESS=$(aws ec2 allocate-address --domain vpc --query AllocationId --output text)
    
    NAT_GATEWAY_ID=$(aws ec2 create-nat-gateway --subnet-id $PUBLIC_SUBNET_ID --allocation-id $NAT_IP_ADDRESS --query NatGateway.NatGatewayId --output text)
    
    aws ec2 create-tags --resources $NAT_IP_ADDRESS --resources $NAT_GATEWAY_ID --tags Key=Name,Value=$CLUSTER_NAME
    sleep 10
    echo "done."
    
    # Create a route table for the private subnet to the NAT gateway.
    echo -n "Creating a route table for the private subnet to the NAT gateway..."
    PRIVATE_ROUTE_TABLE_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID --query RouteTable.RouteTableId --output text)
    
    aws ec2 create-tags --resources $PRIVATE_ROUTE_TABLE_ID $NAT_IP_ADDRESS --tags Key=Name,Value=$CLUSTER_NAME-private
    
    aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GATEWAY_ID > /dev/null 2>&1
    
    aws ec2 associate-route-table --subnet-id $PRIVATE_SUBNET_ID --route-table-id $PRIVATE_ROUTE_TABLE_ID > /dev/null 2>&1
    
    echo "done."
    
    # echo "***********VARIABLE VALUES*********"
    # echo "VPC_ID="$VPC_ID
    # echo "PUBLIC_SUBNET_ID="$PUBLIC_SUBNET_ID
    # echo "PRIVATE_SUBNET_ID="$PRIVATE_SUBNET_ID
    # echo "PUBLIC_ROUTE_TABLE_ID="$PUBLIC_ROUTE_TABLE_ID
    # echo "PRIVATE_ROUTE_TABLE_ID="$PRIVATE_ROUTE_TABLE_ID
    # echo "NAT_GATEWAY_ID="$NAT_GATEWAY_ID
    # echo "IGW_ID="$IGW_ID
    # echo "NAT_IP_ADDRESS="$NAT_IP_ADDRESS
    
    echo "Setup complete."
    echo ""
    echo "To make the cluster create commands easier, please run the following commands to set the environment variables:"
    echo "export PUBLIC_SUBNET_ID=$PUBLIC_SUBNET_ID"
    echo "export PRIVATE_SUBNET_ID=$PRIVATE_SUBNET_ID"
    Copy to Clipboard Toggle word wrap
  3. スクリプトはコマンドを出力します。後で使用するためにサブネット ID を保存するには、コマンドを環境変数として設定します。以下のコマンドをコピーして実行します。

    $ export PUBLIC_SUBNET_ID=$PUBLIC_SUBNET_ID
    $ export PRIVATE_SUBNET_ID=$PRIVATE_SUBNET_ID
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、環境変数を確認します。

    $ echo "Public Subnet: $PUBLIC_SUBNET_ID"; echo "Private Subnet: $PRIVATE_SUBNET_ID"
    Copy to Clipboard Toggle word wrap

    出力例

    Public Subnet: subnet-0faeeeb0000000000
    Private Subnet: subnet-011fe340000000000
    Copy to Clipboard Toggle word wrap

1.1.1.2. OIDC 設定の作成

このワークショップでは、OIDC 設定を作成するときに自動モードを使用します。また、後で使用できるように、OIDC ID を環境変数として保存します。このコマンドは、ROSA CLI を使用して、クラスターの一意の OIDC 設定を作成します。

  • 次のコマンドを実行して、OIDC 設定を作成します。

    $ export OIDC_ID=$(rosa create oidc-config --mode auto --managed --yes -o json | jq -r '.id')
    Copy to Clipboard Toggle word wrap

1.1.2. 追加の環境変数の作成

  • 環境変数を設定するには、次のコマンドを実行します。これらの変数を使用すると、ROSA クラスターを作成するコマンドの実行が容易になります。

    $ export CLUSTER_NAME=<cluster_name>
    $ export REGION=<VPC_region>
    Copy to Clipboard Toggle word wrap
    ヒント

    VPC リージョンを確認するには、rosa whoami を実行します。

1.1.3. クラスターの作成

  1. オプション: Operator ポリシーや AWS IAM ロールとポリシーを含め、アカウント全体のロールとポリシーを作成するには次のコマンドを実行します。

    重要

    このアカウントで ROSA を 初めて デプロイし、アカウントのロールとポリシーをまだ 作成していない 場合にのみ、この手順を完了してください。

    $ rosa create account-roles --mode auto --yes
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行してクラスターを作成します。

    $ rosa create cluster --cluster-name $CLUSTER_NAME \
    --subnet-ids ${PUBLIC_SUBNET_ID},${PRIVATE_SUBNET_ID} \
    --hosted-cp \
    --region $REGION \
    --oidc-config-id $OIDC_ID \
    --sts --mode auto --yes
    Copy to Clipboard Toggle word wrap

約 10 分後にクラスターの準備が完了します。選択したリージョン内の 3 つの AWS アベイラビリティーゾーンにまたがるコントロールプレーンがクラスターに作成され、AWS アカウントに 2 つのワーカーノードが作成されます。

1.1.4. インストールステータスの確認

  1. 次のコマンドのいずれかを実行して、クラスターのステータスを確認します。

    • クラスターのステータスの詳細を表示するには、次のコマンドを実行します。

      $ rosa describe cluster --cluster $CLUSTER_NAME
      Copy to Clipboard Toggle word wrap
    • クラスターのステータスの概要を表示するには、次のコマンドを実行します。

      $ rosa list clusters
      Copy to Clipboard Toggle word wrap
    • ログの進行状況を監視するには、次を実行します。

      $ rosa logs install --cluster $CLUSTER_NAME --watch
      Copy to Clipboard Toggle word wrap
  2. 状態が “ready” に変われば、クラスターのインストールは完了です。ワーカーノードがオンラインになるまでにさらに数分かかる場合があります。

1.2. 管理者ユーザーの作成

管理 (admin) ユーザーを作成すると、クラスターにすばやくアクセスできるようになります。管理ユーザーを作成するには、次の手順に従います。

注記

管理ユーザーは、このチュートリアル設定では問題なく機能します。実際のデプロイメントでは、正式なアイデンティティープロバイダー を使用してクラスターにアクセスし、ユーザーに管理者特権を付与します。

  1. 次のコマンドを実行して管理ユーザーを作成します。

    rosa create admin --cluster=<cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    W: It is recommended to add an identity provider to login to this cluster. See 'rosa create idp --help' for more information.
    I: Admin account has been added to cluster 'my-rosa-cluster'. It may take up to a minute for the account to become active.
    I: To login, run the following command:
    oc login https://api.my-rosa-cluster.abcd.p1.openshiftapps.com:6443 \
    --username cluster-admin \
    --password FWGYL-2mkJI-00000-00000
    Copy to Clipboard Toggle word wrap

  2. 前のステップで返されたログインコマンドをコピーし、ターミナルに貼り付けます。これにより、CLI を使用してクラスターにログインし、クラスターの使用を開始できるようになります。

    $ oc login https://api.my-rosa-cluster.abcd.p1.openshiftapps.com:6443 \
    >    --username cluster-admin \
    >    --password FWGYL-2mkJI-00000-00000
    Copy to Clipboard Toggle word wrap

    出力例

    Login successful.
    
    You have access to 79 projects, the list has been suppressed. You can list all projects with ' projects'
    
    Using project "default".
    Copy to Clipboard Toggle word wrap

  3. 管理ユーザーとしてログインしていることを確認するには、次のコマンドのいずれかを実行します。

    • オプション 1:

      $ oc whoami
      Copy to Clipboard Toggle word wrap

      出力例

      cluster-admin
      Copy to Clipboard Toggle word wrap

    • オプション 2:

      oc get all -n openshift-apiserver
      Copy to Clipboard Toggle word wrap

      このコマンドをエラーなしで実行できるのは管理ユーザーのみです。

  4. これでクラスターを管理ユーザーとして使用できるようになりました。このチュートリアルではこれで十分です。実際のデプロイメントでは、次のチュートリアル で説明するアイデンティティープロバイダーを設定することを強く推奨します。

1.3. アイデンティティープロバイダーの設定

クラスターにログインするには、アイデンティティープロバイダー (IDP) をセットアップします。このチュートリアルでは、IDP の例として GitHub を使用します。ROSA がサポートする IDP の完全なリストを参照してください。

  • すべての IDP オプションを表示するには、次のコマンドを実行します。

    rosa create idp --help
    Copy to Clipboard Toggle word wrap

1.3.1. GitHub を使用した IDP のセットアップ

  1. GitHub アカウントにログインします。
  2. 自分が管理者となる新しい GitHub 組織を作成します。

    ヒント

    すでに既存の組織の管理者であり、その組織を使用する場合は、ステップ 9 に進みます。

    + アイコンをクリックし、New Organization をクリックします。

  3. 状況に最も適したプランを選択するか、Join for free をクリックします。
  4. 組織のアカウント名、メールアドレス、および個人アカウントかビジネスアカウントかを入力します。Next をクリックします。

  5. オプション: 他のユーザーの GitHub ID を追加して、ROSA クラスターへの追加のアクセス権を付与します。後で追加することもできます。
  6. Complete Setup をクリックします。
  7. オプション: 次のページで、要求される情報を入力します。
  8. Submit をクリックします。
  9. ターミナルに戻り、次のコマンドを入力して GitHub IDP を設定します。

    rosa create idp --cluster=<cluster name> --interactive
    Copy to Clipboard Toggle word wrap
  10. 以下の値を設定します。

    Type of identity provider: github
    Identity Provider Name: <IDP-name>
    Restrict to members of: organizations
    GitHub organizations: <organization-account-name>
    Copy to Clipboard Toggle word wrap
  11. CLI にリンクが表示されます。リンクをコピーしてブラウザーに貼り付け、Enter を押します。これにより、このアプリケーションを OAuth に登録するために必要な情報が入力されます。情報を変更する必要はありません。

  12. Register application をクリックします。

  13. 次のページに Client ID が表示されます。ID をコピーし、Client ID を要求するターミナルに ID を貼り付けます。

    注記

    タブは閉じないでください。

  14. CLI で Client Secret を求められます。ブラウザーに戻り、Generate a new client secret をクリックします。

  15. シークレットが生成されます。シークレットは二度と表示されないため、コピーしてください。
  16. シークレットをターミナルに貼り付けて Enter を押します。
  17. GitHub Enterprise Hostname は空白のままにします。
  18. claim を選択します。
  19. IDP が作成され、設定がクラスターに反映されるまで、約 1 分間待ちます。

  20. 返されたリンクをコピーし、ブラウザーに貼り付けます。新しい IDP を、選択した名前で利用できるはずです。IDP をクリックし、GitHub 認証情報を使用してクラスターにアクセスします。

1.3.2. 他のユーザーにクラスターへのアクセス権を付与する

他のクラスターユーザーにアクセス権を付与するには、その GitHub ユーザー ID を、このクラスターに使用する GitHub 組織に追加する必要があります。

  1. GitHub で、Your organizations ページに移動します。
  2. profile icon をクリックし、Your organizations をクリックします。次に、<自分の組織名> をクリックします。この例では、my-rosa-cluster です。

  3. Invite someone をクリックします。

  4. 新しいユーザーの GitHub ID を入力し、正しいユーザーを選択して、Invite をクリックします。
  5. 新しいユーザーが招待を承諾すると、Hybrid Cloud Console リンクと GitHub 認証情報を使用して ROSA クラスターにログインできるようになります。

1.4. 管理者特権の付与

管理 (admin) 権限は、クラスターに追加したユーザーに自動的には付与されません。特定のユーザーに管理レベルの権限を付与する場合は、各ユーザーに手動で権限を付与する必要があります。ROSA コマンドラインインターフェイス (CLI) または Red Hat OpenShift Cluster Manager Web ユーザーインターフェイス (UI) のいずれかから管理権限を付与できます。

Red Hat は 2 種類の管理権限を提供します。

  • cluster-admin: cluster-admin 権限は、管理ユーザーにクラスター内のすべての権限を付与します。
  • dedicated-admin: dedicated-admin 権限を持つ管理ユーザーは、ほとんどの管理タスクを完了できますが、クラスターの破損を防ぐために一定の制限があります。権限の昇格が必要な場合は、dedicated-admin を使用することを推奨します。

管理者特権の詳細は、クラスターの管理に関する ドキュメントを参照してください。

1.4.1. ROSA CLI の使用

  1. クラスターを作成したユーザーが、次のコマンドのいずれかを実行して管理権限を付与します。

    • cluster-admin の場合:

      $ rosa grant user cluster-admin --user <idp_user_name> --cluster=<cluster-name>
      Copy to Clipboard Toggle word wrap
    • dedicated-admin の場合:

      $ rosa grant user dedicated-admin --user <idp_user_name> --cluster=<cluster-name>
      Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、管理権限が追加されたことを確認します。

    $ rosa list users --cluster=<cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    $ rosa list users --cluster=my-rosa-cluster
    ID                 GROUPS
    <idp_user_name>    cluster-admins
    Copy to Clipboard Toggle word wrap

  3. 現在 Red Hat Hybrid Cloud Console にログインしている場合は、コンソールからログアウトし、クラスターに再度ログインして、"Administrator パネル" がある新しいパースペクティブを表示します。シークレットウィンドウまたはプライベートウィンドウが必要になる場合があります。

    cloud experts getting started admin rights admin panel

  4. 次のコマンドを実行して、アカウントに管理権限が追加されたことをテストすることもできます。このコマンドをエラーなしで実行できるのは、cluster-admin ユーザーのみです。

    $ oc get all -n openshift-apiserver
    Copy to Clipboard Toggle word wrap

1.4.2. Red Hat OpenShift Cluster Manager UI の使用

  1. OpenShift Cluster Manager にログインします。
  2. クラスターを選択します。
  3. Access Control タブをクリックします。
  4. サイドバーの Cluster roles and Access タブをクリックします。
  5. Add user をクリックします。

  6. ポップアップ画面でユーザー ID を入力します。
  7. ユーザーに cluster-admin 権限を付与するか、dedicated-admin 権限を付与するかを選択します。

1.5. クラスターへのアクセス

コマンドラインインターフェイス (CLI) または Red Hat Hybrid Cloud Console ユーザーインターフェイス (UI) を使用してクラスターに接続できます。

1.5.1. CLI を使用したクラスターへのアクセス

CLI を使用してクラスターにアクセスするには、oc CLI がインストールされている必要があります。チュートリアルの手順を実行してきた場合は、oc CLI がすでにインストールされています。

  1. OpenShift Cluster Manager にログインします。
  2. 右上隅にあるユーザー名をクリックします。
  3. Copy Login Command をクリックします。

  4. アイデンティティープロバイダー (IDP) を選択できる新しいタブが開きます。使用する IDP をクリックします。たとえば、"rosa-github" です。

  5. 新しいタブが開きます。Display token をクリックします。
  6. ターミナルで次のコマンドを実行します。

    $ oc login --token=sha256~GBAfS4JQ0t1UTKYHbWAK6OUWGUkdMGz000000000000 --server=https://api.my-rosa-cluster.abcd.p1.openshiftapps.com:6443
    Copy to Clipboard Toggle word wrap

    出力例

    Logged into "https://api.my-rosa-cluster.abcd.p1.openshiftapps.com:6443" as "rosa-user" using the token provided.
    
    You have access to 79 projects, the list has been suppressed. You can list all projects with ' projects'
    
    Using project "default".
    Copy to Clipboard Toggle word wrap

  7. 次のコマンドを実行して、ログインしていることを確認します。

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    出力例

    rosa-user
    Copy to Clipboard Toggle word wrap

  8. これで、クラスターにアクセスできます。

1.5.2. Hybrid Cloud Console を使用したクラスターへのアクセス

  1. OpenShift Cluster Manager にログインします。

    1. Hybrid Cloud Console URL を取得するには、次のコマンドを実行します。

      rosa describe cluster -c <cluster-name> | grep Console
      Copy to Clipboard Toggle word wrap
  2. IDP をクリックします。たとえば、"rosa-github" です。

  3. ユーザー認証情報を入力します。
  4. ログインが完了します。チュートリアルの手順を実行してきた場合は、cluster-admin となり、Administrator パネルがある Hybrid Cloud Console の Web ページが表示されるはずです。

1.6. ワーカーノードの管理

Red Hat OpenShift Service on AWS (ROSA) では、ワーカーノードの変更はマシンプールを使用して実行します。マシンプールを使用すると、ユーザーは多数のマシンを 1 つのエンティティーとして管理できます。すべての ROSA クラスターに、クラスターの作成時に作成されるデフォルトのマシンプールがあります。詳細は、マシンプールの ドキュメントを参照してください。

1.6.1. マシンセットの作成

マシンプールは、コマンドラインインターフェイス (CLI) またはユーザーインターフェイス (UI) のいずれかを使用して作成できます。

1.6.1.1. CLI を使用したマシンプールの作成
  1. 以下のコマンドを実行します。

    $ rosa create machinepool --cluster=<cluster-name> --name=<machinepool-name> --replicas=<number-nodes>
    Copy to Clipboard Toggle word wrap

    入力の例

     $ rosa create machinepool --cluster=my-rosa-cluster --name=new-mp
     --replicas=2
    Copy to Clipboard Toggle word wrap

    出力例

    I: Machine pool 'new-mp' created successfully on cluster 'my-rosa-cluster'
    I: To view all machine pools, run 'rosa list machinepools -c my-rosa-cluster'
    Copy to Clipboard Toggle word wrap

  2. オプション: 次のコマンドを実行して、新しいマシンプール内の特定のノードにノードラベルまたはテイントを追加します。

    rosa create machinepool --cluster=<cluster-name> --name=<machinepool-name> --replicas=<number-nodes> --labels=`<key=pair>`
    Copy to Clipboard Toggle word wrap

    入力の例

    $ rosa create machinepool --cluster=my-rosa-cluster --name=db-nodes-mp --replicas=2 --labels='app=db','tier=backend'
    Copy to Clipboard Toggle word wrap

    出力例

    I: Machine pool 'db-nodes-mp' created successfully on cluster 'my-rosa-cluster'
    Copy to Clipboard Toggle word wrap

    これにより、1 つのユニットとして管理できる追加の 2 つのノードが作成されます。また、表示されるラベルがこのノードに割り当てられます。

  3. 次のコマンドを実行して、マシンプールの作成と割り当てられたラベルを確認します。

    rosa list machinepools --cluster=<cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    ID       AUTOSCALING  REPLICAS  INSTANCE TYPE  LABELS    TAINTS    AVAILABILITY ZONE  SUBNET                    DISK SIZE  VERSION  AUTOREPAIR
    workers  Yes          2/2-4     m5.xlarge                          us-east-1f         subnet-<subnet_id>  300 GiB    4.14.36  Yes
    Copy to Clipboard Toggle word wrap

1.6.1.2. UI を使用したマシンプールの作成
  1. OpenShift Cluster Manager にログインし、クラスターをクリックします。

  2. Machine pools タブをクリックします。

    cloud experts getting started managing mp ocm

  3. Add machine pool をクリックします。
  4. 必要な設定を入力します。

    ヒント

    また、Edit node labels and taints セクションを展開して、ノードラベルとテイントをマシンプール内のノードに追加することもできます。

  5. [マシンプールの追加] ボタンをクリックして保存します。
  6. 作成した新しいマシンプールが表示されます。

1.6.2. ワーカーノードのスケーリング

マシンプールを編集して、その特定のマシンプール内のワーカーノードの数をスケーリングします。CLI または UI を使用してワーカーノードをスケーリングできます。

1.6.2.1. CLI を使用したワーカーノードのスケーリング
  1. 次のコマンドを実行して、各クラスターで作成されたデフォルトのマシンプールを確認します。

    rosa list machinepools --cluster=<cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    ID          AUTOSCALING  REPLICAS  INSTANCE TYPE  LABELS            TAINTS    AVAILABILITY ZONES
    Default     No           2         m5.xlarge                                  us-east-1a
    Copy to Clipboard Toggle word wrap

  2. デフォルトのマシンプールを異なるノード数にスケールアウトするには、次のコマンドを実行します。

    rosa edit machinepool --cluster=<cluster-name> --replicas=<number-nodes> <machinepool-name>
    Copy to Clipboard Toggle word wrap

    入力の例

    rosa edit machinepool --cluster=my-rosa-cluster --replicas 3 Default
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して、マシンプールがスケーリングされたことを確認します。

    rosa describe cluster --cluster=<cluster-name> | grep Compute
    Copy to Clipboard Toggle word wrap

    入力の例

    $ rosa describe cluster --cluster=my-rosa-cluster | grep Compute
    Copy to Clipboard Toggle word wrap

    出力例

     - Compute (Autoscaled):    2-4
     - Compute (current):       2
    Copy to Clipboard Toggle word wrap

1.6.2.2. UI を使用したワーカーノードのスケーリング
  1. 編集するマシンプールの右側にある 3 つの点をクリックします。
  2. Edit をクリックします。
  3. 必要なノード数を入力し、Save をクリックします。
  4. クラスターを選択し、Overview タブをクリックします。Compute listing までスクロールして、クラスターがスケーリングされたことを確認します。Compute listing はスケーリングされたノードと同じであるはずです。たとえば、3/3 のようになります。

1.6.2.3. ノードラベルの追加
  1. 次のコマンドを使用してノードラベルを追加します。

    rosa edit machinepool --cluster=<cluster-name> --replicas=<number-nodes> --labels='key=value' <machinepool-name>
    Copy to Clipboard Toggle word wrap

    入力の例

    rosa edit machinepool --cluster=my-rosa-cluster --replicas=2 --labels 'foo=bar','baz=one' new-mp
    Copy to Clipboard Toggle word wrap

    これにより、新しいマシンプールに 2 つのラベルが追加されます。

重要

このコマンドは、すべてのマシンプール設定を新しく定義した設定に置き換えます。別のラベルを追加し、かつ 古いラベルを保持する場合は、新しいラベルと既存のラベルの両方を指定する必要があります。指定しないと、既存のすべてのラベルが追加するラベルに置き換えられます。同様に、ラベルを削除する場合は、削除するラベルを除いて必要なラベルを指定し、コマンドを実行します。

1.6.3. ノードタイプの混在

新しいマシンプールを使用して、同じクラスター内で異なるワーカーノードマシンタイプを混在させることもできます。マシンプールの作成後にマシンプールのノードタイプを変更することはできません。しかし、--instance-type フラグを追加することで、異なるノードを持つ新しいマシンプールを作成できます。

  1. たとえば、データベースノードを別のノードタイプに変更するには、次のコマンドを実行します。

    rosa create machinepool --cluster=<cluster-name> --name=<mp-name> --replicas=<number-nodes> --labels='<key=pair>' --instance-type=<type>
    Copy to Clipboard Toggle word wrap

    入力の例

    rosa create machinepool --cluster=my-rosa-cluster --name=db-nodes-large-mp --replicas=2 --labels='app=db','tier=backend' --instance-type=m5.2xlarge
    Copy to Clipboard Toggle word wrap

  2. 利用可能なすべてのインスタンスタイプ を表示するには、次のコマンドを実行します。

    rosa list instance-types
    Copy to Clipboard Toggle word wrap
  3. ステップバイステップで変更するには、--interactive フラグを使用します。

    rosa create machinepool -c <cluster-name> --interactive
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行してマシンプールをリストし、より大きな新しいインスタンスタイプを確認します。

    rosa list machinepools -c <cluster-name>
    Copy to Clipboard Toggle word wrap

1.7. 自動スケーリング

クラスターオートスケーラーは、 Pod リソースに基づいてクラスターにワーカーノードを追加または削除します。

クラスターオートスケーラーは、次の場合にクラスターのサイズを増やします。

  • リソースが不足しているため、Pod を現在のノードでスケジュールできない場合。
  • デプロイメントのニーズを満たすために、別のノードが必要な場合。

クラスターオートスケーラーは、指定の制限を超えてクラスターリソースを拡大することはありません。

クラスターオートスケーラーは、次の場合にクラスターのサイズを減らします。

  • 一部のノードが長期間続けて必要とされない場合。たとえば、ノードのリソース使用量が低く、そのノードの重要な Pod がすべて他のノードに収まる場合です。

1.7.1. CLI を使用した既存マシンプールの自動スケーリングの有効化

注記

クラスターの自動スケーリングは、クラスターの作成時、および新しいマシンプールを作成するときに、--enable-autoscaling オプションを使用して有効にできます。

  1. 自動スケーリングは、マシンプールの可用性に基づいて設定されます。どのマシンプールが自動スケーリングに使用できるかを確認するには、次のコマンドを実行します。

    $ rosa list machinepools -c <cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    ID       AUTOSCALING  REPLICAS  INSTANCE TYPE  LABELS    TAINTS    AVAILABILITY ZONE  SUBNET                    DISK SIZE  VERSION  AUTOREPAIR
    workers  No           2/2       m5.xlarge                          us-east-1f         subnet-<subnet_id>  300 GiB    4.14.36  Yes
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、利用可能なマシンプールに自動スケーリングを追加します。

    $ rosa edit machinepool -c <cluster-name> --enable-autoscaling <machinepool-name> --min-replicas=<num> --max-replicas=<num>
    Copy to Clipboard Toggle word wrap

    入力の例

    $ rosa edit machinepool -c my-rosa-cluster --enable-autoscaling workers --min-replicas=2 --max-replicas=4
    Copy to Clipboard Toggle word wrap

    上記のコマンドは、リソースに応じて 2 - 4 ノードの間でスケーリングするワーカーノードのオートスケーラーを作成します。

1.7.2. UI を使用した既存マシンプールの自動スケーリングの有効化

注記

マシンプールの作成時に Enable autoscaling チェックボックスをオンにすることで、クラスターの作成時にクラスターの自動スケーリングを有効にできます。

  1. Machine pools タブに移動し、右側の 3 つの点をクリックします。
  2. [編集] をクリックし、[自動スケーリングを有効にする] を クリックします。
  3. 最小ノード数と最大ノード数を編集するか、デフォルトの数値のままにします。
  4. Save をクリックします。
  5. 次のコマンドを実行して、自動スケーリングが追加されたことを確認します。

    $ rosa list machinepools -c <cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    ID       AUTOSCALING  REPLICAS  INSTANCE TYPE  LABELS    TAINTS    AVAILABILITY ZONE  SUBNET                    DISK SIZE  VERSION  AUTOREPAIR
    workers  Yes          2/2-4     m5.xlarge                          us-east-1f         subnet-<subnet_id>  300 GiB    4.14.36  Yes
    Copy to Clipboard Toggle word wrap

1.8. クラスターのアップグレード

Red Hat OpenShift Service on AWS (ROSA) では、クラスターのアップグレードはすべてマネージドサービスの一環として実行されます。ユーザーがコマンドを実行したり、クラスターに変更を加えたりする必要はありません。アップグレードは都合の良い時刻にスケジュールできます。

クラスターのアップグレードをスケジュールする方法には、次のものがあります。

  • コマンドラインインターフェイス (CLI) を使用した手動アップグレード: 1 回限りの即時アップグレードを開始するか、将来の日時に 1 回限りのアップグレードをスケジュールします。
  • Red Hat OpenShift Cluster Manager ユーザーインターフェイス (UI) を使用した手動アップグレード: 1 回限りの即時アップグレードを開始するか、将来の日時に 1 回限りのアップグレードをスケジュールします。
  • 自動アップグレード: 手動でスケジュールを設定することなく、新しいバージョンが利用可能になるたびに、定期的な y-stream アップグレードのアップグレード時間を設定します。マイナーバージョンは手動でスケジュールする必要があります。

クラスターのアップグレードの詳細は、次のコマンドを実行してください。

$ rosa upgrade cluster --help
Copy to Clipboard Toggle word wrap

1.8.1. CLI を使用したクラスターの手動アップグレード

  1. 次のコマンドを実行して、利用可能なアップグレードがあるかどうかを確認します。

    $ rosa list upgrade -c <cluster-name>
    Copy to Clipboard Toggle word wrap

    出力例

    $ rosa list upgrade -c <cluster-name>
    VERSION  NOTES
    4.14.7   recommended
    4.14.6
    ...
    Copy to Clipboard Toggle word wrap

    上の例では、バージョン 4.14.7 と 4.14.6 の両方が利用可能です。

  2. 次のコマンドを実行して、1 時間以内にクラスターをアップグレードするようにスケジュールします。

    $ rosa upgrade cluster -c --control-plane <cluster-name> --version <desired-version>
    Copy to Clipboard Toggle word wrap
  3. オプション: 次のコマンドを実行して、将来の日時にクラスターをアップグレードするようにスケジュールします。

    $ rosa upgrade cluster -c <cluster-name> --version <desired-version> --schedule-date <future-date-for-update> --schedule-time <future-time-for-update>
    Copy to Clipboard Toggle word wrap

1.8.2. UI を使用したクラスターの手動アップグレード

  1. OpenShift Cluster Manager にログインし、アップグレードするクラスターを選択します。
  2. Settings タブをクリックします。
  3. アップグレードが利用可能な場合は、Update をクリックします。

  4. 新しいウィンドウでアップグレードするバージョンを選択します。
  5. アップグレードの時間をスケジュールするか、すぐに開始します。

1.8.3. 自動定期アップグレードの設定

  1. OpenShift Cluster Manager にログインし、アップグレードするクラスターを選択します。
  2. Settings タブをクリックします。

    1. Update Strategy で、Recurring updates をクリックします。
  3. アップグレードを実行する日時を設定します。
  4. Save をクリックします。

1.9. クラスターの削除

コマンドラインインターフェイス (CLI) またはユーザーインターフェイス (UI) を使用して、Red Hat OpenShift Service on AWS (ROSA) クラスターを削除できます。

1.9.1. CLI を使用した ROSA クラスターの削除

  1. オプション: 次のコマンドを実行して、クラスターをリストし、削除する正しいクラスターを確認します。

    $ rosa list clusters
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行してクラスターを削除します。

    $ rosa delete cluster --cluster <cluster-name>
    Copy to Clipboard Toggle word wrap
    警告

    このコマンドは元に戻せません。

  3. CLI に、クラスターを削除するかどうかを確認するプロンプトが表示されます。y を押してから Enter を押します。クラスターとそれに関連するすべてのインフラストラクチャーが削除されます。

    注記

    AWS STS および IAM のロールとポリシーはすべての残るため、クラスターの削除が完了したら、以下の手順に従って手動で削除する必要があります。

  4. CLI に、作成した OpenID Connect (OIDC) プロバイダーおよび Operator IAM ロールのリソースを削除するコマンドが出力します。クラスターの削除が完了するまで待ってから、これらのリソースを削除します。次のコマンドを実行して、簡単なステータスチェックを実行します。

    $ rosa list clusters
    Copy to Clipboard Toggle word wrap
  5. クラスターが削除されたら、次のコマンドを実行して OIDC プロバイダーを削除します。

    $ rosa delete oidc-provider -c <clusterID> --mode auto --yes
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行して、Operator IAM ロールを削除します。

    $ rosa delete operator-roles -c <clusterID> --mode auto --yes
    Copy to Clipboard Toggle word wrap
    注記

    このコマンドには、クラスター名ではなくクラスター ID が必要です。

  7. 残りのアカウントロールは、同じアカウント内の他のクラスターで必要なくなった場合にのみ削除してください。このアカウントで他の ROSA クラスターを作成する場合は、この手順を実行しないでください。

    アカウントロールを削除するには、アカウントロールの作成時に使用した接頭辞を確認する必要があります。特に指定しなかった場合、デフォルトは "ManagedOpenShift" です。

    次のコマンドを実行して、アカウントのロールを削除します。

    $ rosa delete account-roles --prefix <prefix> --mode auto --yes
    Copy to Clipboard Toggle word wrap

1.9.2. UI を使用した ROSA クラスターの削除

  1. OpenShift Cluster Manager にログインし、削除するクラスターを見つけます。
  2. クラスターの右側にある 3 つの点をクリックします。

  3. ドロップダウンメニューで、Delete cluster をクリックします。

  4. 削除を確認するクラスターの名前を入力し、Delete をクリックします。

1.10. サポートの利用

必要なときに適切なサポートを受けることが重要です。ここでは、サポートが必要な場合に利用できるリソースをいくつか紹介します。

1.10.1. サポート連絡先の追加

クラスターに関する連絡用のメールアドレスを追加できます。

  1. Red Hat OpenShift Cluster Manager ユーザーインターフェイス (UI) で、サイドナビゲーションタブの クラスターリスト をクリックします。
  2. サポートが必要なクラスターを選択します。
  3. Support タブをクリックします。
  4. Add notification contact をクリックし、追加のメールアドレスを入力します。

1.10.2. UI を使用して Red Hat にサポートについて問い合わせる

  1. OpenShift Cluster Manager UI で、Support タブをクリックします。
  2. Open support case をクリックします。

1.10.3. サポートページを使用して Red Hat にサポートについて問い合わせる

  1. Red Hat サポートページ に移動します。
  2. Open a new Case をクリックします。

  3. Red Hat アカウントにログインします。
  4. サポートに問い合わせる理由を選択します。

  5. Red Hat OpenShift Service on AWS を選択します。

  6. continue をクリックします。
  7. 問題の概要とリクエストの詳細を入力します。ファイル、ログ、スクリーンショットをアップロードします。ご提供いただく情報が多いほど、Red Hat サポートが適切な解決方法を見つけやすくなります。

    注記

    このページの下部に、問題の解決に役立つ関連性の高い提案が表示されます。

  8. Continue をクリックします。
  9. 新しいフィールドの質問に回答します。
  10. Continue をクリックします。
  11. ケースに関する次の情報を入力します。

    1. Support level: Premium
    2. Severity: Red Hat サポートの重大度レベルの定義を確認して、正しいものを選択します。
    3. Group: このケースが他のいくつかのケースに関連する場合は、対応するグループを選択できます。
    4. Language
    5. Send notifications: アクティビティーの通知を受け取るためのメールアドレスを追加します。
    6. Red Hat associates: Red Hat の従業員とやり取りをしていて、その従業員と情報を共有する場合は、ここに従業員のメールアドレスを入力できます。
    7. Alternate Case ID: お客様独自の ID を割り当てる場合は、ここに入力できます。
  12. Continue をクリックします。
  13. 確認画面で、問い合わせに関連する正しいクラスター ID を選択していることを確認します。

  14. Submit をクリックします。
  15. 指定した重大度レベル の約束された応答時間に応じて連絡が届きます。

第2章 アプリケーションワークショップの展開

2.1. ワークショップの概要

2.1.1. はじめに

クラスターのプロビジョニングが正常に完了したら、このワークショップに従ってクラスターにアプリケーションをデプロイし、コンテナーベースのアプリケーションのデプロイと操作の概念を理解します。

ワークショップの目的

  • Source-to-Image (S2I) と Kubernetes デプロイメントオブジェクトを使用して Node.js ベースのアプリケーションをデプロイする
  • ソースコードの変更を自動的にプッシュするための継続的デリバリー (CD) パイプラインを設定する
  • 自己修復アプリケーションを体験する
  • ConfigMap、シークレット、環境変数による設定管理について学ぶ
  • 永続ストレージを使用して Pod の再起動間でデータを共有する
  • Kubernetes とアプリケーションのネットワークを探索する
  • ROSA と Kubernetes の機能について理解を深める
  • Horizontal Pod Autoscaler (HPA) からの負荷に基づいて Pod を自動的にスケーリングします

前提条件

2.1.2. OSToy アプリケーションについて

OSToy は、Kubernetes の機能を探索するために ROSA クラスターにデプロイされる Node.js アプリケーションです。

このアプリケーションのユーザーインターフェイスから、以下を実行できます。

  • メッセージをログに書き込む (stdout/stderr)
  • 自己修復を確認するために意図的にアプリケーションをクラッシュさせる
  • liveness プローブを切り替えて OpenShift の動作を監視する
  • ConfigMap、シークレット、環境変数を読み取る
  • 共有ストレージに接続したときにファイルを読み書きする
  • ネットワーク接続、クラスター内 DNS、および含まれるマイクロサービスとの通信を確認します。
  • HPA を使用して Pod の自動スケーリングを確認するには、負荷を増やします。
2.1.2.1. OSToy アプリケーション図
2.1.2.2. OSToy の UI について
  1. Pod の名前
  2. ホーム: アプリケーションのホームページ
  3. 永続ストレージ: アプリケーションにバインドされた永続ボリュームにデータを書き込みます
  4. Config map: アプリケーションで利用可能な ConfigMap とキーと値のペアを表示します。
  5. シークレット: アプリケーションで利用可能なシークレットとキーと値のペアを表示します
  6. ENV 変数: アプリケーションで利用可能な環境変数を表示します
  7. ネットワーキング: ネットワーキングツール
  8. Pod の自動スケーリング: Pod の負荷を増やし、Horizontal Pod Autoscaler (HPA) をテストします。
  9. ACK S3: AWS S3 と統合してバケットへのオブジェクトの読み書きを行う
  10. 概要: アプリケーション情報
2.1.2.3. ラボのリソース
  • OSToy アプリケーションのソースコード
  • OSToy フロントエンドコンテナーイメージ
  • OSToy マイクロサービスコンテナーイメージ
  • デプロイメント定義 YAML ファイル:

    ostoy-frontend-deployment.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ostoy-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ostoy-frontend
      labels:
        app: ostoy
    spec:
      selector:
        matchLabels:
          app: ostoy-frontend
      strategy:
        type: Recreate
      replicas: 1
      template:
        metadata:
          labels:
            app: ostoy-frontend
        spec:
          # Uncomment to use with ACK portion of the workshop
          # If you chose a different service account name please replace it.
          # serviceAccount: ostoy-sa
          containers:
          - name: ostoy-frontend
            securityContext:
              allowPrivilegeEscalation: false
              runAsNonRoot: true
              seccompProfile:
                type: RuntimeDefault
              capabilities:
                drop:
                - ALL
            image: quay.io/ostoylab/ostoy-frontend:1.6.0
            imagePullPolicy: IfNotPresent
            ports:
            - name: ostoy-port
              containerPort: 8080
            resources:
              requests:
                memory: "256Mi"
                cpu: "100m"
              limits:
                memory: "512Mi"
                cpu: "200m"
            volumeMounts:
            - name: configvol
              mountPath: /var/config
            - name: secretvol
              mountPath: /var/secret
            - name: datavol
              mountPath: /var/demo_files
            livenessProbe:
              httpGet:
                path: /health
                port: 8080
              initialDelaySeconds: 10
              periodSeconds: 5
            env:
            - name: ENV_TOY_SECRET
              valueFrom:
                secretKeyRef:
                  name: ostoy-secret-env
                  key: ENV_TOY_SECRET
            - name: MICROSERVICE_NAME
              value: OSTOY_MICROSERVICE_SVC
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          volumes:
            - name: configvol
              configMap:
                name: ostoy-configmap-files
            - name: secretvol
              secret:
                defaultMode: 420
                secretName: ostoy-secret
            - name: datavol
              persistentVolumeClaim:
                claimName: ostoy-pvc
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ostoy-frontend-svc
      labels:
        app: ostoy-frontend
    spec:
      type: ClusterIP
      ports:
        - port: 8080
          targetPort: ostoy-port
          protocol: TCP
          name: ostoy
      selector:
        app: ostoy-frontend
    ---
    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: ostoy-route
    spec:
      to:
        kind: Service
        name: ostoy-frontend-svc
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: ostoy-secret-env
    type: Opaque
    data:
      ENV_TOY_SECRET: VGhpcyBpcyBhIHRlc3Q=
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: ostoy-configmap-files
    data:
      config.json:  '{ "default": "123" }'
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: ostoy-secret
    data:
      secret.txt: VVNFUk5BTUU9bXlfdXNlcgpQQVNTV09SRD1AT3RCbCVYQXAhIzYzMlk1RndDQE1UUWsKU01UUD1sb2NhbGhvc3QKU01UUF9QT1JUPTI1
    type: Opaque
    Copy to Clipboard Toggle word wrap

    ostoy-microservice-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ostoy-microservice
      labels:
        app: ostoy
    spec:
      selector:
        matchLabels:
          app: ostoy-microservice
      replicas: 1
      template:
        metadata:
          labels:
            app: ostoy-microservice
        spec:
          containers:
          - name: ostoy-microservice
            securityContext:
              allowPrivilegeEscalation: false
              runAsNonRoot: true
              seccompProfile:
                type: RuntimeDefault
              capabilities:
                drop:
                - ALL
            image: quay.io/ostoylab/ostoy-microservice:1.5.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 8080
              protocol: TCP
            resources:
              requests:
                memory: "128Mi"
                cpu: "50m"
              limits:
                memory: "256Mi"
                cpu: "100m"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ostoy-microservice-svc
      labels:
        app: ostoy-microservice
    spec:
      type: ClusterIP
      ports:
        - port: 8080
          targetPort: 8080
          protocol: TCP
      selector:
        app: ostoy-microservice
    Copy to Clipboard Toggle word wrap

  • ACK S3 の S3 バケットマニフェスト

    s3-bucket.yaml

    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    metadata:
      name: ostoy-bucket
      namespace: ostoy
    spec:
      name: ostoy-bucket
    Copy to Clipboard Toggle word wrap

注記

OSToy アプリケーションのデプロイを簡略化するために、上記のデプロイメントマニフェストで必要なすべてのオブジェクトはグループ化されています。一般的なエンタープライズデプロイメントでは、Kubernetes オブジェクトごとに個別のマニフェストファイルを使用することを推奨します。

2.2. Kubernetes を使用した OSToy アプリケーションのデプロイ

アプリケーションをデプロイするには、コンテナーイメージを作成し、それをイメージリポジトリーに保存し、そのイメージを使用するデプロイメントオブジェクトを定義する必要があります。

アプリケーションのデプロイには次の手順が含まれます。

  • フロントエンドとバックエンドのマイクロサービスコンテナーのイメージを作成する
  • コンテナーイメージをイメージリポジトリーに保存する
  • アプリケーションの Kubernetes デプロイメントオブジェクトを作成する
  • アプリケーションのデプロイ
注記

このワークショップでは、アプリケーションのデプロイメントに焦点を当て、ユーザーに既存のイメージを使用するリモートファイルを実行させます。

2.2.1. ログインコマンドの取得

手順

  1. 次のコマンドを実行して、コマンドラインインターフェイス (CLI) にログインしていることを確認します。

    rosa whoami
    Copy to Clipboard Toggle word wrap

    コマンドラインインターフェイスにログインしている場合は、新しいプロジェクトの作成に進んでください。コマンドラインインターフェイスにログインしていない場合は、この手順を続行します。

  2. Web コンソールを使用してクラスターにアクセスします。
  3. 右上隅のログイン名の横にあるドロップダウン矢印をクリックし、ログインコマンドのコピー を選択します。

    新しいタブが開きます。

  4. 認証方法を選択します。
  5. Display Token をクリックします。
  6. Log in with this token の下のコマンドをコピーします。
  7. ターミナルから、コピーしたコマンドを貼り付けて実行します。ログインに成功すると、次の確認メッセージが表示されます。

    $ oc login --token=<your_token> --server=https://api.osd4-demo.abc1.p1.openshiftapps.com:6443
    Logged into "https://api.myrosacluster.abcd.p1.openshiftapps.com:6443" as "rosa-user" using the token provided.
    
    You don't have any projects. You can try to create a new project, by running
    
    oc new-project <project name>
    Copy to Clipboard Toggle word wrap

2.2.2. 新規プロジェクトの作成

好みのインターフェイスを使用して新しいプロジェクトを作成します。

2.2.2.1. CLI を使用して新しいプロジェクトを作成する

手順

  • 以下のコマンドを実行して、クラスターに ostoy という名前の新規プロジェクトを作成します。

    $ oc new-project ostoy
    Copy to Clipboard Toggle word wrap

    出力例

    Now using project "ostoy" on server "https://api.myrosacluster.abcd.p1.openshiftapps.com:6443".
    Copy to Clipboard Toggle word wrap

    • オプション: 次のコマンドを実行して、一意のプロジェクト名を作成します。

      $ oc new-project ostoy-$(uuidgen | cut -d - -f 2 | tr '[:upper:]' '[:lower:]')
      Copy to Clipboard Toggle word wrap
2.2.2.2. Web コンソールを使用して新しいプロジェクトを作成する

手順

  1. Web コンソールから、Home → Projects をクリックします。
  2. Projects ページで Create Project をクリックします。

  3. [プロジェクトの作成] ボックスで、[名前] フィールドにプロジェクト名を入力します。
  4. Create をクリックします。

2.2.3. バックエンドマイクロサービスのデプロイ

マイクロサービスは内部 Web リクエストを処理し、現在のホスト名とランダムに生成された色の文字列を含む JSON オブジェクトを返します。

手順

  • 次のコマンドを実行してマイクロサービスをデプロイします。

    $ oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yaml
    Copy to Clipboard Toggle word wrap

    出力例

    $ oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yaml
    deployment.apps/ostoy-microservice created
    service/ostoy-microservice-svc created
    Copy to Clipboard Toggle word wrap

2.2.4. フロントエンドマイクロサービスのデプロイ

フロントエンドデプロイメントでは、アプリケーションと追加の Kubernetes オブジェクトに Node.js フロントエンドを使用します。

フロントエンドデプロイメントでは、次の機能が定義されます。

  • 永続ボリューム要求
  • Deployment オブジェクト
  • サービス
  • ルート
  • ConfigMap
  • シークレット

手順

  • 次のコマンドを実行して、アプリケーションのフロントエンドをデプロイし、オブジェクトを作成します。

    $ oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-frontend-deployment.yaml
    Copy to Clipboard Toggle word wrap

    出力例

    persistentvolumeclaim/ostoy-pvc created
    deployment.apps/ostoy-frontend created
    service/ostoy-frontend-svc created
    route.route.openshift.io/ostoy-route created
    configmap/ostoy-configmap-env created
    secret/ostoy-secret-env created
    configmap/ostoy-configmap-files created
    secret/ostoy-secret created
    Copy to Clipboard Toggle word wrap

    すべてのオブジェクトが正常に作成されるはずです。

2.2.5. アプリケーションへのルートを取得する

アプリケーションにアクセスするためのルートを取得します。

手順

  • 次のコマンドを実行して、アプリケーションへのルートを取得します。

    $ oc get route
    Copy to Clipboard Toggle word wrap

    出力例

    NAME          HOST/PORT                                                 PATH   SERVICES             PORT    TERMINATION   WILDCARD
    ostoy-route   ostoy-route-ostoy.apps.<your-rosa-cluster>.abcd.p1.openshiftapps.com          ostoy-frontend-svc   <all>                 None
    Copy to Clipboard Toggle word wrap

2.2.6. アプリケーションの表示

手順

  1. 前の手順で出力された ostoy-route-ostoy.apps.<your-rosa-cluster>.abcd.p1.openshiftapps.com URL をコピーします。
  2. コピーした URL を Web ブラウザーに貼り付けて Enter キーを押します。アプリケーションのホームページが表示されます。ページが読み込まれない場合は、https ではなく http を使用していることを確認してください。

2.3. Health check

Kubernetes が Pod の障害にどのように対応するかを確認します。そのためには、Pod を意図的にクラッシュさせ、Kubernetes liveness プローブに応答しないようにします。

2.3.1. デスクトップの準備

手順

  • OpenShift Web コンソールから、Workloads > Deployments > ostoy-frontend を選択して、OSToy デプロイメントを表示します。

2.3.2. Pod のクラッシュ

手順

  1. OSToy アプリケーションの Web コンソールから、左側のメニューの Home をクリックし、Crash Pod ボックスに This is goodbye! などのメッセージを入力します。
  2. Crash Pod をクリックします。

    Pod がクラッシュし、Kubernetes が Pod を再起動します。

2.3.3. 復活した Pod の確認

手順

  • OpenShift Web コンソールから、Deployments 画面にすばやく切り替えます。Pod が黄色に変わり、ダウンしていることがわかります。すぐに復活して青色に変わるはずです。復活のプロセスは急速に起こります。

検証

  1. Web コンソールから、Pods > ostoy-frontend-xxxxxxx-xxxx をクリックして、Pod 画面に切り替えます。

  2. [イベント] サブタブをクリックし、コンテナーがクラッシュして再起動したことを確認します。

2.3.4. アプリケーションを誤動作させる

手順

~~。Pod イベントページを開いたままにしておきます。~~

  1. OSToy アプリケーションから、Toggle Health Status タイルの Toggle Health をクリックします。Current Health 状態が I’m not feeling all that well に切り替わるのを確認します。

検証

アプリケーションを誤動作させると、アプリケーションは 200 HTTP コード で応答を停止します。3 回連続して失敗すると、Kubernetes は Pod を停止して再起動します。

  • Web コンソールから Pod イベントページに戻り、liveness プローブが失敗し、Pod が再起動したことを確認します。

次のイメージは、Pod イベントページに表示される内容の例を示しています。

A. Pod で失敗が 3 回連続で発生しました。

B. Kubernetes が Pod を停止します。

C. Kubernetes が Pod を再起動します。

2.4. クラスターストレージの永続ボリューム

{rosa-classic-first} と Red Hat OpenShift Service on AWS (ROSA) は、Amazon Web Services (AWS) Elastic Block Store (EBS) または AWS Elastic File System (EFS) のいずれかを使用して永続ボリュームを保存することをサポートしています。

2.4.1. 永続ボリュームの使用

以下の手順に従ってファイルを作成し、クラスター内の永続ボリュームに保存し、Pod の障害と再作成後もファイルが存在することを確認します。

2.4.1.1. 永続ボリューム要求の表示

手順

  1. クラスターの OpenShift Web コンソールに移動します。
  2. 左側のメニューで Storage をクリックし、PersistentVolumeClaims をクリックして、すべての永続ボリューム要求のリストを表示します。
  3. 永続ボリューム要求をクリックすると、サイズ、アクセスモード、ストレージクラス、その他の要求の詳細が表示されます。

    注記

    アクセスモードは ReadWriteOnce (RWO) です。つまり、ボリュームは 1 つのノードにのみマウントでき、Pod または複数の Pod がボリュームの読み取りと書き込みを行うことができます。

2.4.1.2. ファイルの保存

手順

  1. OSToy アプリケーションコンソールで、左側のメニューで Persistent Storage をクリックします。
  2. Filename ボックスに、.txt 拡張子が付いたファイル名 ( test-pv.txt など) を入力します。
  3. File contents ボックスに、テキストの文を入力します (例: OpenShift is the greatest thing since sliced bread!)。
  4. Create file をクリックします。

  5. OSToy アプリケーションコンソールで 既存のファイル までスクロールします。
  6. 作成したファイルをクリックすると、ファイル名と内容が表示されます。

2.4.1.3. Pod のクラッシュ

手順

  1. OSToy アプリケーションコンソールで、左側のメニューの Home をクリックします。
  2. Crash Pod をクリックします。
2.4.1.4. 永続ストレージの確認

手順

  1. Pod が再作成されるまで待機します。
  2. OSToy アプリケーションコンソールで、左側のメニューで Persistent Storage をクリックします。
  3. 作成したファイルを見つけて開き、内容を表示して確認します。

検証

デプロイメント YAML ファイルには /var/demo_files ディレクトリー が永続ボリューム要求にマウントされたことが示されています。

  1. 次のコマンドを実行して、フロントエンド Pod の名前を取得します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、コンテナー内でセキュアシェル (SSH) セッションを開始します。

    $ oc rsh <pod_name>
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行してディレクトリーに移動します。

    $ cd /var/demo_files
    Copy to Clipboard Toggle word wrap
  4. オプション: 次のコマンドを実行して、作成したすべてのファイルを表示します。

    $ ls
    Copy to Clipboard Toggle word wrap
  5. 次のコマンドを実行して、ファイルを開いてコンテンツを表示します。

    $ cat test-pv.txt
    Copy to Clipboard Toggle word wrap
  6. 出力が OSToy アプリケーションコンソールに入力したテキストであることを確認します。

    端末の例

    $ oc get pods
    NAME                                  READY     STATUS    RESTARTS   AGE
    ostoy-frontend-5fc8d486dc-wsw24       1/1       Running   0          18m
    ostoy-microservice-6cf764974f-hx4qm   1/1       Running   0          18m
    
    $ oc rsh ostoy-frontend-5fc8d486dc-wsw24
    
    $ cd /var/demo_files/
    
    $ ls
    lost+found   test-pv.txt
    
    $ cat test-pv.txt
    OpenShift is the greatest thing since sliced bread!
    Copy to Clipboard Toggle word wrap

2.4.1.5. セッションの終了

手順

  • ターミナルで exit と入力してセッションを終了し、CLI に戻ります。

2.5. ConfigMap、シークレット、環境変数

このチュートリアルでは、config mapシークレット環境変数 を使用して OSToy アプリケーションを設定する方法を説明します。

2.5.1. ConfigMap を使用した設定

config map を使用すると、コンテナーイメージのコンテンツから設定アーティファクトを分離して、コンテナー化されたアプリケーションの移植性を維持できます。

手順

  • OSToy アプリの左側のメニューで、Config Maps をクリックすると、OSToy アプリケーションで使用できる config map の内容が表示されます。このコードスニペットは、config map の設定の例を示しています。

    出力例

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: ostoy-configmap-files
    data:
      config.json:  '{ "default": "123" }'
    Copy to Clipboard Toggle word wrap

2.5.2. シークレットを使用した設定

Kubernetes の Secret オブジェクトを使用すると、パスワード、OAuth トークン、SSH 鍵などの機密情報を保存および管理できます。機密情報をシークレットに格納すると、Pod 定義やコンテナーイメージにプレーンテキストで格納するよりも安全性と柔軟性が高まります。

手順

  • OSToy アプリの左側のメニューで、Secrets をクリックすると、OSToy アプリケーションで使用できるシークレットの内容が表示されます。このコードスニペットは、シークレットの設定の例を示しています。

    出力例

    USERNAME=my_user
    PASSWORD=VVNFUk5BTUU9bXlfdXNlcgpQQVNTV09SRD1AT3RCbCVYQXAhIzYzMlk1RndDQE1UUWsKU01UUD1sb2NhbGhvc3QKU01UUF9QT1JUPTI1
    SMTP=localhost
    SMTP_PORT=25
    Copy to Clipboard Toggle word wrap

2.5.3. 環境変数を使用した設定

環境変数を使用すると、コードを変更することなくアプリケーションの動作を簡単に変更できます。同じアプリケーションの別々のデプロイメントで、環境変数によって動作を変えることができます。Red Hat OpenShift Service on AWS では、Pod またはデプロイメントの環境変数の設定、表示、更新を簡単に行うことができます。

手順

  • OSToy アプリの左側のメニューで、ENV Variables をクリックすると、OSToy アプリケーションで使用できる環境変数が表示されます。このコードスニペットは、環境変数の設定の例を示しています。

    出力例

    {
      "npm_config_local_prefix": "/opt/app-root/src",
      "STI_SCRIPTS_PATH": "/usr/libexec/s2i",
      "npm_package_version": "1.7.0",
      "APP_ROOT": "/opt/app-root",
      "NPM_CONFIG_PREFIX": "/opt/app-root/src/.npm-global",
      "OSTOY_MICROSERVICE_PORT_8080_TCP_PORT": "8080",
      "NODE": "/usr/bin/node",
      "LD_PRELOAD": "libnss_wrapper.so",
      "KUBERNETES_SERVICE_HOST": "172.30.0.1",
      "OSTOY_MICROSERVICE_PORT": "tcp://172.30.60.255:8080",
      "OSTOY_PORT": "tcp://172.30.152.25:8080",
      "npm_package_name": "ostoy",
      "OSTOY_SERVICE_PORT_8080_TCP": "8080",
      "_": "/usr/bin/node"
      "ENV_TOY_CONFIGMAP": "ostoy-configmap -env"
    }
    Copy to Clipboard Toggle word wrap

2.6. ネットワーク

OSToy アプリケーションは、クラスター内ネットワークを使用して、マイクロサービスによって機能を分離します。

このワークショップには、それぞれ独自のサービスを持つ少なくとも 2 つの個別の Pod があります。1 つの Pod は、サービスとパブリックにアクセス可能なルートを備えたフロントエンド Web アプリケーションとして機能します。もう一方の Pod は、フロントエンド Pod がマイクロサービスと通信できるように、サービスオブジェクトを備えたバックエンドマイクロサービスとして機能します。

複数の Pod がある場合、Pod 間で通信が行われます。マイクロサービスは、クラスターの外部や他の名前空間やプロジェクトからはアクセスできません。マイクロサービスの目的は、内部 Web リクエストを処理し、現在のホスト名 (Pod の名前) とランダムに生成された色の文字列を含む JSON オブジェクトを返すことです。この色文字列は、OSToy アプリケーションの Web コンソールにその色のボックスを表示します。

ネットワークの制限の詳細は、ネットワークポリシーについてを 参照してください。

2.6.1. クラスター内ネットワーク

OSToy アプリケーションでネットワーク設定を表示できます。

手順

  1. OSToy アプリケーション Web コンソールで、左側のメニューの [ネットワーク] を クリックします。
  2. ネットワーク設定を確認します。タイルホスト名検索は、Pod 用に作成されたサービス名が内部 ClusterIP アドレスに変換される方法を示しています。

  3. ホスト名検索タイルに、<service_name>.<namespace>.svc.cluster.local という形式で作成したマイクロサービスの名前を入力します。次のコマンドを実行すると、ostoy-microservice.yaml のサービス定義でマイクロサービス名を見つけることができます。

    $ oc get service <name_of_service> -o yaml
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: v1
    kind: Service
    metadata:
      name: ostoy-microservice-svc
      labels:
        app: ostoy-microservice
    spec:
      type: ClusterIP
      ports:
        - port: 8080
          targetPort: 8080
          protocol: TCP
      selector:
        app: ostoy-microservice
    Copy to Clipboard Toggle word wrap

    この例では、完全なホスト名は、ostoy-microservice-svc.ostoy.svc.cluster.local です。

  4. IP アドレスが返されます。上記の例では、172.30.165.246 になります。これはクラスター内 IP アドレスであり、クラスター内からのみアクセスできます。

2.7. アプリケーションのスケーリング

Horizontal Pod Autoscaler (HPA) を使用して、Pod を手動または自動でスケーリングします。クラスターノードをスケーリングすることもできます。

前提条件

  • アクティブな ROSA クラスター
  • 展開された OSToy アプリケーション

2.7.1. Pod の手動スケーリング

次のいずれかの方法を使用して、アプリケーションの Pod を手動でスケーリングできます。

  • ReplicaSet またはデプロイメント定義の変更
  • コマンドラインの使用
  • Web コンソールの使用

このワークショップでは、まず 1 つの Pod だけをマイクロサービスに使用します。デプロイメント定義でレプリカを 1 に定義すると、Kubernetes レプリケーションコントローラーが 1 つの Pod を維持しようとします。次に、負荷に基づいて必要に応じてさらに Pod をスケールアウトする Horizontal Pod Autoscaler (HPA) を使用して Pod の自動スケーリングを定義する方法を学習します。

手順

  1. OSToy アプリケーションで、ナビゲーションメニューの Networking タブをクリックします。
  2. クラスター内通信セクションで、色がランダムに変化するボックスを見つけます。ボックス内に、マイクロサービスの Pod 名が表示されます。この例では、マイクロサービスの Pod が 1 つしかないため、ボックスは 1 つしかありません。

  3. 次のコマンドを実行して、マイクロサービスに対して実行されている Pod が 1 つだけであることを確認します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                  READY     STATUS    RESTARTS   AGE
    ostoy-frontend-679cb85695-5cn7x       1/1       Running   0          1h
    ostoy-microservice-86b4c6f559-p594d   1/1       Running   0          1h
    Copy to Clipboard Toggle word wrap

  4. ostoy-microservice-deployment.yaml をダウンロードし、ローカルマシンに保存します。
  5. 次の例を使用して、デプロイメント定義を 1 Pod から 3 Pod に変更します。

    spec:
        selector:
          matchLabels:
            app: ostoy-microservice
        replicas: 3
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行してレプリカの変更を適用します。

    $ oc apply -f ostoy-microservice-deployment.yaml
    Copy to Clipboard Toggle word wrap
    注記

    OpenShift Web コンソールで Workloads > Deployments > ostoy-microservice > YAML タブに移動して、ostoy-microservice-deployment.yaml ファイルを編集することもできます。

  7. 次のコマンドを実行して、Pod が 3 つあることを確認します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    出力から、マイクロサービスの Pod が 1 つではなく 3 つあることがわかります。

    出力例

    NAME                                  READY   STATUS    RESTARTS   AGE
    ostoy-frontend-5fbcc7d9-rzlgz         1/1     Running   0          26m
    ostoy-microservice-6666dcf455-2lcv4   1/1     Running   0          81s
    ostoy-microservice-6666dcf455-5z56w   1/1     Running   0          81s
    ostoy-microservice-6666dcf455-tqzmn   1/1     Running   0          26m
    Copy to Clipboard Toggle word wrap

  8. コマンドラインインターフェイス (CLI) または Web ユーザーインターフェイス (UI) を使用してアプリケーションをスケーリングします。

    • CLI で次のコマンドを実行して、Pod の数を 3 から 2 に減らします。

      $ oc scale deployment ostoy-microservice --replicas=2
      Copy to Clipboard Toggle word wrap
    • OpenShift Web コンソール UI のナビゲーションメニューから、Workloads > Deployments > ostoy-microservice をクリックします。
    • 中央に 3 Pod のラベルが付いた青い円を見つけます。
    • 円の横にある矢印を選択すると、Pod の数が増加します。下矢印を選択して 2 にします。

検証

CLI、Web UI、または OSToy アプリケーションを使用して Pod の数を確認します。

  • CLI から次のコマンドを実行して、マイクロサービスに 2 つの Pod が使用されていることを確認します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                  READY   STATUS    RESTARTS   AGE
    ostoy-frontend-5fbcc7d9-rzlgz         1/1     Running   0          75m
    ostoy-microservice-6666dcf455-2lcv4   1/1     Running   0          50m
    ostoy-microservice-6666dcf455-tqzmn   1/1     Running   0          75m
    Copy to Clipboard Toggle word wrap

  • Web UI で、Workloads > Deployments > ostoy-microservice を選択します。

  • OSToy アプリケーションのナビゲーションメニューで [Networking] を選択して、2 つの Pod があることを確認することもできます。2 つの Pod の色付きボックスが 2 つがあるはずです。

2.7.2. Pod の自動スケーリング

Red Hat OpenShift Service on AWS は、Horizontal Pod Autoscaler (HPA) を備えています。HPA はメトリクスを使用して、必要に応じて Pod の数を増減します。

手順

  1. Web UI のナビゲーションメニューから、Pod Auto Scaling を選択します。

  2. 次のコマンドを実行して HPA を作成します。

    $ oc autoscale deployment/ostoy-microservice --cpu-percent=80 --min=1 --max=10
    Copy to Clipboard Toggle word wrap

    このコマンドは、ostoy-microservice デプロイメントによって制御される Pod のレプリカを 1 - 10 個の間で維持する HPA を作成するものです。デプロイメント中に、HPA はレプリカの数を増減して、すべての Pod の平均 CPU 使用率を 80% および 40 ミリコアに保ちます。

  3. Pod Auto Scaling > Horizontal Pod Autoscaling ページで、Increase the load を選択します。

    重要

    負荷が増加すると、が発生するため、ページが応答しなくなる可能性があります。これは予想どおりの反応です。負荷の増加を 1 回だけクリックします。プロセスの詳細は、このマイクロサービスの GitHub リポジトリー を参照してください。

    数分後、ページに新しい Pod が色付きのボックスで表示されます。

    注記

    ページに遅延が発生する可能性があります。

検証

次のいずれかの方法で Pod 数を確認します。

  • OSToy アプリケーションの Web UI で、Remote Pods ボックスを確認します。

    Pod は 1 つしかないため、ワークロードを増やすと Pod も増加するはずです。

  • CLI で、次のコマンドを実行します。

    oc get pods --field-selector=status.phase=Running | grep microservice
    Copy to Clipboard Toggle word wrap

    出力例

    ostoy-microservice-79894f6945-cdmbd   1/1     Running   0          3m14s
    ostoy-microservice-79894f6945-mgwk7   1/1     Running   0          4h24m
    ostoy-microservice-79894f6945-q925d   1/1     Running   0          3m14s
    Copy to Clipboard Toggle word wrap

  • OpenShift Cluster Manager から自動スケーリングを確認することもできます。

    1. OpenShift Web コンソールのナビゲーションメニューで、Observe > Dashboards をクリックします。
    2. ダッシュボードで、Kubernetes / Compute Resources / Namespace (Pods) と namespace ostoy を選択します。

    3. CPU とメモリーのリソース使用状況を示すグラフが表示されます。上のグラフは Pod ごとの最近の CPU 消費量を示し、下のグラフはメモリー使用量を示しています。グラフ内の記号の意味は次のとおりです。

      1. 負荷が増加しました (A)。
      2. 2 つの新しい Pod が作成されました (B および C)。
      3. 各グラフの幅は CPU 消費量を表し、どの Pod がより多くの負荷を処理したかを示しています。
      4. 負荷が減少し (D)、Pod が削除されました。

2.7.3. ノードの自動スケーリング

Red Hat OpenShift Service on AWS では、ノードの自動スケーリング を使用できます。ここでは、クラスターが処理できない大きなワークロードを持つジョブを含む新しいプロジェクトを作成します。自動スケーリングが有効な場合、負荷が現在の容量を超えたときに、クラスターが負荷を処理するために新しいノードを自動的に作成します。

前提条件

  • マシンプールで自動スケーリングが有効になっている。

手順

  1. 次のコマンドを実行して、autoscale-ex という新しいプロジェクトを作成します。

    $ oc new-project autoscale-ex
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行してジョブを作成します。

    $ oc create -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/job-work-queue.yaml
    Copy to Clipboard Toggle word wrap
  3. 数分後、次のコマンドを実行して Pod を確認します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                     READY   STATUS    RESTARTS   AGE
    work-queue-5x2nq-24xxn   0/1     Pending   0          10s
    work-queue-5x2nq-57zpt   0/1     Pending   0          10s
    work-queue-5x2nq-58bvs   0/1     Pending   0          10s
    work-queue-5x2nq-6c5tl   1/1     Running   0          10s
    work-queue-5x2nq-7b84p   0/1     Pending   0          10s
    work-queue-5x2nq-7hktm   0/1     Pending   0          10s
    work-queue-5x2nq-7md52   0/1     Pending   0          10s
    work-queue-5x2nq-7qgmp   0/1     Pending   0          10s
    work-queue-5x2nq-8279r   0/1     Pending   0          10s
    work-queue-5x2nq-8rkj2   0/1     Pending   0          10s
    work-queue-5x2nq-96cdl   0/1     Pending   0          10s
    work-queue-5x2nq-96tfr   0/1     Pending   0          10s
    Copy to Clipboard Toggle word wrap

  4. 保留中の 状態の Pod が多数あるため、このステータスによりオートスケーラーがトリガーされ、マシンプールにさらにノードが作成されます。これらのワーカーノードが作成されるまで待ちます。
  5. 数分後、次のコマンドを使用して、現在のワーカーノードの数を確認します。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                         STATUS   ROLES          AGE     VERSION
    ip-10-0-138-106.us-west-2.compute.internal   Ready    infra,worker   22h     v1.23.5+3afdacb
    ip-10-0-153-68.us-west-2.compute.internal    Ready    worker         2m12s   v1.23.5+3afdacb
    ip-10-0-165-183.us-west-2.compute.internal   Ready    worker         2m8s    v1.23.5+3afdacb
    ip-10-0-176-123.us-west-2.compute.internal   Ready    infra,worker   22h     v1.23.5+3afdacb
    ip-10-0-195-210.us-west-2.compute.internal   Ready    master         23h     v1.23.5+3afdacb
    ip-10-0-196-84.us-west-2.compute.internal    Ready    master         23h     v1.23.5+3afdacb
    ip-10-0-203-104.us-west-2.compute.internal   Ready    worker         2m6s    v1.23.5+3afdacb
    ip-10-0-217-202.us-west-2.compute.internal   Ready    master         23h     v1.23.5+3afdacb
    ip-10-0-225-141.us-west-2.compute.internal   Ready    worker         23h     v1.23.5+3afdacb
    ip-10-0-231-245.us-west-2.compute.internal   Ready    worker         2m11s   v1.23.5+3afdacb
    ip-10-0-245-27.us-west-2.compute.internal    Ready    worker         2m8s    v1.23.5+3afdacb
    ip-10-0-245-7.us-west-2.compute.internal     Ready    worker         23h     v1.23.5+3afdacb
    Copy to Clipboard Toggle word wrap

    ワークロードを処理するためにワーカーノードが自動的に作成されたことがわかります。

  6. 次のコマンドを入力して、OSToy アプリケーションに戻ります。

    $ oc project ostoy
    Copy to Clipboard Toggle word wrap

2.8. S2I デプロイメント

統合された Source-to-Image (S2I) ビルダーは、OpenShift でアプリケーションをデプロイする 1 つの方法です。S2I は、再現可能な Docker 形式のコンテナーイメージをビルドするためのツールです。詳細は、OpenShift の概念 を参照してください。

前提条件

  • ROSA クラスター

2.8.1. ログインコマンドを取得しています

手順

  1. 次のコマンドを実行して、コマンドラインインターフェイス (CLI) にログインしていることを確認します。

    rosa whoami
    Copy to Clipboard Toggle word wrap

    コマンドラインインターフェイスにログインしている場合は、新しいプロジェクトの作成に進んでください。コマンドラインインターフェイスにログインしていない場合は、この手順を続行します。

  2. コマンドラインインターフェイス (CLI) にログインしていない場合は、OpenShift Cluster Manager で、右上の名前の横にあるドロップダウン矢印をクリックし、ログインコマンドのコピー を選択します。

  3. 新しいタブが開きます。ユーザー名とパスワードを入力し、認証方法を選択します。
  4. Display Token をクリックします。
  5. "Log in with this token" の下のコマンドをコピーします。
  6. コピーしたコマンドをターミナルで実行して CLI にログインします。

    入力の例

    $ oc login --token=RYhFlXXXXXXXXXXXX --server=https://api.osd4-demo.abc1.p1.openshiftapps.com:6443
    Copy to Clipboard Toggle word wrap

    出力例

    Logged into "https://api.myrosacluster.abcd.p1.openshiftapps.com:6443" as "rosa-user" using the token provided.
    
    You don't have any projects. You can try to create a new project, by running
    
    oc new-project <project name>
    Copy to Clipboard Toggle word wrap

2.8.2. 新規プロジェクトの作成

  • 次のコマンドを実行して、CLI から新しいプロジェクトを作成します。

    $ oc new-project ostoy-s2i
    Copy to Clipboard Toggle word wrap

2.8.3. OSToy リポジトリーのフォーク

ソースコードの変更に基づいて自動ビルドをトリガーするには、GitHub Webhook を設定する必要があります。Webhook は、GitHub リポジトリーにコードをプッシュすると S2I ビルドをトリガーします。Webhook を設定するには、まず リポジトリー をフォークする必要があります。

重要

このガイドで以下に示す URL の <UserName> は、自分の GitHub ユーザー名に置き換えてください。

2.8.4. S2i を使用してクラスターに OSToy をデプロイする

手順

  1. OpenShift にシークレットを追加します。

    この例では、.env ファイルをエミュレートします。ファイルは OpenShift 環境に簡単に直接移動でき、シークレット内で名前を変更することもできます。

    • 次のコマンドを実行し、<UserName> を GitHub ユーザー名に置き換えます。

      $ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/secret.yaml
      Copy to Clipboard Toggle word wrap
  2. OpenShift に ConfigMap を追加します。

    この例では、OpenShift アプリケーションのデフォルト設定を上書きするために通常使用される HAProxy 設定ファイルをエミュレートします。ConfigMap でファイルの名前を変更できます。

    • 次のコマンドを実行し、<UserName> を GitHub ユーザー名に置き換えます。

      $ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/configmap.yaml
      Copy to Clipboard Toggle word wrap
  3. マイクロサービスをデプロイします。

    サービス環境変数が UI アプリケーションから使用できるようにするには、マイクロサービスをデプロイする必要があります。

    --context-dir は、 Git リポジトリー内の マイクロサービス ディレクトリーに定義されたアプリケーションをビルドします。アプリ ラベルにより、ユーザーインターフェイス (UI) アプリケーションとマイクロサービスの両方が OpenShift UI でグループ化されます。

    • 次のコマンドを実行してマイクロサービスを作成し、<UserName> を GitHub ユーザー名に置き換えます。

      $ oc new-app https://github.com/<UserName>/ostoy \
          --context-dir=microservice \
          --name=ostoy-microservice \
          --labels=app=ostoy
      Copy to Clipboard Toggle word wrap

      出力例

      --> Creating resources with label app=ostoy ...
          imagestream.image.openshift.io "ostoy-microservice" created
          buildconfig.build.openshift.io "ostoy-microservice" created
          deployment.apps "ostoy-microservice" created
          service "ostoy-microservice" created
      --> Success
          Build scheduled, use 'oc logs -f buildconfig/ostoy-microservice' to track its progress.
          Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
           'oc expose service/ostoy-microservice'
          Run 'oc status' to view your app.
      Copy to Clipboard Toggle word wrap

  4. マイクロサービスのステータスを確認します。

    • 次のコマンドを実行して、マイクロサービスが作成され、正しく実行されていることを確認します。

      $ oc status
      Copy to Clipboard Toggle word wrap

      出力例

      In project ostoy-s2i on server https://api.myrosacluster.g14t.p1.openshiftapps.com:6443
      
      svc/ostoy-microservice - 172.30.47.74:8080
        dc/ostoy-microservice deploys istag/ostoy-microservice:latest <-
          bc/ostoy-microservice source builds https://github.com/UserName/ostoy on openshift/nodejs:14-ubi8
          deployment #1 deployed 34 seconds ago - 1 pod
      Copy to Clipboard Toggle word wrap

      マイクロサービスが正常にデプロイされたことが表示されるまで待ちます。Web UI からこれを確認することもできます。

  5. フロントエンド UI をデプロイします。

    アプリケーションは、外部設定を定義するためにいくつかの環境変数に依存します。

    • 次のコマンドを実行して、シークレットと ConfigMap をアタッチし、PersistentVolume を作成します。

      $ oc new-app https://github.com/<UserName>/ostoy \
          --env=MICROSERVICE_NAME=OSTOY_MICROSERVICE
      Copy to Clipboard Toggle word wrap

      出力例

      --> Creating resources ...
          imagestream.image.openshift.io "ostoy" created
          buildconfig.build.openshift.io "ostoy" created
          deployment.apps "ostoy" created
          service "ostoy" created
      --> Success
          Build scheduled, use 'oc logs -f buildconfig/ostoy' to track its progress.
          Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
           'oc expose service/ostoy'
          Run 'oc status' to view your app.
      Copy to Clipboard Toggle word wrap

  6. 次のコマンドを実行してデプロイメントを更新します。

    $ oc patch deployment ostoy --type=json -p \
        '[{"op": "replace", "path": "/spec/strategy/type", "value": "Recreate"}, {"op": "remove", "path": "/spec/strategy/rollingUpdate"}]'
    Copy to Clipboard Toggle word wrap
  7. liveness プローブを設定します。

    アプリケーションに問題がある場合、Pod が再起動することを確認するために、liveness プローブを作成します。

    • 以下のコマンドを実行します。

      $ oc set probe deployment ostoy --liveness --get-url=http://:8080/health
      Copy to Clipboard Toggle word wrap
  8. シークレット、ConfigMap、永続ボリュームをデプロイメントにアタッチします。

    1. シークレットを添付するには、次のコマンドを実行します。

      $ oc set volume deployment ostoy --add \
          --secret-name=ostoy-secret \
          --mount-path=/var/secret
      Copy to Clipboard Toggle word wrap
    2. ConfigMap をアタッチするには、次のコマンドを実行します。

      $ oc set volume deployment ostoy --add \
          --configmap-name=ostoy-config \
          -m /var/config
      Copy to Clipboard Toggle word wrap
    3. 永続ボリュームを作成して接続するには、次のコマンドを実行します。

      $ oc set volume deployment ostoy --add \
          --type=pvc \
          --claim-size=1G \
          -m /var/demo_files
      Copy to Clipboard Toggle word wrap
  9. UI アプリケーションを OpenShift Route として公開します。

    • 次のコマンドを実行して、含まれている TLS ワイルドカード証明書を使用する HTTPS アプリケーションとしてアプリケーションをデプロイします。

      $ oc create route edge --service=ostoy --insecure-policy=Redirect
      Copy to Clipboard Toggle word wrap
  10. 次の方法でアプリケーションを参照する

    • 次のコマンドを実行して、OSToy アプリケーションで Web ブラウザーを開きます。

      $ python -m webbrowser "$(oc get route ostoy -o template --template='https://{{.spec.host}}')"
      Copy to Clipboard Toggle word wrap
    • 次のコマンドを実行してアプリケーションのルートを取得し、そのルートをコピーしてブラウザーに貼り付けます。

      $ oc get route
      Copy to Clipboard Toggle word wrap

2.9. 自動デプロイメントのための Source-to-Image (S2I) Webhook の使用

Webhook を使用すると、ソースコードを変更するたびにビルドとデプロイが自動的にトリガーされます。このプロセスの詳細は、Triggering Builds を参照してください。

手順

  1. 次のコマンドを実行して、GitHub Webhook トリガーシークレットを取得します。

    $ oc get bc/ostoy-microservice -o=jsonpath='{.spec.triggers..github.secret}'
    Copy to Clipboard Toggle word wrap

    出力例

    `o_3x9M1qoI2Wj_cz1WiK`
    Copy to Clipboard Toggle word wrap

    重要

    このプロセスの後のステップでこのシークレットを使用する必要があります。

  2. 次のコマンドを実行して、OSToy の buildconfig から GitHub Webhook トリガー URL を取得します。

    $ oc describe bc/ostoy-microservice
    Copy to Clipboard Toggle word wrap

    出力例

    [...]
    Webhook GitHub:
    	URL:	https://api.demo1234.openshift.com:443/apis/build.openshift.io/v1/namespaces/ostoy-s2i/buildconfigs/ostoy/webhooks/<secret>/github
    [...]
    Copy to Clipboard Toggle word wrap

  3. GitHub Webhook URL の <secret> テキストを、取得したシークレットに置き換えます。実際の URL は、次の出力例のようになります。

    出力例

    https://api.demo1234.openshift.com:443/apis/build.openshift.io/v1/namespaces/ostoy-s2i/buildconfigs/ostoy-microservice/webhooks/o_3x9M1qoI2Wj_czR1WiK/github
    Copy to Clipboard Toggle word wrap

  4. GitHub リポジトリーに webhook URL を設定します。

    1. リポジトリーで、Settings > Webhooks > Add webhook をクリックします。

    2. ペイロード URL フィールドに、シークレット が含まれる GitHub Webhook URL を貼り付けます。
    3. "Content type" を application/json に変更します。
    4. Add webhook ボタンをクリックします。

      Webhook が正常に設定されたことを示す GitHub のメッセージが表示されます。これで、GitHub リポジトリーに変更をプッシュするたびに、新しいビルドが自動的に開始し、ビルドが成功すると新しいデプロイが開始します。

  5. ソースコードを変更します。変更すると、ビルドとデプロイが自動的にトリガーされます。この例では、OSToy アプリケーションの状態を示す色がランダムに選択されます。設定をテストするには、ボックスをグレースケール表示に変更します。

    1. リポジトリー内のソースコード https://github.com/<username>/ostoy/blob/master/microservice/app.js に移動します。
    2. ファイルを編集します。
    3. 8 行目 (let randomColor = getRandomColor(); を含む行) をコメントアウトします。
    4. 9 行目 (let randomColor = getRandomGrayScaleColor(); を含む行) のコメントを解除します。

      7   app.get('/', function(request, response) {
      8   //let randomColor = getRandomColor(); // <-- comment this
      9   let randomColor = getRandomGrayScaleColor(); // <-- uncomment this
      10
      11  response.writeHead(200, {'Content-Type': 'application/json'});
      Copy to Clipboard Toggle word wrap
    5. "changed box to grayscale colors" など、更新を示すメッセージを入力します。
    6. 下部の Commit クリックして、変更をメインブランチにコミットします。
  6. クラスターの Web UI で、Builds > Builds をクリックして、ビルドのステータスを確認します。このビルドが完了すると、デプロイが開始します。ターミナルで oc status を実行してステータスを確認することもできます。

  7. デプロイが完了したら、ブラウザーで OSToy アプリケーションに戻ります。左側の Networking メニュー項目にアクセスします。ボックスの色がグレースケールの色だけに制限されるようになります。

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat