From b5535df4fff7306d0c0e04ab435a7981ff7ed401 Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Tue, 11 May 2021 03:59:42 +0530 Subject: [PATCH] Add carbonplan cluster + hubs - staging and prod clusters that are exactly the same, with just domain differences - Uses traditional autohttps + LoadBalancer to get traffic into the cluster. Could be nginx-ingress later on if necessary. - Manual DNS entries for staging.carbonplan.2i2c.cloud and carbonplan.2i2c.cloud. Initial manual deploy with `proxy.https.enabled` set to false to complete deployment, fetch externalIP of `proxy-public` service, setup DNS, then re-deploy with `proxy.https.enabled` set to true. Ref https://github.com/2i2c-org/pilot-hubs/issues/291 --- config/hubs/carbonplan.cluster.yaml | 210 ++++++++++++++++++++++++++++ secrets/carbonplan.yaml | 33 +++++ 2 files changed, 243 insertions(+) create mode 100644 config/hubs/carbonplan.cluster.yaml create mode 100644 secrets/carbonplan.yaml diff --git a/config/hubs/carbonplan.cluster.yaml b/config/hubs/carbonplan.cluster.yaml new file mode 100644 index 0000000000..4edebad35b --- /dev/null +++ b/config/hubs/carbonplan.cluster.yaml @@ -0,0 +1,210 @@ +name: carbonplan +provider: kubeconfig +kubeconfig: + file: secrets/carbonplan.yaml +hubs: + - name: staging + domain: staging.carbonplan.2i2c.cloud + template: daskhub + auth0: + connection: github + config: &carbonPlanHubConfig + scratchBucket: + enabled: false + basehub: + nfsPVC: + nfs: + # from https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html + mountOptions: + - rsize=1048576 + - wsize=1048576 + - timeo=600 + - soft # We pick soft over hard, so NFS lockups don't lead to hung processes + - retrans=2 + - noresvport + serverIP: fs-2897912f.efs.us-west-2.amazonaws.com + baseShareName: / + shareCreator: + tolerations: + - key: node-role.kubernetes.io/master + operator: "Exists" + effect: "NoSchedule" + jupyterhub: + homepage: + templateVars: + org: + name: Carbon Plan + logo_url: https://pbs.twimg.com/profile_images/1262387945971101697/5q_X3Ruk_400x400.jpg + url: https://carbonplan.org + designed_by: + name: 2i2c + url: https://2i2c.org + operated_by: + name: 2i2c + url: https://2i2c.org + funded_by: + name: Carbon Plan + url: https://carbonplan.org + singleuser: + initContainers: + # Need to explicitly fix ownership here, since EFS doesn't do anonuid + - name: volume-mount-ownership-fix + image: busybox + command: ["sh", "-c", "id && chown 1000:1000 /home/jovyan && ls -lhd /home/jovyan"] + securityContext: + runAsUser: 0 + volumeMounts: + - name: home + mountPath: /home/jovyan + subPath: "{username}" + image: + name: carbonplan/r-retro-notebook + tag: latest + profileList: + # The mem-guarantees are here so k8s doesn't schedule other pods + # on these nodes. + - display_name: "Small: r5.large" + description: "~2 CPU, ~15G RAM" + kubespawner_override: + # Expllicitly unset mem_limit, so it overrides the default memory limit we set in + # basehub/values.yaml + mem_limit: null + mem_guarantee: 12G + node_selector: + hub.jupyter.org/pool-name: notebook-r5-large + - display_name: "Medium: r5.xlarge" + description: "~4 CPU, ~30G RAM" + kubespawner_override: + mem_limit: null + mem_guarantee: 29G + node_selector: + hub.jupyter.org/pool-name: notebook-r5-xlarge + - display_name: "Large: r5.2xlarge" + description: "~8 CPU, ~60G RAM" + kubespawner_override: + mem_limit: null + mem_guarantee: 60G + node_selector: + hub.jupyter.org/pool-name: notebook-r5-2xlarge + - display_name: "Huge: r5.8xlarge" + description: "~32 CPU, ~256G RAM" + kubespawner_override: + mem_limit: null + mem_guarantee: 250G + node_selector: + hub.jupyter.org/pool-name: notebook-r5-8xlarge + scheduling: + userPlaceholder: + enabled: false + replicas: 0 + userScheduler: + enabled: false + proxy: + service: + type: LoadBalancer + https: + enabled: true + chp: + nodeSelector: {} + tolerations: + - key: "node-role.kubernetes.io/master" + effect: "NoSchedule" + traefik: + nodeSelector: {} + tolerations: + - key: "node-role.kubernetes.io/master" + effect: "NoSchedule" + hub: + allowNamedServers: true + networkPolicy: + # FIXME: For dask gateway + enabled: false + readinessProbe: + enabled: false + nodeSelector: {} + tolerations: + - key: "node-role.kubernetes.io/master" + effect: "NoSchedule" + dask-gateway: + traefik: + tolerations: + - key: "node-role.kubernetes.io/master" + effect: "NoSchedule" + controller: + tolerations: + - key: "node-role.kubernetes.io/master" + effect: "NoSchedule" + gateway: + tolerations: + - key: "node-role.kubernetes.io/master" + effect: "NoSchedule" + backend: + scheduler: + extraPodConfig: + nodeSelector: + hub.jupyter.org/pool-name: dask-worker + tolerations: + - key: "k8s.dask.org/dedicated" + operator: "Equal" + value: "worker" + effect: "NoSchedule" + - key: "k8s.dask.org_dedicated" + operator: "Equal" + value: "worker" + effect: "NoSchedule" + worker: + extraPodConfig: + nodeSelector: + hub.jupyter.org/pool-name: dask-worker + tolerations: + - key: "k8s.dask.org/dedicated" + operator: "Equal" + value: "worker" + effect: "NoSchedule" + - key: "k8s.dask.org_dedicated" + operator: "Equal" + value: "worker" + effect: "NoSchedule" + + # TODO: figure out a replacement for userLimits. + extraConfig: + optionHandler: | + from dask_gateway_server.options import Options, Integer, Float, String + def cluster_options(user): + def option_handler(options): + if ":" not in options.image: + raise ValueError("When specifying an image you must also provide a tag") + extra_annotations = { + "hub.jupyter.org/username": user.name, + "prometheus.io/scrape": "true", + "prometheus.io/port": "8787", + } + extra_labels = { + "hub.jupyter.org/username": user.name, + } + return { + "worker_cores_limit": options.worker_cores, + "worker_cores": min(options.worker_cores / 2, 1), + "worker_memory": "%fG" % options.worker_memory, + "image": options.image, + "scheduler_extra_pod_annotations": extra_annotations, + "worker_extra_pod_annotations": extra_annotations, + "scheduler_extra_pod_labels": extra_labels, + "worker_extra_pod_labels": extra_labels, + } + return Options( + Integer("worker_cores", 2, min=1, max=16, label="Worker Cores"), + Float("worker_memory", 4, min=1, max=32, label="Worker Memory (GiB)"), + String("image", default="pangeo/pangeo-notebook:latest", label="Image"), + handler=option_handler, + ) + c.Backend.cluster_options = cluster_options + idle: | + # timeout after 30 minutes of inactivity + c.KubeClusterConfig.idle_timeout = 1800 + - name: prod + domain: carbonplan.2i2c.cloud + template: daskhub + auth0: + connection: github + config: *carbonPlanHubConfig \ No newline at end of file diff --git a/secrets/carbonplan.yaml b/secrets/carbonplan.yaml new file mode 100644 index 0000000000..afbaf8e201 --- /dev/null +++ b/secrets/carbonplan.yaml @@ -0,0 +1,33 @@ +apiVersion: ENC[AES256_GCM,data:Jpo=,iv:lyP0+xfZQ++dLycJ8oU5iFLkpxQsXzvnLBUJKDU+u1c=,tag:KWxZ+98SrWvzNe0LmdKYkQ==,type:str] +clusters: + - cluster: + certificate-authority-data: ENC[AES256_GCM,data:3AwnbHYxXx+6R4j2KUSMGz/9yZ3Ls63yJE4rlXkJqmUFmXTMQyFXzCwoaMzynhqpp2T5IeodUFPSkbXNj7G12bO8o06Wk81M6Ad5mz0BUgBQCUkEMA6pgqVaWrkKa5swNh4YkBkNEG3Z9U0VDOlNi9pO+8T7OhEwtewRHu4WYPUzYfk2hwweHG0al7DsHANT83CQdxL0clX+1H5z2VcKu6OBucdmGOGe8S2z5VJ/4/vOk9NpWZmU1ieoi+wiwjsfSCchQX3MsdzgHWjwtLCyf3pFDgEkyNTKCIZ4JlIyrshKhepKRH33eNLbnFFrIFMIoxIWnfPSm1ek+xosCel507ZYx4d+85auVRXU4XBXsPphPCDbaf5AGdE6Mn6/IaByOt+z4wm+5fzVuSKqwLaITBe/RMiPScqUA4vfI8MfljlSEaphXU7OQMyftm/zs5boCliydBcKD/f4plCDKi9wZ2kgaZfWirEZ5s+BRD+m5lqyg2HqXAtXYnpf4f/njm2/vvNop8+l1zNm2rXspa3Wn6MpoTZ/8ZHBaTuVKl8Y0M807YOGQVHSDxzisNi9l+Ldj2o0vfv2T6do6JCQPXuUautoQSSubXTZa+q7f+deQ5l3t+0m44tF2mNwQ4lJKvSB6NeoEXo4dDQ9MDHRMQ5BMHAjsxBWnxLFCEMUDde2LdF4EYHZhoRAXT/IJyCsIRcL7ppNxO1Os3afDokFhNyQBtAfYHD0Lwel2xK0QyzNHravHbo8GLdHxDw0He/UCPWWhgygEu9btlJ7WRfINlmQvp7eG88AJFuKOPlzPAtgfOGQBxCoY/HG7hNcVcOF3DG42FAWLpqn3TY+QBJk/UjUrrpAgnWSQeWoqWzdOC+lsHwbTV/6AjYa1bncDQySKYQ0hr+gLDTaGqRizeSwElZq3X3tbolvKouKDbvNuX6Oe72OWJzHL+1n5EVM7AvdRrAlSjERiwBM9ensSbzV2jBnROabfrGLn8rppN6kObsxYsVhSDqTh+bmmUjfabgv2yEyiXdSRsMIbQw+T9r7ojW0JGQ1mqCT7V01c19R2uDlTZdZt4WUTZmSLS0GdnbNAY5TB6z0gkDyAujwEvdGtfsKCwm0gnXEuoF2/zOSTqRsCwkYE3RN7G93tK7ntf+sOolBb08u7uWTbta0zhKLKKI/J2Nv6AGolR4j2ohxIcg7BPJqgy+JxSEJhM8bsiSUMWhoErlMHkkZieUbZlcXr9aWOqWKRCcbM0UopkTLwSvly4i88qfMGqibDEBgGJX7TtTijwpPfRSYar+ShuXjoTYNcT6m1hZbQSfSgammWp3ORvX4Hwu6coImrd+N16Z3FH8LMPfhMcuWpiKgW1ORQTxG1e2MQUWaamtWHePel59yf+Zz1YZchEVjmc5F3P88fLea/CsrqpdI52e0B3q6RUs5exboQWCTVcSETrUjk1bZNkXP5eMwACQyfdm3Ryq6tFfN81D27dhpHNcDsiwQ6Gjau6vAsbW5rKOGXG3NFxK6+ASqUdre7m8YdplxdRuDjkK0VL6f3FzOFtwbM5ki90skVom8+EoXLEfySY0ayheuyH1QcJUKUr8LTf87ewEQ+c3qwnWlh20S1aGGzHSHFPhxqhZ5JFTiI5xgp9F3Qli2gpHzsLY84reqwlaR/CK/DKxTG95tWSzxWG1n9MnGgEMn4kaQKSrpnTm15k8CRPIpS1lsg4ZY/+pUJBC0XKLReQ6UXpOCryG9Hmuufg8r460gm6FiXmnUWpZCMIaU451k5/T41YJWvcHqLjvcSkBw+1V45x39swoROsouOhMm+DzQjVcd2Joq814cQZTg/3rL9pFKiMut71WinpTRogvNDgi+DPz2NREQKOUpeHe1u/MwcdQHHxn4DW2xp/x9pNQk53JDP4EhdcH6k9hT83DUcAq3o8ZFDw==,iv:w5OZN0GZZcfam1EZZFPmodhHLtuM7DJHBcYTbHL5YkA=,tag:SJMcHsd2gMWPgjIZLfhLmw==,type:str] + server: ENC[AES256_GCM,data:6syyGxOJVVKJuafONJLvDGcxjsNZamwpM3nlai/XzjwEVCcL2AU0aotTITq7dRxq3UzTFDFfHlIOoOttDCLM/2ML1hDksvKXv0XVDJW7TA==,iv:8JkMVUULGwPAr1ex0541ML7mtzsFWASskxCoG40d7B0=,tag:1TDOlMl1MOSuA2ixUCPvMg==,type:str] + name: ENC[AES256_GCM,data:Tn/6Zhy+CsRngO9/k0uLYKuldAHl8Bk=,iv:3wdHmttch2xna41q5U77rMURb6YVjcfpruoCJBJ0bck=,tag:DI09Rph0WUHzK/Ti4NWgqg==,type:str] +contexts: + - context: + cluster: ENC[AES256_GCM,data:wPo4tztl6bOkhVLd54hwn9WSj0vfBk8=,iv:paJp95y/YA8NgzsrPToNruQmGQOeeMOG38i1aj7OJfQ=,tag:HoeiurynOpqfljXY2opjLg==,type:str] + user: ENC[AES256_GCM,data:7iPDh5EKQ8LHaztvAIzGMfVy0wQF6yE=,iv:urVMXazL+ZYn1GKGEwTI/yhMPyEVa8VZOUkjFb+eojE=,tag:ov1rFT7/IHvAF5J5f11fng==,type:str] + name: ENC[AES256_GCM,data:MOCzSvUViwVZjFHAjMKtHPC0diuFxFw=,iv:CEIHGCt+/IWpXH+6eeHsckKne3c8cnpa6CQ31Es+OSM=,tag:MoREm99ZyOlrBpi7xI3AQg==,type:str] +current-context: ENC[AES256_GCM,data:+XE07HU+QDfHqJ0o2LbY+D3aN3o0XQU=,iv:mbraHPQfBopbpebbzmizIHNiJbPUPZyuQDVDyIYTxuY=,tag:4ab/QvwdZdbJVv9PErXZ3g==,type:str] +kind: ENC[AES256_GCM,data:r/FzqNYQ,iv:FOogwzFq4fZd/KRfM5z52cl5tW3BOodobU5rAbxH8Lw=,tag:OnKZJPEh9AShHjyvaD3NYA==,type:str] +preferences: {} +users: + - name: ENC[AES256_GCM,data:eR7e+4X2GrnyCLTPMaYesDyjHcPPAns=,iv:gYg8ETXenwsGSRjOGwsTTyw5QllkXQ2B8u6Vdgrfvog=,tag:DQMW/N7cAyeg8yzwSzajyw==,type:str] + user: + client-certificate-data: ENC[AES256_GCM,data:J46C7tCbr4LiHkA4K1KV8hWOPGejCzHtAJF1KgH17lTREhD8lw4qDGoKJ6/KWUzbNreaMZv26UNde0s5PwOUt3FW50jbm4bKE3jypdAelHaFUnCkP9Eqg1/bGHV6CoflUWAiedD/4lNV9bfyApDi/h2sqsEYJSyHYae8cbNhCo/1ha4ppGbPZE1TxVv3OyVpV3PJBtrAcesx5GX5HpU0Ale8oPZqPUL6zcuqLTNTerUOKdNeoSpXlpR929xwV7bSMLD0Cbst68b0u/wM266CFuwLk99L/u6Lc8lg2Gt28IR9jW3/tJApuAziTaRfdLWAyoIlX9kPBJo90HAVMBde8UJedXMzNYBZVb0zIwWu9y0/uHIlQLAi1S/OFUpfnxHugBcU2+CBBcA9Odd7vWRNcMuk9N6F034ePBj5F6Mlekvf1haNwTFTJrroLILSSmFni4a8dg3Nq3oCx6ORdIOVVYdCJBGvUa2TKrje3nQN4YTTlDYg84gIOrwNu9rvvrTBvvgAYESeoX07/6bDe1+HYAIAP9DmsZPOULvAkH6mI6g6ifNoJHGTN+YgPZyIIGMhb8TPsj6AihQl3BRTDJx2cHt1QVbDOswE2Tq+5lBen+2Zs1BZLRq4IZjTQVmkN4IDjUmqPzPnWcpqIsBgaHel4vdbXq22xr205GlqNm+cC45h5xYiUkHJNakBaIGGaoJG3znxJ4vTNshUq1s1l55COdNcK3mGfQlunbZRG4aNMl8kXT4p2WOEx3hrOzNarcwuToa6yWYoiiwhfp5CfIIg8LESsUPHtZu7TqOxdQS6B2YHEvQjzose8SAuM6IAmFXH+1Y3xssH86jPEH75lfIWrMOqc9n3sJgWHKAzcQdMDu4B30GBx2PJ4EVIjTNsFZ35GQiioXgYYkK6hQmCTWxwLMtyKI8rI63wzkhbL/zt+h1legFB9QBUqZ+GBaoSMbPFJQjc4dPbvmO/U37g0oWJRl2RTN2f48bFrsAM24CeB/p/o15eGpNnD5ptL2RQ8T2pqOBcDQJLgNPvFJyPnOG/1jOWv9OU0PZjJA6eabI+YB1fw4xkBUXspMM0WnYwI/DCTFyy3UWT5Y9MaXxspp5rHFr978W5kXRtCXRfkSJAm4lcxcMfkc/7XcuK2wMXlGXYuDO8EiM0H8xJ6cYh/IXnUz76f86IMbadlcqeDOFHfKFdgHkW+44J4+QncoyZVRlCdzqAz2luyAF0gkzLQGMkwLelKSmlx7nwUBfbmsFAm+jy3UgkN8Df3+9W+qMz8Op8CjDDXgldjN3W9uojFdRgLJTwuUrkoPiT9rZbXn4XRyNiIe3IvFvPYpHrrh0VVIi0pwBuOkMOLWpWOCAWQ99etKkm07H6l8x5HDZxFNRye3dtP2bz2YATV1Q5EmPuvAA+RI6lyUOOCP6F3IXqtS40/ML65UOGDzp7xf3BeR/2l7EnSA9R24Rw/1UmBBN+lAw4TGckk+y5ixHALlpBTRqhSt0tF6cTgbO12dM1EVfVyjHBCZaxe1c8WyE8XUB9jsHz+cUtLAdcO0I62x9XGrq6V2Jc+HNkGSkbUdEA1Oq853gDH6BxZuba94rAWTHoUN0OBcRBmFBsUL06JE5XWFZb/AfNi3enPMjBbFMKr02ctRGE8czhu8S8fo+Pkjv8YNCjDW/2gVapggHjyyiaLI8SewH0606ZPq9HTjxxONrBNeveePc/YY/5HnJE+lKj6oG/Ixk7J/tq6SOkz8WeJzBsgJ+42AAUPwpsg9hGVIga81C8ClNgZaX1ju4Jz587yL3sLaKaGl7KGEs9RGjLOx4UA6Myk8URwbw2gBaOiBPK7nb/x5x04jxWF1tgM6eYWJQ9Gi1QKt45LgYPdzYyCoOumcJl+NjWua2Q2U7x/xJcQbn5I31FH2YmSwfFNLfWPcrNSG9jLkB3J9uBT/k61/pZGmWuBKcf0GWX7fNpkH4CdpuYOhi9lfpI4lIARMJDqp/cRwQu5l+E7hWs3floD0qr2l1fCMWxxApjtwBV93NUe95XTbnKgp+Wh7gWEBKtSDmB6CXZOmop8OHPpfwS,iv:efCIgmdnzcW/0vXjMirln8t+NFRmboaVaRxme6H2XaM=,tag:sxMpJUlNNGk1fK+W/KtEcA==,type:str] + client-key-data: ENC[AES256_GCM,data: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,iv:Yd0SBcdQbcA6AwEAr7rLYfX5XTPyITVVIJ/Lbexq6kc=,tag:XmTFiGg5tesV+jw5VTCLxg==,type:str] +sops: + kms: [] + gcp_kms: + - resource_id: projects/two-eye-two-see/locations/global/keyRings/sops-keys/cryptoKeys/similar-hubs + created_at: "2021-05-10T17:35:08Z" + enc: CiQA4OM7eLM6u6MlzoUjfIYlN5H/wC7Dr3n4xmiRNdOO6TKOd+YSSQBy9hCYancmxxKoD4g2+zDN2GU4aKKSHq2BwUiYNCBwLs8U5BV2yhzKSnjY5cEbM+9YMV2holXPYrthBCtola5bR69V0nORC9g= + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2021-05-10T17:35:10Z" + mac: ENC[AES256_GCM,data:nIIqCgBY7lmTp0k5If5BXHFeeRUJ0OdkU66Z7/bZOc4EElu9JbXSrNPfjcllk6pzXB6XGOIU2RuIhDTcl/DZSvCAgYuFkorQLYZ2js/2yNxSZY2sYcRnQB+C/R7PgwpEyObpTQ2faRmcVEYPzGKTBml9GyZo1RfNllxOuUeykHM=,iv:oxKFojrFq7/AiX8ytiiwq/1lA3IuHg3aOh/EBfknsUo=,tag:KX7fhH78UOvzSPm/rjqXBQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.7.1