配置参考#

JupyterHub Helm chart 可通过 config.yaml 中的值进行配置。通过这种方式,您可以扩展用户资源、基于不同的 Docker 镜像构建、管理安全和认证等。

以下是 Helm chart 中许多(但并非全部)可配置值的描述。要查看全部可配置选项,请查阅此处定义的默认值。

有关通过修改 Helm chart 可以实现的一些具体操作的更多指导信息,请参阅自定义指南

enabled#

jupyterhub chart 本身会忽略 enabled,但依赖于 jupyterhub chart 的 chart 可以有条件地使用此配置选项作为条件。

fullnameOverride#

fullnameOverride 和 nameOverride 允许您调整 Helm chart 中的资源命名方式。

名称格式

资源类型

fullnameOverride

nameOverride

注意

组件

命名空间内

""

*

默认

release-component

集群范围

""

*

默认

fullname-component

*

str

*

-

release-component

*

null

""

-

release-(name-)component

*

null

str

如果包含在 release 中则省略

release-(chart-)component

*

null

null

如果包含在 release 中则省略

警告!

不支持在 chart 初次安装后更改 fullnameOverride 或 nameOverride。更改它们的值可能会导致重置非外部的 JupyterHub 数据库、放弃用户存储以及断开与当前运行的用户 pod 的连接。

如果您是依赖此 chart 的 chart 的开发者,您应该避免硬编码名称。如果您想从父 Helm chart 的模板中引用此 chart 中资源的名称,可以使用全局命名模板。

# some pod definition of a parent chart helm template
schedulerName: {{ include "jupyterhub.user-scheduler.fullname" . }}

要从容器访问它们,您还可以依赖包含所有资源名称条目的 hub ConfigMap。

# some container definition in a parent chart helm template
env:
  - name: SCHEDULER_NAME
    valueFrom:
      configMapKeyRef:
        name: {{ include "jupyterhub.user-scheduler.fullname" . }}
        key: user-scheduler

nameOverride#

请参阅 fullnameOverride 下的文档。

imagePullSecret#

imagePullSecret.create#

切换是否使用提供的凭据创建 k8s Secret 以访问私有镜像仓库。

默认值: false

imagePullSecret.automaticReferenceInjection#

切换是否将创建的 Secret 自动引用注入到所有 pod 的 spec.imagePullSecrets 配置中。

默认值: true

imagePullSecret.registry#

您想为其创建凭据集的私有仓库的名称。它将默认为 Docker Hub 的镜像仓库。

示例

  • https://index.docker.io/v1/

  • quay.io

  • eu.gcr.io

  • alexmorreale.privatereg.net

imagePullSecret.username#

您想用来连接到私有仓库的用户名。

对于外部的 gcr.io,您将使用 _json_key

示例

  • alexmorreale

  • alex@pfc.com

  • _json_key

imagePullSecret.password#

私有镜像仓库用户的密码。

示例

  • plaintextpassword

  • abc123SECRETzyx098

对于 gcr.io 仓库,密码将是一个 Google 云服务账户的大 JSON blob,它应该看起来像下面这样。

password: |-
  {
    "type": "service_account",
    "project_id": "jupyter-se",
    "private_key_id": "f2ba09118a8d3123b3321bd9a7d6d0d9dc6fdb85",
    ...
  }

imagePullSecret.email#

通常不需要指定电子邮件,但支持此项。

imagePullSecrets#

Chart 范围的配置,用于将 k8s Secret 引用附加到其所有 pod 的 spec.imagePullSecrets 配置中。

这不会覆盖或被特定 pod 的配置覆盖,而是会增强特定 pod 的配置。

您可以使用 k8s 原生语法,其中每个列表元素类似于 {"name": "my-secret-name"},或者您可以让列表元素直接是 Secret 的名称字符串。

默认值: []

hub#

hub.revisionHistoryLimit#

配置资源的 spec.revisionHistoryLimit。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。

有关更多信息,请参阅 Kubernetes 文档

hub.config#

JupyterHub 及其组件(认证器、spawner 等)是 Python 类,通过 traitlets 公开其配置。通过此 Helm chart 配置(hub.config),您可以通过静态 YAML 值直接配置 Python 类。要动态设置值,您需要改用 hub.extraConfig

某些配置必须在多个地方设置

此配置目前(0.11.0)仅影响 hub Pod 中的软件,但某些 Helm chart 配置选项(如 hub.baseUrl)用于在 hub Pod 中设置 JupyterHub.base_url影响其他 Helm 模板的渲染方式。

由于我们尚未完全梳理出除认证相关配置选项之外的所有潜在配置冲突,请接受在此时将其用于其他目的可能会导致问题。

示例

如果您查看文档或某个 jupyterhub_config.py 包含以下部分

c.JupyterHub.admin_access = true
c.JupyterHub.admin_users = ["jovyan1", "jovyan2"]
c.KubeSpawner.k8s_api_request_timeout = 10
c.GitHubOAuthenticator.allowed_organizations = ["jupyterhub"]

那么,您可以使用以下配置来表示它

hub:
  config:
    JupyterHub:
      admin_access: true
      admin_users:
        - jovyan1
        - jovyan2
    KubeSpawner:
      k8s_api_request_timeout: 10
    GitHubOAuthenticator:
      allowed_organizations:
        - jupyterhub

YAML 限制

您不能直接在 YAML 中表示 Python 的 BytesSet 对象。

Helm 值合并

helm 会将 Helm chart 的默认值与通过 --values-f 标志传递的值合并。在合并过程中,列表会被替换,而字典会被更新。

hub.config.JupyterHub#

JupyterHub Traitlets 配置。

请参阅 jupyterhub.app 获取完整列表,但请注意上述警告

hub.config.JupyterHub.subdomain_host#

用于托管单用户服务器的子域名。

这通过为每个用户提供自己的子域名 <user>.jupyter.example.org 来帮助防范某些跨源攻击。

请参阅在子域名上托管用户服务器

hub.extraFiles#

一个字典,包含在 pod 容器启动时注入的额外文件。例如,这可用于注入:配置文件、自定义用户界面模板、图像等。

# NOTE: "hub" is used in this example, but the configuration is the
#       same for "singleuser".
hub:
  extraFiles:
    # The file key is just a reference that doesn't influence the
    # actual file name.
    <file key>:
      # mountPath is required and must be the absolute file path.
      mountPath: <full file path>

      # Choose one out of the three ways to represent the actual file
      # content: data, stringData, or binaryData.
      #
      # data should be set to a mapping (dictionary). It will in the
      # end be rendered to either YAML, JSON, or TOML based on the
      # filename extension that are required to be either .yaml, .yml,
      # .json, or .toml.
      #
      # If your content is YAML, JSON, or TOML, it can make sense to
      # use data to represent it over stringData as data can be merged
      # instead of replaced if set partially from separate Helm
      # configuration files.
      #
      # Both stringData and binaryData should be set to a string
      # representing the content, where binaryData should be the
      # base64 encoding of the actual file content.
      #
      data:
        myConfig:
          myMap:
            number: 123
            string: "hi"
          myList:
            - 1
            - 2
      stringData: |
        hello world!
      binaryData: aGVsbG8gd29ybGQhCg==

      # mode is by default 0644 and you can optionally override it
      # either by octal notation (example: 0400) or decimal notation
      # (example: 256).
      mode: <file system permissions>

使用 –set-file

为避免在 Helm chart 配置中嵌入整个文件,您可以在 helm upgrade 期间使用 --set-file 标志来设置 stringData 或 binaryData 字段。

hub:
  extraFiles:
    my_image:
      mountPath: /usr/local/share/jupyterhub/static/my_image.png

    # Files in /usr/local/etc/jupyterhub/jupyterhub_config.d are
    # automatically loaded in alphabetical order of the final file
    # name when JupyterHub starts.
    my_config:
      mountPath: /usr/local/etc/jupyterhub/jupyterhub_config.d/my_jupyterhub_config.py
# --set-file expects a text based file, so you need to base64 encode
# it manually first.
base64 my_image.png > my_image.png.b64

helm upgrade <...> \
    --set-file hub.extraFiles.my_image.binaryData=./my_image.png.b64 \
    --set-file hub.extraFiles.my_config.stringData=./my_jupyterhub_config.py

常见用途

  1. JupyterHub 模板定制

    您可以通过向 /usr/local/share/jupyterhub/templates 注入新的模板来替换 hub pod 中的默认 JupyterHub 用户界面模板。这些模板可以引用注入到 /usr/local/share/jupyterhub/static 的自定义图像。

  2. JupyterHub 独立文件配置

    您可以将独立的 .py 文件注入到 /usr/local/etc/jupyterhub/jupyterhub_config.d 中自动加载,而不是通过 hub.extraConfig 将 JupyterHub python 配置作为字符串嵌入到 YAML 文件中。

  3. 灵活配置

    通过注入文件,您不必将它们嵌入到需要重新构建的 docker 镜像中。

    如果您的配置文件是 YAML/JSON/TOML 文件,您也可以使用 data 而不是 stringData,这允许您在不同的 Helm 配置文件中设置各种配置。这有助于依赖的 chart 仅覆盖文件的一部分配置,或者允许通过多个 Helm 配置文件设置配置。

限制

  1. 文件大小

    hub.extraFilessingleuser.extraFiles 中的文件分别存储在它们自己的 k8s Secret 资源中。由于 k8s Secret 通常限制为 1MB,您的总文件大小将受限于小于 1MB,因为还存在 base64 编码,这会使可用容量减少到 75%。

  2. 文件更新

    挂载的文件仅在容器启动时设置。这是因为我们使用 subPath,这是为了避免替换我们挂载的整个目录的内容所必需的。

hub.baseUrl#

这相当于 c.JupyterHub.base_url,但 Helm chart 通常也需要它。因此,请使用此配置而不是设置 c.JupyterHub.base_url。

默认值: "/"

hub.command#

一个字符串列表,用于替换 JupyterHub 镜像的 ENTRYPOINT 条目。请注意,在 k8s 术语中,Dockerfile 的 ENTRYPOINT 称为 command。该字符串列表将使用 Helm 的模板函数 tpl 进行扩展,该函数可以渲染花括号({{... }})内的 Helm 模板逻辑。

这对于以某种自定义方式包装 JupyterHub 本身的调用可能很有用。

有关更多详细信息,请参阅 Kubernetes 文档

默认值: []

hub.args#

一个字符串列表,用于替换 JupyterHub 镜像的 CMD 条目以及 Helm chart 启动 JupyterHub 的默认方式。请注意,在 k8s 术语中,Dockerfile 的 CMD 称为 args。该字符串列表将使用 Helm 的模板函数 tpl 进行扩展,该函数可以渲染花括号({{... }})内的 Helm 模板逻辑。

警告

通过替换整个配置文件(由 Helm chart 挂载到 /usr/local/etc/jupyterhub/jupyterhub_config.py),而不是使用 hub.extraConfig 附加到它,您的部署会面临与 Helm chart 配置文件不同步而导致的问题。

这类问题将显著增加调试和诊断的难度,因此可能会耗费维护 Helm chart 的社区以及您自己的大量时间,即使这并非问题的根本原因。

因此,我们请求您尽最大努力避免替换默认提供的 jupyterhub_config.py 文件。这通常是可能的。例如,如果您的目标是拥有一个专用的 .py 文件以进行更广泛的添加,并且您希望进行语法高亮等操作,而觉得在 YAML 文件的一部分 hub.extraConfig 中传递代码受到限制,您可以改用这个技巧

hub:
  args:
    - "jupyterhub"
    - "--config"
    - "/usr/local/etc/jupyterhub/jupyterhub_config.py"
    - "--debug"
    - "--upgrade-db"

有关更多详细信息,请参阅 Kubernetes 文档

默认值: []

hub.cookieSecret#

注意

从版本 1.0.0 开始,这将自动生成,无需手动设置。

如果您希望重置生成的密钥,可以使用 kubectl edit 对通常名为 hub 的 k8s Secret 进行编辑,并移除 k8s Secret 中的 hub.config.JupyterHub.cookie_secret 条目,然后执行一次新的 helm upgrade

一个 32 字节的加密安全随机生成字符串,用于对 hub 设置的安全 cookie 的值进行签名。如果未设置,jupyterhub 将在启动时生成一个,并将其保存在 hub 容器的 /srv/jupyterhub 目录下的文件 jupyterhub_cookie_secret 中。此处设置的值将使 JupyterHub 覆盖任何先前的文件。

如果您使用默认配置来存储数据库——即在持久卷上的 sqlite(hub.db.type 设置为默认的 sqlite-pvc),则完全不需要设置此项。如果您使用外部数据库,则必须明确设置此值——否则每次 hub pod 重启时,您的用户都会被登出。

更改此值将导致所有用户登录失效。如果此密钥泄露,立即将其更改为其他值,否则用户数据可能会受到威胁。

# to generate a value, run
openssl rand -hex 32

hub.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

hub.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "quay.io/jupyterhub/k8s-hub"

hub.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

hub.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

hub.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

hub.networkPolicy#

