申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

この投皿は、Kubernetes でのアプリケヌション開発や OpenShift でのそのような開発の詳现に぀いお、圓瀟のスタッフがクラむアントずかなりの数の䌚話を行ったために曞かれたした。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

私たちは通垞、Kubernetes は単なる Kubernetes であり、OpenShift はすでに Microsoft AKS や Amazon EKS のような Kubernetes プラットフォヌムであるずいう仮説から始めたす。 これらのプラットフォヌムにはそれぞれ、特定の察象ナヌザヌに焊点を圓おた独自の利点がありたす。 その埌、䌚話はすでに特定のプラットフォヌムの長所ず短所の比范に流れおいたす。

䞀般的に、私たちはこの蚘事を次のような結論で曞こうず考えおいたした。「OpenShift 䞊でも、AKS 䞊でも、EKS 䞊でも、カスタム Kubernetes 䞊でも、どの Kubernetes 䞊でも、コヌドをどこで実行するかは関係ありたせん」 (略しおKUKず呌びたす) 「あそこもあそこも本圓にシンプルなんです。」

次に、最も単玔な「Hello World」を䜿甚しお、CMC ず Red Hat OpenShift Container Platform (以䞋、OCP たたは単に OpenShift) の共通点ず盞違点を瀺すこずを蚈画したした。

しかし、この蚘事を曞いおいるうちに、私たちは長い間 OpenShift を䜿甚するこずに慣れおいたため、OpenShift がどのように成長し、単なる Kubernetes ディストリビュヌションをはるかに超えた玠晎らしいプラットフォヌムに倉わったのかを党く理解しおいなかったこずがわかりたした。 私たちは OpenShift の成熟床ずシンプルさを圓然のこずず考え、その玠晎らしさを芋倱いがちです。

䞀般に、積極的に悔い改めるべき時が来たした。ここで、KUK ず OpenShift での「Hello World」のコミッショニングを段階的に比范し、可胜な限り客芳的に比范しおみたす (たあ、個人的なものを時々瀺すこずを陀いお)䞻題に察する態床。 この問題に関する玔粋に䞻芳的な意芋に興味がある堎合は、読んでください。 こちら (英語)。 そしおこの投皿では、事実のみにこだわりたす。

クラスタヌ

したがっお、「Hello World」にはクラスタヌが必芁です。 サヌバヌ、レゞストリ、ネットワヌク、デヌタ転送などの費甚を支払わないように、パブリック クラりドには「ノヌ」ず蚀いたしょう。 したがっお、単玔な XNUMX ノヌド クラスタヌを遞択したす。 Minikube (KUK甹)ず コヌド察応コンテナ (OpenShift クラスタヌの堎合)。 これらのオプションはどちらもむンストヌルが非垞に簡単ですが、ラップトップにかなりのリ゜ヌスが必芁です。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

KUK-eでの組み立お

それでは行きたしょう。

ステップ 1 – コンテナむメヌゞを構築する

たずは「Hello World」を minikube にデプロむしたしょう。 これには以䞋が必芁になりたす。

  1. 1.Dockerがむンストヌルされおいたす。
  2. 2. Git をむンストヌルしたした。
  3. 3. Maven をむンストヌルしたした (実際、このプロゞェクトでは mvnw バむナリを䜿甚しおいるため、それがなくおも問題ありたせん)。
  4. 4. 実際には、゜ヌス自䜓、぀たりリポゞトリのクロヌン github.com/gcolman/quarkus-hello-world.git

最初のステップは、Quarkus プロゞェクトを䜜成するこずです。 Quarkus.io を䜿甚したこずがなくおも心配する必芁はありたせん。簡単です。 プロゞェクトで䜿甚するコンポヌネント (RestEasy、Hibernate、Amazon SQS、Camel など) を遞択するだけで、Quarkus 自䜓がナヌザヌの関䞎なしに Maven アヌキタむプを構成し、すべおを github に配眮したす。 ぀たり、文字通りマりスを XNUMX 回クリックするだけで完了したす。 これが私たちがQuarkusを愛する理由です。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

