Kubernetes の VM ノードにファイルを配布し、スクリプトを実行する

Kubernetes の VM ノードにファイルを配布し、スクリプトを実行する

[[395417]]

この記事はWeChatの公開アカウント「Ask Qi」から転載したもので、著者はChen Shaowenです。記事を転載する場合は公式アカウントまでご連絡ください。

1. この記事は主に何について書かれていますか?

流砂の上に高いプラットフォームを構築しないでください。業務量の増大と業務形態の進化には、強固で強力な IT システムのサポートが必要です。事業内容は市場に対して透明ですが、IT システムは一夜にして構築して完成させることはできません。今後、企業間の競争は主にITシステム間の競争となり、ビジネスニーズに迅速に対応できる能力が成功の鍵となるでしょう。

ITシステムも常に進化しています。効率的でインテリジェントな IT システムの構築には多大なコストがかかります。最初は十分な機能があれば十分ですが、次に使いやすさが求められ、最終的にはコア競争力となる必要があります。

変化は怖いものではありません。怖いのは、その重い歴史的負担だ。技術者にとって、新しい要件は難しい作業ではありませんが、難しいのは高速飛行中に部品を交換することです。元の機能の正常な動作を確保し、新しいニーズを満たすためには、IT インフラストラクチャを交換する必要があります。

コンテナ化と Kubernetes 変換のプロセスにおいて、ファイルを仮想マシン (VM) に直接配布し、VM 上でスクリプトを実行する方法がこの記事の焦点です。仮想マシンを直接操作することは、クラウドネイティブの不変インフラストラクチャの定義を満たしませんが、従来のビジネス シナリオでは、IT プラットフォームがソリューションを提供することが求められます。この記事ではこの質問に対する答えを示します。

2. PaaS プラットフォームが必要な理由

IT 運用チームが PaaS の構築を開始すると、真に立ち上がったと言えます。

現在の環境では、ビジネスモデルやフォームはもはや企業秘密ではありません。情報と人材の急速な流れにより、企業間の対立が露骨化している。あなたのビジネスを私も引き継ぐことができます。私が持っている機能を追加することもできます。短期的な爆発的なビジネス成長の時代は終わり、洗練されたオペレーションとデータに基づく意思決定の時代になりました。

新しい時代では、IT システムに対する要求がさらに高まりますが、これは従来のモデルでは満たすことができません。従来のモデルは、特定のシナリオ向けの SaaS サービスを開発し、スキルを固定プロセスにカプセル化し、コストを削減し、効率を高め、リスクを制御することです。初期段階ではこれで十分でしたが、事業規模が大きくなるにつれ、運用・保守担当者は機能の変更や追加のために際限なく残業を強いられるようになりました。

PaaS の目的は、いくつかの共通機能を抽象化することです。中間プラットフォームもこのように構築され、不変のドメインがプラットフォーム上に実装され、外部へのサービス インターフェイスが提供されます。市場の急速な変化に対応するために、フロントエンドをビジネスに直接結び付けます。

PaaSプラットフォームがあれば、ITスキルに落ち着きの方向性が生まれ、IT担当者は業務を考えるための反復的で複雑な作業から解放され、組み立てを通じて迅速に業務をサポートできるようになります。

3. ファイル配布とスクリプト実行の実装方法

3.1 従来のPaaSプラットフォームでは

運用・保守担当者がファイルを一括配布したりスクリプトを実行したりするように求められた場合、Ansible を使用するとすぐに実行できます。

しかし、上で述べたように、私たちは手を解放して PaaS プラットフォームを構築する必要があります。以下は、従来の IT 施設アーキテクチャの図です。

従来の IT プロセスでは、購入したすべてのマシンを CMDB に登録し、管理用のエージェントをインストールする必要があります。エージェントが提供するファイルおよびスクリプト パイプラインを通じて、上位プラットフォームはファイル配布およびスクリプト実行の機能を実装できます。

しかし、エージェントの開発コストは非常に高くなります。高い同時実行性、高いパフォーマンス、高い可用性、高い安定性、高いセキュリティを備えたエージェントを磨き上げるには、数え切れないほどのビジネス上の失敗が必要です。一部のオープンソース ソリューションでは、企業の IT コアとなるエージェントはオープンソースではありません。

