[Docker, WLS] Automatic Scaling of WebLogic Clusters on Kubernetes

原文はこちら。
https://blogs.oracle.com/weblogicserver/automatic-scaling-of-weblogic-clusters-on-kubernetes-v2

WebLogic ServerクラスタのElasticity(拡張度、スケールアップまたはスケールダウン)により、お客様のアプリケーションの信頼性向上とリソース使用率の最適化を実現します。ElasticityはWebLogic Server 12.2.1で導入され、Elasticサービスフレームワークと動的クラスタの概念を基に作られました。
Oracle® Fusion Middleware Oracle WebLogic Serverクラスタの管理 12c (12.2.1.2.0)
動的クラスタ
https://docs.oracle.com/cd/E84527_01/wls/CLUST/dynamic_clusters.htm
Oracle® Fusion Middleware Administering Clusters for Oracle WebLogic Server 12c (12.2.1.3.0)
Dynamic Clusters
http://docs.oracle.com/middleware/12213/wls/CLUST/dynamic_clusters.htm#CLUST678
[訳注]
日本語ドキュメントでは、拡張度や拡張度フレームワークという表現を使っていますが、耳なじみがないと思いますので、このエントリでは英語のまま、つまりElasticityやElasticをそのまま使います。

Elasticity in WebLogic ServerにおけるElasticityは以下のいずれかによって達成されます。
  • WebLogic Server管理コンソールまたはWebLogic Scripting Tool(WLST)を使用して動的なWebLogic Serverクラスタ内の実行中のサーバインスタンスを手動で追加または削除(オンデマンドスケーリング)
  • 動的クラスタを拡大または縮小する条件を設定するWLDFスケーリングポリシーや、スケーリング処理自体を定義するアクションを設定する。スケーリングポリシーで定義された条件が発生すると、対応するスケーリング動作が自動的にトリガされる。
スケーリングアクションが発生すると、WebLogic Serverノードマネージャを使用して管理対象サーバーインスタンスを起動および停止します。ノードマネージャは、管理対象サーバーインスタンスのライフサイクル(起動、シャットダウン、再起動)を管理するWebLogic Serverユーティリティです。
WebLogic Serverチームは、Kubernetesクラウド環境でのWebLogic Serverの稼働に投資しています。WebLogic診断フレームワーク(WLDF)が提供するリソースメトリックに基づき、Podの数を増やす(または減らす)ことで、WebLogic Serverクラスタを自動的に拡大/縮小できます。以下のエントリのサンプルデモを使い、Kubernetesクラウド環境でのWebLogic Serverクラスタの自動スケールを説明します。
WebLogic on Kubernetes, Try It!
https://blogs.oracle.com/weblogicserver/weblogic-on-kubernetes,-try-it
https://orablogs-jp.blogspot.jp/2017/10/weblogic-on-kubernetes-try-it.html
従来のWebLogic Serverデプロイメント環境と比較して、Kubernetesクラウド環境のサンプルデモにおけるelasticityの効果には、いくつかの重要な違いがあります。
  1. サンプルデモでは、静的に構成されたクラスタを使用しますが、elasticityは従来のデプロイメントでは動的クラスタと連動します。今後のエントリでは、Kubernetesクラウド環境におけるWebLogic Serverクラスタのelasticityについて説明します。
  2. サンプルデモでは、スケーリングアクションによってKubernetes APIサーバーへのリクエストが呼び出され、Podをスケールしますが、従来のデプロイメントではNode Managerへのリクエストを呼び出します。
このブログエントリでは、WLDFが提供するメトリックに基づいて、Kubernetes環境でWebLogic Serverクラスタを自動的に拡大または縮小する方法を説明します。

WebLogic on Kubernetes Sample Demo

以下では、「WebLogic on Kubernetes, Try It!」のエントリで説明したKubernetes上で稼働するWebLogicドメインを使います。
WebLogic on Kubernetes, Try It!
https://blogs.oracle.com/weblogicserver/weblogic-on-kubernetes,-try-it
https://orablogs-jp.blogspot.jp/2017/10/weblogic-on-kubernetes-try-it.html

