- 印刷する
- PDF
InitScript の設定
- 印刷する
- PDF
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!