3.2 Kubernetesの場合

クラウド ネイティブのコンテキストでは、IaaS レイヤー VM の状態を直接変更することは許可されておらず、これを不変インフラストラクチャと呼びます。いくつかのプラクティスでは、コンテナの SSHD が無効になっており、SSH ログインがあるとコンテナは直ちに終了します。

Kubernetes では、ファイルをノードに直接配布したりスクリプトを実行したりすることは推奨されません。

不変インフラストラクチャ (IaC) のロジックは、状態を再現でき、宣言的セマンティクスに準拠できることを保証することです。インフラストラクチャを直接変更することは、手続き的な操作です。インフラは稼働中の状態であり、不確実な要素が多く、正確に記述することは困難です。

以下は、クラウド ネイティブにおける IT インフラストラクチャ アーキテクチャの図です。

Kubernetes は IaaS 層のリソースを引き継ぎ、システム全体の動作を制御します。ビジネス サービスは主にイメージ リポジトリを通じて配布され、ビジネス ログの収集と監視には他のオープン ソース コンポーネントの使用も必要です。

4. Kubernetesはファイルを配布し、スクリプトプランを実行します

4.1 訓練の準備

リストは次のとおりです:

  • kubectlコマンドを実行できるKuberentesクラスター
  • 配布するVMがクラスタノードに追加されました
  • Docker環境とDockerhubアカウント

4.2 訓練の内容

  1. ドリルは次のステップに分かれています。
  2. 実行するスクリプトとファイルを準備する
  3. イメージをビルドしてプッシュする

配布用のKubernetesジョブを作成する

4.3 演習の目的

  • この演習の目的は次のとおりです。
  • 仮想マシン上でWebサービスを実行し、ファイルのダウンロード機能を提供する

ファイルを仮想マシンに配布し、ダウンロードサービスに追加する

5. Kubernetesはファイルを配布し、スクリプトを実行する

5.1 クラスターの説明

  1. kubectl ノードを取得 -o ワイド
  2.  
  3. 名前ステータス 役割 年齢 バージョン 内部 IP 外部 IP OS イメージ カーネル バージョン コンテナ ランタイム
  4. テスト準備完了 マスター、ワーカー 6d2h v1.17.9 10.160.6.35 <なし> CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://20.10.6

予算が限られているため、ここではマルチノード環境は展開されていません。ただし、実際のシナリオに適合させるために、配布プロセスが制御不能にならないように、ジョブの実行時に nodeSelector を使用して指定されたノードを選択します。

5.2 配布ファイルの準備とスクリプトの実行

1. ファイルディレクトリ構造

  • デモ
    • Dockerファイル
    • スタート

イメージの構築に関連する以下のコマンドはすべて、デモ ディレクトリで実行されます。

2. スクリプトstart.shの内容

  1. cd /データ
  2.  
  3. nohup python -m シンプルHTTPサーバー 8000&

Kubernetes クラスターは、Python 2 インタープリターが付属する CentOS 7 オペレーティング システムを使用します。簡潔にするために、ここではダウンロード サービスを提供するために SimpleHTTPServer を使用します。

3. Dockerfileの内容

  1. docker.io/alpine:3.12より
  2. ARGファイル
  3. ${file} /data/を追加します

4. 配布するファイルの内容

ファイルは、ビルド環境内のローカル ファイルまたは任意の URL ファイル リンクにすることができます。ここでは PDF ファイル リンクを選択します: https://www.chenshaowen.com/static/file/ui-autotest.pdf

5.3 イメージの構築

OCI イメージは Kubernetes でよく使用されるため、ファイルとスクリプトをカプセル化し、イメージにパッケージ化して、イメージ リポジトリを通じて配布する必要があります。

配布するファイルをイメージにパッケージ化する

  1. docker build --build-arg file=https://www.chenshaowen.com/static/file/ui-autotest.pdf -t shaowenchen/file-1:latest ./  

画像をプッシュします:

  1. docker push shaowenchen/file-1:latest

実行するスクリプトをイメージにパッケージ化する

  1. docker build --build-arg file=./start.sh -t shaowenchen/shell-1:latest ./  

画像をプッシュします:

  1. docker push shaowenchen/shell-1:最新
  • Dockerhubでイメージを見る

5.4 Kubernetesノードの前処理

