K8s とクラウドネイティブ関連の概念は近年非常に人気があります。 Awan は最近関連プロジェクトを立ち上げました。以下にその概要を示します。 この記事では、Alibaba のオープンソース プロジェクト Otter が k8s デプロイメントに適応するための変革プロセスを共有することに焦点を当てます。変換プロセスとテクニックは、ほとんどのオープンソース プロジェクトを k8s に変換して展開する場合に適用できるはずです。 1. 背景 Otter は Alibaba のオープンソース分散データベース同期システムであり、データベースの増分ログ分析に基づいて、ローカル コンピュータ ルームまたはリモート コンピュータ ルームの MySQL/Oracle データベースに準リアルタイムで同期します (関連コンテンツについては、この記事では詳しく説明しませんが、https://github.com/alibaba/otter を参照してください)。 物理リソースを最大限に活用し、同期ノードを迅速に拡張し、クラウドネイティブを採用するために、k8s を使用して otter を展開することが決定されました。 Otter のプロジェクトは全体として自己完結的です。変換コストを考慮して、ソースコードを変更せずに、プロジェクトの既存の基盤にいくつかの適応を加えるように努めます。 この記事では、k8s デプロイメントに適応するための Otter の変換プロセスを共有することに焦点を当てます。不適切な点がありましたら、さらにアドバイスをお願いします。 いくつかのコアコンテンツが含まれます:
2. Otterの基本構造 典型的な管理システムアーキテクチャ、マネージャー(Web管理)+ノード(作業ノード)
上記のデプロイメント アーキテクチャに基づいて、otter-manager と otter-node を k8s にデプロイするだけで済みます。 特に otter-node では、ノードの急速な水平拡張とコンピューティング性能の弾力的な拡張と縮小を実現するために k8s が必要です。 2. Dockerfileの記述 2.1 otter-managerのDockerfile otter-manager は比較的シンプルで、いくつかのステップで構成されています。
詳細は以下の通りです。 2.2 otter-node の Dockerfile otter-node は少し異なります。公式ドキュメントによると、ファイル転送には aria2 をインストールする必要があります。 注: aria2 のインストールは非常に遅いため、最初に aria2 を新しいベース イメージとしてインストールし、次に新しいベース イメージ上に otter-node イメージをビルドする必要があります。これにより、その後のイメージ ビルド速度が大幅に向上します。 新しいベースイメージは、registry.xxx.com/xxx/otter-node-base:1.0 という名前です。 次に、これに基づいて新しい otter-node イメージを構築します。 otter-node の設定方法は非常に特殊であることに注意してください。 otter-node を実行する前に、otter-admin で nid を取得する必要があります。 したがって、dockerfile で ARG を使用して nid を宣言し、後でイメージをビルドするときに --docker-arg を介して nid の特定の値を渡します。 もちろん、nid を設定ファイルとして扱う場合は、後述する ConfigMap の形式で Deployment にマウントすることもできます。 3.デプロイメントの記述 デプロイメントとは何ですか?
デプロイメントに関する具体的な知識については詳しく説明されていないため、公式の k8s ドキュメントを参照してください。 テスト環境と本番環境用に 2 つのクラスターをデプロイする必要があります。 otter-manager と otter-node はどちらも、設定として conf/otter.properties の読み取りに依存しています。 したがって、環境に応じて異なる otter.properties を変更する必要があります。 そして、k8s のデプロイメントでは、同じイメージを使用して、otter.properties を異なる環境 (k8s の異なる名前空間) に ConfigMap として書き込み、最後にボリュームの形式でポッドの指定されたパスにマウントすることができます。 ここでいくつかの用語について簡単に紹介します。詳細については、k8s の公式ドキュメントを参照してください。
したがって、最初に、otter.properties をキーとして、ファイルの内容を値として、指定された環境 (名前空間) に configmap を作成します。 具体的なコマンドは以下のとおりです kubectl で otter-manager-dev-config の設定マップを作成します --from-file=otter.properties=conf/otter-dev.properties -n otter-system
生成されたConfigMapは次の図のようになります。 最後に、Deployment のボリュームでこの ConfigMap を参照し、volumeMounts を介して指定されたディレクトリにマウントします。展開は以下のとおりです。 ここでは、volumeMounts のパス上書き問題に特に注意する必要があります。 volumeMounts の subPath を特定のファイル名として設定する必要があります。 4. スクリプト変換を開始する Otter は、管理コンソール マネージャーと作業ノードの 2 つの部分で構成されます。通常の状況では、それぞれの起動スクリプト startup.sh を使用して起動されます。 k8s に適応するには、起動スクリプトを変更する必要があります。この記事では otter-manager の起動スクリプトを例に挙げていますが、otter-node も同様です。 起動スクリプトstartup.shをstartup-moon.shに変換し、2つの問題を解決することに焦点を当てます。
4.1 フォアグラウンドプロセスが実行し続ける コンテナ内のエントリポイントで開始されたプロセスはプロセス 1 であるため、プロセス 1 の実行が終了すると、コンテナは終了します。 本来の startup.sh では、java で起動した後、「&」を使用して java プロセスをバックグラウンド プロセスに変換しているため、プロセス 1 である startup.sh がすぐに実行され、コンテナが自動的に終了します。 したがって、プロセス 1 を維持し、終了しないようにする必要があります。 ここでは 2 つのオプションが検討されます。
検討した結果、オプション 2 を選択することにしました。主な理由は、ポッドの自動再起動機能を活用するためです。 Java プロセスが予期せず終了した場合、ソリューション 2 はプロセス 1 も終了し、ポッドを自動的に再起動できます。ソリューション 1 では、startup.sh スクリプトが引き続き tail を実行しているため、Java プロセスが終了してもプロセス 1 は終了しません。 具体的な変更点は以下のとおりです。 ポッド内の最終プロセスは図に示されている。
4.2 仮想マシンのサイズをカスタマイズする Otter プロジェクトでは、JVM の起動パラメータは start.sh で構成されますが、手動で構成するのは不便です。 そのため、start.sh で jvm パラメータを設定するロジックをコメント アウトし、注入用に自分で設定した環境変数 JAVA_OPTIONS を使用します。 この環境変数の挿入方法も比較的簡単で、デプロイメント内の env 構成 (青いボックス部分) であり、イメージを変更せずに jvm パラメータのサイズを手動で変更するのに便利です。 5. k8s上の固定IP/ポートアクセス otter-node のデプロイメントには特別な機能があります。 通常のマイクロサービスのステートレス拡張とは異なり、otter-node のデプロイメントでは nid、ip、および port を指定する必要があります。この設計は、単一マシン上に複数のインスタンスをデプロイする際の問題を解決するために設計されたと言われており、単一マシン上の複数のノードが異なるポートを指定できるようにします(詳細については、ここでは説明しませんが、公式 wiki https://github.com/alibaba/otter/wiki/Node_Quickstart を参照してください)。 これを k8s に適応させる方法を見てみましょう。 ここでは処理にk8sのNodePortが使用されます。 NodePort サービスは、外部トラフィックをサービスに誘導する最も原始的な方法です。 NodePort は、その名前が示すように、すべてのノード (仮想マシン) で特定のポートを開き、このポートに送信されたトラフィックは対応するサービスに転送されます。下の図の通りです。 上記の構成では、IP1:3000 または IP2:3000 または IP3:3000 を使用してサービスにアクセスできます。 もちろん、特定の KVM の IP がバインドされないようにするために、前面に SLB サービスを掛けて、SLB の仮想 IP:PORT にアクセスしてアクセスします。 otter のデプロイメントでは、otter-manager に 2 セットの IP:PORT が必要であり、各ノードに 3 セットの IP:PORT が必要です。 Otter デプロイメントでは、各ノードが異なるポートを公開する必要があるため、otter ノードを追加するたびに、3 セットの IP:PORT を追加する必要があることに注意してください。 otter-node を例に、NodePort タイプのサービスの yml ファイルを見てみましょう。
6. まとめ この変換後、k8s を使用して otter-manager と otter-node をデプロイし、ノードを迅速に拡張してマシン リソースを柔軟に使用できるようになります。 重要な問題とテクニックを確認しましょう。
他のオープンソース プロジェクトで k8s を使用する必要がある場合は、これらの手法を使用できるはずです。 |
>>: 怖い!真夜中に、このプログラムは仮想マシンから実行されなくなりました。
SEOWHY は SEO 業界で最も有名なブランドです。私が SEO を学び始めたときも、SEOWH...
[元記事は51CTO.comより] 11月1日0時30分、「ダブル11」先行販売第1弾の最終代金が支...
ハン・ヤンミン編集者注:数億元の投資を受けたと主張していたJieku.comは、資本チェーンの断絶に...
alphaRacks の毎年恒例の夏の VPS プロモーションが始まりました。サーバー構成: マルチ...
7月、imidc Rainbow Network(Rainbow Cloud)は香港、台湾、日本のデ...
Kubernetes は、過去 2 年間で最も注目され、最もよく知られているテクノロジーです。ソフト...
Rackhostはホストキャットに2回登場しました。2002年から運営しているこのホスティング業者(...
原題: JD.comとTencentの結婚は想像ほど甘くない: JD.comはモバイルeコマースで台...
パブリッククラウド市場シェアの概要[[205586]] 2015 年から 2016 年までの Iaa...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス数日前、暇な時にTout...
Abei は楊波(Weibo)の Douban でのオンライン ニックネームであり、Douban の...
Naranjatech (公式には 2003 年からこのビジネスに携わっていると主張している) は現...
ウェブサイトを最適化するときに、誰もがこのような問題に遭遇すると思います。ウェブサイトをどのように最...
SEOの発展見通しについて言えば、昨年から百度アルゴリズムが継続的に進化・アップグレードしたことによ...
格安サーバーについてお話ししましょう。2010 年のクラウド サーバー市場は、ハイエンド クラウド ...