- Print
- PDF
Setting InitScript
- Print
- PDF
Available in VPC
With NAVER Cloud Platform's Ncloud Kubernetes Service, you can manage initial node environments by running a script that has been written in advance with InitScript
. InitScript
is created with DaemonSet and scheduled on each node.
- Since init script works with DaemonSet, it shouldn't interfere with Container Runtime Interface (CRI) or Kubelet settings.
- Init script works in Kubernetes, which is similar to a server creation script, but different.
- The script content must not include content that may create security breaches.
For more information on the characteristics of DaemonSet, see DaemonSet official document.
Create and delete init script
Create init script
You can run the command corresponding to the regions below to create an init script. When you run the command, the init script is created with DaemonSet on the kube-system namespace.
- Korea
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/pub/kr.yml
- Singapore
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/pub/sgn.yml
- Japan
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/pub/jpn.yml
Confirm init script creation
You can run the command below to check the creation and status of the working init script in the cluster. Init script works with DaemonSet and is scheduled on all nodes. It will be created on a new node in case new nodes are added, so creating one separately is not necessary.
$ kubectl --kubeconfig=$KUBE_CONFIG get daemonset init-script -n kube-system
You can run the command below to confirm if the init script has been created and its early operations.
$ kubectl --kubeconfig=$KUBE_CONFIG logs -n kube-system -l name=init-script
Delete init script
Run the command below to delete the init script created in the cluster.
$ kubectl --kubeconfig=$KUBE_CONFIG delete daemonset init-script -n kube-system
Set init script and check operations
In order to run a specific script through init script, the script content encoded in Base64 should be put in the environment variable value of the init script DaemonSet.
Set init script
You can set a script as init script by using a script file created in advance, or by editing the init script Daemonset created.
You can run the command below to set a script that has been created in advance as init script.
$ kubectl --kubeconfig=$KUBE_CONFIG set env daemonset/init-script -n kube-system STARTUP_SCRIPT=$(base64 {init-script-filename} -w 0)
You can run the command below to set the init script by editing its content yourself.
$ kubectl --kubeconfig=$KUBE_CONFIG edit daemonset/init-script -n kube-system
Confirm init script operation
You can run the command below to view the init script's pod log. You can also see the script execution result through the pod log.
- If you want to view logs for the entire init script pod
$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system -l name=init-script
- If you want to view logs for a specific init script pod
$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system [init-script-pod-name]
Init script can be edited with the same command as one used to set it. After editing it, a new init script pod will be created. If the script content hasn't changed, the script will not run even if the pod restarts.
Init script example
The following is an example of setting a password for each node through init script.
(1) Check script
Check the script you are going to register as an init script.
#!/bin/bash
# change-passwd.sh
echo "Password Init"
echo -e '[new password]' | passwd root
(2) Set script to run
Encode the script file and add it to the init script's environment variable.
$ kubectl --kubeconfig=$KUBE_CONFIG set env daemonset/init-script -n kube-system STARTUP_SCRIPT=$(base64 change-passwd.sh -w 0)
(3) Confirm operation through pod log
Check the script operation log through the command below.
$ kubectl --kubeconfig=$KUBE_CONFIG get logs -n kube-system [init-script-pod-name]
The result will be shown as below if the operation was successful.
$ 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!