此配置涉及创建和配置 k8s NetworkPolicy 资源

hub.networkPolicy.enabled#

切换是否创建针对此 pod 的 NetworkPolicy 资源,这样做会将其通信限制为 NetworkPolicy 中明确允许的范围。

默认值: true

hub.networkPolicy.ingress#

除了核心功能所需的规则外,要添加的额外入口(ingress)规则。

默认值: []

hub.networkPolicy.egress#

除了核心功能所需以及通过 .egressAllowRules 添加的规则外,要添加的额外出口(egress)规则。

在 2.0.0 版更改: 默认值从提供一个非常宽松的允许所有出口的规则更改为不提供任何规则。不过,宽松的规则仍然通过将 .egressAllowRules 设置为 true 来提供。

例如,以下配置为 hub pod 禁用了更广泛宽松的 .privateIPs 出口允许规则,并提供了更严格范围的权限,以访问由 pod 标签标识的特定 k8s 本地服务。

hub:
  networkPolicy:
    egressAllowRules:
      privateIPs: false
    egress:
      - to:
          - podSelector:
              matchLabels:
                app.kubernetes.io/name: my-k8s-local-service
        ports:
          - protocol: TCP
            port: 5978

默认值: []

hub.networkPolicy.egressAllowRules#

这是一组预定义的规则,启用后将添加到 NetworkPolicy 的出口规则列表中。

最终的出口规则将是以下各项的组合

  • 针对 Helm chart 中相应 pod 功能的特定规则

  • 基于已启用的 egressAllowRules 标志的规则

  • 用户明确指定的规则

注意

此配置下的每个标志不会在 NetworkPolicy 资源中渲染为专用规则,而是会与其他标志组合成一个简化的规则集,以避免性能损失。

在 2.0.0 版新增。

hub.networkPolicy.egressAllowRules.cloudMetadataServer#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

启用此规则后,允许相应的 pod 与云元数据服务器建立出站连接。

请注意,nonPrivateIPs 规则允许所有非私有 IP 范围,但对云元数据服务器例外,这使得此配置成为允许访问云元数据服务器的决定性配置。

在 3.0.0 版更改: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables 同时配置为 true,以避免配置不明确。

默认值: true

hub.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与云元数据服务器建立出站连接。

依赖此规则进行单用户配置时,应同时禁用 singleuser.cloudMetadata.blockWithIptables,以避免配置不明确。

已知此规则相关的场景

  • 在 GKE 集群中,Cloud DNS 通过云元数据服务器的非私有 IP 访问。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

hub.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与 kube-system 命名空间中的 pod 建立出站连接。

已知此规则相关的场景

  • GKE、EKS、AKS 以及其他直接依赖 kube-system 命名空间中 kube-dnscoredns pod 的集群。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

hub.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与私有 IP 建立出站连接。

已知此规则相关的场景

  • GKE 集群通过一个未知的私有 IP 上的节点本地 DNS 缓存间接依赖 DNS 服务器。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

hub.networkPolicy.egressAllowRules.nonPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 与非私有 IP 范围(云元数据服务器除外)建立出站连接。这意味着相应的 pod 可以建立到互联网的连接,但不能(例如)连接到同一集群中运行的未受保护的 prometheus 服务器。

默认值: true

hub.networkPolicy.egressAllowRules.privateIPs#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

私有 IP 指的是 IP 范围 10.0.0.0/8172.16.0.0/12192.168.0.0/16

启用此规则后,允许相应的 pod 与内部 k8s 集群建立出站连接。这意味着用户可以访问互联网,但不能(例如)访问同一集群中运行的未受保护的 prometheus 服务器。

由于并非 k8s 集群中的所有工作负载都设置了 NetworkPolicies 来限制其入站连接,将此设置为 false 可以很好地防御来自控制这些 pod 中软件的人的恶意意图。

如果可能,请尽量避免将此设置为 true,因为它授予了广泛的权限,这些权限可以通过 .egress 更直接地指定。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

hub.networkPolicy.interNamespaceAccessLabels#

此配置选项决定了具有特定访问标签的其他命名空间中的命名空间和 pod 是否应被接受以允许入口(设置为 accept),或者在本地命名空间之外应用时是否应忽略这些标签(设置为 ignore)。

相应 NetworkPolicy 资源的可用访问标签是

  • hub.jupyter.org/network-access-hub: "true" (hub)

  • hub.jupyter.org/network-access-proxy-http: "true" (proxy.chp, proxy.traefik)

  • hub.jupyter.org/network-access-proxy-api: "true" (proxy.chp)

  • hub.jupyter.org/network-access-singleuser: "true" (singleuser)

默认值: "ignore"

hub.networkPolicy.allowedIngressPorts#

无论请求来源如何,都会添加一条允许在这些端口上进行入口的规则。proxy.chpproxy.traefik 的 networkPolicy 配置的默认设置是 [http, https],而其他 networkPolicies 的默认设置是 []

请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s Service 的端口名称或数字。

默认值: []

hub.db#

hub.db.type#

用于 hub 数据库的数据库后端类型。

Hub 需要一个持久化数据库才能运行,这让您可以指定它应该存储在哪里。

各种选项是

  1. sqlite-pvc

    使用一个保存在附加到 hub 的持久卷上的 sqlite 数据库。

    默认情况下,这个磁盘是由云提供商使用由存储类配置的动态配置创建的。您可以通过在 hub.db.pvc 下设置各种属性来自定义此磁盘的创建/附加方式。

    这是默认设置,对于大多数云提供商的部署应该都能很好地工作。

  2. sqlite-memory

    使用内存中的 sqlite 数据库。这只应该用于测试,因为每次 hub pod 重启时数据库都会被清除——导致 hub 丢失所有之前登录过的用户的记忆。

    当用于测试时,请确保每次 hub 重启时都删除 hub 创建的所有其他对象(例如用户 pod、用户 PVC 等)。否则您可能会遇到关于重复资源的错误。

  3. mysql

    使用外部托管的 mysql 数据库。

    如果使用此选项,您必须在 hub.db.url 中指定一个 sqlalchemy 连接字符串,用于连接到您想连接的 mysql 数据库。

    连接字符串的一般格式是

    mysql+pymysql://<db-username>:<db-password>@<db-hostname>:<db-port>/<db-name>
    

    连接字符串中指定的用户必须具有在指定数据库中创建表的权限。

  4. postgres

    使用外部托管的 postgres 数据库。

    如果使用此选项,您必须在 hub.db.url 中指定一个 sqlalchemy 连接字符串,用于连接到您想连接的 postgres 数据库。

    连接字符串的一般格式是

    postgresql+psycopg2://<db-username>:<db-password>@<db-hostname>:<db-port>/<db-name>
    

    连接字符串中指定的用户必须具有在指定数据库中创建表的权限。

  5. other

    使用除 mysql 或 postgres 之外的某种外部托管数据库。

    当使用 other 时,数据库密码必须作为 hub.db.url 的一部分传递,因为 hub.db.password 将被忽略。

默认值: "sqlite-pvc"

hub.db.pvc#

hub.db.typesqlite-pvc 时,自定义使用的持久卷声明 (Persistent Volume Claim)。

hub.db.pvc.annotations#

应用于包含 sqlite 数据库的 PVC 的注解。

有关注解的更多详细信息,请参阅Kubernetes 文档

hub.db.pvc.selector#

为包含 sqlite 数据库的 PVC 设置标签选择器。

当您使用特定的 PV,并且只想绑定到该 PV 时非常有用。

有关使用标签选择器绑定到哪个 PV 的更多详细信息,请参阅Kubernetes 文档

hub.db.pvc.storage#

为数据库磁盘请求的磁盘大小。

默认值: "1Gi"

hub.db.pvc.accessModes#

AccessModes 包含卷应具有的所需访问模式。有关更多信息,请参阅k8s 文档

默认值: ["ReadWriteOnce"]

hub.db.pvc.storageClassName#

声明所需的 StorageClass 名称。

如果这是一个空字符串,它将被设置为空字符串,而如果为 null,则根本不会被设置。

hub.db.pvc.subPath#

容器卷应从该卷中挂载的路径。默认为 "" (卷的根目录)。

hub.db.upgrade#

使用外部数据库的用户需要选择加入 JupyterHub 特定数据库模式的升级,如果 JupyterHub 版本升级需要的话。

hub.db.url#

hub.db.type 为 mysql 或 postgres 时的连接字符串。

有关此属性格式的更多详细信息,请参阅 hub.db.type 的文档。

hub.db.password#

hub.db.type 为 mysql 或 postgres 时的数据库密码。

hub.labels#

要添加到 hub pod 的额外标签。

要了解有关标签的更多信息,请参阅 Kubernetes 文档

hub.initContainers#

与 hub pod 一起运行的 initContainers 列表。请参阅 Kubernetes 文档

hub:
  initContainers:
    - name: init-myservice
      image: busybox:1.28
      command: ['sh', '-c', 'command1']
    - name: init-mydb
      image: busybox:1.28
      command: ['sh', '-c', 'command2']

默认值: []

hub.extraEnv#

应为 hub pod 设置的额外环境变量。

环境变量通常用于

  • 将参数传递给 hub.extraConfig 中的一些自定义代码。

  • 配置在 hub pod 中运行的代码,例如认证器或 spawner。

带有 $(ENV_VAR_NAME) 的字符串字面量将由 Kubelet(Kubernetes 的一部分)进行扩展。

hub:
  extraEnv:
    # basic notation (for literal values only)
    MY_ENV_VARS_NAME1: "my env var value 1"

    # explicit notation (the "name" field takes precedence)
    HUB_NAMESPACE:
      name: HUB_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace

    # implicit notation (the "name" field is implied)
    PREFIXED_HUB_NAMESPACE:
      value: "my-prefix-$(HUB_NAMESPACE)"
    SECRET_VALUE:
      valueFrom:
        secretKeyRef:
          name: my-k8s-secret
          key: password

有关更多信息,请参阅 Kubernetes EnvVar 规范

hub.extraConfig#

应该在 jupyterhub_config.py 中的任意额外基于 python 的配置。

这是一个应急方案——如果您想配置 JupyterHub 做一些这里没有作为选项提供的特定事情,您可以在这里编写原始的 Python 代码来实现。

extraConfig 是一个字典,因此可以在不同名称下有多个配置片段。配置部分根据键的字母顺序执行。

您可以在这里做的一些不详尽的例子

  • 子类化认证器/spawner 来做一些自定义的事情

  • 为不同的镜像集动态启动不同的镜像

  • 将 GitHub 认证器的 auth 令牌注入用户 pod

  • 您能想到的任何其他事情!

由于这通常是一个多行字符串,您希望使用 YAML 的 | 操作符来格式化它。

例如

hub:
  extraConfig:
    myConfig.py: |
      c.JupyterHub.something = 'something'
      c.Spawner.something_else = 'something else'

注意

在 JupyterHub 加载它之前不会进行代码验证!如果您在这里输入错误,它很可能会表现为 hub pod 启动失败并进入 Error 状态或随后的 CrashLoopBackoff 状态。

为了利用您自己的程序 linter 等,将 Python 代码不嵌入 YAML 文件中会很有用。要做到这一点,可以考虑使用 hub.extraFiles 并将文件挂载到 /usr/local/etc/jupyterhub/jupyterhub_config.d 以加载您的额外配置逻辑。

hub.fsGid#

注意

在 2.0.0 版本中已移除。请使用 hub.podSecurityContext 并指定 fsGroup

hub.service#

用于配置 JupyterHub 将在 Kubernetes 服务器上暴露的服务的对象。

hub.service.type#

要使用的 Kubernetes ServiceType。

默认类型是 ClusterIP。要了解有关服务类型的更多信息,请参阅 Kubernetes 文档

默认值: "ClusterIP"

hub.service.ports#

用于配置 hub 服务将部署在其上的端口的对象。

hub.service.ports.appProtocol#

与服务端口一起使用的应用程序协议。当外部应用程序尝试使用 hub 不支持的协议调用 hub 服务时,这可能是必需的。

hub.service.ports.nodePort#

部署 hub 服务所使用的 nodePort。

hub.service.annotations#

应用于 hub 服务的 Kubernetes 注解。

hub.service.extraPorts#

hub / 8081 之外,要添加到 Hub 服务对象的额外端口。这应该是一个包含 nameporttargetPort 的数组。有关更多详细信息,请参阅多端口服务

默认值: []

hub.service.loadBalancerIP#

hub Kubernetes 服务应暴露的公共 IP 地址。不建议直接暴露 hub。而是通过 proxy-public 服务将流量路由到 hub。

hub.pdb#

为此 Deployment 配置一个 PodDisruptionBudget。

对于我们不支持多副本并行运行的部署,这些默认是禁用的。目前只有用户调度器支持多副本并行运行。如果为只有一个副本的 Deployment 启用它们,它们将阻止例如节点的 kubectl drain 操作。

请注意,如果您旨在阻止会中断部署的 hub/proxy/autohttps pod 所在的节点缩减,您应该如此处所述为 Deployment 的 pod 添加注解。

"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

有关中断的更多详细信息,请参阅Kubernetes 文档

