Ansible の Kubernetes モジュールを使用したコンテナ オーケストレーションの自動化

Ansible の Kubernetes モジュールを使用したコンテナ オーケストレーションの自動化

[[349188]]

Kubernetes と Ansible を組み合わせてクラウドを自動化します。また、Ansible k8s モジュールのチートシートもご覧ください。

Ansible は作業を自動化するための優れたツールであり、Kubernetes はコンテナ オーケストレーションのための強力なツールです。この2つを組み合わせるとどうなるでしょうか?ご想像のとおり、Ansible + Kubernetes はコンテナ オーケストレーションを自動化できます。

Ansibleモジュール

実際、Ansible 自体は YAML ファイルを解釈するためのフレームワークにすぎません。その真の強みは豊富なモジュールにあります。モジュールモジュールつまり、Ansibleではスクリプトプレイブック簡単な設定で外部アプリケーションのいくつかのツールを呼び出すことができます。

AnsibleにはKubernetesを直接操作できるモジュールのほか、関連コンポーネント(DockerやPodmanなど)を操作するモジュールもあります。新しいモジュールの使い方を学習するプロセスは、新しい端末コマンドや API を学習するプロセスと同じです。まず、ドキュメントから、モジュールを呼び出すときにモジュールが受け入れる必要があるパラメータと、これらのパラメータが外部アプリケーションに与える具体的な影響について学習できます。

Kubernetes クラスターへのアクセス

Ansible Kubernetes モジュールを使用する前に、Kubernetes クラスターにアクセスできる必要があります。権限がない場合は、短期のオンライントライアルアカウントを使用して試すこともできますが、Kubernetes 公式サイトの指示に従うか、Braynt Son の「Kubernetes 入門」チュートリアルを参照して Minikube をインストールすることをお勧めします。 Minikube は、完全なクラスターであるかのように構成および操作できる単一ノードの Kubernetes インスタンスのインストールを提供します。

  • Ansible k8s shorthand をダウンロードする (登録が必要)

Minikube をインストールする前に、環境が仮想化をサポートしていることを確認し、 libvirtをインストールして、 libvirtユーザー グループを承認する必要があります。

  1. $ sudo dnf install libvirt
  2. $ sudo systemctl start libvirtd
  3. $ sudo usermod -- append -- groups libvirt `whoami`
  4. $ newgrp libvirt

Pythonモジュールのインストール

Ansible で Kubernetes 関連モジュールを使用するには、次の Python モジュールをインストールする必要があります。

  1. $ pip3 . 6 install kubernetes -- user
  2. $ pip3 . 6 install openshift -- user

Kubernetesを起動する

完全な Kubernetes クラスターの代わりに Minikube を使用している場合は、 minikubeコマンドを使用して最小限の Kubernetes インスタンスをローカルに作成します。

  1. $ minikube start -- driver = kvm2 -- kvm - network default

次に、Minikube の初期化が完了するまで待ちます。このプロセスに必要な時間は、実際の状況によって異なる場合があります。

クラスター情報を取得する

クラスターが起動したら、 cluster-infoオプションを使用してクラスター関連の情報を取得できます。

  1. $ kubectl cluster - info
  2. Kubernetes master is running at https : //192.168.39.190:8443
  3. KubeDNS is running at https : //192.168.39.190:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  4. To further debug and diagnose cluster problems , use 'kubectl cluster-info dump' .

k8sモジュールの使用

Ansible は、 k8sモジュールを使用して Kubernetes での操作を実装します。スクリプトでk8sモジュールを使用すると、Kuvernetes オブジェクトを管理できます。このモジュールは、 kubectlコマンドの最終ステータスについて説明します。たとえば、 kubectlを使用して新しい名前空間を作成する次の操作の場合:

  1. $ kubectl create namespace my - namespace

これは非常に単純な操作であり、この操作の最終状態は次のように YAML ファイルに記述されます。

  1. - hosts : localhost
  2. tasks :
  3.     - name : create namespace
  4. k8s :
  5. name : my - namespace
  6. api_version : v1
  7. kind : Namespace
  8. state : present