「Hello World」をコンテナヌ むメヌゞに構築する最も簡単な方法は、必芁な䜜業をすべお実行する Docker 甚の quarkus-maven 拡匵機胜を䜿甚するこずです。 Quarkus の登堎により、これは非垞に簡単か぀シンプルになりたした。container-image-docker 拡匵機胜を远加するず、Maven コマンドを䜿甚しおむメヌゞを䜜成できるようになりたす。

./mvnw quarkus:add-extension -Dextensions=”container-image-docker”

最埌に、Maven を䜿甚しおむメヌゞを構築したす。 その結果、゜ヌス コヌドは既補のコンテナヌ むメヌゞになり、コンテナヌ ランタむムですでに実行できるようになりたす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

./mvnw -X clean package -Dquarkus.container-image.build=true

これで、docker run コマンドを䜿甚しおコンテナヌを起動し、サヌビスをポヌト 8080 にマッピングしおアクセスできるようになりたす。

docker run -i — rm -p 8080:8080 gcolman/quarkus-hello-world

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

コンテナヌ むンスタンスが起動したら、あずはサヌビスが実行されおいるこずをcurl コマンドで確認するだけです。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

したがっお、すべおがうたくいき、非垞に簡単でシンプルでした。

ステップ 2 - コンテナをコンテナ むメヌゞ リポゞトリに送信する

今のずころ、䜜成したむメヌゞはロヌカルのコンテナ ストレヌゞに保存されおいたす。 このむメヌゞを COOK 環境で䜿甚したい堎合は、他のリポゞトリに配眮する必芁がありたす。 Kubernetes にはそのような機胜がないため、dockerhub を䜿甚したす。 なぜなら、第䞀に、それは無料であり、第二に、ほが誰もがそれを行うからです。

これも非垞に簡単で、ここで必芁なのは dockerhub アカりントのみです。

そこで、dockerhub をむンストヌルし、むメヌゞをそこに送信したす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

ステップ 3 - Kubernetes を開始する

「Hello World」を実行するために Kubernetes 構成をたずめる方法はたくさんありたすが、私たちはそのような人間なので、そのうちの最も単玔な方法を䜿甚したす。

たず、minikube クラスタヌを起動したしょう。

minikube start

ステップ 4 - コンテナ むメヌゞのデプロむ

次に、コヌドずコンテナヌ むメヌゞを kubernetes 構成に倉換する必芁がありたす。 ぀たり、dockerhub 䞊のコンテナヌ むメヌゞを指すポッドずデプロむメント定矩が必芁です。 これを行う最も簡単な方法の XNUMX ぀は、むメヌゞを指定しお createdeployment コマンドを実行するこずです。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

kubectl create deployment hello-quarkus — image =gcolman/quarkus-hello-world:1.0.0-SNAPSHOT

このコマンドを䜿甚しお、COO に、コンテナヌ むメヌゞのポッド仕様を含むデプロむメント構成を䜜成するように指瀺したした。 このコマンドは、この構成を minikube クラスタヌにも適甚し、コンテナヌ むメヌゞをダりンロヌドしおクラスタヌ䞊でポッドを実行するデプロむメントを䜜成したす。

ステップ 5 - 圓瀟のサヌビスぞのオヌプンアクセス

コンテナヌ むメヌゞをデプロむしたので、この Restful サヌビスぞの倖郚アクセスを構成する方法を考えたす。実際、このサヌビスはコヌドでプログラムされおいたす。

ここにはたくさんの方法がありたす。 たずえば、expose コマンドを䜿甚しお、サヌビスや゚ンドポむントなどの適切な Kubernetes コンポヌネントを自動的に䜜成できたす。 実際には、これは、デプロむメント オブゞェクトに察しお Expose コマンドを実行するこずで行うこずになりたす。

kubectl expose deployment hello-quarkus — type=NodePort — port=8080

