Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

KubernetesにcRPDをインストールする

Kubernetesは、コンテナ化されたワークロードとサービスを管理するためのオープンソースプラットフォームです。コンテナーは、アプリケーションをバンドルして実行するための優れた方法です。

本番環境でアプリケーションを実行するコンテナを管理します。ダウンタイムがないことを確認します。たとえば、コンテナがダウンした場合、別のコンテナを起動する必要があります。Kubernetesは、分散システムを回復力を持って実行するためのフレームワークを提供します。Kubernetesは、ホストコンテナのクラスタ全体にアプリケーションコンテナをデプロイ、自動化、スケーリング、運用するためのプラットフォームを提供します。

前提

LinuxシステムにKubernetesをインストールし、2ノードLinuxクラスタにKubernetesをデプロイするには、「 Kubernetesのインストール」を参照してください。

Kubernetes をデプロイすると、クラスターが取得されます。Kubernetesクラスタは、コンテナ化されたアプリケーションを実行するノードと呼ばれる一連のワーカーマシンで構成されています。すべてのクラスタには、少なくとも1つのワーカー・ノードがあります。ワーカー・ノードは、アプリケーションのコンポーネントであるポッドをホストします。

このセクションでは、KubernetesでcRPD Dockerイメージを作成する手順の概要を説明します。

Kubernetes のインストール

Kubernetes をインストールするには:

  1. root ユーザーとしてログインします。
  2. ソフトウェアをダウンロードしてインストールします。
  3. 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 クラスターを作成するには:

  1. 次のコマンドを実行して、minikubeのバージョンを確認します。
  2. 次のコマンドを実行して、クラスターを起動します。
  3. 次のコマンドを実行して、kubectlがインストールされているかどうかを確認します。
  4. 次のコマンドを実行して、クラスターの詳細を表示します。
  5. 次のコマンドを実行して、クラスタ内のノードを表示します。

cRPD Dockerイメージのダウンロード

前提 条件
  • cRPDソフトウェアをインポートする前に、LinuxホストにDockerがインストールされ、Dockerエンジンが実行されていることを確認してください。

  • cRPDソフトウェアをダウンロードする前に、 必ずジュニパーサポート に登録してください。

Dockerイメージをダウンロードするには:

  1. cRPDのセールスフルフィルメントプロセス中に提供された認証情報を使用して、Juniper Dockerレジストリにログインします。
    1. ファイル-passwd.txtを作成し、ジュニパーのカスタマーケアチームから提供された見積もりを除く入力しをコピーします。
    2. 次のコマンドを使用して、エンタープライズ ハブにログインします。
      root@ubuntu-vm18$ cat passwd.txt | docker login -u"<registered-email-id>" --password-stdin enterprise-hub.juniper.net:443

      例えば root@ubuntu-vm18$ cat passwd.txt | docker login -u user@domain.com --password-stdin enterprise-hub.juniper.net:443

  2. 次のコマンドを使用して、ダウンロード サイトから Docker イメージをプルします。

    root@dc-rpd-01# docker pull enterprise-hub.juniper.net:443/crpd-docker-prod/crpd:<release tag>

    例えば

    root@ubuntu-vm18:~# docker pull enterprise-hub.juniper.net:443/crpd-docker-prod/crpd:22.3R1

  3. Dockerイメージリポジトリでイメージを確認します。

    root@dc-rpd-01# docker images

展開を使用したcRPDポッドの作成

Kubernetes Pod は、管理とネットワーキングの目的で結び付けられた 1 つ以上のコンテナーのグループです。Kubernetes DeploymentはPodの健全性をチェックし、Podのコンテナが終了すると再起動します。デプロイは、Podの作成とスケーリングを管理するための推奨される方法です。

