런북
런북은 특정 프로세스를 시작, 중지, 디버깅 또는 문제 해결하는 방법을 설명하는 문서화된 프로시저의 집합입니다.
Jupyter Notebooks 및 Rubix library를 사용하면 사용자가 자체 실행 가능한 런북을 작성할 수 있습니다.
과거에는 런북이 조건이나 시스템에 따라 의사 결정 트리나 자세한 단계별 안내 형태로 제공되었습니다.
현대적인 구현은 “실행 가능한 런북”이라는 개념을 소개했습니다. 여기서, 명확히 정의된 프로세스와 함께, 운영자는 사전에 작성된 코드 블록이나 주어진 환경에서 데이터베이스 쿼리를 실행할 수 있습니다.
실행 가능한 런북
GitLab Kubernetes 통합을 통해 제공되는 JupyterHub 앱은 이제 Nurtch의 Rubix 라이브러리가 포함되어 있어 DevOps 런북을 간단히 생성할 수 있습니다. 일반적인 작업을 보여주는 샘플 런북이 제공되며, Rubix를 사용하여 일반적인 Kubernetes 및 AWS 워크플로를 쉽게 생성할 수는 물론 Rubix 없이 매뉴얼으로 생성할 수도 있습니다.
이 비디오를 시청하여 GitLab에서의 이 과정을 요약해 보세요!
요구 사항
실행 가능한 런북을 만들려면 다음이 필요합니다:
- Kubernetes - 나머지 애플리케이션을 배포하기 위해 Kubernetes 클러스터가 필요합니다. 시작하려면 GitLab 에이전트를 사용하여 클러스터에 연결하는 것이 가장 간단합니다.
- Ingress - 인그레스는 부하 분산, SSL 종료 및 이름 기반의 가상 호스팅을 제공할 수 있습니다. 애플리케이션에 대한 웹 프록시로 작동합니다.
- JupyterHub - JupyterHub는 팀 전체에서 노트북을 관리하는 다중 사용자 서비스입니다. Jupyter 노트북은 데이터 분석, 시각화 및 머신 러닝에 사용되는 웹 기반 대화형 프로그래밍 환경을 제공합니다.
Nurtch
Nurtch는 Rubix library 뒤의 회사입니다. Rubix는 Jupyter Notebook 내에서 일반적인 DevOps 작업을 수행하기 쉽게 만든 오픈 소스 Python 라이브러리입니다. Cloudwatch 메트릭 플로팅 및 ECS/Kubernetes 앱 롤링과 같은 작업들이 몇 줄의 코드로 단순화됩니다. 자세한 내용은 Nurtch 문서를 참조하세요.
GitLab에서 실행 가능한 런북 구성
위에서 설명한 컴포넌트 및 미리 로드된 데모 런북을 사용하여 GitLab에서 실행 가능한 런북을 구성하는 단계별 안내서를 따르세요.
- JupyterHub용 OAuth 애플리케이션 생성.
-
Helm으로 JupyterHub 설치 시, 다음 값을 사용하세요:
#----------------------------------------------------------------------------- # gitlab 및 ingress 섹션을 사용자 정의해야 합니다! #----------------------------------------------------------------------------- gitlab: clientId: <Your OAuth Application ID> clientSecret: <Your OAuth Application Secret> callbackUrl: http://<Jupyter Hostname>/hub/oauth_callback, # 특정 프로젝트나 그룹의 멤버에게만 액세스 권한 부여: # allowedGitlabGroups: [ "my-group-1", "my-group-2" ] # allowedProjectIds: [ 12345, 6789 ] # OAuth가 작동하려면 ingress가 필요합니다. ingress: enabled: true host: <JupyterHostname> # tls: # - hosts: # - <JupyterHostanme> # secretName: jupyter-cert # annotations: # kubernetes.io/ingress.class: "nginx" # kubernetes.io/tls-acme: "true" #----------------------------------------------------------------------------- # 이 이후로는 수정이 필요하지 않습니다. #----------------------------------------------------------------------------- hub: extraEnv: JUPYTER_ENABLE_LAB: 1 extraConfig: | c.KubeSpawner.cmd = ['jupyter-labhub'] c.GitLabOAuthenticator.scope = ['api read_repository write_repository'] async def add_auth_env(spawner): ''' We set user's id, login and access token on single user image to enable repository integration for JupyterHub. See: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/47138#note_154294790 ''' auth_state = await spawner.user.get_auth_state() if not auth_state: spawner.log.warning("No auth state for %s", spawner.user) return spawner.environment['GITLAB_ACCESS_TOKEN'] = auth_state['access_token'] spawner.environment['GITLAB_USER_LOGIN'] = auth_state['gitlab_user']['username'] spawner.environment['GITLAB_USER_ID'] = str(auth_state['gitlab_user']['id']) spawner.environment['GITLAB_USER_EMAIL'] = auth_state['gitlab_user']['email'] spawner.environment['GITLAB_USER_NAME'] = auth_state['gitlab_user']['name'] c.KubeSpawner.pre_spawn_hook = add_auth_env auth: type: gitlab state: enabled: true singleuser: defaultUrl: "/lab" image: name: registry.gitlab.com/gitlab-org/jupyterhub-user-image tag: latest lifecycleHooks: postStart: exec: command: - "sh" - "-c" - > git clone https://gitlab.com/gitlab-org/nurtch-demo.git DevOps-Runbook-Demo || true; echo "https://oauth2:${GITLAB_ACCESS_TOKEN}@${GITLAB_HOST}" > ~/.git-credentials; git config --global credential.helper store; git config --global user.email "${GITLAB_USER_EMAIL}"; git config --global user.name "${GITLAB_USER_NAME}"; jupyter serverextension enable --py jupyterlab_git proxy: service: type: ClusterIP
-
JupyterHub를 성공적으로 설치한 후 브라우저에서 Jupyter Hostname을 엽니다. GitLab으로 로그인 버튼을 선택하여 JupyterHub에 로그인하여 서버를 시작하세요. OAuth2를 사용하여 GitLab 인스턴스의 모든 사용자에 대한 인증이 활성화됩니다. 이 버튼을 클릭하면 GitLab에서 JupyterHub이 귀하의 GitLab 계정을 사용할 수 있는 권한을 요청하는 페이지로 리디렉션됩니다.
- 승인을 선택하고, GitLab이 귀하를 JupyterHub 애플리케이션으로 리디렉션합니다.
- 내 서버 시작을 선택하여 몇 초 후에 서버를 시작합니다.
-
런북의 액세스를 구성하려면 귀하의 GitLab 액세스 토큰 및 프로젝트 ID를 설정 섹션에 입력해야 합니다:
-
왼쪽 패널에서 DevOps-Runbook-Demo 폴더를 선택하세요.
-
Nurtch-DevOps-Demo.ipynb
런북을 선택하세요.Jupyter는 오른쪽에 런북 내용을 표시합니다. 설정 섹션에 귀하의
PRIVATE_TOKEN
및 귀하의PROJECT_ID
가 표시됩니다. 다음과 같이 이 값을 입력하세요. 단일 따옴표를 유지해야 합니다:PRIVATE_TOKEN = '<귀하의 액세스 토큰>' PROJECT_ID = '1234567'
-
이 섹션의 마지막 줄에 있는
VARIABLE_NAME
을 귀하의 액세스 토큰에 사용하는 변수 이름과 일치하도록 업데이트하세요. 이 예에서는 변수 이름이PRIVATE_TOKEN
입니다.VARIABLE_VALUE = project.variables.get('PRIVATE_TOKEN').value
-
-
런북의 작동을 구성하려면 변수를 만들고 구성하세요. 여기 예시로, 예제 런북의 노트북에서 SQL 쿼리 실행 섹션을 사용하여 PostgreSQL 데이터베이스를 쿼리하는 데 필요한 변수를 정의하는 다음 코드 블록의 첫 네 줄입니다:
%env DB_USER={project.variables.get('DB_USER').value} %env DB_PASSWORD={project.variables.get('DB_PASSWORD').value} %env DB_ENDPOINT={project.variables.get('DB_ENDPOINT').value} %env DB_NAME={project.variables.get('DB_NAME').value}
쉘 스크립트 실행이나 Kubernetes 클러스터 상호 작용과 같은 다른 작업도 시도할 수 있습니다. 자세한 내용은 Nurtch 문서를 참조하세요.