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が協力し、車両端末データのクラウド管理機能を公開

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

推薦する

起業環境の悪さから「西へ」向かうしかなかった:台湾人プログラマーの心の旅

はじめに:台湾の IT 環境がどのようなものであるかについて、私たちはほとんど注目していません。この...

AWSの障害により多数のウェブサイトやサービスが麻痺し、損失は数千万ドルを超える可能性も

米国現地時間の火曜日、アマゾンのクラウドコンピューティングサービス(AWS)で大規模な障害が発生し、...

AWSはGoogle Cloudに続き移行の「退出料金」を廃止し、顧客は無料で退出できるようになった

AWSは、大量のデータをAWSクラウドから移動したい場合、いわゆる「エグレス料金」を顧客に請求しなく...

コンバージョン率の低さへの反撃:心を掴む営業戦略

ウェブサイトにとって最も頭の痛い問題は何でしょうか。それはウェブサイトのトラフィックが全くないことで...

検索エンジンの激動の時代に、ウェブマスターは冷静に対応すべき

最近、百度のアルゴリズムが調整され、多くのウェブサイトがさまざまなレベルで変化を経験しました。一部の...

#20% オフ: photonvps-$4.76/512 ram/50g ハードドライブ/2T トラフィック/ロサンゼルス/Windows

photonvps は、 Psychz Networksのマネージド VPS ブランドです (主にサ...

仮想化により、データセンターのストレージシステムの運用と保守の複雑さが軽減されます。

さまざまな情報システムの増大する IT リソースの需要に対応し、アーキテクチャと管理の複雑さを軽減し...

緑の大根からザクロまで、アルゴリズムの導入後も、以前の方法を使用して Web サイトを処理できますか?

ウェブサイトの SEO 最適化業界はかつて非常に人気がありました。SEO エンジニア、個人のウェブマ...

エッジコンピューティング: IoT アプリケーションを新たな高みへ

テクノロジーが発展するにつれて、新しいアプローチを必要とする新しい問題も発生します。スマートスイッチ...

ASUS Air-Through熱気流アーキテクチャの分析

前回の ASUS サーバーの省エネ技術分析では、Smart-Fan TM インテリジェント ファン技...

Hostyun:「香港ビッグベルト-ネイティブIP」の香港VPSシリーズの簡単なレビュー

Hostyun は、香港の Cloudie データ センターで香港のネイティブ IP を備えた VP...

オンプレミスとクラウド データ ウェアハウスの長所と短所

データ ウェアハウスは、ビジネス インテリジェンス (BI) や分析アプリケーション用に大量のデータ...

クラウド自動化がDevOpsの成功の鍵となる理由

今日、多くの企業が効率性と柔軟性を向上させるためにデジタル変革戦略の導入を加速しています。しかし、I...

PR の低下はウェブサイトのコンテンツの質に関係しているのでしょうか?

ある日、偶然 SEO 愛好家を訪ねて、次のような記事を目にしました。「PR の低下は、ウェブサイトの...