著者: 王傑、所属: 中国移動スマートホームオペレーションセンターラボガイドクラウド ネイティブの普及に伴い、ますます多くのバックエンド アプリケーションがコンテナーに移行され、k8s を通じてオーケストレーションおよび管理されるようになりました。近年では、FlinkやSparkなどビッグデータ分野のコンピューティングエンジンもk8sへのサポートを表明しており、ビッグデータアプリケーションは従来のyarn時代からクラウドネイティブ時代へと移行しています。この記事では、Flink と k8s を主な技術手段として使用し、クラウドネイティブ コンピューティング プラットフォームの構築方法を紹介します。 パート01 K8sの概要Kubernetes (k8s または kube とも呼ばれる) は、Linux コンテナの操作を自動化するオープンソース プラットフォームです。これにより、ユーザーはアプリケーションのコンテナ化プロセスにおける多くの手動の展開および拡張操作を節約できます。つまり、Linux コンテナを実行しているホストのグループを集約できます。 K8s を使用すると、これらのクラスターを簡単かつ効率的に管理できます。さらに、これらのクラスターは、パブリック クラウド、プライベート クラウド、またはハイブリッド クラウドのホスト全体に展開できます。アーキテクチャ図は次のとおりです。 注記:
1. マスター上には、コントローラー、API サーバー、スケジューラー、ストレージ用の Etcd などから構成されます。 etcd はマスターとして扱うことも、マスターから独立したストレージとして扱うこともできます。マスターのコントローラー、API サーバー、およびスケジューラはすべて個別のプロセス モードです。これは、マスター全体が単一プロセス モデルである Yarn とは多少異なります。 K8s マスターは複数のマスター間で自発的な選挙を完了することもでき、アクティブ状態のマスターが外部にサービスを提供します。 2. スレーブには、主に Kube プロキシ、Kubelet、Docker などの関連コンポーネントが含まれます。各ノードにデプロイされる関連コンポーネントは類似しており、ノード上で実行されている複数のポッドを管理するために使用されます。 3. さまざまなユーザーの習慣に応じて、 UI または CLI を介してタスクを K8s に送信できます。ユーザーは、K8s が提供するダッシュボード Web UI または Kubectl コマンドラインを通じてタスクを送信できます。 パート02 Flinkの概要Apache Flink は、無制限および制限付きデータ ストリームでのステートフル計算のためのフレームワークおよび分散処理エンジンです。 Flink はすべての一般的なクラスター環境で実行され、メモリ速度とあらゆる規模で計算を実行できます。アーキテクチャ図は次のとおりです。 Flink システム全体は 3 つの部分で構成されています。 クライアント: Flink クライアントは主に、ユーザー タスク (ストリーミング ジョブ) を Flink システムに送信する機能をユーザーに提供します。 TaskManager:特定のユーザー タスクを実行する Flink システムのビジネス実行ノード。複数の TaskManager が存在する可能性があり、すべての TaskManager は同等です。 JobManager: Flink システムの管理ノードはすべての TaskManager を管理し、どの TaskManager でユーザー タスクを実行するかを決定します。 HA モードでは複数の JobManager が存在できますが、マスター JobManager は 1 つだけです。 パート 03 K8s デプロイメントモードの FlinkFlink は、ローカル、スタンドアロン、Yarn、Docker、Kubernetes モードなど、さまざまな方法でデプロイできます。 Flink ジョブの送信モードに応じて、次の 3 つのモードに分けられます。 モード1: アプリケーションモード Flink によって送信されたプログラムはクラスターの内部アプリケーションとして扱われ、クライアントは面倒な準備作業を行う必要がなくなります。 (たとえば、メイン関数の実行、JobGraph の生成、依存関係のダウンロードと各ノードへの配布など) メイン関数は実行のために JobManager に送信されます。 1 つのアプリケーション、1 つのクラスター インスタンス。 モード 2: ジョブごとのモード これは、より強力なリソース分離を備えた Yarn、Mesos などのリソース管理フレームワークを使用するクライアント モードのアプリケーション モードとして理解できます。 1 つのジョブ、1 つのクラスター インスタンス。だんだんと放置されていった。 モード3: セッションモード これは、準備作業を行うためにクライアントによって提出されることもあります。ただし、クラスター インスタンスは作成されており、すべてのジョブによって共有されます。 1 つのジョブによって発生した JobManager の障害により、すべてのジョブが失敗する可能性があります。 一般に、k8s ではスタンドアロン セッション、スタンドアロン アプリケーション、ネイティブ セッション、ネイティブ アプリケーションの 4 つのモードを実行できます。その特徴は次のとおりです。 上記の特性に基づいて、ネイティブ アプリケーション モードは一般に本番環境への展開に使用されます。起動フローチャートは次のとおりです。 1. サービス、マスター、および ConfigMap リソースを作成すると、 Flink マスター デプロイメントにはすでにユーザー Jar が含まれます。この時点で、クラスター エントリポイントはユーザー Jar からユーザーのメインを抽出または実行し、JobGraph を生成します。次に、Dispatcher に送信され、Dispatcher はマスターを生成し、ResourceManager からリソースを適用します。以降のロジックはセッションの場合と同じです。 2. セッションとの最大の違いは、1 つのステップで送信されることです。 2 段階の送信は必要ないため、タスク開始後に外部 UI にアクセスする必要がない場合は、外部サービスは必要ありません。タスクを 1 ステップで直接送信して実行できます。 K8s ApiServer を使用したローカル ポート転送またはプロキシを介して Flink の Web UI にアクセスできます。この時点で、外部サービスは必要なくなります。つまり、LoadBalancer または NodePort を占有する必要はありません。 パート 04 ネイティブ k8s デプロイメントの実践における FlinkFlink をデプロイする前に、次の要件を満たす実行中の k8s クラスターが必要です。
上記の k8s クラスターを作成したら、次の手順を実行して k8s ネイティブ アプリケーション タスクを開始する必要があります。 1. flink-clusterという名前の名前空間を作成する kubectl 名前空間 flink-cluster を作成します 2. アカウントを作成する Kubectl create serviceaccount flink -n flink-cluster 3. サービスアカウントとロールバインディング kubectl create clusterrolebinding flink-role-binding-flink \ 4. Dockerfileを書く # ベースイメージ 5. 鏡 Apache/flink:v0.1 を実行します。 ミラーディレクトリに存在するファイル コアサイト.xml 6. アプリケーションモードタスクを開始する ./flink-1.14.5/bin/flink 実行アプリケーション \ 起動後、最後に以下のログが表示されます。最後のアドレスは、タスクの Web UI アドレスです。 2022-07-27 16:45:00,320 INFO org.apache.flink.kubernetes.KubernetesClusterDescriptor [] - flink アプリケーション クラスター my-first-application-cluster が正常に作成されました。JobManager Web インターフェース: http://ip:port 起動後、k8s が次の flink コンポーネントを開始したことがわかります。 [root@master1 ~]# kubectl get svc -n flink-cluster これは、Flink が正常に起動したことを意味します。 k8s には jobmanger と taskmanger という 2 つのポッドと、ポート マッピング用のサービスがあることがわかります。 パート05 Flinkプラットフォームk8s変換の実践k8s 変換の前に、すでに Flink コンピューティング プラットフォームがありました。主に 3 つの部分で構成されます。Web UI はユーザーが SQL タスクまたは JAR タスクを送信するために使用され、Web サーバーは SQL または JAR を解析するために使用され、次に Flink クライアント送信コマンドを生成し、最後にコマンドを実行してクラスターにタスクを送信します。 上の図に示すように、当社のプラットフォームにはすでに Yarn モードとスタンドアロン モードのサブミッションがあります。クラウド ネイティブをサポートするには、元のベースにネイティブ k8s 送信メソッドを追加するだけです。コードレベルでは、タスク送信抽象クラスにネイティブ k8s 実装を追加します。 次の図は、特定のネイティブ k8s SQL タスク送信ページを示しています。 Flink タスクの送信を完了するには、実行モード、実行パラメータ、および依存するサードパーティの jar パッケージを設定し、特定の SQL スクリプトを追加するだけです。 文献情報源[1] Flink公式Webサイト、Flinkドキュメント [2]Kubernetes公式サイト、「Kubernetesドキュメント」 [3] Tencent Cloud Developer Community、「Kubernetes上でネイティブにFlinkを実行する」 [4] Tencent Cloud Developer Community、「ネイティブKubernetesでのFlink 1.13のデプロイメントプラクティス」 [5] 51CTO、「NetEase Games Flink SQLプラットフォーム実践」 |
<<: Amazon Web Services: ユビキタスなセキュリティ保護を使用してクラウドイノベーションを保護する
まず最初に、bandwagonhost からこの VPS [bandwagonhost-7 ドル/4...
2月2日、Namecheap.comは、.com、.net、.org、.biz、.infoドメイン名...
12306が13万人以上のユーザーの情報を漏洩したと報じられた後、中国鉄道顧客サービスセンターは、1...
検索エンジンのランキングは常に皆の注目の的となっていますが、検索エンジンがウェブサイトをランク付けす...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています魚が水から...
大規模なデータ集中化により、企業のビジネス活動はデータセンターやネットワークなどの IT インフラス...
@公文祥は17日、テンセントWeChatが広告を掲載していたWeChatの公開アカウントを大量に禁止...
[オリジナル記事は51CTO.comより] Amazon.comの子会社であるAmazon Web ...
クラウド コンピューティングは、その固有のスケーラビリティ、柔軟性、および高性能コンピューティング機...
調査によると、IT およびビジネスの意思決定者の 85% が、パブリック クラウド、プライベート ク...
whitesandshosting.com は、AS 番号 55229 で 2000 年から運営され...
多くのSEO担当者の目には、ウェブサイトの再設計は非常に神秘的なものです。彼らは皆、ウェブサイトの再...
最近、テンセントクラウドは公式WeChatアカウントを通じて、オペレーティングシステムのクラウドディ...
翻訳者 |徐磊校正:孫淑娟このシリーズの最初の記事では、サーバーレスがクラウド コンピューティングの...
ovhはどうですか?ポーランドはどうですか? OVH はポーランドにも独自のデータセンターを持ってお...