アプリケーションの実行


Red Hat build of MicroShift 4.14

MicroShift でのアプリケーションの実行

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、MicroShift でアプリケーションを実行する方法を詳しく説明します。

第1章 Kustomize マニフェストを使用したアプリケーションのデプロイ

kustomize 設定管理ツールをアプリケーションマニフェストとともに使用して、アプリケーションをデプロイできます。以下の手順を読み、Kustomize が MicroShift でどのように機能するかを示す例を確認してください。

1.1. Kustomize とマニフェストによるアプリケーションのデプロイの仕組み

kustomize 設定管理ツールは MicroShift と統合されています。Kustomize と OpenShift CLI (oc) を一緒に使用して、アプリケーションマニフェストにカスタマイズを適用し、そのアプリケーションを MicroShift クラスターにデプロイできます。

  • kustomization.yaml ファイルは、リソースとカスタマイズの仕様です。
  • Kustomize は、kustomization.yaml ファイルを使用してアプリケーションなどのリソースをロードします。その後、必要な変更をそのアプリケーションマニフェストに適用し、変更をオーバーレイしたマニフェストのコピーを作成します。
  • オーバーレイを含むマニフェストのコピーを使用すると、アプリケーションの元の設定ファイルがそのまま維持されると同時に、アプリケーションのイテレーションやカスタマイズを効率的にデプロイできるようになります。
  • その後、oc コマンドを使用してアプリケーションを MicroShift クラスターにデプロイできます。

1.1.1. MicroShift によるマニフェストの使用方法

