Kubernetes: Node Expressアプリケーションのデプロイ
このチュートリアルでは、Oracle Cloud Infrastructureアカウントを使用してKubernetesクラスタを設定します。次に、Node Expressアプリケーションをクラスタにデプロイします。
主なタスクは:
- OCIでKubernetesクラスタを設定します。
- クラスタにアクセスするためのOCI CLIを設定します。
- Node ExpressアプリケーションおよびDockerイメージを構築します。
- イメージをOCIRにプッシュします。
- Node.js Dockerアプリケーションをクラスタにデプロイします。
- インターネットからアプリケーションに接続します。

その他の情報については、次のWebサイトを参照してください。
開始する前に
このチュートリアルを正常に実行するには、次が必要です:
- コンテナ・レジストリ、Kubernetesおよびロード・バランサの場合:
- 有料Oracle Cloud Infrastructureアカウント。
- Oracle Cloud Infrastructureへのサインアップを参照してください。
- アプリケーションおよびDockerイメージを構築する場合:
- 次のいずれかのローカル環境:
- MacOSまたはLinuxマシン。
- LinuxをサポートするWindowsマシン。例:
- ローカル環境での次のアプリケーション:
- JDK 11、および.bashrcでのJAVA_HOMEの設定。
- Python 3.6.8以上、およびPython 3用pipインストーラ
- Kubernetesクライアント1.11.9以上
- Apache Maven 3.0以上
- Docker 19.0.3以上
- Git 1.8以上
- Node.js 10以上
- 次のいずれかのローカル環境:
OCI Free Tier Linuxコンピュート・インスタンスを使用してデプロイメントを管理する場合、次の各項では、必要なソフトウェアをインストールするための情報を提供します。
- Always Freeコンピュート・シェイプのLinux VMをOracle Cloud InfrastructureにインストールしますLinuxインスタンスに接続するには、
ssh
がサポートされているマシンが必要です。- Oracle Linux VMのインストール
- 2項および3項に従います。
- 有料アカウントを持っている場合は、2項で、オファリングに基づいてコンピュート・オプションを選択します。
- インスタンスに接続するには、4項のステップ1-5に従います。
- Apacheの手順はスキップします。
- Ubuntu VMのインストール
- Oracle Linux VMのインストール
システムにNode.jsをインストールします。
Node.jsおよびNPMをインストールするには、次のコマンドを実行します:
- Oracle Linux:
sudo yum update
Node.jsのYumリポジトリを設定します。次に、
nodejs
パッケージをインストールします。sudo yum install -y oracle-nodejs-release-el7 sudo yum install -y nodejs
- Ubuntu:
sudo apt update
nodejs
およびnpm
パッケージをインストールします。sudo apt install -y nodejs sudo apt install -y npm
- インストールを確認します。
node -v npm -v
Nodeアプリケーションのブラウザベースのテストを行う場合は、Linuxインスタンスでポート3000を使用可能にします。
- Oracle Linux
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload
- Ubuntu Linux
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 3000 -j ACCEPT sudo netfilter-persistent save
次のステップに従って、VCNのパブリック・サブネットを選択し、イングレス・ルールを追加します。
- ナビゲーション・メニューを開き、「ネットワーキング」、「Virtual Cloudネットワーク」の順にクリックします。
- コンピュート・インスタンスを使用して作成したVCNを選択します。
- 新しいVCNが表示され、<your-subnet-name>サブネット・リンクをクリックします。
パブリック・サブネット情報は、ページの下部にあるセキュリティ・リストとともに表示されます。VCNのデフォルト・セキュリティ・リストへのリンクが表示されます。
- 「デフォルト・セキュリティ・リスト」リンクをクリックします。
VCNのデフォルトのイングレス・ルールが表示されます。
- 「イングレス・ルールの追加」をクリックします。
「Add Ingress Rules」ダイアログが表示されます。
- イングレス・ルールに次の情報を入力します。
イングレス・ルールを次のように入力します:
- ステートレス:選択
- ソース・タイプ: CIDR
- ソースCIDR: 0.0.0.0/0
- IPプロトコル: TCP
- ソース・ポート範囲: (空白のまま)
- 宛先ポート範囲: 3000
- 説明: HTTP接続の許可
- 「イングレス・ルールの追加」をクリックします。
これで、HTTP接続が許可されます。VCNはNode Express用に構成されています。
インスタンスをインターネットから使用できるようにするイングレス・ルールが正常に作成されました。
- 現在のインストールを確認します。
python3 --version
- Python 3の場合は、次のコマンドを実行します:
- Oracle Linux:
sudo yum update
sudo yum install -y python3
- Ubuntu:
sudo apt update
sudo apt install -y python3
- Oracle Linux:
- Python3用のpipのインストールを確認します。
pip3 -V
Python3用のpipがインストールされている場合の出力例:
pip <version> from xxx/lib/python3.x/site-packages/pip (python 3.x)
- Python 3用のpipをインストールするには、次のコマンドを実行します:
- Oracle Linux:
sudo yum update
sudo yum install -y python3-pip
- Ubuntu:
sudo apt update
sudo apt install -y python3-pip
- Oracle Linux:
- Python 3用のpipのインストールを確認します。
pip3 -V
- 現在のインストールを確認します:
kubectl version --client
Kubernetesを使用している場合、バージョンは<major-version>.<minor-version>
となります。たとえば、バージョン1.20の場合、次のようになります:version.Info{Major:"1", Minor:"20"...
kubectl
クライアントをインストールするには、次のリンクを参照してください:- インストールを確認します。
kubectl version --client
- 現在のインストールを確認します:
docker -v
- Oracle Linux
Oracle LinuxにDockerをインストールするには、次のコマンドを実行します。
sudo yum install docker-engine
sudo systemctl start docker
sudo systemctl enable docker
ノート:最後のコマンドでは、再起動時にDockerを開始できます。
- Ubuntu Linux
Ubuntu LinuxにDockerをインストールするには、次のリンクを参照してください: Dockerの取得
- インストールを確認します。
docker -v
1. 準備
アプリケーションを作成およびデプロイするための環境を準備します。
- Oracle Cloud Infrastructure Consoleにログインします。
- ナビゲーション・メニューを開き、「ガバナンスと管理」をクリックします。「Governance」で、「Limits、 Quotas and Usage」をクリックします。
- リージョンのサービス制限を検索します:
- 次のオプションでフィルタします:
- サービス:リージョン
- スコープ:テナント
- リソース:サブスクライブ済リージョン数
- コンパートメント:
<tenancy-name>
(ルート)
- サービス制限を検索します:
- 制限名:
subscribed-region-count
- サービス制限: 最小2
- 制限名:
- 次のオプションでフィルタします:
- Find your available Compute core count for the VM.Standard.E3.Flex shape:
- 次のオプションでフィルタします:
- サービス:コンピュート
- スコープ:
<first-availability-domain>
。例:EMlr:US-ASHBURN-AD-1
- リソース: Standard.E3のコア。FlexおよびBM.Standard.E3.128インスタンス
- コンパートメント:
<tenancy-name>
(ルート)
- 使用可能なコア数を確認します:
- 制限名:
standard-e3-core-ad-count
- 使用可能: 最小1
- 制限名:
- スコープを繰り返します:
<second-availability-domain>
および<third-availability-domain>
。各リージョンには、このシェイプで使用可能なコアが少なくとも1つ必要です。
- 次のオプションでフィルタします:
- 使用可能な50 GBのブロック・ボリュームがあるかどうかを確認します:
- 次のオプションでフィルタします:
- サービス:ブロック・ボリューム
- スコープ:
<first-availability-domain>
。例:EMlr:US-ASHBURN-AD-1
- リソースボリューム・サイズ(GB)
- コンパートメント:
<tenancy-name>
(ルート)
- 使用可能なブロック・ボリューム・ストレージを確認します:
- 制限名:
total-storage-gb
- 使用可能: 最小50
- 制限名:
- スコープを繰り返します:
<second-availability-domain>
および<third-availability-domain>
。各リージョンでは、少なくとも50GBのブロック・ボリュームが使用可能である必要があります。
- 次のオプションでフィルタします:
- 使用可能なフレキシブル・ロード・バランサの数を確認します:
- 次のオプションでフィルタします:
- サービス: LbaaS
- スコープ:
<your-region>
。例:us-ashburn-1
- リソース:
<blank>
- コンパートメント:
<tenancy-name>
(ルート)
- 使用可能なフレキシブル・ロード・バランサの数を確認します:
- 制限名:
lb-flexible-count
- 使用可能: 最小1
- 制限名:
- 次のオプションでフィルタします:
このチュートリアルでは、3つのコンピュート・インスタンスをVM.Standard.E3で作成します。クラスタ・ノードのフレックス・シェイプ。別のシェイプを使用するには、そのコア数でフィルタします。たとえば、VM.Standard2.4の場合、Standard2ベースのVMおよびBMインスタンス用コアでフィルタし、数を取得します。
すべてのシェイプのリストは、VM標準シェイプを参照してください。
このチュートリアルでは、「クイック作成」ワークフローを使用して、柔軟なロード・バランサをホストするパブリック・リージョン・サブネットを持つクラスタを作成します。別のロード・バランサを使用するには、カスタム・ワークフローを使用して、使用する既存のネットワーク・リソースを明示的に指定できます(ロード・バランサを作成する既存のサブネットを含む)。
ロード・バランサに別の帯域幅を使用するには、その数(100Mbps帯域幅や400Mbps帯域幅など)でフィルタします。
-
ナビゲーション・メニューで、「プロファイル」メニュー
を選択し、表示されるオプションに応じて、「ユーザー設定」または「自分のプロファイル」を選択します。
- 「認証トークン」をクリックします。
- 「トークンの生成」をクリックします。
- 説明を入力します。
- 「トークンの生成」をクリックします。
- トークンをコピーして保存します。
- 「閉じる」をクリックします。
トークンは、作成後すぐに保存してください。後でアクセスすることはできません。
Pythonのvirtualenv
は、プロジェクトのすべての実行可能ファイルとライブラリを含むフォルダを作成します。
virtualenvwrapper
は、virtualenv
の拡張機能です。仮想環境での作業をより快適にするための一連のコマンドが用意されています。また、すべての仮想環境を1つの場所に配置します。virtualenvwrapper
は、環境名のタブ補完を提供します。
virtualenv
をインストールします。pip3 install --user virtualenv
virtualenvwrapper
をインストールします。pip3 install --user virtualenvwrapper
virtualenvwrapper.sh
スクリプトの場所を見つけます。grep -R virtualenvwrapper.sh
パスの例:- Linuxの例:
/home/ubuntu/.local/bin/virtualenvwrapper.sh
- MacOSの例:
/usr/local/bin/virtualenvwrapper.sh
- Linuxの例:
.bashrc
で仮想環境ラッパーを構成します。sudo vi .bashrc
次のテキストを追加します。
# set up Python env export WORKON_HOME=~/envs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 ' source <path-to-virtualenvwrapper.sh>
<path-to-virtualenvwrapper.sh>
をその値に置き換えます。環境内のPython3バイナリの場所に基づいて、
/usr/bin/python3
を正しい場所に更新します。ファイルを保存します。
- 現在のウィンドウでコマンドをアクティブ化します。
source ~/.bashrc
出力例:virtualenvwrapper.user_scripts creating /home/ubuntu/envs/premkproject virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postmkproject virtualenvwrapper.user_scripts creating /home/ubuntu/envs/initialize virtualenvwrapper.user_scripts creating /home/ubuntu/envs/premkvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postmkvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/prermvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postrmvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/predeactivate virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postdeactivate virtualenvwrapper.user_scripts creating /home/ubuntu/envs/preactivate virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postactivate
- 仮想環境を起動します。
workon cli-app
- 仮想環境の名前
cli-app
がコマンド・プロンプトの左側に表示されていることを確認します。例:
(cli-app) ubuntu@<ubuntu-instance-name>:~$
- OCI CLIをインストールします。
pip3 install oci-cli
- インストールをテストします:
oci --version
すべてが正しく設定されている場合は、バージョンが表示されます。
oci --help
- 仮想環境で次のコマンドを入力します:
oci setup config
- 必要な情報の収集の項の回答を入力します:
- 構成[$HOME/.oci/config]の場所:
<take-default>
- ユーザーOCID:
<user-ocid>
- テナントOCID:
<tenancy-ocid>
- リージョン(us-ashburn-1など):
<region-identifier>
- 構成[$HOME/.oci/config]の場所:
- 次の情報を入力して、OpenSSL API暗号化キーを設定します:
- 新しいAPI署名RSAキー・ペアを生成しますか[Y/n]: Y
- キー[$HOME/.oci]のディレクトリ:
<take-default>
- キー[oci_api_key]の名前
<take-default>
- 仮想環境を非アクティブ化します:
deactivate
環境の
(cli-app)
接頭辞は表示されなくなりました。
秘密キーは
oci_api_key.pem
で、公開キーはoci_api_key_public.pem
です。cli-app
環境をアクティブ化します:workon cli-app
- 公開キーを表示します。
cat $HOME/.oci/oci_api_key_public.pem
- 公開キーをコピーします。
- ユーザー・アカウントに公開キーを追加します:
- 「コンソール」に移動します。
- ナビゲーション・メニューで、「プロファイル」メニュー
を選択し、表示されるオプションに応じて「ユーザー設定」または「自分のプロファイル」を選択します。
- 「APIキー」をクリックします。
- 「APIキーの追加」をクリックします。
- 「公開キーの貼付け」をクリックします。
BEGIN PUBLIC KEY
およびEND PUBLIC KEY
の行を含む、前のステップの値を貼り付けます- 「追加」をクリックします。
- OCI CLIを使用する場合は常に、
workon cli-app
を使用してアクティブ化します - プロジェクト名を変更すると、
workon
によって現在の作業環境が非アクティブ化されます。このようにして、環境をすばやく切り替えることができます。
2. クラスタの設定
Kubernetesクラスタの管理オプションをインストールおよび構成します。後で、アプリケーションをこのクラスタにデプロイします。
ユーザー名が管理者グループ内にある場合は、この項をスキップしてください。それ以外の場合は、管理者に依頼してテナンシに次のポリシーを追加します:
allow group <the-group-your-username-belongs> to manage compartments in tenancy
この権限を持つユーザーは、チュートリアルのすべてのリソースのコンパートメントを作成できます。
- ナビゲーション・メニューで、「プロファイル」メニュー
を選択し、表示されるオプションに応じて「ユーザー設定」または「自分のプロファイル」を選択します。
- 左ペインで、「グループ」をクリックします。
- メモ帳で、ユーザー名が属するグループ名をコピーします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
- 「コンパートメント」ドロップダウンからコンパートメントを選択します。
- ポリシーの作成をクリックします。
- 次の情報を入力します:
- 名前:
manage-compartments
- 説明:
Allow the group <the-group-your-username-belongs> to list, create, update, delete and recover compartments in the tenancy.
- コンパートメント:
<your-tenancy>(root)
- 名前:
- 「Policy Builder」で、「Show manual editor」をクリックします。
- 次のポリシーを貼り付けます:
allow group <the-group-your-username-belongs> to manage compartments in tenancy
- 「作成」をクリックします。
参照: IAMのVerbとResource-Typeの組合せのcompartments
リソース・タイプ
このチュートリアルで作成するリソースのコンパートメントを作成します。
- Oracle Cloud Infrastructure Consoleにサインインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「コンパートメント」をクリックします。
- 「コンパートメントの作成」をクリックします。
- 次の情報を入力します:
- 名前:
<your-compartment-name>
- 説明:
Compartment for <your-description>.
- 親コンパートメント:
<your-tenancy>(root)
- 名前:
- 「コンパートメントの作成」をクリックします。
参照: コンパートメントの作成
ユーザー名が管理者グループ内にある場合は、この項をスキップしてください。それ以外の場合は、管理者に依頼してテナンシに次のポリシーを追加します:
allow group <the-group-your-username-belongs> to manage all-resources in compartment <your-compartment-name>
この権限を使用すると、コンパートメント内のすべてのリソースを管理できるため、基本的にそのコンパートメントでの管理権限が付与されます。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
- 「コンパートメント」ドロップダウンからコンパートメントを選択します。
- ポリシーの作成をクリックします。
- 次の情報を入力します:
- 名前:
manage-<your-compartment-name>-resources
- 説明:
Allow users to list, create, update, and delete resources in <your-compartment-name>.
- コンパートメント:
<your-tenancy>(root)
- 名前:
- 「ポリシー・ビルダー」で、次の選択肢を選択します:
- ポリシーのユースケース:
Compartment Management
- 共通ポリシー・テンプレート:
Let compartment admins manage the compartment
- グループ:
<the-group-your-username-belongs>
- 場所:
<your-tenancy>(root)
- ポリシーのユースケース:
- 「作成」をクリックします。
参照: 共通ポリシー
「クイック作成」ワークフローを使用して、デフォルト設定および新しいネットワーク・リソースでクラスタを作成します。
Kubernetesクラスタを作成したら、クラスタにアクセスするようにローカル・システムを設定します。
クラスタ・アクセスが設定されると、アプリケーションをデプロイする準備が整います。
3. ローカル・アプリケーションの構築
ローカル・アプリケーションと、そのアプリケーションのDockerイメージを構築します。
Node.jsアプリケーションを作成します。
Node.jsアプリケーションが正常に設定されました。
Node.jsアプリケーションを実行します。
Node.jsおよびExpressを使用してHello Worldアプリケーションが正常に作成されました。
参照:
- この例の詳細については、Expressの開始を参照してください。
次に、Node.js ExpressアプリケーションのDockerイメージを作成します。
4. Dockerイメージのデプロイ
Node.js ExpressイメージをOCIコンテナ・レジストリにプッシュします。その後、イメージを使用してアプリケーションをデプロイします。
ローカルDockerイメージを作成したら、イメージをコンテナ・レジストリにプッシュします。
次のステップに従います。
pushコマンドが完了したら、コンテナ・レジストリでイメージを探します。
次の手順
Hello Worldアプリケーションが正常に作成され、Kubernetesクラスタにデプロイされ、Node Expressフレームワークを使用してインターネット上でアクセスできるようになりました。
次のサイトをチェックして、Oracle製品を使用した開発に関する詳細情報を確認してください: