InitScript 설정

Prev Next

VPC 환경에서 이용 가능합니다.

네이버 클라우드 플랫폼의 Ncloud Kubernetes Service는 InitScript를 통해 미리 작성해 둔 스크립트를 실행하여 노드의 초기 환경 관리를 진행할 수 있습니다. InitScript는 DaemonSet으로 생성되어 각 노드에 스케줄링됩니다.

주의
  • InitScript는 CRI(Container Runtime Interface), Kubelet의 설정에는 관여하지 않아야 합니다.
  • InitScript는 Kubernetes에서 동작하므로 서버 생성 스크립트와 유사하지만 다른 방식입니다.
  • 스크립트 내용에 보안 침해가 있을 수 있는 내용은 포함하지 않아야 합니다.

DaemonSet의 특성에 관한 상세 정보는 DaemonSet 공식 문서에서 확인할 수 있습니다.

아래 리전에 해당하는 명령어를 실행하여 InitScript를 생성할 수 있습니다. 명령어 실행 시 kube-system 네임스페이스에 Daemonset으로 Init-Script가 생성됩니다.

  • 수도권
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/gov/kr.yml
Shell
  • 남부권
$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/examples/initscript/gov/krs.yml
Shell

아래 명령어를 실행하여 클러스터 내에 동작 중인 InitScript의 생성 및 상태를 확인할 수 있습니다. InitScript는 Daemonset으로 동작하여 모든 노드에 스케줄링 됩니다. 만일 노드가 추가될 경우 신규 노드에도 동일하게 생성되므로 별도의 생성은 진행하지 않아도 됩니다.

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

아래 명령어를 실행하여 InitScript 생성 확인 및 초기 동작을 확인할 수 있습니다.

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

아래 명령어를 실행하여 클러스터 내에 생성된 InitScript를 삭제할 수 있습니다.

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

InitScript를 통해 특정 스크립트를 실행하기 위해서는 InitScript Daemonset의 환경변수 값으로 BASE64로 인코딩 된 스크립트 내용을 기재하여야 합니다.

미리 생성해 둔 스크립트 파일을 이용하거나 생성한 InitScript Daemonset을 수정하여 InitScript에 스크립트를 설정할 수 있습니다.

아래 명령어를 실행하여 미리 생성해 둔 스크립트 파일을 InitScript에 설정할 수 있습니다.

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

아래 명령어를 실행하여 InitScript의 내용을 직접 수정하여 설정할 수 있습니다.

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

아래 명령어를 실행하여 InitScript의 Pod 로그를 조회할 수 있으며, Pod 로그를 통해 스크립트 실행 결과를 확인할 수 있습니다.

  • 전체 InitScript Pod의 로그를 조회하고 싶은 경우
$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system -l name=init-script
Shell
  • 특정 InitScript Pod의 로그를 조회하고 싶은 경우
$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system [init-script-pod-name]
Shell

InitScript는 설정 명령어와 동일한 명령어를 통해 수정이 가능합니다. 수정 이후에는 신규 InitScript Pod가 생성됩니다. 스크립트의 내용이 변경되지 않은 경우 Pod가 재기동 되어도 스크립트는 실행되지 않습니다.

아래 과정은 InitScript를 통해 각 노드의 패스워드를 설정하는 예제입니다.

(1) 스크립트 확인

InitScript에 등록할 스크립트를 확인합니다.

#!/bin/bash

# change-passwd.sh

echo "Password Init" 
echo -e '[변경 패스워드]' | passwd root
Shell

(2) 실행 스크립트 설정

스크립트 파일을 인코딩하여 InitScript의 환경변수에 등록합니다.

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

(3) Pod 로그를 통한 동작 확인

아래 명령어를 통해 스크립트 동작 로그를 확인합니다.

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

동작이 정상적으로 수행됐을 경우 아래와 같은 결과가 표시됩니다.

$ 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!
Shell