Kubernetesクラスタで実行されているWebLogicドメインは、以下のもので構成されています。
  1. 独自のポッド(Pod 1)内のDockerコンテナで実行されている管理サーバー(AS)インスタンス。
  2. 管理サーバー(Pod 1)と同じPodにある独自のDockerコンテナで実行されるwebhookの実装。
    Webhookとは、軽量なHTTPサーバーで、複数のエンドポイント(フック)を使ってシェルスクリプトなどの設定済みコマンドを実行可能です。サンプルデモで使用しているwebhookの詳細については、以下のURLを参照してください。
    webhook is a lightweight configurable incoming webhook server which can execute shell commands
    https://github.com/adnanh/webhook/
    (注意)「WebLogic on Kubernetes, Try It!」にあるように、WLDFをトリガーとするスケールを実行するための前提条件として、Webhook Dockerイメージ(oow-demo-webhook)のビルドおよびインストールが必要です。
  3. 一連の管理対象サーバーインスタンスで構成されているWebLogic Serverクラスタ。各インスタンスはDockerコンテナ内で動作し、それぞれ個別のPodにある(Pod 2からPod 6)。

WebLogic Diagnostic Framework

WebLogic Diagnostics Framework(WebLogic診断フレームワーク、WLDF)は、サーバとアプリケーションのパフォーマンスを可視化するメトリックを収集し浮かび上がらせるサービスとAPIの集合です。動的クラスタの自動スケーリングをサポートするため、WLDFにはポリシー(Policy)とアクション(Action)というコンポーネントが用意されています。このコンポーネントを使用すると、動的クラスタで自動的にスケーリング操作を実行するポリシー式を記述できます。これらのポリシーは、メモリ、アイドルスレッド、CPU負荷など、1つ以上の種類のWebLogic Serverメトリックを監視します。ポリシー内に設定したしきい値を満たすと、ポリシーが呼び出され、対応するスケーリングアクションを実行します。WLDFと診断ポリシーとアクションの詳細については、以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用 12c (12.2.1.2.0)
ポリシーとアクションの構成
https://docs.oracle.com/cd/E84527_01/wls/WLDFC/config_watch_notif.htm#WLDFC188
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1.3.0)
Configuring Policies and Actions
https://docs.oracle.com/middleware/12213/wls/WLDFC/config_watch_notif.htm#WLDFC188
ポリシーは、以下のデータに基づいています。
  • 特定の時間間隔中の平均値の変化のような、時間経過に伴う傾向または履歴データ。例えば、特定のしきい値を超える平均JVMヒープ使用量に基づきポリシーを設定できる。
  • 1つのサーバーインスタンスだけでなく、クラスタ内のすべてのサーバーインスタンスに関連する実行時メトリック
  • 一緒に考慮すべき複数のサービスからのデータ。例えばロードバランサが報告する応答時間メトリックとメッセージキューからのメッセージバックログメトリックに基づいたポリシーを設定できる。
  • カレンダーベースのスケジュール。ポリシーは、スケーリングアクションを実行する必要がある時間帯や曜日などの特定のカレンダー時刻を識別できる。
  • ログルールまたはイベントデータルール。

    Automatic Scaling of a WebLogic Server Cluster in Kubernetes

    WLDFを使用してKubernetes環境でWebLogic Serverクラスタの自動スケーリングを実現する方法を紹介しますが、ここでは自動スケーリングに関連する設定変更についてのみ説明します。サンプルデモの設定と実行の手順については、「WebLogic on Kubernetes, Try It!」のエントリをご覧ください。
    まず、KubernetesでのWebLogic Serverクラスタの自動スケーリングの動作を簡単に説明します。
    サンプルデモでは、WebLogic ServerクラスタをKubernetesクラスタで実行し、WebLogic Server管理対象サーバーインスタンスはKubernetes Podに1対1でマッピングされています。PodはStatefulSetコントローラが管理しています。ReplicaSetsとDeploymentsと同様、StatefulSetは、レプリケーションコントローラの一種で、目的のレプリカ・カウント・フィールド(replica count field)を増減するだけで拡張できます。ポリシーとスケーリングアクションは、WebLogic Serverクラスタ用に構成されています。WebLogic Serverクラスタの稼働中、WLDFはWebAppComponentRuntimeMBeanのOpenSessionsCurrentCount属性など、さまざまな実行時メトリックを収集して監視します。ポリシーで定義された条件が発生すると、ポリシーが呼び出され、対応するスケーリングアクションが実行されます。 Kubernetes環境で実行されているWebLogic Serverクラスタの場合、スケーリング処理では、目的のレプリカカウントフィールドを設定して、対応するStatefulSetをスケーリングします。これにより、StatefulSetコントローラは、必要なレプリカ数に一致するように、ポッドの数(WebLogic Server管理対象サーバインスタンス)を増減させます。
    StatefulSetは管理対象サーバーインスタンスが稼働しているPodを管理しているため、kubectlなどのツールを使用して、以下のようにWebLogic Serverクラスタをオンデマンドでスケーリングすることもできます。
    $ kubectl scale statefulset ms --replicas=3

    WLDF Policies and Actions

    WLDFのポリシーとアクションコンポーネントの設定については、以下のドキュメントを参照してください。
    Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用
    12c (12.2.1.2.0)
    ポリシーとアクションの構成
    https://docs.oracle.com/cd/E84527_01/wls/WLDFC/config_watch_notif.htm#WLDFC188
    Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1.3.0)
    Configuring Policies and Actions
    https://docs.oracle.com/middleware/12213/wls/WLDFC/config_watch_notif.htm#WLDFC188
    このサンプルでは、ポリシーとアクションをWLDF診断システムモジュール内で構成します。対応するリソース記述子ファイル(Module-0-3905.xml)は以下の通りです。
    <?xml version='1.0' encoding='UTF-8'?>
    <wldf-resource  xmlns="http://xmlns.oracle.com/weblogic/weblogic-diagnostics"  xmlns:sec="http://xmlns.oracle.com/weblogic/security"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls"  xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-diagnostics   http://xmlns.oracle.com/weblogic/weblogic-diagnostics/2.0/weblogic-diagnostics.xsd">
      <name>Module-0</name>
      <watch-notification>
        <watch>
          <name>myScaleUpPolicy</name>
          <enabled>true</enabled>
          <rule-type>Harvester</rule-type>
          <rule-expression>wls:ClusterGenericMetricRule("DockerCluster",
    "com.bea:Type=WebAppComponentRuntime,ApplicationRuntime=OpenSessionApp,*",
    "OpenSessionsCurrentCount","&gt;=",0.01,5,"1 seconds","10 seconds")
          </rule-expression>
          <expression-language>EL</expression-language>
          <alarm-type>AutomaticReset</alarm-type>
          <schedule>
            <minute>*</minute>
            <second>*/15</second>
          </schedule>
          <alarm-reset-period>60000</alarm-reset-period>
          <notification>RestScaleUpAction</notification>
        </watch>
        <rest-notification>
          <name>RestScaleUpAction</name>
          <enabled>true</enabled>
          <timeout>0</timeout>
          <endpoint-url>http://${OPERATOR_ENDPOINT}/hooks/scale-up</endpoint-url>
          <rest-invocation-method-type>PUT</rest-invocation-method-type>
          <accepted-response-type>application/json</accepted-response-type>
          <http-authentication-mode>None</http-authentication-mode>
          <custom-notification-properties></custom-notification-properties>
        </rest-notification>
      </watch-notification>
    </wldf-resource> 
    ポリシーとアクションを定義するための基本要素は<watch-notification>です。ポリシーは<watch>要素で定義します。アクションは、アクションタイプに対応する名前の要素で定義します。 例えば、RESTアクションの要素は<rest-notification>です。

    前述のリソース記述子ファイルで指定されているポリシーとアクションに関する主要な構成の詳細を説明します。利用可能なすべてのアクションタイプの詳細については、以下のドキュメントを参照してください。
    Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用
    12c (12.2.1.2.0)
    ポリシーとアクションの構成
    https://docs.oracle.com/cd/E84527_01/wls/WLDFC/config_notifications.htm#WLDFC204
    Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1.3.0)
    Configuring Actions
    https://docs.oracle.com/middleware/12213/wls/WLDFC/config_notifications.htm#WLDFC204 

    Policies:

    サンプルデモには、myScaleUpPolicyという名前のポリシーが含まれています。このポリシーには、以下のようなポリシー式があり、WebLogic Server管理コンソールで確認できます。

    myScaleUpPolicyのポリシー式では、ClusterGenericMetricRuleというスマートルールを使っています。このスマートルールの設定は以下のようです。
    DockerClusterクラスタでは、WLDFがOpenSessionAppアプリケーションのためにWebAppComponentRuntimeMBeanのOpenSessionsCurrentCount属性を監視します。OpenSessionsCurrentCountがクラスタ内の管理対象サーバインスタンスの5%で0.01%以上に達する場合、ポリシーをtrueと評価します。サンプリングレートを1秒としてメトリックを収集し、サンプルデータは保存ウィンドウの時間の指定された10秒間で平均化されます
    スマートルールに関する詳細は、以下のドキュメントをご覧ください。
    Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用
    12c (12.2.1.2.0)
    スマート・ルールのリファレンス
    https://docs.oracle.com/cd/E84527_01/wls/WLDFC/appendix_smartrules.htm
    Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1.3.0)
    Smart Rule Reference
    https://docs.oracle.com/middleware/12213/wls/WLDFC/appendix_smartrules.htm

    Actions:

    アクションは、ポリシー式がtrueと評価されたときに実行される操作です。従来のWebLogic Serverデプロイメントでは、スケーリングアクション(スケールアップおよびスケールダウン)は、動的クラスタをスケーリングするためのポリシーに関連付けられています。Elasticアクションは、ノードマネージャと対話することで、動的クラスタ内の管理対象サーバーインスタンスを拡張します。

    WLDFではその他の種類の診断アクションも数多くサポートしています。
    • Java Management Extensions (JMX)
    • Java Message Service (JMS)
    • Simple Network Management Protocol (SNMP)
    • Simple Mail Transfer Protocol (SMTP)
    • 診断イメージのキャプチャ
    • REST
    • WebLogicロギングシステム
    • WebLogic Scripting Tool (WLST)
    • ヒープダンプ
    • スレッドダンプ
    サンプルでは、RESTアクションを使用して、RESTエンドポイントを呼び出してスケーリング操作を開始する様子を示しています。Kubernetes環境ではノードマネージャを実行しておらず、Kubernetes APIとAPIサーバーを使用してPodをスケーリングしているため、ElasticアクションではなくRESTアクションを選択しました。WLDFでサポートされるすべての診断アクションの詳細については、以下のドキュメントを参照してください。
    Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用
    12c (12.2.1.2.0)
    アクションの構成
    https://docs.oracle.com/cd/E84527_01/wls/WLDFC/config_notifications.htmOracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1.3.0)
    Configuring Actions
    http://docs.oracle.com/middleware/12213/wls/WLDFC/config_notifications.htm
    • ポリシーmyScaleUpPolicyに関連付けられたRESTアクションは、WebLogic Server管理コンソールのポリシー設定ページの[アクション]タブで設定されました。

    • アクションを送信するRESTエンドポイントURLは診断システムモジュールのリソース記述子ファイルの<endpoint-url>要素によって設定します。
    RESTアクションの構成要素を見ると、REST呼び出しでは認証無しでエンドポイントに空のPUTリクエストを送信することがわかります。必要に応じて、<http-authentication-mode>属性をBasicに設定するだけで基本認証付きRESTリクエストを送信することもできます。

    注目すべきその他のWLDFリソース記述子の構成設定は以下のとおりです。
    1. WLDFリソース記述子のファイル名は任意です。サンプルデモでは、WebLogic Server管理コンソールを使用してWLDFポリシーとRESTアクションを構成する際にModule-0-3905.xmlが生成されました。
    2. WebLogicドメインdemoでは、container-scripts/add- app-to-domain.pyスクリプトを使用してWLDF診断システムモジュールを作成しました。
    # Configure WLDF
    # ============-=
    as_name = sys.argv[3]
    
    print('Configuring WLDF system resource');
    cd('/')
    
    create('Module-0','WLDFSystemResource')
    cd('/WLDFSystemResources/Module-0')
    set('DescriptorFileName', 'diagnostics/Module-0-3905.xml')
    
    cd('/')
    assign('WLDFSystemResource', 'Module-0', 'Target', as_name)
    
    スクリプトから以下のことがわかります。
    • Module-0という名前のWLDF診断システムモジュールが作成されます。
    • WLDFリソース記述子ファイル(Module-0-3905.xml)は、Module-0に関連付けられています。
    • 診断システムモジュールは、システム引数として渡されるas_nameで指定された管理サーバーをターゲットにしています。この診断システムモジュールは、そのポリシーにClusterGenericMetricRuleスマートルールが含まれているため、管理サーバーをターゲットとしていました。このルールは、クラスタ全体から見える必要があるため、管理サーバーから実行する必要があります。 スマートルールとそのターゲットの詳細については、以下のドキュメントを参照してください。
    Oracle® Fusion Middleware Oracle WebLogic Server診断フレームワークの構成と使用
    12c (12.2.1.2.0)
    スマート・ルールのリファレンス
    https://docs.oracle.com/cd/E84527_01/wls/WLDFC/appendix_smartrules.htm
    Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1.3.0)
    Smart Rule Reference
    https://docs.oracle.com/middleware/12213/wls/WLDFC/appendix_smartrules.htm

    Demo Webhook

    サンプルデモでは、webhookを使用してWLDFからREST通知を受信し、StatefulSetを拡張して、WebLogic Serverクラスタを拡張します。以下のフックはwebhooks/hooks.jsonで定義されています。
    [
      {
        "id": "scale-up",
        "execute-command": "/var/scripts/scaleUpAction.sh",
        "command-working-directory": "/var/scripts",
        "response-message": "scale-up call ok\n"
      }
    ] 
    scale-upと命名されたこのフックは、REST通知で指定された<endpoint-url>に対応します。
    <endpoint-url>http://${OPERATOR_ENDPOINT}/hooks/scale-up</endpoint-url> 
    エンドポイントURLに環境変数 ${OPERATOR_ENDPOINT} が含まれていることに注意してください。この環境変数は、管理サーバー起動時にWebHookの正しいホストとポートに置き換えられます。
    Webフックのエンドポイントが呼び出されると、 "execute-command"プロパティで指定されたコマンドが実行されます。今回の場合、シェルスクリプト /var/scripts/scaleUpAction.shが呼び出されます。
    #!/bin/sh
    echo "called" >> scaleUpAction.log
    num_ms=`curl -v  --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H  "Authorization: Bearer $(cat  /var/run/secrets/kubernetes.io/serviceaccount/token)" -X GET https://kubernetes/apis/apps/v1beta1/namespaces/default/statefulsets/${MS_STATEFULSET_NAME}/status  | grep -m 1 replicas| sed 's/.*\://; s/,.*$//'`
    echo "current number of servers is $num_ms" >> scaleUpAction.log
    new_ms=$(($num_ms + 1))
    echo "new_ms is $new_ms" >> scaleUpAction.log
    curl -v --cacert  /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H "Authorization:  Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" -X  PATCH -H "Content-Type: application/strategic-merge-patch+json" -d  '{"spec":{"replicas":'"$new_ms"'}}'  https://kubernetes/apis/apps/v1beta1/namespaces/default/statefulsets/${MS_STATEFULSET_NAME} 
    このスクリプトでは、Kubernetes APIサーバーのRESTエンドポイントに「curl」でリクエストを発行し、JSONのレスポンスを解析しています。最初のリクエストは、StatefulSetの現在のreplica数の取得です。続いて、replica数を1つ増やして、リクエストボディのreplicasプロパティに新しい値を入れてPATCHリクエストを送信し、StatefulSetをスケールアップします。

    Wrap Up

    WLDFのポリシーおよびアクションコンポーネントを使用する簡単な設定を使えば、Kubernetes環境で静的に構成されたWebLogic Serverクラスタに対して自動スケーリング機能を利用できます。WLDFはWebLogic Serverとの緊密に統合されているので、スケールの決定に使用可能な非常に包括的な一連のWebLogicドメイン固有の(カスタム)メトリックを利用できます。WLDF通知を受け取るためのRESTエンドポイントとしてwebhookを使用しましたが、サンプルデモでWebLogic Serverクラスタを拡張するため、Kubernetesクラスタで実行されている別のKubernetesオブジェクトまたはサービスを簡単に実装できました。例えば、WebLogic Serverチームは、Kubernetes環境でWebLogic Serverを統合するためKubernetes Operatorパターンも調査しています。Kubernetes Operatorは、「複雑なアプリケーションのインスタンスを作成、構成、管理するためのKubernetes APIを拡張するアプリケーション固有のコントローラ」です。Operatorの詳細については、以下のエントリをご覧ください。
    Introducing Operators: Putting Operational Knowledge into Software
    https://coreos.com/blog/introducing-operators.html
    WebLogic ServerおよびKubernetesとの統合に関連する今後のエントリご期待ください。WebLogic Serverのクラスタリングに関連する次回のエントリは、KubernetesのWebLogic Serverの動的クラスタあたりを予定しています。

    0 件のコメント:

    コメントを投稿