MicroShift は起動するたびに、次のマニフェストディレクトリーで Kustomize マニフェストファイルを検索します。

  • /etc/microshift/manifests
  • /etc/microshift/manifests.d/*
  • /usr/lib/microshift/
  • /usr/lib/microshift/manifests.d/*

検索対象のディレクトリーに次のファイルタイプのいずれかが存在する場合、MicroShift は kubectl apply -k コマンドと同等のコマンドを自動的に実行し、マニフェストをクラスターに適用します。

  • kustomization.yaml
  • kustomization.yml
  • Kustomization

この複数のディレクトリーからの自動読み込みにより、異なるワークロードを互いに独立して実行できるという柔軟性を確保しつつ MicroShift ワークロードを管理できるようになります。

表1.1 MicroShift マニフェストディレクトリー
場所目的

/etc/microshift/manifests

設定管理システムまたは開発用の読み取り/書き込みの場所。

/etc/microshift/manifests.d/*

設定管理システムまたは開発用の読み取り/書き込みの場所。

/usr/lib/microshift/manifests

OSTree ベースのシステムに設定マニフェストを埋め込むための読み取り専用の場所。

/usr/lib/microshift/manifestsd./*

OSTree ベースのシステムに設定マニフェストを埋め込むための読み取り専用の場所。

1.2. マニフェストパスリストのオーバーライド

新しい単一パスを使用するか、複数のファイルに新しい glob パターンを使用することで、デフォルトのマニフェストパスのリストをオーバーライドできます。マニフェストパスをカスタマイズするには、次の手順を使用します。

手順

  1. 独自の値を挿入し、以下のコマンドのいずれかを実行して、デフォルトパスのリストを上書きします。

    1. 単一パスの設定ファイルで manifests.kustomizePaths<"/opt/alternate/path"> に設定します。
    2. glob パターンの設定ファイルで kustomizePaths,"/opt/alternative/path.d/*". に設定します。

      manifests:
          kustomizePaths:
              - <location> 1
      1
      "/opt/alternative/path" を使用して各位置エントリーを正確なパスに設定するか、"/opt/alternative/path.d/*" を使用して glob パターンを設定します。
  2. マニフェストの読み込みを無効にするには、設定オプションを空のリストに設定します。

    manifests:
        kustomizePaths: []
    注記

    設定ファイルはデフォルトを完全にオーバーライドします。kustomizePaths 値が設定されている場合は、設定ファイル内の値のみが使用されます。値を空のリストに設定すると、マニフェストの読み込みが無効になります。

1.3. マニフェストの使用例

この例では、/etc/microshift/manifests ディレクトリー内の kustomize マニフェストを使用した BusyBox コンテナーの自動デプロイを示します。

手順

  1. 次のコマンドを実行して、BusyBox マニフェストファイルを作成します。

    1. ディレクトリーの場所を定義します。

      $ MANIFEST_DIR=/etc/microshift/manifests
    2. ディレクトリーを作成します。

      $ sudo mkdir -p ${MANIFEST_DIR}
    3. YAML ファイルをディレクトリーに配置します。

      sudo tee ${MANIFEST_DIR}/busybox.yaml &>/dev/null <<EOF
      apiVersion: v1
      kind: Namespace
      metadata:
        name: busybox
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: busybox
        namespace: busybox-deployment
      spec:
        selector:
          matchLabels:
            app: busybox
        template:
          metadata:
            labels:
              app: busybox
          spec:
            containers:
            - name: busybox
              image: BUSYBOX_IMAGE
              command: [ "/bin/sh", "-c", "while true ; do date; sleep 3600; done;" ]
      EOF
  2. 次に、以下のコマンドを実行して kustomize マニフェストファイルを作成します。

    1. YAML ファイルをディレクトリーに配置します。

      sudo tee ${MANIFEST_DIR}/kustomization.yaml &>/dev/null <<EOF
      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namespace: busybox
      resources:
        - busybox.yaml
      images:
        - name: BUSYBOX_IMAGE
          newName: busybox:1.35
      EOF
  3. 次のコマンドを実行して MicroShift を再起動し、マニフェストを適用します。

    $ sudo systemctl restart microshift
  4. 次のコマンドを実行して、マニフェストを適用し、busybox Pod を起動します。

    $ oc get pods -n busybox

第2章 RHEL for Edge イメージに MicroShift アプリケーションを埋め込む方法

マイクロサービスベースのワークロードとアプリケーションを Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージに埋め込んで、MicroShift クラスターで実行できます。埋め込みアプリケーションをエッジデバイスに直接インストールして、エアギャップ環境、非接続環境、またはオフライン環境で実行できます。

2.1. アプリケーション RPM の rpm-ostree イメージへの追加

API、コンテナーイメージ、マニフェストなどのデプロイメント用の設定ファイルを含むアプリケーションがある場合は、アプリケーション RPM を構築できます。その後、RPM を RHEL for Edge システムイメージに追加できます。

以下は、完全に自己完結型のオペレーティングシステムイメージにアプリケーションまたはワークロードを埋め込む手順の概要です。

  • アプリケーションマニフェストを含む独自の RPM をビルドします。
  • Red Hat build of MicroShift のインストールに使用したブループリントに RPM を追加します。
  • ワークロードコンテナーイメージを同じブループリントに追加します。
  • 起動可能な ISO を作成します。

RHEL for Edge イメージへのアプリケーションの準備および埋め込みに関する段階的なチュートリアルでは、以下のチュートリアルを使用します。

2.2. オフラインで使用するためにイメージへのアプリケーションマニフェストの追加

マニフェストなどのデプロイメント用のファイルがいくつか含まれる単純なアプリケーションがある場合は、それらのマニフェストを RHEL for Edge システムイメージに直接追加できます。

例については、次の RHEL for Edge ドキュメントの「カスタムファイルブループリントのカスタマイズの作成」セクションを参照してください。

2.3. オフラインで使用するためのアプリケーションの埋め込み

アプリケーションに複数のファイルが含まれている場合は、オフラインで使用できるようにアプリケーションを埋め込むことができます。以下の手順を参照してください。

2.4. 関連情報

第3章 オフラインで使用するためのアプリケーションの埋め込み

マイクロサービスベースのワークロードとアプリケーションを Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージに埋め込むことができます。埋め込みを行うと、エアギャップ環境、非接続環境、またはオフライン環境で Red Hat build of MicroShift クラスターを実行できます。

3.1. オフラインで使用するためのワークロードコンテナーイメージの埋め込み

ネットワーク接続がないエッジのデバイスにコンテナーイメージを埋め込むには、新しいコンテナーを作成し、ISO をマウントして、コンテンツをファイルシステムにコピーする必要があります。

前提条件

  • ホストへの root アクセス権限がある。
  • アプリケーション RPM がブループリントに追加されている。

手順

  1. 次のコマンドを実行して、マニフェストをレンダリングし、すべてのコンテナーイメージ参照を抽出し、アプリケーションイメージをブループリントコンテナーソースに変換します。

    $ oc kustomize ~/manifests | grep "image:" | grep -oE '[^ ]+$' | while read line; do echo -e "[[containers]]\nsource = \"${line}\"\n"; done >><my_blueprint>.toml
  2. 次のコマンドを実行して、更新されたブループリントを Image Builder にプッシュします。

    $ sudo composer-cli blueprints push <my_blueprint>.toml
  3. ワークロードコンテナーがプライベートリポジトリーにある場合は、Image Builder に必要なプルシークレットを提供する必要があります。

    1. /etc/osbuild-worker/osbuild-worker.toml ファイル内の osbuilder worker 設定の [containers] セクションにある auth_file_path を、プルシークレットを指すように設定します。
    2. 必要に応じて以下のように、プルシークレットのディレクトリーおよびファイルを作成します。

      ディレクトリーとファイルの例

      [containers]
      auth_file_path = "/<path>/pull-secret.json" 1

      1
      イメージのコピーおよび取得には、以前に設定したカスタムの場所を使用します。
  4. 以下のコマンドを実行し、コンテナーイメージをビルドします。

    $ sudo composer-cli compose start-ostree <my_blueprint> edge-commit
  5. ビルドの完了待ち、イメージのエクスポート、rpm-ostree リポジトリーへの統合、ブータブル ISO の作成など、任意の rpm-ostree イメージフローに進みます。

3.2. 関連情報

第4章 Red Hat build of MicroShift アプリケーションの埋め込みのチュートリアル

次のチュートリアルでは、さまざまな環境の MicroShift クラスターで使用するために、RHEL for Edge イメージにアプリケーションを埋め込む方法の詳細な例を示します。

4.1. アプリケーション RPM の埋め込みのチュートリアル

次のチュートリアルでは、MicroShift のインストール手順を確認し、さらにアプリケーションを埋め込むためのワークフローを説明します。Red Hat Enterprise Linux for Edge (RHEL for Edge) や MicroShift などの rpm-ostree システムにすでに慣れている場合は、そのまま手順に進んでください。

4.1.1. インストールワークフローの再確認

アプリケーションを埋め込むには、MicroShift を RHEL for Edge イメージに埋め込む場合と同様のワークフローが必要です。

  • 次の画像は、RPM、コンテナー、ファイルなどのシステムアーティファクトをブループリントに追加し、それらをイメージコンポーザーで使用して ostree コミットを作成する方法を示しています。
  • ostree コミットは、ISO パスまたはリポジトリーパスのいずれかを使用してエッジデバイスに到達できます。
  • ISO パスは非接続環境で使用できます。一方、リポジトリーパスはネットワークが通常接続されている場所でよく使用されます。

MicroShift の埋め込みワークフロー

468 RHbM install workflow 1023 1

次の手順を再確認すると、アプリケーションの埋め込みに必要な手順を理解するのに役立ちます。

  1. MicroShift を RHEL for Edge に埋め込むために、MicroShift リポジトリーを Image Builder に追加しました。
  2. MicroShift の追加など、必要なすべての RPM、コンテナーイメージ、ファイル、およびカスタマイズを宣言するブループリントを作成しました。
  3. ブループリントを Image Builder に追加し、Image Builder CLI ツール (composer-cli) を使用してビルドを実行しました。この手順では、コンテナーイメージの作成に使用される rpm-ostree コミットを作成しました。このイメージには RHEL for Edge が含まれていました。
  4. インストーラーブループリントを Image Builder に追加して、起動元の rpm-ostree イメージ (ISO) を作成しました。このビルドには、RHEL for Edge と MicroShift の両方が含まれていました。
  5. MicroShift が埋め込まれた ISO をダウンロードし、使用できるように準備し、プロビジョニングして、エッジデバイスにインストールしました。

4.1.2. アプリケーション RPM の埋め込みワークフロー

Image Builder の要件を満たすビルドホストを設定したら、マニフェストのディレクトリーの形式でアプリケーションをイメージに追加できます。これらの手順の後、アプリケーションまたはワークロードを新しい ISO に埋め込む最も簡単な方法は、マニフェストを含む独自の RPM を作成します。アプリケーションの RPM には、デプロイメントを記述するすべての設定ファイルが含まれています。

次の「アプリケーションの埋め込みワークフロー」の画像は、Kubernetes アプリケーションマニフェストと RPM 仕様ファイルが単一のアプリケーション RPM ビルドにどのように組み合わされるかを示しています。このビルドは、MicroShift を ostree コミットに埋め込むワークフローで使用する RPM アーティファクトになります。

アプリケーションの埋め込みワークフロー

468 RHbM install workflow 1023 2

以下の手順では、rpmbuild ツールを使用して、仕様ファイルとローカルリポジトリーを作成します。この仕様ファイルにより、パッケージのビルド方法を定義し、アプリケーションマニフェストを RPM パッケージ内の正しい場所に移動して、MicroShift が取得できるようにします。この RPM パッケージは ISO に埋め込まれます。

4.1.3. アプリケーション RPM の作成準備

独自の RPM を構築するには、rpmbuild ツールなどの任意のツールを選択し、ホームディレクトリーで RPM ビルドツリーを初期化します。以下に手順の例を示します。RPM が Image Builder にアクセスできる限り、任意の方法を使用してアプリケーション RPM を構築できます。

前提条件

  • Image Builder のシステム要件を満たす Red Hat Enterprise Linux for Edge (RHEL for Edge) 9.2 ビルドホストを設定している。
  • ホストへの root アクセス権限がある。

手順

  1. rpmbuild ツールをインストールし、以下のコマンドを実行してその yum リポジトリーを作成します。

    $ sudo dnf install rpmdevtools rpmlint yum-utils createrepo
  2. 次のコマンドを実行して、RPM パッケージの構築に必要なファイルツリーを作成します。

    $ rpmdev-setuptree

検証

  • 次のコマンドを実行して、ディレクトリーを一覧表示して作成を確認します。

    $ ls ~/rpmbuild/

    出力例

    BUILD RPMS SOURCES SPECS SRPMS

4.1.4. アプリケーションマニフェストの RPM パッケージの構築

独自の RPM を構築するには、アプリケーションマニフェストを RPM パッケージに追加する仕様ファイルを作成する必要があります。以下に手順の例を示します。イメージ構築に必要なアプリケーション RPM およびその他の要素が Image Builder にアクセスできる限り、任意の方法を使用できます。

前提条件

  • Image Builder のシステム要件を満たす Red Hat Enterprise Linux for Edge (RHEL for Edge) 9.2 ビルドホストを設定している。
  • ホストへの root アクセス権限がある。
  • RPM パッケージの構築に必要なファイルツリーが作成されている。

手順

  1. ~/rpmbuild/SPECS ディレクトリーに、次のテンプレートを使用して <application_workload_manifests.spec> などのファイルを作成します。

    仕様ファイルの例

    Name: <application_workload_manifests>
    Version: 0.0.1
    Release: 1%{?dist}
    Summary: Adds workload manifests to microshift
    BuildArch: noarch
    License: GPL
    Source0: %{name}-%{version}.tar.gz
    #Requires: microshift
    %description
    Adds workload manifests to microshift
    %prep
    %autosetup
    %install 1
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/%{_prefix}/lib/microshift/manifests
    cp -pr ~/manifests $RPM_BUILD_ROOT/%{_prefix}/lib/microshift/
    %clean
    rm -rf $RPM_BUILD_ROOT
    
    %files
    %{_prefix}/lib/microshift/manifests/**
    %changelog
    * <DDD MM DD YYYY username@domain - V major.minor.patch>
    - <your_change_log_comment>

    1
    %install セクションは、RPM パッケージ内にターゲットディレクトリー /usr/lib/microshift/manifests/ を作成し、ソースホームディレクトリー ~/manifests からマニフェストをコピーします。
    重要

    必要な YAML ファイルはすべて、ソースホームディレクトリー ~/manifests に置かれている必要があります (kustomize を使用している場合は kustomize.yaml ファイルも含まれます)。

  2. 以下のコマンドを実行して、~/rpmbuild/RPMS ディレクトリーに RPM パッケージをビルドします。

    $ rpmbuild -bb ~/rpmbuild/SPECS/<application_workload_manifests.spec>

4.1.5. ブループリントへのアプリケーション RPM の追加

アプリケーション RPM をブループリントに追加するには、Image Builder が ISO の作成に使用できるローカルリポジトリーを作成する必要があります。この手順では、ワークロードに必要なコンテナーイメージをネットワーク経由でプルできます。

前提条件

  • ホストへの root アクセス権限がある。
  • ワークロードまたはアプリケーション RPM が ~/rpmbuild/RPMS ディレクトリーにある。

手順

  1. 次のコマンドを実行して、ローカル RPM リポジトリーを作成します。

    $ createrepo ~/rpmbuild/RPMS/
  2. 次のコマンドを実行して、Image Builder に RPM リポジトリーへのアクセス権限を付与します。

    $ sudo chmod a+rx ~
    注記

    イメージ構築に必要なファイル全てにアクセスする必須のパーミッションが Image Builder に割り当てられている必要があります。そうでないと、ビルドを続行できません。

  3. 次のテンプレートを使用して、ブループリントファイル repo-local-rpmbuild.toml を作成します。

    id = "local-rpm-build"
    name = "RPMs build locally"
    type = "yum-baseurl"
    url = "file://<path>/rpmbuild/RPMS" 1
    check_gpg = false
    check_ssl = false
    system = false
    1
    選択したロケーションを作成するパスの一部を指定します。後のコマンドでこのパスを使用して、リポジトリーを設定し、RPM をコピーします。
  4. 次のコマンドを実行して、Image Builder のソースとしてリポジトリーを追加します。

    $ sudo composer-cli sources add repo-local-rpmbuild.toml
  5. 以下の行を追加して、RPM をブループリントに追加します。

    …
    [[packages]]
    name = "<application_workload_manifests>" 1
    version = "*"
    …
    1
    ワークロードの名前をここに追加します。
  6. 次のコマンドを実行して、更新されたブループリントを Image Builder にプッシュします。

    $ sudo composer-cli blueprints push repo-local-rpmbuild.toml
  7. この時点で、Image Builder を実行して ISO を作成するか、オフラインで使用するためにコンテナーイメージを埋め込むことができます。

    1. ISO を作成するには、次のコマンドを実行して Image Builder を起動します。

      $ sudo composer-cli compose start-ostree repo-local-rpmbuild edge-commit

このシナリオでは、起動時にエッジデバイスによってネットワーク経由でコンテナーイメージがプルされます。

4.2. 関連情報

第5章 Greenboot ワークロードヘルスチェックスクリプト

Greenboot ヘルスチェックスクリプトは、エッジデバイスを使用していて、直接サービスを利用できないか、限りがある場合に役立ちます。ヘルスチェックスクリプトを作成して、ワークロードとアプリケーションの正常性を評価できます。これらの追加のヘルスチェックスクリプトは、ソフトウェアの問題チェックと自動システムロールバックの有用なコンポーネントです。

MicroShift ヘルスチェックスクリプトは、microshift-greenboot RPM に含まれています。実行中のワークロードに基づいて、独自のヘルスチェックスクリプトを作成することもできます。たとえば、サービスの起動を確認するスクリプトを作成するなどが可能です。

5.1. ワークロードヘルスチェックスクリプトの仕組み

このチュートリアルで説明するワークロードまたはアプリケーションのヘルスチェックスクリプトは、/usr/share/microshift/functions/greenboot.sh ファイルで利用可能な MicroShift ヘルスチェック機能を使用します。これにより、MicroShift コアサービスにすでに実装されている手順を再利用できます。

このスクリプトは、ワークロードの基本機能が期待どおりに動作しているかどうかのチェックを実行することから始まります。スクリプトを正常に実行するには、以下を実行します。

  • root ユーザーアカウントからスクリプトを実行します。
  • MicroShift サービスを有効にします。

ヘルスチェックは以下のアクションを実行します。

  • wait_for 関数における現在のブートサイクルの待機時間でのタイムアウトを取得します。
  • namespace_images_downloaded 関数を呼び出して、Pod イメージが利用可能になるまで待機します。
  • namespace_pods_ready 関数を呼び出して、Pod が準備状態になるまで待機します。
  • namespace_pods_not_restarting 関数を呼び出して、Pod が再起動していないことを確認します。
注記

Pod を再起動すると、クラッシュループを示している可能性があります。

5.2. 同梱の greenboot ヘルスチェック

ヘルスチェックスクリプトは、/usr/lib/greenboot/check (RPM-OSTree システムの読み取り専用ディレクトリー) で利用できます。以下のヘルスチェックは greenboot-default-health-checks フレームワークに含まれています。

  • リポジトリー URL がまだ DNS 解決可能かどうかを確認します。

    このスクリプトは /usr/lib/greenboot/check/required.d/01_repository_dns_check.sh の下にあり、リポジトリー URL への DNS クエリーを引き続き利用できるようにします。

  • 更新プラットフォームにまだ到達可能かどうかを確認します。

    このスクリプトは /usr/lib/greenboot/check/wanted.d/01_update_platform_check.sh の下にあり、/etc/ostree/remotes.d で定義された更新プラットフォームに接続して 2XX または 3XX HTTP コードを取得しようとします。

  • 現在の起動がハードウェアウォッチドッグによってトリガーされたかどうかを確認します。

    このスクリプトは /usr/lib/greenboot/check/required.d/02_watchdog.sh の下にあり、現在の起動が watchdog-triggered かどうかを確認します。

    • ウォッチドッグによってトリガーされた再起動が猶予期間内に発生した場合、現在の起動は赤色でマークされます。Greenboot は、以前のデプロイメントへのロールバックをトリガーしません。
    • ウォッチドッグによってトリガーされた再起動が猶予期間後に発生した場合、現在の起動は赤色でマークされません。Greenboot は、以前のデプロイメントへのロールバックをトリガーしません。
    • デフォルトで 24 時間の猶予期間が有効になっています。この猶予期間を無効にするには、/etc/greenboot/greenboot.confGreenboot_WATCHDOG_CHECK_ENABLED を false に変更するか、/etc/greenboot/greenboot.confGreenboot_WATCHDOG_GRACE_PERIOD=number_of_hours 変数値を変更して設定できます。

5.3. アプリケーションのヘルスチェックスクリプトの作成方法

このドキュメントの例を使用して、選択したテキストエディターでワークロードまたはアプリケーションのヘルスチェックスクリプトを作成できます。スクリプトを /etc/greenboot/check/required.d ディレクトリーに保存します。/etc/greenboot/check/required.d ディレクトリー内のスクリプトがエラーで終了すると、greenboot はシステムを修復するために再起動をトリガーします。

注記

/etc/greenboot/check/required.d ディレクトリー内のスクリプトは、エラーを出して終了すると再起動をトリガーします。

ヘルスチェックロジックでチェック後の手順が必要な場合は、追加のスクリプトを作成して、関連する greenboot ディレクトリーに保存することもできます。以下に例を示します。

  • ブートの成功が宣言された後に実行するシェルスクリプトを /etc/greenboot/green.d に配置することもできます。
  • ブートの失敗が宣言された後に実行するシェルスクリプトを /etc/greenboot/red.d に配置できます。たとえば、再起動する前にシステムを修復する手順がある場合は、ユースケース用のスクリプトを作成し、/etc/greenboot/red.d ディレクトリーに配置できます。

5.3.1. ワークロードヘルスチェックスクリプトの例

次の例では、MicroShift ヘルスチェックスクリプトをテンプレートとして使用します。この例は、アプリケーションの基本的なヘルスチェックスクリプトを作成するためのガイドとして、提供されたライブラリーで使用できます。

5.3.1.1. ヘルスチェックスクリプト作成の基本要件
  • ワークロードがインストールされている。
  • root アクセスがある。
5.3.1.2. および機能要件の例

次のヘルスチェックスクリプトの例から始めることができます。ユースケースに合わせて変更します。ワークロードヘルスチェックスクリプトでは、最低でも、以下の手順を完了する必要があります。

  • 環境変数を設定します。
  • ユーザーワークロード namespace を定義します。
  • 予想される Pod 数を一覧表示します。
重要

アプリケーションの名前接頭辞を選択して、アプリケーションが 40_microshift_running_check.sh スクリプトの後に実行されるようにします。このスクリプトは、コアサービスむけに Red Hat build of MicroShift ヘルスチェックの手順を実装します。

ワークロードヘルスチェックスクリプトの例

# #!/bin/bash
set -e

SCRIPT_NAME=$(basename $0)
PODS_NS_LIST=(<user_workload_namespace1> <user_workload_namespace2>)
PODS_CT_LIST=(<user_workload_namespace1_pod_count> <user_workload_namespace2_pod_count>)
# Update these two lines with at least one namespace and the pod counts that are specific to your workloads. Use the kubernetes <namespace> where your workload is deployed.

# Set greenboot to read and execute the workload health check functions library.
source /usr/share/microshift/functions/greenboot.sh

# Set the exit handler to log the exit status.
trap 'script_exit' EXIT

# Set the script exit handler to log a `FAILURE` or `FINISHED` message depending on the exit status of the last command.
# args: None
# return: None
function script_exit() {
    [ "$?" -ne 0 ] && status=FAILURE || status=FINISHED
    echo $status
}

# Set the system to automatically stop the script if the user running it is not 'root'.
if [ $(id -u) -ne 0 ] ; then
    echo "The '${SCRIPT_NAME}' script must be run with the 'root' user privileges"
    exit 1
fi

echo "STARTED"

# Set the script to stop without reporting an error if the MicroShift service is not running.
if [ $(systemctl is-enabled microshift.service 2>/dev/null) != "enabled" ] ; then
    echo "MicroShift service is not enabled. Exiting..."
    exit 0
fi

# Set the wait timeout for the current check based on the boot counter.
WAIT_TIMEOUT_SECS=$(get_wait_timeout)

# Set the script to wait for the pod images to be downloaded.
for i in ${!PODS_NS_LIST[@]}; do
    CHECK_PODS_NS=${PODS_NS_LIST[$i]}

    echo "Waiting ${WAIT_TIMEOUT_SECS}s for pod image(s) from the ${CHECK_PODS_NS} namespace to be downloaded"
    wait_for ${WAIT_TIMEOUT_SECS} namespace_images_downloaded
done

# Set the script to wait for pods to enter ready state.
for i in ${!PODS_NS_LIST[@]}; do
    CHECK_PODS_NS=${PODS_NS_LIST[$i]}
    CHECK_PODS_CT=${PODS_CT_LIST[$i]}

    echo "Waiting ${WAIT_TIMEOUT_SECS}s for ${CHECK_PODS_CT} pod(s) from the ${CHECK_PODS_NS} namespace to be in 'Ready' state"
    wait_for ${WAIT_TIMEOUT_SECS} namespace_pods_ready
done

# Verify that pods are not restarting by running, which could indicate a crash loop.
for i in ${!PODS_NS_LIST[@]}; do
    CHECK_PODS_NS=${PODS_NS_LIST[$i]}

    echo "Checking pod restart count in the ${CHECK_PODS_NS} namespace"
    namespace_pods_not_restarting ${CHECK_PODS_NS}
done

5.4. ワークロードヘルスチェックスクリプトのテスト

前提条件

  • root アクセスがある。
  • ワークロードがインストールされている。
  • ワークロードのヘルスチェックスクリプトを作成している。
  • Red Hat build of MicroShift サービスが有効である。

手順

  1. Greenboot がヘルスチェックスクリプトファイルを実行していることをテストするには、次のコマンドを実行してホストを再起動します。

    $ sudo reboot
  2. 次のコマンドを実行して、Greenboot ヘルスチェックの出力を調べます。

    $ sudo journalctl -o cat -u greenboot-healthcheck.service
    注記

    MicroShift コアサービスのヘルスチェックは、ワークロードのヘルスチェックの前に実行されます。

    出力例

    GRUB boot variables:
    boot_success=0
    boot_indeterminate=0
    Greenboot variables:
    GREENBOOT_WATCHDOG_CHECK_ENABLED=true
    ...
    ...
    FINISHED
    Script '40_microshift_running_check.sh' SUCCESS
    Running Wanted Health Check Scripts...
    Finished greenboot Health Checks Runner.

5.5. 関連情報

第6章 Pod のセキュリティー認証と認可

6.1. Pod セキュリティーアドミッションの理解と管理

Pod セキュリティーアドミッションは、Kubernetes Pod セキュリティー標準 の実装です。Pod のセキュリティーアドミッションを使用して、Pod の動作を制限します。

6.2. Pod セキュリティー標準とのセキュリティーコンテキスト制約の同期

MicroShift には、Kubernetes Pod のセキュリティーアドミッション が含まれています。

グローバル Pod セキュリティーアドミッションコントロールの設定に加えて、特定の namespace にあるサービスアカウントの security context constraint (SCC) アクセス許可に従って、Pod セキュリティーアドミッションコントロールの warn ラベルと alert ラベルを namespace に適用するコントローラーが存在します。

重要

クラスターペイロードの一部として定義されている namespace では、Pod セキュリティーアドミッションの同期が完全に無効になっています。必要に応じて、他の namespace で Pod セキュリティーアドミッション同期を有効にできます。Operator がユーザー作成の openshift-* namespace にインストールされている場合、namespace でクラスターサービスバージョン (CSV) が作成された後、デフォルトで同期がオンになります。

コントローラーは ServiceAccount オブジェクトのアクセス許可を確認して、各 namespace で Security Context Constraints を使用します。セキュリティーコンテキスト制約 (SCC) は、フィールド値に基づいて Pod セキュリティープロファイルにマップされます。コントローラーはこれらの変換されたプロファイルを使用します。Pod のセキュリティーアドミッション warnaleart ラベルは、namespace 内で最も特権が高い Pod セキュリティープロファイルに設定され、Pod の作成時に警告と監査ログが発生しないようにします。

namespace のラベル付けは、namespace ローカルサービスアカウントの権限を考慮して行われます。

Pod を直接適用すると、Pod を実行するユーザーの SCC 権限が使用される場合があります。ただし、自動ラベル付けではユーザー権限は考慮されません。

6.2.1. namespace での Security Context Constraints の表示

特定の namespace の Security Context Constraints (SCC) 権限を表示できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • namespace の SCC (Security Context Constraints) を表示するには、以下のコマンドを実行します。

    oc get --show-labels namespace <namespace>

6.3. Pod セキュリティーアドミッションの同期制御

ほとんどの namespace で、Pod セキュリティーアドミッションの自動同期を有効にできます。

security.openshift.io/scc.podSecurityLabelSync フィールドが空か、false に設定されている場合、システムのデフォルトは適用されません。同期するには、ラベルを true に設定する必要があります。

重要

クラスターペイロードの一部として定義されている namespace では、Pod セキュリティーアドミッションの同期が完全に無効になっています。これらの namespace には以下が含まれます。

  • default
  • kube-node-lease
  • kube-system
  • kube-public
  • openshift
  • openshift-operators を除く、openshift- という接頭辞が付いたシステム作成の namespace。デフォルトでは、接頭辞がopenshift- の namespace はすべて同期されません。ユーザーが作成した任意の openshift-* namespace の同期を有効にすることができます。openshift-operators を除き、システムで作成された openshift-* namespace の同期を有効にすることはできません。

Operator がユーザー作成の openshift-* namespace にインストールされている場合、namespace でクラスターサービスバージョン (CSV) が作成された後、デフォルトで同期がオンになります。同期されたラベルは、namespace のサービスアカウントの権限を継承します。

手順

  • namespace で Pod セキュリティーアドミッションラベルの同期を有効にするには、security.openshift.io/scc.podSecurityLabelSync ラベルの値を true に設定します。

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

    $ oc label namespace <namespace> security.openshift.io/scc.podSecurityLabelSync=true
注記

--overwrite フラグを使用すると、namespace での Pod セキュリティーラベルの同期の影響を元に戻すことができます。

第7章 Operator が MicroShift と連携する方法

MicroShift で Operator を使用して、クラスター内で実行中のサービスを監視するアプリケーションを作成できます。Operator は、データベースやメッセージバスのデプロイなど、アプリケーションとそのリソースを管理できます。クラスター内で実行するカスタマイズされたソフトウェアとして、Operator を使用して一般的な操作を実装し、自動化できます。

Operator はよりローカライズされた設定エクスペリエンスを提供し、kubectloc などの Kubernetes API および CLI ツールと統合します。Operator は、アプリケーション専用に設計されています。Operator を使用すると、グローバル設定ファイルを変更する代わりにコンポーネントを設定できます。

MicroShift アプリケーションは通常、静的環境にデプロイされることが想定されています。ただし、Operator はユースケースで役立つ場合に利用できます。Operator と MicroShift の互換性を判断するには、Operator のドキュメントを確認してください。

7.1. MicroShift での Operator のインストール方法

MicroShift のフットプリントを最小限に抑えるために、Operator は Operator Lifecycle Manager (OLM) を使用する代わりにマニフェストを使用して直接インストールされます。MicroShift で kustomize 設定管理ツールを使用して、アプリケーションをデプロイできます。マニフェストを使用して Operator をインストールするには、同じ手順を使用します。マニフェストの詳細は、Kustomize マニフェストを使用したアプリケーションのデプロイ を参照してください。

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat 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 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 は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.