Deploymentで望ましい状態を記述すると、Deployment Controllerは実際の状態を望ましい状態に変更します。デプロイを使用して、新しい ReplicaSet を作成できます。または、既存のDeploymentを削除し、新しいDeploymentでそのリソースを採用することもできます。

  1. Kubernetes-primary で crpd.yaml ファイルを作成し、次のテキスト コンテンツを追加します。
  2. crpd.yamlファイルを保存して、cRPD Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd.yaml

  3. 次のコマンドを実行して、既存のPodのリストを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Pod内のコンテナと、それらをビルドするために使用されたイメージを確認します。

    root@kubernetes-master:~# kubectl describe pod crpd

YAMLを使用したcRPDポッドの作成

Podは、Kubernetesアプリケーションの基本的な実行単位であり、作成またはデプロイするKubernetesオブジェクトモデルの最小かつ最も単純な単位です。Podはデプロイの単位を表し、Kubernetes内のアプリケーションの単一のインスタンスであり、単一のコンテナまたは緊密に結合され、リソースを共有する少数のコンテナで構成される場合があります。Dockerは、Kubernetes Podで使用される最も一般的なコンテナランタイムです。

Podを直接作成することも、Kubernetesのコントローラーを間接的に使用することもできます。コントローラーは、複数のPodを作成および管理できます。コントローラーは、Pod を作成するために用意した Pod テンプレートを使用します。Pod テンプレートは、Replication Controller、Jobs、DaemonSet などの他のオブジェクトに含まれる Pod 仕様です。

YAMLファイルを使用してcRPDポッドを作成するには

  1. kubernetes-primary に crpd.yaml ファイルを作成し、次のテキスト コンテンツを追加します。
  2. crpd.yamlファイルを保存してcrpd Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd.yaml

  3. 次のコマンドを実行して、既存のPodのリストを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Pod内のコンテナと、それらをビルドするために使用されたイメージを確認します。

    root@kubernetes-master:~# kubectl describe pod crpd

  5. 次のコマンドを実行して、実行中のコンテナー内に対話型 CLI を提供します。

    root@kubernetes-master:~# kubectl exec -it crpd cli

    ここでは、crpdという名前のポッドを実行し、コマンドラインモードに接続します。

  6. 次のコマンドを実行して、ルートを表示します。

    root@crpd:/> show route

各Podは、特定のアプリケーションの単一のインスタンスを実行することを目的としています。アプリケーションを水平方向にスケーリングする場合(複数のインスタンスを実行する場合など)は、インスタンスごとに1つずつ、複数のPodを使用する必要があります。Kubernetesでは、これは一般的にレプリケーションと呼ばれます。

ジョブリソースを使用したcRPDポッドの作成

ジョブは1つ以上のPodを作成し、指定された数のPodが正常に終了するまでPodの実行を再試行し続けます。指定された数の正常終了に達すると、タスクは完了します。また、ジョブを使用して複数のPodを並行して実行することもできます。ジョブを削除すると、作成したPodがクリーンアップされます。ジョブを一時停止すると、ジョブが再開されるまでアクティブなPodが削除されます。crpd_job.yamlファイルを使用してcRPD Podを作成するには:

  1. 作業ノードで crpd_job.yaml ファイルを作成し、次のテキストコンテンツを追加します。
  2. crpd_job.yamlファイルを保存してcrpd Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd_job.yaml

  3. 次のコマンドを実行して、既存のPodのリストを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Pod内のコンテナと、それらをビルドするために使用されたイメージを確認します。

    root@kubernetes-master:~# kubectl describe job/crpdjob

DaemonSetを使用したcRPDポッドの作成

DaemonSetは、すべて(または一部)のノードがPodのコピーを実行することを保証します。ノードがクラスターに追加されると、Podも追加されます。ノードがクラスターから削除されると、それらのPodはガベージコレクションされます。DaemonSetが削除されると、作成されたPodも削除されます。

