InitScript 설정
    • PDF

    InitScript 설정

    • PDF

    Article Summary

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

    네이버 클라우드 플랫폼의 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
    
    1. 실행 스크립트 설정

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

    $ kubectl --kubeconfig=$KUBE_CONFIG set env daemonset/init-script -n kube-system STARTUP_SCRIPT=$(base64 change-passwd.sh -w 0)
    
    1. 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.