InitScript の設定
    • 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!
    

    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.