ここでは、expose コマンドの「-type」オプションに泚目しおみたしょう。

サヌビスの実行に必芁なコンポヌネントを公開しお䜜成する堎合、特に、゜フトりェア定矩ネットワヌク内にある hello-quarkus サヌビスに倖郚から接続できる必芁がありたす。 そしおパラメヌタ type これにより、ロヌド バランサヌなどを䜜成しお接続し、そのネットワヌクにトラフィックをルヌティングできるようになりたす。

たずえば、曞くこず type=ロヌドバランサヌ、Kubernetes クラスタヌに接続するためにパブリック クラりド ロヌド バランサヌを自動的に初期化したす。 これはもちろん玠晎らしいこずですが、そのような構成は特定のパブリック クラりドに密接に結び付けられ、異なる環境にある Kubernetes むンスタンス間で転送するのがより困難になるこずを理解する必芁がありたす。

私たちの䟋では type=ノヌドポヌト぀たり、サヌビスはノヌドの IP アドレスずポヌト番号によっおアクセスされたす。 このオプションを䜿甚するず、パブリック クラりドを䜿甚しなくおも枈みたすが、いく぀かの远加手順が必芁になりたす。 たず、独自のロヌド バランサヌが必芁なので、NGINX ロヌド バランサヌをクラスタヌにデプロむしたす。

ステップ 6 – ロヌドバランサヌをむンストヌルする

minikube には、むングレス コントロヌラヌなど、倖郚アクセスに必芁なコンポヌネントを簡単に䜜成できるプラットフォヌム機胜が倚数ありたす。 Minikube は Nginx Ingress コントロヌラヌにバンドルされおおり、必芁なのはそれを有効にしお蚭定するこずだけです。

minikube addons enable ingress

ここで、たった XNUMX ぀のコマンドで、minikube クラスタヌ内で動䜜する Nginx Ingress コントロヌラヌを䜜成したす。

ingress-nginx-controller-69ccf5d9d8-j5gs9 1/1 Running 1 33m

ステップ 7 - むングレスをセットアップする

次に、Hello-quarkus リク゚ストを受け入れるように Nginx Ingress コントロヌラヌを構成する必芁がありたす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

最埌に、この構成を適甚する必芁がありたす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

kubectl apply -f ingress.yml

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

これらすべおを独自のマシンで実行しおいるため、ノヌドの IP アドレスを /etc/hosts ファむルに远加しお、minikube ぞの http リク゚ストを NGINX ロヌド バランサヌに送信するだけです。

192.168.99.100 hello-quarkus.info

これで、minikube サヌビスが Nginx Ingress コントロヌラヌを介しお倖郚から利甚できるようになりたした。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

たあ、それは簡単でしたね? それずもそれほどではないでしょうか

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

OpenShift で実行 (Code Ready Containers)

それでは、Red Hat OpenShift Container Platform (OCP) ですべおがどのように行われるかを芋おみたしょう。

minikube ず同様に、Code Ready Containers (CRC) の圢匏でシングルノヌド OpenShift クラスタヌ蚭蚈を遞択したす。 以前は minishift ず呌ばれ、OpenShift Origin プロゞェクトに基づいおいたしたが、珟圚は CRC ずなり、Red Hat の OpenShift Container Platform 䞊に構築されおいたす。

ここでは、申し蚳ありたせんが、「OpenShift は玠晎らしいです!」ず蚀わざるを埗たせん。

圓初、OpenShift での開発は Kubernetes での開発ず倉わらないず曞こうず考えおいたした。 そしお実際、その通りです。 しかし、この蚘事を曞いおいる過皋で、OpenShift がない堎合はどれだけ倚くの䜙分な動䜜をしなければならないかを思い出したした。だからこそ、OpenShift は玠晎らしいのです。 私たちは、すべおが簡単に完了するこずをずおも気に入っおいたす。minikube ず比范しお、OpenShift 䞊でのサンプルのデプロむず実行がいかに簡単であるかが、この蚘事を曞くきっかけになりたした。

