티스토리 뷰

카테고리 없음

centraldashboard

미니대왕님 2024. 6. 4. 09:25

centraldashboard
jupyter
katib
kserve
kubeflow-pipelines
ml-pipelinesnotebook
tensorboard
airflow
kuberay-operator 
kuberay-head 
kuberay-worker 

 

***********

kubeflow 

https://www.kubeflow.org/docs/components/central-dash/overview/

 

Overview

Overview of the Kubeflow Central Dashboard

www.kubeflow.org

 

Kubeflow Central 대시보드란 무엇인가요?

Kubeflow Central 대시보드는 Kubeflow 및 생태계 구성요소에 대해 인증된 웹 인터페이스를 제공합니다. 클러스터에서 실행되는 구성 요소의 UI를 노출하여 기계 학습 플랫폼 및 도구의 허브 역할을 합니다.

중앙 대시보드의 일부 핵심 기능은 다음과 같습니다.

스크린샷

다음은 Kubeflow Central 대시보드의 스크린샷입니다.

Kubeflow와 해당 구성요소에는 중앙 대시보드에서 액세스할 수 있는 다양한 사용자 인터페이스가 있습니다.

다음은 구성 요소별로 그룹화된 기본 페이지 목록입니다.

핵심 섹션

다음 섹션은 모든 Kubeflow 배포에서 사용할 수 있습니다.

  •  : Kubeflow Central 대시보드의 방문 페이지
  • Manage Contributors : 현재 프로필/네임스페이스에 대한 기여자를 관리합니다.

Kubeflow 노트북

Kubeflow Notebooks가 설치 되면 다음 섹션을 사용할 수 있습니다 .

  • 노트북 : Kubeflow 노트북 관리
  • 볼륨 : Kubernetes PVC 볼륨 관리

Kubeflow 파이프라인

Kubeflow Pipelines가 설치 되면 다음 섹션을 사용할 수 있습니다 .

  • 실험(KFP) : KFP 실험 관리
  • 실행 : KFP 실행을 관리합니다.
  • Recurring Runs : KFP 반복 실행을 관리하려면
  • 파이프라인 : KFP 파이프라인 관리
  • 아티팩트 : MLMD(ML 메타데이터) 아티팩트 추적
  • 실행 : MLMD에서 다양한 구성요소 실행을 추적합니다.

비서

Katib이 설치 되면 다음 섹션을 사용할 수 있습니다 .

  • 실험(AutoML) : Katib 실험 관리

KServe

KServe가 설치 되면 다음 섹션을 사용할 수 있습니다 :

  • 모델 : 배포된 KServe 모델 관리

************* ************* ************* ************* ************* ************* ************* *************

Kubeflow 프로필이란 무엇입니까?

프로필은 Kubernetes 네임스페이스를 래핑하는 Kubeflow에서 도입한 Kubernetes CRD입니다. 프로필은 단일 사용자가 소유하며 보기 또는 수정 액세스 권한을 가진 여러 기여자가 있을 수 있습니다. 프로필 소유자는 기여자를 추가하고 제거할 수 있습니다(클러스터 관리자도 이 작업을 수행할 수 있음).

프로필과 해당 하위 네임스페이스는 Kubeflow 프로필 컨트롤러 에 의해 조정되며 기여자(소유자가 아님)는 Kubeflow 액세스 관리 API(KFAM) 에 의해 관리됩니다 .

중앙 대시보드

Kubeflow Central 대시보드의 상단 표시줄에서 활성 프로필을 선택할 수 있습니다. 사용자는 소유자, 수정 또는 보기 액세스 권한이 있는 프로필만 볼 수 있습니다.

대부분의 Kubeflow 구성요소는 활성 프로필을 사용하여 표시할 리소스와 부여할 권한을 결정합니다.

자동 프로필 생성

Kubeflow는 Kubeflow에 처음 로그인하는 사용자를 위한 자동 프로필 생성을 지원합니다.

CD_REGISTRATION_FLOW중앙 대시보드 배포의 환경 변수는 자동 프로필 생성이 활성화되는지 여부를 제어합니다 . 기본적으로 자동 프로필 생성은 비활성화되어 있습니다. CD_REGISTRATION_FLOWis 인 경우 true사용자가 Kubeflow에 로그인하고 아직 프로필 소유자가 아닌 경우 프로필을 생성하라는 메시지가 표시됩니다.

