Kubeflow 사용 가이드

아래에서는 Kubeflow를 생성한 후, Kubeflow의 사용 방법에 대해 가이드합니다.

Kubeflow 사용자 추가

아래에서는 Kubeflow를 생성한 이후의 Kubeflow의 사용 방법에 대해 가이드합니다.

Kubeflow는 설치 초기 화면에서 입력한 Admin User 1명의 계정만 생성되어있습니다.

Kubeflow Dashboard 이용 시, 초기 사용자 이외에 사용자를 추가하기 위해서는 Dex(Kubeflow의 인증 연계 컴포넌트)의 설정을 변경해야 합니다.

  • Dex는 auth 네임스페이스(namespace)에 배포되며, 환경설정은 dex 라는 이름의 configmap 으로 저장되어 있습니다.
참고
kubeflow는 사용자별로 namespace가 분리되어 있습니다

다음은 Dex 환경 설정의 예시입니다.

배경색 변경
apiVersion: v1
kind: ConfigMap
metadata:
  name: dex
  namespace: auth
data:
  config.yaml: |
    issuer: http://dex.auth.svc.cluster.local:5556/dex
    storage:
      type: kubernetes
      config:
        inCluster: true
    web:
      http: 0.0.0.0:5556
    logger:
      level: "debug"
      format: text
    oauth2:
      skipApprovalScreen: true
    enablePasswordDB: true
    staticPasswords:
    - email: admin@kubeflow.org
      hash: $2y$10$Yb9WVbn8pzVSM6fBgKdFae1Bh6Z.XTihi7bNu3sB6/h5bt1JuUOgq
      username: admin
      userID: 9cb67307-fd6d-4441-9b59-52acd78f4c9e
    staticClients:
    - id: kubeflow-oidc-authservice
      redirectURIs: ["/login/oidc"]
      name: 'Dex Login Application'
      secret: pUBnBOY80SnXgjibTYM9ZWNzY2xreNGQok    
apiVersion: v1
kind: ConfigMap
metadata:
  name: dex
  namespace: auth
data:
  config.yaml: |
    issuer: http://dex.auth.svc.cluster.local:5556/dex
    storage:
      type: kubernetes
      config:
        inCluster: true
    web:
      http: 0.0.0.0:5556
    logger:
      level: "debug"
      format: text
    oauth2:
      skipApprovalScreen: true
    enablePasswordDB: true
    staticPasswords:
    - email: admin@kubeflow.org
      hash: $2y$10$Yb9WVbn8pzVSM6fBgKdFae1Bh6Z.XTihi7bNu3sB6/h5bt1JuUOgq
      username: admin
      userID: 9cb67307-fd6d-4441-9b59-52acd78f4c9e
    staticClients:
    - id: kubeflow-oidc-authservice
      redirectURIs: ["/login/oidc"]
      name: 'Dex Login Application'
      secret: pUBnBOY80SnXgjibTYM9ZWNzY2xreNGQok    
코드 블럭. Dex 환경 설정 예시

환경 설정에서 enablePasswordDB 값이 true인 경우, Dex는 서비스 기동 시 configmap 에서 staticPasswords 에 정의된 사용자 목록을 내부 저장소에 저장합니다. 따라서 staticPasswordsemail, hash, username, userID 로 구성된 신규 사용자 값을 추가하게 되면 초기 사용자 이외에도 사용자를 자유롭게 추가하여 Kubeflow 서비스 이용이 가능합니다.

사용자를 추가하기 위한 속성값은 다음과 같이 정의할 수 있습니다.

파라미터설명
email일반적인 E-mail 형식의 값
hashBcrypt 알고리즘으로 암호화 된 사용자 암호 값이며 Bcrypt 알고리즘으로 생성된 Hash 값을 직접 입력
username사용자 이름
  • kubernetes namespace 명명 규칙을 따름
  • 63자 제한, 소문자 숫자 및 - 문자만 사용 가능
userID유일하게 식별될 수 있는 ID 값
  • 초기 사용자의 userID는 uuidgen 커맨드를 이용하여 생성됨
표. 사용자를 추가하기 위한 속성값

kubectl을 사용할 수 있는 노드에서 다음 명령어를 이용해 dex configmap의 수정 화면으로 진입합니다.

배경색 변경
kubectl edit configmap dex -n auth
kubectl edit configmap dex -n auth
코드 블럭. kubectl - dex configmap 수정
배경색 변경
staticPasswords:
    - email: admin@kubeflow.org
      hash: $2y$10$Yb9WVbn8pzVSM6fBgKdFae1Bh6Z.XTihi7bNu3sB6/h5bt1JuUOgq
      username: admin
      userID: 9cb67307-fd6d-4441-9b59-52acd78f4c9e
    - email: sds@samsung.com
      hash: $2y$12$0g5.y86jnrt0v6In5NRCZ.YVuvrAUQ6j/RJYO3rV.kNulaDALOKfq
      username: sds
      userID: 8961d517-3498-4148-90c9-7e442ee91154