Kubernetes クラスターに分散するノードを追加することに加えて、もう 1 つの重要な点は、ノードを前処理する必要があることです。

ノードの前処理では、主にノードにラベルを追加し、正確な分散のためにマークを付けます。実稼働環境では、ネットワークは通常分割されているため、ゾーンと IP という 2 つの次元のラベル付けが導入されます。

  • ノードゾーン、IPをマーク

ゾーンはパーティションを意味し、ここでは としてマークされています。 ip は、このパーティション内の仮想マシンの IP アドレスを表します。実際には、Kubernetes クラスターをインストールするときにバッチ処理を実行できます。

  1. kubectl ラベル ノード テスト ゾーン = a
  2. kubectl ラベル ノード テスト ip=10.160.6.35
  • タグ付けされたタグを表示
  1. kubectl ノードを取得--show-labels  
  2.  
  3. 名前ステータス 役割 年齢 バージョン ラベル
  4. テスト準備完了マスター、ワーカー 6d2h v1.17.9 beta.kubernetes.io/arch=amd64、beta.kubernetes.io/os=linux、ip=10.160.6.35、kubernetes.io/arch=amd64、kubernetes。 io/ホスト名=test、kubernetes.io/os=linux、node-role.kubernetes.io/master=、node-role.kubernetes.io/worker=、zone=a

5.5 指定されたノードにスクリプトを配布して実行する

  1. 猫 <<EOF | kubectl を適用 -f -
  2. APIバージョン: batch/v1
  3. 種類: 仕事
  4. メタデータ:
  5. 名前: シェル1
  6. 仕様:
  7. テンプレート:
  8. 仕様:
  9. コンテナ:
  10. -名前: シェル1
  11. 仕様:
  12. コンテナ:
  13. -名前: シェル1
  14. コマンド: [ "sh" ]
  15. 引数: [ "-c" , "cp /data/start.sh /hostdata/; echo 'sh /data/start.sh&' | nsenter -t 1 -m -u -i -n;sleep 99999" ]
  16. 画像: shawenchen/shell-1:latest
  17. セキュリティコンテキスト:
  18. 特権: true  
  19. ボリュームマウント:
  20. -名前: ホストデータ
  21. マウントパス: /hostdata
  22. ホストIPC: true  
  23. ホストネットワーク: true  
  24. ホストPID: true  
  25. ボリューム:
  26. -名前: ホストデータ
  27. ホストパス:
  28. パス: /data/
  29. 再起動ポリシー: なし
  30. ノードセレクタ:
  31. ゾーン:
  32. IPアドレス: 10.160.6.35
  33. 終了

画像が小さいのでスクリプトを素早く実行できます。仮想マシンにログインし、関連するサービス プロセスがあるかどうかを確認します。

  1. ps aux |grep SimpleHTTPServer
  2.  
  3. ルート 16523 0.1 0.0 198028 10120 ? S 22:38 0:00 python -m シンプルHTTPサーバー 8000
  4. root 17558 0.0 0.0 112684 1000 ポイント/1 S+ 22:39 0:00 grep --color=auto SimpleHTTPServer  

SimpleHTTPServerサービスが仮想マシン上で正常に実行されたことを示します。

5.6 指定されたノードにファイルを配布する

  1. 猫 <<EOF | kubectl を適用 -f -
  2. APIバージョン: batch/v1
  3. 種類: 仕事
  4. メタデータ:
  5. 名前: ファイル-1
  6. 仕様:
  7. テンプレート:
  8. 仕様:
  9. コンテナ:
  10. -名前: ファイル-1
  11. 仕様:
  12. コンテナ:
  13. -名前: ファイル-1
  14. コマンド: [ "sh" ]
  15. 引数: [ "-c" , "cp -R /data/* /hostdata/; sleep 10" ]
  16. 画像: シャオウェンチェン/ファイル-1:最新
  17. セキュリティコンテキスト:
  18. 特権: true  
  19. ボリュームマウント:
  20. -名前: ホストデータ
  21. マウントパス: /hostdata
  22. ホストIPC: true  
  23. ホストネットワーク: true  
  24. ホストPID: true  
  25. ボリューム:
  26. -名前: ホストデータ
  27. ホストパス:
  28. パス: /data/
  29. 再起動ポリシー: なし
  30. ノードセレクタ:
  31. ゾーン:
  32. IPアドレス: 10.160.6.35
  33. 終了