경고

자동 프로필 생성은 모든 사용 사례에 적합하지 않을 수 있습니다.
사용자는 자동으로 생성된 프로필의 소유자가 되므로 기여자를 추가/제거할 수 있습니다.

클러스터 관리자는 자동 프로필 생성을 비활성화하고 사용자 및/또는 팀에 대한 프로필을 수동으로 생성하도록 선택할 수 있습니다 . 일반적으로 이러한 경우 사용자에게는 프로필에 대한 보기 또는 수정 액세스 권한만 부여됩니다(소유자로 지정되지는 않음).

다음은 자동 프로필 생성 흐름의 예입니다.

  1. 새 사용자가 처음으로 Kubeflow에 로그인합니다.

  1. 사용자는 프로필 이름을 지정하고 마침을 클릭할 수 있습니다 .

프로필 리소스

각 프로필에 대해 다음 리소스가 생성됩니다.

  • 프로필과 동일한 이름을 공유하는 Kubernetes 네임스페이스입니다.
  • 사용자를 위한 Kubernetes RBAC :
    • 프로필 소유자의 경우 RoleBinding이름이 namespaceAdmin다음과 같습니다.ClusterRole/kubeflow-admin
    • 각 기여자의 RoleBinding이름은 user-{EMAIL}-clusterrole-{ROLE}다음과 같습니다.ClusterRole/kubeflow-{ROLE}
      • {EMAIL}는 기여자의 이메일이며 특수 문자는 로 대체되고 -소문자로 변환됩니다.
      • {ROLE}기여자의 역할은 다음 중 하나입니다 edit.view
  • ServiceAccounts용 Kubernetes RBAC :
    • 의 경우 ServiceAcount/default-editor다음 으로 RoleBinding명명됨default-editorClusterRole/kubeflow-edit
    • 의 경우 ServiceAcount/default-viewer다음 으로 RoleBinding명명됨default-viewerClusterRole/kubeflow-view
  • Istio 인증 정책 :
    • 프로필 소유자의 경우 AuthorizationPolicy이름이 지정된ns-owner-access-istio
    • 각 기여자에 대해 AuthorizationPolicy이름이 지정된user-{EMAIL}-clusterrole-{ROLE}
      • {EMAIL}는 기여자의 이메일이며 특수 문자는 로 대체되고 -소문자로 변환됩니다.
      • {ROLE}기여자의 역할은 다음 중 하나입니다 edit.view

프로필 관리

프로필은 Kubernetes CRD이므로 클러스터 관리자는 kubectl명령을 사용하여 프로필을 관리할 수 있습니다.

프로필 만들기

클러스터 관리자는 kubectl명령을 사용하여 새 프로필을 생성할 수 있습니다.

먼저 my-profile.yaml다음 구조로 이름이 지정된 파일을 만듭니다.

apiVersion: kubeflow.org/v1
kind: Profile
metadata:
  ## the profile name will be the namespace name
  ## WARNING: unexpected behavior may occur if the namespace already exists
  name: my-profile
spec:
  ## the owner of the profile
  ## NOTE: you may wish to make a global super-admin the owner of all profiles
  ##       and only give end-users view or modify access to profiles to prevent
  ##       them from adding/removing contributors
  owner:
    kind: User
    name: admin@example.com

  ## plugins extend the functionality of the profile
  ## https://github.com/kubeflow/kubeflow/tree/master/components/profile-controller#plugins
  plugins: []
  
  ## optionally create a ResourceQuota for the profile
  ## https://github.com/kubeflow/kubeflow/tree/master/components/profile-controller#resourcequotaspec
  ## https://kubernetes.io/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/#ResourceQuotaSpec
  resourceQuotaSpec: {}

그런 다음 다음 명령을 실행하여 프로필을 만듭니다.

kubectl apply -f my-profile.yaml

모든 프로필 나열

클러스터 관리자는 다음 명령을 사용하여 기존 프로필을 나열할 수 있습니다.

kubectl get profiles

프로필 설명

클러스터 관리자는 다음 명령을 사용하여 특정 프로필을 설명할 수 있습니다.

kubectl describe profile MY_PROFILE_NAME

프로필 삭제

클러스터 관리자는 다음 명령을 사용하여 기존 프로필을 삭제할 수 있습니다.

