Red Hat - Open Innovation Labsのブログ - TECH PLAY

TECH PLAY

Red Hat  - Open Innovation Labs

Red Hat - Open Innovation Labs の技術ブログ

全900件

Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。 この記事は、Quarkus.io のブログ記事、 A IO thread and a worker thread walk into a bar: a microbenchmark story の翻訳記事です。 注:タイトルはアメリカで鉄板のジョークです。 競合他社は最近、彼らのスタックのパフォーマンスをQuarkusと比較したマイクロベンチマークを発表しました。Quarkusチームは、このマイクロベンチマークを額面通りに捉えるべきではないと考えています。なぜなら、このマイクロベンチマークは、似たような比較をしていなかったために、間違った結論になってしまったからです。比較対象の2つのフレームワークは、どちらもリアクティブ処理をサポートしています。リアクティブ処理は、ビジネスロジックをIOスレッド上で直接実行することを可能にします。それは最終的には応答時間と同時実行性に焦点を当てたマイクロベンチマークでより良いパフォーマンスを発揮します。マイクロベンチマークは、両方のフレームワークがこの恩恵を受けるよう(またはどちらのフレームワークでも受けないように)に書かれているべきでした。いずれにしても、これは非常に興味深いトピックであり、Quarkusユーザーにとっては良い情報であることがわかりました。 TL;DR Quarkusは、命令的なワークロードと反応性の高いワークロードの両方に対して 優れたパフォーマンスを発揮 します。それは、Quarkus自体がEclipse Vert.xをベースにしているからです。これは、成熟したトップパフォーマンスのリアクティブフレームワークであり、ユーザーのユースケースに最も適したIOの典型を階層化、混合、一致させることができる方法です。 純粋にIOスレッドでの実行に適したRESTのシナリオがある場合は、 Quarkus Reactive Routes を使用してVert.x Reactive Routeを追加します。すると、Quarkus RESTEasyを使用するよりもアプリのパフォーマンスが向上します。 私たちは、この低負荷なREST + 検証をする検証競合が書いたマイクロベンチマークを実行しました。これは静的データを返すだけでブロッキング操作を行わないことが特徴です。Quarkus Reactive Routesを使用して純粋にIOスレッド上でQuarkusを実行した場合、Quarkus RESTEasy(IOスレッドとワーカースレッドを混在させたもの)を使用して実行した場合と比較して、リクエスト数/秒が2.6倍になり、メモリ使用量(RSS)が30%減少したことがわかりました。しかし、それはこの特定のシナリオのために構築されたマイクロベンチマークの目的上にあります(それについての詳細は後で)。 より面白い読み物 マイクロベンチマーク自体は面白くないが、反応性のあるスタックで起こりうる現象の良いデモになっています。Quarkusとそのリアクティブエンジンを学ぶための乗り物として使ってみましょう。 命令型とリアクティブ:エレベーターピッチ このブログ記事では、命令型実行モデルとリアクティブ実行モデルの根本的な違いを説明していません。しかし、なぜ言及したマイクロベンチマークでこれほどの違いがあるのかを理解するためには、いくつかの概念が必要です。 一般的に、JavaのWebアプリケーションでは、IO操作のブロッキングと組み合わせた命令型プログラミングを使用します。これは、信じられないほど人気があります。なぜならコードを推論するのが簡単だからです。物事は順次実行されます。一つのリクエストが他のリクエストに影響されないようにするために、それらは別のスレッドで実行されます。ワークロードがデータベースや別のリモートサービスと相互作用する必要がある場合、IOのブロッキングに依存します。そのスレッドはそれらの回答を待ってブロックされています。別のスレッドで実行されている他のリクエストが大幅に遅くなることはありません。しかし、これは同時実行リクエストごとに1つのスレッドを意味します。それは全体の同時実行性を制限しています。 一方、リアクティブ実行モデルは、非同期開発モデルと非ブロッキングIOを包含しています。このモデルでは、複数のリクエストを同じスレッドで処理することができます。リモートサービスを要求したり、データベースと対話したりするため、リクエストの処理が進まなくなったとき、非ブロッキングIOを使用します。これはスレッドを即座に解放し、別のリクエストに対応するために使用することができます。IO操作の結果が利用可能になると、リクエストの処理が復元され、実行が継続されます。このモデルでは、複数のリクエストを処理するためにIOスレッドを使用することができます。大きなメリットは2つあります。まず、別のスレッドに飛ぶ必要がないので、レスポンスが小さくなります。第二に、スレッドの使用量が減るため、メモリの消費量を減らすことができます。リアクティブモデルはハードウェアリソースをより効率的に使用します。しかし...大きな欠点があります。リクエストの処理がブロックされるようになったら、これは本当にひどいことになります。他のリクエストには対応できません。これを避けるためには、非ブロッキングコードの書き方、非同期処理の構造、非ブロッキングIOの使い方を学ぶ必要があります。それは価値観の劇的な変化です。 Quarkusでは、私たちはできるだけ簡単に変化できるようにしたいと考えています。しかし、ユーザーアプリケーションの大多数は命令型モデルを使って書かれていることがわかりました。そのため、ユーザーアプリケーションがJAX-RSを使用する場合、Quarkusはデフォルトでワーカースレッドに(命令的な)ワークロードを実行するようになっています。 Hello Worldマイクロベンチマーク。IOスレッドかワーカースレッドか? 競合他社のマイクロベンチマークの話に戻りますが、私たちは些細な処理と同様に些細な検証を行うRESTエンドポイントを持っています。かなり意味のあるビジネスの仕事ではない。以上、RESTのHello Worldの全ての意図と目的でした。 Quarkus RESTEasyでマイクロベンチマークを実行すると、リクエストはIOスレッド上のリアクティブエンジンによって処理されます。その後、処理作業はワーカースレッドプールから第二のスレッドに引き渡されます。それがディスパッチというものです。あなたのマイクロベンチマークがHello Worldと同じくらいわずかなことをすると、ディスパッチのオーバーヘッドは相対的に大きくなります。ディスパッチのオーバーヘッドはほとんどの(実生活の)アプリケーションでは気になりません。ですが、マイクロベンチマークのような人工的な構築物では非常に目に見えます。 しかし、競合他社のスタックは、デフォルトではすべてのリクエスト操作を IO スレッド上で実行します。つまり、このマイクロベンチマークが実際に比較していたのは、ワーカースレッドプールへのディスパッチのコストだけです。そして率直に言って(競合他社の数字によると)、この余分なディスパッチ作業にもかかわらず、Quarkusは今日、競合他社のスループットの95%を達成することができました。私たちは常にパフォーマンスを向上させているので、今日はそう言いました。また、実際にはもうすぐリリースされる1.4のリリースでさらに得られることを期待しています。 不利な点(ワーカースレッドへのディスパッチ)で比較すると、Quarkusはそれにもかかわらず、スループットではほぼ同程度の速さです。 しかし、Quarkusはディスパッチを完全に回避してIOスレッド上で操作を実行することもできます。これは、どちらの場合も、アプリケーションが必要としたときに派遣を求めるのはユーザーの責任であるため、競合他社のスタックがどのように構成されていたかと比較すると、より正確です。同じもの同士を比較するために、Eclipse Vert.xで実装された Quarkus Reactive Routes を使ってみましょう。このモデルでは、デフォルトでは処理は IO スレッド上で実行されます。 @ApplicationScoped public class MyDeclarativeRoutes { @Inject Validator validator; @Route(path = "/hello/:name" , methods = HttpMethod.GET) void greetings(RoutingExchange ex) { RequestWrapper requestWrapper = new RequestWrapper(ex.getParam( "name" ).orElse( "world" )); Set<ConstraintViolation<RequestWrapper>> violations = validator.validate(requestWrapper) ) ; if ( violations.size() == 0 ) { ex.ok( "hello " + requestWrapper.name); } else { StringBuilder validationError = new StringBuilder(); violations.stream().forEach(violation -> validationError.append(violation.getMessage())); ex.response().setStatusCode( 400 ).end(validationError.toString()); } } private class RequestWrapper { @NotBlank public String name; public RequestWrapper(String name) { this .name = name; } } } これは、あなたのJAX-RS相当のものと大差ありません。 スループット数 Kubernetesによってオーケストレーションされたコンテナへの典型的なリソース割り当てを反映するように制約されたdockerコンテナ内でマイクロベンチマークアプリケーションを実行しました。 4 CPU 256MBのRAM Javaプロセスのため-Xmx128mのヒープ使用量 Reactive Routesを使用したQuarkusは、リクエスト/秒数が2.6倍になることがわかりました。 2.6倍!それは理にかなっています!アプリケーションコードは事実上何もしないのを思い出して下さい。ディスパッチコストが比較的高いです。もし、もっと現実的なワークロードを書こうとしたら(JPAアクセスのようなブロッキング操作をして、それゆえにディスパッチを強制的に行うこともあるかもしれません)、結果は大きく異なるでしょう。コンテキストが大事! マイクロベンチマークを再現するコードや方法は GitHub にあります。 表1.Quarkusのワーカースレッドへのディスパッチと純粋にIOスレッド上での実行を比較したマイクロベンチマークの結果 Quarkus - 1.3.1.Final - 4 CPU’s ワーカースレッド IO スレッド 比率 最初のリクエストまでの平均開始時間 (ms) [1] 993.9 868.3 87.4% 最大RSS (MB) 138.8 97.9 70.5% 最大スループット (req/sec) 46,172.2 123,520.4 267.5% 最大リクエスト/秒/MB 332.7 1,262.1 379.4% 公平に比較すると(純粋にIOスレッドにある - ディスパッチなし)、Quarkusはそのスループットを2倍以上にしています。 生成された負荷がテスト対象のシステムの最大スループットに貢献するように、クライアントが体験する応答時間は指数関数的に増加します。なので、(負荷量の割には)できるだけ右に縦線が入っているのがベストなシステムです。同様に重要なのは、できるだけフラットなラインを長く保つことです。システムが最大スループットに達する前に応答時間が低下することを望みません。 ところで、競合のマイクロベンチマークでは、Quarkusの方がRSSの消費量が多い(RAMの消費量が多い)ことが示されています。これは、競合他社がワーカースレッドプールを持っていなかったのに対し、ワーカースレッドプールが運用されていることでも説明できます。Quarkus Reactive Routesソリューション(純粋なIOイベントの実行時)では、RSSの使用量が30%削減します。 このグラフでは、低ければ低いほど良いです。純粋な IO スレッドソリューションは、メモリ使用量 (RSS) にほとんど変化を与えずにスループットを向上させることができます。これはとても良いです! 結論 Quarkusでは、ブロッキング操作を安全に実行したり、IOスレッド上で非ブロッキング操作を実行したり、両方のモデルを混在させたりすることができます。Quarkusチームはパフォーマンスを非常に重視しています。Quarkusは、命令的モデルを使用しているか、反応性モデルを使用しているかにかかわらず、素晴らしい数字を提供していると考えています。より現実的なワークロードでは、ディスパッチコストははるかに少なく、2つのアプローチの間にこれほど劇的な違いは見られないでしょう。いつものように、できるだけ実際のアプリケーションに近い状態でテストしてください。 謎が解けました。ベンチマークは難しい、チャレンジしましょう。しかし、物語の教訓は、すべての悪いことには、いくつかの良いことが来るということです。Quarkusのアプリケーションを完全にIOスレッド上で実行する方法がわかりました。そして、状況によってはそれが大きな違いを生むこともあります。覚えておいてください、ブロックしないでください。実際、 そうするとQuarkusが警告してくれます 。そして、Quarkusはとても速く、自分自身を打ち負かすこともできるということも学びました。 ;P
皆様こんにちは、Red Hat ソリューションアーキテクトの岡野です。 Ansible Tower による VMware vSphere の自動化の第三弾です。♪ 前回 のPart 2では以下を説明したしました。 ・Ansible Tower のインストール ・必要なコンポーネント(vSphere Automation SDKなど)のインストール ・Playbook について ・Ansible Tower での Playbook 実行方法 ・Ansible Tower による vCenter Server の環境変数の取り扱いと Playbook への入力方法 ・Survey を使った変数の入力方法 今回のシナリオ 既存の vSphere クラスター環境に新規インストールした ESXi ホストを追加してみたいと思います。♬ 追加にあたって、vMotion や HA が出来る様に vmkernel や共有データストアの設定を行い、最後にテスト vMotion も実行し、構成に問題がないことを確認します。 具体的には以下を実施します。 1. ESXi を vCenter Server に登録(クラスター配下に登録) 2. ESXi にライセンスを適応 3. vmnic1 が接続された標準仮想スイッチ (vSwitch1) を追加 4. vSwitch1 に vMotion 用の vmkernel ポートを追加 5. 共有ストレージとして NFS をマウント 6. テスト vMotion の実行 せっかくですので、皆さんも同じ環境を準備して実行しながら進めてみてください。♪ ※今回一連のブログで利用する Playbook は こちら に公開しています。 1. ESXi を vCenter Server に登録 さて、Playbook を書く必要がありますが、使うモジュール?書き方って? そう、 VMware のモジュール を眺める事から始めるんでしたね。♪ VMware モジュールも多くなってきて探しにくいですが、今回はこの中で、vmware_host を利用します。 1つ目なので、以下 Playbook の内容を説明します。 docs.ansible.com Playbook は こちら の中から add-host.yml を使います。 --- - name: Add or Remove ESXi host to/from vCenterServer hosts: all # gather_facts: no tasks: - name: Add or Remove ESXi host to/from vCenterServer vmware_host: hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: False datacenter_name: "{{dc_name}}" cluster_name: "{{cl_name}}" esxi_hostname: "{{esxi_host}}" esxi_username: "{{esxi_user}}" esxi_password: "{{esxi_pass}}" state: "{{esxi_state}}" delegate_to: localhost # 以下は必須ではありませんがホスト追加時に ESXi のメンテナンスモードを自動的に解除します。 # 変数は全て上のタスクで定義されていますので新規定義は必要ありません。 - name: Manage Maintenance Mode vmware_maintenancemode: validate_certs: False hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" esxi_hostname: "{{esxi_host}}" state: absent delegate_to: localhost when: esxi_state == "present" ※ {{ }} で記載した部分は変数です。 Ansible Tower への変数への入力方法は、そう、Survey でしたね。Survey で与えるべき具体的な値はモジュールの Parameters を見ていただけると分かりますが、以下の通りです。 以下の3つは、Ansible Towerの環境変数から自動的に入力されますので Survey での指定は不要です。 ・hostname: "{{lookup('env', 'VMWARE_HOST')}}" ・username: "{{lookup('env', 'VMWARE_USER')}}" ・password: "{{lookup('env', 'VMWARE_PASSWORD')}}" 以下を Survey で与えます。もしくは、PoC 環境であれば、変数をやめて、Playbook の中にベタ書きしても良いと思います。 ・datacenter_name: "{{dc_name}}" ---> ESXi ホストを追加する vCenter Server のデータセンター名 ・cluster_name: "{{cl_name}}" ---> ESXi ホストを追加する vCenter Server のクラスター名 ・esxi_hostname: "{{esxi_host}}" ---> 追加する ESXi のホスト名・IPアドレス ・esxi_username: "{{esxi_user}}" ---> 追加する ESXi のユーザー ・esxi_password: "{{esxi_pass}}" ---> 追加する ESXi のパスワード ・state: "{{esxi_state}}" ---> ESXi を追加 (present) or 削除 (absent) Survey の設定方法、Playbook のAnsible Tower での実行方法に関して不明な方はこちら[Part2] ( https://rheb.hatenablog.com/entry/ansible_tower_vmware_part2 )をご確認ください。 state 変数を、 present 、 absent に変更して実行してみてください。 追加だけではなく、削除も簡単に行えるのが分かると思います。 ここで、vSphere 環境を良く触っている方であれば、特に削除時の動作に驚くのではと思います。 vSphere のクラスター環境からホストを削除する際、vSphere の場合、まずメンテナンスモードに変更する必要がありますよね。vmware_host モジュールでは削除時、自動的にメンテナンスモードに変更してくれます。凄く便利だと思いませんか?♪ 逆に、vmware_host モジュールだけで削除・追加を行うと、メンテナンスモードのまま追加されます。(^^) そのため、vmware_maintenancemode モジュールを使って、ESXi ホスト追加時に、メンテナンスモードを自動的に解除するように Playbook を書いてます。 追加も削除もすごく簡単だと思いませんか?実は、私、Ansible 使うようになってから、vSphere Client で操作するのが凄く面倒になりました。人ってホント一度楽すると元には戻れませんよね。♪ 2. ESXi にライセンスを適応 モジュールは vcenter_license です。 Playbook は こちら の中から license.yml を使います。 --- - name: Add or Remove ESXi host to/from vCenterServer hosts: all gather_facts: no tasks: - name: Manage ESXi Lisence vcenter_license: hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: False esxi_hostname: "{{esxi_host}}" license: xxxxx-xxxxx-xxxxx-xxxxx-xxxxx state: present delegate_to: localhost license の xxxx... のところにはご自身の管理する ESXi ホストの License を入れてくださいね。♪ こちらは今まで一連のBlog読んでいただいた方であれば簡単だと思います。 細かい説明は行いません。Survey で与えるのは、License を与える ESXi ホスト名のみです。 実はこの、License 適応、vSphere 環境における『Ansible でこれできますか?』の質問の中で多い物の一つです。 どうでしょう?簡単ですよね。♪ 3. vmnic1 が接続された標準仮想スイッチ (vSwitch1) を追加 モジュールは vmware_vswitch です。 Playbook は こちら の中から manageVSS.yml を使います。 --- - name: Manage VSS hosts: all gather_facts: no tasks: - name: Standard Switch Config vmware_vswitch: esxi_hostname: "{{esxi_host}}" hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: no switch: "{{vss_name}}" nics: "{{vmnic_name}}" mtu: 1500 state: "{{vss_state}}" delegate_to: localhost こちらも・・・、vSphere 環境で標準仮想スイッチ作成したことのある方であれば簡単だと思います。 細かい説明は割愛させていただきますね。 4. vSwitch1 に vMotion 用の vmkernel ポートの追加 モジュールは vmware_vmkernel です。 今回の中で、この vmkernel モジュールが一番わかりにくいと思います。 と言うのも、ポートグループが無いと、vmkernel ポートが作成できないから・・・。 ちなみに、ポートグループを作成するモジュールは vmware_portgroup です。 vSphere Client を使って vmkernel ポートを作成する際は、ウィザードで一発作成可能ですよね・・・、ちょっとこの点はいけてないかなと感じるところです。Ansible 2.4 のころからVMwareのモジュール沢山触ってますが、感覚的に、VMware のモジュールの中ではこのモジュールが一番出来が悪いです。 ま、文句言っても仕方ないので、以下の順に作成します。♪ vmware_portgroup モジュールを使ってポートグループを作成 vmware_vmkernel モジュールで vmkernel ポートを作成 という2段構えになります。 この様に通り組み合わることにより問題なく動作します。 書いてあることは vSphere の管理者であればそれほど難しくないと思います。 Playbook は こちら の中から manageVMK25.yml を使います。 # This Playbook requires Ansible 2.5 or later, would not work on previous versions such as 2.4.x # まずポートグループを作成し、その後、VMkernel ポートの作成を行います。 # 最初のタスクで when の条件文を入れているのは、 vmkernel ポート削除も実行可能な Playbook になっているためです。 # vmkernel 作成の際のみこのポートグループ作成のタスクが実行され、削除の際は実行されません。 --- - name: Manage VMKernel Port hosts: all tasks: - name: Portgroup Create vmware_portgroup: hosts: "{{esxi_host}}" hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" portgroup_name: "{{pg_name}}" state: "{{vmk_state}}" switch_name: "{{vss_name}}" validate_certs: no vlan_id: 0 delegate_to: localhost when: vmk_state == "present" # 作成したポートグループを vMotion 用のVMkernelとして設定する - name: vmkernel Config vmware_vmkernel: esxi_hostname: "{{esxi_host}}" hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: no vswitch_name: "{{vss_name}}" state: "{{vmk_state}}" portgroup_name: "{{pg_name}}" device: vmk1 network: type: 'static' ip_address: "{{ip_address}}" subnet_mask: "{{subnet}}" enable_vmotion: "{{vmotion}}" enable_ft: no enable_mgmt: no enable_vsan: no delegate_to: localhost # こちらは vmkernel ポート削除の際にポートグルーも削除するための追加タスクです。 # vmkernel の削除まで自動化したい際は入れておいてください。追加だけであれば必要ありません。 - name: Portgroup Delete vmware_portgroup: hosts: "{{esxi_host}}" hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" portgroup_name: "{{pg_name}}" state: "{{vmk_state}}" switch_name: "{{vss_name}}" validate_certs: no vlan_id: 0 when: vmk_state == "absent" 5. 共有ストレージとして NFS をマウント モジュールは vmware_host_datastore です。 Playbook は こちら の中から mount-nfs.yml を使います。 NFSマウントだけであれば凄く簡単なのですが、削除も考慮に入れますので、メンテンナンスモードへの移行なども入ってます。 --- - name: Manage Datastore for ESXi hosts: all tasks: # NFS をアンマウントする際に必要なメンテナンスモードへの移行のためのタスクです # NFS 追加だけであれば必要ありません # when で "nfs_state" を "absent" で指定しているのは、アンマウント時のみ実行するためです - name: Manage Maintenance Mode vmware_maintenancemode: hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: False esxi_hostname: "{{esxi_host}}" evacuate: yes state: present delegate_to: localhost when: nfs_state == "absent" # NFS をマウント・アンマウントするタスクです - name: Manage NFS Datastore vmware_host_datastore: esxi_hostname: "{{esxi_host}}" hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" datastore_name: "{{nfs_name}}" datastore_type: nfs nfs_path: "{{nfs_path}}" nfs_server: "{{nfs_server}}" state: "{{nfs_state}}" validate_certs: no delegate_to: localhost # メンテナンスモードを解除するタスク。NFS 削除の際に必要。追加だけなら必要ありません。 - name: Manage Maintenance Mode vmware_maintenancemode: hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: False esxi_hostname: "{{esxi_host}}" evacuate: yes state: absent delegate_to: localhost 6. テスト vMotion の実行 最後に、ESXi がきちんと構成されていることを仮想マシンの vMotion により試します。 モジュールは vmware_vmotion です。 Playbook は こちら の中から vmotion-test.yml を使います。 --- - name: Config check by vMotion hosts: all gather_facts: no tasks: - name: Test vMotion after ESXi Config vmware_vmotion: validate_certs: False hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" vm_name: testvm destination_host: "{{esxi_host}}" delegate_to: localhost さて、これで、ESXi の構築が終了です! Ansible Tower のワークフローテンプレート 上記 Playbook を一つずつ Ansible Tower のジョブテンプレートで実行しても良いのですが、Ansible Tower のワークフローテンプレートを使って一気に実行してみましょう。♪ ワークフローテンプレートの作成方法は以下の通りです。 通常のジョブ添付テートと似てますね。 これを使って以下の様なジョブテンプレートのフローを作ります。 上記 Playbook は作成だけではなく削除にも対応していますので、全ての state 変数を absent に設定すると、ESXi ホストが初期状態に戻り、vCenter Server から削除されます。 ※ License の削除には対応していません。 まとめ さて、Part 3 如何でしたでしょうか。今回は、既存環境への ESXi ホストの追加のシナリオを想定しその方法をご説明しました。お楽しみいただけましたでしょうか? 今回実行した内容は vSphere Client でも出来るのですが、構築した後の vMotion での確認などすべて自動化できるところ、また繰り返し作業が簡単確実に行えるところが Ansible Tower の良いところかなと思います。 次回は、仮想マシンの作成と仮想マシン内のアプリケーションの設定についてご説明します。 Ansible Tower のバイナリーと評価ライセンスは以下から取得可能です。是非使ってみてください!! ・Ansible Tower バイナリーダウンロードは こちら から ・Ansible Towerの評価ライセンスは こちら から  ※Customer Portal のアカウント作成が必要です。 (2020年8月4日追記) 一連のブログが終了しましたので、各回に対するダイレクトのリンクを貼っておきます。 Part1 :Ansible Tower で vSphere の何をどうやって自動化できるのか Part2 :vSphere モジュールを使った Playbook の書き方とAnsible Tower での実行方法について Part4 :info モジュールを使った vSphere 環境の構成の確認 Part5 :仮想マシンの作成とアプリケーションの構築・設定、ダイナミックインベントリの利用、仮想マシン情報(タグ情報)の取得について
Red Hatのソリューションアーキテクトの森です。 ビジネスにおける最適化問題を解決するソリューションとして、Business Optimizerがあることをご存知でしょうか? Business Optimizerは、Red Hat Decision Manager に含まれるAI制約ソルバーです。限られたリソース内で、様々な制約を満たしつつ、最良の結果を得たいというようなケースにおいて、どの組合せが最適かを現実的な時間で探索することができます。 Business Optimizerのユースケースの一例 時短勤務など柔軟な働き方に対応した従業員のシフト作成 スタッフのスキルを考慮した効率的なタスクアサイン 燃料コストを抑えてかつドライバーの作業を平準化した配送ルートの算出 電気代をできるだけ安く抑える機材稼働スケジュール クラウドサーバのコアやメモリを複数プロセスに効率よく割当 収容人数とテーマを考慮したカンファレンスのタイムテーブル作成 以下では、COVID-19に対処する医療関係者の勤務シフトを、Business Optimizer のコミュニティ版である Optaplanner を活用し、効率的にスケジューリングしたケースについてご紹介していきます。 この記事は、OptaPlanner のブログ記事、 AI versus Covid-19: How Java helps nurses and doctors in this fight の翻訳記事です。 はじめに 病院のスケジュールは大変な作業です。医療従事者の幸福と健康を維持するためには、病気の日や休暇の要求を考慮に入れ、またシフト間の十分な休息時間を確保する必要があります。これは、新しい病気への曝露を最小限に抑え、病気に対するさまざまな感受性を持つ看護師を必要とするパンデミックにおいては、尚更そうだと言えます。病棟間の相互汚染を最小限に抑えた上で医療従事者の幸福を最大化する病院の勤務表を、OptaWeb Employee Rosteringを使用して、どのように迅速かつ効率的にスケジュールできるかを見てみましょう。 ドメイン 最初に、モデルのドメインを設定します : Wardsとは、病院のセクションであり、それはCOVID-19病棟と非COVID-19病棟に分かれています。 Employeesとは、病棟に割り当てることができる医師と看護師であり、それぞれがCOVID-19に対して異なる感受性を持っています。(例えば、一部の看護師は高齢であるため、より感受性が高い) Skillsとは、特定の病棟で働くためには、どのようなスキルを持っている必要があるかを説明するものです。 Shiftsとは、指定の時間に指定の病棟で満足される必要があるポジションのことで、その病棟のものに加えて追加のスキルが必要になる場合があります。(例えば、COVID-19病棟では、看護師と医師だけでなく、リポジトリー専門の看護師が必要です) 最後に、Availabilitiesとは、医療従事者がいつ仕事ができないか、仕事をしたいか、または休暇を申請しているかを説明しています。 以下のクラス図は、このドメインを表すJavaクラスを示しています : 制約条件 OptaWeb Employee Rosteringには、ニーズに応じて追加、変更、削除が可能な組み込み制約のセットが付属しています。 いくつかの例を挙げてみましょう : 医療従事者は時間の重複する2つのシフトで作業することはできません。 一人の医療従事者が、同時に2つの場所で勤務をすることについて、想像できるでしょうか? これはハード制約であり、制約を満たすことができない場合は実現が不可能です。 医療従事者は、可能な限り、希望する日に勤務してはなりません。 但し、医療従事者が休日に仕事をしているときでもスケジュールは実行可能で、これはソフト制約です。 医療従事者のCOVID-19に対する感受性が高いほど、COVID-19病棟での勤務は少なくなります。これは別のソフト制約です。 これらとその他の制約は、  Drools制約ファイル にあります。これらは、 OptaPlannerのConstraint Streams API を使用してJavaで実装することもできます。 アプリケーションを使用する OptaWeb Employee Rostering の GitHub リポジトリ をクローンし、COVID-19 ブランチに切り替え、README の指示に従うことで、ローカルに OptaWeb Employee Rostering を構築して実行することができます。 OptaWeb Employee Rostering には、バックエンドとフロントエンドの両方が付属しています。 バンドルされているフロントエンドを使うこともできますし、バックエンドのRESTエンドポイントを使うこともできます。 アプリケーションにはデモ用のデータが含まれており、アプリケーションをすぐに試すことができます。 ここでは、サンプルのテナントの1つを使用して、その勤務表のスケジュールを解決してみましょう。 "Scheduling"のタブに移動し、スコアの右にある(?)のボタンをクリックすると、すべての制約のサマリーが表示されます。 リストの一番下に、"Assign every shift"という制約が1116マッチしていることがわかりますが、これは1116の未割り当てシフトがあることを意味します。 今すぐに、これを修正してみましょう。 制約のサマリーのポップアップを閉じて、"Schedule"ボタンをクリックします。 OptaPlannerは、勤務表のスケジュールの解決を開始します。約30秒後、あなたはこれ以上の未割り当てのシフトがないことがわかります。 つまり、OptaPlannerは、医療従事者が同時に2つのシフトを取得しないことを確認しながら、1116シフトのそれぞれに医療従事者を割り当て、すべての従業員は、各医療従事者が自分のシフトに必要なスキルを持っており、各医療従事者は、シフトの間に十分な休息を持っています。 手作業で1116シフトを割り当てることによって、実現可能なスケジュールを作ることを想像してみてください。 きっと30秒よりも長い時間がかかることでしょう! スケジュール問題を解いている間、OptaPlannerはより良い解答を探し続け、少しずつスコアを上げていきます。 すでに何度かスケジュールが変わっているのを見たことがあるかもしれません。 ひとまず、解くのを中断しておきましょう。 病棟セレクター(ツールバーの左側)をクリックして、病棟 "COVID-19病棟1" に変更します。 シフトの上部に小さなマークがあり、その医療従事者のCOVID-19に対する感受性を表しています。 盾は予防接種を受けた医療従事者、つまりCOVID-19対する免疫を獲得した人々を表しています。 空に近い丸は、その医療従事者がCOVID-19に対する感受性が低いことを意味し、円が塗りつぶされているほどCOVID-19に対する感受性が高いことを意味します。 最後に、赤い丸は、医療従事者がCOVID-19の影響を非常に受けやすいため、COVID-19の病棟に入れてはいけないことを意味します。 COVID-19の病棟に極端なリスクのある従業員がいないことに注目してください。 さらに、COVID-19の病棟のシフトのほとんどは、予防接種を受けているか、リスクの低い医療従事者で構成されています。  ちょっと待ってください、電話がかかってきました。 Beth P. Wattが風邪をひいたため、今週の土曜日に彼女のシフトを作ることができません。 幸いにも、OptaPlannerはこのような突然の変更にも対応することができます。 "Availability" タブに移動します。 医療従事者セレクター(ツールバーの左側)をクリックして、 "Beth P. Watt"と入力します。 週セレクターの時計アイコンをクリックして、現在の週にジャンプします。 カレンダーの「土曜日」ラベルの下の領域をクリックします。 これにより、土曜日の医療従事者 Beth P. Watt の新しい出勤不可制約が作成されます。 ツールバーにスケジュールが実行不可能であることを示すメッセージが表示されます。 これは、Beth P. Wattが土曜日は出勤できませんが、既に土曜日のシフトに割り当てられているためです。 それを修正しましょう。 "Adjustments" タブに移動し、"Reschedule"をクリックします。 OptaPlannerはすぐに別の医療従事者にBeth P. Wattの2つのシフトを割り当てることにより、スケジュールが修正をしたことに気づくはずです。 また、OptaPlannerは、これらの2つのシフトのみを変更したことに注目してください。 OptaPlannerは公開済シフトの変更の数を最小限に抑えるように努めます。 (結局のところ、看護師や医師は、彼らのスケジュールを前提に計画された、彼らの生活を持っているのです) このアプリケーションで実行できる他のいくつかのこと: 医療従事者を指定のシフトに「固定」できます。つまり、OptaPlannerはスケジュール問題の解決時にそのシフトの医療従事者を変更しません。 医療従事者のローテーションを作成して、日常生活の一貫性を高め、新しいシフトの自動プロビジョニングを可能にすることができます。   結論 これまでに見たように、OptaWeb Employee Rosteringは、医療従事者へのCOVID-19の影響を最小限に抑えるだけでなく、彼らの幸福度を最大化するように、簡単に勤務表を作成して最適化することができます。 このアプリケーションのソースコードは、 OptaWeb Employee Rostering GitHubリポジトリ にあります。 OptaPlannerには、新しい制約を追加することに対して、柔軟で簡単な方法があり、COVID-19に付属の新しい制約に対応するためにOptaWeb Employee Rosteringを素早く修正することができたからこそ可能になったものです。 Geoffrey De Smet氏のアプリケーションに関する話 にも、興味深い話題があると思います。 www.optaplanner.org
SAP on RHEL for SAP Solutions でのHigh Availability(高可用性) の構成概要 レッドハット ソリューションアーキテクト石倉です。 今回はSAPシステムのHigh Availability(高可用性)の構成方法について紹介します。 SAPシステムの高可用性は、SAPシステムが提供する、SAP HANA System Replication (HSR)などの機能と、レッドハットが提供する高可用性アドオン機能との組み合わせで実装します。 レッドハットが提供する高可用性アドオンそのものの補足については以下のブログも御覧下さい。 RHEL High Availability Add-On (HAアドオン) についてのFAQ - 赤帽エンジニアブログ まずはSAP HANAの高可用性の実装方法に関して、幾つか代表的なシナリオをご紹介します。 1. Performance Optimized PRIMARYノードと同スペックのコンピュートリソースをSECONDARYノードとして用意し、HSRの機能でデータ同期します。 #SECONDARYノードではSAP HANAがメモリ上にPreloadされた状態です。 PRIMARYノードに障害が発生した際、高可用性アドオンの仕組みでVirtual IPをSECONDARYノードに移動する事で、次の「2. Cost Optimized」モードと比べて、短時間での切り替えを可能にします。 #一方、通常状態では稼働していない、SECONDARYノード分の倍のコンピュートリソースを用意する必要があるという、コスト的なデメリットも存在します。 Performance Optimizedモード 具体的な構成手順に関しては以下のガイドもご参照下さい。 On-Premise: Automated SAP HANA System Replication in Scale-Up in pacemaker cluster - Red Hat Customer Portal AWS: Configure SAP HANA System Replication in Pacemaker on Amazon Web Services - Red Hat Customer Portal Azure: High availability of SAP HANA on Azure VMs on RHEL | Microsoft Docs 2. Cost Optimized SECONDARYノードでは通常時はTESTあるいはQA環境のSAP HANAが動作するイメージになります。 #データ同期はされますが、別用途のSAP HANAがSECONDARYノードで稼働しているので、本番SAP HANAはメモリ上にPreloadされていません。 従って、PRIMARYノードに障害が発生した際のノード切り替え処理内で、別用途のSAP HANAの停止処理や本番SAP HANAの起動処理が必要となり、「1. Performance Optimized」モードと比べて切り替え時間が長くなります。 Cost Optimizedモード 3. HANA 2 Active-Active HANA2.0から、SECONDARYノードをRead Onlyモードで提供する事が可能になりました。 これにより、通常稼働状態におけるデータベースへの参照処理を、PRIMARY/SECONDARYノードで分散するという事も可能になります。 HANA 2 Active-Active 次に、アプリケーションサーバの高可用性に関しては、Standalone Enqueue Server 2(ENSA2)への考慮が必要です。 #これからSAP社ERPソフトウェア(SAP ERP Central Component(ECC))をSAP S/4HANAへ移行する方を想定し、ABAP Platform 1809以降の前提で記載しています。 ENSA2では、Multi-nodeクラスター構成と、従来からあるEnqueue Replication Server(ERS)へフェールオーバーするTwo-nodeクラスター構成が構成可能です。 Multi-nodeクラスター Two-nodeクラスター 具体的な構成手順に関しては以下のガイドもご参照下さい。 On-Premise: Configure SAP S/4HANA ASCS/ERS with Standalone Enqueue Server 2 (ENSA2) in Pacemaker - Red Hat Customer Portal AWS: Configure SAP S/4HANA ASCS/ERS ENSA2 on Amazon Web Services (AWS) - Red Hat Customer Portal Azure: Azure VMs high availability for SAP NW on RHEL | Microsoft Docs Azure VMs high availability for SAP NW on RHEL with Azure NetApp Files | Microsoft Docs 参考資料: Supported HA Scenarios for SAP HANA, SAP S/4HANA, and SAP Netweaver - Red Hat Customer Portal 概要に戻る Red Hat Enterprise Linux for SAP Solutions ー概要ー - 赤帽エンジニアブログ レッドハット ソリューションアーキテクト石倉
Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。 この記事は、Quarkus.ioのブログ記事、 Qute - Why (Not Just) Yet Another Templating Engine の翻訳記事です。 Quteは実験的な機能です。 ソリューションが成熟するまで、プラットフォームの安定性や長期的な存在を保証するものではありません。 導入ガイド とより包括的な リファレンスガイド が利用できます。 まず、「なぜまた別のテンプレート・エンジンが必要なのでしょうか?」という良い質問から始めましょう。Javaにはテンプレート・ライブラリがたくさんあります。Quarkusは「優れたライブラリ群と標準」の上に構築することで知られています。その通りです。一方、Quarkusコミュニティーは強力なイノベーションの触媒でもあります。そこで、Quarkusのニーズを満たすために特別に設計されたテンプレートエンジンであるQute (QUarkus TEmplates)を開始することにしました。私たちは、テンプレート化のような開拓された領域にも新しいアイデアをもたらすことができると信じています。 基本的なアイディア 私たちの主な目標は、自説を曲げない革新的なテンプレート・エンジンを提供することです。しかし、車輪を再発明するつもりはありません。代わりに既存の技術に触発されました。いくつか例を挙げてみましょう。 構文 は主に Handlebars と Dust.js から影響を受けています。 テンプレートの継承 は Facelets と Django から影響を受けています。 Quteは Groovy や Kotlin でおなじみの エルビス演算子 をサポートしています。 新しい機能を使用してデータ・クラスを拡張するために使用できる 拡張メソッド も、現代の言語から影響を受けています。 もしあなたがJSP/JSF/Faceletsの世界にいるのなら、@Named CDI beansがinject名前空間を通してどのテンプレートでも直接参照できることを認識するでしょう。例えば、{inject:foo.price}。詳細は、 テンプレートで直接Beanをインジェクト を参照してください。 しかし、それだけではありません。Quarkusの原則に基づいた新機能を紹介します... 非同期データの解決 - リアクティブへの道 私たちがQuteの設計を始めたとき、ひとつの重要な側面を念頭に置いていました – データ解決APIは非同期にすべきです。これにより、リソースの使用率が向上し、Quarkusリアクティブモデルに適合します。この設計上の決定のもう1つの結果は、非ブロッキングクライアントをテンプレートから直接利用できることです。つまり、さまざまなソースから非同期にデータを読込めます。 非ブロッキングクライアントのデータ読み込み例 {@org.acme.Client client} ① < html > < body > < h1 > Quarkus Open Pull Requests </ h1 > {#for pull in client.pullRequests} ② < p > {pull.title} - {pull.user.login} </ p > {/for} </ body > </ html > ①パラメータ宣言 - client を org.acme.Client に対応付けます。詳細については、次のセクションを参照してください。 org.acme.Client#getPullRequests()は、ノンブロッキングのVert.xクライアントを使ってGitHub APIから直接データを取得しています。データ解決は非同期なので、スレッドはブロックされず、他のタスクを実行し続けられます。 ② CompletionStage<JsonArray> getPullRequests() { return webClient .get( 80 , "api.github.com" , "/repos/quarkusio/quarkus/pulls?state=open&per_page=10" ) .as(BodyCodec.jsonArray()) .send() .thenCompose(r -> { if (r.statusCode() == 200 ) { return CompletableFuture.completedFuture(r.body()); } else { // Log errors etc. } }); } 型安全テンプレート ほとんどのテンプレートエンジンは型安全ではありません。そのため、型のエラーを避けられません。テンプレートの動的性は実用的なものが多いので、ごく自然なことです。一方で、タイプミスや様々なリファクタリングの結果として生じる退屈なエラーからユーザーを守ることはできません。Qute テンプレートは、オプションで型安全にできます。実際にはどんな意味があるのでしょうか?テンプレートは、1つまたは複数のパラメータ宣言を含むかもしれません。パラメータ宣言は、現在の状況で与えられた識別子に具体的な型情報をバインドします。そして、型安全のテンプレートを持つことのメリットは何でしょうか? Quarkusは、パラメータ宣言を参照するすべての式を検証します。無効/不正確な式が見つかった場合、ビルドは失敗します。 開発モードでは、src/main/resources/templates ディレクトリにあるすべてのファイルが変更を監視され、変更はすぐに表示されます。これはまた、型エラーが発生するとアプリケーションが高速に失敗することを意味します。 パラメータ宣言で使用されるすべての型に対して値リゾルバが生成され、そのプロパティにリフレクションなしでアクセスできるようになります。これは、GraalVMネイティブイメージをターゲットにする場合に非常に便利です。 TODOリストには、型安全な式のパフォーマンスの最適化など、いくつかのアイデアがあります。 型安全のテンプレート例 {@org.acme.Foo foo} ① <!DOCTYPE html> < html > < head > < meta charset = "UTF-8" > < title > Qute Hello </ title > </ head > < body > < h1 > {title} </ h1 > ② < p > {foo.message} </ p > ③ {#for foo in baz.foos} < p > Hello {foo.message}! </ p > ④ {/for} </ body > </ html > ①パラメータ宣言 - foo を org.acme.Foo に位置づけます。 ②{title} は検証されていません - パラメータ宣言に一致しません。 ③{foo.message}は検証されます。org.acme.Fooがプロパティメッセージを持つか、一致するテンプレート拡張メソッドが存在する必要があります。 ④{foo.message}は検証されません。なぜならば、ループ部分でfooがオーバーライドされており、型情報が利用できません。 式の中のプロパティだけが現在検証されます。foo.getBar(baz.name)のような "仮想メソッド "は現在無視されます。 ファーストクラスのQuarkus市民 QuteはQuarkusに高度に最適化されているにもかかわらず、コアエンジンはどのような環境にも統合できる独立したライブラリとして開発されています。 Quarkusでは、src/main/resources/templatesディレクトリにあるすべてのテンプレートが検証され、簡単に注入できます。 テンプレート注入例 package org.acme.qute; import io.quarkus.qute.Template; class MyBean { @Inject Template items; @Inject Service service; String renderItems() { return items.data( "items" , service.getItems()).render(); } } ①フィールド名はテンプレートを見つけるために使用されます。この特定のケースでは、コンテナは src/main/resources/templates/items.html というパスを持つテンプレートを見つけようとします。利用可能なテンプレートがない場合、ビルドは失敗します。 ②基本的な流れについては、 Hello Worldの例 を参照してください。 さらに、事前に設定されたエンジンのインスタンスが提供され、インジェクションに利用できます。エンジンはテンプレート管理の中心的なポイントであり、いくつかの低レベルAPIを提供しています。 RESTEasyの統合 RESTEasy と一緒に使用すると、リソースメソッドは TemplateInstance を返すだろう。統合コードは必要なすべてのステップを注意して、レスポンスに出力をレンダリングします。詳細については、「 RESTEasyとの統合 」を参照してください。 JAX-RSリソースの例 package org.acme.qute; ... import io.quarkus.qute.TemplateInstance; import io.quarkus.qute.Template; @Path( "hello" ) public class HelloResource { @Inject Template hello; ① @GET @Produces(MediaType.TEXT_PLAIN) public TemplateInstance get( @QueryParam( "name" ) String name) { // the template looks like: Hello {name}! return hello.data( "name" , name); ②③ } } ①フィールド名はテンプレートを見つけるために使用されます。この特定のケースでは、私たちはテンプレートを templates/hello.txt というパスで注入しています。 ②Template.data() は、実際のレンダリングが開始される前にカスタマイズできる新しいテンプレートインスタンスを返します。このケースでは、私たちはキー名の下に名前の値を入れています。データマップはレンダリング中にアクセスできます。 ③私たちはレンダリングを引き起こさないことに注意してください - これは特別な ContainerResponseFilter の実装によって自動的に行われます。 メーラーの統合 テンプレートは、電子メールメッセージを作成するときに便利かもしれません。Mailer拡張機能はQuteと統合されており、電子メールの便利な送信方法を提供します。特に、メッセージ本文は src/main/resources/templates ディレクトリーの *.html と *.txt を使用して自動的に作成されます。詳細については、 電子メール送信 ガイドを参照してください。 まとめ QuteはQuarkus 1.1 .0で最初に上陸した。それ以来、多くのバグを修正し、いくつかの機能のリクエストを実装しました。APIを安定させ、実装を強固にし、新しい可能性を探るために、私たちのコミュニティに気軽に参加してください!
レッドハットで Red Hat 3scale API Management のテクニカルサポートをしている小西です。 3scaleを気軽に試せるように、ノートPCなどにデプロイする手順をまとめました。API管理製品とはどのようなものか、触れてみてください。 tech.notes.tkonishi.me 3scaleとは 3scale は、Web APIを管理する製品です。Web APIを公開するには、(例えばユーザーの預金額を返すなど)ビジネスの本質的な情報のやりとりに加えて、ユーザーの登録や認証、流量制御、APIドキュメントの公開などさまざまな機能を準備する必要があります。3scaleはそのような機能を提供しています。 詳細については、以下の記事をご参照ください。 thinkit.co.jp rheb.hatenablog.com
はじめまして、Red Hatの西村と申します。4月に入社して以来、初めての投稿です。よろしくお願いいたします。 この記事は Red Hat Developer の Automate workshop setup with Ansible playbooks and CodeReady Workspaces を、許可を受けて翻訳したものです。 ::: James Falkner 2020年7月3日::: Red Hatでは、お客様やパートナー、その他のオープンソース開発者を対象に、多くの対面および仮想ワークショップを行っています。ほとんどの場合、ワークショップは「自身のデバイスを持ち込む」ものなので、さまざまなハードウェアおよびソフトウェアのセットアップ、企業のエンドポイント保護スキーム、システム知識のレベルの違いといった問題に直面します。 ここ数年、私たちは Red Hat CodeReady Workspaces (CRW)を多用してきました。 Eclipse Che をベースにしたCodeReady Workspacesは、ほとんどの開発者に馴染みのあるブラウザで動作するIDEで、プリインストールやシステム内部の知識は必要ありません。ブラウザと頭脳だけあれば、ハンズオンを行うことができます。 また、 Quarkusのワークショップ を自動化するために、Red Hat Ansible用の プレイブックのセット を作成しました。プレイブックは便利ですが、 Kubernetes 上での Quarkus 開発用のCodeReady Workspacesの大規模なデプロイを自動化するのに特に役立ちます。この記事ではプレイブックを紹介し、独自の自動化を行う際にそれらを使用する方法を示します。 大規模な自動化の概要 Quarkusのワークショップを自動化するために、私たちはCodeReady Workspacesとこの記事で紹介するAnsibleプレイブックを使用していますが、多くの企業では大規模な新規開発者のオンボーディングを自動化するためにCodeReady Workspacesを使用しています。その場合、CodeReady Workspacesを使用することで、企業の知的財産(つまりソースコード)を保護し、「自分のマシン上では上手くいく」というバグに対する言い訳を最小限に抑えることができます。 ワークショップを実施しているかオンボーディングプロセスを実施しているかに関わらず、可能な限りスムーズに行うためには、かなりのセットアップが必要になります。ワークショップの場合、 Red Hat OpenShift をデプロイし、予想されるユーザー数に合わせてスケールし、すべてのユーザーにCodeReady Workspacesをインストールして設定する必要があります。また、最高の体験を得るためには、各ワークスペースを「事前ウォームアップ」して、イントロのスライドが終わる頃にはすでに実行されているようにするべきです。また、ワークショップの一部として使用する オペレーター をインストールする必要もあります。 次のセクションでは、それぞれの手順と、それらを自動化するために作成したAnsibleプレイブックについて説明します。セットアップのほとんどは、会社のポリシーとITポリシーの両方に準拠し、さらに開発者のニーズにも対応したカスタムスタックの作成に応用できます。 OpenShiftのインストール OpenShiftはハイブリッドクラウドインフラストラクチャに使用されるため、大規模なデプロイでは、zipファイルをダウンロードして解凍し、デスクトップ上で実行するという古典的な意味での「インストール」は行いません。 CodeReady Containers を使用してそのようなタイプのインストールを行うこともできますが、ワークショップで何十人あるいは何百人もの開発者をサポートしている場合、ローカルで実行することは選択肢ではありません。 OpenShiftは、複数の異なるパブリッククラウドとプライベートクラウド上で、 簡単にプロビジョニング できます。 OpenShiftのデプロイ はこの記事の対象外ですが、受講者5人ごとに追加のOpenShiftワーカーノードをデプロイし、各ノードに64GiBのメモリを割り当てるのが有用であるとわかりました。このセットアップにより、すべての受講者が快適なワークショップ体験を受けることができます。 Quarkusワークショップでは、受講者にQuarkusのネイティブビルドを実施してもらいますが、これには余分なメモリを必要です。また、各受講者は独自のKafkaクラスタや他のいくつかのアイテムをデプロイします。そのためワークショップを一度実行して、すべてを実行中にしておき、その上ですべてを足し合わせて、ユーザーごとに必要なメモリの量を決定します。CodeReady Workspacesでは、「ワークスペース単位」の永続ボリューム要求(PVC)戦略を使用することに注意してください。各ワークスペース(つまり各ユーザー)が、独自のストレージを取得します。この戦略に従うことを選択した場合、十分なストレージの容量を確保する必要があります。CPUは多ければ多いほど良いでしょう。 OpenShiftをインストールしたら、ユーザーを作成する必要があります。基本的なLinuxシェルスクリプトや oc コマンドを使用して、デフォルトのOpenShiftの認証メカニズムを上書きし、ユーザー(adminユーザーを含む)を包含する htpasswd ファイルを供給することができます。このBashスクリプトには、 htpasswd ユーティリティ と yq ユーティリティ (バージョン3以上)も必要です。 #!/bin/bash NUMUSERS=20 TMPHTPASS=$(mktemp) for i in {1..$NUMUSERS} ; do htpasswd -b ${TMPHTPASS} "user$i" 'somepassword' done htpasswd -b ${TMPHTPASS} admin 'adminpassword' $ oc -n openshift-config delete secret workshop-user-secret $ oc -n openshift-config create secret generic workshop-user-secret --from-file=htpasswd=${TMPHTPASS} $ oc -n openshift-config get oauth cluster -o yaml | \ yq d - spec.identityProviders | \ yq w - -s htpass-template.yaml | \ oc apply -f - sleep 20 # don't shoot the messenger, Operators are "eventually consistent" $ oc adm policy add-cluster-role-to-user cluster-admin admin yq (バージョン3)で使用する htpass-template.yaml テンプレートは以下のようになります。 spec.identityProviders[+]: name: htpassidp type: HTPasswd mappingMethod: claim htpasswd: fileData: name: workshop-user-secret このテンプレートでスクリプトを実行すると、新しいIDプロバイダがOpenShiftの認証フローにマージされ、ユーザーがログインできるようになります。Ansibleを使ってこの認証プロセスを設定することもできますが、まだそれを実施する時間を見つけられていません。 CodeReady Workspacesのデプロイ 今回のインストールには CodeReady Workspaces Operator を使用します。インストールを自動化するために、Ansibleプレイブック内でAnsibleを少し使います。名前空間がまだ存在しない場合は、OperatorGroupとSubscriptionに加えて、 k8sモジュール を使用して名前空間を作成します。 # create codeready namespace - name : create codeready namespace k8s : state : present kind : Project api_version : project.openshift.io/v1 definition : metadata : name : "codeready" annotations : openshift.io/description : "" openshift.io/display-name : "CodeReady Project" # deploy codeready operator - name : Create operator subscription for CodeReady k8s : state : present merge_type : - strategic-merge - merge definition : "{{ lookup('file', item ) | from_yaml }}" loop : - ./files/codeready_operatorgroup.yaml - ./files/codeready_subscription.yaml # wait for CRD to be a thing - name : Wait for CodeReady CRD to be ready k8s_facts : api_version : apiextensions.k8s.io/v1beta1 kind : CustomResourceDefinition name : checlusters.org.eclipse.che register : r_codeready_crd retries : 200 delay : 10 until : r_codeready_crd.resources | list | length == 1 # deploy codeready CR - name : Create CR for CodeReady k8s : state : present merge_type : - strategic-merge - merge definition : "{{ lookup('file', item ) | from_yaml }}" loop : - ./files/codeready_cr.yaml # wait for CodeReady to be up - name : wait for CRW to be running uri : url : https://codeready-codeready.{{ route_subdomain }}/dashboard/ validate_certs : false register : result until : result.status == 200 retries : "120" delay : "15" カスタムリソース定義(CRD)を待っているコードは重要です。CRDがシステムに知られる前にCRDに基づいてカスタムリソース(CR)を作成しようとすると、失敗します。さらに、オペレーターがインストールされると、その知識を得るまでに時間がかかります。 最後に、 uriモジュール を使用して、CodeReady Workspaces自体を待ちます。次に、追加の構成を行うためです。 OperatorGroup OperatorGroupは、 codeready_operatorgroup.yaml に定義されています。非常にシンプルですが、オペレーターが操作できる必要があります。 apiVersion : operators.coreos.com/v1 kind : OperatorGroup metadata : generateName : codeready- annotations : olm.providedAPIs : CheCluster.v1.org.eclipse.che name : codeready-operator-group namespace : codeready spec : targetNamespaces : - codeready Subscription codeready_subscription.yaml に定義されたSubscriptionも、基本的なものです。 apiVersion : operators.coreos.com/v1alpha1 kind : Subscription metadata : name : codeready-workspaces namespace : codeready spec : channel : latest installPlanApproval : Automatic name : codeready-workspaces source : redhat-operators sourceNamespace : openshift-marketplace CheCluster object OperatorがCRDをKubernetesに登録したら、最後に codeready_cr.yaml に定義された CheCluster オブジェクトを作成します。 CheCluster を作成することで、インストールが開始されます。 apiVersion : org.eclipse.che/v1 kind : CheCluster metadata : name : codeready-workspaces namespace : codeready spec : server : cheImageTag : '' cheFlavor : codeready devfileRegistryImage : '' pluginRegistryImage : '' tlsSupport : true selfSignedCert : false serverMemoryRequest : '2Gi' serverMemoryLimit : '6Gi' customCheProperties : CHE_LIMITS_WORKSPACE_IDLE_TIMEOUT : "0" database : externalDb : false chePostgresHostName : '' chePostgresPort : '' chePostgresUser : '' chePostgresPassword : '' chePostgresDb : '' auth : openShiftoAuth : false identityProviderImage : '' externalIdentityProvider : false identityProviderURL : '' identityProviderRealm : '' identityProviderClientId : '' storage : pvcStrategy : per-workspace pvcClaimSize : 1Gi preCreateSubPaths : true メモリ制限に注意してください。これは、私たちのCodeReady Workspacesのカスタムスタックのコンテナ用にチューニングされています。また、ここでは CHE_LIMITS_WORKSPACE_IDLE_TIMEOUT も設定しています。しばらく席を離れてラボがタイムアウトし、戻ってきたときには更新(または再ログイン)が必要なのは、かなり面倒です。もちろんこれらの設定は、どちらも本番環境では使用すべきではありません。 Keycloakのチューニング OpenShiftの組み込みの認証メカニズムを使用して、ワークスペースを事前に作成し、起動しておくことは できません 。そのためには、各ユーザーが OpenShift にログインし、ユーザーのアカウント詳細を Red Hat Single Sign-On にリンクする必要があります。(ちなみに、CheClusterリソースで openShiftoAuth: false となっているのはこのためです。) この問題の回避策は、以下のようにCodeReady Workspacesで再びAnsibleを使用して、同じユーザーセットを作成することです。 - name : create codeready users include_tasks : add_che_user.yaml vars : user : "{{ item }}" with_list : "{{ users }}" この例では、 users はAnsibleのユーザ名の配列にすぎません(例えば、 [user1, user2, ....] )。ループ処理をして、 add_che_user.yaml にユーザーを追加します。以下のように、CodeReady Workspaces REST APIを使用してSSO管理者ユーザーの資格情報を取得し、ユーザーを作成します。 - name : Get codeready SSO admin token uri : url : https://keycloak-codeready.{{ route_subdomain }}/auth/realms/master/protocol/openid-connect/token validate_certs : false method : POST body : username : "{{ codeready_sso_admin_username }}" password : "{{ codeready_sso_admin_password }}" grant_type : "password" client_id : "admin-cli" body_format : form-urlencoded status_code : 200 , 201 , 204 register : codeready_sso_admin_token - name : Add user {{ user }} to Che uri : url : https://keycloak-codeready.{{ route_subdomain }}/auth/admin/realms/codeready/users validate_certs : false method : POST headers : Content-Type : application/json Authorization : "Bearer {{ codeready_sso_admin_token.json.access_token }}" body : username : "{{ user }}" enabled : true emailVerified : true firstName : "{{ user }}" lastName : Developer email : "{{ user }}@no-reply.com" credentials : - type : password value : "{{ workshop_che_user_password }}" temporary : false body_format : json status_code : 201 , 409 このプレイブックには、いくつかの変数があります。 route_subdomain は、クラスターのデフォルトのOpenShiftサブドメインです(クラスターを検出するには、 oc whoami --show-cluster を使います)。 workshop_che_user_password は、ユーザーが希望するパスワードです。 codeready_sso_admin_username/codeready_sso_admin_password は、CodeReady Workspacesが使用するKeycloakインスタンスの管理者ユーザー名とパスワードです。 デプロイされたKeycloakの環境変数から、Keycloak管理者ユーザー名とパスワードをプログラムで検出するには、Ansibleのコードと k8s_factsモジュール をもう少し使います。 - name : Get codeready keycloak deployment k8s_facts : kind : Deployment namespace : codeready name : keycloak register : r_keycloak_deployment - name : set codeready username fact set_fact : codeready_sso_admin_username : "{{ r_keycloak_deployment.resources[0].spec.template.spec.containers[0].env | selectattr('name','equalto','SSO_ADMIN_USERNAME') |map (attribute='value') | list | first }}" - name : set codeready password fact set_fact : codeready_sso_admin_password : "{{ r_keycloak_deployment.resources[0].spec.template.spec.containers[0].env | selectattr('name','equalto','SSO_ADMIN_PASSWORD') |map (attribute='value') | list | first }}" 次に、 SSOトークンの有効期限とSSOセッションのタイムアウト時間 を増やします(これにより、ワークショップ中のイライラするログアウトを避けることができます)。 - name : Increase codeready access token lifespans uri : url : https://keycloak-codeready.{{ route_subdomain }}/auth/admin/realms/codeready validate_certs : false method : PUT headers : Content-Type : application/json Authorization : "Bearer {{ codeready_sso_admin_token.json.access_token }}" body : accessTokenLifespan : 28800 accessTokenLifespanForImplicitFlow : 28800 actionTokenGeneratedByUserLifespan : 28800 ssoSessionIdleTimeout : 28800 ssoSessionMaxLifespan : 28800 body_format : json status_code : 204 ユーザーのワークスペースの事前ウォームアップ 最後に、CRWのワークスペースを事前に作成し、事前ウォームアップしておく準備が整いました。 - name : Pre-create and warm user workspaces include_tasks : create_che_workspace.yaml vars : user : "{{ item }}" with_list : "{{ users }}" ユーザーのワークスペースを作成するために行ったのと同じようなループ処理を実行します。今回は、CodeReady Workspaces REST APIを使用した create_che_workspace.yaml を呼び出します。 - name : "Get Che {{ user }} token" uri : url : https://keycloak-codeready.{{ route_subdomain }}/auth/realms/codeready/protocol/openid-connect/token validate_certs : false method : POST body : username : "{{ user }}" password : "{{ workshop_che_user_password }}" grant_type : "password" client_id : "admin-cli" body_format : form-urlencoded status_code : 200 register : user_token - name : Create workspace for {{ user }} from devfile uri : url : "https://codeready-codeready.{{ route_subdomain }}/api/workspace/devfile?start-after-create=true&namespace={{ user }}" validate_certs : false method : POST headers : Content-Type : application/json Authorization : "Bearer {{ user_token.json.access_token }}" body : "{{ lookup('template', './templates/devfile.json.j2') }}" body_format : json status_code : 201 , 409 register : workspace_def devfileについて devfile.json.j2 は、 CodeReady devfile の Ansible Jinja2 テンプレート です。 今回のdevfileの例はこちら で参照できます。興味深いのは、以下の部分です。 " components ": [ { " id ": " redhat/quarkus-java11/latest ", " type ": " chePlugin " } , devfileには、ワークスペース用の Quarkusプラグイン が含まれていることに注意してください。これにより、オートコンプリートやその他のヒントなどのIDE機能が提供されます。 " image ": " image-registry.openshift-image-registry.svc:5000/openshift/quarkus-stack:2.1 ", ここでは、事前に生成され、以下の定義を使ってOpenShiftにImageStreamとしてデプロイされたCheのスタックを参照します。 apiVersion : image.openshift.io/v1 kind : ImageStream metadata : name : quarkus-stack namespace : openshift spec : tags : - annotations : description : Quarkus stack for Java and CodeReady Workspaces iconClass : icon-java supports : java tags : builder,java version : "2.1" from : kind : DockerImage name : quay.io/openshiftlabs/quarkus-workshop-stack:2.1 name : "2.1" スタックは、ユーティリティ( oc 、 kn 、 tkn 、 GraalVM )を含む Dockerfileを使用して 構築しました。ユーザーがワークショップを開始するたびにインターネットからダウンロードしないように、イメージにMaven .m2 リポジトリを事前入力するいくつかのテストビルドを実行します。このイメージをOpenShiftに事前にプルすることで、ワークスペースの起動時間を大幅に短縮します。また、まだ使ったことのない Image Puller もあります。このロジックの一部を解消するのに、期待できそうです。 結論 要約すると、CodeReady Workspacesのデプロイを大規模に自動化することで、受講者のワークショップ体験を大幅に改善することができます。できるだけ多くのことを前もって行うことで、受講者はインストールやウォームアップなどを待たずに学習に取り掛かることができます。 この記事では、ワークショップの自動化とユーザーエクスペリエンスの向上のために作成した Ansibleプレイブックの一部を紹介しました。追加オプションとして以下のようなものがあります。 他のオペレーター(Strimzi、Jaegerなど)をデプロイする。 ワークショップ用のカスタムKeycloakレルムを作成する。 ワークショップの他のコンポーネントが正しくデプロイされているかどうかを確認する。 Deploy Quarkus Workshop into an OpenShift 4 Cluster playbook をご覧ください。他にも利用できるものがあるかもしれません!また、新規開発者のオンボーディングの例に興味がある方は、 CodeReady Workspaces Delivers Kubernetes-Native IDE の記事を参照してください。
こんにちは小杉です。 Red Hat AMQ Streams 1.5.0 がリリースされました。様々な機能が拡張されましたが、 その中でも今回は Tech Preview になった Cruise Control をご紹介します。 LinkedIn では1800以上の Kafka ブローカーが起動し、毎日1台は故障するとのことです。 (この数は 2017 年当時の数で現在のブローカー数はもっと増えているようです) また、負荷を分散するために Kafka ブローカーを追加することも行われます。 そうするとリーダーレプリカが特定のブローカーに偏るという現象が発生します。 リーダーレプリカを分散させるために手動でリバランスを実施する必要がありますが、LinkedIn によって開発された Cruise Control を使用すると、パーティションの CPU 使用率やネットワーク使用率、ディスク使用率、ラック配置などを鑑みてパーティションを再配置するよう提案してくれるようになります。 Kafka の用語がわからない人向けに Apache Kafka の全体像を簡単に紹介し、その上で Cruise Control を試してみました。 medium.com Tech Preview から正式リリースになるのが待ち遠しい機能となっています。
Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。 この記事は、Quarkus.io のブログ記事、 Quarkus 1.5 released - fast-jar packaging format, Picocli, gRPC, GraphQL and more の翻訳記事です。 Quarkus 1.5.0.Final 以下の様なあらゆる種類の付加機能を備えてリリースしました。 新しいfast-jarパッケージ形式 Picocli拡張機能 gRPC拡張機能 Eclipse MicroProfile GraphQL拡張機能 Amazonサービスの拡張機能 Panache拡張機能によるHibernate ORM REST Data Spring Cache互換 また、多くのバグ修正や小さな改善も随所に含まれます。 移行ガイド 既存のアプリケーションを移行したいとお考えですか?こちらに 1.5 の移行ガイドがあります 。 何が新しいの? Fast-jarパッケージ形式 fast-jarパッケージ形式は、デフォルトのjarパッケージ形式の代替として導入されました。この新しい形式の主な目的は、起動時間を短縮することです。 将来のバージョンでは、このフォーマットがデフォルトとして採用される可能性が非常に高いので、実際のアプリケーションでのフィードバックは非常に歓迎されます。 application.propertiesに次の行を追加すると、試せます。 quarkus.package.type=fast-jar ビルド時に-Dquarkus.package.type=fast-jarを渡すことも試せます。 新しい拡張機能 Picocli 1.4ではコマンドモードが導入され、高機能なコマンドラインアプリケーションの作成を簡単にするためにPicocli拡張機能が使用されています。 もっと知りたいですか? Picocliガイド を読んでください。 gRPC QuarkusでのgRPCサポートは人気のある要求でした。クライアントとサーバを書けるgRPC拡張機能のセットがあります。 gRPC入門 gRPCサービスの実装 gRPCサービスの使用 MicroProfile GraphQL 人気のあるリクエストと言えば、Quarkus 1.5はEclipse MicroProfile GraphQLを実装したGraphQL拡張機能を導入しました。 GraphQLサービスの作成方法と利用方法については、 MicroProfile GraphQLガイド で詳しく説明しています。 Amazon Services Amazon DynamoDBは以前からサポートしていましたが、より多くのAmazonサービスにサポートを広げました。 Amazon DynamoDB - NoSQL データベース Amazon KMS - 鍵管理サービス Amazon S3 - オブジェクトストレージサービス Amazon SES - E-mail サービス Amazon SNS - 通知サービス Amazon SQS - キューサービス Hibernate ORM REST Data with Panache Panache拡張機能の目的は、一連の機能をシンプルにして、開発者の喜びを取り戻すことです。 Quarkus 1.5では、JAX-RSとHibernate ORMをベースにしたCRUD REST APIの作成を簡素化するHibernate ORM REST Data with Panacheを導入しました。 この新しい専用ガイド でこの機能を確認してください。 Spring Cache のアノテーション Spring互換にはもうひとつ、 Spring Cache拡張機能のサポートという特徴があります。 すべての機能をサポートしているわけではありませんが、Caffeineをベースにした既存のCache拡張によってサポートされているほとんどの機能を使用できます。 Blaze Persistence 「Blaze Persistence」 の拡張機能がQuarkusプラットフォームで利用できるようになりました。 ガイドがもうすぐ公開予定です。 既存の拡張機能の重要な調整 Hibernate ORM Hibernate ORM拡張機能がマルチテナンシーをサポートしました。詳細については、 Hibernate ORMガイド を参照してください。 Agroal Agroal拡張機能には、pgagroalやPgpoolなどの外部プーリングソリューションのサポートが含まれます。 完全な変更ログ 1.5.0.CR1 と 1.5.0.Final の完全な変更ログはGitHubで入手できます。 ADOPTERS.md Quarkusの使用に関する情報を共有するために、リポジトリのルートに ADOPTERS.mdファイル を追加しました。 Quarkusを使用していて、私たちのブログでインタビューを受けたい場合、または単にこのファイルに追加したい場合は、私たちにご連絡ください。 貢献者 Quarkusには現在 290人の貢献者 がいます。皆様、本当にありがとうございました。 特に1.5リリースについてはみなさんのおかげです。 Aaron Rogers, Adrian Fiedler, Akito Kidani, Alex Soto, Alexey Loubyansky, Andrea Cosentino, Anh Le (Andy), Aurea Munoz, Luis Barreiro, Bill Burke, bobbyphilip, Bogdan Sukonnov, Cem Nura, Chris Laprun, Christoffer Rumohr, Christopher Chianelli, Claus Ibsen, Clement Escoffier, Daniel Petisme, David M. Lloyd, Dennis Baerten, Diogo Carleto, Diogo Quintela, Emmanuel Bernard, Erin Schnabel, Falko Modler, Ferran Puig, Galder Zamarreño, Geoffrey De Smet, George Gastaldi, George Sapountzis, Georgios Andrianakis, Greg. A, Guillaume Le Floch, Guillaume Nodet, Guillaume Smet, Gwenneg Lepage, Gytis Trikleris, Harald Reinmueller, Harsha R, Ioannis Canellos, Irena Kezic, Jacob Middag, Jaikiran Pai, Jan Martiska, Jan Martiška, Jason T. Greene, John O’Hara, Julian Cui, Justin Lee, Ken Finnigan, Ladislav Thon, Lovekesh Garg, Loïc Mathieu, Luka Lodrant, Manyanda Chitimbo, Marat Gubaidullin, Marcin Czeczko, Mario Fusco, Martin Kouba, Martin Panzer, Matthias Andreas Benkard, Matthias Harter, Mattia, Max Rydahl Andersen, Michael Schnell, Michal Szynkiewicz, Michał Górniewski, mklueh90, Oscar, oscarfh, Paul K Moore, Pavel.Vervenko, Pedro Igor, penehyba, Peter Palaga, Phillip Kruger, Robert Marcano, Romain Quinio, Rostislav Svoboda, Ruben R, Sanne Grinovero, schulzp, Sergey Beryozkin, ShubhamRwt, Stef Klaassen, Stephane Epardaud, Stuart Douglas, Stéphane Épardaud, Survi, Thomas Segismont, tibordigana, Timothy Power, Vincent Sevel and Yoann Rodière 参加しよう 私たちはあなたのフィードバックをとても大切にしていますので、バグを報告し、改善を依頼してください...一緒に何か素晴らしいものを作りましょう! Quarkusのユーザーや好奇心の強い人は、恥ずかしがらずに歓迎コミュニティに参加してください。 GitHub にフィードバックを提供する; コードを作成して PRを行う ; Zulip や メーリングリスト で議論する; なにか質問があれば Stack Overflow で投稿してください。
みなさんこんにちは!Red Hatのソリューションアーキテクトの手塚です。 今回はAPIs as a Productという考え方と、レッドハットが提供するAPI管理製品である3scale API Mangementでの実現方式の概要についてご紹介します。 ビジネスとしてのAPI APIはご存知の通り、Application Programming Interfaceの頭文字であり、プログラム間のインタフェースを指す言葉です。 そのためOSのシステムコールもJavaのライブラリを呼び出すのもAPIですが、昨今のDXやAPIエコシステムの文脈で語られる場合には、APIはほぼWeb APIを指すため、この記事ではAPI = Web APIとして記載します。 様々なビジネスのデジタル化や、それに伴う既存の仕組みに囚われない人たちであるところのディスラプターの台頭によって、ビジネススピードの変遷が激化している今、いち早く企業の価値を顕在化するにはどうしたら良いのだろう?ということを実現するための取り組みとして、APIを活用する企業が増えています。 つまり既存/新規のアプリケーションを、APIという手足によって業種や会社を超えて連携し新たな価値を生み出したり、はたまた開発者へAPIという形で既存の機能をいつでも利用できるようにして開発効率を上げたり...etcということを行うことで、他社より少しでも早く、自社のビジネス価値を市場へを届ける、ということを行っているわけです。 したがって APIは現在、単なるインタフェースを超えた、ビジネス価値を提供するアプリケーションとして捉えることができる と言えるでしょう。 APIs as a Productという考え方 上記のように、APIをビジネスアプリケーション、つまり"プロダクト"として管理するにはどうしたら良いのでしょうか? 企業が公開しているプロダクトですので、市場にあるソフトウェアプロダクトと同様に、これらAPIがどんな顧客(=APIクライアント)に、どのように、どれくらい利用されるのかを管理し、日々顧客からのフィードバックを受けバージョンアップしていく必要があります(ちょうどソフトウェアプロダクトがアップデートされていくように)。 ※ちなみに、社外公開のみならず、社内にのみ公開するというユースケースも非常に多くあります。 また、当然ながら顧客ごとに利用したいAPIやその利用用途は異なるため、顧客ごとにAPIの組み合わせや、それらのAPIを利用させる際のポリシーを定義してあげてはじめて、プロダクトとして成立することも考慮する必要があります(ちょうど使いたい機能群がひとつのソフトウェアプロダクトにまとまっているように)。 レッドハットでは、Red Hat 3scale API Management というAPI管理製品を提供しており、このAPIs as a Prodcutという考え方のもと、APIを管理、メンテナンスできるようになっています。 Red Hat 3scale API Management におけるAPIプロダクト access.redhat.com 3scaleを利用することで、上記のように企業が提供するAPI(ここではバックエンドと呼びます)を顧客に応じて複数パッケージし、これらに適切な利用ポリシーを付与したものをプロダクトとして管理することが可能となります。 右側の、ぶどうの粒のようにたくさんあるのが企業内のAPI、つまりバックエンドです。 これをこのまま左側のAPIクライアント(顧客)に公開するのでは、APIクライアントから見ると非常に使いにくいはずです。 まずどのAPIがどこにあってどんな仕様なのかが不明でしょうし、もしかすると必要な認証方式もバラバラである可能性があります。 またAPIを公開する企業としても、バックエンドを不正なAPIクライアントから保護したり、またどのAPIクライアントがいつどれだけ、どのバックエンドにアクセスしたかを知ることは容易ではありません。 そこで3scaleは両者の間をプロキシし、任意のバックエンド群をプロダクトとして公開することでこれらの課題を解決します。 まず、管理単位であるプロダクトを登録し、そこに任意のバックエンドを登録します。これは1つでも良いですし複数でも構いません。 そしてこのプロダクトに対し、様々な設定やポリシーを定義、または必要になった際に更新していきます。 例えばこのプロダクトを利用可能なAPIクライアントの登録や、必要な認証方式、アプリケーションプランと呼ばれる利用可能コール数の設定や、ルーティングの設定、プロダクトがコールされた際に実行される各種ポリシー(ソースIPアドレスをチェックする、流量制御を行う、JWTを検証する...etc)の設定などです。 また公開されているAPI仕様をOpenAPI Specとしてデベロッパーポータルへ登録しておくことにより、APIクライアントはポータルを確認することでいつでもプロダクトの仕様を確認することが可能になりますし、管理者ポータルからは各プロダクトがどのAPIクライアントからどれだけ利用されているか、という情報を一元管理することが可能です。 上記により、顧客からはバックエンド群がどのようになっているかを意識することなく、プロダクトとして公開されている仕様から各種バックエンドへアクセスが可能になりますし、API公開者はプロダクトに定義した内容に沿って、バックエンドを保護し、利用実態を分析することが可能になります。 つまり公開するAPIをビジネスプロダクトとして扱える、ということになるのです。 おわりに 冒頭にも述べたように、DXが進みAPIエコシステムが進んでいくと、企業にとって自らのAPIをプロダクトとして管理することが非常に重要になってきます。 もしこれらの課題でお悩みの方がいらっしゃいましたら、どうぞお気軽にレッドハットまでご相談ください! それでは素敵なAPIライフを♪
こんにちは、レッドハットでストレージを中心にクラウドインフラを生業にしている宇都宮です。 Ceph は各デバイスをきっちり均等に使おうとはせず usage にばらつきが出るもの (確率分布に従う実装) なので、ドンブリな容量管理をしているように見えますが、ちゃんと根拠があって容量計算をしています。 そんな感じの小ネタを書きましたので、こちらでお知らせします。へぇと言って貰えると嬉しいです。 ututaq.hatenablog.com
OpenStackを担当しているソリューションアーキテクトの輿水です。 4/28(火)〜4/30(木)に開催されたRed Hat Summit 2020 のセッション「The next evolution of Red Hat OpenStack Platform」の内容を元に最新版のRed Hat OpenStack Platform(以降RHOSPとします)について記載します。 OpenShift 4.3 on Red Hat OpenStack Platform 16 Red Hat OpenStack Platform上でRed Hat OpenShift Container Platform(以下OCP)を稼働させる試みは以前のリリースから行われております。「OpenShift on OpenStack」ではインフラレイヤーをRHOSPが提供し、コンテナプラットフォームレイヤーをOCPが提供します。RHOSPはOCPに必要なコンピュート、ストレージ、ネットワークおよびセルフロードバランサーや暗号化などの仕組みを提供します。OCPはRHOSPによってプロビジョニングされたインフラ上でコンテナ化されたアプリケーションを実行します。 OpenShift on OpenStack Key Integration Points RHOSPとOCPはライフサイクルが異っており、サポート可能なRHOSPとOCPの組み合わせは決まっています。 OCPをOpenStack上に展開する方法として、すべてのスタックを自動でインストールするIPI(installer-provisioned infrastructure)とユーザが事前に準備したインフラ上にインストストールするUPI(user-provisioned infrastructure)があります。OCP4.2と4.3では、IPIのみをサポートし、UPIはOCP4.4以降でサポートされる予定です。RHOSP 16はOCP 4.3に対応しており、今後 4.4以降への対応も予定されています。 Full stack automation installation on OSP (IPI) OCPはRHOSP以外の環境、AWSやAzure、Google Cloudなど様々な環境でも稼働させることが可能で、このブログでも多く解説されていますので、そちらをご参照ください。 トラアイル環境: http://try.openshift.com 以上、「The next evolution of Red Hat OpenStack Platform」の内容の一部とRHOSP 16の紹介となります。 Red Hat Summitハイライトセミナーが7月10日(金)オンラインで開催されます。現在登録受付中ですので興味のある方はご登録ください。
OpenStackを担当しているソリューションアーキテクトの輿水です。 4/28(火)〜4/30(木)に開催されたRed Hat Summit 2020 のセッション「The next evolution of Red Hat OpenStack Platform」の内容を元に最新版のRed Hat OpenStack Platform(以降RHOSPとします)について記載します。 Service Telemetry Framework (STF)  STFとはサービス保証のために、低遅延・高スケールでメトリクスやイベントをハンドリングし、ポリシーやプロセスを適用することができるプラットフォームです。RHOSP 13からテクノロジープレビューとして実装されています。 Service Telemerty Framework Red Hat Service Telemerty Frameworkの利点として考えられるのは次の項目です。 Capability at scale 必要に応じて1秒未満の間隔でメトリクスやイベントを収集 複数のソース(クラウド等)からメトリクスやイベントを集めて集中管理 Better data gathering 複数のソースからほぼリアルタイムでデータを収集 kernel/cpu/nfvなど様々なレベルでインフラをモニタリング NFVアプリケーションのための多彩なライブラリー(collectd plugin) Enhansed access 複数のレベル(センサー、メッセージバス、管理クラスタ等)のAPIを用いて、メトリクスやイベントにアクセス可能で、柔軟性が高い 精巧なアラートの仕組みを提供 Flexible monitoring platform 複数のクラウドのための、モニタリングクラスタの高可用性 将来的に発展するクラウドプラットフォームへの取り組み STFでアラート対応を行っているデモがありますので、御覧ください。(外部リンク) vimeo.com アーキテクチャ概要 STFはRed Hat Openshift Container Platform上で稼働するアプリケーションであり、以下のコンポーネントを利用します。OpenShiftとAMQはOpenStackサブスクリプションの一部として提供されます。OpenStack Directorによりインストールされ、OpenShift で管理されます。 Service Telemetry Framework architecture overview collected : メトリクス収集 Prometheus:時系列データのストレージ ElasticSearch:イベントデータのストレージ AMQP(AMQ Interconnect API)こ :Prometheusにデータを送るためのメッセージバス Smart gateway:AMQPからメトリクスとイベントをピックアップし、ElasticSearchにイベント、Prometheusにメトリクスを引き渡す STFを利用することで、複数のOpenStackクラウドのイベントやメトリクスの収集と管理を集中して行えます。別の記事で述べたDistributed Compute Nodes (DCN)の環境についても、各DCNのエッジサイトのOpenStack Computeの情報をプライマリーサイトのControllerに集めてSTFで管理することが可能になります。 Red Hat Service Telemerty Framework - multi-cloud Red Hat Service Telemerty Framework FAQ Red Hat Service Telemerty Frameworkはいつから利用可能ですか? RHOSP 13からテクノロジープレビューとして利用可能です。RHOSP 16においても6月末時点でテクノロジープレビューですが、近日GA予定です。 Red Hat OpenShift PlatformとAMQ Interconnectサブスクリプションを購入する必要がありますか? いいえ。3ノードのRed Hat OpenShift Platform とAMQ Interconnectは標準OpenStackサブスクリプションの一部であるため、必要ありません。新しいノードを追加するときは無料でリクエストできます。ただしSTFでの利用に限ります。 既存のRed Hat OpenShift Platformがある場合、STFに利用できますか? はい。既存のOCPクラスターに制限がない限り、STFに使用できます 商用環境でSTFを利用するためには、いくつの物理ノードが必要ですか? OSPクラウドが実行されているノード以外に、OpenShiftをデプロイしてSTFをインストールするための少なくとも3台の物理ノードが必要です GrafanaはRed Hat Service Telemerty Frameworkに含まれていますか? いいえ。現在はRed Hat Service Telemerty Frameworkには含まれてはいませんが、Grafanaにインポートして必要に応じてカスタマイズでできるダッシュボードをいくつか提供しています、 ElasticSearchはRed Hat Service Telemerty Frameworkに含まれていますか? いいえ。STF operatorはElasticSearchのoperetorは含まれていません。しかし、多くのユーザーがElasticSearchを利用しているため、ユーザーがElasticSearchのoperetorをOCP向けに利用できるようにするためのドキュメントを考えています。 collectdプラグインのリストはありますか? https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.0/html/service_telemetry_framework/appe-stf-collectd-plugins access.redhat.com STFはマルチクラウドをサポートしていますか? はい。複数のOpenStack環境がひとつのSTFを指定するように設定できます。 STFはSNMPトラップ通知をサポートしますか? 現時点で、STF側のAlertManagerはサポートされていませんが、STFトラップ通知は今後予定されています。一方では、OpenStackアラームサービス(Aodh)を使用しsnmptrapの宛先を指すようにアラームアクションを構成できます。 STFはCephメトリクスをサポートしていますか? はい。Cephを含むすべてのOSPノードからのOpenStack TelemetryだけでなくCollectdプラグインで収集されたメトリクスとイベントをSTFに送信することが出来ます。しかしながら、現時点ではCephメトリクスを直接利用はできません。今後実装の予定はあります。 STFにCentralized Loggingは含まれますか? 現時点では含まれませんが、今後に予定されています。 Smart Gatewayにはどの技術が使われていますか? Smart GatewayはAnsible OperatorによってデプロイされたGolangアプリケーションです。 STFはどのロードバランサーを使用しますか? ロードバランサーはOCPの実装によってハンドリングされます。 STFでサポートされているマルチテナンシーはありますか? 現在、STF自体はテナントに対応するシステムではありません。テナント情報は、Ceilometerなどの収集エージェントから提供されたデータからフィルターできます。
OpenStackを担当しているソリューションアーキテクトの輿水です。 4/28(火)〜4/30(木)に開催されたRed Hat Summit 2020 のセッション「The next evolution of Red Hat OpenStack Platform」の内容を元に最新版のRed Hat OpenStack Platform(以降RHOSPとします)について記載します。 Distributed Compute Nodes (DCN) RHOSPとDCN(Distributed Compute Nodes)についてです。エッジコンピューティングとは目的が異なりますが、従来からRHOSPをIaaS基盤として検討する際に「拠点を分けたい」というご要望は比較的多くありました。どちらかというとDisaster Recoveryの観点が多かったと思います。RHOSPの利用して拠点を分散させる際の大きな課題として以下のような点があります。 RHOSPはOpenStack Directorを利用してデプロイする DirectorはIPMIを利用するので、コンピュートノードは同一セグメントに接続される必要がある(拠点間ネットワークの設計) OpenStack Controllerは3台で構成される。ControllerはDBとしてMariaDBを利用しており、拠点Aに2台、拠点Bに1台のように分散させた場合、拠点Aがダウンした際は復旧が困難になる 仮想マシンへのトラフィックはOpenStack Controllerを通る必要があるため、拠点間のネットワーク性能に依存する部分が大きい 上記のような課題に対応しつつRHOSPで分散コンピュートを設計・実装している事例はありますが基本的にはsupport exception(サポート例外)となってます。 DR観点ではなく、分散コンピュートが求められるユースケースとして以下のような項目が考えられます。 リモートオフィス・ブランチオフィス Telco (vDRAN): virtualized distributed RAN Telco (vCRAN): virtualized centralized RAN 交通機関での利用(例:高速道路のデータ収集、車両や船の情報) 製造、工業用、センサー Content Delivery Network(CDN):エンドユーザにネットワークを通してコンテンツを配信 Distributed compute nodes use cases OpenStack at the Edge 想定するEdgeの規模感 OpenStack at the Edge DCN(Distributed Compute Nodes)での考慮点 デプロイ方法:マニュアル(非サポート)/OpenStack Directorによるsingle-stack/OpenStack Directorによるmulti-stack エッジサイトにに置くリソース:Computeのみ/ComputeおよびCephストレージ ストレージ:Local Ephemeral/Local EphemeralとPersistent Storage ネットワーク構成:L2 Flat/L3 Routed イメージのキャッシュ:Local Disk/glance ネットワークレイテンシー:100 ms (RTT)程度 ※RHOSP13時 スケールするノード数:300程度 ※RHOSP13時 RHOSP 16以降についてはDistributed Compute Nodes (DCN)の実装方法として複数のエッジサイトをプライマリーサイトに置かれたひとつのツールで管理するよう進められています。RHOSP 13からOpenStack Directorを利用してデプロイされたOpenStack環境のみがサポート対象となっているため、OpenStack Directorを利用してコンピュートやCephのデプロイ、ライフサイクルの管理を行う予定です。 Sites with Distributed Compute Nodes プライマリーサイトのアンダークラウド(OpenStack Director)を共有する プライマリーサイトにコンテナレジストリーを配置 エッジサイトにはComputeとStorageを配置 Multiple Haet Stacks:サイト毎にひとつのheat stackを用意する Multiple Ceph Clusters:サイト毎にCephクラスターを配置(OpenStack Director利用) 利用できるストレージの種類 ローカル ephemeral storage Ceph上のPersistent storage イメージのキャッシュにglance利用 これらは6月末時点では開発中でありRHOSP 16.0ではリリースされていない機能もあるため、リリースされ次第詳細を記載する予定です。
OpenStackを担当しているソリューションアーキテクトの輿水です。 4/28(火)〜4/30(木)Red Hat Summit 2020 オンラインイベントが開催されました。この中からOpenStackのプロダクトマネージャーであるSean CohenのOpenStackに関するブレイクアウトセッション「The next evolution of Red Hat OpenStack Platform」の内容を元に最新版のRed Hat OpenStack Platformについて記載します。 RedHatとOpenStack RedHatはオープンソースコミュニティにおいてOpenStackプロジェクト発足時から貢献を続けています。2020年5月時点での Stackalytics のcommit数のデータでも大きく貢献していることがわかります。 OpenStack all-time contributions OpenStack contributions to Train release OpenStackは2010年10月にリリースされてから約10年、これまで多岐に渡る分野に利点をもたらしてきました。現在、Red Hatが考えるキーとなるユースケースは以下です。 分散型インフラストラクチャを必要とする大規模な通信会社のネットワーク機能仮想化(NFV) 開発クラウド:Red Hat OpenShiftとKubernetesが提供するクラウドネイティブアプリとコンテナーサービス エッジコンピューティング ハードウェアアクセラレーターを利用する次世代の人工知能(AI)/機械学習(ML)/ハイパフォーマンスコンピューティング(HPC)のワークロード 大規模なクラウドサービスプロバイダー Red Hat OpenStack Platform 16.0 コミュニティ版TrainをベースとしたRed Hat OpenStack Platform(以降RHOSPとします) 16.0を2月にリリースしました。RHOSP 16.0はRed Hat Enterprise Linux 8.1上で稼働します。これまでは半年ごとにリリースされ、サポート期間が1年のショートライフリリース(RHOSP 11,12,14,15)サポート期間が最大5年になるロングライフリリース(RHOSP 10,13)がありましたが、RHOSP 16からライフサイクルとリリースサイクルが変更になり、RHOSP 16はロングライフとなります。サポート期限は、Extended life cycle support (ELS) を利用した場合、2025年5月30日です。なお、何故このリリースから16.0という表現になっているのか疑問に思われるかもしれませんが、ライフサイクルやリリースサイクルについての詳細は7月以降に別途記事にする予定です。(Red Hat OpenStack Platform ライフサイクルに関連するリンク参照) access.redhat.com 余談ですが、これまでのRHOSPの各リリースではそのバージョンで何にフォーカスするのか?というテーマが設定されており、テーマに沿った機能が盛り込まれています。 RHOSP 14 Rocky Release : The place to run OpenShift RHOSP 15 Stein Release : Delivering Applications to the Edge RHOSP 16 Train Release : Day 2 Operations RHOSP 14では「OpenStack Directorを利用してOpenStack上にOpenShiftをデプロイし稼働させること」への取り組みが始められました。RHOPS 15ではOpenStackのComputeノードを分散させるDCN(Distributed Compute Nodes)が進められました。これらの機能は、RHOSP 16で引き続き強化と改善が図られています。RHOSP 16のテーマはDay 2 Operationsで、クラウド環境を継続的に運用管理するためのフレームワークの導入が進められています。 RHOSP 16.0機能ハイライト Day 2 Operations Service telemetry framework(STF) 例えば、通信事業者が従来のハードウェアをプライベートクラウド上のVNFに置き換える場合など、サービスの品質を維持するための仕組みが必要になると考えられます。STFはサービス保証のために、メトリクスやイベントをハンドリングし、ポリシーやプロセスを適用する低遅延・高スケールで提供するプラットフォームです。6月末時点ではテクノロジープレビューとなっています。 SR-IOV warm migration パフォーマンスを要求されるアプリケーションではSR-IOV (Single root I/O virtualization)機能を利用することが多々ありますが、SR-IOVのインターフェースを利用している仮想マシンのライブマイグレーションが可能になりました。 Red Hat OpenShift auto-scaling OpenStack上で稼働するOpenShiftのオートスケールを可能にします。詳細はOpenShiftのブログに記載があるので、そちらをご参照ください。 www.openshift.com Performance Red Hat Ceph Storage 4 Red Hat Enterprise Linux 8 との互換性を維持するために、Red Hat Ceph Storage 4 を利用しますが、Object storageの高速化が図られています。こちらも詳しくはCeph Storage 4の記事をご参照ください。 Red Hat Ceph Storage Pinned and floating compute instances vCPUがピニングされた仮想マシンとピニングされていない仮想マシンの同一ホスト上での共存可能になりました。これまではピニングされている仮想マシンとそうでない仮想マシンはホストアグリゲーションを利用して別ホストにスケジュールする必要がありましたが、その必要はなくなりました。この機能は、複数のホストを置かないエッジコンピューティングなどのケースに有用です。またvCPUがピニングされている仮想マシンのライブマイグレーションも可能です。 SR-IOV quality of service Quality of Service (QoS) ポリシーを使用して、インスタンスに対して最小帯域幅の確保できるようになりました。 Security Octavia SSL/TLS OctaviaでTLSターミネーションが可能になりました。その他にTLSを使用してOVNの内部APIトラフィックの暗号化をサポートするようになりました。 Hardware security module BarbicanのバックエンドとしてHSMをサポートし、暗号化アルゴリズムのオフロード許可します。対応するハードウェアはRHOSPが認定するコンポーネントの情報をご参照ください。 access.redhat.com security OpenStackを単一のレイヤーで保護することはできないと考えています。OpenStackの基盤となるLinuxプラットフォームへの依存を認識する必要があります。セキュリティ制御は、スタック全体(RHEL、KVM、OpenStackおよびハードウェア)を通じて実装する必要があると考えています。 Deploy and manage multiple overclouds from a single undercloud セッションでは説明はありませんでしたが、RHOSP 16.0の新規テクノロジープレビューの機能として「単一アンダークラウド(OpenStack Director=管理ノード)からの複数オーバークラウドのデプロイおよび管理すること」が可能になっています。これまではオーバークラウド(OpenStack環境)ごとにアンダークラウド(OpenStack Director=管理ノード)が必要であり、例えば顧客ごとにOpenStack環境を作成する場合などに、それを冗長と感じる場合もありました。本機能を利用すれば、冗長な管理ノードを削減することが可能です。ただし、影響範囲が大きくなることも考えられるため、管理ノードをどのように運用管理してゆくかは課題となります。 Deploy and manage multiple overclouds from a single undercloud 以上、「The next evolution of Red Hat OpenStack Platform」の内容の一部とRHOSP 16の紹介となります。 Red Hat Summitハイライトセミナーが7月10日(金)オンラインで開催されます。現在登録受付中ですので興味のある方はご登録ください。
Red Hatの森若です。 パブリッククラウド上でRHELを使う場合に、クラウド事業者から購入するかRed Hatから購入するかでいくつか違いがあり、 あとから変更することができません。事故を防ぐために最初にどちらを使うか決めておく必要があります。 今回は特にお問いあわせの多い、AWSおよびAzure上でRHELを利用する場合についてまとめます。 Certified Cloud and Service Provider (CCSP) とは Red Hatは多数のパブリッククラウド事業者と協力して、クラウド環境でRHELへのサポートを提供できる体制を整えています。 そのためのプログラムが Certified Cloud and Service Provider Program で、以下ではパブリッククラウド事業者のことをCCSP事業者と呼びます。 CCSP事業者はRHELをはじめとしたRed Hat製品とサポートを提供できますが、どの製品を扱うかはCCSP事業者により異なります。 たとえば AWS および Azure では、オンラインで購入ができ、時間単位で使用した分だけの従量課金で使用することができますが、AWSではEUS, ELS, HA などのRHELのアドオンは2020年6月現在提供されていません。AzureではEUS, HAは提供されていますが ELSは提供されていません。 最新の状況は各CCSP事業者にご確認ください。 CCSP事業者は自社環境にあわせた仮想マシンイメージを作成し、Red Hatの用意した一定の試験を通過させることで認定イメージを用意できます。 ユーザにとっての「RHELのイメージ」はこのようにして提供され、ISV製品の動作などに必要な基本的な互換性が維持されます。 CCSPでのRHEL購入をおこなうと、CCSP事業者へIaaSとまとめて支払える、サポート窓口がCCSP事業者に集約される、通常のRHELが1年単位のサブスクリプションであるのに対して短い単位で利用できるなどのメリットがあります。 Red Hat Cloud Access 一部のCCSP事業者については、Red Hat Cloud Access という仕組みで、既にユーザが持っている RHEL のサブスクリプションを持ち込む ことが可能となっています。 この場合、RHELについてのサポート窓口はCCSP事業者ではなくRed Hatです。質問できる相手は購入元に対応します。 Red Hat Cloud Accessについては以下ページによくある質問と回答がまとまっています。 Red Hat Cloud Access Frequently Asked Questions - Red Hat Customer Portal Red Hat Cloud Access で利用する場合、一般的にはユーザが仮想マシンイメージを作成した上で、CCSP事業者のクラウド上へ持ち込み、動作させます。 ただしAWS、AzureとGCPでは、Gold Imagesと呼ばれるCloud Access用の仮想マシンイメージも用意されています。 Gold Imagesについては以下のドキュメントおよびナレッジをご確認ください。 Red Hat Cloud Access Reference Guide Red Hat Subscription Management 1 | Red Hat Customer Portal AWS EC2 での Red Hat Cloud Access Gold Image の確認方法 - Red Hat Customer Portal カスタムのイメージ作成については以下のナレッジ記事が詳しいです。RHEL 7.6 以降および RHEL8 では Image Builder により作成することもできます。 How to create custom RHEL AMI image for Amazon AWS? - Red Hat Customer Portal How to provision a Red Hat Enterprise Linux virtual machine for Microsoft Azure - Red Hat Customer Portal Building a customized Azure VM image with Image Builder and libvirt CCSP事業者がどの製品をどちらの方式で提供するかは以下で検索できます。 Red Hat certified cloud and service providers CCSPのRHELと Cloud AccessのRHELは相互に変更できない(例外あり) ここで一点注意点があります。CCSPのRHELと Cloud AccessのRHELは相互に変更できません。 CCSP事業者が提供する認定imageは、事業者により追跡・カウントされサブスクリプション費用が計上され、サポートもCCSP事業者が行います。 それに対して Red Hat Cloud Access は Red Hat がサポートを提供し、CCSP事業者から見ると「ユーザが持ちこんだなにか」であり、IaaS部分についてしか関知しません。 この2つの間を相互に変更することはできません。 「認定imageで構築作業をはじめたが途中から Cloud Accessに切替えたい」とお問いあわせをいただくケースがありますが、 そのような場合はゼロからの再構築をしていただくようお願いしております。 (2020年10月30日追記) Azure では、Azure Hybrid Benefit -- Linux という仕組みで、任意のタイミングで切り変えることができるようになりました。執筆時点ではまだpreview段階でMicrosoftへ個別の申請が必要です。 Azure ハイブリッド特典 -- Linux プレビュー | Azure の更新情報 | Microsoft Azure Using Red Hat Enterprise Linux subscriptions with Microsoft Azure Hybrid Benefit - Red Hat Customer Portal Cloud Access が必要なケースは? いくつかのケースで、CCSP事業者の認定imageを利用するのではなく、Cloud Access による持ち込みが必要になります。 EUS, ELS, High Availability, Resilient Storage といったRHELのアドオン製品が必要で、CCSP事業者が提供していない場合 Red Hat Satellite からの管理が必要な場合 集中購買による値引きなどで価格メリットがある場合 これらの条件に該当するかどうかを事前に確認して、あとから変更が必要になるケースを防ぎましょう。
Red Hat Enterprise Linux for SAP Solutionsでの追加コンポネント レッドハット ソリューションアーキテクト石倉です。 今回はRed Hat Enterprise Linux for SAP Solutions(RHEL for SAP)での、Red Hat Enterprise Linux(RHEL)からの追加コンポネントを紹介します。  #この記事ではこれからSAP社ERPソフトウェア(SAP ERP Central Component(ECC))をSAP S/4HANAへ移行する方を想定していますので、RHELの最新バージョンである、RHEL8の利用が前提になっています。 x86システムの場合、SAP S/4HANAシステム関連の追加コンポネント(RPM/Channel)は以下のリポジトリに含まれます。 rhel-8-for-x86_64-baseos-e4s-rpms rhel-8-for-x86_64-appstream-e4s-rpms rhel-8-for-x86_64-sap-solutions-e4s-rpms rhel-8-for-x86_64-sap-netweaver-e4s-rpms システム上で該当リポジトリを有効にする手順は以下もご確認下さい。  #PowerPCのケースも記載があります。 access.redhat.com 追加コンポネント(RPM/Channel)のリストは以下になります。 compat-locales-sap 異なるOSからのマイグレーション時に発生するLocaleの問題を回避する為の追加Localeです。 「SAP Notes187864 - Linux: Linux でのロケールのサポート」もご確認下さい。 https://launchpad.support.sap.com/#/notes/187864 compat-sap-c++ SAPシステムで必要となる追加のRuntime Compatibility Libraryです。 resource-agents-sap Pacemakerによる高可用性クラスタ環境がSAP S/4インスタンスを管理する事を可能にするResource AgentとConnector Script Interfaceです。 resource-agents-sap-hana Pacemakerによる高可用性クラスタ環境がSAP HANAインスタンスを管理する事を可能にするResource AgentとConnector Script Interfaceです。 tuned-profiles-sap システムを監視し、特定の作業負荷の下でパフォーマンスを最適化するTunedサービスのSAP NetWeaverロード向けプロファイルです。 TunedはRHELに標準搭載されるサービスです。 Tunedサービスについては以下もご確認下さい。 システムの状態とパフォーマンスの監視と管理 Red Hat Enterprise Linux 8 | Red Hat Customer Portal tuned-profiles-sap-hana システムを監視し、特定の作業負荷の下でパフォーマンスを最適化するTunedサービスのSAP HANAロード向けプロファイルです。 TunedはRHELに標準搭載されるサービスです。 Tunedサービスについては以下もご確認下さい。 システムの状態とパフォーマンスの監視と管理 Red Hat Enterprise Linux 8 | Red Hat Customer Portal sapconf カーネルパラメーター、追加の rpm、ネットワーク設定など、SAP 向けの自動化された RHEL プロビジョニングソリューションを提供します。 キックスタートや Satellite Server に統合する事ができます。 キックスタートについては以下もご確認下さい。 高度な RHEL インストールの実行 Red Hat Enterprise Linux 8 | Red Hat Customer Portal rhel-system-roles-sap SAPシステムインストールが出来るように、SAP Notesの前提条件をAnsibleにより事前に自動設定できるSytem Roleコレクションです。 vhostmd/vm-dump-metrics Red Hat Virtualization (RHV)上でSAPシステムを稼働させる際に必要となる、監視デーモンとそのクライアントです。 「SAP Notes1400911 - Linux: SAP NetWeaver on Red Hat KVM - Kernel-based Virtual Machine」もご確認下さい。 https://launchpad.support.sap.com/#/notes/1400911 概要に戻る Red Hat Enterprise Linux for SAP Solutions ー概要ー - 赤帽エンジニアブログ レッドハット ソリューションアーキテクト石倉
Red Hatの森若です。 今日はRed Hat関連の情報収集を行う方むけの、リンク集的な記事です。 Red Hatは公式なものだけでも 大量に blogをもっていて、さらにいくつかのテーマについては一般からの投稿を受けつける雑誌的なWebサイトも運営しており、継続的に情報を発信しています。その中からいくつかピックアップしてご紹介します。 この記事で紹介するサイトは英語のものばかりですが、最近は機械翻訳も使いやすくなっています。覗いてみると面白い記事がみつかるかもしれません。 blog 公式のblog一覧はこのページです。(赤帽エンジニアブログは非公式なので載りません……) www.redhat.com The Red Hat Blog 会社全体に関するblogです。マーケティング的な記事から、エッジコンピューティング、技術者による新技術の解説など幅広いトピックを扱っています。 製品テーマのblog 特定製品についてのblogが多数あります。 以下の3つはThe Red Hat Blogの一部(Channel)として統合されています。 RHEL RHOSP Red Hat Storage 以下は別のblogとして独立して運営されています。 Ansible OpenShift ミドルウェア 最近は下で紹介するソフトウェア開発者むけのblogに集約されつつあるようです テーマ別blog 特定製品ではなくテーマ別に分かれたblogもあります。 セキュリティ 脆弱性の解説、セキュリティ技術の紹介など ソフトウェア開発者 ミドルウェアや開発ツールなど開発者むけトピック DevNation Red Hatのエンジニアによる開発者むけの技術トーク(ビデオとスライド)など OSSコミュニティ 企業がOSSコミュニティとうまくやっていくための記事や、OSSコミュニティの運営、Red Hatがかかわっているコミュニティイベントなどの話題 OSSの新技術 産業別 産業別に特化した話題。通信と金融に関する記事が多いです。 テーマ別web site Red Hatは以下のサイトを運営しており、編集も社員がしているのですが、一般からの投稿を募集しておりRed Hatに限定されないサイトになっています。これらのサイトにあるほとんどの記事はCC-BY-SAでライセンスされています。 Opensource.com OSS、Linuxをテーマとしたサイト。先日10周年を迎えました。 The Enterprisers Project CIOやITリーダーむけのサイト。 Enable Sysadmin 運用管理者むけのサイト。howto記事が多め。
Red Hatのソリューションアーキテクトの笹川です。 Red Hat にはクラウドネイティブアプリの開発に役立つ、ミドルウェアラインナップが充実していることをご存知ですか? ここでは、Red Hatのミドルウェアに関する注目ニュースを、各製品技術に特化したソリューションアーキテクトが、ご紹介します。 月イチくらいのペースで続けたいと思います。 今回は7月号となります。 想定読者 エンタープライズアーキテクト アプリケーション開発者 システムの提案をするSIerの方 特集1 : Red Hat Decision Manager でよく聞かれる話 (FAQ) まとめ 営業活動の中でお客様から頻繁に受けるご質問について質問回答集を作成してみました。Red Hat Decision Manager製品への疑問について、こちらで確認してみてください。 Red Hat Decision Manager でよく聞かれる話 (FAQ) その1 Red Hat Decision Manager でよく聞かれる話 (FAQ) その2 Red Hat Decision Manager でよく聞かれる話 (FAQ) その3 Red Hat Decision Manager でよく聞かれる話 (FAQ) その4 特集2 : ついにリリース!イベント駆動アプリケーションを実現するOpenShift Serverless OpenShift ServerlessがついにGAになりました。 サーバレスの価値とコンセプトについて解説し、そのユースケースもご紹介します。 speakerdeck.com 特集3 : マイクロサービスとイベント駆動アプリケーションの核となるメッセージングミドルウェア マイクロサービスだけでなく、サーバーレスアーキテクチャにも非常に重要となってくるメッセージングミドルウェアについて解説します。 分散システムにおけるデータの持ち方について疑問を持ったことがある方は是非一度ご覧ください。 speakerdeck.com 直近GAになった製品群 最近リリースとなったMiddleware製品群のリストをご紹介します。 見逃している製品が無いか、是非一度ご確認ください。 Red Hat Data Grid 8.0 Red Hat Enterprise Application Platform 7.3 Red Hat Quay 3.3 好評開催中!クラウドネイティブアプリ開発関連のWebinar全6回 Cloud Nativeを見据えたアプリケーションアーキテクチャとレガシーモダナイゼーション コンテナ時代の開発ツールチェインと開発プロセスのベストプラクティス クラウド/コンテナを前提とした時代のアプリケーション実行環境の選択 マイクロサービス/サーバーレス実践入門 これからのシステム連携を実現するデジタル基盤とアプローチ Cloud Nativeなデータパイプラインの作り方とオープンハイブリッドクラウドへの展開 実施済みの回については、オンデマンド視聴出来ます。(お名前とメールアドレス等の登録のみで視聴可能です) 下記リンクよりぜひご登録ください。 www.redhat.com
Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。 この記事は、Quarkus.io のブログ記事、 Quarkus 1.4 released - Command mode, HTTP 2, New FaaS framework, Mocking... の翻訳記事です。 新しいQuarkusリリース 1.4.1.Final はこちらです。1.4.0 ではありません。 このバージョンには非常に優れた機能が詰め込まれており、多くの改善とバグフィックスが含まれています。 コマンドモード HTTP/2 Funqyという新しいFaaSフレームワーク モックに関する改善点 Keycloak管理クライアント SmallRyeリアクティブメッセージング2.0 MongoDBクライアント4 Amazon Alexa拡張 LDAP認証 Vaultサポートの改善 パフォーマンスも改善されているので、Quarkusアプリケーションはこれまで以上に高速になります。 移行ガイド 既存のアプリケーションを移行したいとお考えですか?こちらに 1.4 の移行ガイドがあります 。 何が新しいの? Java 8 の非推奨 Java 8を使用したQuarkusアプリケーションの構築は非推奨になりました。今後はJava 11の使用を推奨します。 Quarkus 1.6 にて Java 8サポートを終了する予定なので、約2ヶ月後になると思います。もしJava 8のサポートをもっと長くしておくべき強い理由があれば、私たちのquarkus-devメーリングリストに連絡してください。 コマンドモード これまでQuarkusの良さはサーバアプリケーションに限定されていましたが、この時代は終わりました。 新しいコマンドモードを使用して、Quarkusでコマンドラインアプリケーションを構築できるようになりました。詳細については、 専用のリファレンス・マニュアル を参照してください。 詳細については近日中にブログで発表する予定です。 HTTP/2 QuarkusはHTTP/2をサポートするようになりました。これはデフォルトで有効になっていますが、quarkus.http.http2をfalseに設定すると無効にできます。 新しいFaaSフレームワーク Funqyと呼ばれる新しいFaaSフレームワークの導入によって、機能面(具体的にはAWS LambdasとAzure Functions)で多く改善しました。 Funkyについて知っておくべきことはすぐにブログで紹介しますが、それまでの間は更新されたドキュメントを参照ください。 Amazon Lambda Amazon Lambda と RESTEasy, Undertow もしくは Vert.x Web Azure Functions (Serverless) と RESTEasy, Undertow もしくは Vert.x Web モックに関する改善点 CDI Beanのモッキングがこれまで以上に簡単になりました。Mockitoとの統合もうまく行っています。 詳細については、 アプリケーションのテストガイド を参照してください。 またしてもブログ記事は近日公開! MongoDBクライアントのアップグレード MongoDBクライアントはバージョン4にアップグレードされました。これはいくつかのアプリケーションが動かなく可能性があるかもしれないため、コードの更新が必要になるかもしれません。 Vault Vault KV Secret Engineのデフォルトバージョンがバージョン2になりました。設定によって、バージョン1に戻れます。 Vault TOTPエンジン のサポートと、2つの新しい話題のガイドが追加されました。 HashiCorp Vaultの認証の操作 データベースでのHashiCorp Vaultを使用 新しい拡張機能 Keycloak 管理クライアント 以前のバージョンでは、Keycloak 管理クライアントに問題がありました。 スムーズな操作を保証するために、 「quarkus-keycloak-admin-client」 という専用の拡張機能を追加しました。 Amazon Alexa Amazon Alexaは、quarkus-amazon-alexa拡張機能の追加により、ネイティブでサポートされました。 LDAP 認証 Quarkusによってそのまま使えるように、サポートする認証ストアのリストにLDAPを追加しました。 And more…​ SmallRye Reactive Messagingが2.0にアップデートされました。 多くのコンポーネントのアップグレード、バグフィックス、小さな改善などがあります。 完全な変更ログ 1.4.0.CR1 、 1.4.0.Final と 1.4.1.Final の完全な変更ログはGitHubで入手できます。 ADOPTERS.md Quarkusの使用に関する情報を共有するために、リポジトリのルートに ADOPTERS.mdファイル を追加しました。 Quarkusを使用していて、私たちのブログでインタビューを受けたい場合、または単にこのファイルに追加したい場合は、私たちにご連絡ください。 貢献者 Quarkusには現在 269人の貢献者 がいます。皆様、本当にありがとうございました。 特に1.4リリースについてはみなさんのおかげです。 Aaron Rogers, Adrian, Adrian Fiedler, Akito Kidani, Alex Soto, Alexander Schwartz, Alexey Loubyansky, Andrej Petras, András Péteri, Andy Damevin, Antoine Sabot-Durand, Antonio Goncalves, Aurea Munoz, Bartosz Firyn, Bill Burke, Cem Nura, Clement Escoffier, Daniel Petisme, Daniel Wamara, Daniel Platz, David M. Lloyd, Emmanuel Bernard, Erik Mattheis, Falko Modler, Felix Wong, Galder Zamarreño, Geoffrey De Smet, George Doenlen, George Gastaldi, Georgios Andrianakis, Guillaume Le Floch, Guillaume Smet, Gwenneg Lepage, Gytis Trikleris, Harold Sun, Harsha R, Ioannis Canellos, Jaikiran Pai, Jan Martiska, Jason T. Greene, Jesper Skov, Jiri Ondrusek, Johan Westerlund, John O’Hara, Jonas Scholz, Jordan Moore, Jozef Hartinger, Julian Cui, Justin Holmes, Ken Finnigan, Ladislav Thon, Loïc Mathieu, Luis F Munoz, Manyanda Chitimbo, Marc Boissonneault, Mario Fusco, Marius Ileana, Martin Kouba, Martin Panzer, Matej Novotny, Matej Vasek, Matthias Andreas Benkard, Matthias Harter, Mattia, Max Rydahl Andersen, Mayank Kunwar, Michał Szynkiewicz, oscarfh, Pavol Loffay, Pedro Igor, Peter Palaga, Petr Nehyba, Phillip Kruger, Robbie Gemmell, Robert Marcano, Roberto Cortez, Rohan Maity, Rostislav Svoboda, Sanne Grinovero, Sebastian Daschner, Sebastien Dionne, Sergey Beryozkin, Stuart Douglas, Stéphane Épardaud, Timothy Power, Tobias Liese, Tobias Stadler, Tomaz Cerar, Vincent Sevel, Vincent Sourin, Vinícius Ferraz Campos Florentino, William Burns and Yoann Rodière 参加しよう 私たちはあなたのフィードバックをとても大切にしていますので、バグを報告し、改善を依頼してください...一緒に何か素晴らしいものを作りましょう! Quarkusのユーザーや好奇心の強い人は、恥ずかしがらずに歓迎コミュニティに参加してください。 GitHub にフィードバックを提供する; コードを作成して PRを行う ; Zulip や メーリングリスト で議論する; なにか質問があれば Stack Overflow で投稿してください。