ページ アクセスを通じて、提供されているダウンロード ページを表示できます。

仮想マシン上の分散ファイルを表示します。

  1. ls /データ/
  2.  
  3. start.sh ui-autotest.pdf

6. 結論

この記事では主に、Kubernetes 上の仮想マシンにファイルを配布し、スクリプトを実行する方法を示し、PaaS プラットフォームを設計する際に役立つアイデアをいくつか紹介します。

Kubelet を従来のエージェントとして使用します。 Kubelet は Pod を管理し、Agent は IaaS を管理します。両者には考えるべき共通点があります。さらに、単一の Kubernetes クラスターは最大 5,000 個のノードをサポートし、ほとんどの需要シナリオに対応できます。複数のクラスターを通じて、より多くのノードをサポートできます。

より多くのソースからのバイナリ配布がサポートされる可能性があります。この例では https ファイルを使用していますが、ローカル ファイルを使用することも、S3 からローカル コンピューターにファイルをダウンロードしてパッケージ化することもできます。同時に、最終的な画像は元のファイルよりわずか数 MB 大きくなります。

スクリプトの実行をさらに最適化できます。ジョブの実行が完了すると、スクリプトの実行も終了します。実際には、管理対象サービスをホストに追加する必要があります。簡潔にするために、この記事では詳細には説明しません。

もう 1 つの解決策は、hostIPC/hostPID Pod を直接使用して、従来の仮想マシン上のサービス プロセスを置き換えることです。

<<:  Ecarx TechnologyとBaidu Netdiskが協力し、車両端末データのクラウド管理機能を公開

>>:  クラウドネットワーク統合市場には幅広い展望があります。事業者と企業は協力して前進すべきである

推薦する

医療業界に代表される関連業界向けの検索エンジン最適化

医療広告は長い間、グレーな業界であった。近年、オンラインで医療を求める人が増えています。調査によると...

Google 再審査リクエストを送信する

Google の検索結果に自分のウェブサイトが表示されなくなったり、以前と比べてウェブサイトのランキ...

義務とは何かを理解するのに役立つ、あらゆる年齢層向けの長いカフカの記事

[[376344]]この記事はWeChat公式アカウント「妹の味」から転載したもので、著者は妹が飼っ...

Google Cloud の幹部は、これらの 5 つのデータ トレンドが 2021 年のビジネス開発を推進すると予測しています。

この記事はLeiphone.comから転載したものです。再印刷が必要な場合は、Leiphone.co...

今後10年間で最も有望なゲームジャンル

今年5月、「モバイルゲームIPの年は本当だ」という記事の最後で、テキストゲームに注目していて将来性が...

SEOガイドチュートリアル

検索エンジン最適化 (SEO) は、検索エンジンの検索ルールを使用して、関連する検索エンジンでの現在...

体験談共有: トラフィックの多いサイトをアップグレードした後のトラフィック回復プロセス

蝶が美しい理由は、繭から抜け出す過程を経る必要があるからです。当サイトは、インターネットとネットユー...

大規模モデル分散並列技術 - データ並列最適化

コミュニケーションの融合上記から、各モデル勾配はデータ並列処理で同期される必要があることがわかります...

エッジコンピューティングを加速させる10のトレンド

[[347333]]技術の進歩と市場の発展に伴い、エッジ コンピューティングに投資する企業が増えてい...

ユーザーの思考を分析し、優れたブランドマーケティングを行うにはどうすればよいでしょうか?

これまで、誰もがトラフィックの考え方について語ってきました。オンラインとオフラインの両方でトラフィッ...

XiNiX-SSD ハードディスク/Windows ホスト年間支払い $9.9/Linux ホスト年間支払い $5.99

XiNiX™ InfoTech Pvt. Ltd. は 2005 年に設立されたホスティング会社です...

Bステーションブランドマーケティングガイド!

この記事のキーワード: Bilibili 、ブランドマーケティング、マーケティングプロモーション、ブ...

SEO最適化のワークフローの詳細説明 パート3: データ分析

SEO 最適化には、データ分析が非常に重要です。 「 SEO 最適化ワークフローの準備」と「 SEO...