kubectl delete profile MY_PROFILE_NAME

경고

프로필을 삭제하면 클러스터에서 해당 네임스페이스도 삭제됩니다.
프로필 네임스페이스에 생성된 모든 리소스가 삭제됩니다.

프로필 기여자 관리

프로필 기여자는 프로필 네임스페이스에 특정  리소스가 있는지  따라 정의됩니다 .RoleBindingAuthorizationPolicy

메모

중앙 대시보드 방법을 통해서만 "편집" 액세스 권한이 있는 기여자를 추가할 수 있습니다. "보기" 액세스 권한이 있는 기여자를 추가하려면 수동 방법을
사용해야 합니다 .

중앙 대시보드로 참가자 관리

프로필 소유자는 Kubeflow Central 대시보드의 기여자 관리 탭을 사용하여 기여자  추가하거나 삭제할 수 있습니다.

 

기여자는 "네임스페이스 기여자" 필드를 통해 관리됩니다.

 

기여자를 수동으로 관리

관리자는 프로필 네임스페이스에 필수 RoleBinding및 AuthorizationPolicy리소스를 생성하여 기존 프로필에 기여자를 수동으로 추가할 수 있습니다 .

기여자 역할 바인딩 만들기

RoleBinding사용자에게 프로필에 대한 액세스 권한을 부여하는 는 다음과 같이 구성됩니다 .

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: user-<SAFE_USER_EMAIL>-clusterrole-<USER_ROLE>
  namespace: <PROFILE_NAME>
  annotations:
    role: <USER_ROLE>
    user: <RAW_USER_EMAIL>
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubeflow-<USER_ROLE>
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: <RAW_USER_EMAIL>

다음 변수는 적절한 값으로 대체됩니다.

  • <RAW_USER_EMAIL>사용자의 이메일(대소문자 구분)
  • <SAFE_USER_EMAIL>사용자의 이메일(특수문자는 로 대체되고 -소문자로 변환됨)
  • <USER_ROLE>사용자의 역할 edit또는view
  • <PROFILE_NAME>프로필 이름

기여자 AuthorizationPolicy 만들기

AuthorizationPolicy사용자에게 프로필에 대한 액세스 권한을 부여하는 는 다음과 같이 구성됩니다 .

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: user-<SAFE_USER_EMAIL>-clusterrole-<USER_ROLE>
  namespace: <PROFILE_NAME>
  annotations:
    role: <USER_ROLE>
    user: <RAW_USER_EMAIL>
spec:
  rules:
    - from:
        - source:
            ## for more information see the KFAM code:
            ## https://github.com/kubeflow/kubeflow/blob/v1.8.0/components/access-management/kfam/bindings.go#L79-L110
            principals:
              ## required for kubeflow notebooks
              ## TEMPLATE: "cluster.local/ns/<ISTIO_GATEWAY_NAMESPACE>/sa/<ISTIO_GATEWAY_SERVICE_ACCOUNT>"
              - "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"

              ## required for kubeflow pipelines
              ## TEMPLATE: "cluster.local/ns/<KUBEFLOW_NAMESPACE>/sa/<KFP_UI_SERVICE_ACCOUNT>"
              - "cluster.local/ns/kubeflow/sa/ml-pipeline-ui"
      when:
        - key: request.headers[kubeflow-userid]
          values:
            - <RAW_USER_EMAIL>

다음 변수는 적절한 값으로 대체됩니다.

  • <RAW_USER_EMAIL>사용자의 이메일(대소문자 구분)
  • <SAFE_USER_EMAIL>사용자의 이메일(특수문자는 로 대체되고 -소문자로 변환됨)
  • <USER_ROLE>사용자의 역할 edit또는view
  • <PROFILE_NAME>프로필 이름
  • <KUBEFLOW_NAMESPACE>Kubeflow가 설치된 네임스페이스
  • <KFP_UI_SERVICE_ACCOUNT>ml-pipeline-uiPod 에서 사용하는 ServiceAccount의 이름
  • <ISTIO_GATEWAY_NAMESPACE>Istio Gateway 배포가 포함된 네임스페이스
  • <ISTIO_GATEWAY_SERVICE_ACCOUNT>Istio Gateway Pod에서 사용하는 ServiceAccount의 이름

