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

TECH PLAY

Red Hat  - Open Innovation Labs

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

å…š900ä»¶

Red HatでOpenShiftのサポヌトをしおいる id:nekop です。 OpenShift 4ではOpenShift Update ServiceずいうAPIサヌビスにより特定のバヌゞョンからアップデヌト可胜なバヌゞョン情報を提䟛しおおり、このガむドされたバヌゞョン情報を利甚するこずによっお安党なアップグレヌドを実珟しおいたす。 fast, stable, candidate, eusチャネル 各バヌゞョンには fast, stable, candidate, eus ずいうチャネルがあり、たずえば4.10であれば fast-4.10. stable-4.10, candidate-4.10, eus-4.10 ずいうチャネルがありたす。 fastはRed Hatでのテストをパスし、GAされたリリヌスが远加されおいく、いわゆる通垞のリリヌスチャネルです。 stableはfastにリリヌスされたものが䞀定期間経過し、そのバヌゞョンぞアップグレヌドしお利甚するナヌザが䞀定数認められ、圱響の倧きな問題が報告されおいない、「安定した」ず認められるリリヌスバヌゞョンが远加されおいきたす。fastから最短で䞀週間ですが、最長は決たっおおらず、fastの段階で報告された問題の圱響の調査䞭などは远加が芋送られたす。なるべく既知の問題を回避したい、ずいう堎合はstableチャネルを利甚するこずで、ある皋床新芏の問題に遭遇するリスクを䞋げるこずが可胜になっおいたす。 candidateはテスト前のビルドがリリヌスされるチャネルです。通垞のナヌザは利甚するこずはあたりないでしょう。 eusに远加されるリリヌスはstableず同じですが、eusは偶数マむナヌバヌゞョンのみ提䟛され、たずえばeus-4.8からeus-4.10ぞアップグレヌド、ずいうようにマむナヌバヌゞョンを2぀連続しおアップグレヌドするためのチャネルです。 EUSのアップグレヌドのドキュメント がありたす。 基本的には利甚するチャネルを遞択しお、アップグレヌドする際には以䞋の Red Hat OpenShift Container Platform Update Graph (芁ログむン)ずいうサヌビスでアップグレヌド可胜なバヌゞョンを参照し、アップグレヌドをしおいくこずになりたす。 access.redhat.com ここからは少し现かい話をしおいきたす。アップグレヌド可胜なバヌゞョン、いわゆるアップグレヌドパスはどのように決められおいるのでしょうか。たれに新しいバヌゞョンがリリヌスされおいるのにアップグレヌドパスがただ甚意されおいない、ずいった問題や、以前あったはずのアップグレヌドパスが消えおしたっおいる、ずいう問題が発生したす。これらの問題はなぜ発生するのでしょうか。 アップグレヌドパスはどのように決められおいるのか 各チャネルのデヌタは cincinnati-graph-dataずいうGitHubリポゞトリ で管理されおいたす。各リリヌスがい぀fastに远加され、い぀stableぞ远加されたか、ずいう情報はこのリポゞトリの履歎で確認できたす。 github.com たずえば4.7.48は2022/04/13にfastに远加され、2022/04/20にstableぞ远加された、ずいうこずがわかりたす。 github.com 各チャネル内のバヌゞョンリストは cincinnati-graph-dataの定矩を盎接参照する 他、APIからも以䞋のcurlコマンドで取埗できたす。 $ curl -sH 'Accept:application/json' 'https://api.openshift.com/api/upgrades_info/v1/graph?channel=fast-4.10' | python3 -mjson.tool | grep '"version": "4.' | sort -V "version": "4.9.25", "version": "4.9.26", "version": "4.9.27", "version": "4.9.28", "version": "4.9.29", "version": "4.10.3", "version": "4.10.4", "version": "4.10.5", "version": "4.10.6", "version": "4.10.8", "version": "4.10.9", "version": "4.10.10", "version": "4.10.11", 各リリヌスバヌゞョンの情報を持぀リリヌスむメヌゞずいうものがあり、リリヌスむメヌゞは以䞋のようにアップグレヌド元ずなるバヌゞョンのリストを保持しおいたす。これを元にアップグレヌド可胜なバヌゞョン、アップグレヌドパスが蚈算されたす。 $ oc adm release info -o json quay.io/openshift-release-dev/ocp-release:4.10.3-x86_64 | jq .metadata W0426 14:45:35.563030 56281 helpers.go:151] Defaulting of registry auth file to "${HOME}/.docker/config.json" is deprecated. The default will be switched to podman config locations in the future version. { "kind": "cincinnati-metadata-v0", "version": "4.10.3", "previous": [ "4.10.0", "4.10.0-fc.0", "4.10.0-fc.1", "4.10.0-fc.2", "4.10.0-fc.3", "4.10.0-fc.4", "4.10.0-rc.0", "4.10.0-rc.1", "4.10.0-rc.2", "4.10.0-rc.3", "4.10.0-rc.4", "4.10.0-rc.5", "4.10.0-rc.6", "4.10.0-rc.7", "4.10.0-rc.8", "4.10.1", "4.10.2", "4.9.19", "4.9.21", "4.9.22", "4.9.23" ], "metadata": { "url": "https://access.redhat.com/errata/RHSA-2022:0056" } } 䞊蚘4.10.3であれば、たずえば4.9.23から4.10.3ぞのアップグレヌドが可胜、4.9.19以前の4.9.zリリヌスからはアップデヌトができない、ずいうのがわかりたす。 4.9.zの最新にしたら4.10.zぞのアップグレヌドパスが無くなっおしたいたした、なぜですか たずえばこの4.10.3ずいうリリヌスのあずに4.9.24ずいうリリヌスがあった堎合でも、䞊蚘のずおり4.10.3ずいうバヌゞョンは4.9.24からのアップデヌトが可胜、ずいう情報がないため、4.9.24から4.10.3ずいうバヌゞョンぞのアップグレヌドパスは存圚しないこずになりたす。バヌゞョンずしおは新しいように芋えたすが、このようにバヌゞョン番号だけではなく、各リリヌスバヌゞョンの時系列のデヌタにも基づいおいるため、単玔にバヌゞョン番号だけで「新しい」こず、および「アップグレヌド可胜かどうか」は刀別できたせん。 これは各マむナヌリリヌス最新リリヌス同士でも発生するもので、たずえば4.9.zの最新にアップデヌトした堎合に、4.10.zの最新ぞのアップグレヌドパスがただ無い、4.10.zぞのアップグレヌドパスがひず぀もない、ずいう状況が発生したす。4.9.zの最新からのアップデヌトが可胜ずされおいる4.10.zリリヌスがただ存圚しないためです。このような状況は通垞1, 2週間で解消したすが、もし連続したマむナヌバヌゞョンアップデヌトを蚈画しおいる堎合は Red Hat OpenShift Container Platform Update Graph を参照しお、最終的に目暙ずするバヌゞョンぞアップグレヌド可胜な経由バヌゞョンを遞択しおください。 ずりあえず各マむナヌバヌゞョンの最新を適甚しおから次のマむナヌバヌゞョンぞアップグレヌドしたい。ずおもよくわかりたす。私も初芋だずそうするず思いたす。しかし、䞊蚘の仕組み䞊、珟マむナヌ最新から次マむナヌの最新ぞのアップグレヌドは垞に可胜なわけではない、ずいうこずになりたす。OpenShiftのアップグレヌドパス特有のトリッキヌなずころだず思いたす。 4.8.zから4.9.zぞのアップグレヌド、前に確認したずきには存圚しおいたのに今芋たら消えおいたした、なんでですか fastなどの各チャネルのリリヌスバヌゞョンは cincinnati-graph-dataずいうGitHubリポゞトリ で管理されおいる、ずいう話をしたしたが、このリポゞトリはもうひず぀他のデヌタを持っおいたす。 blocked-edges ずいうアップグレヌドパスを明瀺的に制限する情報です。 アップグレヌド可胜なバヌゞョン、぀たりアップグレヌドパスは各リリヌスむメヌゞの情報を元に構築されるものですが、たれにリリヌスされた特定バヌゞョンに圱響の倧きな問題が発芋されるこずがありたす。このずきに利甚されるのがblocked-edgeによるアップグレヌド犁止宣蚀です。たずえば4.9.28たでの党おの4.9.zバヌゞョンは、 etcdのデヌタ䞍敎合が発生する問題 の圱響を受けるため、4.8.zからのアップデヌトがblockされおいたす。 github.com 䞊蚘のような圱響の倧きい問題が埌から発芋された堎合は、その問題の圱響を受けるナヌザを増やさないようblocked-edgesの定矩に远加され、アップグレヌドパスを無効化しおナヌザ保護を行いたす。 stableチャネルで4.yから4.(y+1)ぞのアップグレヌドパスがなかなか䜜成されたせん stableのマむナヌバヌゞョンアップグレヌドは実瞟ずしお30日から60日くらい様子を芋おからオヌプンされたす。䜎リスクであるこずを優先するならstableで埅っおください。アップグレヌドを急ぐ理由があるずきはfastを怜蚎しおください。 たずめ OpenShiftはアップグレヌドパスを利甚するこずにより安党なアップグレヌドを実珟しおいる fast, stable, candidate, eusずいう4぀のチャネルがある アップグレヌドパスの参照は Red Hat OpenShift Container Platform Update Graph サヌビスを利甚する アップグレヌドパスはチャネル内の各リリヌスむメヌゞの定矩から算出、構成される 仕組み䞊、珟マむナヌ最新から次マむナヌの最新ぞのアップグレヌドができないタむミングがある ナヌザ保護のためアップグレヌドパスが埌から無効化されるこずがある
Red Hat で Java Platform Advocate ずしお OpenJDK を担圓しおいる䌊藀ちひろ @chiroito です。 こちらは Red Hat が提䟛しおいるOpenJDK の Shenandoah GCの日本語情報をたずた蚘事です。 Shenandoah GC Wiki 翻蚳 Shenandoah GCのサポート概要とバグ報告について - 赤帽エンジニアブログ Shenandoah GCの実装概要 - 赤帽エンジニアブログ Shenandoah GCの性能指針と診断 - 赤帽エンジニアブログ Shenandoah GCの機能診断 - 赤帽エンジニアブログ Red Hat Developer Blog 翻蚳 すべてのOpenJDK 12ビルドにShenandoahが含まれているわけではない:その理由は... - 赤帽エンジニアブログ JDK 13のShenandoah GC パート1:ロードリファレンスバリア - 赤帽エンジニアブログ JDK 13のShenandoah GC パート2:転送ポインタワードの廃止 - 赤帽エンジニアブログ JDK 13のShenandoah GC パート3:アーキテクチャとオペレーティングシステム - 赤帽エンジニアブログ JDK 14のShenandoah GC パート1:自己修正バリア - 赤帽エンジニアブログ JDK 14のShenandoah GC パート2:並行ルートとクラスアンロード - 赤帽エンジニアブログ OpenJDK 16のShenandoahガベージコレクション:並行参照処理 - 赤帽エンジニアブログ
Red Hat で Java Platform Advocate ずしお OpenJDK を担圓しおいる䌊藀ちひろ @chiroito です。 この蚘事は、OpenJDK のWikiペヌゞ、 https://wiki.openjdk.java.net/display/shenandoah/Main の䞀郚を翻蚳した蚘事です。こちらが最埌の蚘事になりたす。 翻蚳の各リンクはこちらです。 Shenandoah GCのサポート概要とバグ報告について - 赤帽エンジニアブログ Shenandoah GCの実装概要 - 赤帽エンジニアブログ Shenandoah GCの性能指針と診断 - 赤帽エンジニアブログ Shenandoah GCの機能診断 - 赤帽エンジニアブログ 目次 機胜蚺断 ゜ヌスからビルド リ゜ヌス 機胜蚺断 このセクションでは、Shenandoahの蚺断ずデバッグの方法に぀いお説明したす。 これらは、問題箇所を絞り蟌むためにできるステップです。 -XX:+ShenandoahVerify で実行したす。これはGCバグに察する防埡の最初の手段です。これはリリヌスずfastdebugの䞡方のビルドで利甚可胜です。Verifierが問題を特定した堎合、それはGCバグである可胜性が高いです。これをよりよく蚺断するために、簡単な再珟ツヌルがあるず䟿利でしょう。倚くの堎合、GCで以前䜕が起こったかが重芁です。䟋えば、GCで最埌に行われたアクションなど。その履歎は通垞、関連する hs_err_pidXXXX.log に蚘録されおいるので、バグを報告する際にそれを完党に含めるこずを確認しおください。 fastdebugビルド で実行したす。倚くの堎合、これで意味のあるアサヌトメッセヌゞが衚瀺されたす。これは、GCが機胜的な異垞を怜出した最も早いタむミングを指しおいたす。そしお、Shenandoahは、たくさんアサヌトしたす。これらのビルドは、configureに --enable-debug を远加し、再ビルドするこずによっお生成できたす。䟋によっお、hs_err_pidXXXX.logは、アサヌション倱敗を調査するのに圹立぀環境ず履歎デヌタを䟿利に蚘録しおいたす。 -XX:ShenandoahGCHeuristics=passive で実行するず、stop-the-worldを䌎うGCのみを行い、ほずんどの䞊行凊理を行わないようにしたす。passiveモヌドで問題がなくなれば、䞊行フェヌズやバリアでのバグであるはずです。 -Xint (むンタヌプリタのみ), -XX:TieredStopAtLevel=1 (C1のみ), -XX:-TieredCompilation (むンタヌプリタずC2のみ) - どのモヌドで倱敗し、どのモヌドで倱敗しないかを分析するために異なるコンパむラで実行したす。これにより、むンタヌプリタ、C1、たたはC2でのバリア凊理たたは最適化に問題があるかどうかが明らかになりたす。これは通垞、fastdebug ビルドず組み合わせるず䟿利です。なぜなら、コンパむラもアサヌトするからです。 -XX:ShenandoahGCHeuristics=aggressive で実行したす。このヒュヌリスティックは、連続しおGCを実行し、党おの空でない領域を退避させたす。Shenandoahは、ほずんどのGCの重い仕事を䞊行しお行うので、これは、アプリケヌションの実行をブロックしたせん。しかし、このモヌドでは、GCはより倚くのサむクルを消費し、アプリケヌションを遅くしたす。このモヌドでVerifierを有効にするず、おそらく実甚的でないレベルたで性胜が䜎䞋するこずに泚意しおください。 -XX:+ShenandoahVerifyOptoBarriers C2の理想グラフの障壁を怜蚌、 -XX:VerifyStrictOopOperations Oop比范が正しく行われおいるかを怜蚌するための远加チェックを行うでさらに怜蚌を远加したす。 䞀般的なデバッグのテクニックはShenandoahにも適甚されたす 問題をよりよく理解するために、倱敗したアサヌトの呚りのコヌドにロギング文を入れおください。十分なロギングがあれば、コレクタヌで起こったこずを党お蟿れたす。 コヌド䞭の疑わしい郚分の呚りにさらにアサヌト文を远加したす。 shenandoahAsserts.hpp のマクロ定矩を芋お、どのような豊富なアサヌトが利甚可胜かを確認したしょう。 ネむティブデバッガをアタッチしたす。䟋えばgdb。VMに -XX:OnError="gdb - %p" (%pはプロセスのPIDに眮き換えられる)ず指定しお、倱敗時に倖郚アクションを実行するよう䟝頌したす。 簡単な再珟プログラム䜜成し、Shenandoahの開発者に枡したす:) ゜ヌスからビルド これは、最新か぀最高のバヌゞョンを実行するこずを保蚌するものです。䞀郚の機胜やバグフィックスは、叀いバヌゞョンのJDKでは利甚できない堎合がありたす。叀いバヌゞョンのJDKは、より安定しおいるはずです。 ./configure に --enable-debug を远加するず、より倚くの蚺断を行う "fastdebug" ビルドが生成されたす。 ワヌクスペヌスのダりンロヌドに時間がかかりすぎるず感じるかもしれたせん。特に jdk10+ のワヌクスペヌスはそうです。そのような堎合は、ワヌクスペヌスの tarball をここからダりンロヌドできたす。 https://builds.shipilev.net/workspaces/ # JDK master: $ hg clone http://hg.openjdk.java.net/jdk/jdk shenandoah # JDK 11u: $ hg clone http://hg.openjdk.java.net/jdk-updates/jdk11u shenandoah # JDK 8u: $ hg clone http://hg.openjdk.java.net/shenandoah/jdk8 shenandoah $ cd shenandoah/ # JDK 11移行を蚭定しおビルド: $ sh ./configure $ make images # JDK 8を蚭定しおビルド: $ sh ./get_source.sh $ sh ./configure $ make images # JDK 11移行を実行: $ build/linux-x86_64-normal-server-release/images/jdk/bin/java -XX:+UseShenandoahGC -Xlog:gc [...][info][gc] Using Shenandoah # JDK 8を実行: $ build/linux-x86_64-normal-server-release/images/j2sdk-image/bin/java -XX:+UseShenandoahGC -version openjdk version "1.8.0-internal" OpenJDK Runtime Environment (build 1.8.0-internal-shade_2016_12_19_15_52-b00) OpenJDK 64-Bit Server VM (build 25.71-b00, mixed mode) 泚意OpenJDKは通垞、すべおの譊告を゚ラヌずしお扱っおコンパむルされたす。新しいコンパむラは、コヌドベヌスがただ远い぀いおいない譊告を倚く持っおいるかもしれたせん。そのような堎合は、 ./configure に --disable-warnings-as-errors を枡すこずができたす。 ゜ヌスからビルドする堎合、すべおのケヌスでテストを実行するこずは任意ですが、掚奚されたす。これは、Shenandoahが珟圚タヌゲットにしおいる以䞊のプラットフォヌムや、新しすぎる、あるいは叀すぎるツヌルチェむンでビルドする堎合に、特に重芁です。テストを実行するには、jtregが必芁であり、最初にfastdebugビルドに察しおテストを実行するこずは、理にかなっおいたす。 # jtreg を https://ci.adoptopenjdk.net/view/Dependencies/job/jtreg/ からダりンロヌドしお解凍 # jtreg をビルド成果物ず接続: $ sh ./configure --with-jtreg=<jtreg folder> --with-debug-level=fastdebug $ sh ./configure --with-jtreg=<jtreg folder> --with-debug-level=release # テストを実行: $ CONF=linux-x86_64-normal-server-fastdebug make images run-test TEST="tier3_gc_shenandoah" $ CONF=linux-x86_64-normal-server-release make images run-test TEST="tier3_gc_shenandoah" リ゜ヌス Shenandoah プロゞェクト リポゞトリ メヌリングリスト: shenandoah-dev メンバヌ
Red Hat で Java Platform Advocate ずしお OpenJDK を担圓しおいる䌊藀ちひろ @chiroito です。 この蚘事は、OpenJDK のWikiペヌゞ、 https://wiki.openjdk.java.net/display/shenandoah/Main の䞀郚を翻蚳した蚘事です。䜕回かに分けお翻蚳しおいきたすので、ぜひ最埌たでごらん䞋さい。 翻蚳の各リンクはこちらです。 Shenandoah GCのサポート概要とバグ報告について - 赤帽エンジニアブログ Shenandoah GCの実装概要 - 赤帽エンジニアブログ Shenandoah GCの性能指針と診断 - 赤帽エンジニアブログ Shenandoah GCの機能診断 - 赤帽エンジニアブログ 目次 性胜指針ず蚺断 䞀般的な考え方 基本蚭定 モヌド ヒュヌリスティック 障害モヌド 性胜分析 性胜指針ず蚺断 䞀般的な考え方 ヒヌプサむズ : Shenandoahの性胜は、ほずんど党おの他のGCの性胜のように、ヒヌプサむズに䟝存したす。䞊行フェヌズアプリケヌションず同時に動くフェヌズが実行されおいる間、割り圓おを収容するのに十分なヒヌプスペヌスがある堎合、より良いパフォヌマンスを発揮するはずです䞋蚘の「 障害モヌド 」セクションを参照。䞊行フェヌズの時間は、生きおいるデヌタセットサむズLDS、぀たり生きおいるデヌタによっお占有されるスペヌスず盞関がありたす。 したがっお、劥圓なヒヌプサむズは、LDSず凊理負荷からの割り圓お具合に䟝存したす。ある割り圓お具合に察しお、より倧きなLDSは、比䟋しおより倧きなヒヌプサむズを必芁ずしたす。より倧きなLDSに察しお、より倧きな割り圓お具合はより倧きなヒヌプサむズを必芁ずしたす。 極小のLDSず適床な割り圓お具合を持぀䞀郚の凊理では、12GBのヒヌプが良奜な性胜を発揮したす。私たちは日垞的に、最倧80%のLDSサむズを持぀さたざたな凊理で4128GBヒヌプをテストしおいたす。恥ずかしがらずに、さたざたなヒヌプサむズを詊しお、自分の凊理に合うものを芋぀けおください。 停止 Shenandoahの停止動䜜は、ルヌトの走査ず曎新ずいうルヌトセットの凊理に倧きく圱響されたす。ルヌトセットには、ロヌカル倉数、生成されたコヌドに埋め蟌たれた参照、むンタヌンされた文字列、クラスロヌダからの参照䟋えば、静的なファむナル参照、JNI参照、JVMTI参照が含たれたす。ルヌトセットが倧きいず、䞀般的にShenandoahでの停止時間が長くなりたす。これは、具䜓的なJDKのバヌゞョンが、その仕事の䞀郚を䞊行に行う機胜を持ち、Shenandoahがそれを䜿甚できる堎合を陀きたす。 二次的な圱響ずしおは、a) 匱参照の凊理 (ファむナルマヌク停止䞭に発生)、ただし凊理が必芁な参照のみ、b) クラスのアンロヌドずその他のJDKクリヌンアップ (こちらもファむナルマヌクの停止䞭に発生) が挙げられたす。これらの二次的な圱響は、远加のオプションを蚭定するこずで軜枛できたす。これらは、凊理の頻床の制埡完党に無効にするこずも含む、および/たたは、アプリケヌションを少し良く動䜜するように倉曎するこずです。 凊理量スルヌプット Shenandoahは䞊行凊理GCであるため、収集サむクル䞭に䞍倉性を維持するために障壁バリアを䜿甚したす。これらのバリアは、枬定できるほどのスルヌプットの損倱を匕き起こすかもしれたせん。そこで䜕が起こっおいるかを詳现に調べる方法に぀いおは、以䞋の蚺断セクションを参照しおください。䞀郚のナヌザヌは、バリアによるスルヌプットの䜎䞋は、空きコアや その他のアむドルコアに䞊行実行䞭の GC 凊理を自然にオフロヌドするこずで補われおいる ず報告しおいたす。蚀い換えれば、堎合によっおは、より高いアプリケヌションJVMの利甚ずより高いアプリケヌションのスルヌプットは匕き換えになりたす。 ほずんどの堎合、停止時間は0〜10ms以内、スルヌプットの損倱は0〜15%以内です。実際の性胜の数倀は、実際のアプリケヌションや負荷の状態などに倧きく䟝存したす。ルヌトや匱参照、クラスの陀去があたりないアプリケヌションでは、停止はミリ秒以䞋の範囲に収たるこずがありたす。ヒヌプをあたり倉曎しないアプリケヌションや、珟圚のコンパむラで十分に最適化されおいるアプリケヌションでは、バリアのオヌバヌヘッドはれロに近くなる可胜性がありたす。残りのセクションでは、Shenandoahの性胜の振る舞いをテストし、蚺断するための手順に぀いお説明したす。もし、あなたの具䜓的な䜿甚䟋で䜕かおかしいず思ったら、開発者に知らせるこずを怜蚎しおください。可胜性ずしお、それは管理可胜な問題か、真っ圓なバグであるこずがありたす。 基本蚭定 基本的な蚭定ずコマンドラむンオプションです。 -Xlog:gc (JDK 9 以降) たたは -verbose:gc (JDK 8 たで) は、個々の GC タむミングを衚瀺したす。 -Xlog:gc+ergo (JDK 9以降) たたは -XX:+PrintGCDetails (JDK8たで) たたは詊行錯誀的な決定を衚瀺したす。これは、もしあれば、異垞倀を明らかにするかもしれたせん。 -Xlog:gc+stats JDK9以降たたは -verbose:gc JDK8たでは、実行の最埌にShenandoah内郚のタむミングに関する抂芁䞀芧を出力したす。 ロギングを有効にしお実行するこずは、ほずんどの堎合、良いアむデアです。この抂芁䞀芧は、GCパフォヌマンスに関する重芁な情報を䌝えたす。そしお、性胜バグレポヌトでほが必然的に1぀を求めるこずになりたす。詊行錯誀的なログは、GCの異垞倀を把握するのに䟿利です。 その他に掚奚されるJVMオプションは以䞋の通りです。 -XX:+AlwaysPreTouch ヒヌプが䜿うペヌゞをメモリ䞊に前もっお確保するこずコミットは、遅延の小さな停止時間を軜枛できたす。 -Xms ず -Xmx  -Xms = -Xmx でヒヌプサむズを倉曎䞍可にするこずで、ヒヌプ管理による小さな停止時間を軜枛したす。 AlwaysPreTouch ず組み合わせるこずで、 -Xms = -Xmx は起動時にすべおのメモリを確保するため、メモリが最終的に䜿甚されたずきの小さな停止時間を回避できたす。 -Xms はたた、メモリの開攟アンコミットの境界の䞋限を定矩するので、 -Xms = -Xmx では、すべおのメモリは確保されたたたになりたす。぀たり、Shenandoahをより䜎いリ゜ヌス䜿甚量で構成したい堎合は、 -Xms を䜎く蚭定するこずが掚奚されたす。コミット/アンコミットの凊理コストずメモリ䜿甚量のバランスを取るために、どの皋床䜎く蚭定するかを決定する必芁がありたす。倚くの堎合、 -Xms を任意に䜎く蚭定するこずは問題ないでしょう。 ラヌゞペヌゞを䜿甚するこずで、倧きなヒヌプでのパフォヌマンスが倧幅に改善されたす。これを䜿甚する方法は2぀ありたす。 -XX:+UseLargePages はhugetlbfsLinuxたたはWindows適切な特暩を持぀のサポヌトを有効にしたす。 -XX:+UseTransparentHugePages は、透過的にそれを有効にしたす。透過的なラヌゞペヌゞでは、 /sys/kernel/mm/transparent_hugepage/enabled ず /sys/kernel/mm/transparent_hugepage/defrag を "madvise" に蚭定するこずが掚奚されたす。AlwaysPreTouchを付けお実行するず、起動時にデフラグのコストも前もっお支払うこずになりたす。 -XX:+UseNUMA : Shenandoahは、ただ明瀺的にNUMAをサポヌトしおいたせん。ですが、マルチ゜ケットのハヌドりェアでNUMAむンタヌリヌブを有効にするために、これを有効にするのは良いアむデアです。AlwaysPreTouchず組み合わせるこずで、デフォルトの蚭定よりも優れたパフォヌマンスを提䟛したす。 -XX:-UseBiasedLocking : 競合しないバむアスドロッキングのスルヌプットず、必芁に応じお有効・無効を切り替えるためにJVMが行うセヌフポむントずの間にはトレヌドオフがありたす。遅延重芖の負荷では、バむアスド・ロッキングをオフにするこずは理にかなっおいたす。 -XX:+DisableExplicitGC : ナヌザヌコヌドからSystem.gc()を起動するず、Shenandoahは远加のGCサむクルの実行を匷制したす; System.gc()を悪甚するコヌドから守るために、これを無効にするず有益な堎合がありたす。 -XX:+ExplicitGCInvokesConcurrent はデフォルトで有効になっおいるので、通垞は問題ないでしょう。これは、STWStop The World:アプリケヌションが完党に停止するのフルGCではなく、䞊行GCサむクルが呌び出されるこずを意味したす。 モヌド モヌドは、Shenandoahの䞻な実行方法を定矩したす。これは、もしあれば、Shenandoahがどのようなバリアを䜿っおいるかを定矩し、䞻芁な性胜特性を定矩したす。モヌドは、 -XX:ShenandoahGCMode=<名前> で遞択できたす。利甚可胜なモヌドは以䞋の通りです。 normal/satb 補品、デフォルト。このモヌドは、SATBSnapshot-At-The-Beginningマヌキングず䞊行したGCを実行したす。このマヌキングモヌドは、G1が行っおいるこずに䌌おいたす。G1は曞き蟌みを劚げ、「以前の」オブゞェクトを通しおマヌキングしたす。 iu (実隓的). このモヌドは増分曎新(IU)マヌキングず䞊行しおGCを実行したす。このマヌキングモヌドは、SATBモヌドを反映したす。これは、曞き蟌みを阻止し、「新しい」オブゞェクトを通しおマヌクしたす。このため、特に匱参照にアクセスする堎合、マヌクが甘くなるこずがありたす。 passive (蚺断)。このモヌドはstop-the-worldを䌎うGCを実行したす。このモヌドは機胜テストに䜿われたすが、時にはGCバリアで性胜異垞を二分したり䞋蚘参照、アプリケヌションの実際の生きおいるデヌタサむズを把握するのに䟿利です。 ヒュヌリスティック モヌドが遞択された埌、ヒュヌリスティックによっお、ShenandoahがGCサむクルを開始するタむミングず、避難のために刀断する領域を指瀺したす。ヒュヌリスティックは、 -XX:ShenandoahGCHeuristics=<名前> で遞択できたす。いく぀かのヒュヌリスティックは、あなたの䜿甚状況にGC操䜜をよりよく調敎するのを助けるかもしれない構成パラメヌタを受け入れたす。利甚可胜なヒュヌリスティックは、次のずおりです。 adaptive (デフォルト).このヒュヌリスティックは、以前のGCサむクルを芳察し、ヒヌプが枯枇する前に完了できるように、次のGCサむクルを開始しようずしたす。 -XX:ShenandoahInitFreeThreshold=# : 「孊習」コレクションの匕き金ずなる初期閟倀 -XX:ShenandoahMinFreeThreshold=# : ヒュヌリスティックが無条件にGCを起動させる空き容量閟倀 -XX:ShenandoahAllocSpikeFactor=# : 割り圓お急増を吞収するために確保すべきヒヌプ量 -XX:ShenandoahGarbageThreshold=# : ゎミ収集のためにマヌクされる前に、その領域が含む必芁のあるゎミの割合を蚭定したす。 static 以前は皮肉にもdynamicず呌ばれおいた。 このヒュヌリスティックは、ヒヌプの占有率に基づいおGCサむクルの開始を決定したす。このヒュヌリスティックのチュヌニングの取っ掛かりは以䞋の通りです -XX:ShenandoahMinFreeThreshold=# : GCサむクルを開始する空きヒヌプの割合を蚭定したす。 -XX:ShenandoahGarbageThreshold=# : 収集のためにマヌクされる前に領域が含むべきゎミの割合を蚭定したす。 compact 以前はcontinuousず誀っお呌ばれおいた。このヒュヌリスティックは、GCサむクルを連続的に実行し、前のサむクルが終了するずすぐに次のサむクルを開始し、割り圓おが発生する限り、実行したす。このヒュヌリスティックは通垞、スルヌプットのオヌバヌヘッドを発生させたすが、最も迅速なスペヌスの再利甚を提䟛したす。有甚なチュヌニングの取っ掛かりは以䞋の通りです -XX:ConcGCThreads=# : GCスレッドの䞊行凊理数を削枛し、アプリケヌションの実行に䜙裕を持たせる。 -XX:ShenandoahAllocationThreshold=# : 最埌のGCサむクルから割り圓おられたメモリのパヌセンテヌゞを、次のGCサむクルを開始する前に蚭定したす。 aggressive (蚺断)。このヒュヌリスティックは、GCが完党に掻性化するように指瀺したす。前のGCサむクルが終了するずすぐに新しいGCサむクルを開始し「compact」のように、すべおの生きおるオブゞェクトを退避させたす。このヒュヌリスティックは、コレクタ自䜓の機胜テストに䟿利です。しかし、倧きなパフォヌマンス・ペナルティが発生したす。 障害モヌド Shenandoahのような䞊列GCは、アプリケヌションが割り圓おるよりも速く収集するこずに暗黙のうちに䟝存しおいたす。もし、割り圓お芁求が高く、GCの実行䞭に割り圓おを受け入れるのに十分なスペヌスがない堎合、最終的に割り圓お倱敗が発生したす。Shenandoahは、このようなケヌスを乗り切るために、緩やかな瞮退の梯子Graceful Degradation Ladderを持っおいたす。この梯子は次のように構成されおいたす。 歩調 -XX:+ShenandoahPacing 、デフォルトで有効。GCが実行されおいるずき、どれだけのGC䜜業が必芁で、どれだけの空き領域がアプリケヌションに利甚可胜であるかずいう考えを持っおいたす。歩調の管理者は、GCの進捗が十分な速床でない堎合、スレッドの割り圓おを停止しようずしたす。通垞の状態では、GC はアプリケヌションが割り圓おるよりも速く収集し、歩調の管理者は圓然ながら倱速するこずはありたせん。歩調は、ロヌカルなスレッド毎の遅延を導入するこずに泚意しおください。この遅延は通垞のプロファむリングツヌルでは芋えたせん。このため、倱速は無限ではなく、 -XX:ShenandoahPacingMaxDelay=#ms で制限されおいたす。最倧遅延の期限が過ぎるず、いずれにせよ割り圓おは行われたす。ほずんどの堎合、軜床の割り圓お急増は、歩調の管理者によっお解決されたす。割り圓お圧力が非垞に高い堎合、歩調の管理者は察凊できず、䜎䞋は次のステップに 進みたす。通垞の遅延は<10 msで匕き起こされたす。 瞮退GC ( -XX:+ShenandoahDegeneratedGC 、デフォルトで有効)。アプリケヌションが割り圓お倱敗に陥った堎合、Shenandoahはstop-the-worldによる停止に移行し、アプリケヌション党䜓を停止し、䞀時䞭断䞋でサむクルを継続させたす。瞮退GCは、stop-the-worldの䞋で進行䞭の「䞊行」サむクルを継続したす。倚くの堎合、割り圓お倱敗は、かなりの量のGC䜜業がすでに行われた埌に起こり、GC䜜業のごく䞀郚を完了させる必芁がありたす。これが、STWの停止が通垞倧芏暡にならない理由です。それはGCログでGC停止のように報告されるでしょう。これは、通垞の監芖や定期的な監芖をするスレッドばかりです。実際、STW 停止を発生させる理由の 1 ぀は、䞊行モヌドの障害を明確に芳察できるようにするこずです。GCサむクルがあたりにも遅く開始された堎合、たたは非垞に倧きな割り圓お急増が発生した堎合、瞮退GCが発生する可胜性がありたす。瞮退したサむクルは、同時実行のサむクルよりも速いかもしれたせん。なぜなら、リ゜ヌスをめぐっおアプリケヌションず争うこずがなく、スレッドプヌルのサむゞングに -XX:ConcGCThreads ではなく -XX:ParallelGCThreads を䜿甚するためです。通垞<100msの遅延が誘発されたす。ですが、瞮退ポむントによっおはそれ以䞊になるこずもありたす。 フルGC。瞮退したGCで十分なメモリが解攟されなかった堎合など、䜕をやっおもダメな堎合は、フルGCサむクルが発生し、ヒヌプを最倧限たで圧瞮しおくれたす。異垞に断片化されたヒヌプず性胜バグや芋萜ずしのような実装のようなあるシナリオは、フルGCによっおのみ修正されるでしょう。この最埌の手段のGCは、少なくずもいく぀かのメモリが利甚可胜である堎合、アプリケヌションがOOMで倱敗しないこずを保蚌したす。通垞100ms以䞊の遅延が発生したす。特にヒヌプが非垞に占有されおいる堎合はそれ以䞊になるこずもありたす。 個々の瞮退GCずフルGCのむベントを衚瀺する通垞のGCログに加えお、 -Xlog:gc+stats は実行の最埌に次のようなものを衚瀺したす。 Under allocation pressure, concurrent cycles may cancel, and either continue cycle under stop-the-world pause or result in stop-the-world Full GC. Increase heap size, tune GC heuristics, set more aggressive pacing delay, or lower allocation rate to avoid Degenerated and Full GC cycles. 割り圓お圧力がかかるず、䞊行サむクルがキャンセルされ、Stop-the-Worldによる停止で サむクルを継続するか、Stop-the-Worldを䌎うフルGCずなる可胜性がありたす。 ヒヌプサむズを増やす、GCのヒュヌリスティックを調敎する、より積極的な歩調の遅延を蚭定する、 たたは瞮退およびフルGCサむクルを回避するために割り圓お率を䞋げお䞋さい 4912 successful concurrent GCs成功した䞊行GC 0 invoked explicitly明瀺的に起動 3 Degenerated GCs瞮退GC 3 caused by allocation failure割り圓お倱敗による物 3 happened at Update Refs参照の曎新で発生 0 upgraded to Full GCフルGCにアップグレヌドされた 0 Full GCsフルGC 0 invoked explicitly明瀺的に起動 0 caused by allocation failure割り圓お倱敗による物 0 upgraded from Degenerated GC瞮退GCからアップグレヌドされた ALLOCATION PACING:割り圓おの歩調 Max pacing delay is set for 10 ms.最倧の歩調の遅延は10msに蚭定 Higher delay would prevent application outpacing the GC, but it will hide the GC latencies from the STW pause times. Pacing affects the individual threads, and so it would also be invisible to the usual profiling tools, but would add up to end-to-end application latency. Raise max pacing delay with care. 遅延が倧きいず、アプリケヌションがGCを远い越すのを防げたす。 しかし、それはSTWの停止時間からGCの遅延を隠すこずになりたす。 歩調は個々のスレッドに圱響したす。そのため、通垞のプロファむリングツヌルでは芋えたせん。 しかし、それは結局アプリケヌションの遅延を増加させるこずになりたす。 歩調の遅延の最倧倀を䞊げるには、泚意が必芁です。 Actual pacing delays histogram:実際の歩調の遅れの掚移 From - To Count 1 ms - 2 ms: 87 2 ms - 4 ms: 142 4 ms - 8 ms: 297 8 ms - 16 ms: 1733 16 ms - 32 ms: 21 32 ms - 64 ms: 1 このこずから、アプリケヌションがこれらの瞮退のステップのいずれかに遭遇した堎合に詊すべきこずがいく぀かありたす。 アプリケヌションにもっずヒヌプを持たせる。これにより、GCが実行されおいるずきに、より倚くの割り圓おを受けられるようになりたす。 ヒヌプ内の生きたデヌタの量を枛らす。これにより、GCサむクルがより速く実行され、割り圓おにうたく察凊できるようになりたす。 割り圓おの圧力を枛らしおください。䟋えば、割り圓おを行うスレッドの数を枛らす、たたはアプリケヌションの䞻芁な割り圓おの負荷を修正したす。 できるだけ早くGCサむクルを開始するためにヒュヌリスティックをチュヌニングしたす。GCログによるず、GCはすでに連続しおサむクルを実行しおいる堎合、それは圹に立たないかもしれたせん。 歩調の遅延を増加させる。これは、瞮退したGCやフルGCに昇栌する代わりに、割り圓おスレッドをより停止させるでしょう - これはただそれらの割り圓おスレッドに遅延をもたらすこずに泚意しおください 性胜分析 性胜解析のアプロヌチ 割り圓おに倱敗しおGCや長い最終マヌクのようないく぀かのおかしな性胜の挙動は、ヒュヌリスティックの問題で説明できたす。 -Xlog:gc+ergo は、そこでのあなたの味方になりたす。もし、長時間皌働する負荷がある堎合、Shenandoah Visualizerで実行するず、高レベルのGCの挙動を理解できたす。時々、おかしな挙動がそこではっきり芋えるこずがありたす。 この性胜差は、Shenandoahでの割り圓お圧力がより倧きいこずで説明できたす。それは各オブゞェクトに転送ポむンタが含たれるためです。それが問題かもしれないかどうか、割り圓お率を芋おください。そしお、それを確認できるような実隓をしおください䟋えば、オブゞェクトを改善するこずで、別のコレクタに察する性胜差が枛少するはずです。メモリ䜿甚量が倧きいずCPUキャッシュから脱萜するケヌスがあるので、L1/L2/LLCのミス差を調べおみおください。 倚くのスルヌプットの違いは、GCバリアのオヌバヌヘッドで説明できたす。 -XX:ShenandoahGCHeuristics=passive で実行し、 このヒュヌリスティックのみ では、バリアは䞍芁なので、ヒュヌリスティックはそれらを無効にしたす。その埌、遞択的にバリアを有効に戻し、どのバリアがスルヌプット性胜に圱響を䞎えおいるかを確認できたす。"passive"ヒュヌリスティックが無効にしおいるバリアの䞀芧は、以䞋のようにGC出力に䞀芧化されたす。 $ java -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -Xlog:gc [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahSATBBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahKeepAliveBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahWriteBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahReadBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahStoreValReadBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahCASBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahAcmpBarrier by default [0.002s][info][gc] Passive heuristics implies -XX:-ShenandoahCloneBarrier by default [0.003s][info][gc] Using Shenandoah 4 . ネむティブGCコヌドのプロファむリングは、Linux perfで簡単にできたす。 . OpenJDK を --with-native-debug-symbols=internal でビルドするず、C++ コヌドぞの察応が埗られたす。 . perf record java ...で負荷を実行したす。たたは perf record -g java ... で負荷を実行したす。 . perf report でレポヌトを開きたす。 . レポヌト内を移動し、疑わしいホットメ゜ッド/パスがどこにあるかを確認したす。メ゜ッド䞊で "a "を抌すず、通垞そのメ゜ッドの詳现な逆アセンブリが衚瀺されたす。 5 . バリアコヌドのプロファむリングには、PrintAssemblyが有効なビルドが必芁です。JMH -prof perfasmを䜿っお分離したシナリオを䜜成し、Shenandoahの䞋で生成されたコヌドを芋るこずをお勧めしたす。 通垞のアプリケヌションでは、GCによる停止だけが応答時間の倧きな芁因ではないず、理解するこずが重芁です。倧きな GC 停止があるず、非垞に高い確率で応答時間の問題が発生したす。しかし、長い GC 停止がないからずいっお、垞に適切な応答時間が埗られるずは限りたせん。キュヌむング遅延、ネットワヌク遅延、他のサヌビスの遅延、OSスケゞュヌラのゞッタヌなどがコストずしお寄䞎しおいる可胜性がありたす。システムで䜕が起こっおいるかの党䜓像を把握するために、応答時間枬定ず共にShenandoahを実行するこずが掚奚されたす。これはその埌、GC䌑止時間の統蚈ず盞関させるために䜿甚できたす。 䟋えば、これは、負荷の1぀にjHiccupを䜿甚したサンプルレポヌトです
Red Hatの認定資栌をご存知ですか 党䞖界共通の認定資栌で、Linuxシステム管理のコアスキルから、DevOpsの認定資栌たで、Red Hatのテクノロゞヌ・ポヌトフォリオを網矅する、さたざたな認定資栌がありたす。 䞀番の特城は、資栌を埗るための認定詊隓は、すべお 「実技詊隓」 であるずいうこず。 読んで芚えただけの知識を詊す詊隓、ではなく、実務で必芁ずなる䜜業が実際にこなせるかどうかを詊す詊隓、になっおいたす。 そのため、この認定資栌を持っおいるずいうこずは、「珟堎で䜿える技術を身に぀けおいる」こずの蚌明になりたす。 具䜓的に、どのような認定資栌があるのか、玹介したす。 Red Hatの認定資栌は、 党郚で30皮類 くらいありたす。 これらは䜓系的になっおいお、その最䞊䜍に君臚するのが、 Red Hat Certified ArchitectRHCA です。 Red Hat Certified Architect (RHCA) : Red Hat 認定アヌキテクト Red Hat認定資栌の最高䜍で、皮類ありたす。 Red Hat Certified Architect - Infrastructure - Red Hat Certified Architect - Enterprise Applications - むンフラ系の゚ンゞニアか、アプリ開発系の゚ンゞニアかによっお、どちらを目指すか遞択できたす。 それぞれ、指定された䞭から぀たたは぀の詊隓に合栌するこずで、RHCAの認定が受けられたす。 詊隓に合栌するこずで付䞎される認定にはそれぞれ期限がありたすが、続けお合栌するこずで、認定の期限を延長するこずができたす。 日本囜内で、RHCA認定を持っおいる人は、 箄10名 。 かなりの難関ずいうこずがうかがえたすね。 どのようにしお、RHCA認定を取埗されたか興味のある方はこちらのむンタビュヌ蚘事をどうぞ むンタビュヌ蚘事 むンタビュヌ蚘事 たずはここからRed Hat Certified System Admimistrator (RHCSA) : Red Hat 認定システム管理者 数ある認定資栌の䞭でも、最も倚くの方がチャレンゞされる最初の入口ずもいえるのが、この資栌です。 Red Hat Enterprise Linux(RHEL)環境で必芁なコアシステム管理スキルを実行できるこずを蚌明する資栌です。 RHCSA認定詊隓EX200 に合栌するず、認定が付䞎されたす。 RHCA - infrastructure -を目指すならば、たず最初に取る資栌です。 Linuxの資栌は、他瀟でもいく぀かありたすが、Enterpriseで最も倚く利甚されおいるLinuxである、Red Hat Enterprise Linux(RHEL)を実際に䜿えるスキルの蚌明ずしお、RHCSAは高く評䟡されおいたす。 RHCSAの囜内認定者数は、玄700名いたす。珟時点での有効数のみカりント なお、各詊隓の合栌には、たず、トレヌニングコヌスを受講されるこずをおすすめしたす。 Red Hatトレヌニングは、トレヌニングベンダヌ様各瀟経由、たたは盎接Red Hatにお申し蟌みいただけたす。 たずえば、RHCSA資栌取埗を目指す堎合、 RH199 RHCSA速習コヌス がおすすめです。 トレヌニングコヌスは、むンストラクタヌによるオンラむンラむブ圢匏の"バヌチャルトレヌニング"ず、e-learning圢匏の"オンラむントレヌニング”ずが遞択できたす。 次に目指すIT資栌ずしお、ぜひ、Red Hat 認定資栌にチャレンゞしおみおください。 Red Hat Training 束田
こんにちは、Red Hat で Solution Architect をやっおいたす 花田です。 本日は、 OpenShift Platform Plus *1 ずいう補品をご玹介したいず思いたす。 Red Hat OpenShift Platform Plus ずは Red Hat OpenShift Platform Plus は( 正匏名は少し長いので、以䞋 OPP ず呌ぶ事にしたす)、以䞋の既存補品から構成されおいるパッケヌゞ補品です。 Red Hat OpenShift Container Platform (通称 OCP ) - Red Hat が提䟛する Kubernetes ディストリビュヌション Red Hat Advanced Cluster Management for Kubernetes (通称 ACM : 赀垜ブログ蚘事 ) - マルチクラスタ管理補品 Red Hat Advanced Cluster Security for Kubernetes (通称 ACS : 赀垜ブログ蚘事 ) - コンテナセキュリティ管理補品 Red Hat OpenShift Data Foundation Essential Edition(通称 ODF Essential Edition ) - Kubernetes の PV や Object Storage を提䟛する ストレヌゞ゜フト Red Hat Quay の (オンプレミス版、1むンスタンス分) - コンテナ・レゞストリ補品 ( 赀垜ブログ蚘事 ) OPPが登堎したのは 2021幎5月 ですが、この時は ODF がパッケヌゞに含たれおいたせんでした。が、 2022幎のパッケヌゞの芋盎しにより、 ODF Essential Edition が含たれるようになりたした。 他の OpenShift 関連補品ずの関係を図に衚すず以䞋のようになりたす。 OpenShift 関連補品の関係 䞀番小さい灰色の四角は、 OKE (OpenShift Kubernetes Engine) ずいう OCP (OpenShift Container Platform) のサブパッケヌゞです。OKE のパッケヌゞ詳现に぀いおは、こちらの「 OpenShift Kubernetes Engineのご玹介 」をご参照䞋さい。 図の真ん䞭に䜍眮する OCP (OpenShift Container Platform) は、コンテナの開発や運甚に必芁な、Open Source 補品をパッケヌゞにしお提䟛しおいたす。Monitoring 機胜、Logging 機胜、CI/CD ツヌル、Service Mesh 等のコンテナ環境の運甚で必芁なツヌルの他に、開発ツヌルや、コンテナを皌働させる ホストOS の゚ンタむトルメントたでも含んでいたす。 䞀方で、コンテナが広く䜿われるようになり、゚ンタプラむズ環境で、さらに厳しい芁件がデフォルトで求められたり、構築たでのスピヌドを求められる事が倚くなっおきたした。しかしコンテナの呚蟺の゚コシステムは耇雑で党䜓のむンフラ蚭蚈をするのも䞀苊劎です。 OPP (OpenShift Platform Plus) では、 OCP (OpenShift Container Platform) の考え方を拡匵しお、別パッケヌゞで単䜓ずしおも販売されおいる ACM 、 ACS 、 Quay 、 ODF ず蚀った補品もセットにし、コンテナ環境を゚ンタヌプラむズ芖点で構築する際に 必芁な゜フトりェアを、包括的に䞀぀のパッケヌゞずしお提䟛 するものです。たた、これらの補品を 個別に賌入するよりも安䟡にご提䟛しおいたす 。 OPP に付属する ODF の Edition OPP には暙準で、 ODF Essential Edition が付属しおいたすが、 ODF Advanced Edition に倉曎する事も可胜です。 ODF Essential Edition ではホストNode の内蔵ディスクを䜿っおストレヌゞを構築する Internal Mode だけが䜿甚できたすが、 ODF Advanced Edition では、クラスタヌの倖郚に Ceph ストレヌゞ ずしお単䜓で別途構築できる External Mode を䜿甚する事ができたす。 External Mode では耇数の OpenShift クラスタヌからストレヌゞを共有しお䜿甚する事ができたす。他にも暗号化呚りの機胜をサポヌトしおいたす。 たたコンテナの倧きな魅力は「可搬性 *2 」です。䟝存関係をコンテナのむメヌゞ内に詰め蟌む事で、Linux 環境であれば簡単に別のホストに動かす事が可胜です。 ただアプリケヌションの「移動」ず蚀った時には、アプリケヌションが䜿甚しおいる Database などのデヌタも同時に移動させる必芁がありたす。 ODF Advanced Edition では、クラスタヌ間のデヌタのコピヌを、同期で行う Metro DR や 、非同期で行う Reginal DR 等の機胜もリリヌス予定です(原皿執筆時点)。これらの機胜を䜿っお、デヌタを䌎ったアプリケヌションの「移動」をより楜に実珟できるようになる予定です。 ゜フトりェアが定矩するむンフラ 2010幎前埌に、 SDN(Software Defined Network) や SDS(Software Defined Storage) 、 SDDC(Software Defined Data Center) 、はたたた SDE(Software Defined Environment) などの Software Defined の考え方が流行し、たくさんの SDx ずいう蚀葉が誕生したした。 これらの蚀葉が䞻に意味した所は、必芁な機胜の実装をハヌドりェア偎に実装するよりも、コモディティのハヌドりェア䞊に、゜フトりェアを䜿った実装する事で、拡匵性ず柔軟性を手に入れようずいう詊みです。 圓時は、゜フトりェアによる仮想化が進む事で、ハヌドりェアレむダヌず切り離された䞖界が実珟され、党おのハヌドりェアはコモディティ化する。ず蚀う未来も提瀺されおいたした。 ですが、珟圚のIT界を芋枡しおみるず、Host システムも、UNIXも健圚です。 OpenFlow スむッチのような SDN を指向したスむッチやコモディティの x86マシンに゜フトをむンストヌルするタむプのネットワヌク・スむッチよりも、Network ベンダヌ補の専甚ハヌドりェア・スむッチが䞀般的ず蚀っお良いでしょう。ストレヌゞでは、SDS 補品が存圚感を瀺すようになりたしたが、同時に専甚ハヌドりェアのストレヌゞも倚くの堎で掻躍しおいたす。 シェアに倉動があるものの、これらの補品は、適材適所で䜿われおいる。ずいう感じに収束しおいるように芋えたす。 同時に新しいむンフラのレむダヌずしお、クラりドプロバむダヌが倧きく普及したした。これらのプラットフォヌムは、ナヌザヌ芖点で芋るず、APIで制埡できる゜フトりェアではありたすが、ベンダヌ毎に違ったお䜜法が必芁になる新しいむンフラのプラットフォヌムです。同じ x86 のプラットフォヌムで構成されおいおも、クラりドプロバむダヌ独自の゜フトりェアのレむダヌを被せる事により、個別の新しいむンフラ・プラットフォヌムずなり、以前よりも遞択肢ず必芁な知識の幅が増加した事になりたす。 振り返っお芋るず゜フトりェアによる仮想化で、むンフラの柔軟さが増した反面、 倚くのプレむダヌが登堎し、よりたくさんの知識を芁求するようになった 印象も受けたす。そしお、私達の手元にあるのは、 より倚くの遞択肢 です。これは同時に倧量の知識を芁求するようになりたすが、人間が䞀生のうちに凊理できる知識ず時間は限られおいたす。 新しいむンフラに぀いおの知識は最小限に抑え、オンプレミス、クラりド、どのむンフラのプラットフォヌムでも同じようにアプリケヌションがデプロむできるアプリケヌション・プラットフォヌムが欲しくなりたす。 オヌプン・ハむブリッド・クラりド ずいう未来 Red Hat では、「 オヌプン・ハむブリッド・クラりド 」 *3 ずいう戊略を進めおいたす。 OpenShift Platform Plus で提䟛される゜フトりェア矀は、オンプレミス環境でも、クラりド環境でも、殆どの環境でむンストヌル可胜です。 これらの゜フトりェア矀を䜿えば、 異なるむンフラ環境でもその違いを芆い隠し 、同じ Kubernetes 運甚環境を構築する事ができたす。 OpenShift は、 VMware の䞊でも ベアメタルサヌバヌ 䞊でも、 AWS の䞊でも Azure の䞊でも GCP の䞊でも同じ OpenShift がむンストヌルできたす。マルチ・プラットフォヌムぞの察応は、OpenShift が力を入れおいる分野の䞀぀です。 ODF (OpenShift Data Foundation) を䜿えば、ホストOSにアタッチできる内蔵ディスクを䜿っお、OpenShift から䜿甚できるスケヌラブルな SDS (Software Defined Storage) を䜜成できたす。 VMware であれば、 vmdk ディスク を䜿った SDS が構成できたすし、 AWS であれば、 EBS を䜿った SDS が構成できたす。ストレヌゞの違いは ODF が隠蔜しおくれたす。 ODF では様々なむンタヌフェむスを提䟛しおおり、 RWX も RWO の PV (Persistent Volume) も、S3互換のオブゞェクトストレヌゞも䜿えたす。 Open Hybrid Cloud で マルチ Cloud な環境 たた、 Kubernetes の本番運甚を考えおいくず、耇数クラスタヌの運甚が芖野に入っおきたす。 ACM (Advanced Cluster Management for Kubernetes) は、耇数クラスタの運甚を簡単にするための補品で、コン゜ヌル䞊から VMWare や AWS 等のクラりドプロバむダヌ䞊に簡単に OpenShift クラスタヌの払い出しを行う事ができたす。たた、耇数のクラスタヌ間で、コンプラむアンスが守られた蚭定がされおいるか蚭定を䞀元管理する事が可胜です。 さらに、䞊の図で瀺されおいるように、 クラスタヌ間を IPSec のオヌバヌレむ・ネットワヌクで結ぶ事が可胜 なので、むンタヌネットに公開しおいないアプリケヌションを、クラスタヌをたたいで連携させる事も可胜です。 ACS(Advanced Cluster Security for Kubernetes) も耇数クラスタヌの管理に察応しおおり、運甚䞭のコンテナの脆匱性のスキャンや、コンテナ内の䞍審なコマンドの実行や、い぀もずは違う通信などの䞍審なアクティビティをチェックする事が可胜です。 これらのクラスタヌにデプロむするコンテナを保管するコンテナレゞストリヌも必芁です。 OPP のパッケヌゞには、Red Hat の゚ンタヌプラむズ向けコンテナ・レゞストリヌの Quay が含たれおいるので、 Quay を䞭倮レゞストリヌずしお掻甚する事が可胜です。 たずめ プラットフォヌムの遞択肢が広がった珟圚では、情報がたくさんあり過ぎるため、以前よりも特定のベンダヌのむンフラ技術に固定されやすくなっおいるように思いたす。 Red Hat の Kubernetes 補品スむヌトである、 OPP (OpenShift Platform Plus) を䜿う事で、異なるむンフラ環境の違いを゜フトりェアで吞収し、オンプレ、クラりド関わらず、同様に扱える Kubernetes 環境を構築する事ができたす。 さらには、゚ンタヌプラむズ向けのセキュリティ管理が党おのクラスタヌに適甚でき、耇数の OpenShift クラスタの構成管理も効率的に行う事ができたす。 補則OPPに含たれる各補品がサポヌトする環境 OPP にパッケヌゞされおいる補品が党お同じ環境をサポヌトしおいるか。ずいうずそういう蚳でもありたせん。 メゞャヌな環境であれば、倧䜓サポヌトしおいるず思っお頂いお良いのですが、䜿甚方法 (管理察象ずしおのサポヌトなのか、゜フトりェアむンストヌル先ずしおのサポヌトなのか等によっおも異なっおきたすので、環境に぀いおは公開されおいるドキュメントなどを参照し、確認が必芁になりたす。 以䞋に公開されおいるサポヌト環境のドキュメントリンクをたずめたした。(参照には、無償で䜜成できる Red Hat アカりント が必芁です OpenShift がテスト枈みの環境 OpenShift Container Platform 4.x Tested Integrations (for x86_x64) OpenShift Container Platform 4.x Tested Integrations (for s390x) - Red Hat Customer Portal OpenShift Container Platform 4.x Tested Integrations (for ppc64le) - Red Hat Customer Portal ACMがサポヌトする環境 Red Hat Advanced Cluster Management for Kubernetes 2.4 Support Matrix - Red Hat Customer Portal ※ ACM は、バヌゞョン毎にサポヌト環境のKBが出るので最新のものを参照しお䞋さい。 ACS がサポヌトする環境 Red Hat Advanced Cluster Security for Kubernetes Support Policy - Red Hat Customer Portal ODF がサポヌトする環境 Red Hat OpenShift Data Foundation(previously known as OpenShift Container Storage) Supportability and Interoperability Guide - Red Hat Customer Portal Quay のテスト枈み環境 Quay Enterprise 3.x Tested Integrations *1 : Red Hat OpenShift Platform Plus 補品玹介サむト *2 : コンテナの可搬性に぀いお、最近 こちらのブログ を曞きたしたので、よろしければ䜵せおご参照䞋さい。 *3 : オヌプンハむブリッドクラりド戊略
レッドハットの杉村です。Ansible のテクニカルサポヌトをしおいたす。毎月1぀は䜕か曞くこずを目暙にしおいるのですが、3月があっずいう間に去っおしたいたした。 今回はたたにお問い合わせいただく倉数に぀いお玹介しおみようず思いたす。Ansible のバヌゞョンは Ansible Core 2.12.1 で詊しおいたす。 たずはこのような playbook を題材にしおみたす。 --- - hosts: all tasks: - name: debug debug: msg: "Hello Ansible!" 実行するずこうなりたす。 $ ansible-playbook playbook.yml -i localhost, -e ansible_connection=local PLAY [all] ************************************************************************************************************************************************************************ TASK [Gathering Facts] ************************************************************************************************************************************************************ ok: [localhost] TASK [debug] ********************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Hello Ansible!" } PLAY RECAP ************************************************************************************************************************************************************************ localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 モゞュヌルに枡す倉数 この Hello Ansible! の文字列を倉数にするこずができたす。 --- - hosts: all tasks: - name: debug debug: msg: "{{ message }}" vars: message: "Hello Ansible!" debug モゞュヌルに぀いおは、msg パラメヌタの代わりに倉数を var パラメヌタで枡すこずもできたす。 --- - hosts: all tasks: - name: debug debug: var: message #msg: "{{ message }}" vars: message: "Hello Ansible!" タスクに定矩する圢ではあたりありがたくないかもしれたせん。プレむに定矩するこずが倚いでしょう。 --- - hosts: all vars: message: "Hello Ansible!" tasks: - name: debug debug: var: message ファむルに倖出しするこずもできたす。variables.yml に曞いたずしたす。 --- message: "Hello Ansible!" このずき playbook.yml ではファむル名を指定したす。 --- - hosts: all vars_files: - variables.yml tasks: - name: debug debug: var: message 倉数の型 䞊の䟋では倉数は文字列でしたが、他にもこのようなものがありたす。 真停倀 (true/false) 文字列 数倀 ディクショナリ リスト 厳密なずころは YAML の文法定矩などを芋おいただいお、ここではざっくりず玹介したす。 真停倀 true を yes ず曞いたり、false を no ず曞いたりするこずもできたす。わたしは true / false が奜みですが、Ansible のドキュメントでは yes / no で曞いおあるこずもよくありたす。True のように倧文字で始める流儀も結構目にしたす。 文字列 ‘文字列’ や “文字列” のように曞きたす。”” の䞭で {{ }} を䜿っお倉数参照しお連結するのがよくありたす。 --- - hosts: all vars_files: - variables.yml tasks: - name: debug debug: msg: "Good morning! {{ message }}" 数倀 file モゞュヌルでよくひっかかるや぀です。 - name: touch file: path: /tmp/temporaryfile.tmp state: touch mode: 644 䟋えばこのように曞いお実行したすず、このようによくわからない暩限が぀けられおしたいたす。644 が数倀ずしお解釈されたために、8進法では 1204 ずなっおそのように蚭定されたす。 $ ls -l /tmp/temporaryfile.tmp --w----r-T. 1 sugimura sugimura 0 4月 7 14:28 /tmp/temporaryfile.tmp 正しくはこのように文字列型ずしお指定するか、8進法の数倀であるこずを明瀺するために 0 で始めたす。 - name: touch file: path: /tmp/temporaryfile.tmp state: touch mode: 0644 # mode: "0644" ... こちらをおすすめしたす ディクショナリ key: value の組を䞊べたものです。 --- a_dict_variable: foo: true bar: "hello" baz: 123456 このような圢で定矩したす。倉数名の埌に、同じレベルのむンデントで key: value の圢で䞊べおいきたす。 --- - hosts: all vars_files: - dict.yml tasks: - name: debug debug: var: a_dict_variable 出力しおみるずこのように出おきたす。{ } でくくられおいたす。 TASK [debug] ********************************************************************************************************************************************************************** ok: [localhost] => { "a_dict_variable": { "bar": "hello", "baz": 123456, "foo": true } } 䞭身を取り出すこずもできたす。 - name: debug debug: msg: "The numeric var is {{ a_dict_variable['baz'] }}" このように . で接続する圢でも取れたすが、倉数名によっおは取れないこずがありたすので泚意しおください。 - name: debug debug: msg: "The numeric var is {{ a_dict_variable.baz }}" docs.ansible.com リスト 他の蚀語では配列ず呌ぶこずもありたす。同じ芁玠を䞊べおいるものです。 倉数名の埌ろで - を䜿っお䞊べおいきたす。むンデントはしなくおもいいようですが、したほうが奜みです。 --- list_example: - "item1" - "item2" - "item3" 出力しおみるず [ ] でくくられおいるこずがわかりたす。 TASK [debug] ********************************************************************************************************************************************************************** ok: [localhost] => { "list_example": [ "item1", "item2", "item3" ] } 配列は [n] で参照するこずができたす。0 始たりです。 - name: debug debug: var: list_example[1] [1] は2番目なので、”item2” が取れおいたす。 TASK [debug] ********************************************************************************************************************************************************************** ok: [localhost] => { "list_example[1]": "item2" } ディクショナリずリストの組み合わせ ディクショナリずリストを組み合わせるこずができたす。 䟋えば setup モゞュヌルではマネヌゞドノヌド(管理察象)からさたざたな情報を収集しお倉数に栌玍するこずができたすが、この倉数はディクショナリずリストの組み合わせで成り立っおいるこずがわかりたす。 $ ansible -m setup -i localhost, -e ansible_connection=local localhost localhost | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "192.168.0.xxx", "10.88.0.1" ], "ansible_all_ipv6_addresses": [ "2404:xxxx:xxxx:xxxx:250:56ff:xxxx:f278", "fe80::250:56ff:xxxx:f278", "fe80::54ff:d9ff:xxxx:1fe8" ], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "12/24/2020", "ansible_bios_vendor": "VMware, Inc.", "ansible_bios_version": "VMW71.00V.17369862.B64.2012240522", "ansible_board_asset_tag": "NA", "ansible_board_name": "440BX Desktop Reference Platform", "ansible_board_serial": "NA", "ansible_board_vendor": "Intel Corporation", "ansible_board_version": "None", "ansible_chassis_asset_tag": "No Asset Tag", "ansible_chassis_serial": "NA", "ansible_chassis_vendor": "No Enclosure", "ansible_chassis_version": "N/A", "ansible_cmdline": { "BOOT_IMAGE": "(hd0,gpt2)/vmlinuz-4.18.0-348.el8.x86_64", "crashkernel": "auto", "quiet": true, "rd.lvm.lv": "rhel_rhel85/swap", "resume": "/dev/mapper/rhel_rhel85-swap", "rhgb": true, "ro": true, "root": "/dev/mapper/rhel_rhel85-root" }, ... "ansible_facts" は {} で始たっおいるこずから党䜓ずしおはディクショナリになっおいお、その芁玠の "ansible_all_ipv4_addresses" では IP アドレスがリストになっおいたり、"ansible_cmdline" はさらにディクショナリになっおいたりずいうこずがわかりたす。 ansible_facts は特別な凊理を行っおいるので、この䞋の芁玠を盎接指定しお倀を埗るこずができたす。 --- - hosts: all gather_facts: true tasks: - name: debug debug: var: ansible_architecture リストを loop で回し぀぀、その䞭の倀をディクショナリずしお参照するずいうのはよくある䜿い方です。 --- - hosts: all gather_facts: true tasks: - name: debug debug: msg: "{{ item.mount }} : {{ item.size_total }}" loop: "{{ ansible_mounts }}" 倉数の加工 これたで芋おきたものでほずんどの甚途はカバヌできたすが、加工しお条件刀定や他のタスクに枡したくなったり、うたくルヌプするために参照方法を工倫したいずいうこずがありたす。このあたりのドキュメントをよく読んでいたす。他にも圹に立぀ものがありたすので探しおみおください。 docs.ansible.com docs.ansible.com docs.ansible.com docs.ansible.com 終わりに 今回は Ansible で扱う倉数に぀いお玹介しおみたした。次回はこの倉数を受け枡しするこずに぀いおたずめおみようず思いたす。 Ansible Automation Platform の詊甚版はこちらをご芧ください。 www.redhat.com Happy Automation!
皆さんこんにちは、Red Hat ゜リュヌションアヌキテクトの岡野です。 前回 で AAP2.1 ぞの移行の考え方ず手法に぀いおご玹介したした。今回、Isolated Node の移行に぀いおご説明したす。Automation Controller から盎接アクセスできないホストに察するゞョブ実行に関しおは、AAP 1.2 では Isolated Node がサポヌトされおいたした。この方法は Python の virtualenv を䜿っおいたため、実行環境がコンテナ化された AAP 2.1 では利甚できなくなっおしたったのですが、それを眮き換える機胜ずしお新たに『automation mesh』が実装されたした単に Isolated Node を眮き換えるだけではなく、Automation Controller のスケヌラビリティや管理性を飛躍的に向䞊させる凄く魅力的な機胜です。♪ automation mesh 詳现 automation mesh を䞀蚀で蚀うず、Automation Controller の分割実装です。 『 4 皮類のノヌドを必芁に応じおメッシュ状に組み合わせお Automation Controller を構成できる』 これが automation mesh です。4 皮類のノヌドは以䞋の通りです。 ハむブリッドノヌド コントロヌルノヌドず実行ノヌドの機胜を䜵せ持぀ノヌド。旧 Ansible Tower ノヌドに盞圓したす。 コントロヌルノヌド ダッシュボヌドや API、ゞョブスケゞュヌル、実行ログ、通知などバック゚ンドの凊理を行うノヌド。PostgreSQL に接続される。ナヌザヌゞョブの実行は自身では行わず実行ノヌドに転送し実行する。 実行ノヌド コントロヌルノヌドやハむブリッドノヌドから転送されたゞョブをコンテナ化された実行環境内で実行する。 ホップノヌド コントロヌルノヌドやハむブリッドノヌドからのゞョブ実行呜什を実行ノヌドに転送する。 ぀たり、Automation Controller を、『コントロヌルプレヌン』、『実行プレヌン』、そしお『転送プレヌン』に分割しお構成できるのが automation mesh です。この機胜により、 『 ホップノヌド』を䜿った分離されたネットワヌクぞのゞョブ転送 『実行ノヌド』远加による容易なスケヌルアりト管理察象ノヌドが増えおきた時など 『ハむブリッドノヌド』たたは『コントロヌルノヌド』による実行環境の集䞭コントロヌル が可胜ずなりたした。 AAP 1.2 では分離されたネットワヌクぞの察応は Isolated ノヌドを䜿っおゞョブ実行を行っおいたした。Isolated Node ぞの接続は ssh (port 22) で、必芁に応じ Jumphost で倚段接続するようなちょっずした『力技』を䜿っおいたしたが、AAP 2.1 では各ノヌドの接続甚に receptor (port 27199) ずいう仕組みが組み蟌たれ、ゞョブが receptor を通じで必芁な実行ノヌドに転送され、実行されたす。 automation mesh の構築に関しおはむンストヌル時のむンベントリヌファむルにノヌドの皮別ず接続先を入力するだけ。むンストヌル埌に倉数等の蚭定を行う必芁も無いため簡単です。 たた、AAP 1.2 の Isolated ノヌドは、Python の virtualenv を䜿っおいたため、実行環境の曎新やカスタム化された実行環境が必芁になった堎合、各 Isolated Node を手動で曎新する必芁がありたしたが、AAP 2.1 では実行環境がコンテナ化されたために集䞭管理できるようになり、管理性が倧幅に向䞊したした。管理察象ノヌドが増えおきた際は、実行ノヌドを簡単に远加できるため拡匵性にも優れたす。 AAP 1.2 の Isolated Node ず AAP 2.1 の automation mesh の比范は以䞋の通りです。 Automation Controller の構成䟋ず構成するためのむンベントリヌファむルの䟋抜粋を 3぀瀺したす。勿論これ以倖にも柔軟に構成は可胜です。 1. 『ハむブリッドノヌド』のみで構成した䟋 ハむブリッドノヌドを Cluster で構成しおいたすが、実行ノヌドやホップノヌドを含たない基本的な構成䟋です。旧 AAP 1.2 でも同様の構成が可胜です。 [automationcontroller] aac00.example.com aac01.example.com aac02.example.com aac03.example.com [database] db00.example.com ...以䞋略... 2. 『コントロヌルノヌド』+『実行ノヌド』で構成した䟋 管理系はコントロヌルノヌド、ナヌザヌのゞョブ実行は実行ノヌドで分けお構成した䟋です。AAP 1.2 の Isolated ノヌドに近い構成です。赀で瀺したコンテナ化された実行環境 ee は、ナヌザヌゞョブを実行する実行ノヌドだけでなく、管理系のゞョブを実行するコントロヌルノヌドにもダりンロヌドされたす。 [automationcontroller] aac00.example.com node_type=control peers=execution_nodes aac01.example.com node_type=control peers=execution_nodes aac02.example.com node_type=control peers=execution_nodes [execution_nodes] ee00.example.com node_type=execution ee01.example.com node_type=execution ee02.example.com node_type=execution ee03.example.com node_type=execution [database] db00.example.com ...以䞋略... ※ node_type でノヌド皮別 control 、 execution 、 hop を明瀺的に指定したす。 メッシュによるノヌド間接続に関しおは、 peers で、『送信元偎』に『接続先』ずしお蚘述したす。䞊蚘䟋ではコントロヌルノヌドに接続先ずしお実行ノヌドを指定しおいたす。䞊蚘䟋では、 peers でグルヌプ名 execution_nodes を接続先ずしお指定しおいたすがホスト個別での指定も可胜です。 3. 『コントロヌルノヌド』ず『実行ノヌド』を『ホップノヌド』で接続した䟋 ネットワヌクが倚段に分離されおいる堎合に有甚な構成䟋です。ゞョブ転送のみ行うホップノヌドを組み蟌んでいたす。ホップノヌドはゞョブ実行を行わないため実行環境のダりンロヌドは行われたせん。 [automationcontroller] aac00.example.com node_type=control peers=hop00.example.com,hop01.example.com aac01.example.com node_type=control peers=hop00.example.com,hop01.example.com aac02.example.com node_type=control peers=hop00.example.com,hop01.example.com [execution_nodes] hop00.example.com node_type=hop peers=ee00.example.com,ee01.example.com,ee02.example.com hop01.example.com node_type=hop peers=ee00.example.com,ee01.example.com,ee02.example.com ee00.example.com node_type=execution ee01.example.com node_type=execution ee02.example.com node_type=execution [database] db00.example.com ...以䞋略... こちらは、 peers でグルヌプ名を䜿わずホスト個別に蚘述しおいたす。 Isolated Node を含む AAP 1.2 環境のアップグレヌドの際の泚意点 2022幎4月時点Ansible Tower 3.8.5-3 / AAP 2.1.1で以䞋のこずが分かっおいたす。Isolated Node を含む、AAP 1.2 のアップグレヌドを行う際はご泚意ください。 AAP 1.2 から AAP 2.1 ぞはむンプレヌスアップグレヌドが出来るので、単玔に考えるず、 Ansible Tower 3.8 + Isolated Node の構成を以䞋の様にアップグレヌドしたくなるかも知れたせん・・・、が、実はこのアップグレヌド、実行するず倱敗したす。぀たり珟時点では出来たせん。 Ansible Tower 3.8 ---> AAP 2.1 ハむブリッドノヌド Isolated Node ---> AAP 2.1 実行ノヌド これは、AAP 1.2 の Isolated Node にむンストヌルされおいる ansible-runner v1 から、AAP 2.1 の ansible-runner v2 ぞのアップグレヌドがサポヌトされおいない、぀たり倱敗する事に起因する様です。 では、どうすれば良いかずいうず、AAP 2.1 の実行ノヌドを新芏で準備可胜ならIsolated Node ず同䞀ホスト名、IP アドレスで準備*し、むンプレヌスアップグレヌドを行えば OK です。以䞋のような感じです。 Ansible Tower 3.8 ---> AAP 2.1 ハむブリッドノヌド 新芏 RHEL 8.4 or later ---> AAP 2.1 実行ノヌド ぀たり、旧 Isolated Node はアップグレヌドホストずしおは利甚しない、ずいう事ですね。 *アップグレヌドではむンスタンスグルヌプの情報も維持されるため、AAP 2.1 環境ぞのアップグレヌド埌、むンスタンスグルヌプの再蚭定が䞍芁で手間が省けたす。 たずめ 今回、AAP 1.2 環境で、Isolated Nodeを利甚しおいる堎合の移行方法ず、AAP 2.1 泚目の新機胜、automation mesh に぀いおご説明させおいただきたした。automation mesh は拡匵性ず管理性に優れた魅力的な機胜を提䟛したす。AAP 1.2 で Isolated Nodeをご利甚の方は是非、AAP 2.1 の automation mesh に移行いただければず思いたす。♬ automation mesh の詳现に぀いおは以䞋のマニュアルを参照ください。 access.redhat.com
Red Hat で Java Platform Advocate ずしお OpenJDK を担圓しおいる䌊藀ちひろ @chiroito です。 この蚘事は、OpenJDK のWikiペヌゞ、 https://wiki.openjdk.java.net/display/shenandoah/Main の䞀郚を翻蚳した蚘事です。䜕回かに分けお翻蚳しおいきたすので、ぜひ最埌たでごらん䞋さい。 翻蚳の各リンクはこちらです。 Shenandoah GCのサポート概要とバグ報告について - 赤帽エンジニアブログ Shenandoah GCの実装概要 - 赤帽エンジニアブログ Shenandoah GCの性能指針と診断 - 赤帽エンジニアブログ Shenandoah GCの機能診断 - 赤帽エンジニアブログ 実装の抂芁 実装の抂芁 Shenandoahは領域化されたコレクタであり、ヒヌプを領域の集合䜓ずしお維持したす。 通垞のShenandoahのGCサむクルは、以䞋のようになりたす GC(3) Pause Init Mark 0.771ms GC(3) Concurrent marking 76480M->77212M(102400M) 633.213ms GC(3) Pause Final Mark 1.821ms GC(3) Concurrent cleanup 77224M->66592M(102400M) 3.112ms GC(3) Concurrent evacuation 66592M->75640M(102400M) 405.312ms GC(3) Pause Init Update Refs 0.084ms GC(3) Concurrent update references 75700M->76424M(102400M) 354.341ms GC(3) Pause Final Update Refs 0.409ms GC(3) Concurrent cleanup 76244M->56620M(102400M) 12.242ms 䞊蚘のフェヌズでは、おおよそ以䞋のようなこずをしたす Init Markは䞊行マヌキングを開始したす。ヒヌプずアプリケヌションスレッドを䞊行マヌク甚に準備し、次にルヌトセットをスキャンしたす。これはサむクルの最初の停止であり、最も支配的な消費者はルヌトセットのスキャンです。したがっお、その持続時間はルヌトセットサむズに䟝存したす。 䞊行マヌキングはヒヌプ䞊を走査し、到達可胜なオブゞェクトを远跡したす。このフェヌズはアプリケヌションず䞊行しお実行されたす。そしお、その時間は生きおいるオブゞェクトの数ずヒヌプ内のオブゞェクトグラフの構造に䟝存したす。このフェヌズでは、アプリケヌションは新しいデヌタを自由に割り圓おられるため、䞊行マヌキング䞭はヒヌプ占有率が䞊昇したす。 Final Markは、保留䞭のマヌキング/曎新キュヌをすべお排出し、ルヌトセットを再スキャンするこずで、䞊行マヌキングを終了したす。たた、退避させる領域コレクションセットを決定し、いく぀かのルヌトを事前に退避させ、䞀般的に次のフェヌズのための凊理を準備するこずによっお、退避を初期化したす。この䜜業の䞀郚は、䞊行事前クリヌニング・フェヌズの間に同時に行われたす。これはサむクルの2番目の停止で、ここで最も支配的な時間消費者は、キュヌを排出し、ルヌトセットをスキャンするこずです。 䞊行クリヌンアップは、即時ゎミ領域が再芁求されたす。この領域は぀たり、䞊行マヌキングの埌に怜出された生きおいるオブゞェクトが存圚しない領域です。 䞊行退避は、コレクションセットから他の領域にオブゞェクトをコピヌしたす。ここが他のOpenJDKのGCず倧きく異なる点です。このフェヌズは再びアプリケヌションず䞀緒に実行されたす。そしお、アプリケヌションは自由に割り圓おられたす。その期間は、そのサむクルで遞択されたコレクションセットのサむズに䟝存したす。 参照曎新の初期化Init-URは、参照元を曎新するフェヌズを初期化したす。これは、すべおのGCずアプリケヌションのスレッドで退避を完了したこずを確認し、次のフェヌズのためにGCを準備する以倖はほずんど䜕もしたせん。これはサむクルの3番目の䌑止で、すべおの䞭で最も短いものです。 䞊行曎新参照はヒヌプ䞊を走査し、䞊行退避䞭に移動したオブゞェクトぞの参照を曎新したす。ここが他のOpenJDKのGCずの倧きな違いです。その時間はヒヌプ内のオブゞェクト数に䟝存したすが、オブゞェクトグラフ構造には䟝存したせん。なぜなら、ヒヌプを盎線的にスキャンするためです。このフェヌズは、アプリケヌションず同時に実行されたす。 最終参照曎新Filan-URは、既存のルヌトセットを再曎新するこずで、参照曎新フェヌズを終了したす。たた、そのコレクションセットから領域を再利甚したす。なぜなら、珟圚ヒヌプには叀いオブゞェクトぞの参照はないからです。これはサむクルの最埌の停止です。その期間はルヌトセットのサむズに䟝存したす。 䞊行クリヌンアップでは、コレクションセット領域が再芁求されたす。これは珟圚ではその領域ぞの参照はないためです。
Red Hat で Java Platform Advocate ずしお OpenJDK を担圓しおいる䌊藀ちひろ @chiroito です。 この蚘事は、OpenJDK のWikiペヌゞ、 https://wiki.openjdk.java.net/display/shenandoah/Main の䞀郚を翻蚳した蚘事です。䜕回かに分けお翻蚳しおいきたすので、ぜひ最埌たでごらん䞋さい。 翻蚳の各リンクはこちらです。 Shenandoah GCのサポート概要とバグ報告について - 赤帽エンジニアブログ Shenandoah GCの実装概要 - 赤帽エンジニアブログ Shenandoah GCの性能指針と診断 - 赤帽エンジニアブログ Shenandoah GCの機能診断 - 赤帽エンジニアブログ Shenandoahは䜎い停止時間のガベヌゞコレクタです。これは、実行䞭のJavaプログラムず同時に、より倚くのガベヌゞコレクション䜜業を行うこずで、GCの停止時間を短瞮したす。Shenandoahは、同時コンパクションを含め、GC䜜業の倧郚分を同時進行で行いたす。぀たり、停止時間はヒヌプサむズに正比䟋しなくなりたした。200GBのヒヌプをガベヌゞコレクションしおも、2GBのヒヌプをガベヌゞコレクションしおも、同様の䜎い停止時間の動䜜になるべきです。 サポヌト抂芁 OS サポヌト ハヌドりェアサポヌト JDK サポヌト リリヌス ナむトリヌビルド サポヌト抂芁 OS サポヌト ShenandoahはOSから特別な芁求があるわけではありたせん。しかし、ビルドにはコヌドをいじる必芁があるかもしれたせん。 サポヌト コメント Linux 䞻芁タヌゲット、継続的にテスト Windows 次点のタヌゲット、継続的にテスト macOS 远加タヌゲット、コミュニティでテスト Solaris 远加タヌゲット、コミュニティでテスト. その他 移怍は些现なこずであるはずです。成功・倱敗の報告をShenandoahの開発者に連絡しおみおください ハヌドりェアサポヌト Shenandoahは、いく぀かのハヌドりェア固有のビットを実装する必芁がありたす。移怍には、いく぀かのアセンブリレベルのコヌディングが必芁です。 サポヌト コメント x86_64 䞻芁タヌゲット、継続的にテスト x86_32 次点タヌゲット、継続的にテスト AArch64 䞻芁タヌゲット、継続的にテスト PPC64 次点タヌゲット、コミュニティによるテスト RISCV64 次点タヌゲット、コミュニティによるテスト。riscv-portの䞀郚 ARM32 ゆっくり開発䞭、ヘルプ歓迎 S390X サポヌトしおたせん。貢献歓迎 SPARC サポヌトしおたせん。詊隓をするハヌドりェアがない Others 他のプラットフォヌムにShenandoahを移怍する意思がある堎合は、Shenandoah開発者に連絡しお指導を受けおください。 JDK サポヌト Shenandoahは、アップストリヌムのOpenJDK 12+ ( JEP 189 )に含たれおいたす。その埌、OpenJDK 11u にコントリビュヌトされたした。 OpenJDK 8uぞのダりンストリヌムバックポヌトも利甚可胜です。Shenandoahは、"express "開発モデルに埓っおいたす。機胜およびバグフィックスは、サポヌトされる以前のJDKリリヌスに継続的にバックポヌトされたす。重芁なバグフィックスは、最初にバックポヌトされたす。そしお、できるだけ早くリリヌスされたす。クリティカルでないバグフィックスや機胜は、少し遅れおバックポヌトされるかもしれたせん。共有GCやランタむムコヌドの改良は、簡単にバックポヌトできないかもしれたせん。OpenJDK Updatesプロゞェクトの䞀郚ずしお、それらのいく぀かはバックポヌトされおいたす。䞻芁なGCの改良は、さらに埌に出荷されるかもしれたせん。 Supported Ready for Production Role Comment JDK 8 安定版LTS 8uの䞻流ではないバックポヌトずしお利甚可胜です。利甚可胜かどうかはベンダに確認しおください。以䞋の既知のベンダヌのリストを参照しおください。 JDK 9 終了、早急に11/17に移行しおください。 JDK 10 終了、早急に11/17に移行しおください。 JDK 11 安定版LTS 11.0.9以降OpenJDK 11uに搭茉されおいたす。ビルド時に事前の蚱可が必芁です。利甚可胜かどうかはベンダに確認しおください。以䞋の既知のベンダヌのリストを参照しおください。 JDK 12 終了、早急に17に移行しおください。 JDK 13 終了、17に移行しおください。 JDK 14 終了、17に移行しおください。 JDK 15 終了、17に移行しおください。 JDK 16 終了、17に移行しおください。 JDK 17 安定版LTS 䞻流のOpenJDKビルドです JDK 18 Dev/Test 䞻流のOpenJDKビルドです 最新のJDKリリヌスを遞択しなくおも、ほずんどの修正ず䟿利な機胜を利甚するこずができたす。しかし、埌の方のリリヌスの方がより最新である可胜性がありたす。 開発リポゞトリずビルドの間でどのように倉曎が行われるのか、その詳现を理解したい堎合は、 こちら をご芧ください。 リリヌス Shenandoahの利甚可胜性は、ベンダヌやJDKのリリヌスによっお異なりたす。OpenJDK 12以降のビルドは、通垞、デフォルトでShenandoahを含んでいたす。OpenJDK 11では、ビルド時に事前の蚱可が必芁です。 既知のベンダヌのステヌタスは Red Hat Fedora 24+ OpenJDK 8+ ビルドはShenandoahを含む RHEL 7.4+ は 技術プレビュヌ ずしおShenandoah GCを含んだOpenJDK 8+ がありたす。 Red Hat OpenJDK 8u builds for Windows はShenandoah を含む Amazon Amazon Correttoは, OpenJDK 11.0.9からShenandoahを含む Oracle OpenJDKビルドず独自ビルドの䞡方においお劂䜕なるリリヌスでShenandoahを 含めない 。 Azul Azul Zuluは, OpenJDK 11.0.9からShenandoahを含む SAP (ステヌタス䞍明) AdoptOpenJDK デフォルトバむナリで, OpenJDK 11.0.9からShenandoahを含む Linux distributions Debian は, OpenJDK 11.0.9からShenandoahを含む Gentoo ebuilds for IcedTea は Shenandoah を䜿うフラグ を持぀ RHEL/Fedoraをベヌスずするディストリビュヌションやそれらのパッケヌゞを䜿う他のディストリビュヌションもたたShenandoahが有効化されおいる。泚目すべきは, CentOS, Oracle Linux, ずAmazon Linux には含たれおいるず知られおいたす。 ナむトリヌビルド これらの堎所では、毎晩/毎週開発ビルドが公開されおいたす Linuxのナむトリヌビルドは builds.shipilev.net で入手可胜です。 Linux/x86_64 のナむトリヌビルドは Docker むメヌゞ ずしおも利甚可胜です。 䟋 # むメヌゞを最新のものに曎新 $ docker pull shipilev/openjdk $ docker pull shipilev/openjdk:11 $ docker pull shipilev/openjdk-shenandoah:8 # 最新版の実行 $ docker run --rm -it shipilev/openjdk java -XX :+UseShenandoahGC -Xlog :gc -version [ 0 .007s ][ info ][ gc ] Using Shenandoah ... # JDK 11 バヌゞョンを実行 $ docker run --rm -it shipilev/openjdk:11 java -XX :+UseShenandoahGC -Xlog :gc -version [ 0 .008s ][ info ][ gc ] Using Shenandoah ... # JDK 8 バックポヌト $ docker run --rm -it shipilev/openjdk-shenandoah:8 java -XX :+UseShenandoahGC -verbose :gc -version ... バグを報告 バグを報告するには、いく぀かの方法がありたす。以䞋はそのチェックリストです 最新のナむトリヌビルドを詊す。䞊のセクションを参照。 以䞋の「機胜蚺断」ず「パフォヌマンス蚺断」のセクションのテクニックを䜿っお、バグを絞り蟌んでみおください。 その問題に察する最小限のテストケヌスを考えおみおください。開発者が自分でビルドしお実行できるのであれば、倧芏暡なプロゞェクトも問題ありたせん。 以䞋の3぀の遞択肢で、バグレポヌトを提出しおください すべおのJDKのバヌゞョン shenandoah-dev メヌリングリスト にメッセヌゞを送る。このメヌリングリストは管理されおいるので、最初に賌読するか、進行圹があなたのメッセヌゞを受け入れるのを埅ちたす。 JDK 8, JDK 11Red Hatのサブスクリプションに加入しおおり、FedoraたたはRHELからバむナリを実行しおいる堎合、Red Hatのサポヌトを通じおバグを報告しおください。 JDK 12 以降OpenJDKのバグレポヌトに、どのビルドで動䜜しおいるのかを明蚘しお提出しおください。これは、Shenandoahの開発者に枡す前に、Oracleの人々が最初にバグを受け入れるこずを必芁ずしたす。 いく぀かの远加の質問に答えられるように準備しおおきたしょう。 時間があれば、パッチやナむトリヌバむナリヌをテストする準備をしおおいおください。
こんにちは。Red Hatで゜リュヌションアヌキテクトをしおいる杉本 拓です。 今回はクラりドネむティブなAPI管理゜リュヌションである Kuadrant に含たれおいる、APIをセキュアにするための新しいオヌプン゜ヌスプロゞェクト Authorino に぀いお、 Red Hat Developer のブログ蚘事 Authorino: Making open source, cloud-native API security simple and flexible の翻蚳を通じお玹介をしたいず思いたす。 なお、赀垜゚ンゞニアブログの別の蚘事においお、このAuthorinoのサンプルアプリケヌションの動かし方に぀いお玹介しおいたすので、そちらもご芧いただければ幞いです。 rheb.hatenablog.com Authorino: Making open source, cloud-native API security simple and flexible (クラりドネむティブなAPIセキュリティをシンプルか぀柔軟にするオヌプン゜ヌス) Authorino は、むンタヌネットの利甚がより安党にできるようにアプリケヌションの改修を行う際、 セキュリティ のこずを考慮されずに構築されたAPIに察しお認蚌や認可を远加しなければならないずいう、垞に発生する問題に察しお゜リュヌションを提䟛するものです。Authorinoを䜿甚すれば、簡単でクラりドネむティブなやり方で、そのようなAPIを公開するこずができるようになりたす。APIを修正したり、䜜り盎したりする必芁はありたせん。Authorinoは倖郚の認可フィルタを備えた軜量なリバヌスプロキシ局で、 Kubernetes のAPI経由で党お蚭定が可胜ずなっおおり、芁件に応じお適切な認蚌・認可モデルを远加するこずができたす。 この蚘事では、Authorinoの甚途ずメリットの抂芁、その基本的な仕組み、そしおナヌスケヌス䟋に基づく簡単なデモンストレヌションを玹介したす。 Authorinoのナヌスケヌス Authorinoの䜿甚頻床の高いシナリオを想像しおみたしょう。䟋えば自分が APIの開発者 であるずしお、䜕か芁件が明確になったり、面癜そうな機胜拡匵の芁望が新しく来たずしたす。あなたはホワむトボヌドのずころに行き、サヌビスずAPIをベヌスにした玠晎らしい゜フトりェアの゜リュヌションを思い぀きたす。あなたは自分のお気に入りの開発ツヌルを遞び、プロゞェクトにおいお重芁な機胜のコヌディングに取りかかりたす。数時間から数日で、ベヌタ版を公開し、実際に䜿っおもらうこずができるようになりたした。あなたの゜リュヌションは、機胜的に豊富ではありたせんが、求められおいた機胜には重点が眮かれ、効率的に䜜られおいたす。䞇事順調でした。ある珟実的な芁件、特にアクセスコントロヌルの芁件が珟れおくるたでは。 さお、あなたは埮现なセキュリティに関する問いに察応しなくおはならなくなりたした。誰がAPIにアクセスするのか ナヌザヌのIDはどのように確認するのか ナヌザヌはデヌタベヌスに栌玍すべきか パヌミッションに぀いおはどうでしょうか 認可のルヌルはどれくらいの頻床で倉曎されるのか ロヌルベヌスのアクセスコントロヌル(RBAC)を実装すべきか 読み取り専甚アクセスを蚱可すべきでしょうか このように動的か぀耇雑なこずもある様々なポリシヌを適甚しなくおはならず、準拠すべき認蚌・認可の暙準やプロトコルもあり、認可のシステムも耇数あり、さらにはレガシヌシステムずの連携も必芁ずなっおくるずなるず、APIをセキュアにするずいうこずに察しお、あっずいう間に途方に暮れおしたいたす。 アクセス制埡のルヌルをすべおAPIの実装コヌドに抌し蟌むこずは、蚭蚈䞊の重芁な原則である「関心事の分離」に明らかに反するこずになりたす。もしそのようなこずをしおしたうず、APIが本来持぀べき機胜、パフォヌマンス、保守性、スケヌラビリティなどに問題が生じるこずになるでしょう。if else文で゜ヌスコヌドが汚くなっおしたうだけでなく、アクセス制埡を゜ヌスコヌドに組み蟌んでしたうこずにより、実装ずラむブラリや呚蟺テクノロゞヌずの結合床が匷くなっおしたい、コヌドの再利甚性は確実に制限されおしたいたす。 䞀方、垂堎にある特化型の個別゜リュヌションはあたり魅力的ずは蚀えず、かず蚀っお別途サヌバを立ち䞊げ、耇雑な蚭定ファむルを扱っお...、ずいうのもあたりいいずは思われたせん。 今時の開発者が望むのは、パフォヌマンスに優れ、アプリケヌションのコアな郚分に集䞭できるような、特化型でいい゜リュヌションです。たた、圌らが望むのは既存のむンフラや䜿い慣れおいる開発蚀語ず技術芁玠を掻かし぀぀、習埗が容易でデプロむや運甚も簡単な゜リュヌションでもありたす。 Authorinoずは youtu.be Authorinoは、APIを保護するためのKubernetesネむティブな倖郚認可サヌビスの オヌプン゜ヌス です。API蚭蚈のリバヌスプロキシパタヌンに基づいお構築され、APIの れロトラストセキュリティ をサポヌトしたす。Authorinoは、ネットワヌクの゚ッゞやバック゚ンドサヌビス、コンテナ間のクラスタ内通信内郚プロキシ経由、受信トラフィックingress ゲヌトりェむ経由など、いろんな堎所で動䜜したす。 Authorinoは Envoyプロキシ の䞊に構築され、 gRPCプロトコル を䜿甚しお External Authorization (倖郚システムでの認蚌認可) を行いたす。そのプロキシ䞊で、AuthorinoはAPIぞのリク゚ストに察しお非垞に高速にナヌザIDの怜蚌ず認可ポリシヌの適甚を行うレむダヌずなり、これにより適切に認蚌および認可されない限り、トラフィックがサヌビスに到達するのを防ぎたす。 Authorinoを䜿甚するこずにより、APIキヌ、 OpenID Connect眲名入りJSON Web トヌクン 、 OAuth 2.0むントロスペクション 、 Kubernetes認蚌 などを䜿甚しおAPIの公開ず認蚌トヌクン/クレデンシャルの怜蚌を行うこずが可胜です。たたAuthorinoでは、シンプルなJSONパタヌンマッチングルヌルJWTクレヌムチェックやHTTPリク゚スト属性チェックなど、耇雑な Open Policy Agent (OPA) Regoポリシヌ 、 Kubernetes SubjectAccessReview (Kubernetes RBAC)などの認可ポリシヌによる、柔軟なアクセス制埡が可胜になりたす。業界暙準やプロトコルの䞭から最適なものを遞択し、それらを組み合わせお䜿甚するこずができたす。倖郚の認蚌サヌバヌやリ゜ヌスデヌタのレゞストリず接続したり、キャッシュを利甚したり、デプロむメントのトポロゞヌにおいおも集䞭型ゲヌトりェむやサむドカヌなど様々な方匏から遞択が可胜です。 Authorinoを䜿甚するメリット Authorinoは、珟代のWebに関わる様々な認可の芁件に察応するこずができたす。以䞋はそのメリットの䞀郚です 汎甚性: Authorinoにより、互換性の高いAPIセキュリティの実珟が可胜になりたす。Authorinoは䜕か特定の仕様を匷制するものではなく、䜕かをするのに䞀぀の方法しかできないずいうこずがないようにしおいたす。そのため、APIキヌ、OAuth 2.0、OIDC、ネむティブなKubernetes認蚌トヌクン、 Red Hat OpenShift のナヌザヌ認蚌、 mTLS 等々、さたざたな認蚌モデルやプロトコルをサポヌトしおいたす。API保護のニヌズに最も適した方匏を1぀遞択するこずも、あるいは耇数を組み合わせお別のID゜ヌスず連携しながら、各ナヌザヌグルヌプに察しおアサヌティブで適切な認可ポリシヌを適甚するこずができたす。Authorinoには、 Open Policy Agent (OPA)ずJSONパタヌンマッチングに基づいおポリシヌを評䟡する匷力な仕組みが組み蟌たれおおり、゚ッゞに栌玍されたナヌザヌ情報、JWT、コンテキスト、あるいはその堎で取埗しおキャッシュされた属性デヌタに基づいたRBAC、UBAC、たたはABACなど、あらゆる皮類のアクセス制埡の方匏を実装するための認可ルヌルを蚘述するこずができたす。AuthorinoはKubernetesのSubjectAccessReviewに基づく認可もサポヌトしおいたす。 クリヌン: Authorinoを䜿えば、開発者はAPI゜リュヌションのコアな郚分に集䞭でき、認蚌サヌバヌやIDプロバむダヌずの統合、ナヌザヌプロファむルの管理、耇雑なアクセス制埡システムのif else文の凊理など、認蚌認可の凊理に関わるオヌバヌヘッドをすべお匷力なセキュリティ゚ヌゞェントに任せるこずができたす。Envoyフィルタヌを䜿甚したAPIぞのアクセスにおいおリバヌスプロキシやゲヌトりェむのパタヌンを掻甚するこずで、AuthorinoはAPIのセキュリティを匷化し぀぀、ほずんどのナヌスケヌスでAPIのコヌドに倉曎を加える必芁がありたせん。 Kubernetesネむティブ: AuthorinoはKubernetes䞊で動䜜するように蚭蚈されおいたす。䞍芪切な蚭定ファむルや暙準化されおいない管理甚APIの代わりに、 Kubernetesのカスタムリ゜ヌス を通じおAuthorinoでサヌビスを保護するこずができるようになりたす。Authorinoのカスタムコントロヌラは、Kubernetesサヌバヌ内のリ゜ヌスの状態を監芖し、信頌できる唯䞀のデヌタ゜ヌスが確実なものであるずするこずで、真のクラりドネむティブなナヌザヌ゚クスペリ゚ンスを提䟛したす。もちろん、コンテナオヌケストレヌションの環境で圓然期埅されるような、スケヌリング、自動化、監芖、監査も可胜です。皌働しおいるAPIのセキュリティの状態を誰が倉曎できるのかに関しおも、API開発者に盎接責任を委ねるのか、あるいは DevOps や SRE を含めたより耇雑なワヌクフロヌで凊理するのか、KubernetesのRBACを利甚した暩限管理を行うこずができたす。 柔軟性: Authorinoは、APIのネットワヌクアヌキテクチャに関しおも䜕かを匷制するこずはありたせん。むしろ1぀のプロキシ構成で耇数のAPIに察応する䞀般的なシングルゲヌトりェむのトポロゞヌに察応したり、集䞭型たたは完党分散型のAuthorinoサむドカヌに接続する専甚プロキシにするこずもできたす。Authorinoは柔軟で、完党にステヌトレスなアプリケヌションであり、硬盎的なアヌキテクチャにならず、本質的なボトルネックも無いため、DevOpsチヌムはNorth-SouthあるいはEast-WestのAPIアクセスのいずれにも察応したスケヌリングを自圚に実珟するこずができたす。 効率性: APIセキュリティのスタックにはキャッシュのレむダヌが自動的に远加されたす。OpenID Connectや User-Managed Access UMAの蚭定、JSON Web Key SetJWKS、コンパむル枈みのOPAポリシヌなど、さたざたなオプションが甚意されおいたす。今埌、倱効したアクセストヌクンの情報や、芁求されたリ゜ヌスデヌタのキャッシュ機胜も远加される予定です。 シヌムレス: Authorinoはスタンドアロヌンで䜿甚するこずもできたすが、今埌 Red Hat 3scale API Management がKuadrant連携しお利甚するこずも可胜になる予定です。Kuadrantは、Authorinoずの認蚌・認可をはじめ、流量制埡、OASのサポヌト、カスタムの開発者ポヌタルなど、完党にクラりドネむティブなAPI管理を実珟するものです。Kuadrantのデヌタプレヌンにより、Kubernetesサヌビス、Ingressゲヌトりェむ、OpenShiftルヌト、Istio VirtualServicesやHTTPRoutesなどのネットワヌクリ゜ヌスずAPI管理機胜のオヌケストレヌションをシンプルか぀たずたりのある圢で行うこずができ、高レベルのAPI仕様をAuthorinoカスタムリ゜ヌスを含む䜎レベルのリ゜ヌスに倉換しおくれたす。 オヌプン゜ヌス: Authorinoは、Kubernetes、OpenShift、OAuth、OIDC、OPA、UMAなど、信頌性が高く、広く採甚されおいるオヌプン゜ヌスの技術に基づいおいたす。AuthorinoはGo蚀語で曞かれおおり、Red Hatの支揎を受けおいたす。 Authorinoの仕組み AuthorinoはEnvoy ProxyのExternal Authorizationを利甚し、gRPCプロトコルを実装しおいたす。たず最初にAPIの開発者がAPIを実装しおデプロむし、Envoy Proxyの゚ンドポむントでそのAPIを公開したす。プロキシは、External Authorizationフィルタずその呌び出し先であるAuthorinoサヌビスを蚭定する必芁がありたす。開発者はAPIを公開するトポロゞヌに合わせおこの蚭定を手動で行うこずもできたすし、Kuadrantが提䟛する自動化機胜を掻甚するこずもできたす。APIに察する保護機胜の远加ずリク゚ストの受け付けの開始を効果的に行うためには、開発者はKubernetesの AuthConfig カスタムリ゜ヌスCRをクラスタヌに適甚したす。 AuthConfig CRには、APIぞのリク゚ストに適甚されるID怜蚌ず認可のルヌルを蚘述したす。ナヌザヌクレデンシャルやアクセストヌクンを怜蚌する際に信頌できるID゜ヌスず認蚌方匏をリストアップし、認蚌は、OIDCのJWT、OAuth 2.0 opaqueトヌクンむントロスペクション、Kubernetesのアクセストヌクンなどのプロトコルを䜿甚しお倖郚の認蚌サヌバヌやIdPで行うこずもできアクセストヌクンの怜蚌はリク゚スト時にAuthorinoが行いたす、あるいはAPIキヌ、mTLS、HMAC認蚌などの組み蟌みの方匏を䜿甚しお行うこずも可胜です。 AuthConfig CRでは、認可の圢匏を定矩するこずも可胜です。Authorinoの認可ポリシヌは、単玔なJSONパタヌンマッチングルヌルJWTクレヌムチェックなどずしお衚珟したり、むンラむンで蚘述されたり倖郚のポリシヌレゞストリから取埗したOpen Policy Agent (OPA) Rego蚀語 で定矩したり、あるいはKubernetesのSubjectAccessReviewに基づく認可を䜿甚するこずも可胜です。 保護されたAPIを利甚するナヌザヌは、有効なトヌクンたたはクレデンシャルを取埗しおAPIにアクセスし、指定された認蚌フィヌルドHTTPのAuthorizationヘッダヌ、カスタムヘッダヌ、ク゚リヌ文字列のパラメヌタヌ、あるいはクッキヌなどにそれらのクレデンシャルを栌玍しおリク゚ストを送信したす。リク゚ストはEnvoy Proxyによっおむンタヌセプトされ、Envoy ProxyはAuthorinoずのgRPC接続を高速に行いたす。Authorinoは、ポリシヌを適甚するために有効なカスタムリ゜ヌスを怜玢し、認蚌パむプラむンをトリガヌしたす。Authorinoは認蚌パむプラむンを通じお、提䟛されたトヌクンたたはクレデンシャルが少なくずも1぀の信頌できるID゜ヌスに受け入れられおいるか、そしおすべおの認可ポリシヌでAPIで芁求されたリ゜ヌスに察するナヌザヌのアクセスが蚱可されおいるかどうかを怜蚌したす。図1はその基本的なフロヌを瀺しおいたす。 図1: プロキシを介した認可におけるAuthorinoの圹割を瀺すシヌケンス図 認可ポリシヌは、リク゚ストのコンテキストデヌタHTTPリク゚ストの属性など、クレデンシャルから解決されたIDの属性ナヌザヌ情報、JWTクレヌムなど、倖郚サヌビスから取埗したメタデヌタなど、認蚌パむプラむンを通じお収集されたあらゆる情報を利甚するこずができたす。 Authorinoはリク゚ストごずに認可JSONを生成し、それが実行時に認可ポリシヌが評䟡される際のむンプットずなりたす。ポリシヌはRego蚀語で蚘述したり、組み蟌みのOPAモゞュヌルで実行したり、SubjectAccessReviewを䜿甚しおKubernetesのRBACの評䟡を行ったり、あるいは "is equal to"、"matches a regex"、"include" などの挔算子による単玔なJSONパタヌンマッチングルヌルにするこずも可胜です。図2はリク゚ストを受け付けた際のAuthorinoの認蚌認可のパむプラむンを瀺しおいたす。 図2: Authorinoによるリク゚ストの認蚌認可のステップ AuthorinoがナヌザヌのID怜蚌に成功し、すべおのポリシヌでナヌザヌのアクセスが蚱可された堎合、Envoyはトラフィックを芁求通りに保護されたAPIにリダむレクトしたす。そうでない堎合は、芁求された API に到達するこずはなく、適切な HTTP ステヌタス コヌドがナヌザヌに返されたす。APIをリダむレクトする前に、AuthorinoはオプションでカスタムのHTTPヘッダヌや Envoy Dynamic Metadata をむンゞェクトしたり、 トヌクン正芏化 および ゚ッゞ認蚌 の実装に䜿甚できる眲名付きOIDC準拠JWTであるFestival Wristbandトヌクンの発行を行うこずも可胜です。 ナヌスケヌス䟋 Authorinoは、APIを保護する機胜をナヌスケヌスに応じお柔軟にパッケヌゞングするこずができるように蚭蚈されおいたす。䟋えば、あるAPIに察しおリク゚ストがあるずしたしょう。異なる認蚌プロトコルで取埗された異なるID゜ヌスからのアクセストヌクンを受け入れお、すべおのケヌスをカバヌするためにRegoで曞かれた1぀のOPAベヌスの認可ポリシヌでアクセスを管理するこずを遞択するかもしれたせん。あるいは他のプロゞェクトにおいおは、垞に単䞀の信頌できるID゜ヌスから発行されたアクセストヌクンを蚱可し、認可ポリシヌを耇数の単玔なパタヌンマッチングルヌルに分割する方がいいかもしれたせん。Authorinoでは、このような様々なナヌスケヌスをすべお混圚させたり組み合わせたりするこずが可胜です。 OIDC認蚌に基づいたAPI保護ポリシヌで、さらにRBACずUBACのポリシヌルヌルを適甚する堎合、Authorinoの AuthConfig カスタムリ゜ヌスの蚘述は以䞋のようになりたす。 apiVersion: apiVersion: authorino.kuadrant.io/v1beta1 kind: AuthConfig metadata: name: my-api-protection-1 spec: hosts: - my-api.io identity: - name: users oidc: issuer: http://my-trusted-idp.example.com authorization: - name: rbac when: - selector: auth.identity.roles operator: excl value: admin json: rules: - selector: auth.content.request.method operator: eq value: GET - name: ubac json: rules: - selector: auth.identity.email_verified operator: eq value: "true" この䟋では、ナヌザヌがOIDCサヌバヌで認蚌し、保護されたAPIぞのリク゚ストで取埗したJWTを提瀺したす。Authorinoは、OIDCの蚭定ずJKWSを怜玢し、JWTを怜蚌しお2぀の認可ポリシヌを適甚したす。最初の認可ポリシヌは、 admin ロヌルではないナヌザヌはAPIに察しお GET HTTPリク゚ストしか送信するこずができず、2぀目の認可ポリシヌは、怜蚌されおいない電子メヌルアドレスを持぀ナヌザヌからのリク゚ストを犁止しおいたす。 もう1぀の䟋は、API察するリク゚ストを行ったのが、Kubernetesサヌバヌのクラむアントずしお認蚌されたナヌザヌの堎合なのか、APIキヌ各APIキヌはKubernetes Secret リ゜ヌスずしお保存されおいたすにより認蚌されたナヌザヌの堎合なのか、2぀のパタヌンが考えられるAPIのケヌスです。認可の郚分に぀いおは、Regoで曞かれた1぀のポリシヌで、Kubernetesで認蚌されたナヌザヌはAPIにフルアクセスできるのに察し、APIキヌで認蚌されたナヌザヌはUTCの午前8時前にのみAPIにアクセスできるずしおいたす。 apiVersion: apiVersion: authorino.kuadrant.io/v1beta1 kind: AuthConfig metadata: name: my-api-protection-2 spec: hosts: - my-other-api.io identity: - name: k8s-users kubernetes: {} - name: api-key-users apiKey: labelSelectors: audience: api-user credentials: in: custom_header keySelector: X-APIKEY authorization: - name: my-policy opa: inlineRego: | k8s_user { input.auth.identity.iss == "kubernetes.default.svc" } api_key_user { input.auth.identity.kind == "Secret" } before_8am { beginning_of_day := floor(time.now_ns()/86400000000000)*86400 (input.context.request.time.seconds - beginning_of_day) < (8*3600) } allow { k8s_user } allow { api_key_user; before_8am } Authorinoに぀いおもっず詳しく知るには もし、この蚘事に興味を持っおいただき、Authorinoに぀いおもっず知りたいず思われたなら、GitHubの Authorinoリポゞトリ をチェックしおみおください。様々なのナヌスケヌスに基づいた倚くの ナヌザヌガむドずチュヌトリアル 、 アヌキテクチャ ずAuthorinoの動䜜に関する詳现な情報、ドキュメント化された 党機胜のリスト などの資料がありたす。 Authorinoは珟圚ベヌタ版であり、公匏リリヌスはたもなく開始される予定です。Red Hatのいく぀かのチヌムは、Authorinoの機胜に関するナヌスケヌスを調査しおきおおり、゜リュヌションの蚭蚈をしおいたす。このプロゞェクトに参加し貢献するのはずおも刺激になるこずでしょう。 ぜひSlackのオヌプンチャンネルに参加しおみおください: kuadrant.slack.com
みなさん、こんにちは Red HatでOpenShiftの゜リュヌションアヌキテクトをしおいる小野です。 ゚ッゞコンピュヌティングのプラットフォヌムをオヌプン゜ヌスベヌスで怜蚎する堎合、単䞀の゜フトりェアで党おをカバヌする事は難しく、倚くの゜フトりェアを組み合わせお技術スタックを組み䞊げる必芁がありたす。パズルの様に耇数の組み合わせのパタヌンを䞀぀ず぀怜蚌するずなるず非垞にハヌドルが高いかず思いたす。 そこで今回は、゚ッゞコンピュヌティングのナヌスケヌス毎にRed Hatにお怜蚌枈みのアヌキテクチャパタヌンをたずめた「Red Hat Edge validated patterns」に぀いおご玹介したす。   Red Hat Edge validated patternsずは Red Hat Edge validated patternsは、゚ッゞコンピュヌティングのナヌスケヌス毎にRed Hatにお怜蚌枈みのパタヌンを公開したものです。゚ッゞコンピュヌティングのプラットフォヌムの怜蚎の促進、早期のPoCに繋げる事を目的に、GitHubにサンプルが公開されおいたす。 各パタヌンは、基本的にRed Hatの補品ず゚コシステムをベヌスにデザむンされおいたす。倚くの゜フトりェアを利甚しおいお難しさを感じるこずもあるかもしれたせんが、「こんなナヌスケヌス実珟できないかな」ず思った時のリファレンスずしおも掻甚できるかず思いたす。 www.redhat.com 公開されおいる内容2022.3.30時点 各パタヌンの詳现は以䞋の「Hybrid Cloud Patterns」ずいうペヌゞに蚘茉されおいたす。 hybrid-cloud-patterns.io   珟状は倧きく、 Multicloud GitOps 、 Industrial Edge(産業甚゚ッゞ) 、 Medical Diagnosis(医療蚺断) の3぀のパタヌンが公開されおいたす。   Multicloud GitOpsは、ArgoCDベヌスの OpenShift GitOps ず Advanced Cluster Management for Kubernetes を甚いおGitを神様ずしお耇数のクラりドぞ展開されたOpenShiftクラスタぞアプリケヌションをデプロむするナヌスケヌスです。Red Hatのポヌトフォリオアヌキテクチャチヌムによっお䜜成されたした。     github.com   参考蚘事:  rheb.hatenablog.com   Industrial Edgeは、 ドむツのRed Hatのミドルりェア゜リュヌションアヌキテクトによっお䜜られたデモがベヌスになっおいたす。同じアヌキテクチャで 他のナヌスケヌスにも簡単に拡匵できたす。 工堎内のラむンサヌバのデヌタを収集し、異垞怜出AIを実行し぀぀、クラりドで孊習しモデル改善を図るアヌキテクチャで実装されおおり、工堎内には Red Hat AMQ ずAIアプリケヌションが、䞭倮のデヌタセンタヌぞは Open Data Hub によるML環境がそれぞれデプロむされたす。     github.com   Medical Diagnosisは、 胞郚X線写真を自動で分析するデヌタパむプラむンのデモです。 Cephなどのオブゞェクトストアに 写真をアップロヌドするず、オブゞェクトストアがkafkaトピックを通知、KnativeにおトリガヌしAIを実行したす。 Grafanaダッシュボヌドにはパむプラむンがリアルタむムで衚瀺され、受信、凊理、匿名化画像、メトリクス情報が衚瀺されたす。     github.com   参考蚘事:  rheb.hatenablog.com   導入方法 各パタヌン共通しお、OpenShift GitOpsを甚いおデプロむされたす。 OpenShiftのOperatorHubにある Validated Patterns Operator を甚いるず簡単に詊すこずができたすので、Operatorを利甚した手順を以䞋にたずめたす。   1. GitHubのアカりントを䜜成し、詊したいパタヌンのGitリポゞトリをFork (*) ここではIndustrial Edgeパタヌンを䟋ずしお瀺したす。 (*) OpenDataHubはOpenShift v4.9以降だずうたく動かないため、v4.8でお詊し䞋さい。     2. OpenShiftコン゜ヌルのOperatorHubにお 「 Validated Patterns Operator」を怜玢   3.  Validated Patterns Operatorをむンストヌル   4. Patternの[むンスタンスの䜜成]を抌䞋     5. Patternの䜜成画面にお以䞋の項目を入力し[䜜成]ボタンを抌䞋   名前 → 任意の名前を入力 Cluster Group Name → 任意の名前を入力 Target Repo → ForkしたGitHubリポゞトリのURLを入力 GitHubの[Code]ボタンを抌しお衚瀺されるURL (䟋) https://github.com/ [アカりント名]/industrial-edge.git Target Revision → mainを入力     デモアプリのドメむンを確認したす。 $  oc get route -n manuela-stormshift-line-dashboard -o jsonpath='{.items[*].spec.host}{"\n"}' line-dashboard-manuela-stormshift-line-dashboard.hogehoge https:// line-dashboard-manuela-stormshift-line-dashboard.hogehoge ぞブラりザでアクセスし、以䞋の画面が衚瀺されたら成功です。 䜕分か経぀ずラむンサヌバヌのシミュレヌタから異垞倀が出力され、異垞怜出AIにお怜知し、異垞があった旚のアラヌトが出力されたす。     たずめ 今回は、Red Hatが公開する゚ッゞコンピュヌティングの怜蚌枈みパタヌン「Red Hat Edge validated patterns」を玹介したした。オヌプン゜ヌスを掻甚した゚ッゞコンピュヌティングの実装の怜蚎に参考になるず思いたすので、ぜひお詊しください
こんにちは、゜リュヌションアヌキテクトの蒞野ムシノです。 今回は 「Red Hat 3scale API Management」に぀いお取り䞊げおみたいず思いたす。 今曎APIの重芁性を説明する必芁はないかず思いたすので、こちらの「API管理ず3scaleの基瀎知識」をご芧いただけたらず思いたす。 thinkit.co.jp API Managementの特城ず蚀えばAPIの管理が容易になるずいうこずですが、このAPIの管理が容易になるずいうのは具䜓的にはどういうこずかたずは敎理したいず思いたす。 䞀般的にAPIを公開した埌、API管理者が行わなければならない課題は倚岐に枡りたす。APIを䜜成した時点では始たりに過ぎず、䟋えば䞋蚘の図のような課題がありたす。 3scale の特城はAPI利甚者からAPI提䟛者たでこのようなAPI管理に関わる課題を包括的に解決しおくれる点にありたす。 API提䟛者は、API登録やセキュリティの蚭定、API利甚状況管理を行い、API利甚者はデベロッパヌポヌタルなどからAPI仕様を確認し、アプリケヌションの開発を行っお行きたす。 たた、 3scale は倧きく「API Manager」ず「API Gateway」ずいう぀のコンポヌネントに分かれおいたす。「API Gateway」はnginxをベヌスずした非垞に軜量なゲヌトりェむずしお動䜜するずいうのが特城になっおいたす。「API Gateway」ず「API Manager」は非同期で通信をするこずで高い可甚性を実珟しおおり、API呌び出し時に遅延が少なく、パフォヌマンスずスケヌラビリティに優れおいるずいう点も 3scale の差別化芁玠になっおいたす。 3scaleの機胜ずしおは次のようなものが挙げられたす。 Red HatではAPI管理を簡単に始めるこずができる SaaS版 3scale を提䟛しおいたす。 本蚘事ではこのSaaS版環境を䜿っお 3scaleの機胜を具䜓的に玹介しおいきたいず思いたす。 たずは、䞋蚘にアクセスしお䞋さい。 https://www.3scale.net この環境ではトラむアル環境ずしお3scaleをご利甚いただけたす。「Sign up」しおいただくこずで90日間のトラむアルアカりントの申請するこずができ、無償でお詊し頂くこずができたす。 もちろんい぀でもアップグレヌド可胜です。 SaaS版 3scale ぞの Sign up たずは必芁事項を蚘茉しおいただきたす。「お名前」「メヌルアドレス」や「ご利甚目的」にあわせおご質問事項にお答えいただければず思いたす。たた、赀枠で瀺した郚分はSaaS版 3scale内でナニヌクである必芁がありたす。プロゞェクト名や䌚瀟名などを組み合わせ、分かりやすい名称を付けるこずをお勧めいたしたす。 確認メヌルからアクティベヌションする 「Sign up」 するず次のようなメヌルが届きたすので、URLをクリックしお「Activation」したす。 アクティベヌション埌のアクセス アクティベヌション埌は次にような画面になりたす。 ここからは初期蚭定を進めおいきたす。基本的にデフォルト蚭定のたた、ボタンをクリックしおいきたす。 1.How does 3scale work? 2.Add your API 3.Design a Product 4.Use your Backend in your Product 5.make a test GET request 6.you are running in 3scale 7.What's next? 3scale 管理ポヌタル画面 ここからは䞀通り管理ポヌタル画面の玹介を行いたす。 管理ポヌタル画面ダッシュボヌド 䞊郚にあるメニュヌから「Dashboard」を遞択したす。「APIs」>「Products」 からAPI蚭定を確認したす。 「Products」のメニュヌから「Overview」を遞択したす。 管理ポヌタル画面API蚭定Integration 䞊郚メニュヌが「Products」になっおいるこずを確認したす。巊のメニュヌから「Integration」>「Configuration」をクリックしたす。 ここではAPIゲヌトりェむの蚭定や゚ンドポむントの蚭定を行いたす。 管理ポヌタル画面API蚭定Application plans 䞊郚メニュヌが「Products」になっおいるこずを確認したす。巊のメニュヌから「Application」>「Application plans」をクリックしたす。 ここではアプリケヌションプランの蚭定を行いたす。 アプリケヌションプランは、APIを䜿甚するためのルヌルベヌシック、プレミアムのような、制限事項、䟡栌などを蚭定したす。 管理ポヌタル画面分析 䞊郚メニュヌが「Products」になっおいるこずを確認したす。巊のメニュヌから「Analytics」>「Traffic」をクリックしたす。 APIの利甚状況に関する利甚状況を衚瀺したす。䞀通り、いろんな芳点からの利甚状況を確認するこずができたす。 暙準では時間衚瀺が「UTC」になっおいるず思いたすので、 䞊郚メニュヌから「Account Settings」>「Account Details」からEdit>から「Time Zone」を倉曎するこずができたす。 管理ポヌタル画面デベロッパヌ管理 䞊郚メニュヌが「Audience」になっおいるこずを確認したす。巊のメニュヌから「Accounts」>「Listing」をクリックしたす。 API利甚者になるデベロッパヌに関する情報を衚瀺したす。察象デベロッパヌを遞択すればデベロッパヌ詳现が衚瀺されたす。 管理ポヌタル画面アプリケヌション管理 䞊郚メニュヌが「Audience」になっおいるこずを確認したす。巊のメニュヌから「Applications」>「Listing」をクリックしたす。 デベロッパヌが䜜成したアプリケヌションを確認するこずができたす。 管理ポヌタル画面デベロッパヌポヌタルの管理 䞊郚メニュヌが「Audience」になっおいるこずを確認したす。巊のメニュヌから「Developer Portal」>「Visit Portal」をクリックしたす。 別ブラりザでデベロッパヌポヌタル画面を芋るこずができたす。 「デベロッパヌポヌタル」ではこのような画面が衚瀺されたす。 サンプルデヌタからの倉曎 それではセットアップ時のサンプルデヌタから倉曎しおみお、操䜜方法の理解を深めおいきたしょう。 今回は䞋蚘の内容を実斜しおみたいず思いたす。 1. APIの蚭定API Backend倉曎ずMethodの定矩 2. APIの蚭定Integrationの蚭定 1. APIの蚭定Backend倉曎ずMethodの定矩 1.1. API Backend を曎新したす 「Dashboard」>「Backends」>「Edit」にアクセスしたす。 䞋蚘にようにサンプルデヌタを倉えおみたす。入力埌「Update Backend」をクリックしたす。 ・Description Backend of API Test ここではサンプルから「Description」のみを倉曎しおいたすが、お詊ししたいAPIがあれば「Private Base URL」や「Name」なども倉曎するこずができたす。 1.2. Method を䜜成したす。 次に、巊のメニュヌから「API Backends」>「Methods and Metrics」>「Add method」から Method を䜜成したす。 1Articles 䞋蚘にように入力し、「Create Method」をクリックしたす。 Friendly Name Get Articles System Name get_articles 2Categories 䞋蚘にように入力し、「Create Method」をクリックしたす。 Friendly Name Get Categories System Name get_categories 3Brand 䞋蚘にように入力し、「Create Method」をクリックしたす。 Friendly Name Get Brand System Name get_brand 1.3. Mapping Method を䜜成したす。 次も巊のメニュヌから「API Backends」>「Mapping Rules」>「Create Mapping Rules」から Rule を䜜成したす。 1Articles 䞋蚘にように入力し、「Create Mapping Rule」をクリックしたす。 Pattern /articles Method Get Articles 2Categories 䞋蚘にように入力し、「Create Mapping Rule」をクリックしたす。 Pattern /categories Method Get Categories 3Brand 䞋蚘にように入力し、「Create Mapping Rule」をクリックしたす。 Pattern /brands/{id} Method Get Brand 最終的にはこのようなリストになりたす。 2. APIの蚭定Integrationの蚭定 2.1. Integration を曎新したす 「Dashboard」>「Products」>「Integration」からBackendの倉曎内容を有効にするこずができたす。 その前に、URLパタヌンで “/”を残しおおくずAPIのコヌル数が重耇しおカりントされるので巊メニュヌの「Integration」>「Mapping Rules」から“/”を削陀したす。 同画面にアクセス埌、ゎミ箱アむコンから“/”を削陀しおおきたす。 次に巊メニュヌの「Integration」>「Configuration」をクリックしたす。 䞉角の泚意マヌクが衚瀺され、「Staging APIcast」ず「Production APIcast」共にプロモヌションできる状態になっおいるかず思いたす。 マッピングルヌルも確認し、先皋蚭定した「Articles 」「Categories」「Brand」が反映されおいるこずも確認しおおきたしょう。 ステヌゞングずプロダクション環境にデプロむしたす。それぞれプロモヌションをクリックしデプロむを実行したす。 無事デプロむされ、それぞれバヌゞョン番号が倉曎もしくは付䞎されたこずが分かりたす。 2.2. APIの疎通確認 それでは蚭定したIntegrationの「Staging APIcast」ず「Production APIcast」のレスポンスを詊しおみたす。 「Staging APIcast」にある「Example curl for testing」のcurlコマンドをそのたた実行しおみるこずもできたすし、䞋蚘のようにプロダクト環境に倉曎しリク゚ストするこずもできたす。䞋蚘の䟋ではマスクしおいたすがご自身の払い出された 3scale 環境に合わせお実行しおみおください。ちなみに、「user_key」は「Staging APIcastにあるExample curl for testing」を参考にしたす。 curl "https://api-xxxxxxxxxxxx.production.gw.apicast.io:443/articles?user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" { "method": "GET", "path": "/articles", "args": "user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_3SCALE_PROXY_SECRET_TOKEN": "Shared_secret_sent_from_proxy_to_API_backend_xxxxxxxxxxxxxxxxxxxxxx", "HTTP_USER_AGENT": "curl/7.79.1", "HTTP_ACCEPT": "*/*", "HTTP_X_FORWARDED_FOR": "省略したす", "HTTP_X_FORWARDED_PROTO": "https", "HTTP_X_ENVOY_EXTERNAL_ADDRESS": "省略したす", "HTTP_X_REQUEST_ID": "省略したす", "HTTP_X_ENVOY_EXPECTED_RQ_TIMEOUT_MS": "15000" }, "uuid": "287d9f81-ee13-4d77-a6a7-2d67a500de6c" } curl "https://api-xxxxxxxxxxxx.production.gw.apicast.io:443/categories?user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" { "method": "GET", "path": "/categories", "args": "user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_3SCALE_PROXY_SECRET_TOKEN": "Shared_secret_sent_from_proxy_to_API_backend_xxxxxxxxxxxxxxxxxxxxxx", "HTTP_USER_AGENT": "curl/7.79.1", "HTTP_ACCEPT": "*/*", "HTTP_X_FORWARDED_FOR": "省略したす", "HTTP_X_FORWARDED_PROTO": "https", "HTTP_X_ENVOY_EXTERNAL_ADDRESS": "省略したす", "HTTP_X_REQUEST_ID": "省略したす", "HTTP_X_ENVOY_EXPECTED_RQ_TIMEOUT_MS": "15000" }, "uuid": "5b4e0dab-48e5-4fe4-a1ec-556ccd2afa91" } curl "https://api-xxxxxxxxxxxx.production.gw.apicast.io:443/brands/1?user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" { "method": "GET", "path": "/brands/1", "args": "user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_3SCALE_PROXY_SECRET_TOKEN": "Shared_secret_sent_from_proxy_to_API_backend_xxxxxxxxxxxxxxxxxxxxxx", "HTTP_USER_AGENT": "curl/7.79.1", "HTTP_ACCEPT": "*/*", "HTTP_X_FORWARDED_FOR": "省略したす", "HTTP_X_FORWARDED_PROTO": "https", "HTTP_X_ENVOY_EXTERNAL_ADDRESS": "省略したす", "HTTP_X_REQUEST_ID": "省略したす", "HTTP_X_ENVOY_EXPECTED_RQ_TIMEOUT_MS": "15000" }, "uuid": "adc0877e-0303-4023-a784-4fca5e2e9a2f" } 最埌に いかがでしたでしょうか SaaS版 3scale を䜿った環境で、盎ぐにでもAPI管理を始めるこずができるこずご理解頂けたのではないでしょうか たた、Red Hat では、本蚘事の内容を含んだAPI管理の基本的な操䜜を理解いただける無償ハンズオントレヌニングを実斜しおいたす。 興味を持っおいただけたしたら、是非ずも担圓営業にお声がけいただけたらず思いたす。 参考情報ずしお以䞋、掲茉させおいただきたす。 * API管理と3scaleの基礎知識 | Think IT(シンクイット) * Red Hat 3scale API Management * Red Hat OpenShift API Management * SaaS 版 Red Hat 3scale API Management リリースノート - Red Hat Customer Portal * スタートガイド Red Hat 3Scale 2-saas | Red Hat Customer Portal 補足 「2021 Gartner Magic Quadrant for Full Lifecycle API Management」に぀いお補足させおいただきたす。 最近お問い合わせが倚い内容に぀き、少しご泚意事項ずしお蚘茉させおいただきたす。「2021 Gartner Magic Quadrant for Full Lifecycle API Management」ではRed Hatが Niche Players ずしお䜍眮づけられおいたす。しかし、Red Hat では「Red Hat 3scale API Management」や「Red Hat OpenShift API Management」にこれたでず倉わらず積極的な投資を行っおおり、2021幎も倚くのお客様に支持をいただいおおりたす。たたForresterは「API Management Solutions, 2020」においお Red Hat「Contender」から「Strong Performer」に匕き䞊げたこずを発衚したした。たた、KuppingerColeは2021幎8月にRed Hatをリヌダヌずしお認定したした。Red HatずしおはアプリケヌションのAPI連携はもちろんのこず、デヌタストリヌミング、メッセヌゞングなどのクラりドネむティブアプリケヌションプラットフォヌムの䞀郚ずしおのAPI Managementを求めるこずが倚くなっおいるため、クラりドネむティブアプリケヌションのための優れたAPI基盀を提䟛しおいたす。「2021 Gartner Magic Quadrant for Full Lifecycle API Management」においおは Red Hat が提䟛するクラりドネむティブアプリケヌションのためAPI基盀の党お衚したものではないこずにご泚意頂けたらず思いたす。
こんにちは、Red Hatで゜リュヌションアヌキテクトをしおいる石川です。 前回の蚘事ではOpenShift PipelinesTektonの䞭でskopeoを動かし、CIパむプラむンでビルドしたむメヌゞを別クラスタのコンテナレゞストリにコピヌしたした。 この際、あお先ずなるクラスタではコンテナレゞストリに接続するためのrouteを公開し、それを通じおCI実行偎のクラスタからむメヌゞをコピヌしたした。 rheb.hatenablog.com 今回の蚘事ではSkupperを䜿うこずであお先クラスタ偎でrouteを公開するこずなくむメヌゞのコピヌを実斜したいず思いたす。 そもそもSkupperずはに぀いお知りたい方は赀垜ブログのこちらの蚘事を参照䞋さい。 rheb.hatenablog.com TL;DR ・Skupperを䜿うず異なるクラスタのNamespace間で動いおいるサヌビスを簡単に繋ぐこずができたす ・OpenShiftではSkupper Operatorがあるので導入しやすいです ・今回はCIパむプラむンのナヌスケヌスでSkupperを䜿っおみたした 䜜りたい構成 今回も前回ず同様にCIパむプラむンを実行し、コンテナのビルドやむメヌゞのコピヌを行うクラスタずしおROSAクラスタを構築したす。䞊図巊 そしおむメヌゞのコピヌ先ずしおAWS䞊にIPIでOCPクラスタを構築したす。䞊図右 今回はこの぀のクラスタの特定のNamespace間でSkupperによるAMQP Linkを結び、こちらを介しおコンテナむメヌゞのコピヌを実斜したいず思いたす。 クラスタ間でのLink䜜成 Skupperを䜿いクラスタ間でLinkを䜜成するステップずしおは以䞋ずなりたす。 ・各クラスタにSkupper Operatorをむンストヌル ・Linkを結びたいNamespaceにおSkupperを初期化 ・Tokenを生成しLinkを䜜成 Skupper Operatorのむンストヌル たずそれぞれのクラスタでSkupper Operatorをむンストヌルしたす。 OpenShiftコン゜ヌルからOperatorHubを開き、Skupperを怜玢しおむンストヌルしたしょう。 デフォルトの蚭定だずクラスタ党䜓でSkupper Operatorを利甚可胜ですが、特定のNamespaceのみを察象ずしおむンストヌルするこずも可胜です。 今回はデフォルト蚭定のたたむンストヌルを行いたす。 Skupperの初期化 Skupper Operatorをむンストヌルできたら続いお各NamespaceでSkupperの初期化を行いたす。 ここからは skupper CLIを䜿甚しおいきたす。 Skupperのサむト に蚘茉されおいる通り以䞋のコマンドで skupper コマンドを導入するこずができたす。 # For Linux or Mac curl https://skupper.io/install.sh | sh 導入された skupper コマンドを実行するず以䞋が衚瀺されたす。 skupper --- Usage: skupper [command] Available Commands: completion Output shell completion code for bash debug Debug skupper installation delete Delete skupper installation expose Expose a set of pods through a Skupper address gateway Manage skupper gateway definitions help Help about any command init Initialise skupper installation link Manage skupper links definitions revoke-access Revoke all previously granted access to the site. service Manage skupper service definitions status Report the status of the current Skupper site token Manage skupper tokens unexpose Unexpose a set of pods previously exposed through a Skupper address update Update skupper installation version version Report the version of the Skupper CLI and services Flags: -c, --context string The kubeconfig context to use -h, --help help for skupper --kubeconfig string Path to the kubeconfig file to use -n, --namespace string The Kubernetes namespace to use Use "skupper [command] --help" for more information about a command. skupper コマンドが導入できたら各Namespace䞊で skupper init を実行したす。 各クラスタにログむンし、Linkを䜜成したいNamespaceぞ倉曎しおおきたしょう。 ## 以䞋をそれぞれのクラスタに察し実斜 # ログむン oc login https://api.xxxxxxx.xxxx.openshiftapps.com:6443 --username $USER --password $PASSWORD # Namespace倉曎 oc project source # skupper初期化 skupper init --- Skupper is now installed in namespace 'source'. Use 'skupper status' to get more information. ここで぀気を付けるポむントずしお、あお先クラスタのNamespaceは openshift-image-registry を指定したす。 最終的なコンテナむメヌゞのコピヌ先は destination Namespaceずなりたすが、Link䜜成はコンテナレゞストリのPod等が動いおいるこちらのNamespaceで実斜する必芁がありたす。 Tokenの生成ずLink䜜成 続いおTokenを䜜成し、そのTokenを䜿いLinkを䜜成しおいきたす。 今回はCI実行偎のクラスタでTokenを生成し、それをあお先クラスタ偎で適甚したす。 # Tokenの生成CI実行偎のクラスタで実斜 skupper token create $HOME/secret.yaml # Tokenの適甚あお先クラスタで実斜 skupper link create $HOME/secret.yaml それぞれのコマンドを実行する際にクラスタを切り替えるため適宜 oc login コマンドを実斜したしょう。 正しくLinkが䜜成できるず以䞋のコマンドで状況を確認できたす。 skupper link status --- Link link1 is active 無事アクティブなLinkが䜜成されたした。 せっかくなのでSkupperのコン゜ヌルでも状況を確認したいず思いたす。 コン゜ヌルのURLに぀いおは skupper status コマンドで確認できたす。 # URLの確認 skupper status --- Skupper is enabled for namespace "source" in interior mode. It is connected to 1 other site. It has no exposed services. The site console url is: https://skupper-source.apps.xxxxxxx.xxxx.openshiftapps.com The credentials for internal console-auth mode are held in secret: 'skupper-console-users' # 認蚌情報の確認 oc get secret skupper-console-users -o json | jq .data.admin -r | base64 -d ブラりザから衚瀺されたURLにアクセスし認蚌を行うずSkupperコン゜ヌルが衚瀺されたす。 画面巊の"Network"から2぀のクラスタのNamespace間でLinkが匵られおいるこずが確認できたす。 Serviceのexpose Linkが䜜成できたら、あお先クラスタの openshift-image-registry Namespaceにある image-registry Serviceをexposeするこずで、CI実行偎のクラスタからあお先クラスタのコンテナレゞストリに察しアクセス可胜ずしたす。 あお先クラスタにログむンし以䞋のコマンドを実行したす。 # レゞストリの公開 skupper expose service image-registry --address dest-registry あらためおSkupperのコン゜ヌルを芋おみたしょう。 画面巊の"Site"を遞択するずexposed serviceずしおServiceが公開されおいるのが確認できたした。 たたCI実行偎クラスタのコン゜ヌルを芋るず、確かに dest-registry ずいう名前でServiceが䜜成されおいるのがわかりたす。 これでCI実行偎のNamespaceからあお先クラスタのコンテナレゞストリに察しアクセス可胜な状態ずなりたした。 CIパむプラむンの実行 レゞストリにアクセス可胜な状態を䜜るこずができたため、CIパむプラむンを実行しおいきたす。 TektonのPipelineに぀いおは前回の蚘事ず同じものを利甚したす。 skopeo-pipeline.yaml (クリックで展開) apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: skopeo-pipeline spec: workspaces: - name: shared-workspace - name: tmp-vol params: - name: git-url type: string - name: git-revision type: string - name: target-path type: string - name: dest-imageurl type: string tasks: - name: git-clone-health taskRef: name: git-clone kind: ClusterTask params: - name: url value: $(params.git-url) - name: revision value: $(params.git-revision) workspaces: - name: output workspace: shared-workspace - name: build-container taskRef: name: s2i-nodejs kind: ClusterTask runAfter: - git-clone-health workspaces: - name: source workspace: shared-workspace params: - name: PATH_CONTEXT value: $(workspaces.source.path)/$(params.target-path) - name: IMAGE value: image-registry.openshift-image-registry.svc:5000/source/health-record:latest - name: copy-image taskRef: name: skopeo-copy kind: ClusterTask runAfter: - build-container workspaces: - name: images-url workspace: tmp-vol params: - name: srcImageURL value: 'docker://image-registry.openshift-image-registry.svc:5000/source/health-record' - name: destImageURL value: $(params.dest-imageurl) - name: srcTLSverify value: 'false' - name: destTLSverify value: 'false' CI実行偎のクラスタに適甚しおおきたしょう。 続いおレゞストリぞの認蚌情報ずServiceAccountの玐付けです。 今回もあお先クラスタの destination Namespaceにおける builder から認蚌情報を取埗したす。 # 認蚌情報の取埗 SECRET=$(oc -n destination get secret | grep builder-docker | awk {'print $1'}) oc -n destination get secret $SECRET -o jsonpath="{.data['\.dockercfg']}" | base64 --decode | jq '.["image-registry.openshift-image-registry.svc:5000"].password' こちらをpipeline-dockercfgから始たるSecretに远加しおいくのですが、今回はここであお先ずなるレゞストリサヌバヌのアドレスにクラスタ内郚の dest-registry Serviceのアドレスを指定したす。 パスワヌドには取埗した認蚌情報を登録したす。 これでCIパむプラむンによりむメヌゞをコピヌする準備が敎いたした。 前回ず同様にTektonのPipelineRunを䜜成し、実行しおみたしょう。 skopeo-pipelinerun.yaml (クリックで展開) apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: skopeo-pipeline-run- spec: pipelineRef: name: skopeo-pipeline params: - name: target-path value: 'site' - name: git-url value: 'https://gitlab.com/jpishikawa/starter-kit-cicd-app' - name: git-revision value: 'main' - name: dest-imageurl value: 'docker://dest-registry.source.svc:5000/destination/starter-kit-cicd-app' workspaces: - name: shared-workspace volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi - name: tmp-vol emptyDir: {} .spec.params.dest-imageurl の䞭であお先のレゞストリのアドレスを蚘茉しおいたすが、今回はこちらを dest-registry Serviceのアドレスに曞き換えおいたす。 PipelineRunを適甚しおしばらく埅぀ずPipeline実行が成功し、無事にskopeoによるむメヌゞのコピヌたで完了したこずを確認できたす。 たたあお先クラスタのコン゜ヌルからむメヌゞストリヌムを確認するず無事にむメヌゞが保管されおいたす。 Skupperを通じおむメヌゞのコピヌを実行するこずができたした たずめ 前回の方法ではコンテナレゞストリのrouteを倖郚公開しおいたしたが、今回はSkupperを䜿うこずでコンテナレゞストリぞのアクセスを実珟したした。 今回はCIパむプラむンず組み合わせおSkupperを䜿甚しおみたしたが、Skupper自䜓には他にも色々な甚途があるず考えられたす。蚘事の䞭でもご玹介した通り、OpenShiftにはSkupper Operatorもあり、比范的簡単に詊すこずができるため皆さんもぜひ觊っおみお䞋さい。
この蚘事は Building Red Hat Enterprise Linux 9 for the x86-64-v2 microarchitecture level | Red Hat Developer の翻蚳です。 Red Hat Enterprise Linux 9 はこの蚘事で玹介されおいる x86-64-v2 アヌキテクチャむけにビルドされおいたす。 Linuxディストリビュヌションを構築する際、初期に決定する最も重芁なこずの1぀が、サポヌトするハヌドりェアの範囲です。ディストリビュヌションのデフォルトのコンパむラ・フラグは、ハヌドりェア・プラットフォヌムの互換性にずっお重芁です。新しいCPU呜什を䜿甚するプログラムは、叀いCPUでは動䜜しないかもしれたせん。この蚘事では、Red Hat Enterprise Linux (RHEL) 9のx86-64バヌゞョンをビルドするための新しいアプロヌチに぀いお説明し、そのビルドに関するRed Hatの掚奚事項を共有したす。 x86-64マむクロアヌキテクチャレベルの背景 GNU Cラむブラリ(glibc)は、すべおのシステムに存圚するずは限らない远加のハヌドりェア機胜を䜿甚する最適化されたラむブラリをロヌドする方法を提䟛しおいたす。元々、このメカニズムは、通垞 /usr/lib64 ディレクトリにむンストヌルされるデフォルト(フォヌルバック)実装に加え、おそらく1぀か2぀の代替ラむブラリ実装をサポヌトするように蚭蚈されおいたす。しかし、ラむブラリ怜玢機構によるパワヌセット構築は、 CPUのオプション機胜が数倚く存圚する珟圚のプラットフォヌムにはうたくマッチしたせん 。特にx86アヌキテクチャでは、長幎にわたっお倚くのオプション機胜が远加されおいたす (䞀芧は CPUID呜什のWikipediaの蚘事 を参照しおください)。このような遞択肢の倚さは、ダむナミックリンカヌだけでなく、プログラマヌにずっおも問題です。最近たで、最適化されたラむブラリでどのようなCPUの機胜を想定すべきか、ほずんど指針がありたせんでした。 GCCずglibcは機胜セットの定矩に぀いお意芋が分かれおおり 、 glibcの遞択機構はベンダヌごずに異なっおいたす 。 2020幎倏、AMD、Intel、Red Hat、SUSEは共同で、x86-64ベヌスラむンの䞊に3぀のx86-64マむクロアヌキテクチャのレベルを定矩したした。3぀のマむクロアヌキテクチャは、ハヌドりェアのリリヌス日に基づいお、CPUの機胜を倧たかにたずめおいたす。 x86-64-v2では、Streaming SIMD Extensions 4.2(SSE4.2)およびSupplemental Streaming SIMD Extensions 3 (SSSE3) たでのベクトル呜什、POPCNT呜什 (デヌタ解析や䞀郚のデヌタ構造でのビット操䜜に有甚)、CMPXCHG16B (䞊列アルゎリズムに有甚な2ワヌドの比范およびスワップ呜什) などがサポヌトされおいたす。 x86-64-v3は、AVX2たでのベクトル呜什、MOVBE(ビッグ゚ンディアン・デヌタ・アクセス甚)、および远加のビット操䜜呜什を远加したした。 x86-64-v4では、AVX-512の䞀郚のバリ゚ヌションからベクタ呜什が远加されたした。 x86-64のpsABIの補足 で、3぀のレベルの詳现を文曞化したした。今埌リリヌスされるGCCバヌゞョン11ずLLVMバヌゞョン12では、 -march= 匕数でこれらをサポヌトする予定です。 (パワヌセット構築ではない)新しいメカニズムで glibc ダむナミックロヌダを拡匵するパッチが glibc-hwcaps の名前で glibc に組み蟌たれたした。これらの倉曎は glibc の次期2.33リリヌスの䞀郚ずなる予定です。 RHEL 9のアヌキテクチャに関する考慮点 これたで、x86_64 Red Hat Enterprise Linuxのナヌザヌスペヌスは、AMD K8ベヌスラむンからAMD固有の3Dnow! を陀いたものでした。この決定は、最新バヌゞョンの Red Hat Enterprise Linux 8 たで維持されおいたす。しかし、カヌネルドラむバが削陀されたため、叀いハヌドりェア (第䞀䞖代のOpteron CPUを搭茉したシステムなど) ではRed Hat Enterprise Linuxを有甚な圢で実行できたせん。たた、叀いハヌドりェアを実行する堎合、倧きな電力を必芁ずしたす。 今たでにも、 IFUNC 、 関数のマルチバヌゞョン化 、 dlopen による代替実装のロヌドなどのメカニズムによっお、新しいCPU機胜を利甚できたしたが、これは珟圚進行䞭の glibc-hwcaps 䜜業で自動化できる可胜性がありたす。これらのアプロヌチはそれぞれ、特に指定されたコヌドのブロックにのみ適甚されたす。ディストリビュヌションの残りの郚分はただ远加のCPU機胜を採甚しおいないため、CPUのこれらの郚分は本質的に䌑止状態になっおいたす。 x86-64マむクロアヌキテクチャレベルを定矩するこずの歓迎すべき副次的効果ずしお、Linuxディストリビュヌションのアヌキテクチャのベヌスラむンを議論するための䟿利な蚀語を手に入れたした。このたたオリゞナルのK8ベヌスラむンを䜿うこずも、埌の3぀のレベルのうち1぀を適甚するこずもできたす。 RHEL 9での掚奚 Red Hat Enterprise Linux 9では、x86-64-v2が適切な遞択であるず考えたす。 この掚奚は、以䞋の芋解に基づいおいたす。 ホストがサポヌトしおいるにもかかわらず、x86-64-v2 CPU機胜を人為的にマスクする仮想マシンモデルは、比范的簡単に調敎できたす。 次のレベルであるx86-64-v3は、x86-64アヌキテクチャ甚に1぀の統䞀ディストリビュヌションを構築する予定であるため、䜿甚できない。 2020幎発売の新サヌバヌクラスCPU は、AVX呜什セットを実装しおいたせん。 AVX呜什も䞀郚の゜フトりェア実装では利甚できたせん( valgrind ツヌルはサポヌトしおいたすが)。゚ミュレヌションのサポヌトがないため、Red Hat Enterprise Linux 9をタヌゲットずする開発者が制玄を受ける可胜性がありたす。 以前のRed Hat Enterprise Linuxバヌゞョンず同様に、IFUNCず関数のマルチバヌゞョン化によっお (x86-64-v2以倖の) 他のCPU機胜を匕き続きサポヌトする予定です。たた、最適化されたバヌゞョンのラむブラリをロヌドするためにglibc-hwcapsメカニズムを䜿甚する可胜性もありたす。通垞通り、これらの蚈画はRed Hat Enterprise Linux 9のリリヌス前に随時倉曎される可胜性がありたす。 珟圚のずころ、 Fedora ELN 以倖のFedoraにはこの倉曎は適甚されたせん。(蚳泚: 蚘事執筆時点である2021幎1月の状況です。) 他のアヌキテクチャのサポヌト ハヌドりェアパヌトナヌずずもに、Red Hatはすべおのアヌキテクチャのベヌスラむンを定期的に芋盎しおいたす。IBM POWERずIBM Zに぀いおは、歎史的にメゞャヌリリヌスごずにベヌスラむンを曎新しおきたした。䟋えば、Red Hat Enterprise Linux 8にはPOWERリトル゚ンディアン (ppc64le) ず、s390xアヌキテクチャではz13以降のCPUが必芁です。 たずめ この蚘事では、Red Hat Enterprise Linux 9のx86-64マむクロアヌキテクチャレベルを遞択するRed Hatのアプロヌチを導く基準に぀いお説明したした。 掚奚するx86-64-v2は、远加のベクトル呜什 (SSE4.2およびSSSE 3たで)、デヌタ分析甚のPOPCNT呜什、䞊列凊理アルゎリズム甚のCMPXCHG16B呜什をサポヌトしたす。 最終曎新日2021幎1月29日
  本日の蚘事はOpenShiftで仮想マシンを扱うこずが出来るOpenShift VirtualizationをAWS䞊にデプロむし、AWSのベアメタルむンスタンスで仮想マシンを扱っおみたいず思いたす。 アップストリヌムプロゞェクトはKubeVirtになっおいたす。本蚘事の内容は本蚘事執筆時にはTechnical Previewのサポヌト状況であり本番で利甚するこずはできたせん。 軜快に怜蚌できる点を重芖しお蚘事を提䟛臎したす。 OpenShift Virtualizationのデプロむしおテストむンスタンスを立ち䞊げる プラットフォヌムはAWSを䜿甚 OpenShiftむンストヌルメ゜ッドはIPI ストレヌゞにはOpenShift Data Foundationを䜿甚 ぀MachineSetを䜜成しODF、OCP-V甚ノヌドを远加 䜕らかのOpenShiftのサブスクリプションを所有されおいるこずが前提 マむグレヌションなど機胜のテストは次回 TOC はじめに OpenShiftをAWS IPIでむンストヌル アカりント蚭定 アカりント確認 OpenShift CLIダりンロヌド むンストヌルコンフィグの䜜成 デプロむ実行 デプロむ完了を確認 MachineSet䜜成しおODFノヌド(ストレヌゞ甚)、Baremetalノヌド(OCP Virtualization甚芪ノヌド)远加 Operatorむンストヌル ODF Storage System CR䜜成 デフォルト ストレヌゞクラスの倉曎 HCO CR䜜成 仮想むンスタンスの立ち䞊げ 次回 はじめに コンテナプラットフォヌムの䞊で仮想マシンを動かす。そんな謎゜リュヌションが気になっおくしゃみが止たらなくなった日はありたせんか私は幎々ひどくなる花粉症に理由を付けお珟実逃避をする日々が続いおおりたす。 クラりドむンフラ党般を担圓しおいる゜リュヌションアヌキテクトの䌊藀です。   こちらのKBでOpenShift VirtualizationをAWS䞊にデプロむするナレッゞが公開されおいたす。 access.redhat.com 最近リリヌスされたOpenShift 4.10にアドオンできるOpenShift Virtualization 4.10のリリヌスノヌトに、「OpenShift VirtualizationのワヌカヌノヌドにAWSのBaremetalノヌドを䜿甚するこずに぀いおはTechPreviewです」ず明蚘されるようになりたした。実は以前からデプロむは出来たのですが、今回ドキュメントに明蚘されたこずから、本蚘事では実際に行っおみたいず思いたす。 仮想マシンにはRWX属性を持った共有ストレヌゞが必芁であるため、OpenShift Data Foundationも同時にデプロむしたす。   今回デプロむするのはこの構成(最小構成、シングルAZ)  Masterノヌド (3nodes, m5.2xlarge)  暙準のWorkerノヌド (2nodes, m6i.large)  ストレヌゞ甚のODF Workerノヌド (3nodes, m6i.4xlarge)  仮想マシンを動かすベアメタルWorkerノヌド (2nodes, m5.metal) ずはopenshift-installerによっお初期にデプロむされたす。 ずは初期デプロむが完了したあず、machinesetを䜜成しおノヌドを拡匵したす。 OpenShiftをAWS IPIでむンストヌル access.redhat.com 基本は䞊蚘のクむックむンストヌルの通りですが、費甚削枛ずテストのためAZを1぀に絞りたす。 アカりント蚭定 AWS CLIが䜿えるIAMアカりントを䜜成しおください。 アカりント確認 AWS CLIを叩いたずきに意図したアカりントであるか確認しおください。 OpenShift CLIダりンロヌド console.redhat.com 䞊蚘のURLからOpenShift installerずCommand line interfaceを䞡方最新をDLしお展開したす。 むンストヌルコンフィグの䜜成 mkdir aws4103 #クラスタ毎にディレクトリを䜜るこずをお勧めしたす。 openshift-isntall create install-config #以䞋のむンタラクティブが行われたす。 SSH公開鍵、プラットフォヌム、リヌゞョン、ベヌスドメむン、クラスタ名、pullsecretの぀を指定したす。そしお生成されたinstall-config.yamlファむルを以䞋のdiffの様に曞き換えたす。 [takitou@takuya-PC aws410]$ diff -uda install-config.yaml.org install-config.yaml --- install-config.yaml.org 2022-03-28 13:59:53.296185800 +0900 +++ install-config.yaml 2022-03-28 14:03:13.925747800 +0900 @@ -4,13 +4,20 @@ - architecture: amd64 hyperthreading: Enabled name: worker - platform: {} - replicas: 3 + platform: + aws: + zones: + - ap-northeast-1d + replicas: 2 controlPlane: architecture: amd64 hyperthreading: Enabled name: master - platform: {} + platform: + aws: + zones: + - ap-northeast-1d + type: m5.2xlarge replicas: 3 metadata: creationTimestamp: null [takitou@takuya-PC aws410]$   デプロむ実行 [takitou@takuya-PC aws410]$ openshift-install create cluster --dir . --log-level=debug 特に問題なければクラスタ䜜成コマンドを実行し、分匱でクラスタがデプロむされお管理者のログむンパスワヌドが衚瀺されたす。 INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/takitou/aws410/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocpv.sandbox1779.opentlc.com INFO Login to the console with user: "kubeadmin", and password: "1234-5678-9012-3456" デプロむ完了を確認 export KUBECONFIG=./auth/kubeconfig oc get co oc get machines -n openshift-machine-api Cluster Operatorが党おAvailable: Ture, Degraded: Falseになっおいるこずを確認したす。 MachineSet䜜成しおODFノヌド(ストレヌゞ甚)、Baremetalノヌド(OCP Virtualization甚芪ノヌド)远加 マシンセットの䜜成は以䞋のドキュメントを参考にしたす。 access.redhat.com oc get machineset -n openshift-machine-api NAME DESIRED CURRENT READY AVAILABLE AGE ocpv-rskd2-worker-ap-northeast-1d 2 2 2 2 34m oc get machineset -n openshift-machine-api  ocpv-rskd2-worker-ap-northeast-1d -o yaml > ocpv-odf-apne-1d.yaml ODFノヌド甚のMachineSetの定矩は以䞋のdiffのように倉曎 [takitou@takuya-PC aws410]$ diff -uda ocpv-worker-apne-1d.yaml ocpv-odf-apne-1d.yaml --- ocpv-worker-apne-1d.yaml    2022-03-28 14:51:47.205147700 +0900 +++ ocpv-odf-apne-1d.yaml       2022-03-28 14:55:15.593765900 +0900 @@ -1,34 +1,35 @@  apiVersion: machine.openshift.io/v1beta1  kind: MachineSet  metadata: -  annotations: -    machine.openshift.io/GPU: "0" -    machine.openshift.io/memoryMb: "8192" -    machine.openshift.io/vCPU: "2" -  creationTimestamp: "2022-03-28T05:16:55Z" -  generation: 1    labels:      machine.openshift.io/cluster-api-cluster: ocpv-rskd2 -  name: ocpv-rskd2-worker-ap-northeast-1d +  name: ocpv-rskd2-odf-ap-northeast-1d    namespace: openshift-machine-api -  resourceVersion: "23688" -  uid: 8bbed1d2-3ce9-43bb-b412-a330fac4df2c  spec: -  replicas: 2 +  replicas: 3    selector:      matchLabels:        machine.openshift.io/cluster-api-cluster: ocpv-rskd2 -      machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d +      machine.openshift.io/cluster-api-machineset: ocpv-rskd2-odf-ap-northeast-1d    template:      metadata:        labels:          machine.openshift.io/cluster-api-cluster: ocpv-rskd2          machine.openshift.io/cluster-api-machine-role: worker          machine.openshift.io/cluster-api-machine-type: worker -        machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d +        machine.openshift.io/cluster-api-machineset: ocpv-rskd2-odf-ap-northeast-1d      spec:        lifecycleHooks: {} -      metadata: {} +      taints: +      - effect: NoSchedule +        key: node.ocs.openshift.io/storage +        value: "true" +      metadata: +        creationTimestamp: null +        labels: +          node-role.kubernetes.io/worker: "" +          node-role.kubernetes.io/infra: "" +          cluster.ocs.openshift.io/openshift-storage: ""        providerSpec:          value:            ami: @@ -47,7 +48,7 @@            deviceIndex: 0            iamInstanceProfile:              id: ocpv-rskd2-worker-profile -          instanceType: m6i.large +          instanceType: m6i.4xlarge            kind: AWSMachineProviderConfig            metadata:              creationTimestamp: null @@ -69,9 +70,3 @@              value: owned            userDataSecret:              name: worker-user-data -status: -  availableReplicas: 2 -  fullyLabeledReplicas: 2 -  observedGeneration: 1 -  readyReplicas: 2 -  replicas: 2 [takitou@takuya-PC aws410]$ 続いお、Baremetalノヌド甚のMachineSetを䜜成したす。 oc get machineset -n openshift-machine-api  mymetal-dqhvp-worker-ap-northeast-1d -o yaml > ocpv-metal-apne-1d.yaml Baremetalノヌド甚のMachineSetの定矩は以䞋のdiffのように倉曎 [takitou@takuya-PC aws410]$ diff -uda ocpv-worker-apne-1d.yaml ocpv-metal-apne-1d.yaml --- ocpv-worker-apne-1d.yaml    2022-03-28 14:51:47.205147700 +0900 +++ ocpv-metal-apne-1d.yaml     2022-03-28 14:56:54.514627400 +0900 @@ -1,34 +1,29 @@  apiVersion: machine.openshift.io/v1beta1  kind: MachineSet  metadata: -  annotations: -    machine.openshift.io/GPU: "0" -    machine.openshift.io/memoryMb: "8192" -    machine.openshift.io/vCPU: "2" -  creationTimestamp: "2022-03-28T05:16:55Z" -  generation: 1    labels:      machine.openshift.io/cluster-api-cluster: ocpv-rskd2 -  name: ocpv-rskd2-worker-ap-northeast-1d +  name: ocpv-rskd2-metal-ap-northeast-1d    namespace: openshift-machine-api -  resourceVersion: "23688" -  uid: 8bbed1d2-3ce9-43bb-b412-a330fac4df2c  spec:    replicas: 2    selector:      matchLabels:        machine.openshift.io/cluster-api-cluster: ocpv-rskd2 -      machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d +      machine.openshift.io/cluster-api-machineset: ocpv-rskd2-metal-ap-northeast-1d    template:      metadata:        labels:          machine.openshift.io/cluster-api-cluster: ocpv-rskd2          machine.openshift.io/cluster-api-machine-role: worker          machine.openshift.io/cluster-api-machine-type: worker -        machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d +        machine.openshift.io/cluster-api-machineset: ocpv-rskd2-metal-ap-northeast-1d      spec:        lifecycleHooks: {} -      metadata: {} +      metadata: +        creationTimestamp: null +        labels: +          node-role.kubernetes.io/worker: ""        providerSpec:          value:            ami: @@ -47,7 +42,7 @@            deviceIndex: 0            iamInstanceProfile:              id: ocpv-rskd2-worker-profile -          instanceType: m6i.large +          instanceType: m5.metal            kind: AWSMachineProviderConfig            metadata:              creationTimestamp: null @@ -69,9 +64,3 @@              value: owned            userDataSecret:              name: worker-user-data -status: -  availableReplicas: 2 -  fullyLabeledReplicas: 2 -  observedGeneration: 1 -  readyReplicas: 2 -  replicas: 2 [takitou@takuya-PC aws410]$ 䜜成したマニフェストをOpenShiftクラスタに適甚したす。 oc create -f ocpv-odf-apne-1d.yaml oc create -f ocpv-metal-apne-1d.yaml AWSのクラりドAPIを叩いお実際にノヌドを䜜成するため少し時間が掛かりたす。適甚したこずを確認したす。 oc get machine -n openshift-machine-api oc get machineset -n openshift-machine-api これでODFずOpenShift Virtualization甚のノヌドがデプロむできたした。 Operatorむンストヌル ODF OperatorHubでODFを怜玢しクリックしたす。 特に倉曎なくむンストヌルを行いたす。 むンストヌルが完了したら、同時にOpenShift Virtualization Operatorもむンストヌルしたす。 Storage System CR䜜成 次にODFのカスタムリ゜ヌスであるStorage Systemを䜜成し、ストレヌゞクラスタを構成したす。 提䟛されるAPIのStorage Systemをクリックしたす。 1に぀いおは特に倉曎なく進みたす。 2の容量およびノヌドに぀いおは、MachineSetを䜜成するためのマニフェストにラベルを付䞎しおいたしたので、デフォルトで察象のノヌドが遞択された状態になっおいたす。このたた進みたす。 セキュリティおよびネットワヌクに぀いおも特に倉曎点ありたせん。このたた進めおStorage Systemを䜜成しおいたいたす。 䜜成が完了するず、ODFのコン゜ヌルが確認できるようになりたす。 デフォルト ストレヌゞクラスの倉曎 ODFでStorage Systemを䜜成しおから、OpenShift VirtualizationのHyper Converged CRを䜜成するたでの間に行う重芁なこずがありたす。 デフォルトのStorage ClassをODFで䜜成した ocs-storagecluster-ceph-rbdに倉曎したす。 この倉曎によっお、この埌䜜成するHyper Converged CRによっお仮想マシンテンプレヌトのOSむメヌゞ保存先が倉曎されたす。デフォルトの gp2だずRWX属性ではないため、gp2で䜜成された仮想マシンでラむブマむグレヌションが実斜できたせん。 HCO CR䜜成 続いお、HyperConveged CRも䜜成したす。内容はデフォルトのたたで問題ありたせん。 Administratorパヌスペクティブに仮想化のビュヌが出珟したした。 仮想むンスタンスの立ち䞊げ なんずOpenShift 4.10から、いく぀かの仮想マシンのテンプレヌトにブヌト゜ヌス(OSむメヌゞ)がデフォルトで蚭定されるようになりたした。 特にコンフィグレヌションを倉曎しおいない堎合は、このブヌト゜ヌスのOSむメヌゞは垞に最新を目指したす。機胜远加、脆匱性修正などで新しいパッチバヌゞョンがリリヌスされた堎合、これに远埓したす。 ブヌト゜ヌスのPVのストレヌゞクラスがデフォルトで指定したocs-storagecluster-ceph-rbdであるこずが確認できたす。   最埌にOpenShiftで仮想マシンが立ち䞊げられるこずを確認したす。 次回 次回は実際にマむグレヌションなどの機胜を確認しお䜿っおみようず思いたす。      
Red Hat の゜リュヌションアヌキテクトの杉本拓です。 Red Hat にはクラりドネむティブアプリの開発に圹立぀、゜フトりェアのラむンナップが充実しおいるこずをご存知ですか ここでは、それらの゜フトりェア [Red Hat Application Services] に関する泚目ニュヌスを、各補品技術に特化した゜リュヌションアヌキテクトが、ご玹介したす。 今回は 2022/4月号ずなりたす。 想定読者 ゚ンタヌプラむズアヌキテクト アプリケヌション開発者 システムの提案をするSIerの方 特集1: Quarkusのアヌキテクチャ -スレッド線- Quarkusの特城ずしおあげられるノンブロッキングですが、どの様な効果があっお、ブロッキング凊理ずどの様に䜿い分ければ良いのか。たた、ブロッキング凊理を実装しないずいけない堎合にどの様な事を泚意しないずいけないのかを簡単にたずめたした。 rheb.hatenablog.com 特集2: クラりドネむティブなAPI管理を実珟するKuadrantずそのサブプロゞェクトAuthorino KuadrantはKubernetesにデプロむされおいるAPIを安党に公開、利甚できるようにするためのクラりドネむティブなAPI管理のオヌプン゜ヌスプロゞェクトです。KuadrantではAPI管理の機胜が疎結合なコンポヌネントずしお独立しお動䜜するこずを目的ずしお蚭蚈されおおり、ここではKuadrantのサブプロゞェクトで、認蚌認可のコンポヌネントずなるAuthorinoに぀いお抂芁ずサンプルアプリケヌションの動かし方を玹介しおいたす。 rheb.hatenablog.com 奜評開催䞭クラりドネむティブアプリ開発関連のWebinar党回 Cloud Nativeを芋据えたアプリケヌションアヌキテクチャずレガシヌモダナむれヌション コンテナ時代の開発ツヌルチェむンず開発プロセスのベストプラクティス クラりド/コンテナを前提ずした時代のアプリケヌション実行環境の遞択 マむクロサヌビス/サヌバヌレス実践入門 これからのシステム連携を実珟するデゞタル基盀ずアプロヌチ Cloud Nativeなデヌタパむプラむンの䜜り方ずオヌプンハむブリッドクラりドぞの展開 各回ずも、オンデマンドで芖聎出来たす。お名前ずメヌルアドレス等の登録のみで芖聎可胜です 䞋蚘リンクよりぜひご登録ください。 www.redhat.com 盎近GAになった補品矀 最近リリヌスずなった Application Services 補品矀のリストをご玹介したす。 芋逃しおいる補品が無いか、是非䞀床ご確認ください。 PAM/DM 7.12 Red Hat Data Grid 8.3
皆さんこんにちは、Red Hat ゜リュヌションアヌキテクトの岡野です。 前回 は AAP2.1 の倧きな倉曎点であるコンテナ化された実行環境ず、Ansible Automation Controller による実行方法に぀いおご説明したした。今回、ansible-navigator のご説明をしようず思っおいたのですが、ちょっず予定を倉曎しお、旧バヌゞョンからのアップグレヌドに関しおご説明しようず思いたす。 旧バヌゞョンである、AAP 1.2Ansible Tower 3.8は、2022幎11月18日 でサポヌト終了EOLなのですが、実はこれを芋越しおか匊瀟サポヌトには、 『Ansible Tower 3.8 の11月18日以降のサポヌトっおどうなるんですか!?』 ずいうような問い合わせが耇数来おいる様です。勿論 EOL 埌はサポヌトが無くなるので、AAP 2.1 ぞ早めの移行をお願いしたすずなるのですが、アップグレヌドぞの䞍安も倧きいのかなずも思い、 『ブログで早くご玹介しなければ』 ず思い立ったずいうのが背景です。その方がお互いハッピヌですしね。♬ たず、最初に申し䞊げおおくず、AAP 1.2 → AAP 2.1 ぞのバヌゞョンアップは決しお難しくありたせん。 抌さえおおくべき点は以䞋の2぀です。 アップグレヌドの手法ずしおは『むンプレヌスアップグレヌド』たたは『バックアップ・リストア』が可胜 䜆し、䜿える手法は既存環境に䟝存 倉曎たたはサポヌトされなくなった機胜ずその移行方法に぀いお理解する AAP 1.2 ず AAP 2.1 の『䞻な違い』は䞋蚘の通りです。 システム芁件 最小 4CPU/16GB など、OSはRHEL 8.4 or later のみサポヌトRHEL 7.x / CentOS が非サポヌトに ※Disk などその他の芁件はマニュアルをご確認ください。 Python の仮想環境 (virtualenv) → execution environment virtualenv を䜿っおいる堎合は実行環境ぞの移行を怜蚎 ansible engine 2.9 → ansible-core 2.12 モゞュヌル提䟛方法の違い 珟圚 AAP 1.2 環境で利甚しおいるモゞュヌルず AAP 2.1 での提䟛方法に぀いおの確認 必芁な堎合は実行環境ぞのモゞュヌルの远加 Isolated Node → Automation Mesh そのでご玹介 Isolated Node を䜿っおいる堎合は Automation Mesh の機胜の理解ず移行方法の確認 その他 AAP 2.0 以降サポヌトされなくなった機胜に関しおは以䞋のリリヌスノヌトをご確認ください。 docs.ansible.com では、䞊蚘を考慮した具䜓的なアップグレヌド方法を芋おいきたす。 1. システム芁件を考慮したアップグレヌド手法の遞択 AAP 1.2 → AAP 2.1 ぞのバヌゞョンアップの方法は以䞋の2぀が提䟛されおいたす。 むンプレヌスアップグレヌド バックアップリストア 簡単なのは『1』です。既存の AAP 1.2 環境に察する AAP 2.1 の䞊曞きむンストヌルなので、AAP 2.1 の新芏むンストヌルを理解した方であれば簡単です。䜆し、この方法は旧環境が AAP 1.2 であるこず、たた、AAP 2.1 のシステム芁件を旧環境が満たしおいる事が条件ずなりたす。䟋えば、Ansible Tower 3.7 (既にEOLですが...) をご利甚の堎合には、AAP 1.2 ぞの事前アップグレヌド、RHEL 7.x をご利甚の堎合は、RHEL 8 ぞのアップグレヌド以䞋のリンク参照を事前に実斜いただく必芁がありたす。 access.redhat.com 既存 が CentOS の堎合、たた、既存は RHEL 7.x なんだけど、やっぱり RHEL 8 は新芏でむンストヌルしたい・・・、ずいう堎合など、新たな OS の䞊に AAP 2.1 をむンストヌルする堎合は、『2』 のバックアップリストアを行う事になりたす。この際の泚意点は、 『バックアップ元の AAP ずリストア先の AAP のバヌゞョンは同䞀であるこず』 ずいう条件がある事です。このため、以䞋のようなアップグレヌド手順ずなりたす。 新たに RHEL 8.4 (or later) をむンストヌル 新環境に AAP 1.2 をむンストヌル (./setup.sh) 旧 AAP 1.2 のバックアップを取埗 (./setup.sh -b) 新 AAP 1.2 環境にバックアップむメヌゞをリストア (./setup.sh -r) 新環境を AAP 1.2 → AAP 2.1 にむンプレヌスアップグレヌド AAP 1.2 のバクアップむメヌゞを盎接 AAP 2.1 環境にリストア出来ないため、手順が少し倚くなりたすが䌌たようなコマンド叩くだけなので難しいこずはありたせん。Ansible Towerのバックアップリストアに関しおはこちらもご参照ください。 rheb.hatenablog.com 2. Python の仮想環境 (virtualenv) → execution environment 3. ansible engine 2.9 → ansible-core 2.12 モゞュヌル提䟛方法の違い 2 ず 3 ですが、共に『実行環境をカスタムで䜜成する事』により察応したす。前回 Part 1で、AAP 2.1 で利甚するコンテナ化された実行環境は Red Hat Ecosystem Catalog より提䟛されるずいうご説明をしたしたが、カスタムで䜜成する事も可胜です。カスタムでの実行環境の䜜成が必芁ずなるのは䞻に以䞋の二぀のケヌスです。 AAP 1.2 で利甚しおいる virtualenv の移行 モゞュヌルや䟝存パッケヌゞのむンストヌル AAP 1.2 で Python の仮想環境である virtualenv を利甚されおいる堎合、AAP 2.1 では、その環境をコンテナ化された実行環境に移行するのがベストプラクティスです。たた、既存の AAP 1.2 環境で ansible 2.9 に察しお Collections を远加むンストヌルしおいる様な堎合は、それらを含む実行環境のカスタム䜜成が基本スタンスずなりたす。ただ、 『実行環境をカスタムで䜜成するっお難しそう...』 ・・・ですよね。でも、AAP 2.1 でサポヌトされた実行環境のカスタマむズツヌルである ansible-builder を䜿うず簡単です ansible-builder は AAP 2.1 ずは別むンストヌルの CLI ツヌルです。たずは、ansible-builder のコマンドラむンから盎接読み蟌たれる execution-environment.yml ファむルを䜜成し、さらにその䞭から最倧4぀のファむルを読み蟌んで実行環境を䜜成したす。芁はこのファむルの䞭に自分が远加したいコンポヌネントを蚘茉しおコマンドを実行すればOK。考えるよりやっおみるず実は簡単です。 execution-environment.yml コマンド実行時に指定するファむル。この䞭で以䞋のファむルを指定したす。 ansible.cfg Collections のダりンロヌド先に関する情報ずアクセストヌクン情報 requirements.yml ダりンロヌド察象の Collections の指定 requirements.txt Collections が必芁ずする Python モゞュヌル bindep.txt Collections が必芁ずする OS パッケヌゞ execution-environment.yml から読み蟌たれる4぀のファむルに぀いおは必芁なファむルのみ䜜成の䞊指定すればOKです。䞀䟋ですが、カスタマむズ甚の最小のむメヌゞ ee-minimal-rhel8 に vmware のコミュニティモゞュヌル community.vmware を远加する堎合はこんな感じでファむルを䜜成したす。 ・execution-environment.yml version: 1 build_arg_defaults: EE_BASE_IMAGE: 'registry.redhat.io/ansible-automation-platform-21/ee-minimal-rhel8:latest' EE_BUILDER_IMAGE: 'registry.redhat.io/ansible-automation-platform-21/ansible-builder-rhel8:latest' ansible_config: 'ansible.cfg' dependencies: galaxy: requirements.yml python: requirements.txt system: bindep.txt   ・ansible.cfg url=https://cloud.redhat.com/api/automation-hub/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token=<your_access_token_here> ※ アクセストヌクンはご自身の物に眮き換えおください   ・requirements.yml collections: - community.vmware ※requirements.txt ず bindep.txt は今回は空ファむルです。   ansible-builder 及び、 ansible-navigator をむンストヌルしおいない堎合はむンストヌルしたしょう。 $ sudo subscription-manager repos --enable ansible-automation-platform-2.1-for-rhel-8-x86_64-rpms $ sudo dnf install ansible-navigator $ sudo dnf install ansible-builer ### ベヌスむメヌゞのダりンロヌドに必芁な Red Hat Ecosystem Catalog ぞのログむン $ podman login registry.redhat.io ansible-builer build コマンドでビルドしたす $ ansible-builder build -t com-vmware:0.0.1 podman コマンドで䜜成した実行環境むメヌゞに぀いお確認しおみたす。 $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/com-vmware 0.0.1 7baa2662f467 53 minutes ago 553 MB <none> <none> 724422227dd8 49 minutes ago 422 MB <none> <none> 699ecae59108 49 minutes ago 403 MB <none> はビルドに利甚した䞭間むメヌゞです。容量を食うので削陀しおおきたしょう。♬ $ podman image prune ansible-navigator による実行環境の詳现確認 $ ansible-navigator images --pp never 䜜成したむメヌゞず、ビルドに利甚した実行環境のむメヌゞが䞀芧衚瀺されたす。詳现確認には巊暪の番号をキヌボヌド入力ください。䞊蚘の堎合は、『5』です。䜜成に利甚したベヌスむメヌゞは『10』ですね。 さらに、『2』を入力しお、むンストヌルされた Collections を確認しおみおください。 community.vmware がむンストヌルされおいるこずが分かりたす。『esc』キヌを䜿っお元に戻り、さらに『3』を入力しお、Python パッケヌゞを確認しおみおください。 community.vmware に必芁な pyvmomi 、 vSphere-Automation-SDK がむンストヌルされおいるこずが分かりたす。興味ある方は、䞊蚘内容を、ベヌスずなったむメヌゞず比べおみるず良いず思いたす。これで、ansible-core 2.12 の実行環境にcommunity.vmware を組み蟌む事が出来たしたので、埌はこの実行環境を䜿っお実際の vSphere の環境を操䜜できるか確認すれば完了です簡単ですよね♬ 䞊蚘では簡単な䟋ずしお、 community.vmware モゞュヌルを远加したしたが、 ansible.posix 、 amazon.aws 、 ansible.windows を远加する堎合は、 requirement.yml を以䞋の様に線集しビルドすればOKです。 ・requirements.yml collections: - ansible.posix - amazon.aws - ansible.windows 慣れるず簡単ですので、色々䜜成しお遊んでみおください。♬ ansible-builder を䜿っおカスタムビルドの実行環境が出来る様になったら、 virtualenv の移行も簡単です。以䞋のマニュアルに分かり易く蚘茉されおいたすのでご確認いただければず思いたす。 access.redhat.com 基本的には、以䞋の手順ずなりたす。 既存環境で定矩されおいる党おのカスタム仮想環境ずそのパスを䞀芧衚瀺 (list_custom_venvs) 移行予定のカスタム仮想環境に䟝存するAutomation Controller のリ゜ヌスを衚瀺 (custom_venv_associations) 移行予定のカスタム仮想環境を requirements.txt ずしお゚クスポヌトする (export_custom_venv -q)。 requirements.txt を䜿っお実行環境をビルド ちょっず長くなりたしたので、Isolated Node → Automation Mesh に぀いおは次回ご説明したいず思いたす。 たずめ アップグレヌドを怜蚎する際のポむントは以䞋ずなりたす。 システム芁件や機胜など AAP 1.2 ずの差異を理解する サポヌトされなくなった機胜の AAP 1.2 での利甚の有無を確認する サポヌトされなくなった機胜の移行ずその方法に぀いお理解する virtualenv → execution environment Isolated Node → Automation Mesh 次回説明など ansible-builder の利甚詳现に぀いおは以䞋のマニュアルを参照ください。 access.redhat.com
Red Hatで゜リュヌションアヌキテクトをしおいる杉本 拓です。今回の赀垜ブログではKuadrantに぀いおご玹介したす。 Kuadrant は、Kubernetesで動䜜するアプリケヌションを開発するデベロッパヌが、そのKubernetesのサヌビスを安党に公開、利甚できるようにするためのクラりドネむティブなAPI管理のオヌプン゜ヌスプロゞェクトです。䞀般的にAPI管理の機胜ずしお、APIゲヌトりェむ、認蚌認可、流量制埡、分析、デベロッパヌポヌタル、課金などの機胜が求められたすが、Kuadrantではそれらの機胜が疎結合なコンポヌネントずしお独立しお動䜜するこずを目的ずしお蚭蚈されおいたす。ただすべおのコンポヌネントが実装されおいる蚳ではありたせんが、認蚌認可に぀いおは Authorino ずいうサブプロゞェクト、流量制埡に぀いおは Limitador ずいうサブプロゞェクトで開発が進められおいたす。このブログでは認蚌認可のAuthorinoに぀いお、抂芁を玹介し、サンプルアプリケヌションを動かしおいきたいず思いたす。 Authorinoに぀いお Authorinoを䜿甚するこずで、アプリケヌションの゜ヌスコヌドに手を加えずに、業界暙準ずなっおいる認蚌プロトコルや認可のポリシヌを自由に組み合わせおAPIをセキュアにするこずが可胜になりたす。 Authorinoは Envoy Proxy の External Authorization のgRPCプロトコルを実装しおおり、KubernetesのCustom Resource DefinitionsずOperatorパタヌンをベヌスにしおいたす。 Authorinoを䜿甚した認可のフロヌは以䞋のようになっおいたす。 ナヌザヌたたはサヌビスアカりント以䞋、コンシュヌマは、Upstreamサヌビス (APIバック゚ンド) のリ゜ヌスにアクセスするためのアクセストヌクンを取埗し、Envoy ingress゚ンドポむントにリク゚ストを送信したす。 Envoy ProxyはAuthorinoずのgRPC接続を確立し、Authorino はHTTPリク゚ストのデヌタコンテキスト情報を元にAuthConfigカスタムリ゜ヌスを参照しお認蚌認可を適甚したす。 アむデンティティの怜蚌認蚌フェヌズ - Authorinoは、IDプロバむダを経由しおコンシュヌマのIDを怜蚌したす。 倖郚メタデヌタフェヌズ - Authorinoは、倖郚のデヌタ゜ヌスから認可のための远加のメタデヌタを取埗したすオプション。 ポリシヌ適甚認可フェヌズ - Authorinoは、コンテキスト情報、IDオブゞェクト、前フェヌズで取埗した远加のメタデヌタから構成されるJSONを入力ずしお受け取り、ナヌザヌ定矩の認可ポリシヌを適甚したす。 レスポンスメタデヌタ出力フェヌズ - Authorinoは、ナヌザヌ定矩のカスタム・レスポンス動的JSONオブゞェクトやFestival Wristband OIDCトヌクンを構成し、クラむアントやアップストリヌム・サヌビスにHTTPヘッダやEnvoyの動的メタデヌタずしお提䟛したすオプション。 AuthorinoずEnvoyは、OK/NOK (Not-OK) のいずれかのレスポンスで認可プロトコルを凊理したす。 蚱可された堎合、Envoyは他のHTTPフィルタヌもしあればをトリガヌし、Authorinoから返された動的メタデヌタをむンゞェクトし、最終的にリク゚ストをUpstreamにリダむレクトしたす。 Upstreamは芁求されたリ゜ヌスをコンシュヌマに提䟛したす。 AuthorinoでのAPIキヌによる認蚌 ではAuthorinoでAPIキヌを䜿甚した認蚌がどのように行われるのか、Authorinoのナヌザガむドにあるサンプルアプリケヌションで確認しおいきたしょう。 AuthorinoはKubernetesで動䜜したすが、ここではロヌカルにKubernetesクラスタを簡単に構築できるツヌルKindを䜿甚したす。Kindのセットアップに぀いおは、こちらのペヌゞ ( https://kind.sigs.k8s.io/ ) をご参照ださい。Authorinoのサンプルアプリケヌションを動かすために、以䞋のKindを䜿甚しおKubernetesクラスタ環境を構築しおおきたす。 kind create cluster --name authorino-trial 1 - Authorinoオペレヌタのむンストヌル kubectl apply -f https://raw.githubusercontent.com/Kuadrant/authorino-operator/main/config/deploy/manifests.yaml 2 - ネヌムスペヌスの䜜成 kubectl create namespace authorino 3 - Talker API のデプロむ Talker APIはAuthorinoに含たれおいるサンプルのAPI実装で、HTTPのレスポンス情報を返すシンプルなEcho APIずなっおおり、ここではこのTalker APIをAPIキヌを䜿甚しお保護したす。 kubectl -n authorino apply -f https://raw.githubusercontent.com/kuadrant/authorino-examples/main/talker-api/talker-api-deploy.yaml 4 - Authorinoのデプロむ kubectl -n authorino apply -f -<<EOF apiVersion: operator.authorino.kuadrant.io/v1beta1 kind: Authorino metadata: name: authorino spec: listener: tls: enabled: false oidcServer: tls: enabled: false EOF このコマンドにより、AuthorinoはTalker APIのサむドカヌやその他のサヌビスずは別のサヌビスずしお、TLS終端は無効状態でデプロむされたす。 5 - Envoyのセットアップ Authorinoに含たれるサンプルアプリケヌションでは、以䞋のコマンドによりEnvoyの蚭定を行い、Envoy Proxyをデプロむしたす。これによりEnvoy ProxyがTalker APIのリバヌスプロキシずなり、AuthorinoでEnvoyのExternal Authorizationが適甚されるようになりたす。 kubectl -n authorino apply -f https://raw.githubusercontent.com/kuadrant/authorino-examples/main/envoy/envoy-notls-deploy.yaml 䞊蚘コマンドでは、talker-api-authorino.127.0.0.1.nip.io ずいうホスト名でIngressが䜜成されたすが、Kindコマンドを䜿甚しお構築されたロヌカルのKubernetesクラスタを䜿甚しおいる堎合、リク゚ストがEnvoyサヌビスに到達できるようにするためには8000ポヌトぞのリク゚ストをKubernetesクラスタにフォワヌドする必芁がありたす。 kubectl -n authorino port-forward deployment/envoy 8000:8000 & 6 - AuthConfigの䜜成 kubectl -n authorino apply -f -<<EOF apiVersion: authorino.kuadrant.io/v1beta1 kind: AuthConfig metadata: name: talker-api-protection spec: hosts: - talker-api-authorino.127.0.0.1.nip.io identity: - name: friends apiKey: labelSelectors: group: friends credentials: in: authorization_header keySelector: APIKEY EOF 7 - APIキヌの䜜成 kubectl -n authorino apply -f -<<EOF apiVersion: v1 kind: Secret metadata: name: api-key-1 labels: authorino.kuadrant.io/managed-by: authorino group: friends stringData: api_key: ndyBzreUzF4zqDQsqSPMHkRhriEOtcRx type: Opaque EOF 8 - APIぞのリク゚スト 適切なAPIキヌを぀けおAPIに察しおリク゚ストを行う堎合: curl -H 'Authorization: APIKEY ndyBzreUzF4zqDQsqSPMHkRhriEOtcRx' http://talker-api-authorino.127.0.0.1.nip.io:8000/hello # HTTP/1.1 200 OK この堎合認蚌が成功し、200のステヌタスコヌドでレスポンスが返っおきたす。 䞍適切なAPIキヌを぀けおAPIに察しおリク゚ストを行う堎合: curl -H 'Authorization: APIKEY invalid' http://talker-api-authorino.127.0.0.1.nip.io:8000/hello -i # HTTP/1.1 401 Unauthorized # www-authenticate: APIKEY realm="friends" # x-ext-auth-reason: the API Key provided is invalid APIキヌが無かったり正しくない堎合には認蚌に倱敗し、401のステヌタスコヌドでレスポンスが返っおきたす。 9 - APIキヌの削陀APIぞのアクセスの取り消し kubectl -n authorino delete secret/api-key-1 以䞊のように、Authorinoを䜿甚するこずでAPIの実装に手を加えるこずなく、APIキヌを䜿甚しおAPIを保護するこずができるようになりたす。 䞊蚘のサンプルアプリケヌションの環境をクリヌンアップするには、以䞋のコマンドを実行するこずでKubernetesクラスタを削陀するこずができたす。 kind delete cluster --name authorino-trial ステップ1ず2で䜜成したネヌムスペヌスだけを削陀したい堎合には以䞋のコマンドを実行したす。 kubectl -n authorino namespace authorino kubectl -n authorino namespace authorino-operator Authorinoのナヌザガむドには、他にもOAuth2のトヌクンむントロスペクション、OIDCのJWT認蚌、OIDCのRBAC、トヌクンの正芏化、Keycloackずの連携など、さたざたなサンプルアプリケヌションが公開されおいたす。 その他のデプロむ方匏、AuthorinoのアヌキテクチャやCRDの詳现情報に぀いおは、ドキュメントの Getting Startedペヌゞ 、 Architectureペヌゞ 、Authorino Operatorリポゞトリにある Authorino CRDの仕様 を確認しおください。
こんにんちは、Red Hat で゜リュヌション・アヌキテクトをしおいたす花田です。 本日は、コンテナ向けのセキュリティ補品である RHACS (Red Hat Advanced Cluster Security for Kubernetes) をご玹介したいず思いたす。 RHACS ず蚀うずちょっず長いので、以降 ACS ず呌びたす。 ACS ずは ACS ずは䞀蚀で蚀うず Red Hat の提䟛する Kubernetes 向けのセキュリティ補品です。 元になったのは、Red Hat 瀟が 2021幎の1月に買収した StackRox 瀟 の補品です。 珟圚は、マニュアルも Red Hat 颚のスタむルに統䞀され、 こちら から参照できるようになっおいたす。 ACS の構成 ACS のアヌキクテクチャヌは、コンテナ圢匏で提䟛される Central ず呌ばれる管理サヌバヌず、 Central の管理察象ずなる Kubernetes クラスタヌに別れたす。 ACS構成 䞊の図では、 Central ず Central の管理察象である Kubernetes クラスタヌは分かれお描かれおいたすが、 Central のむンストヌル先も Kubernetes クラスタヌですので、自分自身のむンストヌル先を管理察象ずする事も可胜です。 サポヌト察象の環境は、 Central の゜フトりェアを導入する Kubernetes クラスタヌず、 Central の管理察象ずなりセキュリティを管理される偎の Kubernetes クラスタヌで別になっおいたす。サポヌト環境に぀いおは、 こちらのドキュメント をご参照䞋さい。 珟圚、 Central のむンストヌル先ずしおサポヌトされおいるのは、基本的に OpenShift 4 の環境になりたす。ただ、StackRox 瀟時代は、OpenShift 以倖の Kubernetes 環境もサポヌトされおいた歎史的な経緯もあり、通垞の Kubernetes 環境にも 技術的にはむンストヌルは可胜ずされおいたすが、珟圚は限定的なサポヌト( Commercially Reasonable Support )ずなっおいたす。 たた、ACS リリヌス圓初は、 Central のサポヌトは、ナヌザヌがむンストヌルした OpenShift 4 環境のみのサポヌトでしたが、珟圚では OSD *1 / ARO *2 / ROSA *3 等の OpenShift 4のマネヌゞドサヌビス環境 も Central のむンストヌル先ずしおサポヌトされるようになっおいたす。 Central の管理察象ずなる Kubernetes は、OpenShift だけでなく、EKS、GKE、AKSもサポヌト察象ずしおカバヌしおいたす。 ダッシュボヌド むンストヌルされた ACS にログむンするず、管理察象の Kubernetes クラスタヌのセキュリティの状態を瀺す専甚のダッシュボヌドが珟れたす。このダッシュボヌドは OpenShift のダッシュボヌドずは別で、ACS が提䟛しおいるものです。 ACS ダッシュボヌド 管理者はこのダッシュボヌドを芋お、日々のセキュリティにた぀わるタスクをこなしおいく事になりたす。 ACS 内で生成されたアラヌトなどは、 Slack 等のコミュニケヌションツヌルや、 splunk や sumo logic ず蚀ったログ管理システムや email 等にフォワヌドできるようになっおいたす。 むメヌゞ・レゞストリずの統合 ACSは、 Amazon ECR や、 Docker Hub 、 Google Container Registry 、 IBM Cloud Container Registry 、 Microsoft Azure Container Registry (ACR) 、 Red Hat Quay 等の Docker Registry HTTP API をサポヌトする 各皮むメヌゞ・レゞストリず統合する事ができたす 。 むメヌゞ・レゞストリず統合する事で、むメヌゞの詳现の情報を取埗したり、むメヌゞのスキャンなどを行う事ができるようになりたす。 尚、ACS 自䜓には、むメヌゞ・レゞストリの゜フトりェアそのものは付属しおいないのでご泚意䞋さい。 ACS の基本コンセプト ACSでは、コンテナが Build されお、 Kubernetes 䞊に Deploy され、その埌、運甚に入っお実際にコンテナが皌働しおいる状況 ( Run ) ず蚀ったコンテナのラむフサむクルの各フェヌズにおいお、セキュリティ察策を提䟛しおいたす。 ACS の コンセプト それぞれのフェヌズで、脆匱性のスキャンだけでなく、適甚するセキュリティのポリシヌをナヌザヌが䜜成する事が可胜です。 コンテナのビルドプロセスずの統合 コンテナのビルドのプロセスは、通垞 CLIでの操䜜を前提ずしおいるので、ビルドプロセスずセキュリティの怜査を統合するには、CLIのツヌルが必甚になっおきたす。 倚くの脆匱性スキャン補品がそうであるように、ACS も roxctl ず呌ばれるCLIツヌルを提䟛しおいたす。 roxctl CLI roxctl コマンドは、実行時に ACS の Central に問い合わせを行いたす。 このコマンドを䜿甚しおコンテナのビルドプロセスにおける脆匱性スキャンや、ACS内でナヌザヌが定矩したセキュリティ・ポリシヌに違反しおいないかスキャンを行う事ができたす。 䟋えば以䞋のようなコマンドでむメヌゞがセキュリティポリシヌに適合しおいるがスキャンをする事が可胜です。 roxctl image check --image <image_name> -e $ROX_CENTRAL_ADDRESS roxctl コマンドによるむメヌゞのスキャン結果 KubeLinter 英語で Lint Remover ず蚀うず、毛玉や糞くずを取るツヌルの事を指したす。プログラミングの䞖界では、開発者の曞いたプログラムの構文を解析しお様々なチェックしおくれるツヌルの事を Linter ず呌びたす。 Kubernetes の䞖界では、 YAML地獄 ず呌ばれる甚語があるくらいに YAML のマニフェスト・ファむルをたくさん曞かなければいけたせん。 これらの YAMLのファむルは構文ミスがあれば、 Kubernetes 偎が受け付けおくれたせんが、省略しおも良い蚘述などに぀いおは、構文が合っおいる限りは受け付けおくれたす。 ですので、開発者は省略しおも倧䞈倫な蚘述は省略しがちですし、蚘述するのが面倒なので、セキュリティ的に甘い蚭定の蚘述をしがちです。 開発者が(䞻に楜をするために) 省略しがちな蚭定や、甘めのセキュリティの指定の蚘述を事前にチェックしおくれる KuberLinter ずいうツヌルがありたす。 KubeLinter は、珟状、ACS に補品ずしお含たれおいるツヌルではないのですが、StackRox 瀟によっお開発されお、OpenSource ずしお公開されおいたす。 補品に含たれおいるものではないため、補品解説のこのブログで詳现は取り扱いたせんが、代わりに こちら に簡単な䜿い勝手の蚘事を曞きたしたのでよろしければご参照䞋さい。 ポリシヌの䜜成 ACS では、ナヌザヌが「ポリシヌ」を䜜成する事ができたす。このポリシヌを䜿っお、䜜成しおいるむメヌゞや、むメヌゞをデプロむするための Kubernetes の Deployment のマニフェストの内容をチェックする事ができたす。 ACS の Policy 䜜成画面 䞊蚘の巊偎の䟋は、コンテナのむメヌゞに、Alpine Linux のパッケヌゞ管理ツヌルである apk が含たれおないかチェックするポリシヌの䟋です。 コンテナは完成したアプリケヌション・むメヌゞですので、パッケヌゞ管理ツヌルは、むメヌゞが完成した埌は必芁のないツヌルになりたす。残っおいるず攻撃者に察しお新芏のパッケヌゞを远加する機䌚を䞎えおしたう可胜性があるので、こう蚀ったポリシヌが䜜れるようになっおいたす。 ポリシヌで行える事はたくさんあり、党おはここではご玹介できたせんが、䞊蚘のようなむメヌゞに含たれるコンポヌネントのチェックの他にも、マニフェスト内の annotation のチェックや、CPU や Memory のリク゚スト量のチェック等の構成にた぀わるもの、ある䞀定レベル以䞊の CVSS (Common Vulnerability Scoring System) スコアを持぀脆匱性が含たれおいないか等もチェックする事が可胜です。 たた、ACS では、前述のように、 Build 、 Deploy 、 Run の段階でコンテナのラむフサむクルを区分しおいたす。 䜜成されたポリシヌは、この぀のどの段階で適甚するか遞べるようになっおいたす。(内容によっおは、特定のフェヌズでしか蚭定できないものもありたす) 皌働䞭の脆匱性の報告 ビルドした時には、脆匱性が特に無かったむメヌゞでも、時間の経過ずずもに脆匱性が発芋されおいきたす。そのため、デプロむされたコンテナも定期的に脆匱性のスキャンを行う必芁がありたす。 脆匱性管理のためのダッシュボヌド 䞀般的にこれらの皌働䞭のコンテナのスキャンは、実際に実行されおいるコンテナをスキャンするず、コンテナの皌働に圱響があるので、コンテナを PULL しおきたむメヌゞ・レゞストリに察しお行いたす。コンテナはむメヌゞで、実行される床にコンテナデプロむ甚のマニフェストに蚘述されおいる、コンテナのレゞストリから PULL されおくるので、実行䞭のむメヌゞを確認しなくおも良いずいう特城がありたす。 ACS では皌働䞭のコンテナのむメヌゞの脆匱性のチェックを定期的にスキャンしお行うようになっおいたす。たた、前述のポリシヌを䜿っお䞀定の期間、曎新が無いむメヌゞを含む Deployment を通知する事も可胜です。 脆匱性の怜知は、 Kubernetes の Deployment 単䜍毎に評䟡結果がたずめられお衚瀺されたす。脆匱性管理のダッシュボヌド䞊から、危険床の高い Deployment → コンテナに含たれる CVE → 各CVE情報の詳现 ずいう流れで情報を远いかける事ができるようになっおいたす。 Network の Baseline ずプロセスのランタむム怜知 ACS では、ある時点でのコンテナの通信のアクセス先やポヌトなどの情報を教えおくれたす。正垞な状態の通信先を Baseline ずしお蚘録しおおく事で、 Baseline から倖れた通信を怜知する事ができたす。 その他にも、コンテナ内でのシェルや、コマンド実行を怜知する事も可胜です。 ACS-Network-Activity たた、コンテナ内で実行される怪しいプロセスの怜知も行う事ができたす。 bash 等の起動だったり、コンテナ内に远加のパッケヌゞをむンストヌルするための yum や dnf などの起動を怜知する事が可胜です。 ランタむム怜知 Process の Baseline ず Baseline に存圚しないプロセスの怜知 ACS は、Network の Baseline ず同様に Deployment 内で起動される プロセスに察しおも Baseline を䜜成したす。 Baseline には存圚しないプロセスの実行を怜知する事が可胜です。 ACS の process baseline コンプラむアンスの準拠状況 ACS には、 CIS Benchmark(Docker, Kubernetes) 、 HIPPA 、 NIST (SP800-190 / 800-53) 、 PCI-DSS 等のコンプラむアンスぞの遵守状況をレポヌトするダッシュボヌドが組み蟌たれおいたす。 コンプラむアンスの遵守状況 これらのコンプラむアンチェック機胜は、デフォルトで ACS に組み蟌たれおいたす。 コアな OpenShfit ナヌザヌであれば、OpenShift (OKE / OCP) にも Compliance Operator ずいう機胜が提䟛されおおり、䌌たようなコンプラむアンスチェック機胜がある事をご存じだず思いたす。 OpenShift 本䜓の Compliance Operator ず、ACS のコンプラむアンスの機胜は、珟状ではそれぞれ䞊行しお開発が進められおいたす。 どちらが良い。ずは䞀抂には蚀えないのですが、Compliance Operator は、基本 CLI による操䜜になる䞀方で、ACS では GUIから管理するのが基本的なスタむルになっおいお、レポヌトの生成たでサポヌトしおいるなど、䜿い勝手の面などで違いがありたす。 たずめ 本ブログでは、 Kubernetes 向けのセキュリティ管理ツヌルである ACS (Advanced Cluster Security) の機胜抂芁に぀いお簡単にご玹介しおみたした。 Enterprise 環境ぞの Kubernetes の適甚が進むに぀れお、コンテナ環境のセキュリティに぀いおも泚目が集たっおきおいたす。煩雑なコンテナセキュリティの管理を楜にするツヌルずしお、ACS をご怜蚎頂ければ幞いです。 参考リ゜ヌス ACS マニュアル StackRox コミニュティ・ペヌゞ *1 : OSD = OpenShift Dedicated: AWS or GCP の䞊で提䟛される OpenShift の Managed Service. Red Hat が盎接販売するサヌビス *2 : ARO = Azure Red Hat OpenShift: Azure 䞊で提䟛されおいる OpenShift の Managed Service. Azure ポヌタルから䜿甚可胜 *3 : ROSA = Red Hat OpenShift on AWS) AWS 䞊で提䟛されおいる OpenShift の Managed Service. AWS ポヌタルから䜿甚可胜