실행 책
실행 책은 특정 프로세스를 수행하는 방법을 설명하는 문서화된 절차의 모음입니다.
시작, 중지, 디버깅 또는 특정 시스템 문제 해결이 될 수 있습니다.
Jupyter Notebooks와 Rubix library를 사용하여, 사용자는 자신의 실행 가능 책을 작성하기 시작할 수 있습니다.
역사적으로 실행 책은 조건이나 시스템에 따라 결정 트리 또는 세부 단계별 가이드 형태를 취했습니다.
현대 구현에서는 잘 정의된 프로세스와 함께, 운영자가 특정 환경에 대해 미리 작성된 코드 블록이나 데이터베이스 쿼리를 실행할 수 있는 “실행 가능 책”의 개념을 도입했습니다.
실행 가능 책
GitLab Kubernetes 통합을 통해 제공되는 JupyterHub 앱은
Nurtch의 Rubix 라이브러리와 함께 제공되어 DevOps 실행 책을 쉽게 생성할 수 있는 방법을 제공합니다.
샘플 실행 책이 제공되어 일반적인 작업을 보여줍니다.
Rubix는 일반적인 Kubernetes 및 AWS 워크플로를 생성하는 것을 간단하게 만들지만, Rubix 없이도 수동으로 생성할 수 있습니다.
이 비디오를 시청하여 GitLab에서 이 작업이 어떻게 수행되는지 살펴보세요!
요구 사항
실행 가능 책을 만들려면 다음이 필요합니다:
-
Kubernetes - 나머지 애플리케이션을 배포하기 위해 Kubernetes 클러스터가 필요합니다.
시작하는 가장 간단한 방법은 GitLab agent를 사용하여 클러스터에 연결하는 것입니다. -
Ingress - Ingress는 로드 밸런싱, SSL 종료 및 이름 기반 가상 호스팅을 제공할 수 있습니다.
이는 애플리케이션을 위한 웹 프록시로 작용합니다. -
JupyterHub - JupyterHub는 팀 간 노트북 관리를 위한 다중 사용자 서비스입니다.
Jupyter Notebooks는 데이터 분석, 시각화 및 기계학습에 사용되는 웹 기반 대화형 프로그래밍 환경을 제공합니다.
Nurtch
Nurtch는 Rubix library 뒤에 있는 회사입니다.
Rubix는 Jupyter Notebooks 내에서 일반적인 DevOps 작업을 수행하기 쉽게 만들어주는 오픈 소스 Python 라이브러리입니다.
Cloudwatch 메트릭을 플로팅하고 ECS/Kubernetes 앱을 롤링하는 것과 같은 작업이 몇 줄의 코드로 단순화됩니다.
자세한 내용은 Nurtch Documentation를 참조하세요.
GitLab로 실행 가능 책 구성
위에서 설명한 구성 요소와 미리 로드된 데모 실행 책을 사용하여 GitLab에서 실행 가능 책을 구성하는 단계별 가이드를 따르세요.
-
Helm으로 JupyterHub 설치 시 다음 값을 사용하세요:
#----------------------------------------------------------------------------- # hub.config.GitLabOAuthenticator 섹션은 사용자 지정해야 합니다! #----------------------------------------------------------------------------- hub: config: GitLabOAuthenticator: # 특정 프로젝트 또는 그룹의 구성원 또는 특정 사용자로 액세스를 제한합니다: # allowedGitlabGroups: [ "my-group-1", "my-group-2" ] # allowedProjectIds: [ 12345, 6789 ] # allowed_users: ["user-1", "user-2"] client_id: <Your OAuth Application ID> client_secret: <Your OAuth Application ID> enable_auth_state: true gitlab_url: https://gitlab.example.com oauth_callback_url: http://<Jupyter Hostname>/hub/oauth_callback scope: - read_user - read_api - openid - profile - email JupyterHub: authenticator_class: gitlab extraConfig: gitlab-config: | c.KubeSpawner.cmd = ['jupyter-labhub'] c.GitLabOAuthenticator.scope = ['api read_repository write_repository'] async def add_auth_env(spawner): ''' JupyterHub의 리포지토리 통합을 활성화하기 위해 단일 사용자 이미지에서 사용자 아이디, 로그인 및 액세스 토큰을 설정합니다. 참조: 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_EMAIL'] = auth_state['gitlab_user']['email'] spawner.environment['GITLAB_USER_ID'] = str(auth_state['gitlab_user']['id']) spawner.environment['GITLAB_USER_LOGIN'] = auth_state['gitlab_user']['username'] spawner.environment['GITLAB_USER_NAME'] = auth_state['gitlab_user']['name'] c.KubeSpawner.pre_spawn_hook = add_auth_env 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을 엽니다. Sign in with GitLab 버튼을 선택하여 JupyterHub에 로그인하고 서버를 시작합니다.
인증은 OAuth2를 사용하는 GitLab 인스턴스의 모든 사용자에게 활성화되어 있습니다. 이 버튼은 GitLab에 대한 권한 부여를 요청하는 페이지로 리디렉션합니다. - Authorize를 선택하면 GitLab이 JupyterHub 애플리케이션으로 리디렉션됩니다.
- Start My Server를 선택하여 몇 초 내에 서버를 시작합니다.
-
실행 책의 GitLab 프로젝트에 대한 액세스를 구성하려면, 데모 실행 책의 Setup 섹션에 GitLab Access Token과 프로젝트 ID를 입력해야 합니다:
-
왼쪽 패널에 있는 DevOps-Runbook-Demo 폴더를 선택합니다.
-
Nurtch-DevOps-Demo.ipynb
실행 책을 선택합니다.Jupyter는 화면 오른쪽에 실행 책의 내용을 표시합니다.
Setup 섹션에PRIVATE_TOKEN
과PROJECT_ID
가 표시됩니다. 다음과 같이 값을 입력하세요. 단일 따옴표를 유지합니다:PRIVATE_TOKEN = '<your_access_token>' PROJECT_ID = '1234567'
-
이 섹션의 마지막 줄에 있는
VARIABLE_NAME
을 액세스 토큰에 사용하는 변수의 이름과 일치하도록 업데이트합니다. 이번 예제에서는 변수 이름이PRIVATE_TOKEN
입니다.VARIABLE_VALUE = project.variables.get('PRIVATE_TOKEN').value
-
-
실행 책의 작동을 구성하려면, 변수를 생성하고 구성합니다.
이번 예제에서는 샘플 실행 책의 Run SQL queries in Notebook 섹션을 사용하여 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 Documentation를 방문하세요.