crpd_daemonset.yamlファイルを使用したcRPDポッドの作成

  1. 作業ノードで crpd_daemonset.yaml ファイルを作成し、次のテキストコンテンツを追加します。
  2. da1.yamlファイルを保存してcrpd Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd_daemonset.yaml

  3. 次のコマンドを実行して、既存のPodのリストを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Pod内のコンテナと、それらをビルドするために使用されるイメージを確認します。

    root@kubernetes-master:~# kubectl describe pod crpd

    root@kubernetes-master:~# kubectl describe pod crpd-5fc4fd79df-xr8f5

各Podは、特定のアプリケーションの単一のインスタンスを実行することを目的としています。アプリケーションを水平方向にスケーリングする場合(複数のインスタンスを実行する場合など)は、インスタンスごとに1つずつ、複数のPodを使用する必要があります。Kubernetesでは、これは一般的にレプリケーションと呼ばれます。

cRPDのスケール

kubectl runコマンドの–replicasパラメータを使用して、需要に基づいてcRPDの複数のインスタンスを作成できます。デプロイメントは、ReplicaSetを所有して管理できるオブジェクトです。

スケーリングする前にポッドを 1 つ用意する必要があります。

スケールアップするには:

  1. Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd_replicatset.yaml

  2. kubernetes-primary に crpd_replicaSet.yaml ファイルを作成し、次のテキスト コンテンツを追加します。
  3. 次のコマンドを実行して、ポッドを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Deploymentを4つのレプリカにスケーリングします。

    root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=4

  5. 次のコマンドを実行して、デプロイを一覧表示します。

    root@kubernetes-master:~# kubectl get deployments

  6. 次のコマンドを実行して、変更されたポッドの数を確認します。

    root@kubernetes-master:~# kubectl get pods -o wide

  7. 次のコマンドを実行して、Podの詳細を確認します。

    root@kubernetes-master:~# kubectl describe pods

スケールダウンするには:

  1. 次のコマンドを実行して、サービスを 2 つのレプリカにスケールダウンします。

    root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=2

  2. 次のコマンドを実行して、デプロイを一覧表示します。

    root@kubernetes-master:~# kubectl get deployments

  3. 次のコマンドを実行して、Podの数を一覧表示します。2つのPodが終了したことがわかります。

    root@kubernetes-master:~# kubectl get pods -o wide

cRPD導入のロール更新

Podインスタンスを新しいバージョンで更新できます。ローリングアップデートでは、Podインスタンスを新しいインスタンスで段階的に更新することで、 ダウンタイムなしでDeployments の更新を行うことができます。新しいPodは、利用可能なリソースを持つノードでスケジュールされます。ロールバック更新は、ダウンタイムなしで継続的インテグレーションとアプリケーションの継続的な配信により、ある環境から別の環境にアプリケーションを昇格させます。Kubernetes では、更新プログラムはバージョン管理され、 デプロイ の更新は以前の安定したバージョンに戻すことができます。

cRPD展開を新しいイメージで更新し、更新後に設定を保持するには:

  1. cRPD Podを作成します。

    root@crpd-01:~# kubectl kubectl create -f crpd_deploy.yaml

  2. Kubernetes-primaryにcrpd_deploy.yamlファイルを作成し、次のテキストコンテンツを追加します。
  3. 次のコマンドを実行して、デプロイを一覧表示します。

    root@kubernetes-master:~# kubectl get deployments

  4. 次のコマンドを実行して、実行中のポッドを一覧表示します。

    root@kubernetes-master:~# kubectl get pods

    root@kubernetes-master:~# kubectl get pods -o wide

  5. 次のコマンドを実行して、cRPDの現在のイメージバージョンを表示します。

    root@kubernetes-master:~# kubectl exec -it crpd-deploy4-674b4fcfb5-8xc5d -- cli

  6. 次のコマンドを実行して、現在のイメージ バージョンを表示します。

    root@crpd-deploy4-674b4fcfb5-8xc5d> show version

  7. 次のコマンドを実行して、アプリケーションのイメージを新しいバージョンに更新します。

    root@crpd-deploy4-674b4fcfb5-8xc5d:~$ sudo kubectl edit deployment/crpd-deploy4

  8. 次のコマンドを実行して、イメージが更新されているかどうかを確認します。

    root@crpd-deploy4-674b4fcfb5-8xc5d:~$ sudo kubectl rollout status deployment/crpd-deploy4

  9. 次のコマンドを実行して、ポッドを表示します。

    root@crpd-deploy4-674b4fcfb5-8xc5d> kubectl get pods

  10. 次のコマンドを実行して、cRPDのイメージバージョンを表示します。

    root@kubernetes-master:~$ sudo kubectl exec -it crpd-deploy4-6ff476994d-8z2kr -- bash

  11. 次のコマンドを実行して、現在のイメージ バージョンを表示します。

    root@crpd-deploy4-6ff476994d-8z2kr> show version