hub.pdb.enabled#

决定是否创建一个针对 Deployment 的 pod 的 PodDisruptionBudget。

默认值: false

hub.pdb.maxUnavailable#

在自愿中断期间可以不可用的最大 pod 数。

hub.pdb.minAvailable#

在自愿中断期间需要可用的最小 pod 数。

默认值: 1

hub.existingSecret#

此选项允许您提供一个现有 k8s Secret 的名称,与 chart 管理的 k8s Secret 一起使用。此 k8s Secret 的内容将与 chart 管理的 k8s Secret 合并,优先使用自管理的 k8s Secret。

警告

  1. 自管理的 k8s Secret 必须镜像 chart 管理的 secret 中的结构。

  2. proxy.secretToken(即 hub.config.ConfigurableHTTPProxy.auth_token)仅从 chart 管理的 k8s Secret 中读取。

hub.nodeSelector#

一个包含键值对的对象,表示标签。K8s 节点必须匹配所有这些标签,此 Pod 才能调度到它们上面。

disktype: ssd
nodetype: awesome

有关更多详细信息,请参阅Kubernetes 文档

hub.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

hub.activeServerLimit#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

hub.allowNamedServers#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

默认值: false

hub.annotations#

hub pod 的 K8s 注解。

hub.authenticatePrometheus#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

hub.concurrentSpawnLimit#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

默认值: 64

hub.consecutiveFailureLimit#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

默认值: 5

hub.podSecurityContext#

pod 安全上下文的 k8s 原生规范,详见文档

hub.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

hub.deploymentStrategy#

hub.deploymentStrategy.rollingUpdate#

hub.deploymentStrategy.type#

JupyterHub 不支持并行运行,因此我们默认使用 Recreate 的部署策略。

默认值: "Recreate"

hub.extraContainers#

Pod 的附加容器。使用 k8s 原生语法。

默认值: []

hub.extraVolumeMounts#

容器的附加卷挂载。使用 k8s 原生语法。

默认值: []

hub.extraVolumes#

Pod 的附加卷。使用 k8s 原生语法。

默认值: []

hub.livenessProbe#

hub.readinessProbe#

hub.namedServerLimitPerUser#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

hub.redirectToServer#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

hub.resources#

k8s 原生资源规范,详见文档

hub.lifecycle#

容器生命周期钩子的 k8s 原生规范,详见文档

hub.lifecycle.postStart#

hub.lifecycle.preStop#

hub.services#

您可以在这里注册 JupyterHub 服务。有关如何在此 Helm chart 中配置这些服务的详细信息,请继续阅读,但有关服务本身的详细信息,请阅读JupyterHub 的文档

注意

下面仅记录了可为服务配置的部分 JupyterHub 配置选项。即使此 Helm chart 无法识别,此处设置的所有配置都将生效。

JupyterHub 的原生配置接受一个服务对象列表,而此 Helm chart 只接受一个字典,其中每个键代表一个服务的名称,值是实际的服务对象。

通过此 Helm chart 配置 JupyterHub 服务时,可以省略 name 字段,因为它可以通过字典键推断出来。此外,可以省略 api_token 字段,因为从此 Helm chart 的 1.1.0 版本开始,它将自动生成。

如果您的外部服务需要访问为服务自动生成的 api_token,您可以从属于此 Helm chart 的 hub k8s Secret 中访问它,键名为 hub.services.my-service-config-key.apiToken

下面是两个服务的示例配置,第一个明确设置了 name 和 api_token,而第二个省略了这些,让名称从键名推断出来,并自动生成 api_token。

hub:
  services:
    my-service-1:
      admin: true
      name: my-explicitly-set-service-name
      api_token: my-explicitly-set-api_token

    # the name of the following service will be my-service-2
    # the api_token of the following service will be generated
    my-service-2: {}

如果您开发一个依赖于 JupyterHub Helm chart 的 Helm chart,并希望让某些 Pod 的环境变量填充如上注册的服务的 api_token,那么可以这样做。

# ... container specification of a pod ...
env:
  - name: MY_SERVICE_1_API_TOKEN
    valueFrom:
      secretKeyRef:
        # Don't hardcode the name, use the globally accessible
        # named templates part of the JupyterHub Helm chart.
        name: {{ include "jupyterhub.hub.fullname" . }}
        # Note below the use of the configuration key my-service-1
        # rather than the explicitly set service name.
        key: hub.services.my-service-1.apiToken

hub.services.name#

名称可以通过配置此服务的键名来推断,因此在此 Helm chart 配置 JupyterHub 时可以省略。

hub.services.admin#

hub.services.command#

hub.services.url#

hub.services.api_token#

如果未明确设置,api_token 将自动生成。它也将通过属于此 Helm chart 的 k8s Secret 在特定键下暴露出来。

有关详细信息,请参阅 hub.services 下的文档。

hub.services.apiToken#

JupyterHub Helm chart 为向后兼容性提供的 api_token 的别名,将被转换为 api_token。

hub.loadRoles#

您应该在这里定义 JupyterHub 角色,并将它们应用于 JupyterHub 用户、组和服务,以授予他们在 JupyterHub 的 RBAC 系统中定义的额外权限。

请用JupyterHub 关于 load_roles 的文档来补充此文档。

请注意,虽然 JupyterHub 的原生配置 load_roles 接受一个角色对象列表,但此 Helm chart 只接受一个字典,其中每个键代表一个角色的名称,值是实际的角色对象。

hub:
  loadRoles:
    teacher:
      description: Access to users' information and group membership

      # this role provides permissions to...
      scopes: [users, groups]

      # this role will be assigned to...
      users: [erik]
      services: [grading-service]
      groups: [teachers]

通过此 Helm chart 配置 JupyterHub 角色时,可以省略 name 字段,因为它可以通过字典键推断出来。

hub.shutdownOnLogout#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

hub.templatePaths#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

默认值: []

hub.templateVars#

JupyterHub 原生配置,有关更多信息,请参阅 JupyterHub 文档

hub.serviceAccount#

用于特定 pod 的专用 k8s ServiceAccount 的配置,此配置嵌套在该 pod 下。

hub.serviceAccount.create#

是否创建 ServiceAccount 资源。

默认值: true

hub.serviceAccount.name#

此配置有多种用途

  • 它将是相关 Pod 引用的 serviceAccountName

  • 如果设置了 create,创建的 ServiceAccount 资源将以此命名。

  • 如果设置了 rbac.create,相关的 (Cluster)RoleBindings 将绑定到此名称。

如果未明确提供,将使用默认名称。

hub.serviceAccount.annotations#

应用于 k8s ServiceAccount 的 Kubernetes 注解。

hub.extraPodSpec#

任意额外的 k8s pod 规范,以 YAML 对象形式提供。此设置的默认值是一个空对象,即没有额外配置。此属性的值将按原样增强到 pod 规范中。

对于有高级配置需求的 k8s 专家管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。滥用此设置可能会破坏您的部署和/或危及您的系统安全。

这是用于插入任意 pod 规范的四个相关设置之一

  1. hub.extraPodSpec

  2. proxy.chp.extraPodSpec

  3. proxy.traefik.extraPodSpec

  4. scheduling.userScheduler.extraPodSpec

  5. scheduling.userPlaceholder.extraPodSpec

这些设置的一个实际用途是启用主机网络。例如,要为 hub pod 配置主机网络,请将以下内容添加到您的 helm 配置值中

hub:
  extraPodSpec:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet

同样,要为代理 pod 配置主机网络,请添加以下内容

proxy:
  chp:
    extraPodSpec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet

注意:主机网络具有特殊的安全影响,并可能轻易破坏您的部署。这是一个示例——不是推荐。

有关最新的 pod 资源规范,请参阅 PodSpec

proxy#

proxy.chp#

配置由 jupyterhub 管理的 configurable-http-proxy (chp) pod,以将流量路由到自身和用户 pod。

proxy.chp.revisionHistoryLimit#

配置资源的 spec.revisionHistoryLimit。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。

有关更多信息,请参阅 Kubernetes 文档

proxy.chp.networkPolicy#

此配置涉及创建和配置 k8s NetworkPolicy 资源

proxy.chp.networkPolicy.enabled#

切换是否创建针对此 pod 的 NetworkPolicy 资源,这样做会将其通信限制为 NetworkPolicy 中明确允许的范围。

默认值: true

proxy.chp.networkPolicy.ingress#

除了核心功能所需的规则外,要添加的额外入口(ingress)规则。

默认值: []

proxy.chp.networkPolicy.egress#

除了核心功能所需以及通过 .egressAllowRules 添加的规则外,要添加的额外出口(egress)规则。

在 2.0.0 版更改: 默认值从提供一个非常宽松的允许所有出口的规则更改为不提供任何规则。不过,宽松的规则仍然通过将 .egressAllowRules 设置为 true 来提供。

例如,以下配置为 hub pod 禁用了更广泛宽松的 .privateIPs 出口允许规则,并提供了更严格范围的权限,以访问由 pod 标签标识的特定 k8s 本地服务。

hub:
  networkPolicy:
    egressAllowRules:
      privateIPs: false
    egress:
      - to:
          - podSelector:
              matchLabels:
                app.kubernetes.io/name: my-k8s-local-service
        ports:
          - protocol: TCP
            port: 5978

默认值: []

proxy.chp.networkPolicy.egressAllowRules#

这是一组预定义的规则,启用后将添加到 NetworkPolicy 的出口规则列表中。

最终的出口规则将是以下各项的组合

  • 针对 Helm chart 中相应 pod 功能的特定规则

  • 基于已启用的 egressAllowRules 标志的规则

  • 用户明确指定的规则

注意

此配置下的每个标志不会在 NetworkPolicy 资源中渲染为专用规则,而是会与其他标志组合成一个简化的规则集,以避免性能损失。

在 2.0.0 版新增。

proxy.chp.networkPolicy.egressAllowRules.cloudMetadataServer#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

启用此规则后,允许相应的 pod 与云元数据服务器建立出站连接。

请注意,nonPrivateIPs 规则允许所有非私有 IP 范围,但对云元数据服务器例外,这使得此配置成为允许访问云元数据服务器的决定性配置。

在 3.0.0 版更改: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables 同时配置为 true,以避免配置不明确。

默认值: true

proxy.chp.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与云元数据服务器建立出站连接。

依赖此规则进行单用户配置时,应同时禁用 singleuser.cloudMetadata.blockWithIptables,以避免配置不明确。

已知此规则相关的场景

  • 在 GKE 集群中,Cloud DNS 通过云元数据服务器的非私有 IP 访问。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

proxy.chp.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与 kube-system 命名空间中的 pod 建立出站连接。

已知此规则相关的场景

  • GKE、EKS、AKS 以及其他直接依赖 kube-system 命名空间中 kube-dnscoredns pod 的集群。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

proxy.chp.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与私有 IP 建立出站连接。

已知此规则相关的场景

  • GKE 集群通过一个未知的私有 IP 上的节点本地 DNS 缓存间接依赖 DNS 服务器。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

proxy.chp.networkPolicy.egressAllowRules.nonPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 与非私有 IP 范围(云元数据服务器除外)建立出站连接。这意味着相应的 pod 可以建立到互联网的连接,但不能(例如)连接到同一集群中运行的未受保护的 prometheus 服务器。

默认值: true

proxy.chp.networkPolicy.egressAllowRules.privateIPs#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

私有 IP 指的是 IP 范围 10.0.0.0/8172.16.0.0/12192.168.0.0/16

启用此规则后,允许相应的 pod 与内部 k8s 集群建立出站连接。这意味着用户可以访问互联网,但不能(例如)访问同一集群中运行的未受保护的 prometheus 服务器。

由于并非 k8s 集群中的所有工作负载都设置了 NetworkPolicies 来限制其入站连接,将此设置为 false 可以很好地防御来自控制这些 pod 中软件的人的恶意意图。

如果可能,请尽量避免将此设置为 true,因为它授予了广泛的权限,这些权限可以通过 .egress 更直接地指定。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

proxy.chp.networkPolicy.interNamespaceAccessLabels#

此配置选项决定了具有特定访问标签的其他命名空间中的命名空间和 pod 是否应被接受以允许入口(设置为 accept),或者在本地命名空间之外应用时是否应忽略这些标签(设置为 ignore)。

相应 NetworkPolicy 资源的可用访问标签是

  • hub.jupyter.org/network-access-hub: "true" (hub)

  • hub.jupyter.org/network-access-proxy-http: "true" (proxy.chp, proxy.traefik)

  • hub.jupyter.org/network-access-proxy-api: "true" (proxy.chp)

  • hub.jupyter.org/network-access-singleuser: "true" (singleuser)

默认值: "ignore"

proxy.chp.networkPolicy.allowedIngressPorts#

无论请求来源如何,都会添加一条允许在这些端口上进行入口的规则。proxy.chpproxy.traefik 的 networkPolicy 配置的默认设置是 [http, https],而其他 networkPolicies 的默认设置是 []

请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s Service 的端口名称或数字。

默认值: ["http", "https"]

proxy.chp.extraCommandLineFlags#