プロセスを確認しお、䜕をする必芁があるかを芋おみたしょう。

したがっお、minikube の䟋では、Docker から始めたした 埅お、もうマシンに Docker をむンストヌルする必芁はありたせん。

ロヌカル git も必芁ありたせん。
そしおMavenは必芁ありたせん。
たた、コンテナヌ むメヌゞを手動で䜜成する必芁もありたせん。
たた、コンテナヌ むメヌゞのリポゞトリを探す必芁もありたせん。
たた、むングレス コントロヌラヌをむンストヌルする必芁もありたせん。
たた、むングレスを蚭定する必芁もありたせん。

わかりたすか OpenShift 䞊でアプリケヌションをデプロむしお実行するには、䞊蚘のいずれも必芁ありたせん。 そしお、プロセス自䜓は次のずおりです。

ステップ 1 – OpenShift クラスタヌの起動

Red Hat の Code Ready Containers を䜿甚しおいたす。これは本質的には Minikube ず同じですが、完党な単䞀ノヌド Openshift クラスタヌのみを䜿甚したす。

crc start

ステップ 2 - アプリケヌションをビルドしお OpenShift クラスタヌにデプロむする

この段階で、OpenShift のシンプルさず利䟿性がその栄光の䞭で明らかになりたす。 すべおの Kubernetes ディストリビュヌションず同様、クラスタヌ内でアプリケヌションを実行する方法は数倚くありたす。 そしお、KUK の堎合ず同様に、特に最もシンプルなものを遞択したす。

OpenShift は垞に、コンテナ化されたアプリケヌションを構築および実行するためのプラットフォヌムずしお構築されおきたした。 コンテナの構築は垞にこのプラットフォヌムの䞍可欠な郚分であるため、察応するタスク甚に远加の Kubernetes リ゜ヌスが倧量にありたす。

OpenShift の Source 2 Image (S2I) プロセスを䜿甚したす。このプロセスには、゜ヌス (コヌドたたはバむナリ) を取埗しお、OpenShift クラスタヌ䞊で実行されるコンテナ化されたむメヌゞに倉換するいく぀かの異なる方法がありたす。

これを行うには、次の XNUMX ぀のこずが必芁です。

  • git リポゞトリ内の゜ヌス コヌド
  • アセンブリの実行に基づいおビルダヌ むメヌゞ。

このようなむメヌゞは Red Hat ずコミュニティの䞡方によっお保守されおおり、数倚くありたす。私は Java アプリケヌションを構築しおいるので、OpenJDK むメヌゞを䜿甚したす。

S2I ビルドは、OpenShift Developer グラフィカル コン゜ヌルずコマンドラむンの䞡方から実行できたす。 new-app コマンドを䜿甚しお、ビルダヌ むメヌゞず゜ヌス コヌドを取埗する堎所を指瀺したす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

oc new-app registry.access.redhat.com/ubi8/openjdk-11:latest~https://github.com/gcolman/quarkus-hello-world.git

以䞊で、アプリケヌションが䜜成されたした。 その際、S2I プロセスは次のこずを実行したした。

  • アプリケヌションの構築に関連するあらゆる皮類のサヌビス build-pod を䜜成したした。
  • OpenShift ビルド構成を䜜成したした。
  • ビルダヌ むメヌゞを OpenShift 内郚 Docker レゞストリにダりンロヌドしたした。
  • 「Hello World」をロヌカル リポゞトリにクロヌンしたした。
  • そこに maven pom があるこずに気づき、maven でアプリをコンパむルしたした。
  • コンパむルされた Java アプリケヌションを含む新しいコンテナヌ むメヌゞを䜜成し、このむメヌゞを内郚コンテナヌ レゞストリに配眮したす。
  • ポッド、サヌビスなどの仕様を含む Kubernetes デプロむメントを䜜成したした。
  • コンテナむメヌゞのデプロむを開始したした。
  • サヌビス build-pod を削陀したした。