Minikube を使用している場合は、ホスト名 ( hosts ) をlocalhostとして定義する必要があります。使用しているモジュールによって、使用可能なパラメータ ( api_versionkindパラメータなど) の構文も定義されることに注意してください。

このスクリプトを実行する前に、 yamllintコマンドを使用してエラーがないか確認してください。

  1. $ yamllint example . yaml

エラーがないことを確認した後、スクリプトを実行します。

  1. $ ansible - playbook ./ example . yaml

新しい名前空間が作成されたかどうかを確認できます。

  1. $ kubectl get namespaces
  2. NAME STATUS AGE
  3. default           Active   37h
  4. kube - node - lease Active   37h
  5. kube - public       Active   37h
  6. kube - system Active   37h
  7. demo Active   11h
  8. my - namespace       Active   3s

Podman を使用してコンテナ イメージをプルする

コンテナは、ほぼ最小限で、Kubernetes によって管理できる Linux システムです。 LXC プロジェクトと Docker は、コンテナ仕様の大部分を定義します。コンテナ ツールセットに最近追加されたのが Podman です。これは実行にデーモンを必要としないため、多くのユーザーに歓迎されています。

Podman を使用すると、Docker Hub や Quay.io などのリポジトリからコンテナ イメージをプルできます。この操作の Ansible 構文も非常にシンプルです。リポジトリ Web サイトによって提供されるミラー パスをスクリプト内の対応する位置に記述するだけです。

  1.     - name : pull an image
  2. podman_image :
  3. name : quay . io / jitesoft / nginx

yamllintを使用して検証します。

  1. $ yamllint example . yaml

プレイブックを実行します。

  1. $ ansible - playbook ./ example . yaml
  2. [ WARNING ]: provided hosts list is empty , only localhost is available .
  3. Note that the implicit localhost does not match 'all'
  4. PLAY [ localhost ] ************************
  5. TASK [ Gathering Facts ] ************************
  6. ok : [ localhost ]
  7. TASK [ create k8s namespace ] ************************
  8. ok : [ localhost ]
  9. TASK [ pull an image ] ************************
  10. changed : [ localhost ]
  11. PLAY RECAP ************************
  12. localhost : ok = 3 changed = 1 unreachable = 0 failed = 0
  13. skipped = 0 rescued = 0 ignored = 0

Ansibleを使用したデプロイメント

Ansible は、小さなメンテナンス タスクを実行するだけでなく、2 つの YAML ファイルの間にわずかな違いしかないため、プレイブックを通じてkubectlによって実装された他の機能も実装できます。 Kubernetes で使用される YAML ファイルは、わずかな変更を加えるだけで Ansible プレイブックで使用できます。たとえば、次の YAML ファイルは、 kubectlコマンドを使用して Web サーバーをデプロイするために使用されます。

  1. apiVersion : apps / v1
  2. kind : Deployment
  3. metadata :
  4. name : my - webserver
  5. spec :
  6. selector :
  7. matchLabels :
  8. run : my - webserver
  9. replicas : 1
  10.   template :
  11. metadata :
  12. labels :
  13. run : my - webserver
  14. spec :
  15. containers :
  16.       - name : my - webserver
  17. image : nginx
  18. ports :
  19.         - containerPort : 80

パラメータに精通している場合は、YAML ファイルの内容のほとんどをプレイブックのdefinition部分に配置すると、Ansible でパラメータを使用できます。

  1.     - name : deploy a web server
  2. k8s :
  3. api_version : v1
  4.         namespace : my - namespace
  5. definition :
  6. kind : Deployment
  7. metadata :
  8. labels :
  9. app : nginx
  10. name : nginx - deploy
  11. spec :
  12. replicas : 1
  13. selector :
  14. matchLabels :
  15. app : nginx
  16.             template :
  17. metadata :
  18. labels :
  19. app : nginx
  20. spec :
  21. containers :
  22.                   - name : my - webserver
  23. image : quay . io / jitesoft / nginx
  24. ports :
  25.                       - containerPort : 80
  26. protocol : TCP