一个字符串列表,在启动 configurable-http-proxy 时作为命令行选项添加,该列表将使用 Helm 的模板函数 tpl 展开,该函数可以渲染花括号({{ ... }})内的 Helm 模板逻辑。

proxy:
  chp:
    extraCommandLineFlags:
      - "--auto-rewrite"
      - "--custom-header={{ .Values.custom.myStuff }}"

请注意,这些将最后附加,如果您两次提供相同的标志,将使用最后一个标志,这意味着您也可以覆盖默认标志值。

默认值: []

proxy.chp.extraEnv#

应为 chp pod 设置的额外环境变量。

环境变量通常在这里用于

  • 覆盖 HUB_SERVICE_PORT 或 HUB_SERVICE_HOST 的默认值

  • 为 SSL 密钥设置密码短语而设置 CONFIGPROXY_SSL_KEY_PASSPHRASE

带有 $(ENV_VAR_NAME) 的字符串字面量将由 Kubelet(Kubernetes 的一部分)进行扩展。

proxy:
  chp:
    extraEnv:
      # basic notation (for literal values only)
      MY_ENV_VARS_NAME1: "my env var value 1"

      # explicit notation (the "name" field takes precedence)
      CHP_NAMESPACE:
        name: CHP_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace

      # implicit notation (the "name" field is implied)
      PREFIXED_CHP_NAMESPACE:
        value: "my-prefix-$(CHP_NAMESPACE)"
      SECRET_VALUE:
        valueFrom:
          secretKeyRef:
            name: my-k8s-secret
            key: password

有关更多信息,请参阅 Kubernetes EnvVar 规范

proxy.chp.pdb#

为此 Deployment 配置一个 PodDisruptionBudget。

对于我们不支持多副本并行运行的部署,这些默认是禁用的。目前只有用户调度器支持多副本并行运行。如果为只有一个副本的 Deployment 启用它们,它们将阻止例如节点的 kubectl drain 操作。

请注意,如果您旨在阻止会中断部署的 hub/proxy/autohttps pod 所在的节点缩减,您应该如此处所述为 Deployment 的 pod 添加注解。

"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

有关中断的更多详细信息,请参阅Kubernetes 文档

proxy.chp.pdb.enabled#

决定是否创建一个针对 Deployment 的 pod 的 PodDisruptionBudget。

默认值: false

proxy.chp.pdb.maxUnavailable#

在自愿中断期间可以不可用的最大 pod 数。

proxy.chp.pdb.minAvailable#

在自愿中断期间需要可用的最小 pod 数。

默认值: 1

proxy.chp.nodeSelector#

一个包含键值对的对象,表示标签。K8s 节点必须匹配所有这些标签,此 Pod 才能调度到它们上面。

disktype: ssd
nodetype: awesome

有关更多详细信息,请参阅Kubernetes 文档

proxy.chp.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

proxy.chp.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

proxy.chp.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

proxy.chp.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "quay.io/jupyterhub/configurable-http-proxy"

proxy.chp.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

默认值: "4.6.3"

proxy.chp.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

proxy.chp.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

proxy.chp.livenessProbe#

proxy.chp.readinessProbe#

proxy.chp.resources#

k8s 原生资源规范,详见文档

proxy.chp.defaultTarget#

覆盖代理的默认路由目标的 URL。默认为 JupyterHub 本身。这通常只在 JupyterHub 未运行时生效,因为 JupyterHub 启动后会添加自身为默认目标。

proxy.chp.errorTarget#

覆盖代理的错误目标的 URL。默认为 JupyterHub 本身。用于减轻 Hub 的负载或产生比 Hub 默认更有信息的错误消息,例如在高度定制的部署中,如 BinderHub。有关实现错误目标的详细信息,请参阅 Configurable HTTP Proxy。

proxy.chp.extraPodSpec#

任意额外的 k8s pod 规范,以 YAML 对象形式提供。此设置的默认值是一个空对象,即没有额外配置。此属性的值将按原样增强到 pod 规范中。

对于有高级配置需求的 k8s 专家管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。滥用此设置可能会破坏您的部署和/或危及您的系统安全。

这是用于插入任意 pod 规范的四个相关设置之一

  1. hub.extraPodSpec

  2. proxy.chp.extraPodSpec

  3. proxy.traefik.extraPodSpec

  4. scheduling.userScheduler.extraPodSpec

  5. scheduling.userPlaceholder.extraPodSpec

这些设置的一个实际用途是启用主机网络。例如,要为 hub pod 配置主机网络,请将以下内容添加到您的 helm 配置值中

hub:
  extraPodSpec:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet

同样,要为代理 pod 配置主机网络,请添加以下内容

proxy:
  chp:
    extraPodSpec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet

注意:主机网络具有特殊的安全影响,并可能轻易破坏您的部署。这是一个示例——不是推荐。

有关最新的 pod 资源规范,请参阅 PodSpec

proxy.secretToken#

注意

从版本 1.0.0 开始,这将自动生成,无需手动设置。

如果您希望重置生成的密钥,可以使用 kubectl edit 对通常名为 hub 的 k8s Secret 进行编辑,并移除 k8s Secret 中的 hub.config.ConfigurableHTTPProxy.auth_token 条目,然后执行一次新的 helm upgrade

一个 32 字节的加密安全随机生成字符串,用于保护 hub pod 和运行 configurable-http-proxy 实例的 proxy pod 之间的通信。

# to generate a value, run
openssl rand -hex 32

更改此值将导致 proxy 和 hub pod 重启。定期轮换这些值是良好的安全实践。如果此密钥泄露,立即将其更改为其他值,否则用户数据可能会受到威胁。

proxy.service#

k8s Service proxy-public 的配置,它将指向运行 Traefik 进行 TLS 终止的 autohttps pod,或运行 ConfigurableHTTPProxy 的 proxy pod。来自互联网用户的入站流量应始终通过此 k8s Service。

当此服务指向 autohttps pod,然后路由到 proxy pod 时,将添加一个名为 proxy-http 的 k8s Service,该服务指向 proxy pod,并且只接受 80 端口上的 HTTP 流量。

proxy.service.type#

默认 LoadBalancer。要了解有关服务类型的更多信息,请参阅 Kubernetes 文档

默认值: "LoadBalancer"

proxy.service.labels#

要添加到代理服务的额外标签。

要了解有关标签的更多信息,请参阅 Kubernetes 文档

proxy.service.annotations#

应用于暴露代理的服务的注解。

有关注解的更多详细信息,请参阅Kubernetes 文档

proxy.service.nodePorts#

用于设置为 http 和 https 暴露服务的 NodePorts 的对象。

有关 NodePorts 的更多详细信息,请参阅Kubernetes 文档

proxy.service.nodePorts.http#

proxy-public 服务应暴露的 HTTP 端口。

proxy.service.nodePorts.https#

proxy-public 服务应暴露的 HTTPS 端口。

proxy.service.disableHttpPort#

默认 false

如果为 true,将不再暴露用于入站 HTTP 流量的 80 端口。这不应与 proxy.https.type=letsencryptproxy.https.enabled=false 一起使用,因为它会移除唯一暴露的端口。

默认值: false

proxy.service.extraPorts#

k8s Service 应接受入站流量的额外端口,这些流量将被重定向到 autohttps pod (traefik) 或 proxy pod (chp)。

有关此列表中项目的结构,请参阅Kubernetes 文档

默认值: []

proxy.service.loadBalancerIP#

proxy-public Kubernetes 服务应暴露的公共 IP 地址。此条目将最终指向 JupyterHub 管理的可配置代理服务器,该服务器将流量导向 /user 路径下的用户 pod 和 /hub 路径下的 hub pod。

如果您想使用固定的外部 IP 地址而不是动态获取的 IP 地址,请设置此项。如果您有一个域名,并且希望将其指向一个特定的 IP 并确保它不会改变,这很有用。

proxy.service.loadBalancerSourceRanges#

允许访问负载均衡器服务的 IP CIDR 范围列表。默认为允许所有人访问。

默认值: []

proxy.https#

用于自定义 JupyterHub 代理使用的 HTTPS 设置的对象。有关为您的 JupyterHub 配置 HTTPS 的更多信息,请参阅我们安全指南中的HTTPS 部分

proxy.https.enabled#

指示是否应在代理上启用 HTTPS。如果提供了 https 对象,则默认为 true

默认值: false

proxy.https.type#

使用的 HTTPS 加密类型。决定通过 HTTPS 通信时使用的端口和网络策略。将此设置为 secret 会将类型设置为手动 HTTPS,需要提供一个密钥在 https.secret 对象中。默认为 letsencrypt

默认值: "letsencrypt"

proxy.https.letsencrypt#

proxy.https.letsencrypt.contactEmail#

用于由 Let's Encrypt 自动配置的 HTTPS 证书的联系电子邮件。更多信息请参阅设置自动 HTTPS。自动 HTTPS 必需。

proxy.https.letsencrypt.acmeServer#

Let's Encrypt 是可以提供证书的各种 ACME 服务器之一,默认使用其生产服务器。

Let's Encrypt staging: https://acme-staging-v02.api.letsencrypt.org/directory Let's Encrypt production: acmeServer: https://acme-v02.api.letsencrypt.org/directory

默认值: "https://acme-v02.api.letsencrypt.org/directory"

proxy.https.manual#

用于为手动 HTTPS 配置提供自己的证书的对象。在将 https.type 设置为 manual 时提供。请参阅设置手动 HTTPS

proxy.https.manual.key#

用于 HTTPS 的 RSA 私钥。以以下形式提供

key: |
  -----BEGIN RSA PRIVATE KEY-----
  ...
  -----END RSA PRIVATE KEY-----
proxy.https.manual.cert#

用于 HTTPS 的证书。以以下形式提供

cert: |
  -----BEGIN CERTIFICATE-----
  ...
  -----END CERTIFICATE-----

proxy.https.secret#

在将 https.type 设置为 secret 时提供的密钥。

proxy.https.secret.name#

密钥的名称

proxy.https.secret.key#

用于 HTTPS 的私钥路径。示例:'tls.key'

默认值: "tls.key"

proxy.https.secret.crt#

用于 HTTPS 的证书路径。示例:'tls.crt'

默认值: "tls.crt"

proxy.https.hosts#

您的域名列表形式。自动 HTTPS 必需。请参阅设置自动 HTTPS。提供方式如下

hosts:
  - <your-domain-name>

默认值: []

proxy.traefik#

配置用于在启用 ‘autohttps’ 时终止 TLS 的 traefik 代理

proxy.traefik.revisionHistoryLimit#

配置资源的 spec.revisionHistoryLimit。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。

有关更多信息,请参阅 Kubernetes 文档

proxy.traefik.labels#

要添加到 traefik pod 的额外标签。

要了解有关标签的更多信息,请参阅 Kubernetes 文档

proxy.traefik.networkPolicy#

此配置涉及创建和配置 k8s NetworkPolicy 资源

proxy.traefik.networkPolicy.enabled#

切换是否创建针对此 pod 的 NetworkPolicy 资源,这样做会将其通信限制为 NetworkPolicy 中明确允许的范围。

默认值: true

proxy.traefik.networkPolicy.ingress#

除了核心功能所需的规则外,要添加的额外入口(ingress)规则。

默认值: []

proxy.traefik.networkPolicy.egress#

除了核心功能所需以及通过 .egressAllowRules 添加的规则外,要添加的额外出口(egress)规则。

在 2.0.0 版更改: 默认值从提供一个非常宽松的允许所有出口的规则更改为不提供任何规则。不过,宽松的规则仍然通过将 .egressAllowRules 设置为 true 来提供。

例如,以下配置为 hub pod 禁用了更广泛宽松的 .privateIPs 出口允许规则,并提供了更严格范围的权限,以访问由 pod 标签标识的特定 k8s 本地服务。

hub:
  networkPolicy:
    egressAllowRules:
      privateIPs: false
    egress:
      - to:
          - podSelector:
              matchLabels:
                app.kubernetes.io/name: my-k8s-local-service
        ports:
          - protocol: TCP
            port: 5978

默认值: []

proxy.traefik.networkPolicy.egressAllowRules#

这是一组预定义的规则,启用后将添加到 NetworkPolicy 的出口规则列表中。

最终的出口规则将是以下各项的组合

  • 针对 Helm chart 中相应 pod 功能的特定规则

  • 基于已启用的 egressAllowRules 标志的规则

  • 用户明确指定的规则

注意

此配置下的每个标志不会在 NetworkPolicy 资源中渲染为专用规则,而是会与其他标志组合成一个简化的规则集,以避免性能损失。

在 2.0.0 版新增。

proxy.traefik.networkPolicy.egressAllowRules.cloudMetadataServer#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

启用此规则后,允许相应的 pod 与云元数据服务器建立出站连接。

请注意,nonPrivateIPs 规则允许所有非私有 IP 范围,但对云元数据服务器例外,这使得此配置成为允许访问云元数据服务器的决定性配置。

在 3.0.0 版更改: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables 同时配置为 true,以避免配置不明确。

默认值: true

