#author("2024-12-28T08:08:12+00:00","default:iseki","iseki")
*** ユーザ設定 [#t64dea8f]
**** 動いた設定 [#l33691b1]
 singleuser:
   image:
     name: jupyter/datascience-notebook
     tag: latest
   defaultUrl: "/lab"
 
 hub:
   db:
     type: sqlite-memory
 

**** 動かなかった設定(環境によるのかもしれない) [#wc37a185]
 #
 proxy:
   secretToken: "xxxxxxxxxxxxxx"
 
 #singleuser:
 ##  storage:
 #    dynamic:
 #      storageClass: local-storage
 #      persistentVolumeClaim:
 #        claimName: standard
 
 hub:
   config:
     Authenticator:
       auto_login: "true"
 #  extraVolumes:
 #    - name: hub-db-dir
 #      persistentVolumeClaim:
 #        claimName: local-pvc
 
 singleuser:
   image:
     # You should replace the "latest" tag with a fixed version from:
     # https://hub.docker.com/r/jupyter/datascience-notebook/tags/
     # Inspect the Dockerfile at:
     # https://github.com/jupyter/docker-stacks/tree/HEAD/datascience-notebook/Dockerfile
     name: jupyter/datascience-notebook
     tag: latest
   defaultUrl: "/lab"
   storage:
 #    type: none
     dynamic:
       storageClass: local-storage
 
 #    dynamic:
 #      storageClass: local-storage

*** Full Setting [#o1803dfe]
- helm inspect values jupyterhub/jupyterhub > config2.yaml

- 動いたやつ

 # fullnameOverride and nameOverride distinguishes blank strings, null values,
 # and non-blank strings. For more details, see the configuration reference.
 fullnameOverride: \\"\\"
 nameOverride:
 
 # custom can contain anything you want to pass to the hub pod, as all passed
 # Helm template values will be made available there.
 custom: {}
 
 # imagePullSecret is configuration to create a k8s Secret that Helm chart\\\'s pods
 # can get credentials from to pull their images.
 imagePullSecret:
   create: false
   automaticReferenceInjection: true
   registry:
   username:
   password:
   email:
 # imagePullSecrets is configuration to reference the k8s Secret resources the
 # Helm chart\\\'s pods can get credentials from to pull their images.
 imagePullSecrets: []
 
 # hub relates to the hub pod, responsible for running JupyterHub, its configured
 # Authenticator class KubeSpawner, and its configured Proxy class
 # ConfigurableHTTPProxy. KubeSpawner creates the user pods, and
 # ConfigurableHTTPProxy speaks with the actual ConfigurableHTTPProxy server in
 # the proxy pod.
 hub:
   config:
     JupyterHub:
       admin_access: true
       authenticator_class: dummy
   service:
     type: ClusterIP
     annotations: {}
     ports:
       nodePort:
     extraPorts: []
     loadBalancerIP:
   baseUrl: /
   cookieSecret:
   initContainers: []
   fsGid: 1000
   nodeSelector: {}
   tolerations: []
   concurrentSpawnLimit: 64
   consecutiveFailureLimit: 5
   activeServerLimit:
   deploymentStrategy:
     ## type: Recreate
     ## - sqlite-pvc backed hubs require the Recreate deployment strategy as a
     ##   typical PVC storage can only be bound to one pod at the time.
     ## - JupyterHub isn\\\'t designed to support being run in parallell. More work
     ##   needs to be done in JupyterHub itself for a fully highly available (HA)
     ##   deployment of JupyterHub on k8s is to be possible.
     type: Recreate
   db:
     type: sqlite-pvc
     upgrade:
     pvc:
       annotations: {}
       selector: {}
       accessModes:
         - ReadWriteOnce
       storage: 1Gi
       subPath:
       storageClassName:
     url:
     password:
   labels: {}
   annotations: {}
   command: []
   args: []
   extraConfig: {}
   extraFiles: {}
   extraEnv: {}
   extraContainers: []
   extraVolumes: []
   extraVolumeMounts: []
   image:
     name: jupyterhub/k8s-hub
     tag: \\"1.1.3\\"
     pullPolicy:
     pullSecrets: []
   resources: {}
   containerSecurityContext:
     runAsUser: 1000
     runAsGroup: 1000
     allowPrivilegeEscalation: false
   lifecycle: {}
   services: {}
   pdb:
     enabled: false
     maxUnavailable:
     minAvailable: 1
   networkPolicy:
     enabled: true
     ingress: []
     ## egress for JupyterHub already includes Kubernetes internal DNS and
     ## access to the proxy, but can be restricted further, but ensure to allow
     ## access to the Kubernetes API server that couldn\\\'t be pinned ahead of
     ## time.
     ##
     ## ref: https://stackoverflow.com/a/59016417/2220152
     egress:
       - to:
           - ipBlock:
               cidr: 0.0.0.0/0
     interNamespaceAccessLabels: ignore
     allowedIngressPorts: []
   allowNamedServers: false
   namedServerLimitPerUser:
   authenticatePrometheus:
   redirectToServer:
   shutdownOnLogout:
   templatePaths: []
   templateVars: {}
   livenessProbe:
     # The livenessProbe\\\'s aim to give JupyterHub sufficient time to startup but
     # be able to restart if it becomes unresponsive for ~5 min.
     enabled: true
     initialDelaySeconds: 300
     periodSeconds: 10
     failureThreshold: 30
     timeoutSeconds: 3
   readinessProbe:
     # The readinessProbe\\\'s aim is to provide a successful startup indication,
     # but following that never become unready before its livenessProbe fail and
     # restarts it if needed. To become unready following startup serves no
     # purpose as there are no other pod to fallback to in our non-HA deployment.
     enabled: true
     initialDelaySeconds: 0
     periodSeconds: 2
     failureThreshold: 1000
     timeoutSeconds: 1
   existingSecret:
   serviceAccount:
     annotations: {}
   extraPodSpec: {}
 
 rbac:
   enabled: true
 
 # proxy relates to the proxy pod, the proxy-public service, and the autohttps
 # pod and proxy-http service.
 proxy:
   secretToken:
   annotations: {}
   deploymentStrategy:
     ## type: Recreate
     ## - JupyterHub\\\'s interaction with the CHP proxy becomes a lot more robust
     ##   with this configuration. To understand this, consider that JupyterHub
     ##   during startup will interact a lot with the k8s service to reach a
     ##   ready proxy pod. If the hub pod during a helm upgrade is restarting
     ##   directly while the proxy pod is making a rolling upgrade, the hub pod
     ##   could end up running a sequence of interactions with the old proxy pod
     ##   and finishing up the sequence of interactions with the new proxy pod.
     ##   As CHP proxy pods carry individual state this is very error prone. One
     ##   outcome when not using Recreate as a strategy has been that user pods
     ##   have been deleted by the hub pod because it considered them unreachable
     ##   as it only configured the old proxy pod but not the new before trying
     ##   to reach them.
     type: Recreate
     ## rollingUpdate:
     ## - WARNING:
     ##   This is required to be set explicitly blank! Without it being
     ##   explicitly blank, k8s will let eventual old values under rollingUpdate
     ##   remain and then the Deployment becomes invalid and a helm upgrade would
     ##   fail with an error like this:
     ##
     ##     UPGRADE FAILED
     ##     Error: Deployment.apps \\"proxy\\" is invalid: spec.strategy.rollingUpdate: Forbidden: may not be specified when strategy `type` is \\\'Recreate\\\'
     ##     Error: UPGRADE FAILED: Deployment.apps \\"proxy\\" is invalid: spec.strategy.rollingUpdate: Forbidden: may not be specified when strategy `type` is \\\'Recreate\\\'
     rollingUpdate:
   # service relates to the proxy-public service
   service:
     type: LoadBalancer
     labels: {}
     annotations: {}
     nodePorts:
       http:
       https:
     disableHttpPort: false
     extraPorts: []
     loadBalancerIP:
     loadBalancerSourceRanges: []
   # chp relates to the proxy pod, which is responsible for routing traffic based
   # on dynamic configuration sent from JupyterHub to CHP\\\'s REST API.
   chp:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: jupyterhub/configurable-http-proxy
       tag: 4.5.0 # https://github.com/jupyterhub/configurable-http-proxy/releases
       pullPolicy:
       pullSecrets: []
     extraCommandLineFlags: []
     livenessProbe:
       enabled: true
       initialDelaySeconds: 60
       periodSeconds: 10
     readinessProbe:
       enabled: true
       initialDelaySeconds: 0
       periodSeconds: 2
       failureThreshold: 1000
     resources: {}
     defaultTarget:
     errorTarget:
     extraEnv: {}
     nodeSelector: {}
     tolerations: []
     networkPolicy:
       enabled: true
       ingress: []
       egress:
         - to:
             - ipBlock:
                 cidr: 0.0.0.0/0
       interNamespaceAccessLabels: ignore
       allowedIngressPorts: [http, https]
     pdb:
       enabled: false
       maxUnavailable:
       minAvailable: 1
     extraPodSpec: {}
   # traefik relates to the autohttps pod, which is responsible for TLS
   # termination when proxy.https.type=letsencrypt.
   traefik:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: traefik
       tag: v2.4.11 # ref: https://hub.docker.com/_/traefik?tab=tags
       pullPolicy:
       pullSecrets: []
     hsts:
       includeSubdomains: false
       preload: false
       maxAge: 15724800 # About 6 months
     resources: {}
     labels: {}
     extraEnv: {}
     extraVolumes: []
     extraVolumeMounts: []
     extraStaticConfig: {}
     extraDynamicConfig: {}
     nodeSelector: {}
     tolerations: []
     extraPorts: []
     networkPolicy:
       enabled: true
       ingress: []
       egress:
         - to:
             - ipBlock:
                 cidr: 0.0.0.0/0
       interNamespaceAccessLabels: ignore
       allowedIngressPorts: [http, https]
     pdb:
       enabled: false
       maxUnavailable:
       minAvailable: 1
     serviceAccount:
       annotations: {}
     extraPodSpec: {}
   secretSync:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: jupyterhub/k8s-secret-sync
       tag: \\"1.1.3\\"
       pullPolicy:
       pullSecrets: []
     resources: {}
   labels: {}
   https:
     enabled: false
     type: letsencrypt
     #type: letsencrypt, manual, offload, secret
     letsencrypt:
       contactEmail:
       # Specify custom server here (https://acme-staging-v02.api.letsencrypt.org/directory) to hit staging LE
       acmeServer: https://acme-v02.api.letsencrypt.org/directory
     manual:
       key:
       cert:
     secret:
       name:
       key: tls.key
       crt: tls.crt
     hosts: []
  
 # singleuser relates to the configuration of KubeSpawner which runs in the hub
 # pod, and its spawning of user pods such as jupyter-myusername.
 singleuser:
   podNameTemplate:
   extraTolerations: []
   nodeSelector: {}
   extraNodeAffinity:
     required: []
     preferred: []
   extraPodAffinity:
     required: []
     preferred: []
   extraPodAntiAffinity:
     required: []
     preferred: []
   networkTools:
     image:
       name: jupyterhub/k8s-network-tools
       tag: \\"1.1.3\\"
       pullPolicy:
       pullSecrets: []
   cloudMetadata:
     # block set to true will append a privileged initContainer using the
     # iptables to block the sensitive metadata server at the provided ip.
     blockWithIptables: true
     ip: 169.254.169.254
   networkPolicy:
     enabled: true
     ingress: []
     egress:
       # Required egress to communicate with the hub and DNS servers will be
       # augmented to these egress rules.
       #
       # This default rule explicitly allows all outbound traffic from singleuser
       # pods, except to a typical IP used to return metadata that can be used by
       # someone with malicious intent.
       - to:
           - ipBlock:
               cidr: 0.0.0.0/0
               except:
                 - 169.254.169.254/32
     interNamespaceAccessLabels: ignore
     allowedIngressPorts: []
   events: true
   extraAnnotations: {}
   extraLabels:
     hub.jupyter.org/network-access-hub: \\"true\\"
   extraFiles: {}
   extraEnv: {}
   lifecycleHooks: {}
   initContainers: []
   extraContainers: []
   uid: 1000
   fsGid: 100
   serviceAccountName:
   storage:
     type: dynamic
     extraLabels: {}
     extraVolumes: []
     extraVolumeMounts: []
     static:
       pvcName:
       subPath: \\"{username}\\"
     capacity: 10Gi
     homeMountPath: /home/jovyan
     dynamic:
       storageClass:
       pvcNameTemplate: claim-{username}{servername}
       volumeNameTemplate: volume-{username}{servername}
       storageAccessModes: [ReadWriteOnce]
   image:
     name: jupyterhub/k8s-singleuser-sample
     tag: \\"1.1.3\\"
     pullPolicy:
     pullSecrets: []
   startTimeout: 300
   cpu:
     limit:
     guarantee:
   memory:
     limit:
     guarantee: 1G
   extraResource:
     limits: {}
     guarantees: {}
   cmd: jupyterhub-singleuser
   defaultUrl:
   extraPodConfig: {}
   profileList: []
 
 # scheduling relates to the user-scheduler pods and user-placeholder pods.
 scheduling:
   userScheduler:
     enabled: true
     replicas: 2
     logLevel: 4
     # plugins ref: https://kubernetes.io/docs/reference/scheduling/config/#scheduling-plugins-1
     plugins:
       score:
         disabled:
           - name: SelectorSpread
           - name: TaintToleration
           - name: PodTopologySpread
           - name: NodeResourcesBalancedAllocation
           - name: NodeResourcesLeastAllocated
           # Disable plugins to be allowed to enable them again with a different
           # weight and avoid an error.
           - name: NodePreferAvoidPods
           - name: NodeAffinity
           - name: InterPodAffinity
           - name: ImageLocality
         enabled:
           - name: NodePreferAvoidPods
             weight: 161051
           - name: NodeAffinity
             weight: 14631
           - name: InterPodAffinity
             weight: 1331
           - name: NodeResourcesMostAllocated
             weight: 121
           - name: ImageLocality
             weight: 11
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       # IMPORTANT: Bumping the minor version of this binary should go hand in
       #            hand with an inspection of the user-scheduelrs RBAC resources
       #            that we have forked.
       name: k8s.gcr.io/kube-scheduler
       tag: v1.19.13 # ref: https://github.com/kubernetes/website/blob/main/content/en/releases/patch-releases.md
       pullPolicy:
       pullSecrets: []
     nodeSelector: {}
     tolerations: []
     pdb:
       enabled: true
       maxUnavailable: 1
       minAvailable:
     resources: {}
     serviceAccount:
       annotations: {}
     extraPodSpec: {}
   podPriority:
     enabled: false
     globalDefault: false
     defaultPriority: 0
     userPlaceholderPriority: -10
   userPlaceholder:
     enabled: true
     image:
       name: k8s.gcr.io/pause
       # tag\\\'s can be updated by inspecting the output of the command:
       # gcloud container images list-tags k8s.gcr.io/pause --sort-by=~tags
       #
       # If you update this, also update prePuller.pause.image.tag
       tag: \\"3.5\\"
       pullPolicy:
       pullSecrets: []
     replicas: 0
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     resources: {}
   corePods:
     tolerations:
       - key: hub.jupyter.org/dedicated
         operator: Equal
         value: core
         effect: NoSchedule
       - key: hub.jupyter.org_dedicated
         operator: Equal
         value: core
         effect: NoSchedule
     nodeAffinity:
       matchNodePurpose: prefer
   userPods:
     tolerations:
       - key: hub.jupyter.org/dedicated
         operator: Equal
         value: user
         effect: NoSchedule
       - key: hub.jupyter.org_dedicated
         operator: Equal
         value: user
         effect: NoSchedule
     nodeAffinity:
       matchNodePurpose: prefer
 
 # prePuller relates to the hook|continuous-image-puller DaemonsSets
 prePuller:
   annotations: {}
   resources: {}
   containerSecurityContext:
     runAsUser: 65534 # nobody user
     runAsGroup: 65534 # nobody group
     allowPrivilegeEscalation: false
   extraTolerations: []
   # hook relates to the hook-image-awaiter Job and hook-image-puller DaemonSet
   hook:
     enabled: true
     pullOnlyOnChanges: true
     # image and the configuration below relates to the hook-image-awaiter Job
     image:
       name: jupyterhub/k8s-image-awaiter
       tag: \\"1.1.3\\"
       pullPolicy:
       pullSecrets: []
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     podSchedulingWaitDuration: 10
     nodeSelector: {}
     tolerations: []
     resources: {}
     serviceAccount:
       annotations: {}
   continuous:
     enabled: true
   pullProfileListImages: true
   extraImages: {}
   pause:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: k8s.gcr.io/pause
       # tag\\\'s can be updated by inspecting the output of the command:
       # gcloud container images list-tags k8s.gcr.io/pause --sort-by=~tags
       #
       # If you update this, also update scheduling.userPlaceholder.image.tag
       tag: \\"3.5\\"
       pullPolicy:
       pullSecrets: []
 
 ingress:
   enabled: false
   annotations: {}
   hosts: []
   pathSuffix:
   pathType: Prefix
   tls: []
 
 # cull relates to the jupyterhub-idle-culler service, responsible for evicting
 # inactive singleuser pods.
 #
 # The configuration below, except for enabled, corresponds to command-line flags
 # for jupyterhub-idle-culler as documented here:
 # https://github.com/jupyterhub/jupyterhub-idle-culler#as-a-standalone-script
 #
 cull:
   enabled: true
   users: false # --cull-users
   removeNamedServers: false # --remove-named-servers
   timeout: 3600 # --timeout
   every: 600 # --cull-every
   concurrency: 10 # --concurrency
   maxAge: 0 # --max-age
 
 debug:
   enabled: false
 
 global:
   safeToShowValues: false

- 動かなたっかやつ [#yc0bffa5]

 # fullnameOverride and nameOverride distinguishes blank strings, null values,
 # and non-blank strings. For more details, see the configuration reference.
 fullnameOverride: ""
 nameOverride:

 # custom can contain anything you want to pass to the hub pod, as all passed
 # Helm template values will be made available there.
 custom: {}

 # imagePullSecret is configuration to create a k8s Secret that Helm chart's pods
 # can get credentials from to pull their images.
 imagePullSecret:
   create: false
   automaticReferenceInjection: true
   registry:
   username:
   password:
   email:
 # imagePullSecrets is configuration to reference the k8s Secret resources the
 # Helm chart's pods can get credentials from to pull their images.
 imagePullSecrets: []

 # hub relates to the hub pod, responsible for running JupyterHub, its configured
 # Authenticator class KubeSpawner, and its configured Proxy class
 # ConfigurableHTTPProxy. KubeSpawner creates the user pods, and
 # ConfigurableHTTPProxy speaks with the actual ConfigurableHTTPProxy server in
 # the proxy pod.
 hub:
   config:
     JupyterHub:
       admin_access: true
       authenticator_class: dummy
   service:
     type: ClusterIP
     annotations: {}
     ports:
       nodePort:
     extraPorts: []
     loadBalancerIP:
   baseUrl: /
   cookieSecret:
   initContainers: []
   fsGid: 1000
   nodeSelector: {}
   tolerations: []
   concurrentSpawnLimit: 64
   consecutiveFailureLimit: 5
   activeServerLimit:
   deploymentStrategy:
     ## type: Recreate
     ## - sqlite-pvc backed hubs require the Recreate deployment strategy as a
     ##   typical PVC storage can only be bound to one pod at the time.
     ## - JupyterHub isn't designed to support being run in parallell. More work
     ##   needs to be done in JupyterHub itself for a fully highly available (HA)
     ##   deployment of JupyterHub on k8s is to be possible.
     type: Recreate
   db:
     type: sqlite-pvc
     upgrade:
     pvc:
       annotations: {}
       selector: {}
       accessModes:
         - ReadWriteOnce
       storage: 1Gi
       subPath:
       storageClassName:
     url:
     password:
   labels: {}
   annotations: {}
   command: []
   args: []
   extraConfig: {}
   extraFiles: {}
   extraEnv: {}
   extraContainers: []
   extraVolumes: []
   extraVolumeMounts: []
   image:
     name: jupyterhub/k8s-hub
     tag: "1.1.3"
     pullPolicy:
     pullSecrets: []
   resources: {}
   containerSecurityContext:
     runAsUser: 1000
     runAsGroup: 1000
     allowPrivilegeEscalation: false
   lifecycle: {}
   services: {}
   pdb:
     enabled: false
     maxUnavailable:
     minAvailable: 1
   networkPolicy:
     enabled: true
     ingress: []
     ## egress for JupyterHub already includes Kubernetes internal DNS and
     ## access to the proxy, but can be restricted further, but ensure to allow
     ## access to the Kubernetes API server that couldn't be pinned ahead of
     ## time.
     ##
     ## ref: https://stackoverflow.com/a/59016417/2220152
     egress:
       - to:
           - ipBlock:
               cidr: 0.0.0.0/0
     interNamespaceAccessLabels: ignore
     allowedIngressPorts: []
   allowNamedServers: false
   namedServerLimitPerUser:
   authenticatePrometheus:
   redirectToServer:
   shutdownOnLogout:
   templatePaths: []
   templateVars: {}
   livenessProbe:
     # The livenessProbe's aim to give JupyterHub sufficient time to startup but
     # be able to restart if it becomes unresponsive for ~5 min.
     enabled: true
     initialDelaySeconds: 300
     periodSeconds: 10
     failureThreshold: 30
     timeoutSeconds: 3
   readinessProbe:
     # The readinessProbe's aim is to provide a successful startup indication,
     # but following that never become unready before its livenessProbe fail and
     # restarts it if needed. To become unready following startup serves no
     # purpose as there are no other pod to fallback to in our non-HA deployment.
     enabled: true
     initialDelaySeconds: 0
     periodSeconds: 2
     failureThreshold: 1000
     timeoutSeconds: 1
   existingSecret:
   serviceAccount:
     annotations: {}
   extraPodSpec: {}

 rbac:
   enabled: true

 # proxy relates to the proxy pod, the proxy-public service, and the autohttps
 # pod and proxy-http service.
 proxy:
   secretToken:
   annotations: {}
   deploymentStrategy:
     ## type: Recreate
     ## - JupyterHub's interaction with the CHP proxy becomes a lot more robust
     ##   with this configuration. To understand this, consider that JupyterHub
     ##   during startup will interact a lot with the k8s service to reach a
     ##   ready proxy pod. If the hub pod during a helm upgrade is restarting
     ##   directly while the proxy pod is making a rolling upgrade, the hub pod
     ##   could end up running a sequence of interactions with the old proxy pod
     ##   and finishing up the sequence of interactions with the new proxy pod.
     ##   As CHP proxy pods carry individual state this is very error prone. One
     ##   outcome when not using Recreate as a strategy has been that user pods
     ##   have been deleted by the hub pod because it considered them unreachable
     ##   as it only configured the old proxy pod but not the new before trying
     ##   to reach them.
     type: Recreate
     ## rollingUpdate:
     ## - WARNING:
     ##   This is required to be set explicitly blank! Without it being
     ##   explicitly blank, k8s will let eventual old values under rollingUpdate
     ##   remain and then the Deployment becomes invalid and a helm upgrade would
     ##   fail with an error like this:
     ##
     ##     UPGRADE FAILED
     ##     Error: Deployment.apps "proxy" is invalid: spec.strategy.rollingUpdate: Forbidden: may not be specified when strategy `type` is 'Recreate'
     ##     Error: UPGRADE FAILED: Deployment.apps "proxy" is invalid: spec.strategy.rollingUpdate: Forbidden: may not be specified when strategy `type` is 'Recreate'
     rollingUpdate:
   # service relates to the proxy-public service
   service:
     type: LoadBalancer
     labels: {}
     annotations: {}
     nodePorts:
       http:
       https:
     disableHttpPort: false
     extraPorts: []
     loadBalancerIP:
     loadBalancerSourceRanges: []
   # chp relates to the proxy pod, which is responsible for routing traffic based
   # on dynamic configuration sent from JupyterHub to CHP's REST API.
   chp:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: jupyterhub/configurable-http-proxy
       tag: 4.5.0 # https://github.com/jupyterhub/configurable-http-proxy/releases
       pullPolicy:
       pullSecrets: []
     extraCommandLineFlags: []
     livenessProbe:
       enabled: true
       initialDelaySeconds: 60
       periodSeconds: 10
     readinessProbe:
       enabled: true
       initialDelaySeconds: 0
       periodSeconds: 2
       failureThreshold: 1000
     resources: {}
     defaultTarget:
     errorTarget:
     extraEnv: {}
     nodeSelector: {}
     tolerations: []
     networkPolicy:
       enabled: true
       ingress: []
       egress:
         - to:
             - ipBlock:
                 cidr: 0.0.0.0/0
       interNamespaceAccessLabels: ignore
       allowedIngressPorts: [http, https]
     pdb:
       enabled: false
       maxUnavailable:
       minAvailable: 1
     extraPodSpec: {}
   # traefik relates to the autohttps pod, which is responsible for TLS
   # termination when proxy.https.type=letsencrypt.
   traefik:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: traefik
       tag: v2.4.11 # ref: https://hub.docker.com/_/traefik?tab=tags
       pullPolicy:
       pullSecrets: []
     hsts:
       includeSubdomains: false
       preload: false
       maxAge: 15724800 # About 6 months
     resources: {}
     labels: {}
     extraEnv: {}
     extraVolumes: []
     extraVolumeMounts: []
     extraStaticConfig: {}
     extraDynamicConfig: {}
     nodeSelector: {}
     tolerations: []
     extraPorts: []
     networkPolicy:
       enabled: true
       ingress: []
       egress:
         - to:
             - ipBlock:
                 cidr: 0.0.0.0/0
       interNamespaceAccessLabels: ignore
       allowedIngressPorts: [http, https]
     pdb:
       enabled: false
       maxUnavailable:
       minAvailable: 1
     serviceAccount:
       annotations: {}
     extraPodSpec: {}
   secretSync:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: jupyterhub/k8s-secret-sync
       tag: "1.1.3"
       pullPolicy:
       pullSecrets: []
     resources: {}
   labels: {}
   https:
     enabled: false
     type: letsencrypt
     #type: letsencrypt, manual, offload, secret
     letsencrypt:
       contactEmail:
       # Specify custom server here (https://acme-staging-v02.api.letsencrypt.org/directory) to hit staging LE
       acmeServer: https://acme-v02.api.letsencrypt.org/directory
     manual:
       key:
       cert:
     secret:
       name:
       key: tls.key
       crt: tls.crt
     hosts: []

 # singleuser relates to the configuration of KubeSpawner which runs in the hub
 # pod, and its spawning of user pods such as jupyter-myusername.
 singleuser:
   podNameTemplate:
   extraTolerations: []
   nodeSelector: {}
   extraNodeAffinity:
     required: []
     preferred: []
   extraPodAffinity:
     required: []
     preferred: []
   extraPodAntiAffinity:
     required: []
     preferred: []
   networkTools:
     image:
       name: jupyterhub/k8s-network-tools
       tag: "1.1.3"
       pullPolicy:
       pullSecrets: []
   cloudMetadata:
     # block set to true will append a privileged initContainer using the
     # iptables to block the sensitive metadata server at the provided ip.
     blockWithIptables: true
     ip: 169.254.169.254
   networkPolicy:
     enabled: true
     ingress: []
     egress:
       # Required egress to communicate with the hub and DNS servers will be
       # augmented to these egress rules.
       #
       # This default rule explicitly allows all outbound traffic from singleuser
       # pods, except to a typical IP used to return metadata that can be used by
       # someone with malicious intent.
       - to:
           - ipBlock:
               cidr: 0.0.0.0/0
               except:
                 - 169.254.169.254/32
     interNamespaceAccessLabels: ignore
     allowedIngressPorts: []
   events: true
   extraAnnotations: {}
   extraLabels:
     hub.jupyter.org/network-access-hub: "true"
   extraFiles: {}
   extraEnv: {}
   lifecycleHooks: {}
   initContainers: []
   extraContainers: []
   uid: 1000
   fsGid: 100
   serviceAccountName:
   storage:
     type: dynamic
     extraLabels: {}
     extraVolumes: []
     extraVolumeMounts: []
     static:
       pvcName:
       subPath: "{username}"
     capacity: 10Gi
     homeMountPath: /home/jovyan
     dynamic:
       storageClass:
       pvcNameTemplate: claim-{username}{servername}
       volumeNameTemplate: volume-{username}{servername}
       storageAccessModes: [ReadWriteOnce]
   image:
     name: jupyterhub/k8s-singleuser-sample
     tag: "1.1.3"
     pullPolicy:
     pullSecrets: []
   startTimeout: 300
   cpu:
     limit:
     guarantee:
   memory:
     limit:
     guarantee: 1G
   extraResource:
     limits: {}
     guarantees: {}
   cmd: jupyterhub-singleuser
   defaultUrl:
   extraPodConfig: {}
   profileList: []

 # scheduling relates to the user-scheduler pods and user-placeholder pods.
 scheduling:
   userScheduler:
     enabled: true
     replicas: 2
     logLevel: 4
     # plugins ref: https://kubernetes.io/docs/reference/scheduling/config/#scheduling-plugins-1
     plugins:
       score:
         disabled:
           - name: SelectorSpread
           - name: TaintToleration
           - name: PodTopologySpread
           - name: NodeResourcesBalancedAllocation
           - name: NodeResourcesLeastAllocated
           # Disable plugins to be allowed to enable them again with a different
           # weight and avoid an error.
           - name: NodePreferAvoidPods
           - name: NodeAffinity
           - name: InterPodAffinity
           - name: ImageLocality
         enabled:
           - name: NodePreferAvoidPods
             weight: 161051
           - name: NodeAffinity
             weight: 14631
           - name: InterPodAffinity
             weight: 1331
           - name: NodeResourcesMostAllocated
             weight: 121
           - name: ImageLocality
             weight: 11
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       # IMPORTANT: Bumping the minor version of this binary should go hand in
       #            hand with an inspection of the user-scheduelrs RBAC resources
       #            that we have forked.
       name: k8s.gcr.io/kube-scheduler
       tag: v1.19.13 # ref: https://github.com/kubernetes/website/blob/main/content/en/releases/patch-releases.md
       pullPolicy:
       pullSecrets: []
     nodeSelector: {}
     tolerations: []
     pdb:
       enabled: true
       maxUnavailable: 1
       minAvailable:
     resources: {}
     serviceAccount:
       annotations: {}
     extraPodSpec: {}
   podPriority:
     enabled: false
     globalDefault: false
     defaultPriority: 0
     userPlaceholderPriority: -10
   userPlaceholder:
     enabled: true
     image:
       name: k8s.gcr.io/pause
       # tag's can be updated by inspecting the output of the command:
       # gcloud container images list-tags k8s.gcr.io/pause --sort-by=~tags
       #
       # If you update this, also update prePuller.pause.image.tag
       tag: "3.5"
       pullPolicy:
       pullSecrets: []
     replicas: 0
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     resources: {}
   corePods:
     tolerations:
       - key: hub.jupyter.org/dedicated
         operator: Equal
         value: core
         effect: NoSchedule
       - key: hub.jupyter.org_dedicated
         operator: Equal
         value: core
         effect: NoSchedule
     nodeAffinity:
       matchNodePurpose: prefer
   userPods:
     tolerations:
       - key: hub.jupyter.org/dedicated
         operator: Equal
         value: user
         effect: NoSchedule
       - key: hub.jupyter.org_dedicated
         operator: Equal
         value: user
         effect: NoSchedule
     nodeAffinity:
       matchNodePurpose: prefer

 # prePuller relates to the hook|continuous-image-puller DaemonsSets
 prePuller:
   annotations: {}
   resources: {}
   containerSecurityContext:
     runAsUser: 65534 # nobody user
     runAsGroup: 65534 # nobody group
     allowPrivilegeEscalation: false
   extraTolerations: []
   # hook relates to the hook-image-awaiter Job and hook-image-puller DaemonSet
   hook:
     enabled: true
     pullOnlyOnChanges: true
     # image and the configuration below relates to the hook-image-awaiter Job
     image:
       name: jupyterhub/k8s-image-awaiter
       tag: "1.1.3"
       pullPolicy:
       pullSecrets: []
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     podSchedulingWaitDuration: 10
     nodeSelector: {}
     tolerations: []
     resources: {}
     serviceAccount:
       annotations: {}
   continuous:
     enabled: true
   pullProfileListImages: true
   extraImages: {}
   pause:
     containerSecurityContext:
       runAsUser: 65534 # nobody user
       runAsGroup: 65534 # nobody group
       allowPrivilegeEscalation: false
     image:
       name: k8s.gcr.io/pause
       # tag's can be updated by inspecting the output of the command:
       # gcloud container images list-tags k8s.gcr.io/pause --sort-by=~tags
       #
       # If you update this, also update scheduling.userPlaceholder.image.tag
       tag: "3.5"
       pullPolicy:
       pullSecrets: []

 ingress:
   enabled: false
   annotations: {}
   hosts: []
   pathSuffix:
   pathType: Prefix
   tls: []

 # cull relates to the jupyterhub-idle-culler service, responsible for evicting
 # inactive singleuser pods.
 #
 # The configuration below, except for enabled, corresponds to command-line flags
 # for jupyterhub-idle-culler as documented here:
 # https://github.com/jupyterhub/jupyterhub-idle-culler#as-a-standalone-script
 #
 cull:
   enabled: true
   users: false # --cull-users
   removeNamedServers: false # --remove-named-servers
   timeout: 3600 # --timeout
   every: 600 # --cull-every
   concurrency: 10 # --concurrency
   maxAge: 0 # --max-age

 debug:
   enabled: false

 global:
   safeToShowValues: false


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS