InitScript の設定

Prev Next

VPC環境で利用できます。

NAVERクラウドプラットフォームの Ncloud Kubernetes Serviceは、InitScriptを利用して予め作成しておいたスクリプトを実行し、ノードの初期環境の管理を行えます。InitScriptは DaemonSetで作成され、各ノードにスケジューリングされます。

注意
  • InitScriptは DaemonSetにより動作するので、CRI(Container Runtime Interface)や Kubeletの設定に関与してはいけません。
  • InitScriptは Kubernetesで動作するという点でサーバ作成スクリプトに似ていますが、違う方式です。
  • スクリプトの内容にセキュリティ侵害が含まれる可能性がある内容は含めないでください。

DaemonSetの特性に関する詳細は、DaemonSetの公式文書で確認できます。

InitScriptの作成と削除

InitScriptの作成

以下のリージョンに当てはまるコマンドを実行し、InitScriptを作成できます。コマンドを実行すると、kube-systemのネームスペースに Daemonsetで Init-Scriptが作成されます。

  • 韓国
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/pub/kr.yml
  • シンガポール
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/pub/sgn.yml
  • 日本
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/pub/jpn.yml

InitScriptの作成確認

以下のコマンドを実行すると、クラスタ内で動作中の InitScriptの作成と状態を確認できます。InitScriptは、Daemonsetにより動作し、すべてのノードにスケジューリングされます。ノードが追加された場合、新規ノードにも同様に作成されるため、別途作成する必要はありません。

$ kubectl --kubeconfig=$KUBE_CONFIG get daemonset init-script -n kube-system

以下のコマンドを実行すると、InitScriptの作成と初期動作を確認できます。

$ kubectl --kubeconfig=$KUBE_CONFIG logs  -n kube-system -l name=init-script

InitScriptの削除

以下のコマンドを実行すると、クラスタ内に作成された InitScriptを削除できます。

$ kubectl --kubeconfig=$KUBE_CONFIG delete daemonset init-script -n kube-system

InitScriptの設定と動作の確認

InitScriptを利用して特定のスクリプトを実行するには、InitScript Daemonsetの環境変数値として BASE64でエンコードされたスクリプトの内容を記載する必要があります。

InitScriptの設定

予め作成しておいたスクリプトファイルを利用するか、作成した InitScript Daemonsetを修正して InitScriptにスクリプトを設定できます。

以下のコマンドを実行すると、予め作成しておいたスクリプトファイルを InitScriptに設定できます。

$ kubectl --kubeconfig=$KUBE_CONFIG set env daemonset/init-script -n kube-system STARTUP_SCRIPT=$(base64 {init-script-filename} -w 0)

以下のコマンドを実行すると、InitScriptの内容を直接修正して設定できます。

$ kubectl --kubeconfig=$KUBE_CONFIG edit daemonset/init-script -n kube-system

InitScript動作の確認

以下のコマンドを実行して InitScriptの Podログを照会できます。また、Podログを利用してスクリプトの実行結果を確認できます。

  • 全体 InitScript Podのログを照会する場合
$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system -l name=init-script
  • 特定 InitScript Podのログを照会する場合
$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system [init-script-pod-name]

InitScriptは、設定コマンドと同じコマンドを利用して修正できます。修正後は、新規 InitScript Podが作成されます。スクリプトの内容が変更されなかった場合、Podが再起動してもスクリプトは実行されません。

InitScript使用のユースケース

以下の手順は、InitScriptを利用して各ノードのパスワードを設定するユースケースです。

(1) スクリプトの確認

InitScriptに登録するスクリプトを確認します。

#!/bin/bash

# change-passwd.sh

echo "Password Init" 
echo -e '[変更後のパスワード]' | passwd root

(2) 実行スクリプトの設定

スクリプトファイルをエンコードして InitScriptの環境変数に登録します。

$ kubectl --kubeconfig=$KUBE_CONFIG set env daemonset/init-script -n kube-system STARTUP_SCRIPT=$(base64 change-passwd.sh -w 0)

(3) Podログを利用した動作の確認

以下のコマンドを利用してスクリプトの動作ログを確認します。

$ kubectl --kubeconfig=$KUBE_CONFIG get logs -n kube-system [init-script-pod-name]

動作が正常に実行されると、以下のような結果が表示されます。

$ kubectl --kubeconfig=$KUBE_CONFIG logs -n kube-system init-script-mzwl7
Password Init
New password: Retype new password: passwd: password updated successfully
!!! startup-script succeeded!