配置参考#
该 JupyterHub Helm 图表 可通过 config.yaml
中的值进行配置。通过这种方式,您可以扩展用户资源,构建不同的 Docker 镜像,管理安全性和身份验证等等。
以下是 Helm 图表中许多(但并非全部)可配置值的描述。要查看所有可配置选项,请检查 此处 定义的默认值。
有关使用 Helm 图表修改可以执行的某些特定操作的更多指导信息,请参阅 自定义指南。
enabled#
enabled
被 jupyterhub 图表本身忽略,但依赖 jupyterhub 图表的图表可以有条件地使用此配置选项作为条件。
fullnameOverride#
fullnameOverride 和 nameOverride 允许您调整 Helm 图表资源部分的命名方式。
名称格式 |
资源类型 |
fullnameOverride |
nameOverride |
注意 |
---|---|---|---|---|
组件 |
命名空间 |
|
* |
默认 |
release-component |
集群范围 |
|
* |
默认 |
fullname-component |
* |
str |
* |
- |
release-component |
* |
null |
|
- |
release-(name-)component |
* |
null |
str |
如果包含在发布中,则省略 |
release-(chart-)component |
* |
null |
null |
如果包含在发布中,则省略 |
警告!
在图表首次安装后更改 fullnameOverride 或 nameOverride 不受支持。更改其值可能会导致重置非外部 JupyterHub 数据库,放弃用户的存储,以及切断与当前运行的用户 pod 的耦合。
如果您是依赖此图表的图表的开发人员,您应该避免硬编码名称。如果您想从父 Helm 图表的模板中引用此图表中资源的名称,您可以使用全局命名模板。
# 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
_json_key
imagePullSecret.password#
私有镜像仓库用户的密码。
示例
plaintextpassword
abc123SECRETzyx098
对于 gcr.io 仓库,密码将是一个用于 Google 云服务帐户的 JSON 大块,它应该类似于以下内容。
password: |-
{
"type": "service_account",
"project_id": "jupyter-se",
"private_key_id": "f2ba09118a8d3123b3321bd9a7d6d0d9dc6fdb85",
...
}
imagePullSecret.email#
电子邮件规范通常不需要,但它受支持。
imagePullSecrets#
图表范围内的配置,用于将 k8s Secret 引用追加到其所有 pod 的 spec.imagePullSecrets
配置。
这不会覆盖或被 pod 特定配置覆盖,而是会增加 pod 特定配置。
您可以使用 k8s 本机语法,其中每个列表元素类似于 {"name": "my-secret-name"}
,或者您可以让列表元素直接命名秘密。
默认值: []
hub#
hub.revisionHistoryLimit#
配置资源的 spec.revisionHistoryLimit
。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。
有关更多信息,请参阅 Kubernetes 文档。
hub.config#
JupyterHub 及其组件(身份验证器、生成器等)是 Python 类,它们通过 traitlets 公开其配置。使用此 Helm 图表配置 (hub.config
),您可以直接通过静态 YAML 值配置 Python 类。要动态设置值,您需要使用 hub.extraConfig
。
目前仅用于身份验证配置
此配置目前(0.11.0)仅影响 hub
Pod 中的软件,但一些 Helm 图表配置选项(例如 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 Bytes
或 Set
对象。
Helm 值合并
helm
将 Helm 图表的默认值与使用 --values
或 -f
标志传递的值合并。在合并期间,列表将被替换,而字典将被更新。
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 图表配置中嵌入整个文件,您可以在 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
常见用途
JupyterHub 模板自定义
您可以通过将新的模板注入到
/usr/local/share/jupyterhub/templates
中来替换 hub pod 中的默认 JupyterHub 用户界面模板。这些模板可以反过来引用注入到/usr/local/share/jupyterhub/static
中的自定义图像。JupyterHub 独立文件配置
您可以将一个独立的 .py 文件注入到
/usr/local/etc/jupyterhub/jupyterhub_config.d
中,而不是通过hub.extraConfig
将 JupyterHub python 配置作为字符串嵌入到 YAML 文件中,该文件会自动加载。灵活配置
通过注入文件,您无需将它们嵌入到您需要重新构建的 docker 镜像中。
如果您的配置文件是 YAML/JSON/TOML 文件,您也可以使用
data
而不是stringData
,这允许您在单独的 Helm 配置文件中设置各种配置。这对于帮助依赖图表仅覆盖文件中的某些配置部分或允许通过多个 Helm 配置文件设置配置非常有用。
限制
文件大小
hub.extraFiles
和singleuser.extraFiles
中的文件分别存储在它们自己的 k8s Secret 资源中。由于 k8s Secret 通常限制为 1MB,因此您将被限制为总文件大小小于 1MB,因为还存在 base64 编码,这会将可用容量降低到 75%。文件更新
挂载的文件仅在容器启动时设置。这是 因为我们使用
subPath
,这是为了避免替换我们挂载的整个目录的内容。
hub.baseUrl#
这相当于 c.JupyterHub.base_url,但它也是 Helm 图表总体上需要的。因此,请使用此配置,而不是设置 c.JupyterHub.base_url。
默认值: "/"
hub.command#
一个字符串列表,用于替换 JupyterHub 镜像的 ENTRYPOINT
条目。请注意,在 k8s 行话中,Dockerfile 的 ENTRYPOINT
被称为 command
。字符串列表将使用 Helm 的模板函数 tpl
进行扩展,该函数可以在花括号 ({{... }}
) 内渲染 Helm 模板逻辑。
这对于以某种自定义方式包装 JupyterHub 本身的调用可能很有用。
有关更多详细信息,请参阅 Kubernetes 文档。
默认值: []
hub.args#
一个字符串列表,用于替换 JupyterHub 镜像的 CMD
条目以及 Helm 图表的默认启动 JupyterHub 方式。请注意,在 k8s 行话中,Dockerfile 的 CMD
被称为 args
。字符串列表将使用 Helm 的模板函数 tpl
进行扩展,该函数可以在花括号 ({{... }}
) 内渲染 Helm 模板逻辑。
警告
通过替换整个配置文件(由 Helm 图表挂载到 /usr/local/etc/jupyterhub/jupyterhub_config.py
),而不是使用 hub.extraConfig
附加到它,您将使您的部署暴露于与 Helm 图表的配置文件不同步的问题。
这类问题将非常难以调试和诊断,并且由于此原因,可能会导致社区维护 Helm 图表以及您自己花费大量时间,即使这不是问题的原因。
因此,我们要求您尽力避免替换默认提供的 jupyterhub_config.py
文件。这通常是可能的。例如,如果您希望拥有一个专门的 .py 文件来进行更广泛的添加,以便您可以对语法进行高亮显示等等,并且感觉通过在 YAML 文件中传递代码 hub.extraConfig
来限制,您可以使用 这个技巧 代替。
hub:
args:
- "jupyterhub"
- "--config"
- "/usr/local/etc/jupyterhub/jupyterhub_config.py"
- "--debug"
- "--upgrade-db"
有关更多详细信息,请参阅 Kubernetes 文档。
默认值: []
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 Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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#
除了核心功能所需的内容之外,还要添加其他入站规则。
默认值: []
hub.networkPolicy.egress#
除了核心功能所需的内容和通过 .egressAllowRules
添加的内容之外,还要添加其他出站规则。
版本 2.0.0 中的变更: 默认值已从提供一个允许所有出站流量的非常宽松的规则更改为不提供任何规则。 不过,仍然可以通过将 .egressAllowRules
设置为 true 来提供宽松的规则。
例如,以下配置禁用了 hub pod 的更宽松的 .privateIPs
出站允许规则,而是提供了严格的范围权限,以访问由 pod 标签标识的特定 k8s 本地服务。
hub:
networkPolicy:
egressAllowRules:
privateIPs: false
egress:
- to:
- podSelector:
matchLabels:
app: my-k8s-local-service
ports:
- protocol: TCP
port: 5978
默认值: []
hub.networkPolicy.egressAllowRules#
这是一组预定义规则,启用后将添加到 NetworkPolicy 的出站规则列表中。
最终的出站规则将是以下内容的组合:
Helm 图表中各自 pod(s) 功能的特定规则
基于启用的
egressAllowRules
标志的规则用户显式指定的规则
注意
此配置下的每个标志都不会渲染成 NetworkPolicy 资源中的专用规则,而是与其他标志组合成一组简化的规则,以避免性能损失。
版本 2.0.0 中的新增功能。
hub.networkPolicy.egressAllowRules.cloudMetadataServer#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到云元数据服务器的出站连接。
请注意,nonPrivateIPs
规则允许所有非私有 IP 范围,但对云元数据服务器进行了例外,将其作为允许访问云元数据服务器的最终配置。
版本 3.0.0 中的变更: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables
同时配置为 true,以避免出现模棱两可的配置。
默认: true
hub.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到云元数据服务器的出站连接。
在单用户配置中依赖此规则应与禁用 singleuser.cloudMetadata.blockWithIptables
相辅相成,以避免出现模棱两可的配置。
此规则可能相关的已知情况
在使用云 DNS 的 GKE 集群中,云 DNS 在云元数据服务器的非私有 IP 上访问。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
hub.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到 kube-system 命名空间中 pod 的出站连接。
此规则可能相关的已知情况
GKE、EKS、AKS 和其他直接依赖
kube-dns
或coredns
pod 的集群,这些 pod 位于kube-system
命名空间中。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
hub.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到私有 IP 的出站连接。
此规则可能相关的已知情况
依赖于节点本地 DNS 缓存(位于未知私有 IP 上)间接访问 DNS 服务器的 GKE 集群。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
警告
此规则预计不会在依赖 Cilium 来强制执行 NetworkPolicy 规则的集群中工作(包括使用 Dataplane v2 的 GKE 集群),这是由于 已知限制。
默认: true
hub.networkPolicy.egressAllowRules.nonPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到非私有 IP 范围的出站连接,但云元数据服务器除外。 这意味着各自的 pod(s) 可以建立到互联网的连接,但不能(例如)建立到同一集群中运行的未保护的 Prometheus 服务器的连接。
默认: true
hub.networkPolicy.egressAllowRules.privateIPs#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
私有 IP 指的是 IP 范围 10.0.0.0/8
、172.16.0.0/12
、192.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.chp
和 proxy.traefik
的 networkPolicy 配置的默认设置是 [http, https]
,而其他 networkPolicies 的默认设置是 []
。
请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s 服务的端口名称或数字。
默认值: []
hub.db#
hub.db.type#
要用于 Hub 数据库的数据库后端类型。
Hub 需要持久数据库才能正常运行,这使您可以指定它应该存储在何处。
各种选项是
sqlite-pvc
使用
sqlite
数据库,该数据库保存在附加到 Hub 的持久卷上。默认情况下,此磁盘由云提供商使用由 存储类 配置的动态供应创建。您可以通过设置
hub.db.pvc
下的各种属性来自定义此磁盘的创建/附加方式。这是默认设置,对于大多数云提供商部署来说应该可以正常工作。
sqlite-memory
使用内存中的
sqlite
数据库。这仅应用于测试,因为数据库会在 Hub Pod 重新启动时被擦除,导致 Hub 丢失所有之前登录用户的记忆。在测试中使用此功能时,请确保在 Hub 每次重新启动时删除 Hub 创建的所有其他对象(例如用户 Pod、用户 PVC 等)。否则,您可能会遇到有关重复资源的错误。
mysql
使用外部托管的 mysql 数据库。
如果使用此选项,则必须在
hub.db.url
中指定要连接到的 mysql 数据库的 sqlalchemy 连接字符串。连接字符串的通用格式为
mysql+pymysql://<db-username>:<db-password>@<db-hostname>:<db-port>/<db-name>
连接字符串中指定的用户必须具有在指定数据库中创建表的权限。
postgres
使用外部托管的 postgres 数据库。
如果您使用此选项,则必须在
hub.db.url
中指定要连接到的 PostgreSQL 数据库的 SQLAlchemy 连接字符串。连接字符串的通用格式为
postgresql+psycopg2://<db-username>:<db-password>@<db-hostname>:<db-port>/<db-name>
连接字符串中指定的用户必须具有在指定数据库中创建表的权限。
其他
使用除 MySQL 或 PostgreSQL 之外的某种外部托管数据库。
当使用 其他 时,数据库密码必须作为 hub.db.url 的一部分传递,因为 hub.db.password 将被忽略。
默认值: "sqlite-pvc"
hub.db.pvc#
当 hub.db.type
为 sqlite-pvc
时,自定义使用的持久卷声明。
hub.db.pvc.annotations#
要应用于包含 SQLite 数据库的 PVC 的注释。
有关注释的更多详细信息,请参阅 Kubernetes 文档。
hub.db.pvc.selector#
要为包含 SQLite 数据库的 PVC 设置的标签选择器。
当您使用特定 PV 时很有用,并且希望绑定到该 PV 并且仅绑定到该 PV。
有关使用标签选择器来选择要绑定到的 PV 的更多详细信息,请参阅 Kubernetes 文档。
hub.db.pvc.storage#
为数据库磁盘请求的磁盘大小。
默认值: "1Gi"
hub.db.pvc.accessModes#
AccessModes 包含卷应具有的所需访问模式。有关更多信息,请参阅 k8s 文档。
默认值: ["ReadWriteOnce"]
hub.db.pvc.storageClassName#
声明所需的 StorageClass 的名称。
如果这是一个空字符串,它将被设置为一个空字符串,而如果它为空,它将根本不会被设置。
hub.db.pvc.subPath#
卷中容器的卷应从中挂载的路径。默认为“”(卷的根目录)。
hub.db.upgrade#
使用外部数据库的用户需要选择加入 JupyterHub 特定数据库模式的升级(如果需要),作为 JupyterHub 版本升级的一部分。
hub.db.url#
当 hub.db.type
为 MySQL 或 PostgreSQL 时,连接字符串。
有关此属性格式的更多详细信息,请参阅 hub.db.type
的文档。
hub.db.password#
当 hub.db.type
为 MySQL 或 PostgreSQL 时,数据库的密码。
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 中运行的代码,例如身份验证器或生成器。
带有 $(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#
任意额外的基于 Python 的配置,应该放在 jupyterhub_config.py
中。
这是逃生舱 - 如果你想配置 JupyterHub 做一些这里没有作为选项的特定事情,你可以在此处编写原始 Python 代码来实现。
extraConfig 是一个字典,因此可以在不同的名称下有多个配置片段。配置部分将根据键的字母顺序运行。
此处可以执行的操作的非详尽示例
子类化身份验证器/生成器以执行自定义操作
为不同的图像集动态启动不同的图像
将来自 GitHub 身份验证器的身份验证令牌注入用户 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.nodePort#
用于部署 hub 服务的 nodePort。
hub.service.annotations#
要应用于 hub 服务的 Kubernetes 注释。
hub.service.extraPorts#
除了 hub
/ 8081
之外,要添加到 Hub Service 对象的额外端口。这应该是一个包含 name
、port
和 targetPort
的数组。有关更多详细信息,请参阅 多端口服务。
默认值: []
hub.service.loadBalancerIP#
hub Kubernetes 服务应该公开的公共 IP 地址。不建议直接公开 hub。相反,应通过代理公共服务将流量路由到 hub。
hub.pdb#
为该部署配置 PodDisruptionBudget。
默认情况下,这些功能被禁用,因为我们的部署不支持与多个副本并行运行。只有用户调度程序目前支持与多个副本并行运行。如果它们为只有一个副本的部署启用,它们将阻止 kubectl drain
例如节点。
请注意,如果您要阻止缩减包含 hub/proxy/autohttps pod 的节点,这会导致部署中断,那么您应该改为对部署的 pod 进行注释,如本文档所述。
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
有关中断的更多详细信息,请参见Kubernetes 文档。
hub.pdb.enabled#
决定是否创建针对部署 pod 的 PodDisruptionBudget。
默认: false
hub.existingSecret#
此选项允许您提供现有 k8s Secret 的名称,以便与图表管理的 k8s Secret 一起使用。此 k8s Secret 的内容将与图表管理的 k8s Secret 合并,优先级将赋予自管理的 k8s Secret。
警告
自管理的 k8s Secret 必须镜像图表管理的 Secret 中的结构。
proxy.secretToken
(也称为hub.config.ConfigurableHTTPProxy.auth_token
)仅从图表管理的 k8s Secret 中读取。
hub.nodeSelector#
一个包含键值对的对象,表示标签。K8s 节点需要匹配所有这些标签,才能将此 Pod 调度到这些节点上。
disktype: ssd
nodetype: awesome
有关更多详细信息,请参见Kubernetes 文档。
hub.tolerations#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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 图表中配置这些服务的详细信息,请继续阅读,但有关服务本身的详细信息,请阅读 JupyterHub 的文档。
注意
下面只记录了可以为服务配置的 JupyterHub 配置选项的一部分。即使该 Helm 图表无法识别,此处设置的所有配置都将应用。
JupyterHub 的原生配置接受服务对象的列表,该 Helm 图表只接受一个字典,其中每个键代表一个服务的名称,值是实际的服务对象。
通过该 Helm 图表配置 JupyterHub 服务时,可以省略 name
字段,因为它可以从字典键中推断出来。此外,可以省略 api_token
字段,因为它将从该 Helm 图表的 1.1.0 版本开始自动生成。
如果您有一个需要访问为服务自动生成的 api_token 的外部服务,则可以从该 Helm 图表的 hub
k8s Secret 部分访问它,该部分位于 hub.services.my-service-config-key.apiToken
键下。
以下是一个两个服务的示例配置,第一个服务显式设置了名称和 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 图表的 Helm 图表,并希望让某些 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 图表中配置 JupyterHub 时,可以省略该名称。
hub.services.admin#
hub.services.command#
hub.services.url#
hub.services.api_token#
如果未显式设置,api_token 将自动生成。它还将通过该 Helm 图表的 k8s Secret 部分在特定键下公开。
有关此内容的详细信息,请参阅 hub.services
下的文档。
hub.services.apiToken#
JupyterHub Helm 图表为了向后兼容而提供的 api_token 的别名,它将转换为 api_token。
hub.loadRoles#
在此处定义 JupyterHub 角色并将其应用于 JupyterHub 用户、组和服务,以根据 JupyterHub 的 RBAC 系统授予他们额外的权限。
请配合 JupyterHub 文档 关于 load_roles
的内容。
请注意,虽然 JupyterHub 的原生配置 load_roles
接受角色对象的列表,但此 Helm 图表仅接受字典,其中每个键代表角色的名称,而值是实际的角色对象。
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 图表配置 JupyterHub 角色时,可以省略 name
字段,因为它可以从字典键中推断出来。
hub.shutdownOnLogout#
JupyterHub 本机配置,有关更多信息,请参见JupyterHub 文档。
hub.templatePaths#
JupyterHub 本机配置,有关更多信息,请参见JupyterHub 文档。
默认值: []
hub.templateVars#
JupyterHub 本机配置,有关更多信息,请参见JupyterHub 文档。
hub.serviceAccount#
此配置嵌套在下的特定 Pod 使用的 k8s ServiceAccount 的配置。
hub.serviceAccount.create#
是否创建 ServiceAccount
资源。
默认: true
hub.serviceAccount.name#
此配置有多种用途
它将是相关 Pod 引用的
serviceAccountName
。如果设置了
create
,则创建的 ServiceAccount 资源将以此命名。如果设置了
rbac.create
,则关联的(集群)角色绑定将绑定到此名称。
如果未明确提供,将使用默认名称。
hub.serviceAccount.annotations#
要应用于 k8s ServiceAccount 的 Kubernetes 注释。
hub.extraPodSpec#
作为 YAML 对象的任意额外 k8s Pod 规范。此设置的默认值为一个空对象,即没有额外配置。此属性的值将按原样添加到 Pod 规范中。
对于具有高级配置要求的专家 k8s 管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。错误使用此设置可能会破坏您的部署和/或损害您的系统安全。
这是用于插入任意 Pod 规范的四个相关设置之一
hub.extraPodSpec
proxy.chp.extraPodSpec
proxy.traefik.extraPodSpec
scheduling.userScheduler.extraPodSpec
这些设置的一个现实世界中的用途是启用主机网络。例如,要为 hub Pod 配置主机网络,请将以下内容添加到您的 helm 配置值中
hub:
extraPodSpec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
同样,要为代理 Pod 配置主机网络,请添加以下内容
proxy:
chp:
extraPodSpec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
注意:主机网络具有特殊的安全含义,并且很容易破坏您的部署。这是一个示例,而不是认可。
有关最新的 Pod 资源规范,请参阅 PodSpec。
proxy#
proxy.chp#
配置由 jupyterhub 管理的可配置 HTTP 代理 (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#
除了核心功能所需的内容之外,还要添加其他入站规则。
默认值: []
proxy.chp.networkPolicy.egress#
除了核心功能所需的内容和通过 .egressAllowRules
添加的内容之外,还要添加其他出站规则。
版本 2.0.0 中的变更: 默认值已从提供一个允许所有出站流量的非常宽松的规则更改为不提供任何规则。 不过,仍然可以通过将 .egressAllowRules
设置为 true 来提供宽松的规则。
例如,以下配置禁用了 hub pod 的更宽松的 .privateIPs
出站允许规则,而是提供了严格的范围权限,以访问由 pod 标签标识的特定 k8s 本地服务。
hub:
networkPolicy:
egressAllowRules:
privateIPs: false
egress:
- to:
- podSelector:
matchLabels:
app: my-k8s-local-service
ports:
- protocol: TCP
port: 5978
默认值: []
proxy.chp.networkPolicy.egressAllowRules#
这是一组预定义规则,启用后将添加到 NetworkPolicy 的出站规则列表中。
最终的出站规则将是以下内容的组合:
Helm 图表中各自 pod(s) 功能的特定规则
基于启用的
egressAllowRules
标志的规则用户显式指定的规则
注意
此配置下的每个标志都不会渲染成 NetworkPolicy 资源中的专用规则,而是与其他标志组合成一组简化的规则,以避免性能损失。
版本 2.0.0 中的新增功能。
proxy.chp.networkPolicy.egressAllowRules.cloudMetadataServer#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到云元数据服务器的出站连接。
请注意,nonPrivateIPs
规则允许所有非私有 IP 范围,但对云元数据服务器进行了例外,将其作为允许访问云元数据服务器的最终配置。
版本 3.0.0 中的变更: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables
同时配置为 true,以避免出现模棱两可的配置。
默认: true
proxy.chp.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到云元数据服务器的出站连接。
在单用户配置中依赖此规则应与禁用 singleuser.cloudMetadata.blockWithIptables
相辅相成,以避免出现模棱两可的配置。
此规则可能相关的已知情况
在使用云 DNS 的 GKE 集群中,云 DNS 在云元数据服务器的非私有 IP 上访问。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
proxy.chp.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到 kube-system 命名空间中 pod 的出站连接。
此规则可能相关的已知情况
GKE、EKS、AKS 和其他直接依赖
kube-dns
或coredns
pod 的集群,这些 pod 位于kube-system
命名空间中。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
proxy.chp.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到私有 IP 的出站连接。
此规则可能相关的已知情况
依赖于节点本地 DNS 缓存(位于未知私有 IP 上)间接访问 DNS 服务器的 GKE 集群。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
警告
此规则预计不会在依赖 Cilium 来强制执行 NetworkPolicy 规则的集群中工作(包括使用 Dataplane v2 的 GKE 集群),这是由于 已知限制。
默认: true
proxy.chp.networkPolicy.egressAllowRules.nonPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到非私有 IP 范围的出站连接,但云元数据服务器除外。 这意味着各自的 pod(s) 可以建立到互联网的连接,但不能(例如)建立到同一集群中运行的未保护的 Prometheus 服务器的连接。
默认: true
proxy.chp.networkPolicy.egressAllowRules.privateIPs#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
私有 IP 指的是 IP 范围 10.0.0.0/8
、172.16.0.0/12
、192.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.chp
和 proxy.traefik
的 networkPolicy 配置的默认设置是 [http, https]
,而其他 networkPolicies 的默认设置是 []
。
请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s 服务的端口名称或数字。
默认值: ["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 的默认值
设置 CONFIGPROXY_SSL_KEY_PASSPHRASE 以设置 SSL 密钥的密码
带有 $(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#
为该部署配置 PodDisruptionBudget。
默认情况下,这些功能被禁用,因为我们的部署不支持与多个副本并行运行。只有用户调度程序目前支持与多个副本并行运行。如果它们为只有一个副本的部署启用,它们将阻止 kubectl drain
例如节点。
请注意,如果您要阻止缩减包含 hub/proxy/autohttps pod 的节点,这会导致部署中断,那么您应该改为对部署的 pod 进行注释,如本文档所述。
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
有关中断的更多详细信息,请参见Kubernetes 文档。
proxy.chp.pdb.enabled#
决定是否创建针对部署 pod 的 PodDisruptionBudget。
默认: false
proxy.chp.nodeSelector#
一个包含键值对的对象,表示标签。K8s 节点需要匹配所有这些标签,才能将此 Pod 调度到这些节点上。
disktype: ssd
nodetype: awesome
有关更多详细信息,请参见Kubernetes 文档。
proxy.chp.tolerations#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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.1"
proxy.chp.image.pullPolicy#
配置 Pod 的 spec.imagePullPolicy
。
有关更多信息,请参阅 Kubernetes 文档。
proxy.chp.image.pullSecrets#
对现有 Kubernetes Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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#
作为 YAML 对象的任意额外 k8s Pod 规范。此设置的默认值为一个空对象,即没有额外配置。此属性的值将按原样添加到 Pod 规范中。
对于具有高级配置要求的专家 k8s 管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。错误使用此设置可能会破坏您的部署和/或损害您的系统安全。
这是用于插入任意 Pod 规范的四个相关设置之一
hub.extraPodSpec
proxy.chp.extraPodSpec
proxy.traefik.extraPodSpec
scheduling.userScheduler.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 字节的加密安全随机生成的字符串,用于保护运行 configurable-http-proxy 实例的 hub pod 和代理 pod 之间的通信。
# to generate a value, run
openssl rand -hex 32
更改此值会导致代理和 hub pod 重新启动。定期轮换这些值是一个良好的安全实践。如果此密钥泄露,请立即将其更改为其他值,否则用户数据可能会被泄露。
proxy.service#
k8s 服务 proxy-public
的配置,该服务将指向运行 Traefik 进行 TLS 终止的 autohttps
pod,或运行 ConfigurableHTTPProxy 的 proxy
pod。来自互联网用户的传入流量应始终通过此 k8s 服务。
当此服务指向 autohttps
pod,然后路由到 proxy
pod 时,将添加一个名为 proxy-http
的 k8s 服务,该服务指向 proxy
pod,并且只接受端口 80 上的 HTTP 流量。
proxy.service.type#
默认 LoadBalancer
。有关服务类型的更多信息,请参阅 Kubernetes 文档。
默认值: "LoadBalancer"
proxy.service.labels#
要添加到代理服务的额外标签。
有关标签的更多信息,请参阅 Kubernetes 文档。
proxy.service.annotations#
要应用于公开代理的服务的注释。
有关注释的更多详细信息,请参阅 Kubernetes 文档。
proxy.service.nodePorts#
用于设置 NodePorts 以在 http 和 https 上公开服务的对象。
有关 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=letsencrypt
或 proxy.https.enabled=false
一起使用,因为它会删除唯一公开的端口。
默认: false
proxy.service.extraPorts#
k8s 服务应接受传入流量的额外端口,这些端口将被重定向到 autohttps
pod(treafik)或 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 暂存:https://acme-staging-v02.api.letsencrypt.org/directory Let's Encrypt 生产: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#
除了核心功能所需的内容之外,还要添加其他入站规则。
默认值: []
proxy.traefik.networkPolicy.egress#
除了核心功能所需的内容和通过 .egressAllowRules
添加的内容之外,还要添加其他出站规则。
版本 2.0.0 中的变更: 默认值已从提供一个允许所有出站流量的非常宽松的规则更改为不提供任何规则。 不过,仍然可以通过将 .egressAllowRules
设置为 true 来提供宽松的规则。
例如,以下配置禁用了 hub pod 的更宽松的 .privateIPs
出站允许规则,而是提供了严格的范围权限,以访问由 pod 标签标识的特定 k8s 本地服务。
hub:
networkPolicy:
egressAllowRules:
privateIPs: false
egress:
- to:
- podSelector:
matchLabels:
app: my-k8s-local-service
ports:
- protocol: TCP
port: 5978
默认值: []
proxy.traefik.networkPolicy.egressAllowRules#
这是一组预定义规则,启用后将添加到 NetworkPolicy 的出站规则列表中。
最终的出站规则将是以下内容的组合:
Helm 图表中各自 pod(s) 功能的特定规则
基于启用的
egressAllowRules
标志的规则用户显式指定的规则
注意
此配置下的每个标志都不会渲染成 NetworkPolicy 资源中的专用规则,而是与其他标志组合成一组简化的规则,以避免性能损失。
版本 2.0.0 中的新增功能。
proxy.traefik.networkPolicy.egressAllowRules.cloudMetadataServer#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到云元数据服务器的出站连接。
请注意,nonPrivateIPs
规则允许所有非私有 IP 范围,但对云元数据服务器进行了例外,将其作为允许访问云元数据服务器的最终配置。
版本 3.0.0 中的变更: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables
同时配置为 true,以避免出现模棱两可的配置。
默认: true
proxy.traefik.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到云元数据服务器的出站连接。
在单用户配置中依赖此规则应与禁用 singleuser.cloudMetadata.blockWithIptables
相辅相成,以避免出现模棱两可的配置。
此规则可能相关的已知情况
在使用云 DNS 的 GKE 集群中,云 DNS 在云元数据服务器的非私有 IP 上访问。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
proxy.traefik.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到 kube-system 命名空间中 pod 的出站连接。
此规则可能相关的已知情况
GKE、EKS、AKS 和其他直接依赖
kube-dns
或coredns
pod 的集群,这些 pod 位于kube-system
命名空间中。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
proxy.traefik.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到私有 IP 的出站连接。
此规则可能相关的已知情况
依赖于节点本地 DNS 缓存(位于未知私有 IP 上)间接访问 DNS 服务器的 GKE 集群。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
警告
此规则预计不会在依赖 Cilium 来强制执行 NetworkPolicy 规则的集群中工作(包括使用 Dataplane v2 的 GKE 集群),这是由于 已知限制。
默认: true
proxy.traefik.networkPolicy.egressAllowRules.nonPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到非私有 IP 范围的出站连接,但云元数据服务器除外。 这意味着各自的 pod(s) 可以建立到互联网的连接,但不能(例如)建立到同一集群中运行的未保护的 Prometheus 服务器的连接。
默认: true
proxy.traefik.networkPolicy.egressAllowRules.privateIPs#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
私有 IP 指的是 IP 范围 10.0.0.0/8
、172.16.0.0/12
、192.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.chp
和 proxy.traefik
的 networkPolicy 配置的默认设置是 [http, https]
,而其他 networkPolicies 的默认设置是 []
。
请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s 服务的端口名称或数字。
默认值: ["http", "https"]
proxy.traefik.extraInitContainers#
在图表中设置的容器之后,与 traefik pod 一起运行的额外 initContainers 列表。请参阅 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#
为该部署配置 PodDisruptionBudget。
默认情况下,这些功能被禁用,因为我们的部署不支持与多个副本并行运行。只有用户调度程序目前支持与多个副本并行运行。如果它们为只有一个副本的部署启用,它们将阻止 kubectl drain
例如节点。
请注意,如果您要阻止缩减包含 hub/proxy/autohttps pod 的节点,这会导致部署中断,那么您应该改为对部署的 pod 进行注释,如本文档所述。
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
有关中断的更多详细信息,请参见Kubernetes 文档。
proxy.traefik.pdb.enabled#
决定是否创建针对部署 pod 的 PodDisruptionBudget。
默认: false
proxy.traefik.nodeSelector#
一个包含键值对的对象,表示标签。K8s 节点需要匹配所有这些标签,才能将此 Pod 调度到这些节点上。
disktype: ssd
nodetype: awesome
有关更多详细信息,请参见Kubernetes 文档。
proxy.traefik.tolerations#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.tolerations)。
将此字段传递给 Toleration
对象数组。
有关更多信息,请参见Kubernetes 文档。
默认值: []
proxy.traefik.containerSecurityContext#
容器安全上下文的 k8s 本机规范,有关详细信息,请参见文档。
proxy.traefik.extraDynamicConfig#
这指的是 traefik 的启动后配置。
此 Helm 图表已提供此类配置,因此您可以在此处合并其他配置。如果您要使用此配置,您可能需要检查在此处声明的默认配置 here。
proxy.traefik.extraPorts#
您想要公开的 autohttps pod 中 traefik 容器的额外端口,以 k8s 本地方式格式化。
默认值: []
proxy.traefik.extraStaticConfig#
这指的是 traefik 的启动配置。
此 Helm 图表已提供此类配置,因此您可以在此处合并其他配置。如果您要使用此配置,您可能需要检查在此处声明的默认配置 here。
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
默认值: "v2.11.0"
proxy.traefik.image.pullPolicy#
配置 Pod 的 spec.imagePullPolicy
。
有关更多信息,请参阅 Kubernetes 文档。
proxy.traefik.image.pullSecrets#
对现有 Kubernetes Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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 的配置。
proxy.traefik.serviceAccount.create#
是否创建 ServiceAccount
资源。
默认: true
proxy.traefik.serviceAccount.name#
此配置有多种用途
它将是相关 Pod 引用的
serviceAccountName
。如果设置了
create
,则创建的 ServiceAccount 资源将以此命名。如果设置了
rbac.create
,则关联的(集群)角色绑定将绑定到此名称。
如果未明确提供,将使用默认名称。
proxy.traefik.serviceAccount.annotations#
要应用于 k8s ServiceAccount 的 Kubernetes 注释。
proxy.traefik.extraPodSpec#
作为 YAML 对象的任意额外 k8s Pod 规范。此设置的默认值为一个空对象,即没有额外配置。此属性的值将按原样添加到 Pod 规范中。
对于具有高级配置要求的专家 k8s 管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。错误使用此设置可能会破坏您的部署和/或损害您的系统安全。
这是用于插入任意 Pod 规范的四个相关设置之一
hub.extraPodSpec
proxy.chp.extraPodSpec
proxy.traefik.extraPodSpec
scheduling.userScheduler.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#
此配置部分指的是自动 https Pod 中的 sidecar 容器的配置,该容器与负责 TLS 终止的 traefik 容器并行运行。
此容器的目的是将 TLS 证书存储到 k8s Secret 中并从其中加载。 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 Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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#
除了核心功能所需的内容之外,还要添加其他入站规则。
默认值: []
singleuser.networkPolicy.egress#
除了核心功能所需的内容和通过 .egressAllowRules
添加的内容之外,还要添加其他出站规则。
版本 2.0.0 中的变更: 默认值已从提供一个允许所有出站流量的非常宽松的规则更改为不提供任何规则。 不过,仍然可以通过将 .egressAllowRules
设置为 true 来提供宽松的规则。
例如,以下配置禁用了 hub pod 的更宽松的 .privateIPs
出站允许规则,而是提供了严格的范围权限,以访问由 pod 标签标识的特定 k8s 本地服务。
hub:
networkPolicy:
egressAllowRules:
privateIPs: false
egress:
- to:
- podSelector:
matchLabels:
app: my-k8s-local-service
ports:
- protocol: TCP
port: 5978
默认值: []
singleuser.networkPolicy.egressAllowRules#
这是一组预定义规则,启用后将添加到 NetworkPolicy 的出站规则列表中。
最终的出站规则将是以下内容的组合:
Helm 图表中各自 pod(s) 功能的特定规则
基于启用的
egressAllowRules
标志的规则用户显式指定的规则
注意
此配置下的每个标志都不会渲染成 NetworkPolicy 资源中的专用规则,而是与其他标志组合成一组简化的规则,以避免性能损失。
版本 2.0.0 中的新增功能。
singleuser.networkPolicy.egressAllowRules.cloudMetadataServer#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到云元数据服务器的出站连接。
请注意,nonPrivateIPs
规则允许所有非私有 IP 范围,但对云元数据服务器进行了例外,将其作为允许访问云元数据服务器的最终配置。
版本 3.0.0 中的变更: 此配置不允许与 singleuser.cloudMetadata.blockWithIptables
同时配置为 true,以避免出现模棱两可的配置。
默认: false
singleuser.networkPolicy.egressAllowRules.dnsPortsCloudMetadataServer#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到云元数据服务器的出站连接。
在单用户配置中依赖此规则应与禁用 singleuser.cloudMetadata.blockWithIptables
相辅相成,以避免出现模棱两可的配置。
此规则可能相关的已知情况
在使用云 DNS 的 GKE 集群中,云 DNS 在云元数据服务器的非私有 IP 上访问。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
singleuser.networkPolicy.egressAllowRules.dnsPortsKubeSystemNamespace#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到 kube-system 命名空间中 pod 的出站连接。
此规则可能相关的已知情况
GKE、EKS、AKS 和其他直接依赖
kube-dns
或coredns
pod 的集群,这些 pod 位于kube-system
命名空间中。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
版本 3.0.0 中的新增功能。
默认: true
singleuser.networkPolicy.egressAllowRules.dnsPortsPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以通过端口 53 建立到私有 IP 的出站连接。
此规则可能相关的已知情况
依赖于节点本地 DNS 缓存(位于未知私有 IP 上)间接访问 DNS 服务器的 GKE 集群。
注意
此图表不知道如何识别 pod 将依赖的 DNS 服务器,因为 k8s 集群的设置方式各不相同。 因此,默认情况下启用了多个规则,以确保 DNS 连接。
警告
此规则预计不会在依赖 Cilium 来强制执行 NetworkPolicy 规则的集群中工作(包括使用 Dataplane v2 的 GKE 集群),这是由于 已知限制。
默认: true
singleuser.networkPolicy.egressAllowRules.nonPrivateIPs#
对于所有网络策略,默认值为 true
。
启用此规则后,各自的 pod(s) 可以建立到非私有 IP 范围的出站连接,但云元数据服务器除外。 这意味着各自的 pod(s) 可以建立到互联网的连接,但不能(例如)建立到同一集群中运行的未保护的 Prometheus 服务器的连接。
默认: true
singleuser.networkPolicy.egressAllowRules.privateIPs#
对于单用户服务器,默认值为 false
,但对于所有其他网络策略,默认值为 true
。
私有 IP 指的是 IP 范围 10.0.0.0/8
、172.16.0.0/12
、192.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.chp
和 proxy.traefik
的 networkPolicy 配置的默认设置是 [http, https]
,而其他 networkPolicies 的默认设置是 []
。
请注意,这些端口名称或数字针对的是 Pod 的端口名称或数字,而不是 k8s 服务的端口名称或数字。
默认值: []
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 中被称为请求。
默认值: "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 Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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#
每个单用户 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#
有关配置文件列表的更多信息,请参阅 KubeSpawner 的文档,因为这只是对该配置的直通。
注意
图像拉取器知道 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 图表配置中嵌入整个文件,您可以在 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
常见用途
JupyterHub 模板自定义
您可以通过将新的模板注入到
/usr/local/share/jupyterhub/templates
中来替换 hub pod 中的默认 JupyterHub 用户界面模板。这些模板可以反过来引用注入到/usr/local/share/jupyterhub/static
中的自定义图像。JupyterHub 独立文件配置
您可以将一个独立的 .py 文件注入到
/usr/local/etc/jupyterhub/jupyterhub_config.d
中,而不是通过hub.extraConfig
将 JupyterHub python 配置作为字符串嵌入到 YAML 文件中,该文件会自动加载。灵活配置
通过注入文件,您无需将它们嵌入到您需要重新构建的 docker 镜像中。
如果您的配置文件是 YAML/JSON/TOML 文件,您也可以使用
data
而不是stringData
,这允许您在单独的 Helm 配置文件中设置各种配置。这对于帮助依赖图表仅覆盖文件中的某些配置部分或允许通过多个 Helm 配置文件设置配置非常有用。
限制
文件大小
hub.extraFiles
和singleuser.extraFiles
中的文件分别存储在它们自己的 k8s Secret 资源中。由于 k8s Secret 通常限制为 1MB,因此您将被限制为总文件大小小于 1MB,因为还存在 base64 编码,这会将可用容量降低到 75%。文件更新
挂载的文件仅在容器启动时设置。这是 因为我们使用
subPath
,这是为了避免替换我们挂载的整个目录的内容。
singleuser.extraEnv#
应该为用户 pod 设置的额外环境变量。
带有 $(ENV_VAR_NAME)
的字符串文字将由 Kubelet(Kubernetes 的一部分)扩展。请注意,用户 pod 将能够访问一组您可以使用的环境变量,例如 JUPYTERHUB_USER
和 JUPYTERHUB_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#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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 图表文档 中的专用部分。
singleuser.cloudMetadata.blockWithIptables#
默认: true
singleuser.cloudMetadata.ip#
默认值: "169.254.169.254"
singleuser.cmd#
用于 KubeSpawner.cmd 的直通配置。默认值为“jupyterhub-singleuser”。使用 cmd: null
从镜像启动自定义 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 Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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 图表特定配置选项(如 singleuser.storage.type
)间接配置。
singleuser.storage.capacity#
配置 KubeSpawner.storage_capacity
。
有关更多信息,请参阅 KubeSpawner 文档。
默认值: "10Gi"
singleuser.storage.dynamic#
singleuser.storage.dynamic.pvcNameTemplate#
配置 KubeSpawner.pvc_name_template
,它将是 KubeSpawner 为每个用户创建的 PVC 的资源名称(如果需要)。
默认值: "claim-{username}{servername}"
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.volumeNameTemplate#
配置 KubeSpawner.volume_name_template
,它是从容器 volumeMounts 部分引用的名称。
默认值: "volume-{username}{servername}"
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 图表添加的 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.26.15"
scheduling.userScheduler.image.pullPolicy#
配置 Pod 的 spec.imagePullPolicy
。
有关更多信息,请参阅 Kubernetes 文档。
scheduling.userScheduler.image.pullSecrets#
对现有 Kubernetes Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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#
为该部署配置 PodDisruptionBudget。
默认情况下,这些功能被禁用,因为我们的部署不支持与多个副本并行运行。只有用户调度程序目前支持与多个副本并行运行。如果它们为只有一个副本的部署启用,它们将阻止 kubectl drain
例如节点。
请注意,如果您要阻止缩减包含 hub/proxy/autohttps pod 的节点,这会导致部署中断,那么您应该改为对部署的 pod 进行注释,如本文档所述。
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
有关中断的更多详细信息,请参见Kubernetes 文档。
scheduling.userScheduler.pdb.enabled#
决定是否创建针对部署 pod 的 PodDisruptionBudget。
默认: true
scheduling.userScheduler.nodeSelector#
一个包含键值对的对象,表示标签。K8s 节点需要匹配所有这些标签,才能将此 Pod 调度到这些节点上。
disktype: ssd
nodetype: awesome
有关更多详细信息,请参见Kubernetes 文档。
scheduling.userScheduler.tolerations#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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": {"resources": [{"name": "cpu", "weight": 1}, {"name": "memory", "weight": 1}], "type": "MostAllocated"}}}]
scheduling.userScheduler.resources#
k8s 原生资源规范,请参阅 文档。
scheduling.userScheduler.serviceAccount#
此配置嵌套在下的特定 Pod 使用的 k8s ServiceAccount 的配置。
scheduling.userScheduler.serviceAccount.create#
是否创建 ServiceAccount
资源。
默认: true
scheduling.userScheduler.serviceAccount.name#
此配置有多种用途
它将是相关 Pod 引用的
serviceAccountName
。如果设置了
create
,则创建的 ServiceAccount 资源将以此命名。如果设置了
rbac.create
,则关联的(集群)角色绑定将绑定到此名称。
如果未明确提供,将使用默认名称。
scheduling.userScheduler.serviceAccount.annotations#
要应用于 k8s ServiceAccount 的 Kubernetes 注释。
scheduling.userScheduler.extraPodSpec#
作为 YAML 对象的任意额外 k8s Pod 规范。此设置的默认值为一个空对象,即没有额外配置。此属性的值将按原样添加到 Pod 规范中。
对于具有高级配置要求的专家 k8s 管理员来说,这是一个强大的工具。此设置仅应用于无法通过其他设置完成的配置。错误使用此设置可能会破坏您的部署和/或损害您的系统安全。
这是用于插入任意 Pod 规范的四个相关设置之一
hub.extraPodSpec
proxy.chp.extraPodSpec
proxy.traefik.extraPodSpec
scheduling.userScheduler.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 状态可以触发集群自动扩展器进行扩展。
启用此选项只有在满足以下条件时才有意义
安装了集群自动扩展器。
用户占位符 Pod 被配置为具有等于或高于集群自动扩展器的“优先级截止值”的优先级,以便集群自动扩展器提前为挂起的用户占位符 Pod 扩展节点。
普通用户 Pod 的优先级高于用户占位符 Pod。
镜像拉取器 Pod 的优先级介于普通用户 Pod 和用户占位符 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#
用户占位符 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.9"
scheduling.userPlaceholder.image.pullPolicy#
配置 Pod 的 spec.imagePullPolicy
。
有关更多信息,请参阅 Kubernetes 文档。
scheduling.userPlaceholder.image.pullSecrets#
对现有 Kubernetes Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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#
要添加到占位符 Pod 的额外标签。
有关标签的更多信息,请参阅 Kubernetes 文档。
scheduling.userPlaceholder.annotations#
要添加到占位符 Pod 的额外注释。
scheduling.userPlaceholder.resources#
除非在此处指定,否则占位符 Pod 将请求与真实单用户 Pod 相同的资源。
scheduling.userPlaceholder.containerSecurityContext#
容器安全上下文的 k8s 本机规范,有关详细信息,请参见文档。
scheduling.corePods#
这些设置影响核心 Pod,例如 hub、代理和用户调度程序 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#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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 以代理公共服务。
有关更多详细信息,请参阅 高级主题 — 使用 Kubernetes 的 Zero to JupyterHub 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 文档。
默认值: []
prePuller#
prePuller.revisionHistoryLimit#
配置资源的 spec.revisionHistoryLimit
。这适用于 Deployment、StatefulSet 和 DaemonSet 资源。
有关更多信息,请参阅 Kubernetes 文档。
prePuller.labels#
要添加到预拉取作业 Pod 的额外标签。
有关标签的更多信息,请参阅 Kubernetes 文档。
prePuller.annotations#
要应用于钩子和持续镜像拉取器 Pod 的注释。一个用例是禁用可能干扰镜像拉取的 istio sidecar。
prePuller.resources#
这些是标准的 Kubernetes 资源,包含对 cpu 和内存的请求和限制。它们将用于拉取镜像的 Pod 中的容器。这些应该设置得非常低,因为容器直接关闭或是一个只是空闲的暂停容器。
它们被设置为可配置的,因为 ResourceQuota 的使用可能要求命名空间中的容器设置显式资源。
prePuller.extraTolerations#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.tolerations)。
将此字段传递给 Toleration
对象数组。
有关更多信息,请参见Kubernetes 文档。
默认值: []
prePuller.hook#
有关更多详细信息,请参阅 优化部分。
prePuller.hook.enabled#
默认: true
prePuller.hook.pullOnlyOnChanges#
仅当对要拉取的镜像进行了更改时才拉取,或者更准确地说,如果钩子镜像拉取器 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#
容忍度允许将 pod 调度到带有污点的节点上。这些容忍度是其各自类型的所有 pod 共有的容忍度的附加容忍度(scheduling.corePods.tolerations,scheduling.userPods.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 Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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 的配置。
prePuller.hook.serviceAccount.create#
是否创建 ServiceAccount
资源。
默认: true
prePuller.hook.serviceAccount.name#
此配置有多种用途
它将是相关 Pod 引用的
serviceAccountName
。如果设置了
create
,则创建的 ServiceAccount 资源将以此命名。如果设置了
rbac.create
,则关联的(集群)角色绑定将绑定到此名称。
如果未明确提供,将使用默认名称。
prePuller.hook.serviceAccount.annotations#
要应用于 k8s ServiceAccount 的 Kubernetes 注释。
prePuller.continuous#
有关更多详细信息,请参阅 优化部分。
注意
如果与集群自动伸缩器(自动伸缩节点池)一起使用,还需要添加用户占位符并启用 Pod 优先级。
prePuller.continuous.enabled#
默认: true
prePuller.pullProfileListImages#
singleuser.profileList 配置可以提供图像选择。此选项决定是否应拉取所有在其中标识的图像,包括钩子和连续拉取器。
图像在 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#
图像拉取器 Pod 依赖于 initContainer 来拉取所有图像,它们完成后的实际容器只是运行一个 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.9"
prePuller.pause.image.pullPolicy#
配置 Pod 的 spec.imagePullPolicy
。
有关更多信息,请参阅 Kubernetes 文档。
prePuller.pause.image.pullSecrets#
对现有 Kubernetes Secret 的引用列表,这些 Secret 包含用于拉取镜像的凭据。
此 Pod 的最终 imagePullSecrets
k8s 规范将是以下内容的组合:
此 k8s Secret 列表,专门用于此 pod。
k8s Secret 列表,供 Helm 图表中的所有 pod 使用,在名为
imagePullSecrets
的此 Helm 图表配置中声明。k8s Secret,供 Helm 图表中的所有 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 图表中所有资源的日志级别。
默认: 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 资源,并将它们绑定到配置的服务帐户。
默认: true
global#
global.safeToShowValues#
此标志仅应在遇到包含已屏蔽内容的弃用消息时临时设置为 true,您希望揭示这些内容。
默认: false