*****************************

대시보드 사용자 정의

Kubeflow Central Dashboard 메뉴 항목을 맞춤설정하고 타사 앱을 통합하세요.

Kubeflow Central 대시보드를 맞춤설정하는 방법은 무엇인가요?

Kubeflow Central 대시보드는 메뉴 항목을 맞춤설정하고 타사 앱을 통합하는 방법을 제공합니다.

예를 들어 아래 이미지는 맞춤 '내 앱' 메뉴 항목이 있는 Kubeflow Central 대시보드를 보여줍니다.

중앙 대시보드 ConfigMap

Kubeflow Central 대시보드는 Kubernetes ConfigMap을 사용하여 구성됩니다.

중앙 대시보드 배포의 환경 CD_CONFIGMAP_NAME변수는 ConfigMap의 이름을 지정합니다. 기본적으로 ConfigMap의 이름은 입니다 centraldashboard-config. /apps/centraldashboard/upstream/base/configmap.yaml저장소 파일kubeflow/manifests 에서 기본 ConfigMap을 찾을 수 있습니다 .

externalLinksConfigMap의 섹션은 외부 사이트(Kubernetes 클러스터에서 호스팅되지 않음)에 대한 사이드바에 링크를 추가합니다 .

의 각 요소는 externalLinks다음 필드가 포함된 JSON 개체입니다.

  • type:로 설정해야 합니다."item"
  • iframe:로 설정해야 합니다.false
  • text: 링크에 표시할 텍스트
  • url: 링크를 클릭하면 열리는 URL
  • icon: 링크에 표시할 철 아이콘 이름입니다.
    • icons:참고로 접두사를 제외해야 합니다.
    • 예를 들어, 사용하려면 icons:launch다음을 설정합니다."launch"
    • 예를 들어, 사용하려면 social:mood다음을 설정합니다."social:mood"

예를 들어 아래 ConfigMap은 Kubeflow 웹사이트에 대한 링크를 추가합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: centraldashboard-config
  namespace: kubeflow
data:
  settings: |-
    ...    
  links: |-
    {
      "menuLinks": [
        ...
      ],
      "externalLinks": [
        {
          "type": "item",
          "iframe": false,
          "text": "Kubeflow Website",
          "url": "https://www.kubeflow.org/",
          "icon": "launch"
        }
      ],
      "quickLinks": [
        ...
      ],
      "documentationItems": [
        ...
      ]
    }    

ConfigMap 섹션 documentationItems은 홈 페이지의 "문서" 섹션에 대한 링크를 추가합니다.

의 각 요소는 documentationItems다음 필드가 포함된 JSON 개체입니다.

  • text: 링크에 표시할 텍스트
  • desc: 링크 아래에 표시할 설명
  • link: 링크를 클릭하면 열리는 URL

예를 들어 아래 ConfigMap은 Kubeflow 웹 사이트 문서에 대한 링크를 추가합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: centraldashboard-config
  namespace: kubeflow
data:
  settings: |-
    ...    
  links: |-
    {
      "menuLinks": [
        ...
      ],
      "externalLinks": [
        ...
      ],
      "quickLinks": [
        ...
      ],
      "documentationItems": [
        {
          "text": "Kubeflow Website",
          "desc": "Kubeflow website documentation",
          "link": "https://www.kubeflow.org/docs/"
        }
      ]
    }    

가상 서비스 생성

클러스터에서 Kubeflow가 아닌 ​​애플리케이션이 실행 중인 경우 VirtualServiceKubeflow Istio 게이트웨이에서 생성하여 Kubeflow Central Dashboard를 통해 이를 노출할 수 있습니다. 이렇게 하려면 앱에 Istio 사이드카가 삽입되어 있고 Kubernetes 서비스로 노출되어야 합니다.

예를 들어 아래는 경로 아래 Kubeflow Istio 게이트웨이의 네임스페이스 에서 VirtualService노출됩니다 .Service/my-appmy-namespace/my-app/

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-custom-app
  namespace: <MY_APP_NAMESPACE>
spec:
  gateways:
    ## the istio gateway which is serving kubeflow
    ## TEMPLATE: <KUBEFLOW_GATEWAY_NAMESPACE>/<KUBEFLOW_GATEWAY_NAME>
    - kubeflow/kubeflow-gateway
  hosts:
    - '*'
  http:
    - headers:
        request:
          add:
            x-forwarded-prefix: /my-app
      match:
        - uri:
            prefix: /my-app/
      rewrite:
        uri: /
      route:
        - destination:
            host: <MY_APP_SERVICE_NAME>.<MY_APP_NAMESPACE>.svc.cluster.local
            port:
              number: 80

이를 생성하면 Kubeflow Istio 게이트웨이의 경로 VirtualService에서 애플리케이션을 사용할 수 있게 됩니다 ./_/my-app/

http(s)://<KUBEFLOW_ISTIO_GATEWAY>/_/my-app/

UserID 헤더 인증

애플리케이션에 대한 각 요청에는 kubeflow-userid인증에 사용될 수 있는 사용자의 이메일 주소로 명명된 헤더가 있습니다.

이 헤더가 스푸핑되지 않도록 하려면 Kubeflow Istio 게이트웨이에서만 애플리케이션에 액세스할 수 있는지 확인해야 합니다. 이는 다음을 통해 달성할 수 있습니다.

  • 다음이 AuthorizationPolicy필요한 ALLOW를 생성합니다 .from[].source[].principals[]cluster.local/ns/<ISTIO_GATEWAY_NAMESPACE>/sa/<ISTIO_GATEWAY_SERVICE_ACCOUNT>
  • 애플리케이션 지원을 위해 설정을 DestinationRule사용 하여 사이드카에 의해 메시 외부 트래픽이 차단되는지 확인trafficPolicy.tls.modeISTIO_MUTUALService

menuLinksConfigMap의 섹션은 클러스터 내 애플리케이션의 사이드바에 링크를 추가 합니다 .

의 각 요소는 menuLinks다음 필드가 포함된 JSON 개체입니다.

  • type:로 설정해야 합니다."item"
  • link: 링크를 클릭하면 열리는 경로
  • text: 링크에 표시할 텍스트
  • icon: 링크에 표시할 철 아이콘 이름입니다.
    • icons:참고로 접두사를 제외해야 합니다.
    • 예를 들어, 사용하려면 icons:launch다음을 설정합니다."launch"
    • 예를 들어, 사용하려면 social:mood다음을 설정합니다."social:mood"

예를 들어 아래 ConfigMap은 위에서 "my-app" 애플리케이션을 추가합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: centraldashboard-config
  namespace: kubeflow
data:
  settings: |-
    ...    
  links: |-
    {
      "menuLinks": [
        ...
        {
          "type": "item",
          "link": "/my-app/",
          "text": "My App",
          "icon": "social:mood"
        },
        ...
      ],
      "externalLinks": [
        ...
      ],
      "quickLinks": [
        ...
      ],
      "documentationItems": [
        ...
      ]
    }    

네임스페이스 애플리케이션

각 프로필 네임스페이스에 애플리케이션 인스턴스가 있는 경우 필드 {ns}에서 를 사용하여 link활성 프로필 네임스페이스를 링크에 동적으로 삽입할 수 있습니다.

예를 들어 네임스페이스에 애플리케이션 인스턴스가 있고 네임스페이스 profile1에 다른 인스턴스가 있는 경우입니다 profile2. VirtualService다음 경로 아래에 애플리케이션을 노출하도록 구성할 수 있습니다 /my-app/{ns}/.

http(s)://<KUBEFLOW_ISTIO_GATEWAY>/_/my-app/profile1/
http(s)://<KUBEFLOW_ISTIO_GATEWAY>/_/my-app/profile2/

이러한 요소와 앱의 요소 menuLinks는 다음과 같습니다.

{
  "type": "item",
  "link": "/my-app/{ns}/",
  "text": "My App",
  "icon": "social:mood"
}

애플리케이션 포드는 프로필 네임스페이스 내에 있으므로 기존 Kubeflow AuthorizationPolicy는 애플리케이션을 프로필 기여자로 제한해야 합니다. 예를 들어 사용자가 네임스페이스의 기여자 profile1( 는 아님 profile2)인 경우 에는 액세스할 수 있지만 http(s)://<KUBEFLOW_ISTIO_GATEWAY>/_/my-app/profile1/에는 액세스할 수 없습니다 http(s)://<KUBEFLOW_ISTIO_GATEWAY>/_/my-app/profile2/.

 

댓글