본문 바로가기
AI 빅데이터/Google Cloud Platform

[GCP] GitLab으로 Jupyter Hub 연결해서 사용하기

by 마고커 2020. 7. 29.


지난 포스팅에서 Kubernetes Cluster안에 Jupyter Hub를 설치하고 GitHub Login을 사용하는 것까지 해 보았다.

 

 

 

[GCP] GKE에 Jupyter Notebook 운영하고 GitHub로 사용자 관리

Jupyter Notebook은 로컬 환경이나 클라우드 환경에서 VM에 설치하여 많이 이용된다. 기업차원에서 이용한다면 매 사용자마다 노트북을 설치하는 것보다 쿠버네티스 환경에 Jupyter Notebook을 설치하고

magoker.tistory.com

그런데 이렇게 했을 때 문제가 GitHub에 올려 놓은 private git들을 Jupyter Hub에서 가져가려면 ssh 이용 설정을 해야한다는 것인데, 좀 귀찮은 작업이 된다. GitHub와 유사한 GitLab은 Local로 설치할 수도 있고, K8S 클러스터 연동을 UI로 제공하고 있으며, Private Git까지 Jupyter Hub에서 쉽게 사용할 수 있도록 해 준다.

 

1) Kubernetes Cluster 연동

 

 <프로젝트 선택> -> Operations -> Kubernetes 를 선택한 후 Add Cluster를 설치하여 만들어 놓은 EKS나 GKE를 선택한다. cluster-name은 만들어 놓은 클러스터 이름을 입력한다. 

 

 

추가로 API URL, CA Certificate, Service Token이 필요한데 아래의 절차를 따르면 된다.

 

// API URL 가져오기
$ kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'
https://34.64.126.180

// Secret List 가져오기
$ kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-tlwl4   kubernetes.io/service-account-token   3      2d1h

// 위에 default-token으로 시작하는 Name을 아래 명령어에 넣어주어 CA Cert를 가져옴
$ kubectl get secret <Token Name> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
-----BEGIN CERTIFICATE-----
MIIDDDCCAfSgAwIBAgIRANl4sh2kvOwFGJYRZ5G3IzUwDQYJKoZIhvcNAQELBQAw
LzEtMCsGA1UEAxMkMjM1OGMxMTEtY2M5OC00ZmU3LWE0NjAtM2IwMTU5MWVhMWYz
MB4XDTIwMDcyNzA1NDc0M1oXDTI1MDcyNjA2NDc0M1owLzEtMCsGA1UEAxMkMjM1
OGMxMTEtY2M5OC00ZmU3LWE0NjAtM2IwMTU5MWVhMWYzMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAr0rznunqurZ1GkeelCSie+ZLa0ZBJsLK1qEWZR5M
x8AgqcVzBHAcEbwgOLmKytmPxwZoWHuiwttLLqdUakiPPatJdKsgn+MWxsYIcAgp
WRIbrwgB4lW3RW60JTMNnGZ7NZeQLb62dnBLZ/98oENCLGZ76USARanDIwlAvcbM
m9V3sPq0fF6s2Vv8I+nXvcTEOU/l5MVHbuIv9RZj27Rs+4lqTO00/Tp6eurXAoGE
IBh0JAzV9vrrmjjgifEpkw+T4coa5rjP86e90sUd6c31jRhY4VJrNKEPiHpRxLG+
tPV7/gmKowFrzLbd+k8q3Bkci9IRvsEbr7kv9z+TQVOl1QIDAQABoyMwITAOBgNV
HQ8BAf8EBAMCAgQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEA
m0DJkje+ka3YZlhFWxAc39EzENUb8VEDhSm0HOd52XvxHDvSeM5Gxjksbl7pE1rz
N3yiBY/55N7YcM84hLjqwjuqCJdmylQMcMBWXqAHYcGBbA6+BKunBxJQT6H9DnEy
PdyeaJT8kKFcT6VWWCxMlhi+zPOERGD+b+4j/ASS5WDwFpniglFPCalvCpKkKrEI
2y5PE3LCshcDUIH6azzzc20VrKn+R2ed36msMQzNFKjkRVplzlUINc2xRsR0r0Hh
MDyjEF041ZuQ8k5lKUzHH4klGo5pxgBQ8X1cBUImmo1jLxOd/14aOwZkE+kMSEao
YnmE5lP4mmZh/qyoryuhEw==
-----END CERTIFICATE-----

// 아래의 내용으로 gitlab-admin-service-account.yaml 파일을 만든다.
apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: gitlab-admin
    namespace: kube-system
    
// kubectl로 admin 설정을 반영
$kubectl apply -f gitlab-admin-service-account.yaml

// 아래의 명령으로 token을 리턴 받음
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
Name:         gitlab-admin-token-jqb6m
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: gitlab-admin
              kubernetes.io/service-account.uid: c4f3d3c5-d0a8-11ea-9f51-42010ab2002a

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1119 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJnaXRsYWItYWRtaW4tdG9rZW4tanFiNm0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZ2l0bGFiLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzRmM2QzYzUtZDBhOC0xMWVhLTlmNTEtNDIwMTBhYjIwMDJhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmdpdGxhYi1hZG1pbiJ9.WlP7Q5AK_pLyPNcdGZkXWbsJEs83CnxrhA34ELZnl1tNnc0kNcYBEl3Ca5Xk4ALV9BrkyAKbWO89uCC_IRs3yV8zHxgr8TxEoA1al50KDlc7m86_em5_AbAA1KUqScOPSjCVmrl8ux-GFld1OUDow70OFrLUxffJpJ59ZdlGWkQInraiKLNmSrbliUz5RPL8egsOJFc2xrpHRgitqBNxuTYlZkuhBMeuMWmy-9FiNwyCtn9uYS2GrUfZIKhVkvu1J5kCGSuLHBYMNuuqO0KRDWhTaRIFN3JXDaDfGvsMeOpsb4zo_irtY9A6aVn_SFExotT319pnGwQ0nB9AzL5z6w

위에서 받은 API URL, CA Certification, Token을 차례대로 입력하여 주면 GKE 등록이 끝난다.

 

2) Ingress / Jupyter Hub 설치

 

그 다음부터는 간단하다 등록된 GKE를 선택하고 Ingress와 Jupyter Hub를 차례대로 Install 해 준다. (Ingress를 설치해야 Jupyter Hub Install이 활성화 된다.)

 

 

3) Jupyter Hub 실행

 

설치가 완료되면 위 스크린 샷에 나타난 Jupyter Hub의 주소를 통해 실행이 가능하다. GitLab으로 Jupyter를 Authorize하겠느냐는 질문이 나오는데, 당연히 그러겠다고 하면 된다. 더 괜찮은 점은 default로 Jupyter의 Git Extension이 설치되는데 GitLab의 내 Private Repo도 바로 접근 가능하다는 것이다. Jupyter Hub에서 작성한 내용은 Commit을 통해 Gitlab에 반영할 수 있다.

 



댓글