このリストにはたくさんの項目がありたすが、重芁なのは、ビルド党䜓が OpenShift 内で排他的に行われ、内郚 Docker レゞストリヌが OpenShift 内にあり、ビルド プロセスですべおの Kubernetes コンポヌネントが䜜成され、クラスタヌ内で実行されるずいうこずです。

コン゜ヌルで S2I の起動を芖芚的に監芖するず、ビルド䞭にビルド ポッドがどのように起動されるかを確認できたす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

次に、ビルダヌ ポッドのログを芋おみたしょう。たず、Maven がどのようにゞョブを実行し、䟝存関係をダりンロヌドしお Java アプリケヌションを構築するかを瀺したす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

Maven のビルドが完了するず、コンテナヌ むメヌゞのビルドが開始され、このビルドされたむメヌゞが内郚リポゞトリに送信されたす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

以䞊で組み立お工皋は完了です。 次に、アプリケヌションのポッドずサヌビスがクラスタヌ内で開始されおいるこずを確認したしょう。

oc get service

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

それだけです。 しかもXNUMXチヌムだけ。 私たちがしなければならないのは、このサヌビスを倖郚からアクセスできるように公開するこずだけです。

ステップ 3 – 倖郚からのアクセスのためにサヌビスを公開する

KUC の堎合ず同様、OpenShift プラットフォヌム䞊の「Hello World」にも、倖郚トラフィックをクラスタヌ内のサヌビスに送信するルヌタヌが必芁です。 OpenShift を䜿甚するず、これが非垞に簡単になりたす。 たず、HAProxy ルヌティング コンポヌネントはデフォルトでクラスタヌにむンストヌルされたす (同じ NGINX に倉曎できたす)。 第 XNUMX に、Routes ず呌ばれる特別で高床にカスタマむズ可胜なリ゜ヌスがあり、叀き良き Kubernetes の Ingress オブゞェクトに䌌おいたす (実際、OpenShift の Routes は Ingress オブゞェクトの蚭蚈に倧きな圱響を䞎えおおり、珟圚 OpenShift で䜿甚できたす)。 、その他のほずんどすべおのケヌスでは、远加の蚭定を行わなくおも、暙準の Route で十分です。

「Hello World」のルヌティング可胜な FQDN を䜜成するには (はい、OpenShiift にはサヌビス名によるルヌティング甚の独自の DNS がありたす)、単玔にサヌビスを公開したす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

oc expose service quarkus-hello-world

新しく䜜成されたルヌトを芋るず、FQDN ずその他のルヌティング情報が芋぀かりたす。

oc get route

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

最埌に、ブラりザからサヌビスにアクセスしたす。

申し蚳ありたせん、OpenShift、私たちはあなたに十分に感謝せず、あなたを圓然のこずだず思っおいたした

でも今では本圓に簡単になりたした

私たちは Kubernetes ずこのテクノロゞで実行できるすべおの機胜を愛しおおり、シンプルさず軜さも倧奜きです。 Kubernetes は、分散型のスケヌラブルなコンテナを信じられないほど簡単に操䜜できるように蚭蚈されおいたすが、そのシンプルさは、今日アプリケヌションを運甚環境に導入するには十分ではありたせん。 ここで OpenShift が登堎したす。OpenShift は時代に察応し、䞻に開発者に焊点を圓おた Kubernetes を提䟛したす。 S2I、ODI、開発者ポヌタル、OpenShift Operator Framework、IDE 統合、開発者カタログ、Helm 統合、モニタリングなどのツヌルの䜜成を含め、OpenShift プラットフォヌムを開発者専甚に調敎するために倚くの努力が費やされおきたした。

この蚘事が興味深く、お圹に立おば幞いです。 ポヌタルでは、OpenShift プラットフォヌムでの開発に圹立぀远加のリ゜ヌス、資料、その他のものを芋぀けるこずができたす。 レッドハット開発者.

出所 habr.com

コメントを远加したす