[Docker, WLS] Patching WebLogic Server in a Kubernetes Environment

原文はこちら。
https://blogs.oracle.com/weblogicserver/patching-weblogic-server-in-a-kubernetes-environment

ソフトウェアシステムの最適なパフォーマンスとセキュリティを提供する上で最も重要な作業の1つが、システムの可用性の低下を最小限に抑えながら、確実に最新のソフトウェアアップデートを速やかにインストール、テスト、ロールアウトすることは論を待ちません。Oracleでは、Patch Set Update、Security Patch Update、One-Off patchなど、WebLogic Server用に異なるタイプのパッチを提供しています。インストールするパッチとインストール方法は、カスタムニーズと環境によって異なります。

Kubernetes上で実行されているWebLogic Serverに関して、最近、Kubernetes Volumeにマップされた共有ドメインのホームディレクトリを持つWebLogic Serverインスタンスを作成する手順をGithubで共有しました。
WebLogic Sample on Kubernetes with Shared Domain Home
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-k8s-domain
Kubernetes、Docker、および社内環境では、同じOPatchツールを使用してWebLogic ServerにPatchを適用しますが、Kubernetesがクラスタをオーケストレーションしている場合、StatefulSetコントローラのupdate strategyオプションを利用して、アップデート済みのWebLogic Serverイメージからパッチをロールアウトできます。このエントリでは、その方法を紹介します。

Prerequisites

  1. 以下のURLで提供している手順に基づいて、Kubernetesで稼働するWebLogic Server環境を作成する。以下に示すパッチ適用プロセスは作成した環境に基づく。
    WebLogic Sample on Kubernetes with Shared Domain Home
    https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-k8s-domain
  2. 1.で作成した環境からWebLogic ServerのOne-off PatchもしくはPatch Set Updateにアクセスできるようにしておく。

Patch Set Updates and One-Off Patches

  • Patch Set Updateは、セキュリティ修正プログラムと重要な修正プログラムを含む累積的な修正プログラムです。Patch Set UpdateはOracle WebLogic Serverだけにパッチを適用するために利用され、定期的にリリースされます。Patch Set Updateに関する追加情報については、以下のURLを参照してください。
    Oracle® Fusion Middleware Patching with OPatch 12c (12.2.1.3)
    https://docs.oracle.com/middleware/12213/lcm/OPATC/GUID-56D6728D-5EDC-482B-B2E4-DDB20A64FA32.htm#OPATC143
  • One-Off patchは既知の問題もしくは機能強化の追加を目的としています。One-Off patchのダウンロードに関してはMy Oracle Supportを参照してください。
    My Oracle Support
    https://www.oracle.com/support/index.html

Kubernetes Update Strategies for StatefulSets

StatefulSetには、以下のタスクに使用できる3個の異なるupdate strategyオプションがあります。
  • コンテナイメージの自動ローリングアップデートの設定および無効化
  • リソースのリクエスト、制限、またはその両方の構成
  • Podのラベルと注釈の設定
