From f28f8de3897dae33b2952eaa20572684ded7b5ba Mon Sep 17 00:00:00 2001 From: Chris Holdgraf Date: Wed, 23 Jan 2019 11:24:15 -0800 Subject: [PATCH 01/21] updating changelog --- CHANGELOG.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2752e6761..ec0387c673 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,13 +5,84 @@ Releases are named after famous [Cricket](https://en.wikipedia.org/wiki/Cricket) -## [Unreleased](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/0.7.0..master) +## [Unreleased](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/0.8.0..master) ### Breaking changes ### New Features +## [0.8.0](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/0.7.0..0.8.0) - [Richie Benaud](https://en.wikipedia.org/wiki/Richie_Benaud) - 2019-01-24 + +This release contains JupyterHub version 0.9.4. It requires Kubernetes >= 1.11 and Helm >= 2.11.0. +See [the Helm Chart repository](https://github.com/jupyterhub/helm-chart#versions-coupled-to-each-chart-release) for +a list of relevant dependencies for all Helm Chart versions. + +It contains new features, additional configuration options, and bug fixes. + +### Upgrading from 0.7 + +TODO: Instructions + +#### Troubleshooting + +TODO: Instructions + +### New Features + +#### TODO: ITEM 1 + + +### [Richie Benaud](https://www.cricket.com.au/players/richie-benaud/gvp5xSjUp0q6Qd7IM5TbCg) + +_(excerpt from https://www.cricket.com.au/players/richie-benaud/gvp5xSjUp0q6Qd7IM5TbCg)_ + +Possibly the most iconic man in Australian cricket, Richie Benaud enjoyed a career spanning nearly +70 years in the game. On the field, he scored 767 runs at 19.66 in his 27 matches against England, +while he also picked up 83 wickets. Off the field, +he has been just as important. His commentary has been second to none since making his radio debut in 1960. + +While playing for Australia, fans flocked to the cricket to watch Benaud led sides +dominate whoever they played. The late 1950’s to early 1960’s was a golden period in +Australian cricket, with players such as Simpson, Lawry and Harvey +scoring runs, while Benaud and Davidson did the damage with the ball. + +Richie Benaud was responsible for resurrecting cricket in this country. The world was +changing at that time, and so was cricket. It was being shown on television for the +first time, while radio coverage was becoming more advanced. Benaud +felt he had a duty to the Australian public to make the game more entertaining. Sure, +you could argue that the 1961 series was dull, but at least Australia +retained the Ashes. Nobody will forget the tied Test against the West Indies, or Benaud’s +audacious move to bowl around the wicket in Manchester. + +Benaud is credited with popularising the tactics we see today. Huddles after a wicket +were born in the Benaud era. Declaring just before stumps in a bid to steal a late wicket +was something he thrived upon. Bowling into the rough is now seen +as common practice. + +Benaud was also prepared to try new things with the ball. He worked very hard on +perfecting his wrong’un, the flipper and the top-spinner. His leg-spinner even had variety +to it, making him one of the most complete tweakers at the time. + +His leadership earned him respect immediately. Players loved being guided the +likeable larrikin from Penrith. He looked after everyone both as a team, but also on an +individual basis. His teammates trusted his innovative ideas, while +he trusted them to execute them to the fullest. + +For most Australians, summer means cricket. And cricket means hearing the dulcet +tones of their favourite commentator, Richie Benaud. From the cream coloured suit, to the +witty repartee with his colleagues, Benaud is the complete package + + +### Contributors + +This release wouldn't have been possible without the wonderful contributors +to the [zero-to-jupyterhub](https://github.com/jupyterhub/zero-to-jupyterhub-k8s), +and [KubeSpawner](https://github.com/jupyterhub/kubespawner) repos. +We'd like to thank everyone who contributed in any form - Issues, commenting +on issues, PRs and reviews since the last Zero to JupyterHub release. + + ## [0.7.0](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/v0.6...0.7.0) - [Alex Blackwell](https://en.wikipedia.org/wiki/Alex_Blackwell) - 2018-09-03 @@ -964,7 +1035,7 @@ She went on to make her domestic debut in the 2007-08 Women’s National Cricket season, taking 2-29 from 10 overs in her first match. Since her national debut, Perry has become a regular fixture for the Southern Stars, -playing in the 2009 ICC Women’s World Cup and the ICC Women’s World Twenty20 in the same year. +playing in the 2009 ICC Women’s World Cup and the ICC Women’s World Twenty20 in the same year. Leading Australia’s bowling attack, Perry played a crucial role in the ICC Women’s World Twenty20 Final in the West Indies in 2010. From 3424f9fc72379c82b16f022d6a560796684ece5f Mon Sep 17 00:00:00 2001 From: Simon Li Date: Fri, 25 Jan 2019 08:15:26 -0800 Subject: [PATCH 02/21] Update CHANGELOG.md Co-Authored-By: choldgraf --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec0387c673..aaa0319e0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Releases are named after famous [Cricket](https://en.wikipedia.org/wiki/Cricket) ## [Unreleased](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/0.8.0..master) ### Breaking changes +- Github organisation OAuth: `auth.github.org_whitelist` has been renamed to `auth.github.orgWhitelist` ### New Features From 6acf564e8521e831ff1bb73fc0d7817d89083e12 Mon Sep 17 00:00:00 2001 From: Chris Holdgraf Date: Fri, 25 Jan 2019 10:07:51 -0800 Subject: [PATCH 03/21] updating contributors list and adding more features to changelog --- CHANGELOG.md | 457 +++++++++++++++++++++++++++++++++++++++++- tools/contributors.py | 41 ++-- 2 files changed, 473 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaa0319e0d..a44e5168bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,15 +4,12 @@ Here you can find upgrade changes in between releases and upgrade instructions. Releases are named after famous [Cricket](https://en.wikipedia.org/wiki/Cricket) players. - ## [Unreleased](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/0.8.0..master) ### Breaking changes -- Github organisation OAuth: `auth.github.org_whitelist` has been renamed to `auth.github.orgWhitelist` ### New Features - ## [0.8.0](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/0.7.0..0.8.0) - [Richie Benaud](https://en.wikipedia.org/wiki/Richie_Benaud) - 2019-01-24 This release contains JupyterHub version 0.9.4. It requires Kubernetes >= 1.11 and Helm >= 2.11.0. @@ -23,7 +20,10 @@ It contains new features, additional configuration options, and bug fixes. ### Upgrading from 0.7 -TODO: Instructions +#### Breaking changes + +- Github organisation OAuth: `auth.github.org_whitelist` has been renamed to `auth.github.orgWhitelist` + #### Troubleshooting @@ -31,8 +31,61 @@ TODO: Instructions ### New Features -#### TODO: ITEM 1 +#### Easier user-selectable profiles upon login + +Profile information is now passed through to Kubespawner. This means you can +[specify multiple user profiles that users can select from](https://zero-to-jupyterhub.readthedocs.io/en/latest/user-environment.html?highlight=profile#allow-users-to-create-their-own-conda-environments) +when they log in. ([#402](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/issues/402)) + +#### Configurable image pull secrets + +Improvements to the Helm Chart to let users specify private information that lets +the Hub pull from private Docker registries. New information includes +Kubernetes Secrets, an email field, large JSON blobs in the password field (required +in order to pull from a private gcr.io registry from an external cluster). + +It also ensures that the image puller DaemonSets have the same credentials to pull the images. + +(thanks to @AlexMorreale) #851 + +#### Improved user scheduling and resource management + +#891 + +Want to make your autoscheduler work efficiently? Then you should schedule pods to pack tight instead of spread out. The user scheduler accomplishes this. + +- **Pod priority and User placeholders** - #929 + +Want to scale up before users arrive so they don't end up waiting for the node to pull an image of several gigabytes in size? By adding a configurable fixed amount of user placeholder pods with a lower [pod priority](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) than real user pods, we can accomplish this. It requires k8s v1.11 though. + + +- **preferScheduleNextToRealUsers - improves autoscaling** - #930 + This setting slightly improves the ability for a cluster autoscaler to scale down by increasing the likelyhood of user placeholders being left alone on a node rather than real users. Real users can't be moved around while user placeholder pods can + +### Minor upgrades and development improvements + +- **Allow setting of storage labels** - #924 +- **Tolerations for node taints** - #925 +- **Making the core and user pods affinity have configurable presets** - #927 +- **Improved linting and validation + CI integration** - #844 +- **Improved CI tests** - #846 +- **Cleanup of orphaned files** - #842 + Two files were left unused in the repo. +- **cull.maxAge bugfix** - #853 + `cull.maxAge` previously didn't influence the culler service, as the value was never consumed. This is fixed by a single one line commit in a PR. +- **No more duplicates of puller pods** - #854 + Nobody wants pods running that does nothing. By using the new `before-hook-creation` value for the `deletion-policy` Helm hook together with a single name for our Helm hook resources, we can ensure never having orphaned image pullers. +- **Remove pod-culler image** - #890 #919 + Before JupyterHub 0.9 the pod-culler was a standalone pod with a custom image. But now it is a internal service of the JupyterHub pod, so in this PR we slim the remnant code. +- **Upgrade to k8s 1.9 APIs** - #920 + Migrate to more stable K8s resource APIs from `beta`. +- **Update of the singleuser-sample image** - #888 + `git` and `nbgitpuller` are now available by default +- **Switch to using a StatefulSet for the Hub** __*__ + The Hub should perhaps be a StatefulSet rather than a Deployment as it tends to be tied to a PV that can only be mounted by one single Hub. See this issue: https://github.com/helm/charts/issues/1863 +- **Updates to the guide** - #850 +- **Updates to inline documentation** - #939 ### [Richie Benaud](https://www.cricket.com.au/players/richie-benaud/gvp5xSjUp0q6Qd7IM5TbCg) @@ -83,7 +136,399 @@ and [KubeSpawner](https://github.com/jupyterhub/kubespawner) repos. We'd like to thank everyone who contributed in any form - Issues, commenting on issues, PRs and reviews since the last Zero to JupyterHub release. - +[(Frank) Yu Cheng Gu](https://github.com/frankgu968) +[1160300422-RenQJ](https://github.com/1160300422) +[1kastner](https://github.com/1kastner) +[2efper](https://github.com/2efPer) +[A. Tan ](https://github.com/amanda-tan) +[Aadi Deshpande](https://github.com/cilquirm) +[abremirata28](https://github.com/abremirata28) +[AcademicAdmin](https://github.com/AcademicAdmin) +[Adam Huffman](https://github.com/verdurin) +[Adrian Wilke](https://github.com/adibaba) +[Akanksha Bhardwaj](https://github.com/sashafierce) +[Akhil Lawrence](https://github.com/akhilputhiry) +[Al Johri](https://github.com/AlJohri) +[AlbanWende](https://github.com/AlbanWende) +[Alejandro del Castillo](https://github.com/adelcast) +[Aleksandr Blekh](https://github.com/ablekh) +[Alex Morreale](https://github.com/AlexMorreale) +[Alex Newman](https://github.com/posix4e) +[Alexander Comerford](https://github.com/cmrfrd) +[Alexander Sadleir](https://github.com/maxious) +[amangarg96](https://github.com/amangarg96) +[Amirahmad Khordadi](https://github.com/khordadi) +[Andreas Hilboll](https://github.com/andreas-h) +[andregouveiasantana](https://github.com/andregouveiasantana) +[Andrew](https://github.com/feriat) +[Andrew Catellier](https://github.com/whlteXbread) +[angelikamukhina](https://github.com/angelikamukhina) +[Anton Khodak](https://github.com/anton-khodak) +[arcady-genkin](https://github.com/arcady-genkin) +[Ariel Rokem](https://github.com/arokem) +[Arne Küderle](https://github.com/AKuederle) +[atne2008](https://github.com/atne2008) +[awalther](https://github.com/awalther) +[Ben Zipperer](https://github.com/benzipperer) +[Beneath](https://github.com/beneathcrypto) +[Benjamin Egelund-Müller](https://github.com/bem7) +[BertR](https://github.com/BertR) +[bharathwgl](https://github.com/bharathwgl) +[bing-he](https://github.com/bing-he) +[bjyxmas](https://github.com/bjyxmas) +[bpoettinger](https://github.com/bpoettinger) +[Brad Skaggs](https://github.com/bskaggs) +[Braden](https://github.com/brasie) +[Brian E. Granger](https://github.com/ellisonbg) +[Bruno P. Kinoshita](https://github.com/kinow) +[brynjsmith](https://github.com/brynjsmith) +[Calvin Canh Tran](https://github.com/canhtran) +[camer314](https://github.com/camer314) +[Carol Willing](https://github.com/willingc) +[Caspian](https://github.com/Cas-pian) +[cfoisy-osisoft](https://github.com/cfoisy-osisoft) +[ChanakyaBandara](https://github.com/ChanakyaBandara) +[chang-zhijie](https://github.com/chang-zhijie) +[Chao Wang](https://github.com/wangxiaoxiao88) +[Chen Zhiwei](https://github.com/chenzhiwei) +[Chester Li](https://github.com/chaoleili) +[Chia-liang Kao](https://github.com/clkao) +[Chris Holdgraf](https://github.com/choldgraf) +[Chris Seal](https://github.com/cmseal) +[Christian Alis](https://github.com/ianalis) +[Christian Mesh](https://github.com/cam72cam) +[chrlunden](https://github.com/chrlunden) +[Clancy Childs](https://github.com/clancychilds) +[Clemens Tolboom](https://github.com/clemens-tolboom) +[cmw2196](https://github.com/cmw2196) +[Cody Scott](https://github.com/Siecje) +[Craig Willis](https://github.com/craig-willis) +[cristofercri](https://github.com/cristofercri) +[Curtis Maves](https://github.com/cmaves) +[cybertony](https://github.com/cybertony) +[Daisuke Taniwaki](https://github.com/dtaniwaki) +[Dalon Lobo](https://github.com/dalonlobo) +[danamer](https://github.com/danamer) +[Daniel Bachler](https://github.com/danyx23) +[Daniel Chalef](https://github.com/danielchalef) +[Daniel Hnyk](https://github.com/hnykda) +[danielpcs](https://github.com/danielpcs) +[Danny H](https://github.com/toblender) +[DataVictorEngineer](https://github.com/DataVictorEngineer) +[Dave Hirschfeld](https://github.com/dhirschfeld) +[Dave Porter](https://github.com/porterde) +[David Andersen](https://github.com/dtandersen) +[David John Gagne](https://github.com/djgagne) +[Davide](https://github.com/davidedelvento) +[Deleted user](https://github.com/ghost) +[Denis Shestakov](https://github.com/denshe) +[Dennis Kipping](https://github.com/dkipping) +[Derek Ludwig](https://github.com/dsludwig) +[DerekHeldtWerle](https://github.com/DerekHeldtWerle) +[DewinGoh](https://github.com/DewinGoh) +[Diogo](https://github.com/dmvieira) +[djknight1](https://github.com/djknight1) +[DmitrII Gerasimenko](https://github.com/kidig) +[Doug Blank](https://github.com/dsblank) +[Dr. Di Prodi](https://github.com/robomotic) +[Dr. Zoltán Katona](https://github.com/zkatona) +[Dylan Nelson](https://github.com/dnelson86) +[ebebpl](https://github.com/ebebpl) +[Eliran Bivas](https://github.com/bivas) +[eode](https://github.com/eode) +[Eran Pinhas](https://github.com/eran-pinhas) +[eric-leblouch](https://github.com/eric-leblouch) +[ericblau](https://github.com/ericblau) +[Erik LaBianca](https://github.com/easel) +[Erik Sundell](https://github.com/consideRatio) +[Ermakov Petr](https://github.com/ermakovpetr) +[erolosty](https://github.com/erolosty) +[Evan Savage](https://github.com/candu) +[Evert Rol](https://github.com/evertrol) +[Ezequiel Gioia](https://github.com/eze1981) +[fahadabbas91](https://github.com/fahadabbas91) +[farzadz](https://github.com/farzadz) +[foxlisimulation](https://github.com/foxlisimulation) +[frouzbeh](https://github.com/frouzbeh) +[Félix-Antoine Fortin](https://github.com/cmd-ntrf) +[Gabriel Abdalla Cavalcante](https://github.com/gcavalcante8808) +[Gabriel Fair](https://github.com/gabefair) +[Gaetan Semet](https://github.com/gsemet) +[Gang Chen](https://github.com/ssword) +[Gary Lucas](https://github.com/luck02) +[Georgiana Elena](https://github.com/GeorgianaElena) +[gerroon](https://github.com/gerroon) +[Giuseppe Attardi](https://github.com/attardi) +[Glen A Knight](https://github.com/glenak1911) +[Gonzalo Fernandez ordas](https://github.com/rainmanh) +[Guilherme Oenning](https://github.com/goenning) +[Guo Zhang](https://github.com/Guo-Zhang) +[gweis](https://github.com/gweis) +[Gábor Lipták](https://github.com/gliptak) +[Hagen Hoferichter](https://github.com/h4gen) +[hani1814](https://github.com/hani1814) +[Hans Permana](https://github.com/hans-permana) +[hhuuggoo](https://github.com/hhuuggoo) +[hichemken](https://github.com/hichemken) +[HT-Moh](https://github.com/HT-Moh) +[HuangHenghua](https://github.com/HuangHenghua) +[HuiWang](https://github.com/scially) +[Ian Carroll](https://github.com/itcarroll) +[Ian Stuart](https://github.com/perllaghu) +[Ivan Brezina](https://github.com/ibre5041) +[J Forde](https://github.com/jzf2101) +[J Gerard](https://github.com/jgerardsimcock) +[j08rebelo](https://github.com/j08rebelo) +[Jacob Matuskey](https://github.com/jmatuskey) +[Jacob Tomlinson](https://github.com/jacobtomlinson) +[Jaime Ferrando Huertas](https://github.com/jiwidi) +[James Swineson](https://github.com/Jamesits) +[jameshgrn](https://github.com/jameshgrn) +[Jan Niederau](https://github.com/Japhiolite) +[Jason Belsky](https://github.com/jbelsky) +[Jason Hu](https://github.com/Jameshzc) +[Jason Rigby](https://github.com/jasonrig) +[jason4zhu](https://github.com/jason4zhu) +[Jeff Whitworth](https://github.com/jwhitwo) +[Jeffrey Bush](https://github.com/coderforlife) +[jeffwji](https://github.com/jeffwji) +[Jessica B. Hamrick](https://github.com/jhamrick) +[jfleury-eidos](https://github.com/jfleury-eidos) +[Ji Ma](https://github.com/ma-ji) +[Jiren Jin](https://github.com/jinjiren) +[jiyer2016](https://github.com/jiyer2016) +[jlc175](https://github.com/jlc175) +[jmabry](https://github.com/jmabry) +[jmchandonia](https://github.com/jmchandonia) +[jmf](https://github.com/jmfcodes) +[Joe Hamman](https://github.com/jhamman) +[Joerg Klein](https://github.com/joergklein) +[John Chase](https://github.com/johnchase) +[John Readey](https://github.com/jreadey) +[John Shojaei](https://github.com/titan550) +[Jonathan Terhorst](https://github.com/terhorst) +[Jordan Miller](https://github.com/LegitStack) +[Josh Bode](https://github.com/joshbode) +[Joshua Milas](https://github.com/DeepHorizons) +[JP Moresmau](https://github.com/JPMoresmau) +[jpays](https://github.com/jpays) +[Juan Cruz-Benito](https://github.com/cbjuan) +[Julian Rüth](https://github.com/saraedum) +[Julien Chastang](https://github.com/julienchastang) +[Justin Ray Vrooman](https://github.com/vroomanj) +[Jürgen Hermann](https://github.com/jhermann) +[Kah Mun](https://github.com/kavemun) +[kangzebin](https://github.com/kangzebin) +[Kelly L. Rowland](https://github.com/kellyrowland) +[Kenan Erdogan](https://github.com/bitnik) +[Kerwin Sun](https://github.com/00Kai0) +[kevbutler](https://github.com/kevbutler) +[Kevin Bates](https://github.com/kevin-bates) +[khawarhere](https://github.com/khawarhere) +[kide007](https://github.com/kide007) +[Kim-Seonghyeon](https://github.com/Kim-Seonghyeon) +[kishitaku0630](https://github.com/kishitaku0630) +[Koshmaar](https://github.com/Koshmaar) +[Koustuv Sinha](https://github.com/koustuvsinha) +[krinsman](https://github.com/krinsman) +[Kristian Gregorius Hustad](https://github.com/KGHustad) +[Kristiyan](https://github.com/katsar0v) +[KSHITIJA SAHARAN](https://github.com/kshitija08) +[Kuriakin Zeng](https://github.com/kuriakinzeng) +[Kyla Harper](https://github.com/kyla-harper) +[Lachlan Musicman](https://github.com/datakid) +[Laurent Abbal](https://github.com/laurentabbal) +[Leo Gallucci](https://github.com/elgalu) +[Leopold Talirz](https://github.com/ltalirz) +[Li-Xian Chen](https://github.com/twbrandon7) +[Lisa Stillwell](https://github.com/lstillwe) +[ljb445300387](https://github.com/ljb445300387) +[Loïc Antoine Gombeaud](https://github.com/LoicAG) +[Loïc Estève](https://github.com/lesteve) +[Lucas Durand](https://github.com/lucasdurand) +[Lukasz Tracewski](https://github.com/tracek) +[m.fab](https://github.com/go-bears) +[Ma](https://github.com/ma010) +[mangecoeur](https://github.com/mangecoeur) +[Manish Kushwaha](https://github.com/manish0749) +[Marc Illien](https://github.com/jackblackCH) +[marinalopez2110](https://github.com/marinalopez2110) +[Mark Mirmelstein](https://github.com/markm42) +[Marlene Silva Marchena](https://github.com/msmarchena) +[Martin Gergov](https://github.com/marto1) +[Martin Zugnoni](https://github.com/martinzugnoni) +[Marvin Solano](https://github.com/marvin-solano) +[Marwan Baghdad](https://github.com/MrwanBaghdad) +[Matthias Bussonnier](https://github.com/Carreau) +[Matthias Klan](https://github.com/mklan) +[Matthias Lee](https://github.com/matthiaslee) +[Matthieu Boileau](https://github.com/boileaum) +[Max Mensing](https://github.com/madmax2012) +[mdivk](https://github.com/mdivk) +[Meesam Shah](https://github.com/meesam15) +[Michael Carroll](https://github.com/neffo) +[Michael Huttner](https://github.com/mhuttner) +[Michael Lovci](https://github.com/mlovci) +[Michael McCarthy](https://github.com/RonanMcCarthy) +[Michael Milligan](https://github.com/mbmilligan) +[Michael Pilosov](https://github.com/mathematicalmichael) +[michec81](https://github.com/michec81) +[Mike Croucher](https://github.com/mikecroucher) +[MikeSpark](https://github.com/MikeSpark) +[Min RK](https://github.com/minrk) +[MisterZ](https://github.com/Misteur-Z) +[Moritz Kirschner](https://github.com/cellador) +[Moritz Schlarb](https://github.com/moschlar) +[moskiGithub](https://github.com/moskiGithub) +[mpolidori](https://github.com/mpolidori) +[mrclttnz](https://github.com/mrclttnz) +[MubashirullahD](https://github.com/MubashirullahD) +[Muhammad-Imtiaz](https://github.com/Muhammad-Imtiaz) +[mxcheng2011](https://github.com/mxcheng2011) +[myidealab](https://github.com/myidealab) +[Naineel Shah](https://github.com/naineel) +[narala558](https://github.com/narala558) +[newturok](https://github.com/newturok) +[Ney Torres](https://github.com/Neyt) +[Nic Wayand](https://github.com/NicWayand) +[Nico Bellack](https://github.com/bellackn) +[nifuki](https://github.com/nifuki) +[Nils Werner](https://github.com/nils-werner) +[not4everybody](https://github.com/not4everybody) +[NotSharath](https://github.com/NotSharath) +[nschiraldi](https://github.com/nschiraldi) +[Nujjy](https://github.com/Nujjy) +[oscar6echo](https://github.com/oscar6echo) +[Paperone80](https://github.com/Paperone80) +[Patafix](https://github.com/Patafix) +[Paul Mazzuca](https://github.com/PaulMazzuca) +[Paul Shealy](https://github.com/paulshealy1) +[Paulo Roberto de Oliveira Castro](https://github.com/prcastro) +[Pav K](https://github.com/kalaytan) +[payalbhatia](https://github.com/payalbhatia) +[Peter Parente](https://github.com/parente) +[Peter Reid](https://github.com/ReidWeb) +[Phil Elson](https://github.com/pelson) +[Phil Fenstermacher](https://github.com/pcfens) +[Philipp Kats](https://github.com/Casyfill) +[phpdistiller](https://github.com/phpdistiller) +[phxedmond](https://github.com/phxedmond) +[Piotr](https://github.com/karpikpl) +[Pouria Hadjibagheri](https://github.com/xenatisch) +[powerLeePlus](https://github.com/powerLeePlus) +[Pratik Lal](https://github.com/pratik-lal) +[pydeepak](https://github.com/Deepakdubey90) +[Qcy](https://github.com/chaoyue729) +[R. C. Thomas](https://github.com/rcthomas) +[raghav130593](https://github.com/raghav130593) +[Rahul Sharma](https://github.com/rahulswimmer) +[Rama Krishna Jinka](https://github.com/rjinka) +[RBALAJI5](https://github.com/RBALAJI5) +[rbq](https://github.com/rbq) +[Richard C Gerkin](https://github.com/rgerkin) +[Richard Darst](https://github.com/rkdarst) +[Richard Huntrods](https://github.com/huntrods) +[richyanicky](https://github.com/richyanicky) +[Rob Nagler](https://github.com/robnagler) +[robin](https://github.com/rollbackchen) +[robotsp](https://github.com/robotsp) +[rothwewi](https://github.com/rothwewi) +[rushikeshraut777](https://github.com/rushikeshraut777) +[Ryan](https://github.com/ev1lm0nk3y) +[Ryan Abernathey](https://github.com/rabernat) +[Ryan Lovett](https://github.com/ryanlovett) +[Ryan McGuire](https://github.com/EnigmaCurry) +[rzuidhof](https://github.com/rzuidhof) +[Saiprasad Balasubramanian](https://github.com/backtrackbaba) +[Sam Manzer](https://github.com/samuelmanzer) +[samRddhimat](https://github.com/samRddhimat) +[Santosh](https://github.com/sdandey) +[Saranya411](https://github.com/Saranya411) +[Scott Crooks](https://github.com/sc250024) +[sdementen](https://github.com/sdementen) +[SeaDude](https://github.com/SeaDude) +[SergeyK1](https://github.com/SergeyK1) +[Shannon](https://github.com/jingsong-liu) +[Shi Pengcheng](https://github.com/shipengcheng1230) +[shibbas](https://github.com/shibbas) +[Shinichi TAMURA](https://github.com/tmshn) +[Shiva1789](https://github.com/Shiva1789) +[sidebo](https://github.com/sidebo) +[Sigurður Baldursson](https://github.com/sigurdurb) +[Simon Li](https://github.com/manics) +[Sindre Gulseth](https://github.com/sgulseth) +[SivaMaplelabs](https://github.com/SivaMaplelabs) +[sjillidimudi](https://github.com/sjillidimudi) +[skruse](https://github.com/skruse) +[smoulderme](https://github.com/smoulderme) +[Solaris](https://github.com/SolarisYan) +[Spencer Ogden](https://github.com/spencerogden) +[sreekanthmg](https://github.com/sreekanthmg) +[Steven B](https://github.com/sblack4) +[Steven Silvester](https://github.com/blink1073) +[StudyQuant](https://github.com/studyquant) +[Subhash](https://github.com/signinred) +[Suchit](https://github.com/asuchit) +[summerswallow](https://github.com/summerswallow) +[summerswallow-whi](https://github.com/summerswallow-whi) +[Søren Fuglede Jørgensen](https://github.com/fuglede) +[Taewon](https://github.com/tkang007) +[Tania Allard](https://github.com/trallard) +[Taposh Dutta Roy](https://github.com/taposh) +[techie879](https://github.com/techie879) +[ThibTrip](https://github.com/ThibTrip) +[Thomas Mendoza](https://github.com/tgmachina) +[thomas-rabiller-azimut](https://github.com/thomas-rabiller-azimut) +[Thong Kuah](https://github.com/kuahyeow) +[thongnnguyen](https://github.com/thongnnguyen) +[Tim Crone](https://github.com/tjcrone) +[Tim Head](https://github.com/betatim) +[Timothy Griffiths](https://github.com/timgriffiths) +[Timothy Liu](https://github.com/tlkh) +[Todd Gamblin](https://github.com/tgamblin) +[Tom](https://github.com/T0mWz) +[Tomer Leibovich](https://github.com/tomerleib) +[tregin](https://github.com/tregin) +[Tren Huang](https://github.com/spiketren) +[Tuhina Chatterjee](https://github.com/tuhina2020) +[Tyler Gregory](https://github.com/01100010011001010110010101110000) +[Uday](https://github.com/udaynaik) +[Udit Arora](https://github.com/uditarora) +[Vasu Gaur](https://github.com/gaurcs) +[Victor Lopez](https://github.com/victorcete) +[Vidit Agarwal](https://github.com/IamViditAgarwal) +[VidJa](https://github.com/VidJa) +[Vincent Feng](https://github.com/iVincentFeng) +[vishal49naik49](https://github.com/vishal49naik49) +[Vivek](https://github.com/II-VSB-II) +[Vivek Rai](https://github.com/raivivek) +[vivekbiet](https://github.com/vivekbiet) +[Vlad-Mihai Sima](https://github.com/vladmihaisima) +[Volker Braun](https://github.com/vbraun) +[wangcong](https://github.com/congfairy) +[Wangsoo Kim](https://github.com/wangsookim) +[whositwhatnow](https://github.com/whositwhatnow) +[Will](https://github.com/xuwaters) +[Will Starms](https://github.com/vilhelmen) +[Willem Pienaar](https://github.com/woop) +[Xavier Lange](https://github.com/xrl) +[YborBorn](https://github.com/YborBorn) +[YizTian](https://github.com/tony-tian) +[Yoav Tzelnick](https://github.com/yoavtzelnick) +[YoongHM](https://github.com/yoonghm) +[yugushihuang](https://github.com/yugushihuang) +[Yuvi Panda](https://github.com/yuvipanda) +[Yuze Ma](https://github.com/bobmayuze) +[Zac Flamig](https://github.com/zflamig) +[Zach Day](https://github.com/zacharied) +[Zachary Sailer](https://github.com/Zsailer) +[Zafer Cesur](https://github.com/zcesur) +[zmkhazi](https://github.com/zmkhazi) +[zneudl](https://github.com/zneudl) +[田进](https://github.com/EndlessTJ) +[邱雨波](https://github.com/CraftHeart) +[高彦涛](https://github.com/gytlinux) + ## [0.7.0](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/compare/v0.6...0.7.0) - [Alex Blackwell](https://en.wikipedia.org/wiki/Alex_Blackwell) - 2018-09-03 diff --git a/tools/contributors.py b/tools/contributors.py index e3b4bf2674..cdce42ef87 100755 --- a/tools/contributors.py +++ b/tools/contributors.py @@ -36,7 +36,7 @@ import requests_cache from github import Github from dateutil.parser import parse - +from tqdm import tqdm requests_cache.install_cache('github') gh = Github(login_or_token=os.environ['GITHUB_API_TOKEN'].strip()) @@ -48,7 +48,7 @@ def include(date): return since < date repo = gh.get_repo(repo) - + # get all issues created or updated since given date issues = repo.get_issues(state='all', since=since) pulls = repo.get_pulls(state='closed') @@ -59,26 +59,25 @@ def include(date): # c.user.login. We are currently doing it multiple times for each user. We # should do it only once, if c.user.login did not already exist in the set, # or at the end when we have added all users to a set. - for i in issues: - if include(i.created_at): - users.add((i.user.login, i.user.name)) - for c in i.get_comments(since=since): - users.add((c.user.login, c.user.name)) + for ii in tqdm(list(issues)): + if include(ii.created_at): + users.add((ii.user.login, ii.user.name)) + for cc in ii.get_comments(since=since): + users.add((cc.user.login, cc.user.name)) - for p in pulls: - if include(p.created_at): - users.add((p.user.login, p.user.name)) + for pp in tqdm(list(pulls)): + if include(pp.created_at): + users.add((pp.user.login, pp.user.name)) - for c in p.get_issue_comments(): - if include(c.created_at): - users.add((c.user.login, c.user.name)) + for cc in pp.get_issue_comments(): + if include(cc.created_at): + users.add((cc.user.login, cc.user.name)) - for rc in p.get_review_comments(): + for rc in pp.get_review_comments(): if include(rc.created_at): users.add((rc.user.login, rc.user.name)) - return users @@ -89,11 +88,15 @@ def include(date): # the chart's release are considered, this means that if kubespawner got # something merged to master, but kubespawner wasn't bumped in this chart, # it would still be considered a contribution. - users = get_all_contributors('jupyterhub/zero-to-jupyterhub-k8s', '2018-01-29') - users |= get_all_contributors('jupyterhub/kubespawner', '2018-01-24') - users |= get_all_contributors('jupyterhub/jupyterhub', '2017-11-07') - users |= get_all_contributors('jupyterhub/oauthenticator', '2017-10-27') + repos = [('jupyterhub/zero-to-jupyterhub-k8s', '2018-09-03'), + ('jupyterhub/kubespawner', '2018-09-03'), + ('jupyterhub/jupyterhub', '2018-09-03'), + ('jupyterhub/oauthenticator', '2018-09-03')] + users = set() + for repo, date in repos: + print(repo) + users |= get_all_contributors(repo, date) for login, name in sorted(users, key=lambda u: u[1].casefold() if u[1] else u[0].casefold()): if name is None: From 61133a027de073c25e09e00e5a39b547688bbc06 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 15:49:43 +0100 Subject: [PATCH 04/21] changelog: mention version bumps --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a44e5168bf..3e68f5246d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ TODO: Instructions #### Easier user-selectable profiles upon login -Profile information is now passed through to Kubespawner. This means you can +Profile information is now passed through to KubeSpawner. This means you can [specify multiple user profiles that users can select from](https://zero-to-jupyterhub.readthedocs.io/en/latest/user-environment.html?highlight=profile#allow-users-to-create-their-own-conda-environments) when they log in. ([#402](https://github.com/jupyterhub/zero-to-jupyterhub-k8s/issues/402)) @@ -61,10 +61,12 @@ Want to scale up before users arrive so they don't end up waiting for the node t - **preferScheduleNextToRealUsers - improves autoscaling** - #930 - This setting slightly improves the ability for a cluster autoscaler to scale down by increasing the likelyhood of user placeholders being left alone on a node rather than real users. Real users can't be moved around while user placeholder pods can + This setting slightly improves the ability for a cluster autoscaler to scale down by increasing the likelihood of user placeholders being left alone on a node rather than real users. Real users can't be moved around while user placeholder pods can ### Minor upgrades and development improvements +- **Update jupyterhub to 0.9.4** +- **Update kubespawner to 0.10.1** - **Allow setting of storage labels** - #924 - **Tolerations for node taints** - #925 - **Making the core and user pods affinity have configurable presets** - #927 From 5a5d8226e476b4e173c05395cf2f45fb45822344 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 15:51:51 +0100 Subject: [PATCH 05/21] clarify single-string extraConfig in deprecation message config is still loaded, but you are encouraged to use the new style --- images/hub/jupyterhub_config.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/images/hub/jupyterhub_config.py b/images/hub/jupyterhub_config.py index 55d248612b..058744b169 100644 --- a/images/hub/jupyterhub_config.py +++ b/images/hub/jupyterhub_config.py @@ -427,6 +427,9 @@ def camelCaseify(s): hub.extraConfig should be a dict of strings, but found a single string instead. + extraConfig as a single string is deprecated + as of the jupyterhub chart version 0.6. + The keys can be anything identifying the block of extra configuration. @@ -436,6 +439,10 @@ def camelCaseify(s): extraConfig: myConfig: | {} + + This configuration will still be loaded, + but you are encouraged to adopt the nested form + which enables easier merging of multiple extra configurations. """ ) print( From 1d7b037ebcf1ecc801e4b86c14b89ddbda286952 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 15:52:16 +0100 Subject: [PATCH 06/21] specify required kube, helm on the front page --- doc/source/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/source/index.rst b/doc/source/index.rst index 26270bf0c9..ed03b3c864 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -19,6 +19,8 @@ page`_. If you have tips or deployments that you would like to share, see This documentation is for jupyterhub chart version |release|, which deploys JupyterHub |hub_version|. +This version of the chart requires kubernetes ≥1.11 and helm ≥2.11. + .. _about-guide: From f9f42c50142ed73a102bdd8ea57890bed976a150 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 15:59:30 +0100 Subject: [PATCH 07/21] udpate custom config in advanced docs with new passthrough --- doc/source/advanced.md | 45 +++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/doc/source/advanced.md b/doc/source/advanced.md index 808494e635..b5d4107d0c 100644 --- a/doc/source/advanced.md +++ b/doc/source/advanced.md @@ -129,27 +129,30 @@ hub: # some other code ``` -### `hub.extraConfigMap` +### `custom` configuration -This property takes a dictionary of values that are then made available for code -in `hub.extraConfig` to read using a `z2jh.get_config` function. You can use this to -easily separate your code (which goes in `hub.extraConfig`) from your config -(which should go here). +The contents of `values.yaml` is passed through to the Hub image. +You can access these values via the `z2jh.get_config` function, +for further customization of the hub pod. +Version 0.8 of the chart adds a top-level `custom` +field for passing through additional configuration that you may use. +It can be arbitrary YAML. +You can use this to separate your code (which goes in `hub.extraConfig`) +from your config (which should go in `custom`). For example, if you use the following snippet in your config.yaml file: ```yaml -hub: - extraConfigMap: - myString: Hello! - myList: - - Item1 - - Item2 - myDict: - key: value - myLongString: | - Line1 - Line2 +custom: + myString: Hello! + myList: + - Item1 + - Item2 + myDict: + key: value + myLongString: | + Line1 + Line2 ``` In your `hub.extraConfig`, @@ -166,8 +169,14 @@ In your `hub.extraConfig`, You need to have a `import z2jh` at the top of your `extraConfig` for `z2jh.get_config()` to work. -Note that the keys in `hub.extraConfigMap` must be alpha numeric strings -starting with a character. Dashes and Underscores are not allowed. +```eval_rst +.. versionchanged:: 0.8 + + `hub.extraConfigMap` used to be required for specifying additional values + to pass, which was more restrictive. + `hub.extraConfigMap` is deprecated in favor of the new + top-level `custom` field, which allows fully arbitrary yaml. +``` ### `hub.extraEnv` From 109c8b0932afe84da3a7e1b00aa306d290831bf6 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 15:59:58 +0100 Subject: [PATCH 08/21] Remove old scheduling strategy from advanced This is now in the new optimizations doc for user-scheduler --- doc/source/advanced.md | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/doc/source/advanced.md b/doc/source/advanced.md index b5d4107d0c..8fb9083f34 100644 --- a/doc/source/advanced.md +++ b/doc/source/advanced.md @@ -199,43 +199,6 @@ in kubernetes that as a long list of cool use cases. Some example use cases are: The items in this list must be valid kubernetes [container specifications](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#container-v1-core). -## Picking a Scheduler Strategy - -Kubernetes offers very flexible ways to determine how it distributes pods on -your nodes. The JupyterHub helm chart supports two common configurations, see -below for a brief description of each. - -### Spread - -* **Behavior**: This spreads user pods across **as many nodes as possible**. -* **Benefits**: A single node going down will not affect too many users. If you do not have explicit memory & cpu - limits, this strategy also allows your users the most efficient use of RAM & CPU. -* **Drawbacks**: This strategy is less efficient when used with autoscaling. - -This is the default strategy. To explicitly specify it, use the following in your -`config.yaml`: - -```yaml -singleuser: - schedulerStrategy: spread -``` - -### Pack - -* **Behavior**: This packs user pods into **as few nodes as possible**. -* **Benefits**: This reduces your resource utilization, which is useful in conjunction with autoscalers. -* **Drawbacks**: A single node going down might affect more user pods than using - a "spread" strategy (depending on the node). - -When you use this strategy, you should specify limits and guarantees for memory -and cpu. This will make your users' experience more predictable. - -To explicitly specify this strategy, use the following in your `config.yaml`: - -```yaml -singleuser: - schedulerStrategy: pack -``` ## Pre-pulling Images for Faster Startup From 7f3ac6259976456cc8b72f65a14a198c8ae9c249 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 16:20:05 +0100 Subject: [PATCH 09/21] add upgrade command, troubleshooting step --- CHANGELOG.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e68f5246d..214d456f14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,14 +20,37 @@ It contains new features, additional configuration options, and bug fixes. ### Upgrading from 0.7 +To upgrade your cluster: + +1. backup any persistent volumes and previous configuration, to be safe +2. read changes here and make any needed updates to your configuration +3. upgrade the chart: + + helm repo update + helm upgrade $RELEASE --force --version 0.8.0 --values config.yaml + +The `--force` flag allows deletion and recreation of objects +that have certain changes, such as different labels, +which are forbidden otherwise. + #### Breaking changes -- Github organisation OAuth: `auth.github.org_whitelist` has been renamed to `auth.github.orgWhitelist` +- Github organisation OAuth: `auth.github.org_whitelist` has been renamed to `auth.github.orgWhitelist` to be consistent with helm's camelCase style #### Troubleshooting -TODO: Instructions +If you encounter issues with upgrades, check for changed configuration in this document, and make sure your config is up to date. + +If you aren't able to get the upgrade to work, +you can [rollback](https://docs.helm.sh/helm/#helm-rollback) +to a previous version with: + + helm rollback $RELEASE + + +Feel free to [ping us on gitter](https://gitter.im/jupyterhub/jupyterhub) +if you have problems or questions. ### New Features From 24c1124644e2819cae440c6b95e1285e033f3375 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Feb 2019 16:23:55 +0100 Subject: [PATCH 10/21] Note deprecation / conflict messages in changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 214d456f14..631e0a6ecb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -109,6 +109,9 @@ Want to scale up before users arrive so they don't end up waiting for the node t `git` and `nbgitpuller` are now available by default - **Switch to using a StatefulSet for the Hub** __*__ The Hub should perhaps be a StatefulSet rather than a Deployment as it tends to be tied to a PV that can only be mounted by one single Hub. See this issue: https://github.com/helm/charts/issues/1863 +- Show users deprecation and error messages when they use certain deprecated + configuration (e.g. `hub.extraConfig` as a single string) + or incompatible combinations. - **Updates to the guide** - #850 - **Updates to inline documentation** - #939 From ee4b92997f4361c48758eb4ea0ce144e9c35367a Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 10:49:28 +0100 Subject: [PATCH 11/21] add eks step zero to step zero list --- doc/source/amazon/step-zero-aws-eks.rst | 21 ++++++++++++--------- doc/source/create-k8s-cluster.rst | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/doc/source/amazon/step-zero-aws-eks.rst b/doc/source/amazon/step-zero-aws-eks.rst index 0c6aa1c4e0..3fd1c11f9a 100644 --- a/doc/source/amazon/step-zero-aws-eks.rst +++ b/doc/source/amazon/step-zero-aws-eks.rst @@ -3,10 +3,10 @@ Step Zero: Kubernetes on Amazon Web Services (AWS) with Elastic Container with Kubernetes (EKS) ----------------------------------------------------------------------------------------------- -AWS recently released native support for Kubernetes. Note: This is only available in US West (Oregon) (us-west-2) and +AWS recently released native support for Kubernetes. Note: This is only available in US West (Oregon) (us-west-2) and US East (N. Virginia) (us-east-1) -This guide uses AWS to set up a cluster. This mirrors the steps found at `"Getting Started with Amazon EKS" `_ with some details filled in that are absent +This guide uses AWS to set up a cluster. This mirrors the steps found at `Getting Started with Amazon EKS`_ with some details filled in that are absent Procedure: @@ -19,13 +19,13 @@ Procedure: (From the user interface, select EKS as the service, then follow the default steps) -2. Create a VPC if you don't already have one. +2. Create a VPC if you don't already have one. - This step has a lot of variability so it is left to the user. However, one deployment can be found at `"Getting Started with Amazon EKS" `_, under *Create your Amazon EKS Cluster VPC* + This step has a lot of variability so it is left to the user. However, one deployment can be found at `Getting Started with Amazon EKS`_, under *Create your Amazon EKS Cluster VPC* 3. Create a Security Group for the EKS Control Plane to use - You do not need to set any permissions on this. The steps below will automatically define access control between the EKS Control Planne and the individual nodes + You do not need to set any permissions on this. The steps below will automatically define access control between the EKS Control Plane and the individual nodes 4. Create your EKS cluster (using the user interface) @@ -33,11 +33,11 @@ Procedure: 5. Install **kubectl** and **heptio-authenticator-aws** - Refer to `"Getting Started with Amazon EKS" `_ on *Configure kubectl for Amazon EKS* + Refer to `Getting Started with Amazon EKS`_ on *Configure kubectl for Amazon EKS* -6. Configure *kubeconfig* +6. Configure *kubeconfig* - Also see `"Getting Started with Amazon EKS" `_ *Step 2: Configure kubectl for Amazon EKS* + Also see `Getting Started with Amazon EKS`_ *Step 2: Configure kubectl for Amazon EKS* From the user interface on AWS you can retrieve the ``endpoint-url``, ``base64-encoded-ca-cert``. ``cluster-name`` is the name given in step 4. If you are using profiles in your AWS configuration, you can uncomment the ``env`` block and specify your profile as ``aws-profile``.:: @@ -82,7 +82,7 @@ Procedure: 8. Create the nodes using CloudFormation - See `"Getting Started with Amazon EKS" `_ *Step 3: Launch and Configure Amazon EKS Worker Nodes* + See `Getting Started with Amazon EKS`_ *Step 3: Launch and Configure Amazon EKS Worker Nodes* **Warning** if you are endeavoring to deploy on a private network, the cloudformation template creates a public IP for each worker node though there is no route to get there if you specified only private subnets. Regardless, if you wish to correct this, you can edit the cloudformation template by changing ``Resources.NodeLaunchConfig.Properties.AssociatePublicIpAddress`` from ``'true'`` to ``'false'`` @@ -133,3 +133,6 @@ Then run kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous +.. References + +.. _Getting Started with Amazon EKS: https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html diff --git a/doc/source/create-k8s-cluster.rst b/doc/source/create-k8s-cluster.rst index bdb31827b9..2e22929909 100644 --- a/doc/source/create-k8s-cluster.rst +++ b/doc/source/create-k8s-cluster.rst @@ -16,6 +16,7 @@ Choose one option and proceed. google/step-zero-gcp microsoft/step-zero-azure amazon/step-zero-aws + amazon/step-zero-aws-eks redhat/step-zero-openshift ibm/step-zero-ibm From 3fa08a30c1a04b8c499af00353faac3937fb5add Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 10:49:45 +0100 Subject: [PATCH 12/21] fix links, versions, refs in repo2docker, user-environment --- doc/source/repo2docker.rst | 21 ++++++++++++++------- doc/source/user-environment.rst | 13 ++++--------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/doc/source/repo2docker.rst b/doc/source/repo2docker.rst index eb81007d0c..8011d36fe1 100644 --- a/doc/source/repo2docker.rst +++ b/doc/source/repo2docker.rst @@ -9,12 +9,12 @@ Build a Docker image with ``repo2docker`` Docker images to be used this way must have the ``jupyterhub`` package of a matching version with the Helm chart. This documentation is for Helm chart - ``v0.7``, and it uses JupyterHub version ``0.9.2``. + |version|, and it uses JupyterHub version |hub_version|. If you can't find a pre-existing image that suits your needs, you can create your own image. An easy way to do this is with the package :term:`repo2docker`. -`repo2docker `_ lets you quickly convert +`repo2docker`_ lets you quickly convert a Git repository into a Docker image that can be used as a base for your JupyterHub instance. Anything inside the Git repository will exist in a user’s environment when they access your JupyterHub. @@ -61,7 +61,7 @@ to configure JupyterHub to build off of this image: .. code-block:: bash - jupyterhub==0.9.2 + jupyterhub==0.9.4 numpy==1.14.3 scipy==1.1.0 matplotlib==2.2.2 @@ -105,7 +105,7 @@ to configure JupyterHub to build off of this image: jupyter-repo2docker \ --no-run \ - --user-name=jovyan \ + --user-name=jovyan \ --image= \ @@ -130,7 +130,7 @@ to configure JupyterHub to build off of this image: 7. **Tell helm to update JupyterHub to use this configuration.** - Use the standard method to `apply the changes`_ to the config. + Use the standard method to :ref:`apply the changes ` to the config. 8. **Restart your server if you are already logged in.** @@ -141,10 +141,17 @@ to configure JupyterHub to build off of this image: .. note:: The contents of your GitHub repository might not show up if you have - enabled `persistent storage `_. Disable persistent + enabled :doc:`persistent storage `. Disable persistent storage if you want the Git repository contents to show up. 9. **Enjoy your new computing environment!** You should now have a live computing environment built off of the Docker - image we’ve created. \ No newline at end of file + image we’ve created. + + +.. REFERENCES USED: + +.. _repo2docker: https://github.com/jupyter/repo2docker +.. _downloading and installing Docker: https://www.docker.com/community-edition +.. _pip: https://pip.readthedocs.io/en/latest/user_guide/#requirements-files diff --git a/doc/source/user-environment.rst b/doc/source/user-environment.rst index cdabbf8ece..9cc63dd399 100644 --- a/doc/source/user-environment.rst +++ b/doc/source/user-environment.rst @@ -64,7 +64,7 @@ image containing useful tools and libraries for datascience, complete these step failures for users when a new version of the image is released. 2. Apply the changes by following the directions listed in - `apply the changes`_. + :ref:`apply the changes `. .. note:: @@ -155,8 +155,9 @@ variables`. While you can set them up in your Docker image if you build it yourself, it is often easier to configure your Helm chart through values provided in your :term:`config.yaml`. -To set this up, edit your :term:`config.yaml` and `apply the changes`_. For -example, this code snippet will set the environment variable ``EDITOR`` to the +To set this up, edit your :term:`config.yaml` and +:ref:`apply the changes `. +For example, this code snippet will set the environment variable ``EDITOR`` to the value ``vim``: .. code-block:: yaml @@ -366,9 +367,3 @@ environment (defined by each Docker image in the configuration above). `Kubespawner configuration reference `_ for more information. - -.. REFERENCES USED: - -.. _apply the changes: extending-jupyterhub.html#apply-config-changes -.. _downloading and installing Docker: https://www.docker.com/community-edition -.. _pip: https://pip.readthedocs.io/en/latest/user_guide/#requirements-files From e2bae6677497c17298fa3c2e88bc789342106632 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 10:50:11 +0100 Subject: [PATCH 13/21] fix ref anchor for efs_storage this file is still not linked from anywhere --- doc/source/amazon/efs_storage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/amazon/efs_storage.rst b/doc/source/amazon/efs_storage.rst index 73b9c875ea..298437d2d0 100644 --- a/doc/source/amazon/efs_storage.rst +++ b/doc/source/amazon/efs_storage.rst @@ -1,4 +1,4 @@ -.. _amazon-aws: +.. _amazon-efs: Setting up EFS storage on AWS ----------------------------- From 516b3e176c9fa4593f31487e2511b876269d00cf Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 10:50:25 +0100 Subject: [PATCH 14/21] specify that hub-db-dir is the pv to backup --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 631e0a6ecb..8f4c0ac96f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ It contains new features, additional configuration options, and bug fixes. To upgrade your cluster: -1. backup any persistent volumes and previous configuration, to be safe +1. backup your hub-db-dir persistent volume and previous configuration files, to be safe 2. read changes here and make any needed updates to your configuration 3. upgrade the chart: From 6f47c47508e08f825567523d29cd9cdad6ced82f Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 10:54:06 +0100 Subject: [PATCH 15/21] fix several links doc links should not include `.html` suffix --- doc/source/create-k8s-cluster.rst | 5 ++--- doc/source/index.rst | 2 +- doc/source/setup-jupyterhub.rst | 8 ++++---- doc/source/tools.rst | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/doc/source/create-k8s-cluster.rst b/doc/source/create-k8s-cluster.rst index 2e22929909..1a8f1e10f1 100644 --- a/doc/source/create-k8s-cluster.rst +++ b/doc/source/create-k8s-cluster.rst @@ -3,9 +3,8 @@ Setup a Kubernetes Cluster ========================== -Kubernetes' documentation describes the many `ways to set up a cluster -`__. We attempt to -provide quick instructions for the most painless and popular ways of setting up +Kubernetes' documentation describes the many `ways to set up a cluster`_. +We attempt to provide quick instructions for the most painless and popular ways of setting up a Kubernetes cluster on various cloud providers and on other infrastructure. Choose one option and proceed. diff --git a/doc/source/index.rst b/doc/source/index.rst index ed03b3c864..01e24c6b05 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -146,7 +146,7 @@ up, managing, and maintaining JupyterHub. We hope that you will use this section to share deployments with on a variety of infrastructure and for different use cases. -There is also a `community maintained list `_ of users of this +There is also a :doc:`community maintained list `_ of users of this Guide and the JupyterHub Helm Chart. Please submit a pull request to add to this section. Thanks. diff --git a/doc/source/setup-jupyterhub.rst b/doc/source/setup-jupyterhub.rst index a0b6748d71..dc345f0f30 100644 --- a/doc/source/setup-jupyterhub.rst +++ b/doc/source/setup-jupyterhub.rst @@ -3,8 +3,8 @@ Setting up JupyterHub ===================== -Now that we have a `Kubernetes cluster `_ and `Helm -`_ setup, we can proceed by using Helm to install JupyterHub +Now that we have a `Kubernetes cluster `_ and `Helm +`_ setup, we can proceed by using Helm to install JupyterHub and related :term:`Kubernetes resources ` using a :term:`Helm chart`. @@ -188,8 +188,8 @@ Install JupyterHub to a browser. JupyterHub is running with a default *dummy* authenticator so entering any username and password combination will let you enter the hub. -Congratulations! Now that you have basic JupyterHub running, you can `extend it -`_ and `optimize it `_ in many +Congratulations! Now that you have basic JupyterHub running, you can :doc:`extend it +`_ and :doc:`optimize it `_ in many ways to meet your needs. Some examples of customisations are: diff --git a/doc/source/tools.rst b/doc/source/tools.rst index f546325201..3e5869b625 100644 --- a/doc/source/tools.rst +++ b/doc/source/tools.rst @@ -31,7 +31,7 @@ For these materials, any cluster with Kubernetes installed will work with JupyterHub. More information about setting up accounts services with cloud providers -can be found `here `_. +can be found `here `_. Container Technology -------------------- From 6d01c318a22f43df92e42c0fb50b0936ebe28306 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 11:08:25 +0100 Subject: [PATCH 16/21] add redirect for now-removed getting-started page doc refactor removed the file from the flow, but not the file itself. Preserve the URL, but redirect to the new target. --- doc/source/getting-started.rst | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/doc/source/getting-started.rst b/doc/source/getting-started.rst index 639f6aa330..7b7c585f81 100644 --- a/doc/source/getting-started.rst +++ b/doc/source/getting-started.rst @@ -1,22 +1,12 @@ .. _getting-started: -Overview -======== +Moved +===== -At this point, you should have completed *Step Zero* and have an operational -Kubernetes cluster available. If not, see :ref:`create-k8s-cluster`. +This documentation has been reorganized. Start at :doc:`index`. -From now on, we will almost exclusively control the cloud through Kubernetes -rather then something that is specific to the cloud provider. What you learn -from now on is therefore also useful with other cloud providers. +.. raw:: html -The next step is to setup Helm. Helm will allow us to install a package of -things on the cloud. This is relevant to us as there are several parts alongside -the JupyterHub itself to allow it to run on the cloud relating to storage, -network and security. - -After setting up Helm, we will use it to install JupyterHub and associated -infrastructure. After this has been done, you can spend time configuring your -deployment of JupyterHub to suit your needs. - -Let's get started by moving on to :ref:`setup-helm`. + From c264b523b5a6c393de34de378ffcde46c4382f54 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 11:19:46 +0100 Subject: [PATCH 17/21] add optional user-pool step for gcp --- doc/source/google/future-user-node-pool.rst | 37 ----------------- doc/source/google/step-zero-gcp.rst | 44 ++++++++++++++++++++- doc/source/optimization.md | 4 +- 3 files changed, 44 insertions(+), 41 deletions(-) delete mode 100644 doc/source/google/future-user-node-pool.rst diff --git a/doc/source/google/future-user-node-pool.rst b/doc/source/google/future-user-node-pool.rst deleted file mode 100644 index b256ba8d11..0000000000 --- a/doc/source/google/future-user-node-pool.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. A future step to be added - -6. Create a node pool for the users. - - The nodes in this node pool are for the users. The node pool has - autoscaling enabled along with a lower and an upper scaling limit. This - means that the amount of nodes is automatically adjusted along with the - amount of users scheduled. - - The `n1-standard-2` machine type has 2 CPUs and 7.5 GB of RAM each of which - about 0.2 CPU will be requested by system pods. It is a suitable choice for a - free account that has a limit on a total of 8 CPU cores. - - Note that the node pool is *tainted*. Only user pods that is configured - with a *toleration* for this taint can schedule on the node pool's nodes. - This is done in order to ensure the autoscaler will be able to scale down - when the user pods have stopped. - - .. code-block:: bash - - gcloud beta container node-pools create user-pool \ - --machine-type n1-standard-2 \ - --num-nodes 0 \ - --enable-autoscaling \ - --min-nodes 0 \ - --max-nodes 3 \ - --node-labels hub.jupyter.org/node-purpose=user \ - --node-taints hub.jupyter.org_dedicated=user:NoSchedule - - .. note:: - - Consider adding the ``--preemptible`` flag to reduce the cost - significantly. You can `compare the prices here - `_. See - the `preemptible node documentation - `_ for more - information. \ No newline at end of file diff --git a/doc/source/google/step-zero-gcp.rst b/doc/source/google/step-zero-gcp.rst index fe5daaa322..55d663e87d 100644 --- a/doc/source/google/step-zero-gcp.rst +++ b/doc/source/google/step-zero-gcp.rst @@ -102,14 +102,54 @@ your google cloud account. kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user= - + Replace `` with the exact email of the Google account you used to sign up for Google Cloud. .. note:: - + Did you enter your email correctly? If not, you can run `kubectl delete clusterrolebinding cluster-admin-binding` and do it again. +7. [optional] Create a node pool for users + + This is an optional step, for those who want to separate + user pods from "core" pods such as the Hub itself and others. + See :doc:`../optimization` for details on using a dedicated user node pool. + + The nodes in this node pool are for the users only. The node pool has + autoscaling enabled along with a lower and an upper scaling limit. This + means that the amount of nodes is automatically adjusted along with the + amount of users scheduled. + + The `n1-standard-2` machine type has 2 CPUs and 7.5 GB of RAM each of which + about 0.2 CPU will be requested by system pods. It is a suitable choice for a + free account that has a limit on a total of 8 CPU cores. + + Note that the node pool is *tainted*. Only user pods that are configured + with a *toleration* for this taint can schedule on the node pool's nodes. + This is done in order to ensure the autoscaler will be able to scale down + when the user pods have stopped. + + .. code-block:: bash + + gcloud beta container node-pools create user-pool \ + --machine-type n1-standard-2 \ + --num-nodes 0 \ + --enable-autoscaling \ + --min-nodes 0 \ + --max-nodes 3 \ + --node-labels hub.jupyter.org/node-purpose=user \ + --node-taints hub.jupyter.org_dedicated=user:NoSchedule + + .. note:: + + Consider adding the ``--preemptible`` flag to reduce the cost + significantly. You can `compare the prices here + `_. See + the `preemptible node documentation + `_ for more + information. + Congrats. Now that you have your Kubernetes cluster running, it's time to begin :ref:`creating-your-jupyterhub`. diff --git a/doc/source/optimization.md b/doc/source/optimization.md index bde98b41af..fdea59bbd3 100644 --- a/doc/source/optimization.md +++ b/doc/source/optimization.md @@ -245,9 +245,9 @@ This section about scaling down efficiently, will also explains how the *user scheduler* can help you reduce the failures to scale down due to blocking user pods. -#### Using a user dedicated node pool +#### Using a dedicated node pool for users -To set up a user dedicated node pool, we can use [*taints and +To set up a dedicated node pool for user pods, we can use [*taints and tolerations*](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/). If we add a taint to all the nodes in the node pool, and a toleration on the user pods to tolerate being scheduled on a tainted node, we have practically From 38b620d607be1cfd39d8f1e82a6b0d0683ee9bf7 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 11:31:09 +0100 Subject: [PATCH 18/21] fix extraConfig structure in jupyterlab config --- doc/source/user-environment.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/source/user-environment.rst b/doc/source/user-environment.rst index 9cc63dd399..93fa32a6cd 100644 --- a/doc/source/user-environment.rst +++ b/doc/source/user-environment.rst @@ -99,8 +99,9 @@ To let users use JupyterLab by default, add the following entries to your defaultUrl: "/lab" hub: - extraConfig: |- - c.Spawner.cmd = ['jupyter-labhub'] + extraConfig: + jupyterlab: | + c.Spawner.cmd = ['jupyter-labhub'] .. note:: From 9306188f01902deda51af496303a103a822b155f Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 11:32:41 +0100 Subject: [PATCH 19/21] fix several missing/malformed link targets --- doc/source/glossary.rst | 9 ++++++++- doc/source/index.rst | 2 +- doc/source/setup-jupyterhub.rst | 2 +- doc/source/user-environment.rst | 11 +++-------- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/doc/source/glossary.rst b/doc/source/glossary.rst index f1901e497a..340896fbe2 100644 --- a/doc/source/glossary.rst +++ b/doc/source/glossary.rst @@ -24,7 +24,7 @@ details. `config.yaml` The :term:`Helm charts ` templates are rendered with these :term:`Helm values` as input. The file is written in the `YAML - `_ format. The YAML format is esential + `_ format. The YAML format is essential to grasp if working with Kubernetes and Helm. container @@ -42,6 +42,13 @@ details. A Docker image, built from a :term:`Dockerfile`, allows tools like ``docker`` to create any number of :term:`containers `. + image registry + A service for storing Docker images so that they can be stored + and used later. + The default public registry is at https://hub.docker.com, + but you can also run your own private image registry. + Many cloud providers offer private image registry services. + `environment variables `_ A set of named values that can affect the way running processes will behave on a computer. Some common examples are ``PATH``, ``HOME``, and diff --git a/doc/source/index.rst b/doc/source/index.rst index 01e24c6b05..9d6be26400 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -146,7 +146,7 @@ up, managing, and maintaining JupyterHub. We hope that you will use this section to share deployments with on a variety of infrastructure and for different use cases. -There is also a :doc:`community maintained list `_ of users of this +There is also a :doc:`community maintained list ` of users of this Guide and the JupyterHub Helm Chart. Please submit a pull request to add to this section. Thanks. diff --git a/doc/source/setup-jupyterhub.rst b/doc/source/setup-jupyterhub.rst index dc345f0f30..d76fcf7ec4 100644 --- a/doc/source/setup-jupyterhub.rst +++ b/doc/source/setup-jupyterhub.rst @@ -189,7 +189,7 @@ Install JupyterHub entering any username and password combination will let you enter the hub. Congratulations! Now that you have basic JupyterHub running, you can :doc:`extend it -`_ and :doc:`optimize it `_ in many +` and :doc:`optimize it ` in many ways to meet your needs. Some examples of customisations are: diff --git a/doc/source/user-environment.rst b/doc/source/user-environment.rst index 93fa32a6cd..edf9cd872d 100644 --- a/doc/source/user-environment.rst +++ b/doc/source/user-environment.rst @@ -144,8 +144,6 @@ by the Helm chart. credentials. See the :ref:`helm-chart-configuration-reference` for more details on this. - - .. _set-env-vars: Set environment variables @@ -197,9 +195,6 @@ is configured to cull a users server that has been inactive for one hour. Note that JupyterLab will autosave files, and as long as the file was within the users home directory no work is lost. - - - .. note:: In Kubernetes, a *PersistantVolume* (PV) represents the harddrive. @@ -232,7 +227,7 @@ your user folders with a git repository. -.. use-nbgitpuller: +.. _use-nbgitpuller: Using ``nbgitpuller`` to synchronize a folder ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -272,7 +267,7 @@ using this tool. tool in production. -.. setup-conda-envs: +.. _setup-conda-envs: Allow users to create their own ``conda`` environments ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -298,7 +293,7 @@ across sessions. To resolve this, take the following steps: which will persist across sessions. -.. multiple-profiles: +.. _multiple-profiles: Using multiple profiles to let users select their environment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 47314d178560b5cd7414868e6cc1f8889f133949 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 14:42:18 +0100 Subject: [PATCH 20/21] specify beta version in docs should/could this be a variable somewhere? --- doc/source/extending-jupyterhub.rst | 2 +- doc/source/setup-jupyterhub.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/extending-jupyterhub.rst b/doc/source/extending-jupyterhub.rst index 2072942b33..97344d2907 100644 --- a/doc/source/extending-jupyterhub.rst +++ b/doc/source/extending-jupyterhub.rst @@ -23,7 +23,7 @@ The general method to modify your Kubernetes deployment is to: RELEASE=jhub helm upgrade $RELEASE jupyterhub/jupyterhub \ - --version=0.7.0 \ + --version=0.8.0b1 \ --values config.yaml Note that ``helm list`` should display ```` if you forgot it. diff --git a/doc/source/setup-jupyterhub.rst b/doc/source/setup-jupyterhub.rst index d76fcf7ec4..1048892ca4 100644 --- a/doc/source/setup-jupyterhub.rst +++ b/doc/source/setup-jupyterhub.rst @@ -89,7 +89,7 @@ Install JupyterHub helm upgrade --install $RELEASE jupyterhub/jupyterhub \ --namespace $NAMESPACE \ - --version 0.7.0 \ + --version=0.8.0b1 \ --values config.yaml where: From a16bd3731394da5c7540fbcf44064fed8eaa1933 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 7 Feb 2019 16:01:24 +0100 Subject: [PATCH 21/21] avoid recommending preemptible nodes while there are known issues with them --- doc/source/google/step-zero-gcp.rst | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/source/google/step-zero-gcp.rst b/doc/source/google/step-zero-gcp.rst index 55d663e87d..3f1a7b3111 100644 --- a/doc/source/google/step-zero-gcp.rst +++ b/doc/source/google/step-zero-gcp.rst @@ -142,14 +142,17 @@ your google cloud account. --node-labels hub.jupyter.org/node-purpose=user \ --node-taints hub.jupyter.org_dedicated=user:NoSchedule - .. note:: - - Consider adding the ``--preemptible`` flag to reduce the cost - significantly. You can `compare the prices here - `_. See - the `preemptible node documentation - `_ for more - information. + + .. preemptible node recommendation not included + .. pending handling of evictions in jupyterhub/kubespawner#223 + .. .. note:: + + .. Consider adding the ``--preemptible`` flag to reduce the cost + .. significantly. You can `compare the prices here + .. `_. See + .. the `preemptible node documentation + .. `_ for more + .. information. Congrats. Now that you have your Kubernetes cluster running, it's time to begin :ref:`creating-your-jupyterhub`.