Merge remote-tracking branch 'upstream/master' into dev-1.19

This commit is contained in:
Savitha Raghunathan
2020-05-11 16:07:40 -04:00
197 changed files with 3971 additions and 922 deletions
+4 -1
View File
@@ -36,7 +36,10 @@ serve: ## Boot the development server.
hugo server --buildFuture
docker-image:
$(DOCKER) build . --tag $(DOCKER_IMAGE) --build-arg HUGO_VERSION=$(HUGO_VERSION)
$(DOCKER) build . \
--network=host \
--tag $(DOCKER_IMAGE) \
--build-arg HUGO_VERSION=$(HUGO_VERSION)
docker-build:
$(DOCKER_RUN) $(DOCKER_IMAGE) hugo
-2
View File
@@ -41,7 +41,6 @@ aliases:
sig-docs-en-owners: # Admins for English content
- bradtopol
- daminisatya
- jaredbhatti
- jimangel
- kbarnard10
- kbhawkey
@@ -59,7 +58,6 @@ aliases:
sig-docs-en-reviews: # PR reviews for English content
- bradtopol
- daminisatya
- jaredbhatti
- jimangel
- kbarnard10
- kbhawkey
+2 -1
View File
@@ -439,6 +439,7 @@ footer
width: 100%
background-image: url(/images/texture.png)
background-color: $dark-grey
overflow-x: hidden
.main-section
padding: 20px 0
@@ -1214,7 +1215,7 @@ $feature-box-div-margin-bottom: 40px
margin-bottom: 20px
#desktopKCButton
position: relative
position: absolute
font-size: 18px
background-color: $dark-grey
border-radius: 8px
+6
View File
@@ -8,3 +8,9 @@ menu:
post: >
<p>Read the latest news for Kubernetes and the containers space in general, and get technical how-tos hot off the presses.</p>
---
{{< comment >}}
For information about contributing to the blog, see
https://kubernetes.io/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post
{{< /comment >}}
@@ -144,7 +144,7 @@ The local persistent volume beta feature is not complete by far. Some notable en
[Pod disruption budget](/docs/concepts/workloads/pods/disruptions/) is also very important for those workloads that must maintain quorum. Setting a disruption budget for your workload ensures that it does not drop below quorum due to voluntary disruption events, such as node drains during upgrade.
[Pod affinity and anti-affinity](/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity-beta-feature) ensures that your workloads stay either co-located or spread out across failure domains. If you have multiple local persistent volumes available on a single node, it may be preferable to specify an pod anti-affinity policy to spread your workload across nodes. Note that if you want multiple pods to share the same local persistent volume, you do not need to specify a pod affinity policy. The scheduler understands the locality constraints of the local persistent volume and schedules your pod to the correct node.
[Pod affinity and anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity-beta-feature) ensures that your workloads stay either co-located or spread out across failure domains. If you have multiple local persistent volumes available on a single node, it may be preferable to specify an pod anti-affinity policy to spread your workload across nodes. Note that if you want multiple pods to share the same local persistent volume, you do not need to specify a pod affinity policy. The scheduler understands the locality constraints of the local persistent volume and schedules your pod to the correct node.
## Getting involved
@@ -27,7 +27,7 @@ Why is RuntimeClass a pod level concept? The Kubernetes resource model expects c
## What's next?
The RuntimeClass resource is an important foundation for surfacing runtime properties to the control plane. For example, to implement scheduler support for clusters with heterogeneous nodes supporting different runtimes, we might add [NodeAffinity](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) terms to the RuntimeClass definition. Another area to address is managing the variable resource requirements to run pods of different runtimes. The [Pod Overhead proposal](https://docs.google.com/document/d/1EJKT4gyl58-kzt2bnwkv08MIUZ6lkDpXcxkHqCvvAp4/preview) was an early take on this that aligns nicely with the RuntimeClass design, and may be pursued further.
The RuntimeClass resource is an important foundation for surfacing runtime properties to the control plane. For example, to implement scheduler support for clusters with heterogeneous nodes supporting different runtimes, we might add [NodeAffinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) terms to the RuntimeClass definition. Another area to address is managing the variable resource requirements to run pods of different runtimes. The [Pod Overhead proposal](https://docs.google.com/document/d/1EJKT4gyl58-kzt2bnwkv08MIUZ6lkDpXcxkHqCvvAp4/preview) was an early take on this that aligns nicely with the RuntimeClass design, and may be pursued further.
Many other RuntimeClass extensions have also been proposed, and will be revisited as the feature continues to develop and mature. A few more extensions that are being considered include:
@@ -1,172 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="5259.000000pt" height="2210.000000pt" viewBox="0 0 5259.000000 2210.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,2210.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M7270 16553 c-459 -33 -872 -144 -1264 -340 -571 -286 -1050 -747
-1358 -1308 -92 -167 -127 -252 -134 -319 -3 -34 -7 -77 -9 -96 -8 -66 -13
-235 -7 -244 3 -5 7 -102 8 -215 4 -256 14 -426 33 -581 6 -47 13 -132 16
-190 4 -94 10 -144 21 -205 2 -11 7 -40 10 -65 3 -25 8 -48 11 -52 2 -5 -1 -8
-6 -8 -6 0 -12 8 -13 18 -1 20 -2 24 -13 82 -5 25 -10 54 -12 65 -1 11 -7 88
-12 170 -5 83 -14 188 -21 235 -6 48 -10 90 -9 95 6 21 -13 165 -21 165 -5 0
-7 -10 -4 -22 2 -13 6 -62 9 -110 3 -49 10 -121 16 -160 5 -40 12 -122 15
-183 3 -91 13 -202 19 -225 1 -6 15 -84 21 -121 2 -15 6 -47 9 -70 5 -41 15
-104 31 -191 4 -21 10 -38 14 -38 4 0 15 -38 25 -85 11 -47 23 -85 27 -85 4 0
8 -8 8 -17 0 -13 3 -14 12 -5 9 9 5 27 -15 79 -15 38 -27 76 -27 85 0 9 -4 19
-9 22 -16 10 -64 286 -50 286 5 0 10 -6 10 -12 6 -61 21 -157 30 -193 16 -62
78 -185 92 -179 8 3 24 -21 40 -58 31 -69 109 -146 115 -114 4 21 15 20 29 -3
13 -21 73 -34 73 -16 0 7 16 11 40 11 22 -1 40 2 40 5 0 10 33 8 77 -3 52 -13
74 3 66 46 l-6 28 43 -22 c40 -20 45 -21 55 -6 10 13 18 14 44 5 35 -13 34
-10 21 -43 -8 -21 -6 -27 10 -36 16 -9 25 -6 42 10 16 15 19 23 11 31 -24 24
-2 39 57 39 32 0 60 5 62 10 2 6 37 14 77 17 54 4 79 11 93 25 11 11 26 17 34
14 17 -7 131 38 154 61 26 24 123 78 170 93 45 14 156 81 195 116 60 55 165
122 165 107 0 -4 6 -1 13 7 15 20 133 110 143 110 9 0 90 59 118 86 35 34 140
101 152 97 7 -2 25 8 40 23 30 27 79 56 103 60 8 2 17 7 20 12 16 25 157 39
271 26 19 -2 42 -4 50 -4 8 0 26 0 40 0 14 0 52 -8 85 -17 33 -9 72 -16 87
-16 15 0 25 -4 21 -10 -3 -5 3 -7 14 -3 18 6 66 -21 85 -48 3 -5 30 -10 60
-11 56 -1 128 -21 128 -35 0 -7 47 -23 52 -18 2 2 23 -9 48 -23 28 -17 57 -25
78 -24 17 2 32 -2 32 -8 0 -6 3 -7 7 -4 4 4 23 -10 43 -32 20 -21 52 -46 71
-56 18 -10 76 -60 128 -112 51 -52 95 -92 97 -90 8 8 121 -107 147 -150 15
-23 34 -44 44 -48 10 -3 31 -32 47 -65 17 -33 39 -70 50 -83 33 -36 49 -69 38
-76 -11 -7 96 -233 120 -251 3 -3 6 -16 5 -30 0 -14 15 -90 35 -170 20 -80 39
-163 43 -185 4 -22 11 -45 17 -52 5 -7 7 -16 4 -21 -3 -5 10 -52 29 -106 18
-53 41 -129 49 -169 18 -77 19 -82 59 -170 15 -31 27 -64 27 -73 0 -8 9 -32
20 -54 11 -22 17 -46 13 -56 -4 -11 -3 -15 5 -10 6 3 13 -3 17 -16 22 -73 95
-228 108 -228 4 0 6 -4 2 -10 -3 -5 -3 -21 1 -35 5 -20 9 -23 15 -13 6 9 9 3
9 -17 0 -32 19 -74 20 -45 1 8 9 0 18 -17 58 -110 73 -144 66 -154 -4 -7 -3
-9 3 -6 12 8 26 -20 18 -33 -3 -5 3 -14 14 -20 13 -7 18 -16 14 -27 -4 -11 -3
-14 5 -9 8 5 10 2 6 -8 -4 -9 -1 -16 6 -16 7 0 10 -7 7 -14 -4 -10 -1 -13 9
-9 9 3 12 0 9 -9 -3 -9 5 -23 20 -34 14 -10 25 -24 25 -31 0 -7 3 -13 8 -13
12 0 31 -51 25 -68 -3 -9 -3 -14 2 -10 10 9 35 -10 35 -26 0 -6 -5 -4 -10 4
-5 8 -10 10 -10 4 0 -5 13 -20 30 -32 16 -12 37 -37 46 -54 9 -17 29 -45 45
-62 15 -16 34 -41 41 -55 7 -15 19 -30 25 -34 7 -4 13 -13 13 -20 0 -7 -4 -6
-11 3 -8 12 -9 10 -4 -7 3 -13 18 -35 33 -50 15 -16 44 -47 64 -71 20 -24 39
-43 42 -43 11 2 146 -146 139 -152 -3 -4 -1 -7 5 -7 7 0 12 -5 12 -11 0 -5 -6
-7 -12 -3 -7 4 -4 -2 6 -14 20 -23 32 -30 21 -12 -3 6 -3 10 1 10 9 0 33 -32
34 -45 0 -5 -5 -3 -10 5 -8 13 -10 12 -10 -2 0 -11 7 -17 18 -15 19 2 172
-129 172 -147 0 -5 -26 16 -57 47 -31 31 -59 54 -62 51 -3 -3 24 -31 59 -64
44 -39 68 -54 73 -46 5 6 6 3 3 -9 -4 -14 1 -24 17 -34 17 -11 19 -11 10 0
-21 21 -15 34 6 15 11 -10 17 -24 14 -32 -5 -14 12 -20 20 -6 2 4 3 2 1 -5 -1
-6 31 -39 72 -73 49 -40 71 -53 63 -38 -12 23 -12 23 9 4 12 -10 19 -22 17
-26 -5 -8 38 -40 52 -40 4 0 -5 9 -22 20 -16 11 -25 20 -19 20 17 0 65 -40 59
-50 -3 -4 3 -7 13 -6 9 0 16 -5 14 -12 -1 -8 2 -11 8 -7 6 4 28 -6 48 -21 53
-40 64 -53 60 -66 -2 -6 19 -24 46 -38 50 -26 166 -99 176 -111 3 -3 41 -24
85 -45 44 -21 81 -42 83 -46 2 -4 10 -8 18 -8 7 0 37 -13 66 -29 85 -45 326
-138 421 -162 48 -12 87 -26 87 -31 0 -5 6 -8 13 -5 6 2 19 -1 27 -8 8 -7 78
-20 155 -29 77 -9 151 -19 165 -22 14 -3 54 -7 89 -8 38 -2 67 -8 69 -14 5
-16 49 -15 55 1 3 9 9 9 28 -1 17 -9 108 -15 304 -21 375 -10 595 -2 750 28
27 5 53 7 57 5 3 -2 65 9 137 25 121 27 188 31 175 10 -8 -14 40 -10 134 10
48 11 101 20 117 19 17 0 46 7 65 16 19 9 26 14 16 11 -11 -3 -54 -10 -95 -16
-75 -10 -148 -24 -185 -35 -11 -4 -16 -2 -12 4 5 9 183 46 216 44 8 0 29 4 45
8 17 5 48 11 70 14 22 3 66 14 97 25 32 12 64 21 72 21 8 0 60 23 116 51 55
28 107 48 115 45 29 -11 114 36 307 165 32 22 61 39 65 39 5 1 28 22 53 47 25
26 32 35 15 21 -54 -46 -265 -186 -265 -175 0 3 52 40 116 82 64 43 133 92
153 110 35 31 78 59 93 60 4 0 13 7 20 15 11 12 10 12 -7 0 -18 -14 -19 -14
-6 2 7 10 17 16 21 13 11 -6 61 35 55 45 -3 4 3 14 13 21 15 13 16 12 3 -3
-11 -15 -11 -18 2 -18 13 0 111 80 160 131 9 10 24 16 32 12 16 -6 55 23 55
40 0 6 -12 0 -27 -14 -40 -35 -6 7 40 50 21 20 74 72 118 115 43 43 81 77 84
75 4 -5 -108 -119 -180 -183 -22 -19 -34 -36 -28 -36 7 0 20 11 29 25 9 14 21
25 28 25 10 0 63 54 300 305 32 33 62 69 67 80 6 11 -3 4 -20 -15 -17 -19 -31
-31 -31 -27 0 5 27 38 60 75 32 37 120 144 195 237 75 94 144 179 153 190 10
11 28 37 41 58 12 20 27 35 32 31 5 -3 9 -2 8 3 -3 19 2 33 12 33 5 0 7 -5 3
-12 -5 -7 -3 -8 5 -4 7 5 10 15 7 23 -3 8 -2 11 3 8 5 -3 17 5 25 17 21 29 20
44 0 27 -17 -14 19 55 43 81 8 8 35 44 62 80 26 36 55 71 64 79 10 7 17 19 17
25 0 6 11 24 25 40 14 16 25 33 25 37 0 10 60 99 67 99 10 0 -5 -27 -61 -114
-31 -47 -56 -89 -56 -95 0 -5 -6 -14 -14 -18 -22 -13 -159 -194 -151 -201 3
-4 10 0 15 8 16 26 44 63 95 124 62 75 91 117 100 145 3 12 10 21 16 21 5 0
21 24 36 53 37 70 45 89 33 82 -17 -11 -11 7 20 56 65 100 224 610 305 973
114 514 158 918 159 1451 1 366 -8 466 -60 725 -123 609 -408 1154 -837 1597
-956 988 -2469 1253 -3723 654 -516 -247 -970 -642 -1289 -1121 -309 -465
-479 -961 -533 -1550 l-8 -85 -8 85 c-73 806 -392 1499 -946 2050 -546 544
-1263 871 -2040 930 -125 9 -334 11 -440 3z m-2174 -4150 c-11 -11 -17 4 -9
23 7 18 8 18 11 1 2 -10 1 -21 -2 -24z m-96 8 c0 -6 -4 -13 -10 -16 -5 -3 -10
1 -10 9 0 9 5 16 10 16 6 0 10 -4 10 -9z m10799 -2778 c-26 -32 -149 -154
-149 -147 0 11 146 164 156 164 4 0 0 -8 -7 -17z m-5349 -435 c0 -12 -6 -9
-26 13 -19 22 -19 22 4 8 12 -8 22 -17 22 -21z m56 -45 c-6 -6 -46 20 -46 30
0 4 11 0 25 -9 14 -9 24 -19 21 -21z m4204 -418 c0 -7 -76 -56 -92 -59 -7 -1
-24 -8 -36 -15 -13 -7 -26 -10 -29 -8 -6 6 31 27 57 32 11 2 36 15 57 29 40
27 43 29 43 21z"/>
<path d="M4489 14560 c-3 -79 -10 -146 -17 -170 -9 -27 -9 -62 2 -180 3 -41 8
-155 10 -253 1 -97 6 -180 9 -184 4 -3 4 95 0 218 -4 123 -7 267 -7 319 -1 95
9 234 18 248 3 5 1 14 -5 22 -6 11 -9 5 -10 -20z"/>
<path d="M19280 11045 l0 -2565 430 0 430 0 0 110 c0 61 2 110 6 110 3 0 53
-32 112 -71 270 -179 595 -299 915 -339 114 -14 400 -14 514 0 530 66 1024
333 1365 739 249 297 408 644 473 1031 23 134 30 400 16 543 -75 728 -502
1351 -1151 1681 -313 159 -605 229 -960 229 -431 0 -821 -118 -1172 -352 -59
-39 -109 -71 -112 -71 -3 0 -6 342 -6 760 l0 760 -430 0 -430 0 0 -2565z
m2407 636 c253 -52 465 -165 655 -349 207 -201 336 -445 383 -731 25 -146 17
-367 -19 -507 -65 -260 -180 -460 -372 -644 -185 -178 -414 -296 -671 -346
-117 -23 -347 -23 -463 -1 -257 50 -484 167 -669 343 -185 175 -303 375 -371
624 -18 66 -20 105 -20 325 0 233 2 256 24 340 62 231 178 426 358 602 209
205 471 326 788 367 75 9 279 -3 377 -23z"/>
<path d="M29040 11045 l0 -2565 430 0 430 0 0 110 c0 61 1 110 3 110 1 0 54
-34 117 -76 262 -173 561 -285 877 -330 141 -19 434 -19 576 0 791 112 1457
658 1715 1406 82 240 112 422 112 695 0 351 -64 632 -210 930 -115 233 -245
410 -443 601 -323 312 -710 501 -1162 570 -132 19 -440 22 -565 5 -347 -49
-647 -162 -919 -347 -51 -35 -95 -64 -97 -64 -2 0 -4 342 -4 760 l0 760 -430
0 -430 0 0 -2565z m2386 639 c271 -55 496 -175 684 -364 329 -329 459 -797
345 -1244 -169 -670 -834 -1096 -1509 -969 -487 91 -883 451 -1020 927 -25 85
-26 98 -26 367 l0 279 31 97 c43 136 88 230 166 347 117 176 314 351 503 446
122 61 317 118 465 134 74 8 283 -3 361 -20z"/>
<path d="M37920 11045 l0 -2565 430 0 430 0 0 2565 0 2565 -430 0 -430 0 0
-2565z"/>
<path d="M6205 12682 c-11 -9 -27 -26 -35 -37 -8 -11 3 -4 23 14 33 31 42 42
35 41 -2 -1 -12 -8 -23 -18z"/>
<path d="M26025 12514 c-532 -39 -983 -235 -1354 -589 -655 -624 -838 -1612
-451 -2432 311 -659 941 -1114 1664 -1203 111 -14 405 -14 511 0 335 42 643
157 917 340 l103 69 3 -110 3 -109 434 0 435 0 0 1910 0 1910 -435 0 -434 0
-3 -104 -3 -105 -92 63 c-253 172 -580 299 -879 340 -115 15 -335 26 -419 20z
m353 -829 c271 -52 515 -186 710 -389 138 -144 239 -314 301 -509 l31 -97 0
-295 0 -295 -31 -97 c-66 -208 -193 -409 -353 -561 -400 -378 -991 -466 -1481
-220 -122 62 -220 133 -327 236 -260 253 -398 576 -398 936 0 348 124 656 363
903 228 236 488 364 827 407 65 8 275 -3 358 -19z"/>
<path d="M41344 12510 c-973 -81 -1754 -796 -1925 -1765 -31 -174 -33 -502 -5
-670 53 -320 158 -591 331 -850 348 -522 886 -856 1510 -935 106 -14 400 -14
511 0 487 60 948 292 1284 647 475 501 675 1200 539 1882 -175 873 -899 1555
-1781 1675 -138 19 -340 26 -464 16z m423 -829 c129 -27 221 -59 347 -124 128
-65 228 -141 343 -260 239 -247 363 -555 363 -903 0 -360 -138 -683 -398 -936
-366 -355 -870 -466 -1349 -297 -431 152 -749 519 -850 981 -25 116 -25 390 0
506 56 254 169 471 338 647 217 225 486 363 794 404 103 14 295 6 412 -18z"/>
<path d="M46105 12514 c-371 -23 -717 -136 -1030 -338 l-100 -65 -3 95 -3 94
-429 0 -430 0 -2 -942 c-2 -519 -2 -1378 0 -1910 l2 -968 430 0 430 0 0 1148
c0 1120 0 1150 20 1207 127 370 457 690 835 808 156 49 230 60 400 60 179 0
280 -17 440 -73 116 -42 180 -74 296 -151 233 -156 428 -416 512 -684 64 -205
60 -130 64 -1272 l4 -1043 405 0 405 0 -4 1053 c-4 1069 -5 1098 -43 1287
-143 704 -640 1290 -1321 1556 -256 100 -600 154 -878 138z"/>
<path d="M5833 12473 c-30 -15 -49 -40 -39 -50 8 -8 65 27 76 47 13 24 6 24
-37 3z"/>
<path d="M5635 12405 c-5 -2 -22 -6 -37 -9 -45 -10 -32 -26 20 -26 44 0 72 12
72 32 0 8 -35 10 -55 3z"/>
<path d="M4770 12371 c0 -11 4 -22 9 -25 4 -3 6 6 3 19 -5 30 -12 33 -12 6z"/>
<path d="M5223 12368 c2 -13 35 -37 50 -38 14 0 7 23 -10 36 -23 17 -44 18
-40 2z"/>
<path d="M5483 12368 c6 -31 47 -38 47 -8 0 15 -7 20 -25 20 -15 0 -24 -5 -22
-12z"/>
<path d="M33200 12305 c0 -2 392 -836 871 -1852 479 -1016 873 -1855 876
-1863 2 -8 -125 -319 -283 -690 -157 -371 -289 -683 -291 -693 -5 -16 20 -17
463 -15 l468 3 1063 2510 c584 1381 1071 2531 1082 2558 l20 47 -470 -2 -471
-3 -557 -1318 c-307 -725 -562 -1319 -566 -1320 -4 -1 -288 592 -630 1318
l-622 1320 -477 3 c-262 1 -476 0 -476 -3z"/>
<path d="M16271 10211 c-6 -10 -26 -38 -46 -62 -20 -24 -43 -54 -53 -67 -9
-12 -24 -30 -33 -40 -8 -9 -22 -28 -31 -42 -9 -14 -50 -65 -93 -115 -42 -49
-91 -108 -110 -130 -18 -22 -31 -42 -28 -45 2 -3 11 3 18 14 8 10 28 33 44 52
17 18 31 36 31 39 0 3 9 16 20 28 34 38 104 121 135 161 17 21 55 71 86 110
55 69 85 116 75 116 -3 0 -10 -8 -15 -19z"/>
<path d="M9660 10060 c6 -11 13 -20 16 -20 2 0 0 9 -6 20 -6 11 -13 20 -16 20
-2 0 0 -9 6 -20z"/>
<path d="M10150 9446 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
13z"/>
<path d="M15354 9197 c-13 -15 -122 -111 -149 -131 -11 -9 -15 -16 -10 -16 12
0 168 136 173 151 5 12 -1 11 -14 -4z"/>
<path d="M14503 8625 c-12 -8 -57 -30 -100 -49 -143 -62 -132 -56 -98 -50 38
7 182 72 214 96 29 22 14 24 -16 3z"/>
<path d="M14218 8511 c-26 -10 -49 -17 -52 -14 -2 3 -13 0 -23 -6 -15 -10 -12
-11 17 -7 37 5 110 33 110 41 0 6 3 7 -52 -14z"/>
<path d="M13435 8379 c-16 -6 -14 -8 13 -8 33 -1 41 4 20 12 -7 2 -22 1 -33
-4z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 224 KiB

+1 -1
View File
@@ -4,7 +4,7 @@ linkTitle: Babylon
case_study_styles: true
cid: caseStudies
css: /css/case-studies-gradient.css
logo: babylon_featured_logo.png
logo: babylon_featured_logo.svg
featured: true
weight: 1
quote: >
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.2 KiB

@@ -0,0 +1,117 @@
---
title: Booking.com Case Study
linkTitle: Booking.com
case_study_styles: true
cid: caseStudies
css: /css/case-studies-gradient.css
logo: booking.com_featured_logo.png
featured: true
weight: 3
quote: >
We realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform.
---
<div class="article image overlay" style="background-image: url('/images/booking1.jpg')">
<h1> CASE STUDY: Booking.com</h1>
<div class="subhead">After Learning the Ropes with a Kubernetes Distribution, Booking.com Built a Platform of Its Own</div>
</div>
<div class="details">
Company &nbsp;<b>Booking.com</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location &nbsp;<b>Netherlands</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Industry &nbsp;<b>Travel</b>
</div>
<hr>
<section class="section1">
<div class="colsgradient">
<div class="col1">
<h2>Challenge</h2>
In 2016, Booking.com migrated to an OpenShift platform, which gave product developers faster access to infrastructure. But because Kubernetes was abstracted away from the developers, the infrastructure team became a “knowledge bottleneck” when challenges arose. Trying to scale that support wasnt sustainable.
<h2>Solution</h2>
After a year operating OpenShift, the platform team decided to build its own vanilla Kubernetes platform—and ask developers to learn some Kubernetes in order to use it. “This is not a magical platform,” says Ben Tyler, Principal Developer, B Platform Track. “Were not claiming that you can just use it with your eyes closed. Developers need to do some learning, and were going to do everything we can to make sure they have access to that knowledge.”
<h2>Impact</h2>
Despite the learning curve, theres been a great uptick in adoption of the new Kubernetes platform. Before containers, creating a new service could take a couple of days if the developers understood Puppet, or weeks if they didnt. On the new platform, it can take as few as 10 minutes. About 500 new services were built on the platform in the first 8 months.
</div>
</div>
</section>
<div class="article image overlay" style="background-image: url('/images/booking2.JPG');">
<div class="quotetext">
“As our users learn Kubernetes and become more sophisticated Kubernetes users, they put pressure on us to provide a better, more native Kubernetes experience, which is great. Its a super healthy dynamic.”
<p><div class="quoteauthortext">- BEN TYLER, PRINCIPAL DEVELOPER, B PLATFORM TRACK AT BOOKING.COM</div></p>
</div>
</div>
<section class="section2">
<div class="fullcol">
<h4>Booking.com has a long history with Kubernetes: In 2015, a team at the travel platform prototyped a container platform based on Mesos and Marathon.
</h4>
<p>Impressed by what the technology offered, but in need of enterprise features at its scale—the site handles more than 1.5 million room-night reservations a day on average—the team decided to adopt an OpenShift platform.</p>
<p>This platform, which was wrapped in a Heroku-style, high-level CLI interface, “was definitely popular with our product developers,” says Ben Tyler, Principal Developer, B Platform Track. “We gave them faster access to infrastructure.”</p>
<p>But, he adds, “anytime something went slightly off the rails, developers didnt have any of the knowledge required to support themselves.”</p>
<p>And after a year of operating this platform, the infrastructure team found that it had become “a knowledge bottleneck,” he says. “Most of the developers who used it did not know it was Kubernetes underneath. An application failure and a platform failure both looked like failures of that Heroku-style tool.”</p>
<p>
Scaling the necessary support did not seem feasible or sustainable, so the platform team needed a new solution. The understanding of Kubernetes that they had gained operating the OpenShift platform gave them confidence to build a vanilla Kubernetes platform of their own and customize it to suit the companys needs.</p>
</div>
</section>
<div class="greybanner">
<div class="greyquotetext">
“For entering the landscape, OpenShift was definitely very helpful. It shows you what the technology can do, and it makes it easy for you to use it. After we spent some time on it, we realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. We definitely benefit in the long term for taking that step and investing the time in gaining that knowledge.”<p><div class="quoteauthortext">- EDUARD IACOBOAIA, SENIOR SYSTEM ADMINISTRATOR, B PLATFORM TRACK AT BOOKING.COM</div></p>
</div>
</div>
<section class="section3">
<div class="fullcol">
<p>
“For entering the landscape, OpenShift was definitely very helpful,” says Eduard Iacoboaia, Senior System Administrator, B Platform Track. “It shows you what the technology can do, and it makes it easy for you to use it. After we spent some time on it, we realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. We definitely benefit in the long term for taking that step and investing the time in gaining that knowledge.” </p>
<p>
Iacoboaias team had customized a lot of OpenShift tools to make them work at Booking.com, and “those integrations points were kind of fragile,” he says. “We spent much more time understanding all the components of Kubernetes, how they work, how they interact with each other.” That research led the team to switch from OpenShifts built-in Ansible playbooks to Puppet deployments, which are used for the rest of Bookings infrastructure. The control plane was also moved from inside the cluster onto bare metal, as the company runs tens of thousands of bare-metal servers and a large infrastructure for running applications on bare metal. (Booking runs Kubernetes in multiple clusters in multiple data centers across the various regions where it has compute.) “We decided to keep it as simple as possible and to also use the tools that we know best,” says Iacoboaia. </p>
<p>
The other big change was that product engineers would have to learn Kubernetes in order to onboard. “This is not a magical platform,” says Tyler. “Were not claiming that you can just use it with your eyes closed. Developers need to do some learning, and were going to do everything we can to make sure they have access to that knowledge.” That includes trainings, blog posts, videos, and Udemy courses. </p>
<p>
Despite the learning curve, theres been a great uptick in adoption of the new Kubernetes platform. “I think the reason weve been able to strike this bargain successfully is that were not asking them to learn a proprietary app system,” says Tyler. “Were asking them to learn something thats open source, where the knowledge is transferable. Theyre investing in their own careers by learning Kubernetes.”</p>
<p>
One clear sign that this strategy has been a success is that in the support channel, when users have questions, other product engineers are jumping in to respond. “I havent seen that kind of community engagement around a particular platform product internally before,” says Tyler. “It helps a lot that its visibly an ecosystem standard outside of the company, so people feel value in investing in that knowledge and sharing it with others, which is really, really powerful.” </p>
</div>
</section>
<div class="article image overlay" style="background-image: url('/images/booking3.jpg');">
<div class="quotetext">
“We have a tutorial. You follow the tutorial. Your code is running. Then, its business-logic time. The time to gain access to resources is decreased enormously.” <p><div class="quoteauthortext">- BEN TYLER, PRINCIPAL DEVELOPER, B PLATFORM TRACK AT BOOKING.COM</div></p>
</div>
</div>
<section class="section5">
<div class="fullcol">
<p>
Theres other quantifiable evidence too: Before containers, creating a new service could take a couple of days if the developers understood Puppet, or weeks if they didnt. On the new platform, it takes 10 minutes. “We have a tutorial. You follow the tutorial. Your code is running. Then, its business-logic time,” says Tyler. “The time to gain access to resources is decreased enormously.” About 500 new services were built in the first 8 months on the platform, with hundreds of releases per day. </p>
<p>
The platform offers different “layers of contracts, so to speak,” says Tyler. “At the very base, its just Kubernetes. If youre a pro Kubernetes user, heres a Kubernetes API, just like you get from GKE or AKS. Were trying to be a provider on that same level. But our whole job inside the company is to be a bigger value add than just vanilla infrastructure, so we provide a set of base images for our main stacks, Perl and Java.”
</p>
<p>
And “as our users learn Kubernetes and become more sophisticated Kubernetes users, they put pressure on us to provide a better more native Kubernetes experience, which is great,” says Tyler. “Its a super healthy dynamic.”</p>
<p>
The platform also includes other CNCF technologies, such as Envoy, Helm, and Prometheus. Most of the critical service traffic for Booking.com is routed through Envoy, and Prometheus is used primarily to monitor infrastructure components. Helm is consumed as a packaging standard. The team also developed and open sourced Shipper, an extension for Kubernetes to add more complex rollout strategies and multi-cluster orchestration.
</p>
<p>
To be sure, there have been internal discussions about the wisdom of building a Kubernetes platform from the ground up. “This is not really our core competency—Kubernetes and travel, theyre kind of far apart, right?” says Tyler. “But weve made a couple of bets on CNCF components that have worked out really well for us. Envoy and Kubernetes, in particular, have been really beneficial to our organization. We were able to customize them, either because we could look at the source code or because they had extension points, and we were able to get value out of them very quickly without having to change any paradigms internally.”
</p>
</div>
</section>
</body>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -4,7 +4,11 @@ linkTitle: booz-allen
case_study_styles: true
cid: caseStudies
css: /css/case-studies-gradient.css
featured: false
logo: booz-allen_featured_logo.png
featured: true
weight: 2
quote: >
Kubernetes is a great solution for us. It allows us to rapidly iterate on our clients demands.
---
@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 215 127"><defs><style>.cls-1{fill:#fbfbfb;}.cls-2{fill:#918f90;}.cls-3{fill:#231f20;}.cls-4{fill:#fff;}</style></defs><title>kubernetes.io-logos</title><rect class="cls-1" x="-3.55202" y="-3.16104" width="223.25536" height="134.51136"/><g id="g10"><g id="g12"><path id="path14" class="cls-2" d="M58.27642,43.45186A13.87083,13.87083,0,1,1,44.40989,29.577,13.86679,13.86679,0,0,1,58.27642,43.45186"/><path id="path16" class="cls-2" d="M118.31862,43.45186A13.87534,13.87534,0,1,1,104.44607,29.577a13.868,13.868,0,0,1,13.87255,13.87483"/><path id="path18" class="cls-2" d="M58.27642,78.10812A13.87083,13.87083,0,1,1,44.40989,64.23586,13.86592,13.86592,0,0,1,58.27642,78.10812"/><path id="path20" class="cls-2" d="M88.30182,60.78355A13.87432,13.87432,0,1,1,74.42662,46.9099a13.876,13.876,0,0,1,13.8752,13.87365"/><path id="path22" class="cls-2" d="M88.30182,26.12046a13.87432,13.87432,0,1,1-13.8752-13.874,13.8772,13.8772,0,0,1,13.8752,13.874"/><path id="path24" class="cls-2" d="M88.30182,95.44422a13.87432,13.87432,0,1,1-13.8752-13.87233,13.88079,13.88079,0,0,1,13.8752,13.87233"/><path id="path26" class="cls-3" d="M104.405,91.88866a13.87443,13.87443,0,0,1,0-27.74885h57.96422a13.87443,13.87443,0,1,1,0,27.74885H104.405"/><path id="path28" class="cls-4" d="M108.44973,74.99434a3.07749,3.07749,0,0,0-2.90728-1.56908c-2.38678,0-3.75361,1.90181-3.75361,4.58681,0,2.60465,1.39092,4.5882,3.77637,4.5882a3.36511,3.36511,0,0,0,3.11217-1.83873l2.67963,1.44431a6.15354,6.15354,0,0,1-5.888,3.26586c-4.15781,0-6.95236-2.89435-6.95236-7.45964,0-4.40183,2.91073-7.45392,7.06838-7.45392a6.0724,6.0724,0,0,1,5.819,3.19984l-2.95428,1.23635"/><path id="path30" class="cls-4" d="M124.883,74.99434a3.07653,3.07653,0,0,0-2.91095-1.56908c-2.38369,0-3.74223,1.90181-3.74223,4.58681,0,2.60465,1.38424,4.5882,3.77234,4.5882a3.36145,3.36145,0,0,0,3.11217-1.83873l2.67889,1.44431a6.148,6.148,0,0,1-5.88579,3.26586c-4.15787,0-6.95353-2.89435-6.95353-7.45964,0-4.40183,2.90728-7.45392,7.06662-7.45392a6.08392,6.08392,0,0,1,5.82338,3.19984L124.883,74.99434"/><path id="path32" class="cls-4" d="M139.27909,78.98589h-2.91462v-5.41h2.91462a2.705,2.705,0,1,1,0,5.41Zm.78061-8.22983-6.88083.02438v14.466h3.1856v-3.448l3.69523-.02152a5.51047,5.51047,0,1,0,0-11.02093"/><path id="path34" class="cls-3" d="M178.45064,88.67875a2.45448,2.45448,0,1,0,2.45419-2.49252A2.4339,2.4339,0,0,0,178.45064,88.67875Zm5.36147,0a2.90728,2.90728,0,1,1-2.90728-2.90786,2.86847,2.86847,0,0,1,2.90728,2.90786"/><path id="path36" class="cls-3" d="M180.77632,88.4782h-.5302V87.34657h.73581c.398,0,.77694.105.77694.56112C181.75887,88.46212,181.27054,88.4782,180.77632,88.4782Zm.564.34309a.88252.88252,0,0,0,.82026-.9136c0-.5852-.32458-.90332-1.0626-.90332h-1.25647v3.26726h.40463V88.82129h.6778l.91794,1.45034h.47145l-.973-1.45034"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

@@ -1,4 +0,0 @@
---
title: CCP Games
content_url: https://cloud.google.com/customers/ccp-games/
---
@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 215 127"><defs><style>.cls-1{fill:#fbfbfb;}.cls-2{fill:#2d2a26;}.cls-3{fill:#7d77b7;}.cls-4{fill:#ce1141;}.cls-5{fill:#009ddd;}.cls-6{fill:#f47a3f;}.cls-7{fill:#62bb46;}.cls-8{fill:#febe10;}</style></defs><title>kubernetes.io-logos</title><rect class="cls-1" x="-3.55202" y="-3.16104" width="223.25536" height="134.51136"/><path class="cls-2" d="M55.45758,63.38456a13.5171,13.5171,0,1,0,13.51376,13.515A13.52915,13.52915,0,0,0,55.45758,63.38456Zm0,24.37138a10.85428,10.85428,0,1,1,10.857-10.85638A10.87113,10.87113,0,0,1,55.45758,87.75594Z"/><path class="cls-2" d="M171.99062,77.07207c-.72693-.38066-5.1347-2.65285-5.77024-2.98164-2.31351-1.17937-3.134-2.227-3.134-3.99876,0-2.45829,2.01913-4.04731,5.151-4.04731a10.02931,10.02931,0,0,1,4.65811,1.395,1.35062,1.35062,0,0,0,.64672.16139,1.32785,1.32785,0,0,0,.66238-2.47883,12.80669,12.80669,0,0,0-5.96721-1.73741c-4.599,0-7.81231,2.75934-7.81231,6.70711,0,3.54721,2.33072,5.22038,4.61289,6.3856.63763.32484,5.09881,2.62542,5.76844,2.97772a4.46184,4.46184,0,0,1,2.73581,3.89862c0,2.13465-1.8074,4.40384-5.15493,4.40384a10.0211,10.0211,0,0,1-6.48209-2.855l-.20571-.19969-1.96907,1.79233.23225.22922a12.61506,12.61506,0,0,0,8.42462,3.69442c4.88887,0,7.81111-3.59336,7.81111-7.06515A7.12542,7.12542,0,0,0,171.99062,77.07207Z"/><path class="cls-2" d="M27.74831,66.04738a10.7845,10.7845,0,0,1,7.67687,3.1762,1.39844,1.39844,0,0,0,1.88011,0,1.32506,1.32506,0,0,0,0-1.87767l-.16108-.16741a13.5269,13.5269,0,1,0,.55047,18.86116L35.8143,84.15594a10.85243,10.85243,0,1,1-8.066-18.10856Z"/><path class="cls-2" d="M119.36676,66.04738a10.78435,10.78435,0,0,1,7.67566,3.1762,1.40036,1.40036,0,0,0,1.88159,0,1.32136,1.32136,0,0,0,0-1.87767l-.16227-.16741a13.52616,13.52616,0,1,0,.552,18.86116l-1.88218-1.88372a10.85235,10.85235,0,1,1-8.06478-18.10856Z"/><path class="cls-2" d="M96.4737,63.38456a1.26776,1.26776,0,0,0-1.1082.73839c-.2181.41476-7.95227,19.54645-7.95258,19.54645,0,0-7.73479-19.13169-7.95316-19.54645a1.267,1.267,0,0,0-1.10789-.73839,1.25029,1.25029,0,0,0-1.1761.96915c-.15382.54294-4.51785,24.62385-4.51785,24.62385a1.26706,1.26706,0,0,0-.02353.24129,1.19944,1.19944,0,0,0,2.37686.22925l3.77888-20.6S86.08181,86.86249,86.296,87.29143a1.2006,1.2006,0,0,0,2.23327,0c.21417-.42894,7.50585-18.44338,7.50585-18.44338l3.92849,21.42051h2.4375s-4.5972-25.37191-4.751-25.91485A1.25082,1.25082,0,0,0,96.4737,63.38456Z"/><path class="cls-2" d="M144.52511,63.38456a1.27135,1.27135,0,0,0-1.11605.758c-.21837.42832-10.00942,24.60937-10.00942,24.60937a1.21412,1.21412,0,0,0-.09229.46692,1.198,1.198,0,0,0,2.31352.43888l3.8024-9.34973h10.20729l4.05395,9.96056h2.58922s-10.419-25.69768-10.63319-26.126A1.26312,1.26312,0,0,0,144.52511,63.38456Zm-4.01776,14.26213,4.01776-9.883,4.02257,9.883Z"/><path class="cls-2" d="M197.13782,64.85835a1.33185,1.33185,0,0,0-1.332-1.32961H180.75732a1.3287,1.3287,0,0,0,0,2.65739h6.30894V90.26856h2.4354V66.18613h6.30415A1.33186,1.33186,0,0,0,197.13782,64.85835Z"/><path class="cls-3" d="M116.06206,29.12533a5.73633,5.73633,0,0,1-.49861,5.11963L109.174,48.61779l-.054.06514-2.31053-14.57869c-.18427-1.39926,1.31271-1.99622,2.19139-2.66854-.04373-.20633-.27146-.19518-.41265-.2929l-2.15819-.022-.06514-.06487a4.94419,4.94419,0,0,1,2.636-4.36057,5.12476,5.12476,0,0,1,5.65138.553A5.32954,5.32954,0,0,1,116.06206,29.12533Z"/><path class="cls-4" d="M104.29294,28.62613a5.1566,5.1566,0,0,1,.64,3.27588l-2.60339,16.69376c.01056.022-.01085.04389-.03228.05461l-.67294-1.345L95.09431,32.72685a5.06253,5.06253,0,0,1,6.76866-6.20491A5.4244,5.4244,0,0,1,104.29294,28.62613Z"/><path class="cls-5" d="M125.50952,35.65509a5.12575,5.12575,0,0,1-.29287,5.15267,8.54241,8.54241,0,0,1-2.45109,2.10463l-13.52643,9.285h-.03259l.152-.44478,7.16983-16.18412a5.1622,5.1622,0,0,1,5.29364-2.58183A5.22333,5.22333,0,0,1,125.50952,35.65509Z"/><path class="cls-6" d="M94.78,35.56854l7.4627,16.6289h-.11916L87.07826,41.827a4.96079,4.96079,0,0,1-1.63774-5.17408A5.07442,5.07442,0,0,1,94.78,35.56854Z"/><path class="cls-7" d="M129.4368,47.39209a5.12788,5.12788,0,0,1-.61867,5.09822,5.06429,5.06429,0,0,1-4.1544,1.95233l-16.043.01087,13.43957-9.35035a5.19275,5.19275,0,0,1,4.74048-.31474A5.26886,5.26886,0,0,1,129.4368,47.39209Z"/><path class="cls-8" d="M81.93661,47.39209a5.12816,5.12816,0,0,0,.61821,5.09822,5.06593,5.06593,0,0,0,4.15483,1.95233l16.04316.01087L89.31305,45.10316a5.19268,5.19268,0,0,0-4.74046-.31474A5.2689,5.2689,0,0,0,81.93661,47.39209Z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

@@ -1,4 +0,0 @@
---
title: Comcast
content_url: https://youtu.be/lmeFkH-rHII
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 215 127"><defs><style>.cls-1{fill:#fbfbfb;}.cls-2{fill:#0075c9;}</style></defs><title>kubernetes.io-logos</title><rect class="cls-1" x="-4.03751" y="-4.582" width="223.25536" height="134.51136"/><path class="cls-2" d="M60.85857,43.59905a2.41437,2.41437,0,0,0-2.38123-2.38123H19.43513a2.41437,2.41437,0,0,0-2.38123,2.38123V81.74831a2.41436,2.41436,0,0,0,2.38123,2.38122H58.47734a2.41436,2.41436,0,0,0,2.38123-2.38122ZM37.98886,70.884a11.98933,11.98933,0,0,0,3.72067-.74414.33416.33416,0,0,1,.39687.14882,14.28731,14.28731,0,0,0,2.87732,3.86949c.14883.24805-.14883.39687-.14883.39687a14.109,14.109,0,0,1-6.846,1.63709A13.89042,13.89042,0,0,1,23.7511,62.59926,13.42058,13.42058,0,0,1,37.74081,48.9072,15.13234,15.13234,0,0,1,45.82707,51.338c.5457.34726.5457.49609.39687.69452a29.88443,29.88443,0,0,0-2.282,3.72067.30167.30167,0,0,1-.49609.09922,10.304,10.304,0,0,0-6.00268-1.6867,7.97435,7.97435,0,0,0-7.987,8.3343A8.46744,8.46744,0,0,0,37.98886,70.884Zm12.15418.39686a3.86949,3.86949,0,1,1,3.8695-3.86949A3.87447,3.87447,0,0,1,50.143,71.28082Z"/><path class="cls-2" d="M68.64717,62.54966c0-5.95307,4.51441-10.021,10.269-10.021a8.91,8.91,0,0,1,8.08626,4.71285l-3.52224,1.73631a5.26387,5.26387,0,0,0-4.564-2.82771,5.99857,5.99857,0,0,0-6.05228,6.34994A5.99858,5.99858,0,0,0,78.91621,68.85a5.29072,5.29072,0,0,0,4.564-2.82772l3.52224,1.6867a8.9438,8.9438,0,0,1-8.08626,4.76246c-5.80424.04962-10.269-3.96871-10.269-9.92177"/><path class="cls-2" d="M88.73878,62.54966a10.09619,10.09619,0,1,1,10.07061,9.97139,9.73545,9.73545,0,0,1-10.07061-9.97139m15.97407,0c0-3.62145-2.33162-6.34994-5.90346-6.34994s-5.85385,2.72849-5.85385,6.34994c0,3.57184,2.282,6.34994,5.85385,6.34994s5.90346-2.7781,5.90346-6.34994"/><polygon class="cls-2" points="125.747 72.174 116.52 59.573 116.52 72.174 112.402 72.174 112.402 52.876 116.669 52.876 125.598 64.98 125.598 52.876 129.716 52.876 129.716 72.174 125.747 72.174"/><path class="cls-2" d="M133.18837,62.54966c0-5.95307,4.4648-10.021,10.26905-10.021a8.85137,8.85137,0,0,1,8.08625,4.71285l-3.52224,1.73631a5.26385,5.26385,0,0,0-4.564-2.82771,6.02732,6.02732,0,0,0-6.0523,6.34994,5.99858,5.99858,0,0,0,6.0523,6.34994,5.29073,5.29073,0,0,0,4.564-2.82772l3.52224,1.6867a8.94378,8.94378,0,0,1-8.08625,4.76246c-5.80425.04962-10.26905-3.96871-10.26905-9.92177"/><path class="cls-2" d="M154.22255,64.4844V52.87592h4.16714V64.33558a4.197,4.197,0,0,0,4.564,4.564c2.97654,0,4.51441-1.83554,4.51441-4.564V52.87592h4.21676V64.4844c0,4.81207-2.82771,8.08626-8.73117,8.08626s-8.73117-3.32381-8.73117-8.08626"/><path class="cls-2" d="M186.66678,72.17379l-3.8199-6.846h-3.02614v6.846H175.7032V52.82632H184.732c4.01833,0,6.49877,2.62927,6.49877,6.25072a5.55983,5.55983,0,0,1-4.21676,5.75464l4.36558,7.34211Zm.39688-13.09676a2.62258,2.62258,0,0,0-2.87731-2.62927h-4.316V61.6567h4.316a2.55935,2.55935,0,0,0,2.87731-2.57967"/><path class="cls-2" d="M198.12644,70.13982a2.45577,2.45577,0,0,1-4.91128,0,2.405,2.405,0,0,1,2.48044-2.38122A2.36249,2.36249,0,0,1,198.12644,70.13982Zm-4.316,0a1.86535,1.86535,0,0,0,1.88513,1.93475,1.9101,1.9101,0,1,0-1.88513-1.93475Zm1.48826,1.24023h-.5457V68.99882a4.18583,4.18583,0,0,1,.94257-.09922,1.60369,1.60369,0,0,1,.84336.19843.64015.64015,0,0,1,.248.5457.62217.62217,0,0,1-.49609.54571v.04961c.24805.09922.34727.248.44648.59531s.09922.49609.19843.59531h-.59531c-.09922-.09922-.09922-.29765-.19843-.59531a.45069.45069,0,0,0-.49609-.39686h-.24805l-.09921.94255Zm0-1.33945h.24805c.29766,0,.5457-.09922.5457-.34727,0-.19843-.14882-.34727-.49609-.34727-.14882,0-.248,0-.29766.04961v.64493Z"/></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

@@ -1,4 +0,0 @@
---
title: Concur
content_url: http://searchitoperations.techtarget.com/news/450297178/Tech-firms-roll-out-Kubernetes-in-production
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 215 127"><defs><style>.cls-1{fill:#fbfbfb;}.cls-2{fill:#e53238;}.cls-3{fill:#0064d2;}.cls-4{fill:#f5af02;}.cls-5{fill:#86b817;}</style></defs><title>kubernetes.io-logos</title><rect class="cls-1" x="-3.55202" y="-3.16104" width="223.25536" height="134.51136"/><path id="e" class="cls-2" d="M44.41375,44.77747c-12.0763,0-22.13948,5.12337-22.13948,20.58035,0,12.24533,6.76676,19.95671,22.4513,19.95671,18.46144,0,19.64488-12.16112,19.64488-12.16112H55.425S53.507,79.7017,44.17988,79.7017c-7.59672,0-13.06058-5.1318-13.06058-12.32478H65.30592V62.86323c0-7.11611-4.51743-18.08577-20.89217-18.08577Zm-.31183,5.76874c7.23129,0,12.16112,4.43,12.16112,11.06973H31.31716C31.31716,54.56709,37.75185,50.54621,44.10192,50.54621Z"/><path id="b" class="cls-3" d="M65.29958,29.80994V77.5521c0,2.71-.19342,6.51514-.19342,6.51514h8.53207s.30624-2.73291.30624-5.23052c0,0,4.21539,6.59475,15.67735,6.59475,12.06991,0,20.26852-8.37974,20.26852-20.38547,0-11.16875-7.5307-20.15159-20.249-20.15159-11.90983,0-15.61067,6.43136-15.61067,6.43136V29.80994ZM87.43905,50.79956c8.1964,0,13.40842,6.08315,13.40842,14.24644,0,8.75365-6.0197,14.48031-13.35,14.48031-8.748,0-13.46688-6.83041-13.46688-14.40235C74.03064,58.06838,78.265,50.79956,87.43905,50.79956Z"/><path id="a" class="cls-4" d="M131.09435,44.77747c-18.16788,0-19.33306,9.94784-19.33306,11.53747h9.04288s.47421-5.80771,9.66654-5.80771c5.97332,0,10.602,2.73408,10.602,7.99048v1.87094h-10.602c-14.07492,0-21.51583,4.11747-21.51583,12.47294,0,8.223,6.87517,12.69707,16.16611,12.69707,12.6621,0,16.741-6.99654,16.741-6.99654,0,2.78284.21455,5.52512.21455,5.52512h8.039s-.31183-3.39915-.31183-5.57384V59.69628c0-12.325-9.94141-14.91881-18.70941-14.91881Zm9.97836,21.204v2.49459c0,3.25362-2.00772,11.34258-13.82743,11.34258-6.47244,0-9.24752-3.23023-9.24752-6.97705,0-6.81622,9.34533-6.86012,23.07494-6.86012Z"/><path id="y" class="cls-5" d="M144.93431,46.33816h10.17324l14.6,29.25016,14.56661-29.25016h9.2155L166.95684,98.41267H157.2903l7.65638-14.51648Z"/></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

-4
View File
@@ -1,4 +0,0 @@
---
title: Ebay
content_url: http://www.nextplatform.com/2015/11/12/inside-ebays-shift-to-kubernetes-and-containers-atop-openstack/
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

@@ -1,4 +0,0 @@
---
title: Goldman Sachs
content_url: http://blogs.wsj.com/cio/2016/02/24/big-changes-in-goldmans-software-emerge-from-small-containers/
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

@@ -1,4 +0,0 @@
---
title: Home Office UK
content_url: https://www.youtube.com/watch?v=F3iMkz_NSvU
---
-4
View File
@@ -1,4 +0,0 @@
---
title: JD.COM
content_url: https://kubernetes.io/blog/2017/02/inside-jd-com-shift-to-kubernetes-from-openstack
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

@@ -1,4 +0,0 @@
---
title: LivePerson
content_url: https://www.openstack.org/videos/video/running-kubernetes-on-openstack-at-liveperson
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

-4
View File
@@ -1,4 +0,0 @@
---
title: Monzo
content_url: https://youtu.be/YkOY7DgXKyw
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

+1 -5
View File
@@ -5,11 +5,7 @@ linkTitle: Nav
case_study_styles: true
cid: caseStudies
css: /css/style_case_studies.css
logo: nav_featured_logo.png
featured: true
weight: 3
quote: >
The community is absolutely vital: being able to pass ideas around, talk about a lot of the similar challenges that were all facing, and just get help. I like that were able to tackle the same problems for different reasons but help each other along the way.
featured: false
---
<div class="banner1" style="background-image: url('/images/CaseStudy_nav_banner1.jpg')">
@@ -1,4 +0,0 @@
---
title: Philips
content_url: https://cloud.google.com/customers/philips/
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 215 127"><defs><style>.cls-1{fill:#fbfbfb;}.cls-2{fill:#0b5ed7;}</style></defs><title>kubernetes.io-logos2</title><rect class="cls-1" x="-3.35417" y="-4.36563" width="223.25536" height="134.51136"/><g id="layer1"><g id="g2851"><g id="g2853"><path id="path2859" class="cls-2" d="M78.15934,46.64334H68.28353V59.503H58.00314V46.64334H48.12733V78.99717h9.87581V66.27081H68.28353V78.99717h9.87581Zm34.35383,25.85272V46.64334h-9.87581V78.99717h17.85736l1.48506-6.50112h-9.46661ZM95.33626,46.64334H85.46045V78.99717h9.87581Zm40.03656,0h-9.87121V78.99717h9.87121Zm48.68938,8.25741c0-1.7609,1.76092-2.5747,4.59767-2.5747a24.7387,24.7387,0,0,1,8.79536,1.63217l-.8092-7.04364a38.62324,38.62324,0,0,0-9.062-.94712c-7.98156,0-13.393,3.14941-13.393,9.74708,0,11.37005,15.42519,9.07121,15.42519,14.34934,0,2.02757-1.49424,3.108-5.1448,3.108a29.53736,29.53736,0,0,1-11.22751-2.5701l1.085,7.44824a32.59635,32.59635,0,0,0,10.2804,1.623c8.24823,0,15.01141-2.708,15.01141-10.83212,0-10.82293-15.55854-8.79536-15.55854-13.94016M156.20485,71.28227c9.19075,0,15.01142-4.7402,15.01142-12.99762,0-9.06661-6.22067-12.31717-16.36771-12.31717a111.49549,111.49549,0,0,0-12.03671.67586V78.99717h9.8758v-7.7149h3.5172Zm5.27352-12.8597c0,4.19308-2.02756,7.039-7.17236,7.039h-1.61839v-13.37c.57471-.03219,1.11263-.03219,1.61839-.03219,4.869,0,7.17236,2.29884,7.17236,6.36318M29.19408,71.28227c9.19535,0,15.01141-4.7402,15.01141-12.99762,0-9.06661-6.22066-12.31717-16.36313-12.31717a111.58362,111.58362,0,0,0-12.04131.67586V78.99717h9.87581v-7.7149Zm5.27814-12.8597c0,4.19308-2.03218,7.039-7.17238,7.039h-1.623v-13.37c.57471-.03219,1.11724-.03219,1.623-.03219,4.86894,0,7.17238,2.29884,7.17238,6.36318"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,4 +0,0 @@
---
title: Pokemon GO
content_url: https://cloudplatform.googleblog.com/2016/09/bringing-Pokemon-GO-to-life-on-Google-Cloud.html
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

@@ -1,4 +0,0 @@
---
title: Samsung SDS
content_url: http://www.nextplatform.com/2016/05/24/samsung-experts-put-kubernetes-paces/
---
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="-6.20 0.80 1570.40 240.40"><title>Samsung SDS (member) logo</title><path fill="#034ea2" d="M76.753 211.407c-45.155 0-53.607-26.556-51.683-56.738h36.468c0 16.662.723 30.664 20.765 30.664 12.313 0 18.359-7.974 18.359-19.805 0-31.379-73.413-33.316-73.413-85.231 0-27.289 13.041-49.022 57.47-49.022 35.502 0 53.125 15.938 50.705 52.405H99.925c0-13.045-2.161-26.323-16.903-26.323-11.823 0-18.832 6.51-18.832 18.591 0 33.075 73.412 30.19 73.412 84.998 0 45.156-33.078 50.46-60.849 50.46zm72.427-2.893l48.31-174.338h48.045l47.334 174.338h-38.392l-9.661-38.638h-49.741l-9.902 38.638zm70.277-140.78h-.481l-16.654 75.345h34.763zm88.624 140.78V34.176h58.675l27.276 118.556h.49l28.976-118.556h56.75v174.338h-35.503V74.019h-.481l-33.562 134.495h-34.775L344.05 74.019h-.482v134.495zm247.979 2.893c-45.156 0-53.608-26.556-51.666-56.738h36.459c0 16.662.723 30.664 20.764 30.664 12.314 0 18.35-7.974 18.35-19.805 0-31.379-73.403-33.316-73.403-85.231 0-27.289 13.036-49.022 57.46-49.022 35.503 0 53.125 15.938 50.718 52.405H579.25c0-13.045-2.17-26.323-16.908-26.323-11.831 0-18.833 6.51-18.833 18.591 0 33.075 73.404 30.19 73.404 84.998 0 45.156-33.078 50.46-60.853 50.46zM759.617 34.176v123.628c0 26.082-14.724 53.603-59.165 53.603-40.072 0-59.395-20.761-59.395-53.603V34.176h36.46v121.217c0 21.493 9.179 29.94 22.465 29.94 15.926 0 23.173-10.617 23.173-29.94V34.176zm28.739 174.338V34.176h49.254l46.37 120.734h.483V34.176h34.04v174.338h-48.059L822.877 81.02h-.486v127.494zM1027.654 87.78c.232-16.18-2.428-30.423-21.734-30.423-22.707 0-22.707 30.663-22.707 64.479 0 54.559 5.321 64.22 26.082 64.22a57.325 57.325 0 0 0 18.109-3.375v-38.646h-19.797v-26.798h56.256v88.383c-9.894 1.92-34.77 5.787-49.263 5.787-61.336 0-68.328-25.351-68.328-91.509 0-43.95 2.17-88.623 61.818-88.623 35.744 0 57.943 20.046 55.773 56.505zm166.355 123.627c-45.156 0-53.603-26.556-51.675-56.738h36.476c0 16.662.715 30.664 20.76 30.664 12.315 0 18.351-7.974 18.351-19.805 0-31.379-73.408-33.316-73.408-85.231 0-27.289 13.045-49.022 57.47-49.022 35.502 0 53.12 15.938 50.71 52.405h-35.504c0-13.045-2.179-26.323-16.894-26.323-11.832 0-18.84 6.51-18.84 18.591 0 33.075 73.407 30.19 73.407 84.998 0 45.156-33.074 50.46-60.853 50.46zm86.445-177.231h60.853c47.817 0 56.746 31.869 56.746 86.205 0 26.796 4.098 88.133-58.193 88.133h-59.406zm36.475 147.531h17.619c22.216 0 26.565-16.662 26.565-60.37 0-32.11 0-60.355-25.36-60.355h-18.824zm156.453 29.7c-45.14 0-53.587-26.556-51.666-56.738h36.459c0 16.662.732 30.664 20.769 30.664 12.314 0 18.341-7.974 18.341-19.805 0-31.379-73.39-33.316-73.39-85.231 0-27.289 13.037-49.022 57.469-49.022 35.486 0 53.121 15.938 50.7 52.405h-35.493c0-13.045-2.17-26.323-16.903-26.323-11.824 0-18.833 6.51-18.833 18.591 0 33.075 73.4 30.19 73.4 84.998 0 45.156-33.083 50.46-60.853 50.46z" data-name="Layer 2"/></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

-4
View File
@@ -1,4 +0,0 @@
---
title: SAP
content_url: https://youtu.be/4gyeixJLabo
---
@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 215 127"><defs><style>.cls-1{fill:#fbfbfb;}.cls-2,.cls-3{fill-rule:evenodd;}.cls-2{fill:url(#linear-gradient);}.cls-3{fill:#fff;}.cls-4{fill:#0072bc;}</style><linearGradient id="linear-gradient" x1="113.16584" y1="109.70976" x2="113.16584" y2="24.03158" gradientTransform="matrix(1, 0, 0, -1, 0, 130.69843)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#00b9f2"/><stop offset="0.205" stop-color="#00a3e1"/><stop offset="0.515" stop-color="#0088cd"/><stop offset="0.79" stop-color="#0078c0"/><stop offset="1" stop-color="#0072bc"/></linearGradient></defs><title>kubernetes.io-logos2</title><rect class="cls-1" x="-3.35417" y="-4.36563" width="223.25536" height="134.51136"/><path class="cls-2" d="M26.56814,106.66686H114.0994l85.66414-85.67819H26.56814v85.67819"/><path class="cls-3" d="M129.351,37.09889l-17.04846-.0103V77.62492L97.40957,37.08859h-14.767L69.92668,70.9884c-1.354-8.54717-10.19611-11.49954-17.15286-13.71218-4.59336-1.47478-9.46669-3.64434-9.42221-6.04238.03839-1.96872,2.61434-3.797,7.71848-3.52169,3.43179.18166,6.45626.45883,12.478,3.3625l5.92253-10.3141a46.10121,46.10121,0,0,0-19.3126-4.57041h-.03652c-7.25639,0-13.30392,2.35075-17.05221,6.22592a14.38121,14.38121,0,0,0-4.07929,9.9447,13.345,13.345,0,0,0,5.85371,11.90171,39.8171,39.8171,0,0,0,11.59318,5.30265c4.73334,1.46682,8.59586,2.74122,8.55139,5.4609a4.01425,4.01425,0,0,1-1.12178,2.66163c-1.17935,1.21681-2.99169,1.67423-5.49554,1.72058-4.82885.10253-8.41093-.65452-14.11576-4.02545L28.99005,85.842a39.37711,39.37711,0,0,0,19.29949,5.13317l.88487-.0103A23.27906,23.27906,0,0,0,63.844,86.04615c.22145-.17464.4209-.35489.625-.53654l-1.71075,4.56714H78.24585l2.59936-7.90529a28.27221,28.27221,0,0,0,9.10384,1.44388,28.668,28.668,0,0,0,8.88519-1.3657l2.50526,7.82711h25.25666V73.71043h5.50773c13.31609,0,21.19095-6.78211,21.19095-18.14448,0-12.6583-7.65153-18.46706-23.94388-18.46706ZM89.94858,71.78479a15.53362,15.53362,0,0,1-5.46231-.9551L89.88959,53.7803h.10253l5.31014,17.09715a16.07371,16.07371,0,0,1-5.35322.90687Zm40.4029-9.79582h-3.75484V48.251h3.75484c5.00957,0,9.00318,1.66393,9.00318,6.77837,0,5.29282-3.99361,6.96-9.00318,6.96"/><path class="cls-4" d="M134.86056,101.02945a4.4946,4.4946,0,1,1-.00225.16481q-.00037-.08243.00225-.16481Zm4.5133,5.55922a5.537,5.537,0,1,0-.11885.00077Q139.31444,106.5897,139.37386,106.58867Zm-1.17374-5.11913h1.11475l1.67609,2.76462h1.09415l-1.83013-2.81144A1.66065,1.66065,0,0,0,141.92453,99.66c0-1.25192-.75-1.8128-2.25478-1.8128h-2.43456v6.387h.96493Zm0-.82448v-1.979h1.31935c.66857,0,1.383.14185,1.383.93636,0,.994-.7285,1.04265-1.53892,1.04265Z"/></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

@@ -1,4 +0,0 @@
---
title: Soundcloud
content_url: https://www.youtube.com/watch?v=5378N5iLb2Q
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

+1 -5
View File
@@ -4,11 +4,7 @@ linkTitle: Spotify
case_study_styles: true
cid: caseStudies
css: /css/style_case_studies.css
logo: spotify_featured_logo.png
featured: true
weight: 2
quote: >
We saw the amazing community thats grown up around Kubernetes, and we wanted to be part of that. We wanted to benefit from added velocity and reduced cost, and also align with the rest of the industry on best practices and tools.
featured: false
---
<div class="banner1" style="background-image: url('/images/CaseStudy_spotify_banner1.jpg')">
-4
View File
@@ -1,4 +0,0 @@
---
title: WePay
content_url: http://thenewstack.io/wepay-kubernetes-changed-business/
---
@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 215 127"><defs><style>.cls-1{fill:none;}.cls-2{fill:#fbfbfb;}.cls-3{clip-path:url(#clip-path);}.cls-4{fill:#5791cd;}.cls-5{fill:#33a736;}.cls-6{fill:#a1aaad;}</style><clipPath id="clip-path"><rect class="cls-1" x="15.7031" y="42.28302" width="183.59379" height="43.44872"/></clipPath></defs><title>kubernetes.io-logos2</title><rect class="cls-2" x="-3.35417" y="-4.36563" width="223.25536" height="134.51136"/><g class="cls-3"><path class="cls-4" d="M33.07482,73.41877a1.64932,1.64932,0,0,1-.702-.11747l-14.3133-5.77157a3.76332,3.76332,0,0,1,.01212-6.98565l14.33379-5.71972a1.646,1.646,0,1,1,1.22037,3.05739L19.29205,63.60148a.472.472,0,0,0-.00167.87629l14.3133,5.7703a1.64632,1.64632,0,0,1-.52886,3.1707"/><path class="cls-5" d="M50.07448,63.2673a1.64887,1.64887,0,0,1-1.69823-1.90936l2.48422-15.23266a.47139.47139,0,0,0-.74878-.45236L37.78843,54.96637a1.6459,1.6459,0,0,1-1.98169-2.62846L48.12916,43.0453A3.763,3.763,0,0,1,54.10892,46.655L51.62471,61.88765a1.64753,1.64753,0,0,1-1.55023,1.37965"/><path class="cls-6" d="M50.58161,85.64955a3.7564,3.7564,0,0,1-2.41858-.75086l-12.3521-9.25332a1.64572,1.64572,0,0,1,1.97332-2.6343l12.35252,9.25331a.47145.47145,0,0,0,.74753-.45487L48.35116,66.58563a1.64592,1.64592,0,1,1,3.24722-.54015l2.53313,15.22388a3.77057,3.77057,0,0,1-3.5499,4.38019"/></g><polygon class="cls-4" points="89.507 78.162 87.134 78.162 82.224 62.9 82.142 62.9 77.231 78.162 74.899 78.162 66.43 55.494 70.97 55.494 76.004 70.224 76.086 70.224 80.791 55.494 83.574 55.494 88.279 70.224 88.361 70.224 93.353 55.494 97.895 55.494 89.507 78.162"/><g class="cls-3"><path class="cls-4" d="M102.44593,68.669a7.68938,7.68938,0,0,0,7.44722,6.17877,7.247,7.247,0,0,0,6.46473-3.80576h4.25562A11.55321,11.55321,0,0,1,109.72927,78.735,11.82749,11.82749,0,0,1,98.19074,66.78719a11.58182,11.58182,0,1,1,23.159-.28639c0,.73624-.08194,1.88177-.1225,2.16815Zm14.64861-3.27355a7.36081,7.36081,0,0,0-14.64861,0Z"/><path class="cls-5" d="M124.58243,55.49328h3.88729v3.47883h.08153a9.57913,9.57913,0,0,1,8.061-4.09256c7.6922,0,11.743,6.17877,11.743,12.2342a11.42958,11.42958,0,0,1-11.457,11.62089c-4.746,0-7.11945-2.4144-7.9786-3.84632h-.08194V85.73159H124.582V55.49328Zm11.74339,3.27355a8.04764,8.04764,0,1,0,7.77457,8.10193,7.99423,7.99423,0,0,0-7.77457-8.10193"/><path class="cls-5" d="M170.24583,78.16271v-3.519h-.08193a8.67529,8.67529,0,0,1-7.69221,4.09131,11.63792,11.63792,0,0,1-12.0302-11.82491c0-5.52406,3.88729-12.03019,12.0302-12.03019a8.983,8.983,0,0,1,7.69221,3.80535h.08193v-3.1916h4.2552V78.16313h-4.2552Zm-7.77414-19.39588c-5.23726,0-7.775,4.54158-7.775,8.10193a7.81723,7.81723,0,1,0,15.63109,0,7.74352,7.74352,0,0,0-7.85609-8.10193"/></g><polygon class="cls-5" points="194.714 55.493 187.881 73.088 181.212 55.493 176.629 55.493 185.672 77.711 182.358 85.732 186.777 85.732 199.297 55.494 199.297 55.493 194.714 55.493"/></svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

@@ -1,4 +0,0 @@
---
title: Zulily
content_url: https://www.youtube.com/embed/of45hYbkIZs
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

+172 -147
View File
@@ -9,32 +9,132 @@ weight: 10
{{% capture overview %}}
A node is a worker machine in Kubernetes, previously known as a `minion`. A node
may be a VM or physical machine, depending on the cluster. Each node contains
the services necessary to run [pods](/docs/concepts/workloads/pods/pod/) and is managed by the master
components. The services on a node include the [container runtime](/docs/concepts/overview/components/#container-runtime), kubelet and kube-proxy. See
[The Kubernetes Node](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md#the-kubernetes-node) section in the
architecture design doc for more details.
Kubernetes runs your workload by placing containers into Pods to run on _Nodes_.
A node may be a virtual or physical machine, depending on the cluster. Each node
contains the services necessary to run
{{< glossary_tooltip text="Pods" term_id="pod" >}}, managed by the
{{< glossary_tooltip text="control plane" term_id="control-plane" >}}.
Typically you have several nodes in a cluster; in a learning or resource-limited
environment, you might have just one.
The [components](/docs/concepts/overview/components/#node-components) on a node include the
{{< glossary_tooltip text="kubelet" term_id="kubelet" >}}, a
{{< glossary_tooltip text="container runtime" term_id="container-runtime" >}}, and the
{{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}}.
{{% /capture %}}
{{% capture body %}}
## Node Status
## Management
A node's status contains the following information:
There are two main ways to have Nodes added to the {{< glossary_tooltip text="API server" term_id="kube-apiserver" >}}:
1. The kubelet on a node self-registers to the control plane
2. You, or another human user, manually add a Node object
After you create a Node object, or the kubelet on a node self-registers, the
control plane checks whether the new Node object is valid. For example, if you
try to create a Node from the following JSON manifest:
```json
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "10.240.79.157",
"labels": {
"name": "my-first-k8s-node"
}
}
}
```
Kubernetes creates a Node object internally (the representation). Kubernetes checks
that a kubelet has registered to the API server that matches the `metadata.name`
field of the Node. If the node is healthy (if all necessary services are running),
it is eligible to run a Pod. Otherwise, that node is ignored for any cluster activity
until it becomes healthy.
{{< note >}}
Kubernetes keeps the object for the invalid Node and continues checking to see whether
it becomes healthy.
You, or a {{< glossary_tooltip term_id="controller" text="controller">}}, must explicitly
delete the Node object to stop that health checking.
{{< /note >}}
The name of a Node object must be a valid
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
### Self-registration of Nodes
When the kubelet flag `--register-node` is true (the default), the kubelet will attempt to
register itself with the API server. This is the preferred pattern, used by most distros.
For self-registration, the kubelet is started with the following options:
- `--kubeconfig` - Path to credentials to authenticate itself to the API server.
- `--cloud-provider` - How to talk to a {{< glossary_tooltip text="cloud provider" term_id="cloud-provider" >}} to read metadata about itself.
- `--register-node` - Automatically register with the API server.
- `--register-with-taints` - Register the node with the given list of {{< glossary_tooltip text="taints" term_id="taint" >}} (comma separated `<key>=<value>:<effect>`).
No-op if `register-node` is false.
- `--node-ip` - IP address of the node.
- `--node-labels` - {{< glossary_tooltip text="Labels" term_id="label" >}} to add when registering the node in the cluster (see label restrictions enforced by the [NodeRestriction admission plugin](/docs/reference/access-authn-authz/admission-controllers/#noderestriction)).
- `--node-status-update-frequency` - Specifies how often kubelet posts node status to master.
When the [Node authorization mode](/docs/reference/access-authn-authz/node/) and
[NodeRestriction admission plugin](/docs/reference/access-authn-authz/admission-controllers/#noderestriction) are enabled,
kubelets are only authorized to create/modify their own Node resource.
### Manual Node administration
You can create and modify Node objects using
{{< glossary_tooltip text="kubectl" term_id="kubectl" >}}.
When you want to create Node objects manually, set the kubelet flag `--register-node=false`.
You can modify Node objects regardless of the setting of `--register-node`.
For example, you can set labels on an existing Node, or mark it unschedulable.
You can use labels on Nodes in conjunction with node selectors on Pods to control
scheduling. For example, you can to constrain a Pod to only be eligible to run on
a subset of the available nodes.
Marking a node as unschedulable prevents the scheduler from placing new pods onto
that Node, but does not affect existing Pods on the Node. This is useful as a
preparatory step before a node reboot or other maintenance.
To mark a Node unschedulable, run:
```shell
kubectl cordon $NODENAME
```
{{< note >}}
Pods that are part of a {{< glossary_tooltip term_id="daemonset" >}} tolerate
being run on an unschedulable Node. DaemonSets typically provide node-local services
that should run on the Node even if it is being drained of workload applications.
{{< /note >}}
## Node status
A Node's status contains the following information:
* [Addresses](#addresses)
* [Conditions](#condition)
* [Capacity and Allocatable](#capacity)
* [Info](#info)
Node status and other details about a node can be displayed using the following command:
You can use `kubectl` to view a Node's status and other details:
```shell
kubectl describe node <insert-node-name-here>
```
Each section is described in detail below.
Each section of the output is described below.
### Addresses
@@ -49,15 +149,23 @@ The usage of these fields varies depending on your cloud provider or bare metal
The `conditions` field describes the status of all `Running` nodes. Examples of conditions include:
| Node Condition | Description |
|----------------|-------------|
| `Ready` | `True` if the node is healthy and ready to accept pods, `False` if the node is not healthy and is not accepting pods, and `Unknown` if the node controller has not heard from the node in the last `node-monitor-grace-period` (default is 40 seconds) |
| `MemoryPressure` | `True` if pressure exists on the node memory -- that is, if the node memory is low; otherwise `False` |
| `PIDPressure` | `True` if pressure exists on the processes -- that is, if there are too many processes on the node; otherwise `False` |
| `DiskPressure` | `True` if pressure exists on the disk size -- that is, if the disk capacity is low; otherwise `False` |
| `NetworkUnavailable` | `True` if the network for the node is not correctly configured, otherwise `False` |
{{< table caption = "Node conditions, and a description of when each condition applies." >}}
| Node Condition | Description |
|----------------------|-------------|
| `Ready` | `True` if the node is healthy and ready to accept pods, `False` if the node is not healthy and is not accepting pods, and `Unknown` if the node controller has not heard from the node in the last `node-monitor-grace-period` (default is 40 seconds) |
| `DiskPressure` | `True` if pressure exists on the disk size--that is, if the disk capacity is low; otherwise `False` |
| `MemoryPressure` | `True` if pressure exists on the node memory--that is, if the node memory is low; otherwise `False` |
| `PIDPressure` | `True` if pressure exists on the processes—that is, if there are too many processes on the node; otherwise `False` |
| `NetworkUnavailable` | `True` if the network for the node is not correctly configured, otherwise `False` |
{{< /table >}}
The node condition is represented as a JSON object. For example, the following response describes a healthy node.
{{< note >}}
If you use command-line tools to print details of a cordoned Node, the Condition includes
`SchedulingDisabled`. `SchedulingDisabled` is not a Condition in the Kubernetes API; instead,
cordoned nodes are marked Unschedulable in their spec.
{{< /note >}}
The node condition is represented as a JSON object. For example, the following structure describes a healthy node:
```json
"conditions": [
@@ -72,20 +180,24 @@ The node condition is represented as a JSON object. For example, the following r
]
```
If the Status of the Ready condition remains `Unknown` or `False` for longer than the `pod-eviction-timeout` (an argument passed to the [kube-controller-manager](/docs/admin/kube-controller-manager/)), all the Pods on the node are scheduled for deletion by the Node Controller. The default eviction timeout duration is **five minutes**. In some cases when the node is unreachable, the apiserver is unable to communicate with the kubelet on the node. The decision to delete the pods cannot be communicated to the kubelet until communication with the apiserver is re-established. In the meantime, the pods that are scheduled for deletion may continue to run on the partitioned node.
If the Status of the Ready condition remains `Unknown` or `False` for longer than the `pod-eviction-timeout` (an argument passed to the {{< glossary_tooltip text="kube-controller-manager" term_id="kube-controller-manager" >}}), all the Pods on the node are scheduled for deletion by the node controller. The default eviction timeout duration is **five minutes**. In some cases when the node is unreachable, the API server is unable to communicate with the kubelet on the node. The decision to delete the pods cannot be communicated to the kubelet until communication with the API server is re-established. In the meantime, the pods that are scheduled for deletion may continue to run on the partitioned node.
In versions of Kubernetes prior to 1.5, the node controller would [force delete](/docs/concepts/workloads/pods/pod/#force-deletion-of-pods)
these unreachable pods from the apiserver. However, in 1.5 and higher, the node controller does not force delete pods until it is
confirmed that they have stopped running in the cluster. You can see the pods that might be running on an unreachable node as being in
the `Terminating` or `Unknown` state. In cases where Kubernetes cannot deduce from the underlying infrastructure if a node has
permanently left a cluster, the cluster administrator may need to delete the node object by hand. Deleting the node object from
Kubernetes causes all the Pod objects running on the node to be deleted from the apiserver, and frees up their names.
The node controller does not force delete pods until it is confirmed that they have stopped
running in the cluster. You can see the pods that might be running on an unreachable node as
being in the `Terminating` or `Unknown` state. In cases where Kubernetes cannot deduce from the
underlying infrastructure if a node has permanently left a cluster, the cluster administrator
may need to delete the node object by hand. Deleting the node object from Kubernetes causes
all the Pod objects running on the node to be deleted from the API server, and frees up their
names.
The node lifecycle controller automatically creates
[taints](/docs/concepts/configuration/taint-and-toleration/) that represent conditions.
[taints](/docs/concepts/scheduling-eviction/taint-and-toleration/) that represent conditions.
The scheduler takes the Node's taints into consideration when assigning a Pod to a Node.
Pods can also have tolerations which let them tolerate a Node's taints.
See [Taint Nodes by Condition](/docs/concepts/configuration/taint-and-toleration/#taint-nodes-by-condition)
for more details.
### Capacity and Allocatable {#capacity}
Describes the resources available on the node: CPU, memory and the maximum
@@ -104,48 +216,10 @@ on a Node.
Describes general information about the node, such as kernel version, Kubernetes version (kubelet and kube-proxy version), Docker version (if used), and OS name.
This information is gathered by Kubelet from the node.
## Management
### Node controller
Unlike [pods](/docs/concepts/workloads/pods/pod/) and [services](/docs/concepts/services-networking/service/),
a node is not inherently created by Kubernetes: it is created externally by cloud
providers like Google Compute Engine, or it exists in your pool of physical or virtual
machines. So when Kubernetes creates a node, it creates
an object that represents the node. After creation, Kubernetes
checks whether the node is valid or not. For example, if you try to create
a node from the following content:
```json
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "10.240.79.157",
"labels": {
"name": "my-first-k8s-node"
}
}
}
```
Kubernetes creates a node object internally (the representation), and
validates the node by health checking based on the `metadata.name` field. If the node is valid -- that is, if all necessary
services are running -- it is eligible to run a pod. Otherwise, it is
ignored for any cluster activity until it becomes valid.
The name of a Node object must be a valid
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
{{< note >}}
Kubernetes keeps the object for the invalid node and keeps checking to see whether it becomes valid.
You must explicitly delete the Node object to stop this process.
{{< /note >}}
Currently, there are three components that interact with the Kubernetes node
interface: node controller, kubelet, and kubectl.
### Node Controller
The node controller is a Kubernetes master component which manages various
aspects of nodes.
The node {{< glossary_tooltip text="controller" term_id="controller" >}} is a
Kubernetes control plane component that manages various aspects of nodes.
The node controller has multiple roles in a node's life. The first is assigning a
CIDR block to the node when it is registered (if CIDR assignment is turned on).
@@ -168,6 +242,7 @@ checks the state of each node every `--node-monitor-period` seconds.
#### Heartbeats
Heartbeats, sent by Kubernetes nodes, help determine the availability of a node.
There are two forms of heartbeats: updates of `NodeStatus` and the
[Lease object](/docs/reference/generated/kubernetes-api/{{< latest-version >}}/#lease-v1-coordination-k8s-io).
Each Node has an associated Lease object in the `kube-node-lease`
@@ -188,13 +263,7 @@ a Lease object.
#### Reliability
In Kubernetes 1.4, we updated the logic of the node controller to better handle
cases when a large number of nodes have problems with reaching the master
(e.g. because the master has networking problems). Starting with 1.4, the node
controller looks at the state of all nodes in the cluster when making a
decision about pod eviction.
In most cases, node controller limits the eviction rate to
In most cases, node controller limits the eviction rate to
`--node-eviction-rate` (default 0.1) per second, meaning it won't evict pods
from more than 1 node per 10 seconds.
@@ -220,62 +289,12 @@ completely unhealthy (i.e. there are no healthy nodes in the cluster). In such a
case, the node controller assumes that there's some problem with master
connectivity and stops all evictions until some connectivity is restored.
Starting in Kubernetes 1.6, the NodeController is also responsible for evicting
pods that are running on nodes with `NoExecute` taints, when the pods do not tolerate
the taints. Additionally, as an alpha feature that is disabled by default, the
NodeController is responsible for adding taints corresponding to node problems like
node unreachable or not ready. See [this documentation](/docs/concepts/configuration/taint-and-toleration/)
for details about `NoExecute` taints and the alpha feature.
The node controller is also responsible for evicting pods running on nodes with
`NoExecute` taints, unless those pods tolerate that taint.
The node controller also adds {{< glossary_tooltip text="taints" term_id="taint" >}}
corresponding to node problems like node unreachable or not ready. This means
that the scheduler won't place Pods onto unhealthy nodes.
Starting in version 1.8, the node controller can be made responsible for creating taints that represent
Node conditions. This is an alpha feature of version 1.8.
### Self-Registration of Nodes
When the kubelet flag `--register-node` is true (the default), the kubelet will attempt to
register itself with the API server. This is the preferred pattern, used by most distros.
For self-registration, the kubelet is started with the following options:
- `--kubeconfig` - Path to credentials to authenticate itself to the apiserver.
- `--cloud-provider` - How to talk to a cloud provider to read metadata about itself.
- `--register-node` - Automatically register with the API server.
- `--register-with-taints` - Register the node with the given list of taints (comma separated `<key>=<value>:<effect>`). No-op if `register-node` is false.
- `--node-ip` - IP address of the node.
- `--node-labels` - Labels to add when registering the node in the cluster (see label restrictions enforced by the [NodeRestriction admission plugin](/docs/reference/access-authn-authz/admission-controllers/#noderestriction) in 1.13+).
- `--node-status-update-frequency` - Specifies how often kubelet posts node status to master.
When the [Node authorization mode](/docs/reference/access-authn-authz/node/) and
[NodeRestriction admission plugin](/docs/reference/access-authn-authz/admission-controllers/#noderestriction) are enabled,
kubelets are only authorized to create/modify their own Node resource.
#### Manual Node Administration
A cluster administrator can create and modify node objects.
If the administrator wishes to create node objects manually, set the kubelet flag
`--register-node=false`.
The administrator can modify node resources (regardless of the setting of `--register-node`).
Modifications include setting labels on the node and marking it unschedulable.
Labels on nodes can be used in conjunction with node selectors on pods to control scheduling,
e.g. to constrain a pod to only be eligible to run on a subset of the nodes.
Marking a node as unschedulable prevents new pods from being scheduled to that
node, but does not affect any existing pods on the node. This is useful as a
preparatory step before a node reboot, etc. For example, to mark a node
unschedulable, run this command:
```shell
kubectl cordon $NODENAME
```
{{< note >}}
Pods created by a DaemonSet controller bypass the Kubernetes scheduler
and do not respect the unschedulable attribute on a node. This assumes that daemons belong on
the machine even if it is being drained of applications while it prepares for a reboot.
{{< /note >}}
{{< caution >}}
`kubectl cordon` marks a node as 'unschedulable', which has the side effect of the service
@@ -285,34 +304,40 @@ eligible for, effectively removing incoming load balancer traffic from the cordo
### Node capacity
The capacity of the node (number of cpus and amount of memory) is part of the node object.
Normally, nodes register themselves and report their capacity when creating the node object. If
you are doing [manual node administration](#manual-node-administration), then you need to set node
capacity when adding a node.
Node objects track information about the Node's resource capacity (for example: the amount
of memory available, and the number of CPUs).
Nodes that [self register](#self-registration-of-nodes) report their capacity during
registration. If you [manually](#manual-node-administration) add a Node, then
you need to set the node's capacity informaton when you add it.
The Kubernetes scheduler ensures that there are enough resources for all the pods on a node. It
checks that the sum of the requests of containers on the node is no greater than the node capacity. It
includes all containers started by the kubelet, but not containers started directly by the [container runtime](/docs/concepts/overview/components/#container-runtime) nor any process running outside of the containers.
The Kubernetes {{< glossary_tooltip text="scheduler" term_id="kube-scheduler" >}} ensures that
there are enough resources for all the Pods on a Node. The scheduler checks that the sum
of the requests of containers on the node is no greater than the node's capacity.
That sum of requests includes all containers managed by the kubelet, but excludes any
containers started directly by the container runtime, and also excludes any
processes running outside of the kubelet's control.
If you want to explicitly reserve resources for non-Pod processes, follow this tutorial to
{{< note >}}
If you want to explicitly reserve resources for non-Pod processes, see
[reserve resources for system daemons](/docs/tasks/administer-cluster/reserve-compute-resources/#system-reserved).
{{< /note >}}
## Node topology
{{< feature-state state="alpha" >}}
{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
If you have enabled the `TopologyManager`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/), then
the kubelet can use topology hints when making resource assignment decisions.
## API Object
Node is a top-level resource in the Kubernetes REST API. More details about the
API object can be found at:
[Node API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#node-v1-core).
See [Control Topology Management Policies on a Node](/docs/tasks/administer-cluster/topology-manager/)
for more information.
{{% /capture %}}
{{% capture whatsnext %}}
* Read about [node components](/docs/concepts/overview/components/#node-components)
* Read about node-level topology: [Control Topology Management Policies on a node](/docs/tasks/administer-cluster/topology-manager/)
* Learn about the [components](/docs/concepts/overview/components/#node-components) that make up a node.
* Read the [API definition for Node](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#node-v1-core).
* Read the [Node](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md#the-kubernetes-node)
section of the architecture design document.
* Read about [taints and tolerations](/docs/concepts/configuration/taint-and-toleration/).
* Read about [cluster autoscaling](/docs/tasks/administer-cluster/cluster-management/#cluster-autoscaling).
{{% /capture %}}
@@ -30,6 +30,7 @@ Add-ons in each section are sorted alphabetically - the ordering does not imply
* [Flannel](https://github.com/coreos/flannel/blob/master/Documentation/kubernetes.md) is an overlay network provider that can be used with Kubernetes.
* [Knitter](https://github.com/ZTE/Knitter/) is a plugin to support multiple network interfaces in a Kubernetes pod.
* [Multus](https://github.com/Intel-Corp/multus-cni) is a Multi plugin for multiple network support in Kubernetes to support all CNI plugins (e.g. Calico, Cilium, Contiv, Flannel), in addition to SRIOV, DPDK, OVS-DPDK and VPP based workloads in Kubernetes.
* [OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin) is OVN based CNI controller plugin to provide cloud native based Service function chaining(SFC), Multiple OVN overlay networking, dynamic subnet creation, dynamic creation of virtual networks, VLAN Provider network, Direct provider network and pluggable with other Multi-network plugins, ideal for edge based cloud native workloads in Multi-cluster networking
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) Container Plug-in (NCP) provides integration between VMware NSX-T and container orchestrators such as Kubernetes, as well as integration between NSX-T and container-based CaaS/PaaS platforms such as Pivotal Container Service (PKS) and OpenShift.
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst) is an SDN platform that provides policy-based networking between Kubernetes Pods and non-Kubernetes environments with visibility and security monitoring.
* [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Kubeadm add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize).
@@ -422,3 +422,15 @@ If you wish to use the external cloud provider, its repository is [TencentCloud/
The Tencent cloud provider uses the hostname of the node (as determined by the kubelet or overridden with `--hostname-override`) as the name of the Kubernetes Node object.
Note that the Kubernetes Node name must match the Tencent VM private IP.
## Alibaba Cloud Kubernetes
If you wish to use the external cloud provider, its repository is [kubernetes/cloud-provider-alibaba-cloud](https://github.com/kubernetes/cloud-provider-alibaba-cloud).
### Node Name
Alibaba Cloud does not require the format of node name, but the kubelet needs to add `--provider-id=${REGION_ID}.${INSTANCE_ID}`. The parameter `${REGION_ID}` represents the region id of the Kubernetes and `${INSTANCE_ID}` denotes the Alibaba ECS (Elastic Compute Service) ID.
### Load Balancers
You can setup external load balancers to use specific features in Alibaba Cloud by configuring the [annotations](https://www.alibabacloud.com/help/en/doc-detail/86531.htm) .
@@ -262,6 +262,10 @@ Lars Kellogg-Stedman.
Multus supports all [reference plugins](https://github.com/containernetworking/plugins) (eg. [Flannel](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel), [DHCP](https://github.com/containernetworking/plugins/tree/master/plugins/ipam/dhcp), [Macvlan](https://github.com/containernetworking/plugins/tree/master/plugins/main/macvlan)) that implement the CNI specification and 3rd party plugins (eg. [Calico](https://github.com/projectcalico/cni-plugin), [Weave](https://github.com/weaveworks/weave), [Cilium](https://github.com/cilium/cilium), [Contiv](https://github.com/contiv/netplugin)). In addition to it, Multus supports [SRIOV](https://github.com/hustcat/sriov-cni), [DPDK](https://github.com/Intel-Corp/sriov-cni), [OVS-DPDK & VPP](https://github.com/intel/vhost-user-net-plugin) workloads in Kubernetes with both cloud native and NFV based applications in Kubernetes.
### OVN4NFV-K8s-Plugin (OVN based CNI controller & plugin)
[OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin) is OVN based CNI controller plugin to provide cloud native based Service function chaining(SFC), Multiple OVN overlay networking, dynamic subnet creation, dynamic creation of virtual networks, VLAN Provider network, Direct provider network and pluggable with other Multi-network plugins, ideal for edge based cloud native workloads in Multi-cluster networking
### NSX-T
[VMware NSX-T](https://docs.vmware.com/en/VMware-NSX-T/index.html) is a network virtualization and security platform. NSX-T can provide network virtualization for a multi-cloud and multi-hypervisor environment and is focused on emerging application frameworks and architectures that have heterogeneous endpoints and technology stacks. In addition to vSphere hypervisors, these environments include other hypervisors such as KVM, containers, and bare metal.
@@ -163,7 +163,7 @@ with the pod's tolerations in admission, effectively taking the union of the set
by each.
To learn more about configuring the node selector and tolerations, see [Assigning Pods to
Nodes](/docs/concepts/configuration/assign-pod-node/).
Nodes](/docs/concepts/scheduling-eviction/assign-pod-node/).
[RuntimeClass admission controller]: /docs/reference/access-authn-authz/admission-controllers/#runtimeclass
@@ -86,7 +86,7 @@ Node components run on every node, maintaining running pods and providing the Ku
{{< glossary_definition term_id="kube-proxy" length="all" >}}
### Container Runtime
### Container runtime
{{< glossary_definition term_id="container-runtime" length="all" >}}
@@ -226,6 +226,6 @@ selector:
#### Selecting sets of nodes
One use case for selecting over labels is to constrain the set of nodes onto which a pod can schedule.
See the documentation on [node selection](/docs/concepts/configuration/assign-pod-node/) for more information.
See the documentation on [node selection](/docs/concepts/scheduling-eviction/assign-pod-node/) for more information.
{{% /capture %}}
@@ -494,7 +494,8 @@ kubectl create quota test --hard=count/deployments.extensions=2,count/replicaset
```
```shell
kubectl run nginx --image=nginx --replicas=2 --namespace=myspace
kubectl create deployment nginx --image=nginx --namespace=myspace
kubectl scale deployment nginx --replicas=2 --namespace=myspace
```
```shell
@@ -155,7 +155,7 @@ value is `another-node-label-value` should be preferred.
You can see the operator `In` being used in the example. The new node affinity syntax supports the following operators: `In`, `NotIn`, `Exists`, `DoesNotExist`, `Gt`, `Lt`.
You can use `NotIn` and `DoesNotExist` to achieve node anti-affinity behavior, or use
[node taints](/docs/concepts/configuration/taint-and-toleration/) to repel pods from specific nodes.
[node taints](/docs/concepts/scheduling-eviction/taint-and-toleration/) to repel pods from specific nodes.
If you specify both `nodeSelector` and `nodeAffinity`, *both* must be satisfied for the pod
to be scheduled onto a candidate node.
@@ -226,10 +226,11 @@ The legal operators for pod affinity and anti-affinity are `In`, `NotIn`, `Exist
In principle, the `topologyKey` can be any legal label-key. However,
for performance and security reasons, there are some constraints on topologyKey:
1. For affinity and for `requiredDuringSchedulingIgnoredDuringExecution` pod anti-affinity,
empty `topologyKey` is not allowed.
2. For `requiredDuringSchedulingIgnoredDuringExecution` pod anti-affinity, the admission controller `LimitPodHardAntiAffinityTopology` was introduced to limit `topologyKey` to `kubernetes.io/hostname`. If you want to make it available for custom topologies, you may modify the admission controller, or simply disable it.
3. For `preferredDuringSchedulingIgnoredDuringExecution` pod anti-affinity, empty `topologyKey` is not allowed.
1. For pod affinity, empty `topologyKey` is not allowed in both `requiredDuringSchedulingIgnoredDuringExecution`
and `preferredDuringSchedulingIgnoredDuringExecution`.
2. For pod anti-affinity, empty `topologyKey` is also not allowed in both `requiredDuringSchedulingIgnoredDuringExecution`
and `preferredDuringSchedulingIgnoredDuringExecution`.
3. For `requiredDuringSchedulingIgnoredDuringExecution` pod anti-affinity, the admission controller `LimitPodHardAntiAffinityTopology` was introduced to limit `topologyKey` to `kubernetes.io/hostname`. If you want to make it available for custom topologies, you may modify the admission controller, or simply disable it.
4. Except for the above cases, the `topologyKey` can be any legal label-key.
In addition to `labelSelector` and `topologyKey`, you can optionally specify a list `namespaces`
@@ -391,7 +392,7 @@ The above pod will run on the node kube-01.
{{% capture whatsnext %}}
[Taints](/docs/concepts/configuration/taint-and-toleration/) allow a Node to *repel* a set of Pods.
[Taints](/docs/concepts/scheduling-eviction/taint-and-toleration/) allow a Node to *repel* a set of Pods.
The design documents for
[node affinity](https://git.k8s.io/community/contributors/design-proposals/scheduling/nodeaffinity.md)
@@ -1,7 +1,7 @@
---
title: Kubernetes Scheduler
content_template: templates/concept
weight: 50
weight: 10
---
{{% capture overview %}}
@@ -10,16 +10,17 @@ weight: 40
{{% capture overview %}}
Node affinity, described [here](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity),
is a property of *pods* that *attracts* them to a set of nodes (either as a
preference or a hard requirement). Taints are the opposite -- they allow a
*node* to *repel* a set of pods.
[_Node affinity_](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity),
is a property of {{< glossary_tooltip text="Pods" term_id="pod" >}} that *attracts* them to
a set of {{< glossary_tooltip text="nodes" term_id="node" >}} (either as a preference or a
hard requirement). _Taints_ are the opposite -- they allow a node to repel a set of pods.
_Tolerations_ are applied to pods, and allow (but do not require) the pods to schedule
onto nodes with matching taints.
Taints and tolerations work together to ensure that pods are not scheduled
onto inappropriate nodes. One or more taints are applied to a node; this
marks that the node should not accept any pods that do not tolerate the taints.
Tolerations are applied to pods, and allow (but do not require) the pods to schedule
onto nodes with matching taints.
{{% /capture %}}
@@ -65,12 +66,12 @@ Heres an example of a pod that uses tolerations:
{{< codenew file="pods/pod-with-toleration.yaml" >}}
The default value for `operator` is `Equal`.
A toleration "matches" a taint if the keys are the same and the effects are the same, and:
* the `operator` is `Exists` (in which case no `value` should be specified), or
* the `operator` is `Equal` and the `value`s are equal
`Operator` defaults to `Equal` if not specified.
* the `operator` is `Equal` and the `value`s are equal.
{{< note >}}
@@ -204,7 +205,7 @@ when there are node problems, which is described in the next section.
{{< feature-state for_k8s_version="v1.18" state="stable" >}}
Earlier we mentioned the `NoExecute` taint effect, which affects pods that are already
The `NoExecute` taint effect, mentioned above, affects pods that are already
running on the node as follows
* pods that do not tolerate the taint are evicted immediately
@@ -213,9 +214,8 @@ running on the node as follows
* pods that tolerate the taint with a specified `tolerationSeconds` remain
bound for the specified amount of time
In addition, Kubernetes 1.6 introduced alpha support for representing node
problems. In other words, the node controller automatically taints a node when
certain condition is true. The following taints are built in:
The node controller automatically taints a Node when certain conditions
are true. The following taints are built in:
* `node.kubernetes.io/not-ready`: Node is not ready. This corresponds to
the NodeCondition `Ready` being "`False`".
@@ -236,19 +236,18 @@ with `NoExecute` effect. If the fault condition returns to normal the kubelet or
controller can remove the relevant taint(s).
{{< note >}}
To maintain the existing [rate limiting](/docs/concepts/architecture/nodes/)
behavior of pod evictions due to node problems, the system actually adds the taints
in a rate-limited way. This prevents massive pod evictions in scenarios such
as the master becoming partitioned from the nodes.
The control plane limits the rate of adding node new taints to nodes. This rate limiting
manages the number of evictions that are triggered when many nodes become unreachable at
once (for example: if there is a network disruption).
{{< /note >}}
The feature, in combination with `tolerationSeconds`, allows a pod
to specify how long it should stay bound to a node that has one or both of these problems.
You can specify `tolerationSeconds` for a Pod to define how long that Pod stays bound
to a failing or unresponsive Node.
For example, an application with a lot of local state might want to stay
bound to node for a long time in the event of network partition, in the hope
For example, you might want to keep an application with a lot of local state
bound to node for a long time in the event of network partition, hoping
that the partition will recover and thus the pod eviction can be avoided.
The toleration the pod would use in that case would look like
The toleration you set for that Pod might look like:
```yaml
tolerations:
@@ -258,20 +257,15 @@ tolerations:
tolerationSeconds: 6000
```
Note that Kubernetes automatically adds a toleration for
`node.kubernetes.io/not-ready` with `tolerationSeconds=300`
unless the pod configuration provided
by the user already has a toleration for `node.kubernetes.io/not-ready`.
Likewise it adds a toleration for
`node.kubernetes.io/unreachable` with `tolerationSeconds=300`
unless the pod configuration provided
by the user already has a toleration for `node.kubernetes.io/unreachable`.
{{< note >}}
Kubernetes automatically adds a toleration for
`node.kubernetes.io/not-ready` and `node.kubernetes.io/unreachable`
with `tolerationSeconds=300`,
unless you, or a controller, set those tolerations explictly.
These automatically-added tolerations ensure that
the default pod behavior of remaining bound for 5 minutes after one of these
problems is detected is maintained.
The two default tolerations are added by the [DefaultTolerationSeconds
admission controller](https://git.k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds).
These automatically-added tolerations mean that Pods remain bound to
Nodes for 5 minutes after one of these problems is detected.
{{< /note >}}
[DaemonSet](/docs/concepts/workloads/controllers/daemonset/) pods are created with
`NoExecute` tolerations for the following taints with no `tolerationSeconds`:
@@ -287,9 +281,8 @@ The node lifecycle controller automatically creates taints corresponding to
Node conditions with `NoSchedule` effect.
Similarly the scheduler does not check Node conditions; instead the scheduler checks taints. This assures that Node conditions don't affect what's scheduled onto the Node. The user can choose to ignore some of the Node's problems (represented as Node conditions) by adding appropriate Pod tolerations.
Starting in Kubernetes 1.8, the DaemonSet controller automatically adds the
following `NoSchedule` tolerations to all daemons, to prevent DaemonSets from
breaking.
The DaemonSet controller automatically adds the following `NoSchedule`
tolerations to all daemons, to prevent DaemonSets from breaking.
* `node.kubernetes.io/memory-pressure`
* `node.kubernetes.io/disk-pressure`
@@ -299,3 +292,10 @@ breaking.
Adding these tolerations ensures backward compatibility. You can also add
arbitrary tolerations to DaemonSets.
{{% /capture %}}
{{% capture whatsnext %}}
* Read about [out of resource handling](/docs/tasks/administer-cluster/out-of-resource/) and how you can configure it
* Read about [pod priority](/docs/concepts/configuration/pod-priority-preemption/)
{{% /capture %}}
@@ -93,7 +93,7 @@ hostaliases-pod 0/1 Completed 0 6s 10.200
The `hosts` file content would look like this:
```shell
kubectl logs hostaliases-pod
kubectl exec hostaliases-pod -- cat /etc/hosts
```
```none
@@ -49,8 +49,8 @@ To enable IPv4/IPv6 dual-stack, enable the `IPv6DualStack` [feature gate](/docs/
* `--feature-gates="IPv6DualStack=true"`
* kube-controller-manager:
* `--feature-gates="IPv6DualStack=true"`
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>` eg. `--cluster-cidr=10.244.0.0/16,fc00::/48`
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>` eg. `--service-cluster-ip-range=10.0.0.0/16,fd00::/108`
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>`
* `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` defaults to /24 for IPv4 and /64 for IPv6
* kubelet:
* `--feature-gates="IPv6DualStack=true"`
@@ -58,6 +58,13 @@ To enable IPv4/IPv6 dual-stack, enable the `IPv6DualStack` [feature gate](/docs/
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
* `--feature-gates="IPv6DualStack=true"`
{{< note >}}
An example of an IPv4 CIDR: `10.244.0.0/16` (though you would supply your own address range)
An example of an IPv6 CIDR: `fdXY:IJKL:MNOP:15::/64` (this shows the format but is not a valid address - see [RFC 4193](https://tools.ietf.org/html/rfc4193))
{{< /note >}}
## Services
If your cluster has IPv4/IPv6 dual-stack networking enabled, you can create {{< glossary_tooltip text="Services" term_id="service" >}} with either an IPv4 or an IPv6 address. You can choose the address family for the Service's cluster IP by setting a field, `.spec.ipFamily`, on that Service.
@@ -2,11 +2,6 @@
reviewers:
- freehan
title: EndpointSlices
feature:
title: EndpointSlices
description: >
Scalable tracking of network endpoints in a Kubernetes cluster.
content_template: templates/concept
weight: 15
---
@@ -311,8 +311,8 @@ these are:
- `nq`: never queue
{{< note >}}
To run kube-proxy in IPVS mode, you must make the IPVS Linux available on
the node before you starting kube-proxy.
To run kube-proxy in IPVS mode, you must make IPVS available on
the node before starting kube-proxy.
When kube-proxy starts in IPVS proxy mode, it verifies whether IPVS
kernel modules are available. If the IPVS kernel modules are not detected, then kube-proxy
@@ -692,6 +692,15 @@ metadata:
[...]
```
{{% /tab %}}
{{% tab name="Alibaba Cloud" %}}
```yaml
[...]
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
[...]
```
{{% /tab %}}
{{< /tabs >}}
@@ -896,7 +905,7 @@ the NLB Target Group's health check on the auto-assigned
`.spec.healthCheckNodePort` and not receive any traffic.
In order to achieve even traffic, either use a DaemonSet or specify a
[pod anti-affinity](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)
[pod anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
to not locate on the same node.
You can also use NLB Services with the [internal load balancer](/docs/concepts/services-networking/service/#internal-load-balancer)
@@ -169,9 +169,9 @@ will delay the binding and provisioning of a PersistentVolume until a Pod using
PersistentVolumes will be selected or provisioned conforming to the topology that is
specified by the Pod's scheduling constraints. These include, but are not limited to, [resource
requirements](/docs/concepts/configuration/manage-compute-resources-container),
[node selectors](/docs/concepts/configuration/assign-pod-node/#nodeselector),
[node selectors](/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector),
[pod affinity and
anti-affinity](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity),
anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity),
and [taints and tolerations](/docs/concepts/configuration/taint-and-toleration).
The following plugins support `WaitForFirstConsumer` with dynamic provisioning:
@@ -305,6 +305,11 @@ A Container using a ConfigMap as a [subPath](#using-subpath) volume mount will n
receive ConfigMap updates.
{{< /note >}}
{{< note >}}
Text data is exposed as files using the UTF-8 character encoding. To use some other character encoding, use binaryData.
{{< /note >}}
### downwardAPI {#downwardapi}
A `downwardAPI` volume is used to make downward API data available to applications.
@@ -99,8 +99,8 @@ create a Pod with a different value on a node for testing.
If you specify a `.spec.template.spec.nodeSelector`, then the DaemonSet controller will
create Pods on nodes which match that [node
selector](/docs/concepts/configuration/assign-pod-node/). Likewise if you specify a `.spec.template.spec.affinity`,
then DaemonSet controller will create Pods on nodes which match that [node affinity](/docs/concepts/configuration/assign-pod-node/).
selector](/docs/concepts/scheduling-eviction/assign-pod-node/). Likewise if you specify a `.spec.template.spec.affinity`,
then DaemonSet controller will create Pods on nodes which match that [node affinity](/docs/concepts/scheduling-eviction/assign-pod-node/).
If you do not specify either, then the DaemonSet controller will create Pods on all nodes.
## How Daemon Pods are Scheduled
@@ -1081,6 +1081,15 @@ the default value.
All existing Pods are killed before new ones are created when `.spec.strategy.type==Recreate`.
{{< note >}}
This will only guarantee Pod termination previous to creation for upgrades. If you upgrade a Deployment, all Pods
of the old revision will be terminated immediately. Successful removal is awaited before any Pod of the new
revision is created. If you manually delete a Pod, the lifecycle is controlled by the ReplicaSet and the
replacement will be created immediately (even if the old Pod is still in a Terminating state). If you need an
"at most" guarantee for your Pods, you should consider using a
[StatefulSet](/docs/concepts/workloads/controllers/statefulset/).
{{< /note >}}
#### Rolling Update Deployment
The Deployment updates Pods in a rolling update
@@ -330,7 +330,7 @@ Alternatively, you can use the `kubectl autoscale` command to accomplish the sam
(and it's easier!)
```shell
kubectl autoscale rs frontend --max=10
kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50
```
## Alternatives to ReplicaSet
@@ -97,6 +97,8 @@ time as frequent voluntary disruptions. We call this set of features
## How Disruption Budgets Work
{{< feature-state for_k8s_version="v1.5" state="beta" >}}
An Application Owner can create a `PodDisruptionBudget` object (PDB) for each application.
A PDB limits the number of pods of a replicated application that are down simultaneously from
voluntary disruptions. For example, a quorum-based application would
@@ -211,7 +213,7 @@ state:
| node-1 *drained* | node-2 | node-3 | *no node* |
|:--------------------:|:-------------------:|:------------------:|:------------------:|
| | pod-b *available* | pod-c *available* | pod-e *pending* |
| | pod-b *terminating* | pod-c *available* | pod-e *pending* |
| | pod-d *available* | pod-y | |
At this point, the cluster administrator needs to
@@ -46,8 +46,8 @@ including resource limits, volumes, and security settings. However, the
resource requests and limits for an init container are handled differently,
as documented in [Resources](#resources).
Also, init containers do not support readiness probes because they must run to
completion before the Pod can be ready.
Also, init containers do not support `lifecycle`, `livenessProbe`, `readinessProbe`, or
`startupProbe` because they must run to completion before the Pod can be ready.
If you specify multiple init containers for a Pod, Kubelet runs each init
container sequentially. Each init container must succeed before the next can run.
@@ -7,6 +7,8 @@ weight: 50
---
{{% capture overview %}}
{{< feature-state for_k8s_version="v1.6" state="alpha" >}}
This page provides an overview of PodPresets, which are objects for injecting
certain information into pods at creation time. The information can include
secrets, volumes, volume mounts, and environment variables.
@@ -14,20 +16,38 @@ secrets, volumes, volume mounts, and environment variables.
{{% capture body %}}
## Understanding Pod Presets
## Understanding Pod presets
A `Pod Preset` is an API resource for injecting additional runtime requirements
A PodPreset is an API resource for injecting additional runtime requirements
into a Pod at creation time.
You use [label selectors](/docs/concepts/overview/working-with-objects/labels/#label-selectors)
to specify the Pods to which a given Pod Preset applies.
to specify the Pods to which a given PodPreset applies.
Using a Pod Preset allows pod template authors to not have to explicitly provide
Using a PodPreset allows pod template authors to not have to explicitly provide
all information for every pod. This way, authors of pod templates consuming a
specific service do not need to know all the details about that service.
For more information about the background, see the [design proposal for PodPreset](https://git.k8s.io/community/contributors/design-proposals/service-catalog/pod-preset.md).
## How It Works
## Enable PodPreset in your cluster {#enable-pod-preset}
In order to use Pod presets in your cluster you must ensure the following:
1. You have enabled the API type `settings.k8s.io/v1alpha1/podpreset`. For
example, this can be done by including `settings.k8s.io/v1alpha1=true` in
the `--runtime-config` option for the API server. In minikube add this flag
`--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true` while
starting the cluster.
1. You have enabled the admission controller `PodPreset`. One way to doing this
is to include `PodPreset` in the `--enable-admission-plugins` option value specified
for the API server. In minikube, add this flag
```shell
--extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset
```
while starting the cluster.
## How it works
Kubernetes provides an admission controller (`PodPreset`) which, when enabled,
applies Pod Presets to incoming pod creation requests.
@@ -62,31 +82,12 @@ There may be instances where you wish for a Pod to not be altered by any Pod
Preset mutations. In these cases, you can add an annotation in the Pod Spec
of the form: `podpreset.admission.kubernetes.io/exclude: "true"`.
## Enable Pod Preset
In order to use Pod Presets in your cluster you must ensure the following:
1. You have enabled the API type `settings.k8s.io/v1alpha1/podpreset`. For
example, this can be done by including `settings.k8s.io/v1alpha1=true` in
the `--runtime-config` option for the API server. In minikube add this flag
`--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true` while
starting the cluster.
1. You have enabled the admission controller `PodPreset`. One way to doing this
is to include `PodPreset` in the `--enable-admission-plugins` option value specified
for the API server. In minikube add this flag
```shell
--extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset
```
while starting the cluster.
1. You have defined your Pod Presets by creating `PodPreset` objects in the
namespace you will use.
{{% /capture %}}
{{% capture whatsnext %}}
* [Injecting data into a Pod using PodPreset](/docs/tasks/inject-data-application/podpreset/)
See [Injecting data into a Pod using PodPreset](/docs/tasks/inject-data-application/podpreset/)
For more information about the background, see the [design proposal for PodPreset](https://git.k8s.io/community/contributors/design-proposals/service-catalog/pod-preset.md).
{{% /capture %}}
+3 -3
View File
@@ -35,7 +35,7 @@ The PR wranglers duties include:
- Assign relevant `sig/` label(s).
- If needed, assign reviewers from the `reviewers:` block in the file's front matter.
- Assign `Docs Review` and `Tech Review` labels to indicate the PR's review status.
- Assign`Needs Doc Review` or `Needs Tech Review` for PRs that haven't yet been reviewed.
- Assign `Needs Doc Review` or `Needs Tech Review` for PRs that haven't yet been reviewed.
- Assign `Doc Review: Open Issues` or `Tech Review: Open Issues` for PRs that have been reviewed and require further input or action before merging.
- Assign `/lgtm` and `/approve` labels to PRs that can be merged.
- Merge PRs when they are ready, or close PRs that shouldnt be accepted.
@@ -43,7 +43,7 @@ The PR wranglers duties include:
### Helpful GitHub queries for wranglers
The following queries are helpful when wrangling. After working through these three queries, the remaining list of PRs to be
The following queries are helpful when wrangling. After working through these queries, the remaining list of PRs to be
reviewed is usually small. These queries specifically exclude localization PRs, and only include the `master` branch (except for the last one).
- [No CLA, not eligible to merge](https://github.com/kubernetes/website/pulls?q=is%3Aopen+is%3Apr+label%3A%22cncf-cla%3A+no%22+-label%3Ado-not-merge+label%3Alanguage%2Fen):
@@ -245,4 +245,4 @@ When youre ready to stop recording, click Stop.
The video uploads automatically to YouTube.
{{% /capture %}}
{{% /capture %}}
@@ -250,7 +250,7 @@ for more details.
This plug-in facilitates creation of dedicated nodes with extended resources.
If operators want to create dedicated nodes with extended resources (like GPUs, FPGAs etc.), they are expected to
[taint the node](/docs/concepts/configuration/taint-and-toleration/#example-use-cases) with the extended resource
[taint the node](/docs/concepts/scheduling-eviction/taint-and-toleration/#example-use-cases) with the extended resource
name as the key. This admission controller, if enabled, automatically
adds tolerations for such taints to pods requesting extended resources, so users don't have to manually
add these tolerations.
@@ -114,6 +114,8 @@ different Kubernetes components.
| `MountContainers` | `false` | Alpha | 1.9 | |
| `NodeDisruptionExclusion` | `false` | Alpha | 1.16 | |
| `NonPreemptingPriority` | `false` | Alpha | 1.15 | |
| `PodDisruptionBudget` | `false` | Alpha | 1.3 | 1.4 |
| `PodDisruptionBudget` | `true` | Beta | 1.5 | |
| `PodOverhead` | `false` | Alpha | 1.16 | - |
| `ProcMountType` | `false` | Alpha | 1.12 | |
| `QOSReserved` | `false` | Alpha | 1.11 | |
@@ -333,7 +335,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `Accelerators`: Enable Nvidia GPU support when using Docker
- `AdvancedAuditing`: Enable [advanced auditing](/docs/tasks/debug-application-cluster/audit/#advanced-audit)
- `AffinityInAnnotations`(*deprecated*): Enable setting [Pod affinity or anti-affinity](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).
- `AffinityInAnnotations`(*deprecated*): Enable setting [Pod affinity or anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity).
- `AllowExtTrafficLocalEndpoints`: Enable a service to route external requests to node local endpoints.
- `AnyVolumeDataSource`: Enable use of any custom resource as the `DataSource` of a
{{< glossary_tooltip text="PVC" term_id="persistent-volume-claim" >}}.
@@ -441,6 +443,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `NonPreemptingPriority`: Enable NonPreempting option for PriorityClass and Pod.
- `PersistentLocalVolumes`: Enable the usage of `local` volume type in Pods.
Pod affinity has to be specified if requesting a `local` volume.
- `PodDisruptionBudget`: Enable the [PodDisruptionBudget](/docs/tasks/run-application/configure-pdb/) feature.
- `PodOverhead`: Enable the [PodOverhead](/docs/concepts/configuration/pod-overhead/) feature to account for pod overheads.
- `PodPriority`: Enable the descheduling and preemption of Pods based on their [priorities](/docs/concepts/configuration/pod-priority-preemption/).
- `PodReadinessGates`: Enable the setting of `PodReadinessGate` field for extending
@@ -486,7 +489,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `Sysctls`: Enable support for namespaced kernel parameters (sysctls) that can be set for each pod.
See [sysctls](/docs/tasks/administer-cluster/sysctl-cluster/) for more details.
- `TaintBasedEvictions`: Enable evicting pods from nodes based on taints on nodes and tolerations on Pods.
See [taints and tolerations](/docs/concepts/configuration/taint-and-toleration/) for more details.
See [taints and tolerations](/docs/concepts/scheduling-eviction/taint-and-toleration/) for more details.
- `TaintNodesByCondition`: Enable automatic tainting nodes based on [node conditions](/docs/concepts/architecture/nodes/#condition).
- `TokenRequest`: Enable the `TokenRequest` endpoint on service account resources.
- `TokenRequestProjection`: Enable the injection of service account tokens into
@@ -96,7 +96,7 @@ kubelet [flags]
<td colspan="2">--authorization-mode string</td>
</tr>
<tr>
<td></td><td style="line-height: 130%; word-wrap: break-word;">Authorization mode for Kubelet server. Valid options are AlwaysAllow or Webhook. Webhook mode uses the SubjectAccessReview API to determine authorization. (default "AlwaysAllow") (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)</td>
<td></td><td style="line-height: 130%; word-wrap: break-word;">Authorization mode for Kubelet server. Valid options are AlwaysAllow or Webhook. Webhook mode uses the SubjectAccessReview API to determine authorization. (default "AlwaysAllow" when --config flag is not provided; "Webhook" when --config flag presents.) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)</td>
</tr>
<tr>
@@ -15,3 +15,5 @@ tags:
<!--more-->
A worker node may be a VM or physical machine, depending on the cluster. It has local daemons or services necessary to run {{< glossary_tooltip text="Pods" term_id="pod" >}} and is managed by the control plane. The daemons on a node include {{< glossary_tooltip text="kubelet" term_id="kubelet" >}}, {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}}, and a container runtime implementing the {{< glossary_tooltip text="CRI" term_id="cri" >}} such as {{< glossary_tooltip term_id="docker" >}}.
In early Kubernetes versions, Nodes were called “Minions”.
+1 -1
View File
@@ -2,7 +2,7 @@
title: Taint
id: taint
date: 2019-01-11
full_link: /docs/concepts/configuration/taint-and-toleration/
full_link: /docs/concepts/scheduling-eviction/taint-and-toleration/
short_description: >
A core object consisting of three required properties: key, value, and effect. Taints prevent the scheduling of pods on nodes or node groups.
@@ -2,7 +2,7 @@
title: Toleration
id: toleration
date: 2019-01-11
full_link: /docs/concepts/configuration/taint-and-toleration/
full_link: /docs/concepts/scheduling-eviction/taint-and-toleration/
short_description: >
A core object consisting of three required properties: key, value, and effect. Tolerations enable the scheduling of pods on nodes or node groups that have a matching taint.
@@ -91,7 +91,7 @@ Operation | Syntax | Description
`port-forward` | `kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]` | Forward one or more local ports to a pod.
`proxy` | `kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]` | Run a proxy to the Kubernetes API server.
`replace` | `kubectl replace -f FILENAME` | Replace a resource from a file or stdin.
`run` | `kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=server|client|none] [--overrides=inline-json] [flags]` | Run a specified image on the cluster.
`run` | <code>kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server&#124;client&#124;none] [--overrides=inline-json] [flags]</code> | Run a specified image on the cluster.
`scale` | <code>kubectl scale (-f FILENAME &#124; TYPE NAME &#124; TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]</code> | Update the size of the specified replication controller.
`version` | `kubectl version [--client] [flags]` | Display the Kubernetes version running on the client and server.
@@ -243,8 +243,8 @@ kubectl get pods <pod-name> --server-print=false
Output looks like this:
```shell
NAME READY STATUS RESTARTS AGE
pod-name 1/1 Running 0 1m
NAME AGE
pod-name 1m
```
### Sorting list objects
@@ -339,8 +339,8 @@ the pods running on it, the events generated for the node etc.
# Delete a pod using the type and name specified in the pod.yaml file.
kubectl delete -f pod.yaml
# Delete all the pods and services that have the label name=<label-name>.
kubectl delete pods,services -l name=<label-name>
# Delete all the pods and services that have the label '<label-key>=<label-value>'.
kubectl delete pods,services -l <label-key>=<label-value>
# Delete all pods, including uninitialized ones.
kubectl delete pods --all
@@ -350,13 +350,13 @@ kubectl delete pods --all
```shell
# Get output from running 'date' from pod <pod-name>. By default, output is from the first container.
kubectl exec <pod-name> date
kubectl exec <pod-name> -- date
# Get output from running 'date' in container <container-name> of pod <pod-name>.
kubectl exec <pod-name> -c <container-name> date
kubectl exec <pod-name> -c <container-name> -- date
# Get an interactive TTY and run /bin/bash from pod <pod-name>. By default, output is from the first container.
kubectl exec -ti <pod-name> /bin/bash
kubectl exec -ti <pod-name> -- /bin/bash
```
`kubectl logs` - Print the logs for a container in a pod.
@@ -451,7 +451,7 @@ cat ./kubectl-whoami
# this plugin makes use of the `kubectl config` command in order to output
# information about the current user, based on the currently selected context
kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ .context.user }}{{ end }}{{ end }}'
kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
```
Running the above plugin gives us an output containing the user for the currently selected
@@ -77,7 +77,7 @@ The following *priorities* implement scoring:
{{< glossary_tooltip term_id="replica-set" >}}.
- `InterPodAffinityPriority`: Implements preferred
[inter pod affininity and antiaffinity](/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity).
[inter pod affininity and antiaffinity](/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity).
- `LeastRequestedPriority`: Favors nodes with fewer requested resources. In other
words, the more Pods that are placed on a Node, and the more resources those
@@ -97,7 +97,7 @@ The following *priorities* implement scoring:
- `NodeAffinityPriority`: Prioritizes nodes according to node affinity scheduling
preferences indicated in PreferredDuringSchedulingIgnoredDuringExecution.
You can read more about this in [Assigning Pods to Nodes](/docs/concepts/configuration/assign-pod-node/).
You can read more about this in [Assigning Pods to Nodes](/docs/concepts/scheduling-eviction/assign-pod-node/).
- `TaintTolerationPriority`: Prepares the priority list for all the nodes, based on
the number of intolerable taints on the node. This policy adjusts a node's rank
@@ -68,7 +68,7 @@ extension points:
Pod runs.
Extension points: `Score`.
- `TaintToleration`: Implements
[taints and tolerations](/docs/concepts/configuration/taint-and-toleration/).
[taints and tolerations](/docs/concepts/scheduling-eviction/taint-and-toleration/).
Implements extension points: `Filter`, `Prescore`, `Score`.
- `NodeName`: Checks if a Pod spec node name matches the current node.
Extension points: `Filter`.
@@ -79,8 +79,8 @@ extension points:
`scheduler.alpha.kubernetes.io/preferAvoidPods`.
Extension points: `Score`.
- `NodeAffinity`: Implements
[node selectors](/docs/concepts/configuration/assign-pod-node/#nodeselector)
and [node affinity](/docs/concepts/configuration/assign-pod-node/#node-affinity).
[node selectors](/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)
and [node affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity).
Extension points: `Filter`, `Score`.
- `PodTopologySpread`: Implements
[Pod topology spread](/docs/concepts/workloads/pods/pod-topology-spread-constraints/).
@@ -117,7 +117,7 @@ extension points:
the node.
Extension points: `Filter`.
- `InterPodAffinity`: Implements
[inter-Pod affinity and anti-affinity](/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity).
[inter-Pod affinity and anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity).
Extension points: `PreFilter`, `Filter`, `PreScore`, `Score`.
- `PrioritySort`: Provides the default priority based sorting.
Extension points: `QueueSort`.

Some files were not shown because too many files have changed in this diff Show More