proxy.traefik.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与云元数据服务器建立出站连接。

依赖此规则进行单用户配置时,应同时禁用 singleuser.cloudMetadata.blockWithIptables,以避免配置不明确。

已知此规则相关的场景

  • 在 GKE 集群中,Cloud DNS 通过云元数据服务器的非私有 IP 访问。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

proxy.traefik.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与 kube-system 命名空间中的 pod 建立出站连接。

已知此规则相关的场景

  • GKE、EKS、AKS 以及其他直接依赖 kube-system 命名空间中 kube-dnscoredns pod 的集群。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

proxy.traefik.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与私有 IP 建立出站连接。

已知此规则相关的场景

  • GKE 集群通过一个未知的私有 IP 上的节点本地 DNS 缓存间接依赖 DNS 服务器。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

proxy.traefik.networkPolicy.egressAllowRules.nonPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 与非私有 IP 范围(云元数据服务器除外)建立出站连接。这意味着相应的 pod 可以建立到互联网的连接,但不能(例如)连接到同一集群中运行的未受保护的 prometheus 服务器。

默认值: true

proxy.traefik.networkPolicy.egressAllowRules.privateIPs#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

私有 IP 指的是 IP 范围 10.0.0.0/8172.16.0.0/12192.168.0.0/16

启用此规则后,允许相应的 pod 与内部 k8s 集群建立出站连接。这意味着用户可以访问互联网,但不能(例如)访问同一集群中运行的未受保护的 prometheus 服务器。

由于并非 k8s 集群中的所有工作负载都设置了 NetworkPolicies 来限制其入站连接,将此设置为 false 可以很好地防御来自控制这些 pod 中软件的人的恶意意图。

如果可能,请尽量避免将此设置为 true,因为它授予了广泛的权限,这些权限可以通过 .egress 更直接地指定。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

proxy.traefik.networkPolicy.interNamespaceAccessLabels#

此配置选项决定了具有特定访问标签的其他命名空间中的命名空间和 pod 是否应被接受以允许入口(设置为 accept),或者在本地命名空间之外应用时是否应忽略这些标签(设置为 ignore)。

相应 NetworkPolicy 资源的可用访问标签是

  • hub.jupyter.org/network-access-hub: "true" (hub)

  • hub.jupyter.org/network-access-proxy-http: "true" (proxy.chp, proxy.traefik)

  • hub.jupyter.org/network-access-proxy-api: "true" (proxy.chp)

  • hub.jupyter.org/network-access-singleuser: "true" (singleuser)

默认值: "ignore"

proxy.traefik.networkPolicy.allowedIngressPorts#

无论请求来源如何,都会添加一条允许在这些端口上进行入口的规则。proxy.chpproxy.traefik 的 networkPolicy 配置的默认设置是 [http, https],而其他 networkPolicies 的默认设置是 []

请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s Service 的端口名称或数字。

默认值: ["http", "https"]

proxy.traefik.extraInitContainers#

与 traefik pod 一起运行的 extraInitContainers 列表,在 Chart 中设置的容器之后运行。请参阅 Kubernetes 文档

proxy:
  traefik:
    extraInitContainers:
      - name: init-myservice
        image: busybox:1.28
        command: ['sh', '-c', 'command1']
      - name: init-mydb
        image: busybox:1.28
        command: ['sh', '-c', 'command2']

默认值: []

proxy.traefik.extraEnv#

应为 traefik pod 设置的额外环境变量。

此处的环境变量可用于配置 traefik。

带有 $(ENV_VAR_NAME) 的字符串字面量将由 Kubelet(Kubernetes 的一部分)进行扩展。

proxy:
  traefik:
    extraEnv:
      # basic notation (for literal values only)
      MY_ENV_VARS_NAME1: "my env var value 1"

      # explicit notation (the "name" field takes precedence)
      TRAEFIK_NAMESPACE:
        name: TRAEFIK_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace

      # implicit notation (the "name" field is implied)
      PREFIXED_TRAEFIK_NAMESPACE:
        value: "my-prefix-$(TRAEFIK_NAMESPACE)"
      SECRET_VALUE:
        valueFrom:
          secretKeyRef:
            name: my-k8s-secret
            key: password

有关更多信息,请参阅 Kubernetes EnvVar 规范

proxy.traefik.pdb#

为此 Deployment 配置一个 PodDisruptionBudget。

对于我们不支持多副本并行运行的部署,这些默认是禁用的。目前只有用户调度器支持多副本并行运行。如果为只有一个副本的 Deployment 启用它们,它们将阻止例如节点的 kubectl drain 操作。

请注意,如果您旨在阻止会中断部署的 hub/proxy/autohttps pod 所在的节点缩减,您应该如此处所述为 Deployment 的 pod 添加注解。

"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

有关中断的更多详细信息,请参阅Kubernetes 文档

proxy.traefik.pdb.enabled#

决定是否创建一个针对 Deployment 的 pod 的 PodDisruptionBudget。

默认值: false

proxy.traefik.pdb.maxUnavailable#

在自愿中断期间可以不可用的最大 pod 数。

proxy.traefik.pdb.minAvailable#

在自愿中断期间需要可用的最小 pod 数。

默认值: 1

proxy.traefik.nodeSelector#

一个包含键值对的对象,表示标签。K8s 节点必须匹配所有这些标签,此 Pod 才能调度到它们上面。

disktype: ssd
nodetype: awesome

有关更多详细信息,请参阅Kubernetes 文档

proxy.traefik.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

proxy.traefik.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

proxy.traefik.extraDynamicConfig#

这指的是 traefik 的启动后配置。

此 Helm chart 已提供此类配置,因此您可以在此处合并额外的配置。如果您要使用此配置,您可能需要检查此处声明的默认配置。

proxy.traefik.extraPorts#

您希望在 autohttps pod 中的 traefik 容器上公开的额外端口,以 k8s 原生方式格式化。

默认值: []

proxy.traefik.extraStaticConfig#

这指的是 traefik 的启动配置。

此 Helm chart 已提供此类配置,因此您可以在此处合并额外的配置。如果您要使用此配置,您可能需要检查此处声明的默认配置。

proxy.traefik.extraVolumes#

Pod 的附加卷。使用 k8s 原生语法。

默认值: []

proxy.traefik.extraVolumeMounts#

容器的附加卷挂载。使用 k8s 原生语法。

默认值: []

proxy.traefik.hsts#

本节涉及 HTTP 严格传输安全 (HSTS) 响应头。它可以作为对访问 Web 浏览器的请求,在未来的一段时间内强制执行 HTTPS,并且可以选择性地应用于未来对子域的请求。

这些设置与我们用作 TLS 终止代理的 traefik 配置有关。

有关更多信息,请参阅 Mozilla 的文档

proxy.traefik.hsts.includeSubdomains#

默认值: false

proxy.traefik.hsts.maxAge#

默认值: 15724800

proxy.traefik.hsts.preload#

默认值: false

proxy.traefik.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

proxy.traefik.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "traefik"

proxy.traefik.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

默认值: "v3.3.5"

proxy.traefik.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

proxy.traefik.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

proxy.traefik.resources#

k8s 原生资源规范,详见文档

proxy.traefik.serviceAccount#

用于特定 pod 的专用 k8s ServiceAccount 的配置,此配置嵌套在该 pod 下。

proxy.traefik.serviceAccount.create#

是否创建 ServiceAccount 资源。

默认值: true

proxy.traefik.serviceAccount.name#

此配置有多种用途

  • 它将是相关 Pod 引用的 serviceAccountName

  • 如果设置了 create,创建的 ServiceAccount 资源将以此命名。

  • 如果设置了 rbac.create,相关的 (Cluster)RoleBindings 将绑定到此名称。

如果未明确提供,将使用默认名称。

proxy.traefik.serviceAccount.annotations#

应用于 k8s ServiceAccount 的 Kubernetes 注解。

proxy.traefik.extraPodSpec#

任意额外的 k8s pod 规范,以 YAML 对象形式提供。此设置的默认值是一个空对象,即没有额外配置。此属性的值将按原样增强到 pod 规范中。

对于有高级配置需求的 k8s 专家管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。滥用此设置可能会破坏您的部署和/或危及您的系统安全。

这是用于插入任意 pod 规范的四个相关设置之一

  1. hub.extraPodSpec

  2. proxy.chp.extraPodSpec

  3. proxy.traefik.extraPodSpec

  4. scheduling.userScheduler.extraPodSpec

  5. scheduling.userPlaceholder.extraPodSpec

这些设置的一个实际用途是启用主机网络。例如,要为 hub pod 配置主机网络,请将以下内容添加到您的 helm 配置值中

hub:
  extraPodSpec:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet

同样,要为代理 pod 配置主机网络,请添加以下内容

proxy:
  chp:
    extraPodSpec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet

注意:主机网络具有特殊的安全影响,并可能轻易破坏您的部署。这是一个示例——不是推荐。

有关最新的 pod 资源规范,请参阅 PodSpec

proxy.labels#

代理 pod 的 K8s 标签。

注意

为保持一致性,这实际上应该位于 proxy.chp.labels 下,但由于历史原因没有。

proxy.annotations#

代理 pod 的 K8s 注解。

注意

为保持一致性,这实际上应该位于 proxy.chp.annotations 下,但由于历史原因没有。

proxy.deploymentStrategy#

proxy.deploymentStrategy.rollingUpdate#

proxy.deploymentStrategy.type#

虽然运行 configurable-http-proxy 的代理 pod 可以并行运行,但并行运行的两个实例不会同时从 JupyterHub 接收关于如何路由流量的更新。因此,我们默认使用 Recreate 而不是 RollingUpdate 的部署策略。

默认值: "Recreate"

proxy.secretSync#

此配置部分指的是在 autohttps pod 中运行的 sidecar 容器的配置,它与负责 TLS 终止的 traefik 容器并排运行。

此容器的目的是从 k8s Secret 中存储和加载 TLS 证书。TLS 证书由在 traefik 容器内运行的 ACME 客户端 (LEGO) 获取,traefik 使用这些证书进行 TLS 终止。

proxy.secretSync.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

proxy.secretSync.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

proxy.secretSync.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "quay.io/jupyterhub/k8s-secret-sync"

proxy.secretSync.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a
proxy.secretSync.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

proxy.secretSync.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

proxy.secretSync.resources#

k8s 原生资源规范,详见文档

singleuser#

用于自定义用户登录后提供的环境的选项。

singleuser.networkPolicy#

此配置涉及创建和配置 k8s NetworkPolicy 资源

singleuser.networkPolicy.enabled#

切换是否创建针对此 pod 的 NetworkPolicy 资源,这样做会将其通信限制为 NetworkPolicy 中明确允许的范围。

默认值: true

singleuser.networkPolicy.ingress#

除了核心功能所需的规则外,要添加的额外入口(ingress)规则。

默认值: []

singleuser.networkPolicy.egress#

除了核心功能所需以及通过 .egressAllowRules 添加的规则外,要添加的额外出口(egress)规则。

在 2.0.0 版更改: 默认值从提供一个非常宽松的允许所有出口的规则更改为不提供任何规则。不过,宽松的规则仍然通过将 .egressAllowRules 设置为 true 来提供。

例如,以下配置为 hub pod 禁用了更广泛宽松的 .privateIPs 出口允许规则,并提供了更严格范围的权限,以访问由 pod 标签标识的特定 k8s 本地服务。

hub:
  networkPolicy:
    egressAllowRules:
      privateIPs: false
    egress:
      - to:
          - podSelector:
              matchLabels:
                app.kubernetes.io/name: my-k8s-local-service
        ports:
          - protocol: TCP
            port: 5978

默认值: []

singleuser.networkPolicy.egressAllowRules#

这是一组预定义的规则,启用后将添加到 NetworkPolicy 的出口规则列表中。

最终的出口规则将是以下各项的组合

  • 针对 Helm chart 中相应 pod 功能的特定规则

  • 基于已启用的 egressAllowRules 标志的规则

  • 用户明确指定的规则

注意

此配置下的每个标志不会在 NetworkPolicy 资源中渲染为专用规则,而是会与其他标志组合成一个简化的规则集,以避免性能损失。

在 2.0.0 版新增。

singleuser.networkPolicy.egressAllowRules.cloudMetadataServer#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

启用此规则后,允许相应的 pod 与云元数据服务器建立出站连接。

请注意,nonPrivateIPs 规则允许所有非私有 IP 范围,但对云元数据服务器例外,这使得此配置成为允许访问云元数据服务器的决定性配置。

在 3.0.0 版更改: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables 同时配置为 true,以避免配置不明确。

默认值: false

singleuser.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与云元数据服务器建立出站连接。

依赖此规则进行单用户配置时,应同时禁用 singleuser.cloudMetadata.blockWithIptables,以避免配置不明确。

已知此规则相关的场景

  • 在 GKE 集群中,Cloud DNS 通过云元数据服务器的非私有 IP 访问。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

singleuser.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与 kube-system 命名空间中的 pod 建立出站连接。

已知此规则相关的场景

  • GKE、EKS、AKS 以及其他直接依赖 kube-system 命名空间中 kube-dnscoredns pod 的集群。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