StatefulSetのupdate strategyに関する詳細は、以下のUpdate StatefulSetsの項をご覧ください。
Updating StatefulSets
https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets
これらのupdate strategyは以下のようなものです。
  • 削除時
    • 環境設定に基づいて、任意の順序でPodを手動で削除します。KubernetesはPodの削除を検出すると、そのStatefulSetで定義された仕様に基づいて新しいPodを作成します。これは、StatefulSet作成時のデフォルトのupdate strategyです。
    • ローリングアップデート
      • クラスタ内のすべてのPodに対しローリングアップデートを実行します。 Kubernetesは、一度に1つずつStatefulSetコントローラで定義されたすべてのPodを削除して再作成しますが、その順序は削除時とは逆です。

    • ローリングアップデート+パーティション
      • ローリング・アップデートをパーティション化することもできます。この場合、StatefulSetに対して定義された仕様のパーティション値によって決定されます。たとえば、クラスタに4つのPodがあり、パーティションの値が2の場合、2つのポッドのみが更新されます。他の2つのPodは、パーティション値が4に設定されている場合、またはパーティション属性が仕様から削除されている場合にのみ更新されます。

      Methods for Updating the StatefulSet Controller

      StatefulSetには、ロールアウトする前に検証が必要な3つの属性(imageimagePullPolicy、およびupdateStrategy)があります。これらの属性のいずれかは、in-place updateアプローチを使用して更新できます。以下のin-placeオプションがあります。
      1. kubectl apply
      • 新しい設定をKubernetesクラスタに展開するための
        kubectl apply -f <statefulset yml file>
        を実行するようにStatefulSetの作成に使用するyamlファイルを更新する。
      • 以下は更新されたyamlファイルのサンプル

      1. kubectl edit
      • 以下のコマンドで直接属性値を更新する。
        kubectl edit statefulset <statefulset name>
        以下はStatefulSetの編集例

      1. kubectl patch
      • 以下のコマンドで直接属性値を更新する。
        kubectl patch
        以下はupdateStrategyRollingUpdateに更新する際のコマンド例

      • updateStrategyからpartitionオプション付きのRollingUpdateに更新するコマンド例

      • JSON フォーマットを使いimage属性をwls-k8s-domain-v1に更新するコマンド例

      1. Kubernetes Dashboard
      メニューパスから特定のStatefulSetまでドリルダウンし、imageimagePullPolicy、およびupdateStrategyの値を更新します。

      Steps to Apply One-Off Patches and Patch Set Updates with an External Domain Home

      以下の手順で新しいOne-Off patchを適用したWebLogicイメージを作成し、全てのPodに適用します。
      1. パッチ適用済みのWebLogicイメージを作成するには、GithubのWLSドメイン付きイメージ例の手順を全て実行する。
        Example of Image with WLS Domain
        https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/12211-patch
      2. Kubernetesクラスタが複数のノードで構成されていて、新たに作成したイメージがDockerレジストリで使用できない場合は、docker saveおよびdocker loadで提供されている手順を実行して、クラスタ内のすべてのノードにイメージをコピーする。
        docker save
        https://docs.docker.com/engine/reference/commandline/save/
        docker load
        https://docs.docker.com/engine/reference/commandline/load/
      3. "Methods for Updating the StatefulSet Controller"の章に記載の3つの方法のいずれかを使用して、コントローラ定義を更新する。KubernetesがStatefulSetのすべてのPodに新しいイメージを自動的に適用するようにするには、updateStrategyの属性値をRollingUpdateに設定する。
      4. 管理サーバーPodに新しいイメージを適用する。クラスタには管理サーバーが1つしかないため、RollingUpdate update strategyオプションの利用を推奨する。変更をStatefulSetコントローラにコミットすると、Kubernetesは管理サーバーPodを自動的に削除して再作成する。
      5. 管理対象サーバーStatefulSetに定義した全てのPodに新規イメージを適用する
        1. OnDeleteの場合、クラスタ内のPodのリストを取得し、updateStrategyvalueOnDeleteに変更する。以下のコマンドを使用して、クラスタ内のすべてのPodを手動で削除して新しいイメージを展開する必要がある。
        2. RollingUpdateオプションの場合、updateStrategy値をRollingUpdateに変更した後、Kubernetesは管理対象サーバーインスタンス用に作成されたPodをローリング方式で削除し、再作成する(図1)。
        3. Partition属性がRollingUpdate値に追加されている場合、ローリングアップデートの順序はパーティションの値によって異なる。Kubernetesは、orderがpartitionの値以上の序数を持つPodに新しいイメージを展開する。
      Fig.1 Before and After Patching the Oracle Home Image Using the Kubernetes Statefulset RollingUpdate Strategy

      Roll Back

      パッチをロールバックする必要がある場合、新しいイメージを適用するときと同じ手順を使用します。すなわち、image値を元のimage値に変更します。レジストリに少なくとも2つまたは3つのバージョンのイメージを保持する必要があります。

      Monitoring

      WebLogicドメインのローリングアップデートの進行状況を監視するには、いくつかの方法があります。
      1. コマンドを使用してポッドのステータスを確認する。例えば以下の出力は、2個の管理対象サーバーPodのローリングアップデートを実行するときに生成されるものである。
      2. kubectl get pod -o wide
        kubectl rollout status statefulset
      3. REST APIを使用し、管理サーバーを照会して、ローリングアップデート中の管理対象サーバーの状態を監視できる。REST APIを使用してWebLogic Serverを監視する方法については、以下の記事を参照。
        Oracle WebLogic RESTful Management Services:
        From Command Line to JavaFX
        http://www.oracle.com/technetwork/articles/soa/oliveira-wls-rest-javafx-1723982.html
        • 以下のコマンド例を使って、管理サーバーの状態を照会する。
        • 前述のコマンドで、以下のような出力が現れるはず。
      4. アップデートの状況を監視するためにWebLogic Server管理コンソールを利用できる。
        • サーバーインスタンス wls-domain-ms-1 を停止。
        •  wls-domain-ms-1でのアップデートが完了すれば、 wls-domain-ms-0に切り替える。
      5. 4個目の方法が、Kubernetes Dashboardの利用である。ブラウザから https:<hostname>:<nodePort> にアクセスする。

      Summary

      KubernetesでWebLogic ServerにOne-Off PatchまたはPatch Set Updateを適用するプロセスは、ベアメタル環境で実行している場合と同じです。KubernetesのStatefulsetを使用する場合は、イメージを以前のバージョンで拡張して最新のパッチ適用イメージを作成してから、環境に最適なアップデート戦略(OnDelete、RollingUpdate、または "RollingUpdate + partition")を使用することをお勧めします。

      今後のエントリで、Kubernetes Operatorで利用可能なパッチオプションについて検討します。上記で共有した手作業の手順のいくつかをOperatorと統合して、Kubernetesで動作しているときのWebLogic Serverのパッチ適用プロセス全体をさらに簡略化することができます。

      0 件のコメント:

      コメントを投稿