22
33Easily run ShinyProxy on a Kubernetes cluster
44
5- ** (c) Copyright Open Analytics NV, 2020-2023 - Apache License 2.0**
5+ ** (c) Copyright Open Analytics NV, 2020-2024 - Apache License 2.0**
66
77## Why?
88
99Deploying and managing ShinyProxy can get complex when many apps are used,
1010especially when the configuration of ShinyProxy is often updated.
1111
12- When restarting a running ShinyProxy instance (in order to update its configuration),
13- users will face a disconnect from their running applications. The only solution
14- to guarantee that users do not lose their connection to running apps, is to keep
15- the current instance alive when updating ShinyProxy's configuration. However,
16- manually keeping track of these instances would be too cumbersome and should
17- therefore be automated.
12+ When restarting a running ShinyProxy instance (in order to update its
13+ configuration), users will face a disconnect from their running applications.
14+ The only solution to guarantee that users do not lose their connection to
15+ running apps, is to keep the current instance alive when updating ShinyProxy's
16+ configuration. However, manually keeping track of these instances would be too
17+ cumbersome and should therefore be automated.
1818
1919The ShinyProxy operator for Kubernetes is able to manage multiple ShinyProxy
2020instances and their configuration.
@@ -88,13 +88,13 @@ start with the `SPO` prefix, meaning **S**hiny**P**roxy**O**perator.
8888 probe. By default, this is 60 seconds.
8989- ` SPO_LOG_LEVEL ` : configures the log level of the operator, may be one of the
9090 following:
91- - ` OFF ` : disables logging
92- - ` ERROR `
93- - ` WARN `
94- - ` INFO `
95- - ` DEBUG ` : default (may change)
96- - ` TRACE `
97- - ` ALL ` : enables all logging
91+ - ` OFF ` : disables logging
92+ - ` ERROR `
93+ - ` WARN `
94+ - ` INFO `
95+ - ` DEBUG ` : default (may change)
96+ - ` TRACE `
97+ - ` ALL ` : enables all logging
9898
9999Note: in our deployments where startup probes aren't supported we have success
100100with the following configuration:
@@ -113,20 +113,23 @@ ShinyProxy and the operator for the best experience.
113113
114114| ShinyProxy Version | Minimum operator version | Maximum operator version (inclusive) |
115115| --------------------| ----------------------------------| --------------------------------------|
116- | 3.0.0 | 2.0.0 | TBD |
116+ | 3.1.0 | 2.1.0 | TBD |
117+ | 3.0.0 | 2.0.0 | TBD (works with 2.1.0) |
117118| 2.6.0 | 1.0.0 | 1.1.0 |
118119| 2.5.0 | ` 0.0.1-SNAPSHOT-20210302.095930 ` | ` 0.0.1-SNAPSHOT-20210607.070151 ` |
119120| 2.4.3 | ` 0.0.1-SNAPSHOT-20201215.112635 ` | ` 0.0.1-SNAPSHOT-20201215.112635 ` |
120121
121122## Kubernetes versions
122123
123- | | k8s 1.25.x | k8s 1.24.x | k8s 1.23.x | k8s 1.22.x | k8s >= v1.21.3 | k8s <= v1.21.2 | k8s >= 1.20.10 | k8s <= v1.20.9 | v1.19 | <= v1.18 |
124- | -------| ------------| ------------| -------------| ------------| ----------------| ----------------| ----------------| ----------------| -------| ----------|
125- | 2.0.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓¹ | ✓ | ✓¹ | ✓ | - |
124+ | | k8s 1.29.x | k8s 1.28.x | k8s 1.27.x | k8s 1.26.x | k8s 1.25.x | k8s 1.24.x | k8s 1.23.x | k8s 1.22.x | k8s >= v1.21.3 | k8s <= v1.21.2 | k8s >= 1.20.10 | k8s <= v1.20.9 | v1.19 | <= v1.18 |
125+ | -------| ------------| ------------| ------------| ------------| ------------| ------------| ------------| ------------| ----------------| ----------------| ----------------| ----------------| -------| ----------|
126+ | 2.1.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓¹ | ✓ | ✓¹ | ✓ | - |
127+ | 2.0.0 | ✓² | ✓² | ✓² | ✓² | ✓² | ✓² | ✓ | ✓ | ✓ | ✓¹ | ✓ | ✓¹ | ✓ | - |
126128
127129** Note:**
128130
129131- ¹ requires a workaround, see below.
132+ - ² version 2.0.0 supports these Kubernetes versions, but might stop syncing after some time, this issue is solved in version 2.1.0
130133
131134### Workaround for bug in Kubernetes
132135
@@ -153,18 +156,18 @@ Be aware of these changes when updating to version 2.0.0:
153156 started, all new requests will be handled by the new server, including
154157 requests for existing apps. Only existing websocket connections will stay open
155158 on the old servers. This has multiple benefits:
156- - when a new server is started, users will immediately use and see the
157- configuration of that new server. In other words, if a new configuration
158- includes a new app, this app is immediately available to all users (even if
159- they are using apps started on older servers)
160- - there is no longer a process of transferring users to new servers. Both the
161- forced method and the manual method (where users have to click a button) are
162- removed. Users will immediately use the new configuration.
163- - apps can be run for a (very) long time, even if frequently updating the
164- configuration and without having many old servers. Old servers are removed
165- as soon as no websocket connections are running on that server.
166- - Skipper is no longer a dependency of the operator. There is no benefit in
167- using with version two of the operator.
159+ - when a new server is started, users will immediately use and see the
160+ configuration of that new server. In other words, if a new configuration
161+ includes a new app, this app is immediately available to all users (even
162+ if they are using apps started on older servers)
163+ - there is no longer a process of transferring users to new servers. Both
164+ the forced method and the manual method (where users have to click a
165+ button) are removed. Users will immediately use the new configuration.
166+ - apps can be run for a (very) long time, even if frequently updating the
167+ configuration and without having many old servers. Old servers are removed
168+ as soon as no websocket connections are running on that server.
169+ - Skipper is no longer a dependency of the operator. There is no benefit in
170+ using with version two of the operator.
168171- the operator now requires ShinyProxy to store the active proxies in Redis.
169172 Therefore, since this release Redis takes a more critical role. When running
170173 Redis inside Kubernetes, it is therefore best practice to use Redis Sentinel.
@@ -182,8 +185,16 @@ need to be made to the ShinyProxy configuration file:
182185- optionally add the
183186 property [ ` kubernetesIngressPatches ` ] ( docs/deployment#modify-the-ingress-resource )
184187 in order to customize the ingress created by the operator.
185- - update the ShinyProxy image to ` openanalytics/shinyproxy:3.0.1 `
188+ - update the ShinyProxy image to ` openanalytics/shinyproxy:3.1.0 `
189+
190+ ### Update to 2.1.0
191+
192+ The [ ShinyProxy CRD] ( docs/deployment/bases/namespaced/crds/shinyproxy.crd.yaml )
193+ has been updated in version 2.1.0, it is important to update the CRD in your
194+ cluster. Running the [ deployment commands] ( docs/deployment/ ) is enough. The CRD
195+ can be updated while ShinyProxy and the ShinyProxy operator are running in the
196+ cluster.
186197
187198## Java Version
188199
189- This project requires JDK 11 .
200+ This project requires JDK 17 .
0 commit comments