KubernetesにcRPDをインストールする
本番環境でアプリケーションを実行するコンテナを管理します。ダウンタイムがないことを確認します。たとえば、コンテナがダウンした場合、別のコンテナを起動する必要があります。Kubernetesは、分散システムを回復力を持って実行するためのフレームワークを提供します。Kubernetesは、ホストコンテナのクラスタ全体にアプリケーションコンテナをデプロイ、自動化、スケーリング、運用するためのプラットフォームを提供します。
前提
LinuxシステムにKubernetesをインストールし、2ノードLinuxクラスタにKubernetesをデプロイするには、「 Kubernetesのインストール」を参照してください。
Kubernetes をデプロイすると、クラスターが取得されます。Kubernetesクラスタは、コンテナ化されたアプリケーションを実行するノードと呼ばれる一連のワーカーマシンで構成されています。すべてのクラスタには、少なくとも1つのワーカー・ノードがあります。ワーカー・ノードは、アプリケーションのコンポーネントであるポッドをホストします。
このセクションでは、KubernetesでcRPD Dockerイメージを作成する手順の概要を説明します。
Kubernetes のインストール
Kubernetes をインストールするには:
Kubernetes クラスター
Kubernetes は、1 つのユニットとして機能するように接続されたコンピューターのクラスターを調整します。Kubernetesは、効率的な方法でクラスター全体のcRPDの導入とスケジューリングを自動化します。
Kubernetes クラスターは、次の 2 種類のリソースで構成されます。
-
プライマリはクラスターを調整します
-
ノードは、アプリケーションを実行するワーカーです
プライマリは、クラスターの管理を担当します。プライマリは、アプリケーションのスケジュール設定、アプリケーションの望ましい状態の維持、アプリケーションのスケーリング、新しい更新プログラムのロールアウトなど、クラスター内のすべてのアクティビティを調整します。
ノードは、Kubernetes クラスター内のワーカー マシンとして機能する VM または物理コンピューターです。各ノードには、ノードを管理し、Kubernetesマスターと通信するためのエージェントであるKubeletがあります。ノードには、Docker や rkt などのコンテナー操作を処理するためのツールも必要です。運用トラフィックを処理する Kubernetes クラスターには、少なくとも 3 つのノードが必要です。
cRPDをKubernetesに展開すると、プライマリがアプリケーションコンテナを起動します。プライマリは、クラスターのノードで実行するようにコンテナーをスケジュールします。ノードは、プライマリが公開するKubernetes APIを使用してプライマリと通信します。エンド ユーザーは、Kubernetes API を直接使用してクラスターを操作することもできます。
Podは常にノード上で実行されます。ノードは Kubernetes のワーカー マシンであり、クラスターに応じて仮想マシンまたは物理マシンのいずれかになります。各ノードはプライマリによって管理されます。ノードは複数のポッドを持つことができ、Kubernetesプライマリはクラスター内のノード間でポッドのスケジューリングを自動的に処理します。
すべてのKubernetesノードは、少なくとも以下を実行します。
-
Kubeletは、Kubernetesプライマリとノード間の通信を担当するプロセスです。マシン上で実行されているPodとコンテナを管理します。
-
レジストリからコンテナイメージをプルし、コンテナを解凍し、アプリケーションを実行するコンテナランタイム(Docker、rktなど)。
Minikube クラスターを作成するには:
cRPD Dockerイメージのダウンロード
-
cRPDソフトウェアをインポートする前に、LinuxホストにDockerがインストールされ、Dockerエンジンが実行されていることを確認してください。
-
cRPDソフトウェアをダウンロードする前に、 必ずジュニパーサポート に登録してください。
Dockerイメージをダウンロードするには:
展開を使用したcRPDポッドの作成
Kubernetes Pod は、管理とネットワーキングの目的で結び付けられた 1 つ以上のコンテナーのグループです。Kubernetes DeploymentはPodの健全性をチェックし、Podのコンテナが終了すると再起動します。デプロイは、Podの作成とスケーリングを管理するための推奨される方法です。
Deploymentで望ましい状態を記述すると、Deployment Controllerは実際の状態を望ましい状態に変更します。デプロイを使用して、新しい ReplicaSet を作成できます。または、既存のDeploymentを削除し、新しいDeploymentでそのリソースを採用することもできます。
YAMLを使用したcRPDポッドの作成
Podは、Kubernetesアプリケーションの基本的な実行単位であり、作成またはデプロイするKubernetesオブジェクトモデルの最小かつ最も単純な単位です。Podはデプロイの単位を表し、Kubernetes内のアプリケーションの単一のインスタンスであり、単一のコンテナまたは緊密に結合され、リソースを共有する少数のコンテナで構成される場合があります。Dockerは、Kubernetes Podで使用される最も一般的なコンテナランタイムです。
Podを直接作成することも、Kubernetesのコントローラーを間接的に使用することもできます。コントローラーは、複数のPodを作成および管理できます。コントローラーは、Pod を作成するために用意した Pod テンプレートを使用します。Pod テンプレートは、Replication Controller、Jobs、DaemonSet などの他のオブジェクトに含まれる Pod 仕様です。
YAMLファイルを使用してcRPDポッドを作成するには
各Podは、特定のアプリケーションの単一のインスタンスを実行することを目的としています。アプリケーションを水平方向にスケーリングする場合(複数のインスタンスを実行する場合など)は、インスタンスごとに1つずつ、複数のPodを使用する必要があります。Kubernetesでは、これは一般的にレプリケーションと呼ばれます。
参照
ジョブリソースを使用したcRPDポッドの作成
ジョブは1つ以上のPodを作成し、指定された数のPodが正常に終了するまでPodの実行を再試行し続けます。指定された数の正常終了に達すると、タスクは完了します。また、ジョブを使用して複数のPodを並行して実行することもできます。ジョブを削除すると、作成したPodがクリーンアップされます。ジョブを一時停止すると、ジョブが再開されるまでアクティブなPodが削除されます。crpd_job.yamlファイルを使用してcRPD Podを作成するには:
DaemonSetを使用したcRPDポッドの作成
DaemonSetは、すべて(または一部)のノードがPodのコピーを実行することを保証します。ノードがクラスターに追加されると、Podも追加されます。ノードがクラスターから削除されると、それらのPodはガベージコレクションされます。DaemonSetが削除されると、作成されたPodも削除されます。
crpd_daemonset.yamlファイルを使用したcRPDポッドの作成
各Podは、特定のアプリケーションの単一のインスタンスを実行することを目的としています。アプリケーションを水平方向にスケーリングする場合(複数のインスタンスを実行する場合など)は、インスタンスごとに1つずつ、複数のPodを使用する必要があります。Kubernetesでは、これは一般的にレプリケーションと呼ばれます。
参照
cRPDのスケール
kubectl runコマンドの–replicasパラメータを使用して、需要に基づいてcRPDの複数のインスタンスを作成できます。デプロイメントは、ReplicaSetを所有して管理できるオブジェクトです。
スケーリングする前にポッドを 1 つ用意する必要があります。
スケールアップするには:
スケールダウンするには:
-
次のコマンドを実行して、サービスを 2 つのレプリカにスケールダウンします。
root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=2deployment.apps/crpdref scaled
-
次のコマンドを実行して、デプロイを一覧表示します。
root@kubernetes-master:~# kubectl get deployments -
次のコマンドを実行して、Podの数を一覧表示します。2つのPodが終了したことがわかります。
root@kubernetes-master:~# kubectl get pods -o wide
cRPD導入のロール更新
Podインスタンスを新しいバージョンで更新できます。ローリングアップデートでは、Podインスタンスを新しいインスタンスで段階的に更新することで、 ダウンタイムなしでDeployments の更新を行うことができます。新しいPodは、利用可能なリソースを持つノードでスケジュールされます。ロールバック更新は、ダウンタイムなしで継続的インテグレーションとアプリケーションの継続的な配信により、ある環境から別の環境にアプリケーションを昇格させます。Kubernetes では、更新プログラムはバージョン管理され、 デプロイ の更新は以前の安定したバージョンに戻すことができます。
cRPD展開を新しいイメージで更新し、更新後に設定を保持するには:
割り当てられたリソースを使用したcRPDポッドの展開
ポッドは、コンテナーのネットワークとストレージの 2 種類の共有リソースを提供します。Pod内のコンテナがPodの外部のエンティティと通信する場合、共有ネットワークリソース(ポートなど)の使用方法を調整する必要があります。Pod内では、コンテナはIPアドレスとポートを使用して localhost を介して通信します。
Pod内のコンテナは、システムのホスト名をPodに設定された name と同じものとして表示します。
Pod内のコンテナは、コンテナ仕様の privileged フラグを使用して、特権モードを有効にすることができます。これは、ネットワークスタックの操作やハードウェアデバイスへのアクセスなど、オペレーティングシステムの管理機能を必要とするコンテナに役立ちます。特権コンテナー内のプロセスには、コンテナー外のプロセスで使用できる特権とほぼ同じ特権があります。
リソースを含むポッドのデプロイを表示するには:
マウントされたボリュームを使用したcRPDポッドの展開
emptyDirは、Kubernetes でサポートされるボリュームの一種です。Podがノードに割り当てられたときに作成され、Podがそのノードで実行されている限り存在します。名前が示すように、emptyDirボリュームは最初は空です。Pod内のすべてのコンテナは、emptyDirボリューム内の同じファイルを読み書きできますが、そのボリュームは各コンテナ内の同じパスまたは異なるパスにマウントできます。何らかの理由でPodがノードから削除されると、emptyDir内のデータは完全に削除されます。
KubernetesにストレージパスをマウントしてcRPDポッドの展開を表示するには: