Kubeflow V1.4インストールと初期設定


1.Kubefflowのインストール


kubeflowの場合は、kubeflow manifest githubで簡単にインストールできます.まず、kubernetesclusterが構成されていると仮定し、kustomizeをインストールする必要があります.
#kubeflow 1.4의 경우 kustomzie 4.x 버전에 호환이 안됩니다.
wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64
gmv kustomize_3.2.0_linux_amd64 /usr/local/bin/kustomize
今後のプロジェクトでクローンを作成し、Manifestを適用できます.デフォルトでは、マルチユーザベースのパイプとしてインストールされます.
  • manifests/common/user-namespace/base/params.env
  • manifests/common/dex/base/config-map.yaml
  • ファイル内のデフォルトのユーザーを置き換えてインストールします.変更がなければ[email protected]/1234123にインストールします.
    git clone https://github.com/kubeflow/manifests.git
    
    while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
    上記のコマンドを使用して、kubeflow内の各構成部品を別々に配置します(最初の試行では、kubectl applyは通常正常ではありません.これは再起動するだけです).正常にインストールされている場合は、次の名前のインタフェースのpadがすべて実行されていることを確認できます.

    インストール中に、ほとんどのシードが正常に動作していることを確認しましたが、cache-deploveなどのKubeflowネーミングスペースにエラーが発生しました.これは主にKubernetesとKubeflowバージョンの互換性の問題のためです.私の場合はKubernetesバージョンv 1です21.1では、kubeflow v.1.1.1にエラーがインストールされていますが、v 1です.4.0の場合、正常にインストールされています.そのため、インストール環境との互換性チェックを行い、正しいバージョンをインストールする必要があります.

    2.Kubeflow Dashboardアクセス


    公式githubでは、ポート転送によるアクセスキーボードについて簡単に説明していますが、クラスタは仮想マシンで構成されているため、localhostにアクセスできません.kubeflowをインストールすると、istio-systemに次の内容が表示されます.

    istio-ingressgatewayはNodePortで作成されているため、[istio gateway podで作成されたノードのIP:32082]からアクセスできます.


    3.SRFのトラブルシューティング


    上記のアクセスと使用は正常に見えますが、ノートブックやテンソルボードなどのKubeflow機能を使用すると、権限を拒否する問題が発生します.

    Kubeflowが使用するwebはセキュリティクッキーを使用するため、HTTPSを設定する必要があります.
    kubectl edit -n kubeflow gateways.networking.istio.io kubeflow-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - '*'
        port:
          name: http
          number: 80
          protocol: HTTP
        tls:
          httpsRedirect: true
      - hosts:
        - '*'
        port:
          name: https
          number: 443
          protocol: HTTPS
        tls:
          mode: SIMPLE
          privateKey: /etc/istio/ingressgateway-certs/tls.key
          serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
    kubeflow gatewayからhttpへの通信をhttpにリダイレクトし、TLSに必要なcrt、keyを設定します.以降のTLSアクセスのサーバ証明書を作成します.
    apiVersion: cert-manager.io/v1alpha2
    kind: Certificate
    metadata:
      name: istio-ingressgateway-certs
      namespace: istio-system
    spec:
      commonName: istio-ingressgateway.istio-system.svc
      # Use ipAddresses if your LoadBalancer issues an IP
      ipAddresses:
      - 172.16.156.10
      # Use dnsNames if your LoadBalancer issues a hostname (eg DNS name from Civo dashboard)
      #dnsNames:
      #- <LoadBalancer HostName>
      isCA: true
      issuerRef:
        kind: ClusterIssuer
        name: kubeflow-self-signing-issuer
      secretName: istio-ingressgateway-certs
    その後、https://[LB IP]:[LB Port]を使用すると、接続後にノートパソコンを正常に作成できます.ただし、VDI外部からアクセスするためには、ポートを転送する必要があるため、証明書を設定する必要があるため、上記の方法ではなく、セキュリティCookiesモードを一時的に無効にする方法を使用しました.
    k edit deploy jupyter-web-app-deployment -n kubeflow
    
    .
    .
    spec:
          containers:
          - env:
            - name: APP_SECURE_COOKIES
              values: "false"
    Web関連シードでSecured cookiesを無効にする環境変数が追加されました.これは正式に推奨されない方法であるため、実際の本番サーバではHTTPSを使用する必要があります.

    その後、Notebookが正常に動作していることがわかります.

    4.ユーザーの追加


    他のユーザーを追加するには、2つのプロセスが必要です.dexにID/PWを作成し、そのためにProfileを作成する必要があります.
    #manifest/common/dex/base/config-map.yaml
    - email: [email protected]
          hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72
          # https://github.com/dexidp/dex/pull/1601/commits
          # FIXME: Use hashFromEnv instead
          username: test
          userID: "test"
    staticPasswordエントリにユーザー情報を追加し、hashにbcryptパスワードを入力します.後続の変更をconfigmapに適用します.dexを再実行して、後続の変更を適用します.
    k rollout restart deployment dex -n auth
    その後、対応するID/PWを使用してログインできます.ただし、名前空間が指定されていないため、リソースを作成できません.

    このためにプロファイルを作成します.
    #profile.yaml
    apiVersion: kubeflow.org/v1beta1
    kind: Profile
    metadata:
      name: testuser
    spec:
      owner:
        kind: User
        name: [email protected]
      resourceQuotaSpec:
        hard:
          cpu: "2"
          memory: 2Gi
          persistentvolumeclaims: "1"
          requests.storage: "5Gi"
    リソースを割り当ててProfileを作成します.作成が完了すると、ユーザー名を使用してネームスペースを作成し、再接続時にNamespaceが割り当てられていることを確認できます.