在 3.0.0 版新增。

默认值: true

singleuser.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 通过端口 53 与私有 IP 建立出站连接。

已知此规则相关的场景

  • GKE 集群通过一个未知的私有 IP 上的节点本地 DNS 缓存间接依赖 DNS 服务器。

注意

由于 k8s 集群设置方式不同,此 chart 不知道如何识别 pod 将依赖的 DNS 服务器。因此,默认启用多个规则以确保 DNS 连接。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: true

singleuser.networkPolicy.egressAllowRules.nonPrivateIPs#

对于所有网络策略,默认为 true

启用此规则后,允许相应的 pod 与非私有 IP 范围(云元数据服务器除外)建立出站连接。这意味着相应的 pod 可以建立到互联网的连接,但不能(例如)连接到同一集群中运行的未受保护的 prometheus 服务器。

默认值: true

singleuser.networkPolicy.egressAllowRules.privateIPs#

对于单用户服务器,默认为 false,但对于所有其他网络策略,默认为 true

私有 IP 指的是 IP 范围 10.0.0.0/8172.16.0.0/12192.168.0.0/16

启用此规则后,允许相应的 pod 与内部 k8s 集群建立出站连接。这意味着用户可以访问互联网,但不能(例如)访问同一集群中运行的未受保护的 prometheus 服务器。

由于并非 k8s 集群中的所有工作负载都设置了 NetworkPolicies 来限制其入站连接,将此设置为 false 可以很好地防御来自控制这些 pod 中软件的人的恶意意图。

如果可能,请尽量避免将此设置为 true,因为它授予了广泛的权限,这些权限可以通过 .egress 更直接地指定。

警告

由于已知限制,此规则预计在依赖 Cilium 强制执行 NetworkPolicy 规则的集群中(包括具有 Dataplane v2 的 GKE 集群)不起作用。

默认值: false

singleuser.networkPolicy.interNamespaceAccessLabels#

此配置选项决定了具有特定访问标签的其他命名空间中的命名空间和 pod 是否应被接受以允许入口(设置为 accept),或者在本地命名空间之外应用时是否应忽略这些标签(设置为 ignore)。

相应 NetworkPolicy 资源的可用访问标签是

  • hub.jupyter.org/network-access-hub: "true" (hub)

  • hub.jupyter.org/network-access-proxy-http: "true" (proxy.chp, proxy.traefik)

  • hub.jupyter.org/network-access-proxy-api: "true" (proxy.chp)

  • hub.jupyter.org/network-access-singleuser: "true" (singleuser)

默认值: "ignore"

singleuser.networkPolicy.allowedIngressPorts#

无论请求来源如何,都会添加一条允许在这些端口上进行入口的规则。proxy.chpproxy.traefik 的 networkPolicy 配置的默认设置是 [http, https],而其他 networkPolicies 的默认设置是 []

请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s Service 的端口名称或数字。

默认值: []

singleuser.podNameTemplate#

KubeSpawner.pod_name_template 的直通配置。

singleuser.cpu#

设置对每个用户强制执行的 CPU 限制和保证。

有关更多信息,请参阅 Kubernetes 文档

singleuser.cpu.limit#

singleuser.cpu.guarantee#

singleuser.memory#

设置对每个用户强制执行的内存限制和保证。

有关更多信息,请参阅 Kubernetes 文档

singleuser.memory.limit#

singleuser.memory.guarantee#

请注意,此字段在 Kubernetes API 中被称为 requests

默认值: "1G"

singleuser.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

singleuser.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "quay.io/jupyterhub/k8s-singleuser-sample"

singleuser.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

singleuser.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

singleuser.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

singleuser.initContainers#

在每个 singleuser pod 中运行的 initContainers 列表。请参阅 Kubernetes 文档

singleuser:
  initContainers:
    - name: init-myservice
      image: busybox:1.28
      command: ['sh', '-c', 'command1']
    - name: init-mydb
      image: busybox:1.28
      command: ['sh', '-c', 'command2']

默认值: []

singleuser.profileList#

有关 profile list 的更多信息,请参阅 KubeSpawner 的文档,因为这只是该配置的直通。

注意

