https://blogs.oracle.com/weblogicserver/voyagerhaproxy-as-load-balancer-to-weblogic-domains-in-kubernetes
Overview
負荷分散は、スケーラブルで復元力のあるアプリケーションを構築するために広く使用されているテクノロジーです。負荷分散の主な機能は、サーバーの監視と、ネットワークトラフィックの複数のサーバー(Webアプリケーション、データベースなど)への分散です。Kubernetesで動作するコンテナ化されたアプリケーションでは、負荷分散も必要です。Oracle WebLogic Server Kubernetes Operator version 1.0で、Voyager/HAProxyのサポートを追加しました。create-weblogic-domain.shスクリプトを拡張してVoyager/HAProxyをすぐに使用できるようにしています。Oracle Weblogic Server Kubernetes Operatorこのスクリプトは、1個のWebLogicドメイン/クラスタのサーバへの負荷分散をサポートしています。このエントリでは、Kubernetesの複数のWebLogicドメインにデプロイされたアプリケーションに対して負荷分散のサポートを拡張するためのVoyager/HAProxyの設定方法を説明します。
https://github.com/oracle/weblogic-kubernetes-operator/tree/release/1.0
Basics of Voyager/HAProxy
HAProxyとVoyagerに詳しくない方は、HAProxyとVoyagerの基本を時間を掛けて学ぶ価値があります。HAProxyは、TCPおよびHTTPベースのアプリケーション用の可用性の高いロードバランサとプロキシサーバを提供する、無料のオープンソース・ソフトウェアです。(プロセッサ速度とメモリ使用量の面で)高速で効率的であることはよく知られています。HAProxyの初心者ガイドは以下からどうぞ。
HAProxy Starter Guide version 1.9-dev1VoyagerはHAProxyを使うIngressコントローラです(IngressについてはKubernetesのドキュメントを参照してください)。
http://cbonte.github.io/haproxy-dconv/1.9/intro.html
IngressKubernetesクラスタにインストールすると、VoyagerオペレータはKubernetes IngressリソースとVoyager自身のIngress CRDを監視し、状況に応じてHAProxyインスタンスを自動作成、更新、削除します。 Voyagerオペレータの仕組みを理解するには、voyagerの概要をご覧ください。
https://kubernetes.io/docs/concepts/services-networking/ingress/
Voyager Overview
https://appscode.com/products/voyager/7.1.1/concepts/overview/
Running WebLogic Domains in Kubernetes
wls-operator-quickstartプロジェクトをGitHubからあなたのローカル環境にチェックアウトしてください。このプロジェクトを使うと、最小限の作業でWebLogic Operatorとドメインを設定できます。READMEのPre-Requirementsの章に記載の手順を実行して、ローカル環境を構成してください。Quick Start of WLS Operatorwls-operator-quickstartプロジェクトとWebLogic Operatorを使用して、Kubernetes上で実行される2つのWebLogicドメインを、それぞれ独自の名前空間に設定します。
https://github.com/lilyhe123/wls-operator-quickstart
- 'domain1'という名前のドメインは名前空間 'default'で実行され、2個の管理対象サーバ 'domain1-managed-server1'と 'domain1-managed-server2'を含む 'cluster-1'という1個のクラスタを有します。
- 'domain2'という名前のドメインは名前空間 'test1'で実行され、2個の管理対象サーバ 'domain2-managed-server1'と 'domain2-managed-server2'を含む 'cluster-1'という1個のクラスタを有します。
- Webアプリケーション 'testwebapp.war' は、domain1とdomain2の両方のクラスタに別々にデプロイされます。このWebアプリケーションには、どちらの管理対象サーバがHTTPリクエストを処理しているかを表示するデフォルトページがあります。
以下のようにWebLogicドメインの状態を確認します。# change directory to root folder of wls-operator-quickstart $ cd xxx/wls-operator-quickstart # Build and deploy weblogic operator $ ./operator.sh create # Create domain1. Change value of `loadBalancer` to `NONE` in domain1-inputs.yaml before run. $ ./domain.sh create # Create domain2. Change value of `loadBalancer` to `NONE` in domain2-inputs.yaml before run. $ ./domain.sh create -d domain2 -n test1 # Install Voyager $ kubectl create namespace voyager $ curl -fsSL https://raw.githubusercontent.com/appscode/voyager/6.0.0/hack/deploy/voyager.sh \ | bash -s -- --provider=baremetal --namespace=voyager
Kubernetesで両WebLogicドメインが稼働してから、異なるHAProxy機能を使って、2個のWebLogicドメインに帯する単一エントリポイントとしてVoyagerを構成します。# Check status of domain1 $ kubectl get all NAME READY STATUS RESTARTS AGE pod/domain1-admin-server 1/1 Running 0 5h pod/domain1-managed-server1 1/1 Running 0 5h pod/domain1-managed-server2 1/1 Running 0 5h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/domain1-admin-server NodePort 10.105.135.58 <none> 7001:30705/TCP 5h service/domain1-admin-server-extchannel-t3channel NodePort 10.111.9.15 <none> 30015:30015/TCP 5h service/domain1-cluster-cluster-1 ClusterIP 10.108.34.66 <none> 8001/TCP 5h service/domain1-managed-server1 ClusterIP 10.107.185.196 <none> 8001/TCP 5h service/domain1-managed-server2 ClusterIP 10.96.86.209 <none> 8001/TCP 5h service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h # Verify web app in domain1 via running curl on admin server pod to access the cluster service $ kubectl -n default exec -it domain1-admin-server -- curl http://domain1-cluster-cluster-1:8001/testwebapp/ # Check status of domain2 $ kubectl -n test1 get all NAME READY STATUS RESTARTS AGE pod/domain2-admin-server 1/1 Running 0 5h pod/domain2-managed-server1 1/1 Running 0 5h pod/domain2-managed-server2 1/1 Running 0 5h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/domain2-admin-server NodePort 10.97.77.35 <none> 7001:30701/TCP 5h service/domain2-admin-server-extchannel-t3channel NodePort 10.98.239.28 <none> 30012:30012/TCP 5h service/domain2-cluster-cluster-1 ClusterIP 10.102.228.204 <none> 8001/TCP 5h service/domain2-managed-server1 ClusterIP 10.96.59.190 <none> 8001/TCP 5h service/domain2-managed-server2 ClusterIP 10.101.102.102 <none> 8001/TCP 5h # Verify the web app in domain2 via running curl in admin server pod to access the cluster service $ kubectl -n test1 exec -it domain2-admin-server -- curl http://domain2-cluster-cluster-1:8001/testwebapp/
Using Host Name-Based Routing
Ingressリソースファイル 'voyager-host-routing.yaml' を作成します。このファイルにはホスト名ベース・ルーティングを使ったIngressリソースが含まれています。YAMLファイルを以下のコマンドを使ってデプロイします。apiVersion: voyager.appscode.com/v1beta1 kind: Ingress metadata: name: hostname-routing namespace: default annotations: ingress.appscode.com/type: 'NodePort' ingress.appscode.com/stats: 'true' ingress.appscode.com/affinity: 'cookie' spec: rules: - host: domain1.org http: nodePort: '30305' paths: - backend: serviceName: domain1-cluster-cluster-1 servicePort: '8001' - host: domain2.org http: nodePort: '30305' paths: - backend: serviceName: domain2-cluster-cluster-1.test1 servicePort: '8001'
kubectl create -f voyager-host-routing.yaml
Testing Load Balancing with Host Name-Based Routing
ホスト名ベース・ルーティングを行うには、通常はDNSの変更を伴う仮想ホスティングを設定する必要があります。デモ目的のため、curlコマンドを使用して、ホスト名ベース・ルーティングによるロードバランシングをシミュレートします。結果は以下の通りです。# Verify load balancing on domain1 $ curl --silent -H 'host: domain1.org' http://${HOSTNAME}:30305/testwebapp/ | grep InetAddress.hostname <li>InetAddress.hostname: domain1-managed-server1 $ curl --silent -H 'host: domain1.org' http://${HOSTNAME}:30305/testwebapp/ | grep InetAddress.hostname <li>InetAddress.hostname: domain1-managed-server2 # Verify load balancing on domain2 $ curl --silent -H 'host: domain2.org' http://${HOSTNAME}:30305/testwebapp/ | grep InetAddress.hostname <li>InetAddress.hostname: domain2-managed-server1 $ curl --silent -H 'host: domain2.org' http://${HOSTNAME}:30305/testwebapp/ | grep InetAddress.hostname <li>InetAddress.hostname: domain2-managed-server2
- ホスト名 'domain1.org' を指定すると、リクエストはdomain1の管理対象サーバで処理される。
- ホスト名 'domain2.org' を指定すると、リクエストはdomain2の管理対象サーバで処理される。
Using Path-Based Routing and URL Rewriting
この章では、URL書き換えによるパスベース・ルーティングを使用して、ホスト名ベース・ルーティングと同じ動作を実現します。Ingressリソースファイル 'voyager-path-routing.yaml'を作成します。
YAMLファイルを以下のコマンドを使ってデプロイします。apiVersion: voyager.appscode.com/v1beta1 kind: Ingress metadata: name: path-routing namespace: default annotations: ingress.appscode.com/type: 'NodePort' ingress.appscode.com/stats: 'true' ingress.appscode.com/rewrite-target: "/testwebapp" spec: rules: - host: '*' http: nodePort: '30307' paths: - path: /domain1 backend: serviceName: domain1-cluster-cluster-1 servicePort: '8001' - path: /domain2 backend: serviceName: domain2-cluster-cluster-1.test1 servicePort: '8001'
kubectl create -f voyager-path-routing.yaml
Verify Load Balancing with Path-Based Routing
負荷分散の結果を検証するため、curlコマンドを使います。別の方法として、Webブラウザから直接URLにアクセスすることもできます。異なるURLを指定してパスベース・ルーティングによりトラフィックが異なるWebLogicドメインに振り分けられることを確認できます。URL書き換え機能を使えば、最終的に各ドメインの同じコンテキスト・パスを持つWebアプリケーションにアクセスできます。# Verify load balancing on domain1 $ curl --silent http://${HOSTNAME}:30307/domain1/ | grep InetAddress.hostname <li>InetAddress.hostname: domain1-managed-server1 $ curl --silent http://${HOSTNAME}:30307/domain1/ | grep InetAddress.hostname <li>InetAddress.hostname: domain1-managed-server2 # Verify load balancing on domain2 $ curl --silent http://${HOSTNAME}:30307/domain2/ | grep InetAddress.hostname <li>InetAddress.hostname: domain2-managed-server1 $ curl --silent http://${HOSTNAME}:30307/domain2/ | grep InetAddress.hostname <li>InetAddress.hostname: domain2-managed-server2
Cleanup
このエントリの手順を使った演習終了後は、Kubernetesで作成した全てのリソースをクリーンアップしたいと思うことでしょう。# Cleanup voyager ingress resources $ kubectl delete -f voyager-host-routing.yaml $ kubectl delete -f voyager-path-routing.yaml # Uninstall Voyager $ curl -fsSL https://raw.githubusercontent.com/appscode/voyager/6.0.0/hack/deploy/voyager.sh \ | bash -s -- --provider=baremetal --namespace=voyager --uninstall --purge # Delete wls domains and wls operator $ cd <QUICKSTART_ROOT> $ ./domain.sh delete --clean-all $ ./domain.sh delete -d domain2 -n test1 --clean-all $ ./operator.sh delete
0 件のコメント:
コメントを投稿