staticPasswords:
    - email: admin@kubeflow.org
      hash: $2y$10$Yb9WVbn8pzVSM6fBgKdFae1Bh6Z.XTihi7bNu3sB6/h5bt1JuUOgq
      username: admin
      userID: 9cb67307-fd6d-4441-9b59-52acd78f4c9e
    - email: sds@samsung.com
      hash: $2y$12$0g5.y86jnrt0v6In5NRCZ.YVuvrAUQ6j/RJYO3rV.kNulaDALOKfq
      username: sds
      userID: 8961d517-3498-4148-90c9-7e442ee91154
코드 블럭. dex configmap 수정

configmap의 staticPasswords 값은 Dex 서비스가 기동되는 시점에 반영되기 때문에 Dex 서비스를 다음 명령어로 재기동합니다.

배경색 변경
kubectl rollout restart deployment dex -n auth
kubectl rollout restart deployment dex -n auth
코드 블럭. kubectl - dex 재기동

신규 사용자 정보를 이용해 로그인을 시도합니다

그림1
신규 사용자 정보 로그인

정상적으로 로그인 되어 새로운 Namespace(profile)을 생성하는 화면으로 전환되는것을 확인합니다.

그림2
Namespace Name 생성

위 내용은 Kubeflow 공식 사이트를 참고하여 작성하였습니다. 자세한 내용은 Kubeflow Profiles 참고하세요.

Kubeflow Jupyter Notebook의 Custom Image 활용방법

Kubeflow의 Notebook Life Cycle을 관리하는 Kubeflow Notebook Controller에서 Custom Image를 사용하기 위해서는 몇 가지 요구사항을 만족해야 합니다.

Kubeflow는 Notebook 이미지가 실행되면 Jupyter가 자동으로 시작되는 것으로 인식합니다. 그래서 컨테이너 이미지에 Jupyter를 시작하는 기본 명령을 설정해야 합니다.

다음은 Dockerfile에 포함해야 하는 내용의 예시입니다.

배경색 변경
ENV NB_PREFIX /

CMD ["sh","-c", "jupyter notebook --notebook-dir=/home/${NB_USER} --ip=0.0.0.0 --no-browser --allow-root --port=8888 --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' --NotebookApp.base_url=${NB_PREFIX}"]
ENV NB_PREFIX /

CMD ["sh","-c", "jupyter notebook --notebook-dir=/home/${NB_USER} --ip=0.0.0.0 --no-browser --allow-root --port=8888 --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' --NotebookApp.base_url=${NB_PREFIX}"]
코드 블럭. Dockfile 예시

위 항목을 설명하면 아래와 같습니다.

파라미터설명
--notebook-dir=/home/jovyan작업 디렉토리 설정
  • /home/jovyan 디렉토리는 Kubernetes persistent volume(PV)에 Mount 됨
--ip=0.0.0.0Jupyter Notebook이 모든 IP에서 수신하도록 허용
--allow-rootJupyter Notebook을 사용자가 root로 실행하도록 허용
--port=8888Port 설정
--NotebookApp.token=’’ –NotebookApp.password=’’Jupyter 인증 비활성화
  • Kubeflow는 istio가 인증을 담당하기 때문에 Jupyter가 제공하는 인증 기능은 비활성화
  • 해당 설정을 사용하여 Jupyter Notebook Server에 비밀번호 없이 액세스 가능
--NotebookApp.allow_origin=’*’Allow origin
--NotebookApp.base_url=NB_PREFIXBase URL 설정
표. Dockerfile에 포함해야하는 설정

Custom Image 생성은 tesorflow notebook image를 생성하는 Dockerfile을 참고하여 생성할 수 있습니다.

참고
Custom Image는 Docker Hub와 같은 Public Registry 또는 Private Registry에 저장되어 Kubeflow에서 push/pull이 가능하여야 합니다.
  1. Notebook Servers 페이지에서 +NEW SERVER 버튼을 클릭하세요.

    그림3

  2. 일단 Custom Image를 생성했다면 kubeflow Notebook Server 화면에서 Custom Image를 체크하고, Custom Image의 주소 를 입력하여 새로운 Notebook Server를 생성합니다.

    그림4

안내

위 내용은 Kubeflow 공식 사이트를 참고하여 작성하였습니다.

클러스터 배포
Release Note