実行が完了したら、 kubectlコマンドを使用して期待される結果を確認できます。展開する展開:

  1. $ kubectl - n my - namespace get pods
  2. NAME READY STATUS
  3. nginx - deploy - 7fdc9 - t9wc2 1 / 1     Running

クラウド上のモジュールの使用

開発と展開の作業がクラウドに移行するにつれて、クラウド上で自動化を実現する方法を理解する必要があります。 k8sモジュールとpodman_imageモジュールは、クラウド開発のほんの一部にすぎません。ワークフローには自動化が必要なタスクがいくつかあり、Ansible を使用してこれらのタスクをより効率的に実行する方法を学ぶことができます。

<<:  Docker ボリュームとは何でしょうか?使い方から徹底解説まで!

>>:  クラウド コンピューティングの容量管理の重要性とその実装方法

推薦する

2022年グローバルハイブリッドクラウド開発トレンドレポート

第14次5カ年計画では、デジタル経済における新たな優位性の創出を重視し、ハイブリッドクラウドを中心と...

厳選:今年最も安い香港 VPS のおすすめ!

この記事の目的は、最も安価な香港の VPS 販売業者のグループを皆様にお勧めすることです。市場に出回...

医療ウェブサイトにSEOは必要でしょうか?

SEOは、多くのウェブマスターが生計を立てるために、また多くの企業が利益を上げるために使用する技術で...

eBayがレンタルサイトRent.comを売却

3月23日 ニュース 海外メディアの報道によると、eBayは本日、不動産情報ウェブサイトRent.c...

WeChatのO2Oクローズドループシステムが失敗した場合、ビッグデータの金鉱をどうやって活用するのか?

編集者注:WeChatのユーザー数は2億人を超えており、これは中国移動の携帯電話ユーザーの3分の1と...

ゲーミフィケーションの考え方を使って製品を作ると、人気が出ないということはまずないでしょう

現代はユーザーとトラフィックが王様の時代です。トラフィックの入り口をコントロールし、より多くのユーザ...

分散ブロックストレージエンジンを設計するにはどうすればよいでしょうか?

この記事はシリーズの 2 番目であり、ストレージ エンジンの要件、考え方、設計に焦点を当てています。...

ブランドマーケティングを「ヒト・モノ・場所」の観点から分析するには?

新しい消費者ブランドの開発が活発化する中、従来の販売ロジックだけに焦点を合わせるのではなく、ブランド...

ウェブサイトの包含率を迅速に向上させる方法に関する本当の内部情報

インターネット上の情報量が増加するにつれて、検索エンジンがさまざまなウェブサイトからウェブページを収...

医療ウェブサイトの最適化ロングテールワードランキングルール

2012 年 3 月 5 日月曜日、著者は医療業界のウェブサイトの最適化方法を分析し、共通の特徴を発...

破損したハードドライブを回復するにはどうすればいいですか?

修復ソフトウェアを使用したり、プロのハードドライブ修復メーカーを見つけたりするのはそれほど難しくあり...

大学生が初めて職場に入りSEOに従事する際の評価期間をどうやってうまく通過できるか

著者は、ウェブサイトの最適化を行っている友人の多くが大学を卒業していることに気付きました。彼らが初め...

アリババクラウドが「ゼロカーボンクラウド」プランを発表

5月28日、2021 Alibaba Cloud Summitにおいて、Alibaba Cloud ...

王通:百度のアルゴリズム変更とSEO戦略の分析

6月に、Baiduのアルゴリズムは以下のように大幅に変更されました。 1. 百度にインデックスされた...

SEO最適化に別れを告げ、ソフト記事を使ってウェブサイトを宣伝しましょう

最近、Baidu はアルゴリズムにいくつかの調整を加え、コンテンツの質が低いウェブサイトはさまざまな...