割り当てられたリソースを使用したcRPDポッドの展開

ポッドは、コンテナーのネットワークとストレージの 2 種類の共有リソースを提供します。Pod内のコンテナがPodの外部のエンティティと通信する場合、共有ネットワークリソース(ポートなど)の使用方法を調整する必要があります。Pod内では、コンテナはIPアドレスとポートを使用して localhost を介して通信します。

Pod内のコンテナは、システムのホスト名をPodに設定された name と同じものとして表示します。

Pod内のコンテナは、コンテナ仕様の privileged フラグを使用して、特権モードを有効にすることができます。これは、ネットワークスタックの操作やハードウェアデバイスへのアクセスなど、オペレーティングシステムの管理機能を必要とするコンテナに役立ちます。特権コンテナー内のプロセスには、コンテナー外のプロセスで使用できる特権とほぼ同じ特権があります。

リソースを含むポッドのデプロイを表示するには:

  1. Kubernetes-primaryにcrpd_res.yamlファイルを作成し、次のテキストコンテンツを追加します。
  2. crpd_res.yamlファイルを保存してcrpd Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd_res.yaml

  3. 次のコマンドを実行して、既存のPodのリストを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Pod内のコンテナと、それらをビルドするために使用されたイメージを確認します。

    root@kubernetes-master:~# kubectl describe pod crpres

マウントされたボリュームを使用したcRPDポッドの展開

emptyDirは、Kubernetes でサポートされるボリュームの一種です。Podがノードに割り当てられたときに作成され、Podがそのノードで実行されている限り存在します。名前が示すように、emptyDirボリュームは最初は空です。Pod内のすべてのコンテナは、emptyDirボリューム内の同じファイルを読み書きできますが、そのボリュームは各コンテナ内の同じパスまたは異なるパスにマウントできます。何らかの理由でPodがノードから削除されると、emptyDir内のデータは完全に削除されます。

KubernetesにストレージパスをマウントしてcRPDポッドの展開を表示するには:

  1. Kubernetes-primary に crpd_volume.yaml ファイルを作成し、次のテキスト コンテンツを追加します。
  2. crpd_volume.yamlファイルを保存してcrpd Podを作成します。

    root@kubernetes-master:~# kubectl create -f crpd_volume.yaml

  3. 次のコマンドを実行して、既存のPodのリストを表示します。

    root@kubernetes-master:~# kubectl get pods

  4. 次のコマンドを実行して、Pod内のコンテナと、それらをビルドするために使用されたイメージを確認します。

    root@kubernetes-master:~# kubectl describe pod crpd-volume

  5. 次のコマンドを実行して、cRPDインスタンスを実行します。

    root@kubernetes-master:~# kubectl exec -it crpd-volume bash

  6. 次のコマンドを実行して、パス内のファイルを表示します。

    root@crpd-volume:/# ls

  7. 次のコマンドを実行して、ストレージパスに移動します。

    root@crpd-volume:/# cd var/log/crpd-storage/

    root@crpd-volume:/var/log/crpd-storage/#