image-pullers 知道 singleuser.profileList 中的镜像覆盖,但如果您在 JupyterHub 的 `c.KubeSpawner.profile_list 配置中进行配置,则它们不会知道。

singleuser:
  profileList:
    - display_name: "Default: Shared, 8 CPU cores"
      description: "Your code will run on a shared machine with CPU only."
      default: True
    - display_name: "Personal, 4 CPU cores & 26GB RAM, 1 NVIDIA Tesla K80 GPU"
      description: "Your code will run a personal machine with a GPU."
      kubespawner_override:
        extra_resource_limits:
          nvidia.com/gpu: "1"

默认值: []

singleuser.extraFiles#

一个字典,包含在 pod 容器启动时注入的额外文件。例如,这可用于注入:配置文件、自定义用户界面模板、图像等。

# NOTE: "hub" is used in this example, but the configuration is the
#       same for "singleuser".
hub:
  extraFiles:
    # The file key is just a reference that doesn't influence the
    # actual file name.
    <file key>:
      # mountPath is required and must be the absolute file path.
      mountPath: <full file path>

      # Choose one out of the three ways to represent the actual file
      # content: data, stringData, or binaryData.
      #
      # data should be set to a mapping (dictionary). It will in the
      # end be rendered to either YAML, JSON, or TOML based on the
      # filename extension that are required to be either .yaml, .yml,
      # .json, or .toml.
      #
      # If your content is YAML, JSON, or TOML, it can make sense to
      # use data to represent it over stringData as data can be merged
      # instead of replaced if set partially from separate Helm
      # configuration files.
      #
      # Both stringData and binaryData should be set to a string
      # representing the content, where binaryData should be the
      # base64 encoding of the actual file content.
      #
      data:
        myConfig:
          myMap:
            number: 123
            string: "hi"
          myList:
            - 1
            - 2
      stringData: |
        hello world!
      binaryData: aGVsbG8gd29ybGQhCg==

      # mode is by default 0644 and you can optionally override it
      # either by octal notation (example: 0400) or decimal notation
      # (example: 256).
      mode: <file system permissions>

使用 –set-file

为避免在 Helm chart 配置中嵌入整个文件,您可以在 helm upgrade 期间使用 --set-file 标志来设置 stringData 或 binaryData 字段。

hub:
  extraFiles:
    my_image:
      mountPath: /usr/local/share/jupyterhub/static/my_image.png

    # Files in /usr/local/etc/jupyterhub/jupyterhub_config.d are
    # automatically loaded in alphabetical order of the final file
    # name when JupyterHub starts.
    my_config:
      mountPath: /usr/local/etc/jupyterhub/jupyterhub_config.d/my_jupyterhub_config.py
# --set-file expects a text based file, so you need to base64 encode
# it manually first.
base64 my_image.png > my_image.png.b64

helm upgrade <...> \
    --set-file hub.extraFiles.my_image.binaryData=./my_image.png.b64 \
    --set-file hub.extraFiles.my_config.stringData=./my_jupyterhub_config.py

常见用途

  1. JupyterHub 模板定制

    您可以通过向 /usr/local/share/jupyterhub/templates 注入新的模板来替换 hub pod 中的默认 JupyterHub 用户界面模板。这些模板可以引用注入到 /usr/local/share/jupyterhub/static 的自定义图像。

  2. JupyterHub 独立文件配置

    您可以将独立的 .py 文件注入到 /usr/local/etc/jupyterhub/jupyterhub_config.d 中自动加载,而不是通过 hub.extraConfig 将 JupyterHub python 配置作为字符串嵌入到 YAML 文件中。

  3. 灵活配置

    通过注入文件,您不必将它们嵌入到需要重新构建的 docker 镜像中。

    如果您的配置文件是 YAML/JSON/TOML 文件,您也可以使用 data 而不是 stringData,这允许您在不同的 Helm 配置文件中设置各种配置。这有助于依赖的 chart 仅覆盖文件的一部分配置,或者允许通过多个 Helm 配置文件设置配置。

限制

  1. 文件大小

    hub.extraFilessingleuser.extraFiles 中的文件分别存储在它们自己的 k8s Secret 资源中。由于 k8s Secret 通常限制为 1MB,您的总文件大小将受限于小于 1MB,因为还存在 base64 编码,这会使可用容量减少到 75%。

  2. 文件更新

    挂载的文件仅在容器启动时设置。这是因为我们使用 subPath,这是为了避免替换我们挂载的整个目录的内容所必需的。

singleuser.extraEnv#

应为用户 pod 设置的额外环境变量。

带有 $(ENV_VAR_NAME) 的字符串字面量将由 Kubelet(Kubernetes 的一部分)展开。请注意,用户 pod 已有权访问一组您可以使用的环境变量,例如 JUPYTERHUB_USERJUPYTERHUB_HOST。有关这些的更多信息,请检查此源代码

singleuser:
  extraEnv:
    # basic notation (for literal values only)
    MY_ENV_VARS_NAME1: "my env var value 1"

    # explicit notation (the "name" field takes precedence)
    USER_NAMESPACE:
      name: USER_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace

    # implicit notation (the "name" field is implied)
    PREFIXED_USER_NAMESPACE:
      value: "my-prefix-$(USER_NAMESPACE)"
    SECRET_VALUE:
      valueFrom:
        secretKeyRef:
          name: my-k8s-secret
          key: password

有关更多信息,请参阅 Kubernetes EnvVar 规范

singleuser.nodeSelector#

一个包含键值对的对象,表示标签。K8s 节点必须匹配所有这些标签,此 Pod 才能调度到它们上面。

disktype: ssd
nodetype: awesome

有关更多详细信息,请参阅Kubernetes 文档

singleuser.extraTolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

singleuser.extraNodeAffinity#

亲和性描述了 pod 偏好或要求在何处调度,它们可能偏好或要求被调度的节点具有特定的标签(节点亲和性)。它们还可能要求与另一个 pod 邻近或不邻近地调度(pod 亲和性和 pod 反亲和性)。

有关更多信息,请参阅 Kubernetes 文档

singleuser.extraNodeAffinity.required#

向此字段传递一个 NodeSelectorTerm 对象数组。

默认值: []

singleuser.extraNodeAffinity.preferred#

向此字段传递一个 PreferredSchedulingTerm 对象数组。

默认值: []

singleuser.extraPodAffinity#

请参阅 singleuser.extraNodeAffinity 的描述。

singleuser.extraPodAffinity.required#

向此字段传递一个 PodAffinityTerm 对象数组。

默认值: []

singleuser.extraPodAffinity.preferred#

向此字段传递一个 WeightedPodAffinityTerm 对象数组。

默认值: []

singleuser.extraPodAntiAffinity#

请参阅 singleuser.extraNodeAffinity 的描述。

singleuser.extraPodAntiAffinity.required#

向此字段传递一个 PodAffinityTerm 对象数组。

默认值: []

singleuser.extraPodAntiAffinity.preferred#

向此字段传递一个 WeightedPodAffinityTerm 对象数组。

默认值: []

singleuser.cloudMetadata#

有关此内容的更多信息,请参阅Helm chart 文档中的专用部分。

singleuser.cloudMetadata.blockWithIptables#

默认值: true

singleuser.cloudMetadata.ip#

默认值: "169.254.169.254"

singleuser.cmd#

KubeSpawner.cmd 的直通配置。默认值为 “jupyterhub-singleuser”。使用 cmd: null 从镜像启动自定义 CMD,该 CMD 最终必须启动 jupyterhub-singleuser 或等效进程。例如:Jupyter 的 docker-stacks 镜像。

默认值: "jupyterhub-singleuser"

singleuser.defaultUrl#

KubeSpawner.default_url 的直通配置。

singleuser.events#

KubeSpawner.events_enabled 的直通配置。

默认值: true

singleuser.extraAnnotations#

KubeSpawner.extra_annotations 的直通配置。

singleuser.extraContainers#

KubeSpawner.extra_containers 的直通配置。

默认值: []

singleuser.extraLabels#

KubeSpawner.extra_labels 的直通配置。

singleuser.extraPodConfig#

KubeSpawner.extra_pod_config 的直通配置。

singleuser.extraResource#

singleuser.extraResource.guarantees#

KubeSpawner.extra_resource_guarantees 的直通配置。

singleuser.extraResource.limits#

KubeSpawner.extra_resource_limits 的直通配置。

singleuser.fsGid#

KubeSpawner.fs_gid 的直通配置。

默认值: 100

singleuser.lifecycleHooks#

KubeSpawner.lifecycle_hooks 的直通配置。

singleuser.lifecycleHooks.postStart#

singleuser.lifecycleHooks.preStop#

singleuser.networkTools#

此配置部分指的是为用户 pod 有条件创建的 initContainer 的配置,其目的是阻止特定的 IP 地址。

如果将 singleuser.cloudMetadata.blockWithIptables 设置为 true,则会创建此 initContainer。

singleuser.networkTools.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

singleuser.networkTools.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "quay.io/jupyterhub/k8s-network-tools"

singleuser.networkTools.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a
singleuser.networkTools.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

singleuser.networkTools.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

singleuser.networkTools.resources#

k8s 原生资源规范,详见文档

singleuser.serviceAccountName#

KubeSpawner.service_account 的直通配置。

singleuser.startTimeout#

KubeSpawner.start_timeout 的直通配置。

默认值: 300

singleuser.storage#

此部分在某种程度上直接配置 KubeSpawner,但也通过 Helm chart 特定配置选项(例如 singleuser.storage.type)间接配置。

singleuser.storage.capacity#

配置 KubeSpawner.storage_capacity

有关更多信息,请参阅 KubeSpawner 文档

默认值: "10Gi"

singleuser.storage.dynamic#

singleuser.storage.dynamic.pvcNameTemplate#

配置 KubeSpawner.pvc_name_template,它将是 KubeSpawner 在需要时为每个用户创建的 PVC 的资源名称。

singleuser.storage.dynamic.storageAccessModes#

配置 KubeSpawner.storage_access_modes

有关更多信息,请参阅 KubeSpawner 文档和 k8s 文档

默认值: ["ReadWriteOnce"]

singleuser.storage.dynamic.storageClass#

配置 KubeSpawner.storage_class,它可以是一个显式的 StorageClass,用于为 KubeSpawner 将创建的 PVC 动态配置存储。

如果未指定,k8s 集群中有一个可用的默认 StorageClass。

singleuser.storage.dynamic.subPath#

配置由 Helm chart 添加的 KubeSpawner.volume_mounts 条目的 subPath 字段。

容器卷应从该卷中挂载的路径。默认为 "" (卷的根目录)。

singleuser.storage.dynamic.volumeNameTemplate#

配置 KubeSpawner.volume_name_template,这是从容器的 volumeMounts 部分引用的名称。

默认值: "volume-{user_server}"

singleuser.storage.extraLabels#

配置 KubeSpawner.storage_extra_labels。请注意,这些标签仅在 PVC 创建期间设置,创建后不会更新。

singleuser.storage.extraVolumeMounts#

容器的附加卷挂载。使用 k8s 原生语法。

默认值: []

singleuser.storage.extraVolumes#

Pod 的附加卷。使用 k8s 原生语法。

默认值: []

singleuser.storage.homeMountPath#

主文件夹存储应挂载到容器内的位置。

默认值: "/home/jovyan"

singleuser.storage.static#

singleuser.storage.static.pvcName#

配置 KubeSpawner.pvc_claim_name 以引用预先存在的存储。

singleuser.storage.static.subPath#

配置由 Helm chart 添加的 KubeSpawner.volume_mounts 条目的 subPath 字段。

容器卷应从该卷中挂载的路径。默认为 "" (卷的根目录)。

默认值: "{username}"

singleuser.storage.type#

决定您是希望动态配置存储 (dynamic),还是希望附加现有存储 (static),或者不希望附加任何存储 (none)。

默认值: "dynamic"

singleuser.allowPrivilegeEscalation#

KubeSpawner.allow_privilege_escalation 的直通配置。

默认值: false

singleuser.uid#

KubeSpawner.uid 的直通配置。

这决定了主容器将以哪个用户身份启动。

举个例子,假设您想为某些用户启用 sudo 权限。这可以通过以 root 身份启动,在启动脚本中从容器内启用它,然后切换到普通用户来实现。

默认值为 1000,设置为 null 以使用容器的默认值。

默认值: 1000

scheduling#

用于自定义各种 pod 在节点上的调度以及相关标签的对象。

scheduling.userScheduler#

用户调度器确保用户 pod 紧密地调度在节点上,这对于用户节点池的自动伸缩非常有用。

scheduling.userScheduler.enabled#

启用用户调度器。

默认值: true

scheduling.userScheduler.revisionHistoryLimit#

配置资源的 spec.revisionHistoryLimit。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。

有关更多信息,请参阅 Kubernetes 文档

scheduling.userScheduler.replicas#

您可以有多个调度器来分担工作负载或提高节点故障时的可用性。

默认值: 2

scheduling.userScheduler.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

scheduling.userScheduler.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "registry.k8s.io/kube-scheduler"

scheduling.userScheduler.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

默认值: "v1.30.11"

scheduling.userScheduler.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

scheduling.userScheduler.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

scheduling.userScheduler.pdb#

为此 Deployment 配置一个 PodDisruptionBudget。

对于我们不支持多副本并行运行的部署,这些默认是禁用的。目前只有用户调度器支持多副本并行运行。如果为只有一个副本的 Deployment 启用它们,它们将阻止例如节点的 kubectl drain 操作。

请注意,如果您旨在阻止会中断部署的 hub/proxy/autohttps pod 所在的节点缩减,您应该如此处所述为 Deployment 的 pod 添加注解。

"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

有关中断的更多详细信息,请参阅Kubernetes 文档

scheduling.userScheduler.pdb.enabled#

决定是否创建一个针对 Deployment 的 pod 的 PodDisruptionBudget。

默认值: true

scheduling.userScheduler.pdb.maxUnavailable#

在自愿中断期间可以不可用的最大 pod 数。

默认值: 1

scheduling.userScheduler.pdb.minAvailable#

在自愿中断期间需要可用的最小 pod 数。

scheduling.userScheduler.nodeSelector#

一个包含键值对的对象,表示标签。K8s 节点必须匹配所有这些标签,此 Pod 才能调度到它们上面。

disktype: ssd
nodetype: awesome

有关更多详细信息,请参阅Kubernetes 文档

scheduling.userScheduler.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

scheduling.userScheduler.labels#

要添加到 userScheduler pod 的额外标签。

要了解有关标签的更多信息,请参阅 Kubernetes 文档

scheduling.userScheduler.annotations#

要添加到 user-scheduler pod 的额外注解。

scheduling.userScheduler.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

scheduling.userScheduler.logLevel#

对应于在 user-scheduler pod 内运行的 kube-scheduler 二进制文件所做的日志记录的详细程度。

默认值: 4

scheduling.userScheduler.plugins#

这些插件指的是此处记录的 kube-scheduler 插件。

user-scheduler 实际上只是一个以一种方式配置的 kube-scheduler,它使用这些插件将用户紧密地打包到节点上。有关默认插件的信息,请参阅 values.yaml。

scheduling.userScheduler.pluginConfig#

可以进一步配置单独激活的插件。

默认值: [{"name": "NodeResourcesFit", "args": {"scoringStrategy": {"type": "MostAllocated", "resources": [{"name": "cpu", "weight": 1}, {"name": "memory", "weight": 1}]}}}]

scheduling.userScheduler.resources#

k8s 原生资源规范,详见文档

scheduling.userScheduler.serviceAccount#

用于特定 pod 的专用 k8s ServiceAccount 的配置,此配置嵌套在该 pod 下。

scheduling.userScheduler.serviceAccount.create#

是否创建 ServiceAccount 资源。

默认值: true

scheduling.userScheduler.serviceAccount.name#

此配置有多种用途

  • 它将是相关 Pod 引用的 serviceAccountName

  • 如果设置了 create,创建的 ServiceAccount 资源将以此命名。

  • 如果设置了 rbac.create,相关的 (Cluster)RoleBindings 将绑定到此名称。

如果未明确提供,将使用默认名称。

scheduling.userScheduler.serviceAccount.annotations#

应用于 k8s ServiceAccount 的 Kubernetes 注解。

scheduling.userScheduler.extraPodSpec#

任意额外的 k8s pod 规范,以 YAML 对象形式提供。此设置的默认值是一个空对象,即没有额外配置。此属性的值将按原样增强到 pod 规范中。

对于有高级配置需求的 k8s 专家管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。滥用此设置可能会破坏您的部署和/或危及您的系统安全。

这是用于插入任意 pod 规范的四个相关设置之一

  1. hub.extraPodSpec

  2. proxy.chp.extraPodSpec

  3. proxy.traefik.extraPodSpec

  4. scheduling.userScheduler.extraPodSpec

  5. scheduling.userPlaceholder.extraPodSpec

这些设置的一个实际用途是启用主机网络。例如,要为 hub pod 配置主机网络,请将以下内容添加到您的 helm 配置值中

hub:
  extraPodSpec:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet

同样,要为代理 pod 配置主机网络,请添加以下内容

proxy:
  chp:
    extraPodSpec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet

注意:主机网络具有特殊的安全影响,并可能轻易破坏您的部署。这是一个示例——不是推荐。

有关最新的 pod 资源规范,请参阅 PodSpec

scheduling.podPriority#

Pod 优先级用于允许真实用户驱逐用户占位符 pod,而这些 pod 通过进入 Pending 状态可以触发集群自动伸缩器的伸缩。

启用此选项仅在满足以下条件时才有意义

  1. 安装了集群自动伸缩器。

  2. user-placeholer pod 配置为具有等于或高于集群自动伸缩器的“优先级截止值”的优先级,以便集群自动伸缩器为待处理的用户占位符 pod 预先扩展节点。

  3. 普通用户 pod 的优先级高于 user-placeholder pod。

  4. 镜像拉取器 pod 的优先级介于普通用户 pod 和 user-placeholder pod 之间。

请注意,如果未在集群自动伸缩器上配置默认优先级截止值,它当前将默认为 0,并且将来会降低。如果您的云提供商为您安装了集群自动伸缩器,他们也可能专门配置此项。

集群自动伸缩器的推荐设置...

... 优先级截止值为 -10 (GKE)

podPriority:
  enabled: true
  globalDefault: false
  defaultPriority: 0
  imagePullerPriority: -5
  userPlaceholderPriority: -10

... 优先级截止值为 0

podPriority:
  enabled: true
  globalDefault: true
  defaultPriority: 10
  imagePullerPriority: 5
  userPlaceholderPriority: 0

scheduling.podPriority.enabled#

默认值: false

scheduling.podPriority.globalDefault#

警告!这将影响集群中的所有 pod。

pod 通常获得的优先级是 0。但是,如果 PriorityClass 资源被声明为全局默认值,则可以覆盖此值。此配置选项允许创建此类全局默认值。

默认值: false

scheduling.podPriority.defaultPriority#

默认 pod 优先级的实际值。

默认值: 0

scheduling.podPriority.imagePullerPriority#

[hook|continuous]-image-puller pod 优先级的实际值。

默认值: -5

scheduling.podPriority.userPlaceholderPriority#

user-placeholder pod 优先级的实际值。

默认值: -10

scheduling.userPlaceholder#

用户占位符模拟用户,但由于 PodPriority,如果真实用户出现,它们将被集群自动伸缩器驱逐。通过这种方式,占位符允许您为真实用户创建余量,并减少用户必须等待添加节点的风险。请务必同时使用连续镜像拉取器和占位符,以便在真实用户到达时镜像也可用。

为了有效地测试您的设置,您可以使用以下命令调整用户占位符的数量

# Configure to have 3 user placeholders
kubectl scale sts/user-placeholder --replicas=3

scheduling.userPlaceholder.enabled#

默认值: true

scheduling.userPlaceholder.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

scheduling.userPlaceholder.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "registry.k8s.io/pause"

scheduling.userPlaceholder.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

默认值: "3.10"

scheduling.userPlaceholder.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

scheduling.userPlaceholder.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

scheduling.userPlaceholder.revisionHistoryLimit#

配置资源的 spec.revisionHistoryLimit。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。

有关更多信息,请参阅 Kubernetes 文档

scheduling.userPlaceholder.replicas#

您希望拥有多少个占位符 pod?

默认值: 0

scheduling.userPlaceholder.labels#

要添加到 userPlaceholder pod 的额外标签。

要了解有关标签的更多信息,请参阅 Kubernetes 文档

scheduling.userPlaceholder.annotations#

要添加到占位符 pod 的额外注解。

scheduling.userPlaceholder.resources#

除非在此处指定,否则占位符 pod 将请求为真实 singleuser pod 指定的相同资源。

scheduling.userPlaceholder.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

scheduling.userPlaceholder.extraPodSpec#

任意额外的 k8s pod 规范,以 YAML 对象形式提供。此设置的默认值是一个空对象,即没有额外配置。此属性的值将按原样增强到 pod 规范中。

对于有高级配置需求的 k8s 专家管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。滥用此设置可能会破坏您的部署和/或危及您的系统安全。

这是用于插入任意 pod 规范的四个相关设置之一

  1. hub.extraPodSpec

  2. proxy.chp.extraPodSpec

  3. proxy.traefik.extraPodSpec

  4. scheduling.userScheduler.extraPodSpec

  5. scheduling.userPlaceholder.extraPodSpec

这些设置的一个实际用途是启用主机网络。例如,要为 hub pod 配置主机网络,请将以下内容添加到您的 helm 配置值中

hub:
  extraPodSpec:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet

同样,要为代理 pod 配置主机网络,请添加以下内容

proxy:
  chp:
    extraPodSpec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet

注意:主机网络具有特殊的安全影响,并可能轻易破坏您的部署。这是一个示例——不是推荐。

有关最新的 pod 资源规范,请参阅 PodSpec

scheduling.corePods#

这些设置影响核心 pod,例如 hub、proxy 和 user-scheduler pod。这些设置影响所有被认为是核心 pod 的 pod,即

  • hub

  • proxy

  • autohttps

  • hook-image-awaiter

  • user-scheduler

默认情况下,容忍度是

  • hub.jupyter.org/dedicated=core:NoSchedule

  • hub.jupyter.org_dedicated=core:NoSchedule

请注意,此处设置的容忍度与相应组件的专用容忍度相结合,并且如果云的容忍度中不允许 /,则可以使用 _

scheduling.corePods.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: [{"key": "hub.jupyter.org/dedicated", "operator": "Equal", "value": "core", "effect": "NoSchedule"}, {"key": "hub.jupyter.org_dedicated", "operator": "Equal", "value": "core", "effect": "NoSchedule"}]

scheduling.corePods.nodeAffinity#

pod 应该在哪里调度?也许在具有特定标签的节点上是首选甚至必需的?

scheduling.corePods.nodeAffinity.matchNodePurpose#

决定核心 pod 是忽略偏好还是要求在具有此标签的节点上调度

hub.jupyter.org/node-purpose=core

默认值: "prefer"

scheduling.userPods#

这些设置影响所有被认为是用户 pod 的 pod,即

  • user-placeholder

  • hook-image-puller

  • continuous-image-puller

  • jupyter-

默认情况下,容忍度是

  • hub.jupyter.org/dedicated=core:NoSchedule

  • hub.jupyter.org_dedicated=core:NoSchedule

请注意,此处设置的容忍度与相应组件的专用容忍度相结合,并且如果云的容忍度中不允许 /,则可以使用 _

scheduling.userPods.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: [{"key": "hub.jupyter.org/dedicated", "operator": "Equal", "value": "user", "effect": "NoSchedule"}, {"key": "hub.jupyter.org_dedicated", "operator": "Equal", "value": "user", "effect": "NoSchedule"}]

scheduling.userPods.nodeAffinity#

pod 应该在哪里调度?也许在具有特定标签的节点上是首选甚至必需的?

scheduling.userPods.nodeAffinity.matchNodePurpose#

决定用户 pod 是忽略偏好还是要求在具有此标签的节点上调度

hub.jupyter.org/node-purpose=user

默认值: "prefer"

ingress#

ingress.enabled#

启用创建 Kubernetes Ingress 以代理公共服务。

有关更多详细信息,请参阅高级主题 — Zero to JupyterHub with Kubernetes 0.7.0 文档

默认值: false

ingress.annotations#

要应用于 Ingress 资源的注解。

有关注解的更多详细信息,请参阅Kubernetes 文档

ingress.ingressClassName#

直接映射到 Ingress 资源的 `spec.ingressClassName`。

有关更多详细信息,请参阅 Kubernetes 文档

ingress.hosts#

将请求路由到代理的主机列表。

默认值: []

ingress.pathSuffix#

添加到 Ingress 路由路径模式的后缀。

如果您的 ingress 通过 glob 模式匹配路径,请指定 *

ingress.pathType#

要使用的路径类型。默认值为“Prefix”。

有关路径类型的更多详细信息,请参阅 Kubernetes 文档

默认值: "Prefix"

ingress.tls#

Ingress 的 TLS 配置。

有关注解的更多详细信息,请参阅 Kubernetes 文档

默认值: []

ingress.extraPaths#

要添加到 ingress 配置的自定义路径列表。

有关路径的更多详细信息,请参阅 Kubernetes 文档

默认值: []

prePuller#

prePuller.revisionHistoryLimit#

配置资源的 spec.revisionHistoryLimit。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。

有关更多信息,请参阅 Kubernetes 文档

prePuller.labels#

要添加到预拉取器作业 pod 的额外标签。

要了解有关标签的更多信息,请参阅 Kubernetes 文档

prePuller.annotations#

应用于 hook 和 continuous image puller pod 的注解。一个用例是禁用可能干扰镜像拉取的 istio sidecar。

prePuller.resources#

这些是标准的 Kubernetes 资源,具有对 cpu 和内存的请求和限制。它们将用于拉取镜像的 pod 中的容器。这些值应该设置得极低,因为容器会直接关闭,或者是一个仅处于空闲状态的 pause 容器。

它们被设为可配置,因为使用 ResourceQuota 可能要求命名空间中的容器具有明确的资源设置。

prePuller.extraTolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

prePuller.hook#

有关更多详细信息,请参阅优化部分

prePuller.hook.enabled#

默认值: true

prePuller.hook.pullOnlyOnChanges#

仅在要拉取的镜像有更改时才拉取,或者更准确地说,如果 hook-image-puller daemonset 以任何方式发生更改。

默认值: true

prePuller.hook.podSchedulingWaitDuration#

hook-image-awaiter 有一个标准,即等待所有 hook-image-puller DaemonSet 的 pod 都完成调度并完成镜像拉取。此标志可用于放宽此标准,改为仅等待已经调度的 pod 在一定持续时间后完成镜像拉取。

这样做的好处是,有时新创建的 hook-image-puller pod 因节点已满而无法调度,那么阻塞 helm upgrade 可能没有意义。

等待 pod 调度的无限持续时间可以用 -1 表示。这是 0.9.0 及更早版本的默认行为。

默认值: 10

prePuller.hook.nodeSelector#

一个包含键值对的对象,表示标签。K8s 节点必须匹配所有这些标签,此 Pod 才能调度到它们上面。

disktype: ssd
nodetype: awesome

有关更多详细信息,请参阅Kubernetes 文档

prePuller.hook.tolerations#

Tolerations 允许 pod 被调度到有污点的节点上。这些 tolerations 是对其各自类型的所有 pod(scheduling.corePods.tolerationsscheduling.userPods.tolerations)共有的 tolerations 的补充。

将此字段传递给一个 Toleration 对象数组。

有关更多信息,请参阅Kubernetes 文档

默认值: []

prePuller.hook.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

prePuller.hook.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

prePuller.hook.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "quay.io/jupyterhub/k8s-image-awaiter"

prePuller.hook.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a
prePuller.hook.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

prePuller.hook.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

prePuller.hook.resources#

k8s 原生资源规范,详见文档

prePuller.hook.serviceAccount#

用于特定 pod 的专用 k8s ServiceAccount 的配置,此配置嵌套在该 pod 下。

prePuller.hook.serviceAccount.create#

是否创建 ServiceAccount 资源。

默认值: true

prePuller.hook.serviceAccount.name#

此配置有多种用途

  • 它将是相关 Pod 引用的 serviceAccountName

  • 如果设置了 create,创建的 ServiceAccount 资源将以此命名。

  • 如果设置了 rbac.create,相关的 (Cluster)RoleBindings 将绑定到此名称。

如果未明确提供,将使用默认名称。

prePuller.hook.serviceAccount.annotations#

应用于 k8s ServiceAccount 的 Kubernetes 注解。

prePuller.hook.serviceAccountImagePuller#

用于特定 pod 的专用 k8s ServiceAccount 的配置,此配置嵌套在该 pod 下。

prePuller.hook.serviceAccountImagePuller.create#

是否创建 ServiceAccount 资源。

默认值: true

prePuller.hook.serviceAccountImagePuller.name#

此配置有多种用途

  • 它将是相关 Pod 引用的 serviceAccountName

  • 如果设置了 create,创建的 ServiceAccount 资源将以此命名。

  • 如果设置了 rbac.create,相关的 (Cluster)RoleBindings 将绑定到此名称。

如果未明确提供,将使用默认名称。

prePuller.hook.serviceAccountImagePuller.annotations#

应用于 k8s ServiceAccount 的 Kubernetes 注解。

prePuller.continuous#

有关更多详细信息,请参阅优化部分

注意

如果与集群自动伸缩器(自动伸缩节点池)一起使用,还请添加 user-placeholders 并启用 pod 优先级。

prePuller.continuous.enabled#

默认值: true

prePuller.continuous.serviceAccount#

用于特定 pod 的专用 k8s ServiceAccount 的配置,此配置嵌套在该 pod 下。

prePuller.continuous.serviceAccount.create#

是否创建 ServiceAccount 资源。

默认值: true

prePuller.continuous.serviceAccount.name#

此配置有多种用途

  • 它将是相关 Pod 引用的 serviceAccountName

  • 如果设置了 create,创建的 ServiceAccount 资源将以此命名。

  • 如果设置了 rbac.create,相关的 (Cluster)RoleBindings 将绑定到此名称。

如果未明确提供,将使用默认名称。

prePuller.continuous.serviceAccount.annotations#

应用于 k8s ServiceAccount 的 Kubernetes 注解。

prePuller.pullProfileListImages#

singleuser.profileList 配置可以提供镜像选择。此选项决定是否应拉取此处标识的所有镜像,包括 hook 和 continuous puller。

镜像在 kubespawner_override 下查找,自 3.2.0 版本起,也在 profile_options.choices.kubespawner_override 下查找。

禁用此功能的原因是,例如,如果您有 10 个镜像按 1 到 10 的顺序开始拉取,一个到达并希望启动带有镜像 10 的 pod 的用户将需要等待所有镜像都被拉取,此时,最好让到达的用户只等待一个镜像在到达时被拉取。

默认值: true

prePuller.extraImages#

有关更多详细信息,请参阅优化部分

prePuller:
  extraImages:
    my-extra-image-i-want-pulled:
      name: jupyter/all-spark-notebook
      tag: 2343e33dec46

prePuller.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

prePuller.pause#

image-puller pod 依赖 initContainer 来拉取所有镜像,它们完成后实际的容器只是运行一个 pause 容器。这些是该 pause 容器的设置。

prePuller.pause.containerSecurityContext#

容器安全上下文的 k8s 原生规范,详见文档

prePuller.pause.image#

为 pod 设置自定义镜像名称、标签、pullPolicy 或 pullSecrets。

prePuller.pause.image.name#

镜像的名称,不带标签。

# example name
gcr.io/my-project/my-image

默认值: "registry.k8s.io/pause"

prePuller.pause.image.tag#

要拉取的镜像标签。这是完整镜像规范中跟在 : 后面的值。

# example tags
v1.11.1
zhy270a

默认值: "3.10"

prePuller.pause.image.pullPolicy#

配置 Pod 的 spec.imagePullPolicy

有关更多信息,请参阅 Kubernetes 文档

prePuller.pause.image.pullSecrets#

一个引用现有 Kubernetes Secrets 的列表,其中包含拉取镜像的凭据。

此 Pod 的最终 imagePullSecrets k8s 规范将是以下各项的组合

  1. 此 k8s Secrets 列表,专用于此 pod。

  2. k8s Secrets 列表,供 Helm chart 中的所有 pod 使用,在此 Helm charts 配置中称为 imagePullSecrets

  3. 一个 k8s Secret,供 Helm chart 中的所有 pod 使用,如果根据 imagePullSecret 下提供的镜像仓库凭据有条件地创建,并且 imagePullSecret.create 设置为 true。

# example - k8s native syntax
pullSecrets:
  - name: my-k8s-secret-with-image-registry-credentials

# example - simplified syntax
pullSecrets:
  - my-k8s-secret-with-image-registry-credentials

默认值: []

custom#

要传递给 Hub 的其他值。JupyterHub 本身不会查看这些值,但您可以通过 hub.extraConfig 在自己的自定义配置中读取值。例如

custom:
  myHost: "https://example.horse"
hub:
  extraConfig:
    myConfig.py: |
      c.MyAuthenticator.host = get_config("custom.myHost")

cull#

jupyterhub-idle-culler 可以作为 JupyterHub 管理的服务运行,以淘汰正在运行的服务器。

cull.enabled#

启用/禁用 jupyter-idle-culler 的使用。

默认值: true

cull.users#

请参阅 --cull-users 标志。默认值: false

cull.adminUsers#

请参阅 --cull-admin-users 标志。默认值: true

cull.removeNamedServers#

请参阅 --remove-named-servers 标志。默认值: false

cull.timeout#

请参阅 --timeout 标志。默认值: 3600

cull.every#

请参阅 --cull-every 标志。默认值: 600

cull.concurrency#

请参阅 --concurrency 标志。默认值: 10

cull.maxAge#

请参阅 --max-age 标志。默认值: 0

debug#

debug.enabled#

提高 Helm chart 中所有资源的日志级别。

默认值: false

rbac#

rbac.enabled#

注意

在 2.0.0 版本中已移除。如果您一直在使用 rbac.enable=false(强烈不建议),那么等效的配置将是

rbac:
  create: false
hub:
  serviceAccount:
    create: false
proxy:
  traefik:
    serviceAccount:
      create: false
scheduling:
  userScheduler:
    serviceAccount:
      create: false
prePuller:
  hook:
    serviceAccount:
      create: false

rbac.create#

决定是否创建 (Cluster)Role 和 (Cluster)RoleBinding 资源并将其绑定到配置的 serviceAccounts。

默认值: true

global#

global.safeToShowValues#

一个标志,仅当遇到包含您希望显示的已审查内容的弃用消息时才应临时设置为 true。

默认值: false