Compare commits
259 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14e5fe697f | |||
| 2bf7e078e9 | |||
| a03a4f2c5e | |||
| eca37a7161 | |||
| 704a303a4a | |||
| d253d7e5af | |||
| ffe1d460fe | |||
| 8a39269530 | |||
| a2040433f6 | |||
| 750c2e5894 | |||
| e47542c90c | |||
| b1a2be6706 | |||
| f0192d5c9e | |||
| da31405d7b | |||
| ab52a12ff0 | |||
| 6aa0912947 | |||
| 51c27db8d2 | |||
| 710fa9288d | |||
| 1904c435c1 | |||
| 4ec807fe57 | |||
| 827156f244 | |||
| 177568ab69 | |||
| adad63fa59 | |||
| 5894fa3942 | |||
| 5c73239f39 | |||
| 3b319987f3 | |||
| 326469394c | |||
| db9d2110f8 | |||
| d8cf78ae5b | |||
| fd83a01141 | |||
| 6cdf4202f0 | |||
| baa9233f77 | |||
| 3467875f92 | |||
| 4a275f1426 | |||
| bb870812fe | |||
| 508cc6fa82 | |||
| 178bfdb879 | |||
| 39301f0e1f | |||
| 2a1a44894e | |||
| bc8814864c | |||
| 0e5cbec4c4 | |||
| 47262d1bba | |||
| 9f9790dcf0 | |||
| 583e4d50e4 | |||
| e917746c36 | |||
| 9bd532fc67 | |||
| 8c6e5926f8 | |||
| a772fcf9cc | |||
| eed4b02959 | |||
| b2f7ce183e | |||
| c28fd4bfb5 | |||
| 1ad2bce475 | |||
| 43b2e77275 | |||
| a4aa4613cd | |||
| 93f57fd152 | |||
| e8b4f229ce | |||
| d34ad68f39 | |||
| 9c4b023f9b | |||
| 2c66264fab | |||
| af24e94361 | |||
| 0dd81658c7 | |||
| 4af87260d3 | |||
| b20979dbc4 | |||
| 44e9cd313e | |||
| 082116588c | |||
| 6e33dfd749 | |||
| 66d7c45f0e | |||
| 7ac9be7598 | |||
| 02d18a3ce1 | |||
| ba8c8d4238 | |||
| d531f1d97b | |||
| 6848d25094 | |||
| e7c8bb2a6b | |||
| 465b4da828 | |||
| 61ac44bb11 | |||
| 8042f206ee | |||
| 437f38b0dc | |||
| 04e5a046f7 | |||
| 8f7c04acb9 | |||
| 81fe8fcd7f | |||
| 85e6e51e9e | |||
| 039a1271f3 | |||
| 25f168f2f6 | |||
| 8ff25b3f5e | |||
| da58c71c2a | |||
| afeca102eb | |||
| 03c2c0fb35 | |||
| 08e0981775 | |||
| ada25d09e0 | |||
| 9a311f4c3a | |||
| 828806b973 | |||
| 4d330619dd | |||
| 11ded1cca1 | |||
| 9ff9f5dd16 | |||
| 722d7bca96 | |||
| d818691764 | |||
| a850ca2fc2 | |||
| 3ac2177603 | |||
| 1e0c138fad | |||
| 4bfd5a6acd | |||
| 02fbd11727 | |||
| 1c15c9167e | |||
| 3cb9ee4e67 | |||
| 6b0351333e | |||
| 845ff4682c | |||
| 4b3b80f962 | |||
| 252c44c53d | |||
| ddf46cfd6b | |||
| 6ac692be8e | |||
| 43c48ea6b4 | |||
| b0f7bd626f | |||
| fe170db160 | |||
| 96c89395cc | |||
| d071289f7e | |||
| 85be5bb2b1 | |||
| 2fd8c1435a | |||
| 85186078a4 | |||
| eb62502894 | |||
| 1168b46021 | |||
| 87ae40d2d4 | |||
| 60984701a9 | |||
| 2113947048 | |||
| 3c95e6a96b | |||
| cac3c3a17d | |||
| 7ae9e453b7 | |||
| 683d28574d | |||
| 96b9dd41b7 | |||
| 11c8889e6d | |||
| 0003894db4 | |||
| 1f906ce67a | |||
| af2f72ad59 | |||
| acc7252970 | |||
| 2860fbf1ad | |||
| cfce358765 | |||
| 2a42dd439c | |||
| ce8641227c | |||
| 6399fb6c75 | |||
| 5a813f1267 | |||
| 5525bd968f | |||
| d710925768 | |||
| c9e0171da0 | |||
| 65539f9e67 | |||
| 8a04ffee9c | |||
| 1427beea15 | |||
| 50c97b222c | |||
| 54bebd3248 | |||
| 7c10029841 | |||
| 5239adf5e1 | |||
| 09e92f3d5f | |||
| 500745dd60 | |||
| 794a8ffb49 | |||
| 9234f9454b | |||
| 0650476fb5 | |||
| 8a6badcb68 | |||
| 2dff66611f | |||
| be5f25eade | |||
| 2946586e77 | |||
| f92e3ec2ba | |||
| b017081952 | |||
| f2b27507bd | |||
| 9329467e6e | |||
| 297ef84338 | |||
| 06599a6259 | |||
| e0d4b53b1c | |||
| a376a29d7e | |||
| 2007c90673 | |||
| 1a7b4a5e2f | |||
| a783e90ba3 | |||
| 83f6cb6ed4 | |||
| 793c66fffc | |||
| 1ed3af476b | |||
| 2ea3958f41 | |||
| 9021c7470f | |||
| 59b4b7f494 | |||
| 98150e6f37 | |||
| 429638be6a | |||
| 3f0103cd26 | |||
| cbc3d89fef | |||
| 98ccb8e012 | |||
| ac68a21c9a | |||
| e4505847a6 | |||
| b7a4d76be5 | |||
| a3d3370322 | |||
| 5b988bd661 | |||
| 7a0f9bc01e | |||
| f21eaae616 | |||
| d6b142070d | |||
| 2923e6ba56 | |||
| a6b6a976c3 | |||
| a30e63dcd6 | |||
| e9730d3e95 | |||
| d77368133a | |||
| a1fd3a2d57 | |||
| daa31064f3 | |||
| 46fe3d043c | |||
| 37dd90d81a | |||
| 11a343a2c5 | |||
| 548ba073da | |||
| a5c3c66fc9 | |||
| 4c6a904242 | |||
| e10ad9024a | |||
| a4fbeb27dc | |||
| 61047b9fa9 | |||
| 3437d0185c | |||
| f288fc6976 | |||
| cb3728596f | |||
| 25265cff5e | |||
| 96783a8119 | |||
| 8b51854c67 | |||
| db21e0a8da | |||
| 372d34dc94 | |||
| 57ed0b7373 | |||
| 7ced219f2d | |||
| a673c53984 | |||
| fe87b9fe42 | |||
| cde5120c3b | |||
| 48c2535d8d | |||
| 165247a744 | |||
| 0b90e84c89 | |||
| 27a74df031 | |||
| 369169dbb3 | |||
| e53208d4f3 | |||
| 3a9b198beb | |||
| 1064c8dcff | |||
| 4840d9c0b4 | |||
| d883d03f3e | |||
| 860d576d5a | |||
| a30d7351e8 | |||
| f3101ee9fa | |||
| 24b88be247 | |||
| 31a587634e | |||
| 20efd69cd9 | |||
| fa3efa1441 | |||
| e16b64c43e | |||
| d8f4b5c161 | |||
| 7097e3a8d7 | |||
| 996ebf5b76 | |||
| 67b9b0ba9e | |||
| 30d4d4ee68 | |||
| 5dfdc39076 | |||
| 2855ab2ce6 | |||
| 7d631e4f9e | |||
| 3d96b73457 | |||
| af84d4255f | |||
| 76c58d8fd5 | |||
| 5cb4f973a4 | |||
| 1500f1453d | |||
| 09a6795d12 | |||
| 9380d26728 | |||
| 289c3d0cee | |||
| 2a10ec4721 | |||
| a41a4f98ee | |||
| ede985dccd | |||
| 347388843f | |||
| cd24a8616f | |||
| 06119b951b | |||
| f3040bca47 | |||
| f081886b75 | |||
| ba7fae9534 |
@@ -96,4 +96,4 @@ clean-api-reference: ## Clean all directories in API reference directory, preser
|
||||
|
||||
api-reference: clean-api-reference ## Build the API reference pages. go needed
|
||||
cd api-ref-generator/gen-resourcesdocs && \
|
||||
go run cmd/main.go kwebsite --config-dir config/v1.21/ --file api/v1.21/swagger.json --output-dir ../../content/en/docs/reference/kubernetes-api --templates templates
|
||||
go run cmd/main.go kwebsite --config-dir ../../api-ref-assets/config/ --file ../../api-ref-assets/api/swagger.json --output-dir ../../content/en/docs/reference/kubernetes-api --templates ../../api-ref-assets/templates
|
||||
|
||||
@@ -73,23 +73,15 @@ To update the reference pages for a new Kubernetes release (replace v1.20 in the
|
||||
git submodule update --init --recursive --depth 1
|
||||
```
|
||||
|
||||
2. Create a new API revision into the submodule, and add the Swagger specification:
|
||||
2. Update the Swagger specification:
|
||||
|
||||
```bash
|
||||
mkdir api-ref-generator/gen-resourcesdocs/api/v1.20
|
||||
curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-generator/gen-resourcesdocs/api/v1.20/swagger.json
|
||||
```
|
||||
```
|
||||
curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json
|
||||
```
|
||||
|
||||
3. Copy the table of contents and fields configuration for the new release from a previous one:
|
||||
3. In `api-ref-assets/config/`, adapt the files `toc.yaml` and `fields.yaml` to reflect the changes of the new release.
|
||||
|
||||
```bash
|
||||
mkdir api-ref-generator/gen-resourcesdocs/api/v1.20
|
||||
cp api-ref-generator/gen-resourcesdocs/api/v1.19/* api-ref-generator/gen-resourcesdocs/api/v1.20/
|
||||
```
|
||||
|
||||
4. Adapt the files `toc.yaml` and `fields.yaml` to reflect the changes between the two releases
|
||||
|
||||
5. Next, build the pages:
|
||||
4. Next, build the pages:
|
||||
|
||||
```bash
|
||||
make api-reference
|
||||
@@ -104,7 +96,7 @@ To update the reference pages for a new Kubernetes release (replace v1.20 in the
|
||||
|
||||
In a web browser, go to <http://localhost:1313/docs/reference/kubernetes-api/> to view the API reference.
|
||||
|
||||
6. When all changes of the new contract are reflected into the configuration files `toc.yaml` and `fields.yaml`, create a Pull Request with the newly generated API reference pages.
|
||||
5. When all changes of the new contract are reflected into the configuration files `toc.yaml` and `fields.yaml`, create a Pull Request with the newly generated API reference pages.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,696 @@
|
||||
- definition: io.k8s.api.core.v1.PodSpec
|
||||
field_categories:
|
||||
- name: Containers
|
||||
fields:
|
||||
- containers
|
||||
- initContainers
|
||||
- imagePullSecrets
|
||||
- enableServiceLinks
|
||||
- name: Volumes
|
||||
fields:
|
||||
- volumes
|
||||
- name: Scheduling
|
||||
fields:
|
||||
- nodeSelector
|
||||
- nodeName
|
||||
- affinity
|
||||
- tolerations
|
||||
- schedulerName
|
||||
- runtimeClassName
|
||||
- priorityClassName
|
||||
- priority
|
||||
- topologySpreadConstraints
|
||||
- name: Lifecycle
|
||||
fields:
|
||||
- restartPolicy
|
||||
- terminationGracePeriodSeconds
|
||||
- activeDeadlineSeconds
|
||||
- readinessGates
|
||||
- name: Hostname and Name resolution
|
||||
fields:
|
||||
- hostname
|
||||
- setHostnameAsFQDN
|
||||
- subdomain
|
||||
- hostAliases
|
||||
- dnsConfig
|
||||
- dnsPolicy
|
||||
- name: Hosts namespaces
|
||||
fields:
|
||||
- hostNetwork
|
||||
- hostPID
|
||||
- hostIPC
|
||||
- shareProcessNamespace
|
||||
- name: Service account
|
||||
fields:
|
||||
- serviceAccountName
|
||||
- automountServiceAccountToken
|
||||
- name: Security context
|
||||
fields:
|
||||
- securityContext
|
||||
- name: Beta level
|
||||
fields:
|
||||
- preemptionPolicy
|
||||
- overhead
|
||||
- name: Alpha level
|
||||
fields:
|
||||
- ephemeralContainers
|
||||
- name: Deprecated
|
||||
fields:
|
||||
- serviceAccount
|
||||
|
||||
- definition: io.k8s.api.core.v1.PodSecurityContext
|
||||
field_categories:
|
||||
- fields:
|
||||
- runAsUser
|
||||
- runAsNonRoot
|
||||
- runAsGroup
|
||||
- supplementalGroups
|
||||
- fsGroup
|
||||
- fsGroupChangePolicy
|
||||
- seccompProfile
|
||||
- seLinuxOptions
|
||||
- sysctls
|
||||
- windowsOptions
|
||||
|
||||
- definition: io.k8s.api.core.v1.Toleration
|
||||
field_categories:
|
||||
- fields:
|
||||
- key
|
||||
- operator
|
||||
- value
|
||||
- effect
|
||||
- tolerationSeconds
|
||||
|
||||
- definition: io.k8s.api.core.v1.PodStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- nominatedNodeName
|
||||
- hostIP
|
||||
- startTime
|
||||
- phase
|
||||
- message
|
||||
- reason
|
||||
- podIP
|
||||
- podIPs
|
||||
- conditions
|
||||
- qosClass
|
||||
- initContainerStatuses
|
||||
- containerStatuses
|
||||
- ephemeralContainerStatuses
|
||||
|
||||
- definition: io.k8s.api.core.v1.Container
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- name: Image
|
||||
fields:
|
||||
- image
|
||||
- imagePullPolicy
|
||||
- name: Entrypoint
|
||||
fields:
|
||||
- command
|
||||
- args
|
||||
- workingDir
|
||||
- name: Ports
|
||||
fields:
|
||||
- ports
|
||||
- name: Environment variables
|
||||
fields:
|
||||
- env
|
||||
- envFrom
|
||||
- name: Volumes
|
||||
fields:
|
||||
- volumeMounts
|
||||
- volumeDevices
|
||||
- name: Resources
|
||||
fields:
|
||||
- resources
|
||||
- name: Lifecycle
|
||||
fields:
|
||||
- lifecycle
|
||||
- terminationMessagePath
|
||||
- terminationMessagePolicy
|
||||
- livenessProbe
|
||||
- readinessProbe
|
||||
- startupProbe
|
||||
- name: Security Context
|
||||
fields:
|
||||
- securityContext
|
||||
- name: Debugging
|
||||
fields:
|
||||
- stdin
|
||||
- stdinOnce
|
||||
- tty
|
||||
|
||||
- definition: io.k8s.api.core.v1.Probe
|
||||
field_categories:
|
||||
- fields:
|
||||
- exec
|
||||
- httpGet
|
||||
- tcpSocket
|
||||
- initialDelaySeconds
|
||||
- terminationGracePeriodSeconds
|
||||
- periodSeconds
|
||||
- timeoutSeconds
|
||||
- failureThreshold
|
||||
- successThreshold
|
||||
|
||||
- definition: io.k8s.api.core.v1.SecurityContext
|
||||
field_categories:
|
||||
- fields:
|
||||
- runAsUser
|
||||
- runAsNonRoot
|
||||
- runAsGroup
|
||||
- readOnlyRootFilesystem
|
||||
- procMount
|
||||
- privileged
|
||||
- allowPrivilegeEscalation
|
||||
- capabilities
|
||||
- seccompProfile
|
||||
- seLinuxOptions
|
||||
- windowsOptions
|
||||
|
||||
- definition: io.k8s.api.core.v1.ContainerStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- image
|
||||
- imageID
|
||||
- containerID
|
||||
- state
|
||||
- lastState
|
||||
- ready
|
||||
- restartCount
|
||||
- started
|
||||
|
||||
- definition: io.k8s.api.core.v1.ContainerStateTerminated
|
||||
field_categories:
|
||||
- fields:
|
||||
- containerID
|
||||
- exitCode
|
||||
- startedAt
|
||||
- finishedAt
|
||||
- message
|
||||
- reason
|
||||
- signal
|
||||
|
||||
- definition: io.k8s.api.core.v1.EphemeralContainer
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- targetContainerName
|
||||
- name: Image
|
||||
fields:
|
||||
- image
|
||||
- imagePullPolicy
|
||||
- name: Entrypoint
|
||||
fields:
|
||||
- command
|
||||
- args
|
||||
- workingDir
|
||||
- name: Environment variables
|
||||
fields:
|
||||
- env
|
||||
- envFrom
|
||||
- name: Volumes
|
||||
fields:
|
||||
- volumeMounts
|
||||
- volumeDevices
|
||||
- name: Lifecycle
|
||||
fields:
|
||||
- terminationMessagePath
|
||||
- terminationMessagePolicy
|
||||
- name: Debugging
|
||||
fields:
|
||||
- stdin
|
||||
- stdinOnce
|
||||
- tty
|
||||
- name: Not allowed
|
||||
fields:
|
||||
- ports
|
||||
- resources
|
||||
- lifecycle
|
||||
- livenessProbe
|
||||
- readinessProbe
|
||||
- securityContext
|
||||
- startupProbe
|
||||
|
||||
- definition: io.k8s.api.core.v1.ReplicationControllerSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- selector
|
||||
- template
|
||||
- replicas
|
||||
- minReadySeconds
|
||||
|
||||
- definition: io.k8s.api.core.v1.ReplicationControllerStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- replicas
|
||||
- availableReplicas
|
||||
- readyReplicas
|
||||
- fullyLabeledReplicas
|
||||
- conditions
|
||||
- observedGeneration
|
||||
|
||||
- definition: io.k8s.api.apps.v1.ReplicaSetSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- selector
|
||||
- template
|
||||
- replicas
|
||||
- minReadySeconds
|
||||
|
||||
- definition: io.k8s.api.apps.v1.ReplicaSetStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- replicas
|
||||
- availableReplicas
|
||||
- readyReplicas
|
||||
- fullyLabeledReplicas
|
||||
- conditions
|
||||
- observedGeneration
|
||||
|
||||
- definition: io.k8s.api.apps.v1.DeploymentSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- selector
|
||||
- template
|
||||
- replicas
|
||||
- minReadySeconds
|
||||
- strategy
|
||||
- revisionHistoryLimit
|
||||
- progressDeadlineSeconds
|
||||
- paused
|
||||
|
||||
- definition: io.k8s.api.apps.v1.DeploymentStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- replicas
|
||||
- availableReplicas
|
||||
- readyReplicas
|
||||
- unavailableReplicas
|
||||
- updatedReplicas
|
||||
- collisionCount
|
||||
- conditions
|
||||
- observedGeneration
|
||||
|
||||
- definition: io.k8s.api.apps.v1.DeploymentStrategy
|
||||
field_categories:
|
||||
- fields:
|
||||
- type
|
||||
- rollingUpdate
|
||||
|
||||
- definition: io.k8s.api.apps.v1.StatefulSetSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- serviceName
|
||||
- selector
|
||||
- template
|
||||
- replicas
|
||||
- updateStrategy
|
||||
- podManagementPolicy
|
||||
- revisionHistoryLimit
|
||||
- volumeClaimTemplates
|
||||
- minReadySeconds
|
||||
|
||||
- definition: io.k8s.api.apps.v1.StatefulSetUpdateStrategy
|
||||
field_categories:
|
||||
- fields:
|
||||
- type
|
||||
- rollingUpdate
|
||||
|
||||
- definition: io.k8s.api.apps.v1.StatefulSetStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- replicas
|
||||
- readyReplicas
|
||||
- currentReplicas
|
||||
- updatedReplicas
|
||||
- availableReplicas
|
||||
- collisionCount
|
||||
- conditions
|
||||
- currentRevision
|
||||
- updateRevision
|
||||
- observedGeneration
|
||||
|
||||
- definition: io.k8s.api.apps.v1.DaemonSetSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- selector
|
||||
- template
|
||||
- minReadySeconds
|
||||
- updateStrategy
|
||||
- revisionHistoryLimit
|
||||
|
||||
- definition: io.k8s.api.apps.v1.DaemonSetUpdateStrategy
|
||||
field_categories:
|
||||
- fields:
|
||||
- type
|
||||
- rollingUpdate
|
||||
|
||||
- definition: io.k8s.api.apps.v1.DaemonSetStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- numberReady
|
||||
- numberAvailable
|
||||
- numberUnavailable
|
||||
- numberMisscheduled
|
||||
- desiredNumberScheduled
|
||||
- currentNumberScheduled
|
||||
- updatedNumberScheduled
|
||||
- collisionCount
|
||||
- conditions
|
||||
- observedGeneration
|
||||
|
||||
- definition: io.k8s.api.batch.v1.JobSpec
|
||||
field_categories:
|
||||
- name: Replicas
|
||||
fields:
|
||||
- template
|
||||
- parallelism
|
||||
- name: Lifecycle
|
||||
fields:
|
||||
- completions
|
||||
- completionMode
|
||||
- backoffLimit
|
||||
- activeDeadlineSeconds
|
||||
- ttlSecondsAfterFinished
|
||||
- suspend
|
||||
- name: Selector
|
||||
fields:
|
||||
- selector
|
||||
- manualSelector
|
||||
|
||||
- definition: io.k8s.api.batch.v1.JobStatus
|
||||
field_categories:
|
||||
- fields:
|
||||
- startTime
|
||||
- completionTime
|
||||
- active
|
||||
- failed
|
||||
- succeeded
|
||||
- completedIndexes
|
||||
- conditions
|
||||
- uncountedTerminatedPods
|
||||
|
||||
- definition: io.k8s.api.batch.v1.CronJobSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- jobTemplate
|
||||
- schedule
|
||||
- concurrencyPolicy
|
||||
- startingDeadlineSeconds
|
||||
- suspend
|
||||
- successfulJobsHistoryLimit
|
||||
- failedJobsHistoryLimit
|
||||
|
||||
- definition: io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- maxReplicas
|
||||
- scaleTargetRef
|
||||
- minReplicas
|
||||
- behavior
|
||||
- metrics
|
||||
|
||||
- definition: io.k8s.api.autoscaling.v2beta2.HPAScalingPolicy
|
||||
field_categories:
|
||||
- fields:
|
||||
- type
|
||||
- value
|
||||
- periodSeconds
|
||||
|
||||
- definition: io.k8s.api.core.v1.ServiceSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- selector
|
||||
- ports
|
||||
- type
|
||||
- ipFamilies
|
||||
- ipFamilyPolicy
|
||||
- clusterIP
|
||||
- clusterIPs
|
||||
- externalIPs
|
||||
- sessionAffinity
|
||||
- loadBalancerIP
|
||||
- loadBalancerSourceRanges
|
||||
- loadBalancerClass
|
||||
- externalName
|
||||
- externalTrafficPolicy
|
||||
- internalTrafficPolicy
|
||||
- healthCheckNodePort
|
||||
- publishNotReadyAddresses
|
||||
- sessionAffinityConfig
|
||||
- allocateLoadBalancerNodePorts
|
||||
|
||||
- definition: io.k8s.api.core.v1.ServicePort
|
||||
field_categories:
|
||||
- fields:
|
||||
- port
|
||||
- targetPort
|
||||
- protocol
|
||||
- name
|
||||
- nodePort
|
||||
- appProtocol
|
||||
|
||||
- definition: io.k8s.api.core.v1.EndpointSubset
|
||||
field_categories:
|
||||
- fields:
|
||||
- addresses
|
||||
- notReadyAddresses
|
||||
- ports
|
||||
|
||||
- definition: io.k8s.api.core.v1.EndpointPort
|
||||
field_categories:
|
||||
- fields:
|
||||
- port
|
||||
- protocol
|
||||
- name
|
||||
- appProtocol
|
||||
|
||||
- definition: io.k8s.api.discovery.v1.EndpointPort
|
||||
field_categories:
|
||||
- fields:
|
||||
- port
|
||||
- protocol
|
||||
- name
|
||||
- appProtocol
|
||||
|
||||
- definition: io.k8s.api.core.v1.Volume
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- name: Exposed Persistent volumes
|
||||
fields:
|
||||
- persistentVolumeClaim
|
||||
- name: Projections
|
||||
fields:
|
||||
- configMap
|
||||
- secret
|
||||
- downwardAPI
|
||||
- projected
|
||||
- name: Local / Temporary Directory
|
||||
fields:
|
||||
- emptyDir
|
||||
- hostPath
|
||||
- name: Persistent volumes
|
||||
fields:
|
||||
- awsElasticBlockStore
|
||||
- azureDisk
|
||||
- azureFile
|
||||
- cephfs
|
||||
- cinder
|
||||
- csi
|
||||
- fc
|
||||
- flexVolume
|
||||
- flocker
|
||||
- gcePersistentDisk
|
||||
- glusterfs
|
||||
- iscsi
|
||||
- nfs
|
||||
- photonPersistentDisk
|
||||
- portworxVolume
|
||||
- quobyte
|
||||
- rbd
|
||||
- scaleIO
|
||||
- storageos
|
||||
- vsphereVolume
|
||||
- name: Alpha level
|
||||
fields:
|
||||
- ephemeral
|
||||
- name: Deprecated
|
||||
fields:
|
||||
- gitRepo
|
||||
|
||||
- definition: io.k8s.api.core.v1.ConfigMapVolumeSource
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- optional
|
||||
- defaultMode
|
||||
- items
|
||||
|
||||
- definition: io.k8s.api.core.v1.SecretVolumeSource
|
||||
field_categories:
|
||||
- fields:
|
||||
- secretName
|
||||
- optional
|
||||
- defaultMode
|
||||
- items
|
||||
|
||||
- definition: io.k8s.api.core.v1.ConfigMapProjection
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- optional
|
||||
- items
|
||||
|
||||
- definition: io.k8s.api.core.v1.SecretProjection
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- optional
|
||||
- items
|
||||
|
||||
- definition: io.k8s.api.core.v1.ProjectedVolumeSource
|
||||
field_categories:
|
||||
- fields:
|
||||
- defaultMode
|
||||
- sources
|
||||
|
||||
- definition: io.k8s.api.core.v1.PersistentVolumeClaimSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- accessModes
|
||||
- selector
|
||||
- resources
|
||||
- volumeName
|
||||
- storageClassName
|
||||
- volumeMode
|
||||
- name: Alpha level
|
||||
fields:
|
||||
- dataSource
|
||||
- dataSourceRef
|
||||
|
||||
- definition: io.k8s.api.core.v1.PersistentVolumeSpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- accessModes
|
||||
- capacity
|
||||
- claimRef
|
||||
- mountOptions
|
||||
- nodeAffinity
|
||||
- persistentVolumeReclaimPolicy
|
||||
- storageClassName
|
||||
- volumeMode
|
||||
- name: Local
|
||||
fields:
|
||||
- hostPath
|
||||
- local
|
||||
- name: Persistent volumes
|
||||
fields:
|
||||
- awsElasticBlockStore
|
||||
- azureDisk
|
||||
- azureFile
|
||||
- cephfs
|
||||
- cinder
|
||||
- csi
|
||||
- fc
|
||||
- flexVolume
|
||||
- flocker
|
||||
- gcePersistentDisk
|
||||
- glusterfs
|
||||
- iscsi
|
||||
- nfs
|
||||
- photonPersistentDisk
|
||||
- portworxVolume
|
||||
- quobyte
|
||||
- rbd
|
||||
- scaleIO
|
||||
- storageos
|
||||
- vsphereVolume
|
||||
|
||||
- definition: io.k8s.api.rbac.v1.PolicyRule
|
||||
field_categories:
|
||||
- fields:
|
||||
- apiGroups
|
||||
- resources
|
||||
- verbs
|
||||
- resourceNames
|
||||
- nonResourceURLs
|
||||
|
||||
- definition: io.k8s.api.networking.v1.NetworkPolicySpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- podSelector
|
||||
- policyTypes
|
||||
- ingress
|
||||
- egress
|
||||
|
||||
- definition: io.k8s.api.networking.v1.NetworkPolicyEgressRule
|
||||
field_categories:
|
||||
- fields:
|
||||
- to
|
||||
- ports
|
||||
|
||||
- definition: io.k8s.api.networking.v1.NetworkPolicyPort
|
||||
field_categories:
|
||||
- fields:
|
||||
- port
|
||||
- endPort
|
||||
- protocol
|
||||
|
||||
- definition: io.k8s.api.policy.v1beta1.PodSecurityPolicySpec
|
||||
field_categories:
|
||||
- fields:
|
||||
- runAsUser
|
||||
- runAsGroup
|
||||
- fsGroup
|
||||
- supplementalGroups
|
||||
- seLinux
|
||||
- readOnlyRootFilesystem
|
||||
- privileged
|
||||
- allowPrivilegeEscalation
|
||||
- defaultAllowPrivilegeEscalation
|
||||
- allowedCSIDrivers
|
||||
- allowedCapabilities
|
||||
- requiredDropCapabilities
|
||||
- defaultAddCapabilities
|
||||
- allowedFlexVolumes
|
||||
- allowedHostPaths
|
||||
- allowedProcMountTypes
|
||||
- allowedUnsafeSysctls
|
||||
- forbiddenSysctls
|
||||
- hostIPC
|
||||
- hostNetwork
|
||||
- hostPID
|
||||
- hostPorts
|
||||
- runtimeClass
|
||||
- volumes
|
||||
|
||||
- definition: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
|
||||
field_categories:
|
||||
- fields:
|
||||
- name
|
||||
- generateName
|
||||
- namespace
|
||||
- labels
|
||||
- annotations
|
||||
- name: System
|
||||
fields:
|
||||
- finalizers
|
||||
- managedFields
|
||||
- ownerReferences
|
||||
- name: Read-only
|
||||
fields:
|
||||
- creationTimestamp
|
||||
- deletionGracePeriodSeconds
|
||||
- deletionTimestamp
|
||||
- generation
|
||||
- resourceVersion
|
||||
- selfLink
|
||||
- uid
|
||||
- name: Ignored
|
||||
fields:
|
||||
- clusterName
|
||||
@@ -0,0 +1,267 @@
|
||||
# Copyright 2016 The Kubernetes Authors.
|
||||
# Copyright 2020 Philippe Martin
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
parts:
|
||||
- name: Workload Resources
|
||||
chapters:
|
||||
- name: Pod
|
||||
group: ""
|
||||
version: v1
|
||||
otherDefinitions:
|
||||
- PodSpec
|
||||
- Container
|
||||
- EphemeralContainer
|
||||
- Handler
|
||||
- NodeAffinity
|
||||
- PodAffinity
|
||||
- PodAntiAffinity
|
||||
- Probe
|
||||
- PodStatus
|
||||
- PodList
|
||||
- name: PodTemplate
|
||||
group: ""
|
||||
version: v1
|
||||
- name: ReplicationController
|
||||
group: ""
|
||||
version: v1
|
||||
- name: ReplicaSet
|
||||
group: apps
|
||||
version: v1
|
||||
- name: Deployment
|
||||
group: apps
|
||||
version: v1
|
||||
- name: StatefulSet
|
||||
group: apps
|
||||
version: v1
|
||||
- name: ControllerRevision
|
||||
group: apps
|
||||
version: v1
|
||||
- name: DaemonSet
|
||||
group: apps
|
||||
version: v1
|
||||
- name: Job
|
||||
group: batch
|
||||
version: v1
|
||||
- name: CronJob
|
||||
group: batch
|
||||
version: v1
|
||||
- name: HorizontalPodAutoscaler
|
||||
group: autoscaling
|
||||
version: v1
|
||||
- name: HorizontalPodAutoscaler
|
||||
group: autoscaling
|
||||
version: v2beta2
|
||||
- name: PriorityClass
|
||||
group: scheduling.k8s.io
|
||||
version: v1
|
||||
- name: Service Resources
|
||||
chapters:
|
||||
- name: Service
|
||||
group: ""
|
||||
version: v1
|
||||
- name: Endpoints
|
||||
group: ""
|
||||
version: v1
|
||||
- name: EndpointSlice
|
||||
group: discovery.k8s.io
|
||||
version: v1
|
||||
- name: Ingress
|
||||
group: networking.k8s.io
|
||||
version: v1
|
||||
otherDefinitions:
|
||||
- IngressSpec
|
||||
- IngressBackend
|
||||
- IngressStatus
|
||||
- IngressList
|
||||
- name: IngressClass
|
||||
group: networking.k8s.io
|
||||
version: v1
|
||||
- name: Config and Storage Resources
|
||||
chapters:
|
||||
- name: ConfigMap
|
||||
group: ""
|
||||
version: v1
|
||||
- name: Secret
|
||||
group: ""
|
||||
version: v1
|
||||
- name: Volume
|
||||
key: io.k8s.api.core.v1.Volume
|
||||
otherDefinitions:
|
||||
- DownwardAPIVolumeFile
|
||||
- KeyToPath
|
||||
- name: PersistentVolumeClaim
|
||||
group: ""
|
||||
version: v1
|
||||
- name: PersistentVolume
|
||||
group: ""
|
||||
version: v1
|
||||
- name: StorageClass
|
||||
group: storage.k8s.io
|
||||
version: v1
|
||||
- name: VolumeAttachment
|
||||
group: storage.k8s.io
|
||||
version: v1
|
||||
- name: CSIDriver
|
||||
group: storage.k8s.io
|
||||
version: v1
|
||||
- name: CSINode
|
||||
group: storage.k8s.io
|
||||
version: v1
|
||||
- name: CSIStorageCapacity
|
||||
group: storage.k8s.io
|
||||
version: v1beta1
|
||||
- name: Authentication Resources
|
||||
chapters:
|
||||
- name: ServiceAccount
|
||||
group: ""
|
||||
version: v1
|
||||
- name: TokenRequest
|
||||
group: authentication.k8s.io
|
||||
version: v1
|
||||
- name: TokenReview
|
||||
group: authentication.k8s.io
|
||||
version: v1
|
||||
- name: CertificateSigningRequest
|
||||
group: certificates.k8s.io
|
||||
version: v1
|
||||
- name: Authorization Resources
|
||||
chapters:
|
||||
- name: LocalSubjectAccessReview
|
||||
group: authorization.k8s.io
|
||||
version: v1
|
||||
- name: SelfSubjectAccessReview
|
||||
group: authorization.k8s.io
|
||||
version: v1
|
||||
- name: SelfSubjectRulesReview
|
||||
group: authorization.k8s.io
|
||||
version: v1
|
||||
- name: SubjectAccessReview
|
||||
group: authorization.k8s.io
|
||||
version: v1
|
||||
- name: ClusterRole
|
||||
group: rbac.authorization.k8s.io
|
||||
version: v1
|
||||
- name: ClusterRoleBinding
|
||||
group: rbac.authorization.k8s.io
|
||||
version: v1
|
||||
- name: Role
|
||||
group: rbac.authorization.k8s.io
|
||||
version: v1
|
||||
- name: RoleBinding
|
||||
group: rbac.authorization.k8s.io
|
||||
version: v1
|
||||
- name: Policy Resources
|
||||
chapters:
|
||||
- name: LimitRange
|
||||
group: ""
|
||||
version: v1
|
||||
- name: ResourceQuota
|
||||
group: ""
|
||||
version: v1
|
||||
- name: NetworkPolicy
|
||||
group: networking.k8s.io
|
||||
version: v1
|
||||
- name: PodDisruptionBudget
|
||||
group: policy
|
||||
version: v1
|
||||
- name: PodSecurityPolicy
|
||||
group: policy
|
||||
version: v1beta1
|
||||
- name: Extend Resources
|
||||
chapters:
|
||||
- name: CustomResourceDefinition
|
||||
group: apiextensions.k8s.io
|
||||
version: v1
|
||||
otherDefinitions:
|
||||
- CustomResourceDefinitionSpec
|
||||
- JSONSchemaProps
|
||||
- CustomResourceDefinitionStatus
|
||||
- CustomResourceDefinitionList
|
||||
- name: MutatingWebhookConfiguration
|
||||
group: admissionregistration.k8s.io
|
||||
version: v1
|
||||
- name: ValidatingWebhookConfiguration
|
||||
group: admissionregistration.k8s.io
|
||||
version: v1
|
||||
- name: Cluster Resources
|
||||
chapters:
|
||||
- name: Node
|
||||
group: ""
|
||||
version: v1
|
||||
- name: Namespace
|
||||
group: ""
|
||||
version: v1
|
||||
- name: Event
|
||||
group: events.k8s.io
|
||||
version: v1
|
||||
- name: APIService
|
||||
group: apiregistration.k8s.io
|
||||
version: v1
|
||||
- name: Lease
|
||||
group: coordination.k8s.io
|
||||
version: v1
|
||||
- name: RuntimeClass
|
||||
group: node.k8s.io
|
||||
version: v1
|
||||
- name: FlowSchema
|
||||
group: flowcontrol.apiserver.k8s.io
|
||||
version: v1beta1
|
||||
- name: PriorityLevelConfiguration
|
||||
group: flowcontrol.apiserver.k8s.io
|
||||
version: v1beta1
|
||||
- name: Binding
|
||||
group: ""
|
||||
version: v1
|
||||
- name: ComponentStatus
|
||||
group: ""
|
||||
version: v1
|
||||
- name: Common Definitions
|
||||
chapters:
|
||||
- name: DeleteOptions
|
||||
key: io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions
|
||||
- name: LabelSelector
|
||||
key: io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector
|
||||
- name: ListMeta
|
||||
key: io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta
|
||||
- name: LocalObjectReference
|
||||
key: io.k8s.api.core.v1.LocalObjectReference
|
||||
- name: NodeSelectorRequirement
|
||||
key: io.k8s.api.core.v1.NodeSelectorRequirement
|
||||
- name: ObjectFieldSelector
|
||||
key: io.k8s.api.core.v1.ObjectFieldSelector
|
||||
- name: ObjectMeta
|
||||
key: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
|
||||
- name: ObjectReference
|
||||
key: io.k8s.api.core.v1.ObjectReference
|
||||
- name: Patch
|
||||
key: io.k8s.apimachinery.pkg.apis.meta.v1.Patch
|
||||
- name: Quantity
|
||||
key: "io.k8s.apimachinery.pkg.api.resource.Quantity"
|
||||
- name: ResourceFieldSelector
|
||||
key: io.k8s.api.core.v1.ResourceFieldSelector
|
||||
- name: Status
|
||||
key: io.k8s.apimachinery.pkg.apis.meta.v1.Status
|
||||
- name: TypedLocalObjectReference
|
||||
key: io.k8s.api.core.v1.TypedLocalObjectReference
|
||||
skippedResources:
|
||||
- APIGroup
|
||||
- APIGroupList
|
||||
- APIResourceList
|
||||
- APIVersions
|
||||
- Eviction
|
||||
- Scale
|
||||
- Status
|
||||
- StorageVersion
|
||||
- StorageVersionList
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
api_metadata:
|
||||
apiVersion: "{{.ApiVersion}}"
|
||||
import: "{{.Import}}"
|
||||
kind: "{{.Kind}}"
|
||||
content_type: "api_reference"
|
||||
description: "{{.Metadata.Description}}"
|
||||
title: "{{.Metadata.Title}}"
|
||||
weight: {{.Metadata.Weight}}
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
<!--
|
||||
The file is auto-generated from the Go source code of the component using a generic
|
||||
[generator](https://github.com/kubernetes-sigs/reference-docs/). To learn how
|
||||
to generate the reference documentation, please read
|
||||
[Contributing to the reference documentation](/docs/contribute/generate-ref-docs/).
|
||||
To update the reference content, please follow the
|
||||
[Contributing upstream](/docs/contribute/generate-ref-docs/contribute-upstream/)
|
||||
guide. You can file document formatting bugs against the
|
||||
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
|
||||
-->
|
||||
|
||||
{{if .ApiVersion}}`apiVersion: {{.ApiVersion}}`{{end}}
|
||||
|
||||
{{if .Import}}`import "{{.Import}}"`{{end}}
|
||||
|
||||
{{range .Sections}}
|
||||
{{.Description | replace "<" "\\<" }}
|
||||
|
||||
<hr>
|
||||
{{range .Fields}}
|
||||
{{ "" | indent .Indent | indent .Indent}}- {{.Name}}{{if .Value}}: {{.Value}}{{end}}
|
||||
{{if .Description}}
|
||||
{{.Description | replace "<" "\\<" | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{- end}}
|
||||
{{if .TypeDefinition}}
|
||||
{{ "" | indent .Indent | indent .Indent}} <a name="{{.Type}}"></a>
|
||||
{{.TypeDefinition | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{end}}
|
||||
{{- end}}{{/* range .Fields */}}
|
||||
|
||||
{{range .FieldCategories}}
|
||||
### {{.Name}} {#{{"-" | regexReplaceAll "[^a-zA-Z0-9]+" .Name }}}{{/* explicitly set fragment to keep capitalization */}}
|
||||
|
||||
{{range .Fields}}
|
||||
{{ "" | indent .Indent | indent .Indent}}- {{.Name}}{{if .Value}}: {{.Value}}{{end}}
|
||||
{{if .Description}}
|
||||
{{.Description | replace "<" "\\<" | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{- end}}
|
||||
{{if .TypeDefinition}}
|
||||
{{ "" | indent .Indent | indent .Indent}} <a name="{{.Type}}"></a>
|
||||
{{.TypeDefinition | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{end}}
|
||||
{{- end}}{{/* range .Fields */}}
|
||||
|
||||
{{- end}}{{/* range .FieldCategories */}}
|
||||
|
||||
{{range .Operations}}
|
||||
|
||||
### `{{.Verb}}` {{.Title}}
|
||||
|
||||
#### HTTP Request
|
||||
|
||||
{{.RequestMethod}} {{.RequestPath}}
|
||||
|
||||
#### Parameters
|
||||
|
||||
{{range .Parameters}}
|
||||
- {{.Title}}
|
||||
|
||||
{{.Description | indent 2}}
|
||||
|
||||
{{end}}{{/* range .Parameters */}}
|
||||
|
||||
#### Response
|
||||
|
||||
{{range .Responses}}
|
||||
{{.Code}}{{if .Type}} ({{.Type}}){{end}}: {{.Description}}
|
||||
{{end}}{{/* range .Responses */}}
|
||||
|
||||
{{- end}}{{/* range .Operations */}}
|
||||
{{- end}}{{/* range .Sections */}}
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
api_metadata:
|
||||
apiVersion: "{{.ApiVersion}}"
|
||||
import: "{{.Import}}"
|
||||
kind: "{{.Kind}}"
|
||||
content_type: "api_reference"
|
||||
description: "{{.Metadata.Description}}"
|
||||
title: "{{.Metadata.Title}}"
|
||||
weight: {{.Metadata.Weight}}
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
<!--
|
||||
The file is auto-generated from the Go source code of the component using a generic
|
||||
[generator](https://github.com/kubernetes-sigs/reference-docs/). To learn how
|
||||
to generate the reference documentation, please read
|
||||
[Contributing to the reference documentation](/docs/contribute/generate-ref-docs/).
|
||||
To update the reference content, please follow the
|
||||
[Contributing upstream](/docs/contribute/generate-ref-docs/contribute-upstream/)
|
||||
guide. You can file document formatting bugs against the
|
||||
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
|
||||
-->
|
||||
|
||||
{{if .ApiVersion}}`apiVersion: {{.ApiVersion}}`{{end}}
|
||||
|
||||
{{if .Import}}`import "{{.Import}}"`{{end}}
|
||||
|
||||
{{range .Sections}}
|
||||
## {{.Name}} {#{{"-" | regexReplaceAll "[^a-zA-Z0-9]+" .Name }}}{{/* explicitly set fragment to keep capitalization */}}
|
||||
|
||||
{{.Description | replace "<" "\\<" }}
|
||||
|
||||
<hr>
|
||||
{{range .Fields}}
|
||||
{{ "" | indent .Indent | indent .Indent}}- {{.Name}}{{if .Value}}: {{.Value}}{{end}}
|
||||
{{if .Description}}
|
||||
{{.Description | replace "<" "\\<" | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{- end}}
|
||||
{{if .TypeDefinition}}
|
||||
{{ "" | indent .Indent | indent .Indent}} <a name="{{.Type}}"></a>
|
||||
{{.TypeDefinition | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{end}}
|
||||
{{- end}}{{/* range .Fields */}}
|
||||
|
||||
{{range .FieldCategories}}
|
||||
### {{.Name}}
|
||||
|
||||
{{range .Fields}}
|
||||
{{ "" | indent .Indent | indent .Indent}}- {{.Name}}{{if .Value}}: {{.Value}}{{end}}
|
||||
{{if .Description}}
|
||||
{{.Description | replace "<" "\\<" | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{- end}}
|
||||
{{if .TypeDefinition}}
|
||||
{{ "" | indent .Indent | indent .Indent}} <a name="{{.Type}}"></a>
|
||||
{{.TypeDefinition | indent 2 | indent .Indent | indent .Indent}}
|
||||
{{end}}
|
||||
{{- end}}{{/* range .Fields */}}
|
||||
|
||||
{{- end}}{{/* range .FieldCategories */}}
|
||||
|
||||
{{range .Operations}}
|
||||
|
||||
### `{{.Verb}}` {{.Title}}
|
||||
|
||||
#### HTTP Request
|
||||
|
||||
{{.RequestMethod}} {{.RequestPath}}
|
||||
|
||||
#### Parameters
|
||||
|
||||
{{range .Parameters}}
|
||||
- {{.Title}}
|
||||
|
||||
{{.Description | indent 2}}
|
||||
|
||||
{{end}}{{/* range .Parameters */}}
|
||||
|
||||
#### Response
|
||||
|
||||
{{range .Responses}}
|
||||
{{.Code}}{{if .Type}} ({{.Type}}){{end}}: {{.Description}}
|
||||
{{end}}{{/* range .Responses */}}
|
||||
|
||||
{{- end}}{{/* range .Operations */}}
|
||||
{{- end}}{{/* range .Sections */}}
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "{{.Title}}"
|
||||
weight: {{.Weight}}
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
<!--
|
||||
The file is auto-generated from the Go source code of the component using a generic
|
||||
[generator](https://github.com/kubernetes-sigs/reference-docs/). To learn how
|
||||
to generate the reference documentation, please read
|
||||
[Contributing to the reference documentation](/docs/contribute/generate-ref-docs/).
|
||||
To update the reference content, please follow the
|
||||
[Contributing upstream](/docs/contribute/generate-ref-docs/contribute-upstream/)
|
||||
guide. You can file document formatting bugs against the
|
||||
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
|
||||
-->
|
||||
|
||||
+22
-23
@@ -138,12 +138,12 @@ time_format_default = "January 02, 2006 at 3:04 PM PST"
|
||||
description = "Production-Grade Container Orchestration"
|
||||
showedit = true
|
||||
|
||||
latest = "v1.21"
|
||||
latest = "v1.22"
|
||||
|
||||
fullversion = "v1.21.0"
|
||||
version = "v1.21"
|
||||
githubbranch = "master"
|
||||
docsbranch = "master"
|
||||
fullversion = "v1.22.0"
|
||||
version = "v1.22"
|
||||
githubbranch = "main"
|
||||
docsbranch = "main"
|
||||
deprecated = false
|
||||
currentUrl = "https://kubernetes.io/docs/home/"
|
||||
nextUrl = "https://kubernetes-io-vnext-staging.netlify.com/"
|
||||
@@ -178,41 +178,40 @@ js = [
|
||||
]
|
||||
|
||||
[[params.versions]]
|
||||
fullversion = "v1.21.0"
|
||||
version = "v1.21"
|
||||
githubbranch = "v1.21.0"
|
||||
docsbranch = "master"
|
||||
fullversion = "v1.22.0"
|
||||
version = "v1.22"
|
||||
githubbranch = "v1.22.0"
|
||||
docsbranch = "main"
|
||||
url = "https://kubernetes.io"
|
||||
|
||||
[[params.versions]]
|
||||
fullversion = "v1.20.5"
|
||||
fullversion = "v1.21.4"
|
||||
version = "v1.21"
|
||||
githubbranch = "v1.21.4"
|
||||
docsbranch = "release-1.21"
|
||||
url = "https://v1-21.docs.kubernetes.io"
|
||||
|
||||
[[params.versions]]
|
||||
fullversion = "v1.20.10"
|
||||
version = "v1.20"
|
||||
githubbranch = "v1.20.5"
|
||||
githubbranch = "v1.20.10"
|
||||
docsbranch = "release-1.20"
|
||||
url = "https://v1-20.docs.kubernetes.io"
|
||||
|
||||
[[params.versions]]
|
||||
fullversion = "v1.19.9"
|
||||
fullversion = "v1.19.14"
|
||||
version = "v1.19"
|
||||
githubbranch = "v1.19.9"
|
||||
githubbranch = "v1.19.14"
|
||||
docsbranch = "release-1.19"
|
||||
url = "https://v1-19.docs.kubernetes.io"
|
||||
|
||||
[[params.versions]]
|
||||
fullversion = "v1.18.17"
|
||||
fullversion = "v1.18.20"
|
||||
version = "v1.18"
|
||||
githubbranch = "v1.18.17"
|
||||
githubbranch = "v1.18.20"
|
||||
docsbranch = "release-1.18"
|
||||
url = "https://v1-18.docs.kubernetes.io"
|
||||
|
||||
[[params.versions]]
|
||||
fullversion = "v1.17.17"
|
||||
version = "v1.17"
|
||||
githubbranch = "v1.17.17"
|
||||
docsbranch = "release-1.17"
|
||||
url = "https://v1-17.docs.kubernetes.io"
|
||||
|
||||
|
||||
# User interface configuration
|
||||
[params.ui]
|
||||
# Enable to show the side bar menu in its compact state.
|
||||
|
||||
@@ -9,7 +9,7 @@ cid: home
|
||||
{{% blocks/feature image="flower" %}}
|
||||
### [Kubernetes (K8s)]({{< relref "/docs/concepts/overview/what-is-kubernetes" >}}) ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen.
|
||||
|
||||
Es gruppiert Container, aus denen sich eine Anwendung zusammensetzt, in logische Einheiten, um die Verwaltung und Erkennung zu erleichtern. Kubernetes baut auf [15 Jahre Erfahrung in Bewältigung von Produktions-Workloads bei Google] (http://queue.acm.org/detail.cfm?id=2898444), kombiniert mit Best-of-Breed-Ideen und Praktiken aus der Community.
|
||||
Es gruppiert Container, aus denen sich eine Anwendung zusammensetzt, in logische Einheiten, um die Verwaltung und Erkennung zu erleichtern. Kubernetes baut auf [15 Jahre Erfahrung in Bewältigung von Produktions-Workloads bei Google](http://queue.acm.org/detail.cfm?id=2898444), kombiniert mit Best-of-Breed-Ideen und Praktiken aus der Community.
|
||||
{{% /blocks/feature %}}
|
||||
|
||||
{{% blocks/feature image="scalable" %}}
|
||||
@@ -57,4 +57,4 @@ Kubernetes ist Open Source und bietet Dir die Freiheit, die Infrastruktur vor Or
|
||||
|
||||
{{< blocks/kubernetes-features >}}
|
||||
|
||||
{{< blocks/case-studies >}}
|
||||
{{< blocks/case-studies >}}
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
---
|
||||
layout: blog
|
||||
title: 'Kubernetes 1.22: Reaching New Peaks'
|
||||
date: 2021-08-04
|
||||
slug: kubernetes-1-22-release-announcement
|
||||
---
|
||||
|
||||
**Authors:** [Kubernetes 1.22 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.22/release-team.md)
|
||||
|
||||
We’re pleased to announce the release of Kubernetes 1.22, the second release of 2021!
|
||||
|
||||
This release consists of 53 enhancements: 13 enhancements have graduated to stable, 24 enhancements are moving to beta, and 16 enhancements are entering alpha. Also, three features have been deprecated.
|
||||
|
||||
In April of this year, the Kubernetes release cadence was officially changed from four to three releases yearly. This is the first longer-cycle release related to that change. As the Kubernetes project matures, the number of enhancements per cycle grows. This means more work, from version to version, for the contributor community and Release Engineering team, and it can put pressure on the end-user community to stay up-to-date with releases containing increasingly more features.
|
||||
|
||||
Changing the release cadence from four to three releases yearly balances many aspects of the project, both in how contributions and releases are managed, and also in the community's ability to plan for upgrades and stay up to date.
|
||||
|
||||
You can read more in the official blog post [Kubernetes Release Cadence Change: Here’s What You Need To Know](https://kubernetes.io/blog/2021/07/20/new-kubernetes-release-cadence/).
|
||||
|
||||
|
||||
## Major Themes
|
||||
|
||||
### Server-side Apply graduates to GA
|
||||
|
||||
[Server-side Apply](https://kubernetes.io/docs/reference/using-api/server-side-apply/) is a new field ownership and object merge algorithm running on the Kubernetes API server. Server-side Apply helps users and controllers manage their resources via declarative configurations. It allows them to create and/or modify their objects declaratively, simply by sending their fully specified intent. After being in beta for a couple releases, Server-side Apply is now generally available.
|
||||
|
||||
### External credential providers now stable
|
||||
|
||||
Support for Kubernetes client [credential plugins](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins) has been in beta since 1.11, and with the release of Kubernetes 1.22 now graduates to stable. The GA feature set includes improved support for plugins that provide interactive login flows, as well as a number of bug fixes. Aspiring plugin authors can look at [sample-exec-plugin](https://github.com/ankeesler/sample-exec-plugin) to get started.
|
||||
|
||||
### etcd moves to 3.5.0
|
||||
|
||||
Kubernetes' default backend storage, etcd, has a new release: 3.5.0. The new release comes with improvements to the security, performance, monitoring, and developer experience. There are numerous bug fixes and some critical new features like the migration to structured logging and built-in log rotation. The release comes with a detailed future roadmap to implement a solution to traffic overload. You can read a full and detailed list of changes in the [3.5.0 release announcement](https://etcd.io/blog/2021/announcing-etcd-3.5/).
|
||||
|
||||
### Quality of Service for memory resources
|
||||
|
||||
Originally, Kubernetes used the v1 cgroups API. With that design, the QoS class for a `Pod` only applied to CPU resources (such as `cpu_shares`). As an alpha feature, Kubernetes v1.22 can now use the cgroups v2 API to control memory allocation and isolation. This feature is designed to improve workload and node availability when there is contention for memory resources, and to improve the predictability of container lifecycle.
|
||||
|
||||
### Node system swap support
|
||||
|
||||
Every system administrator or Kubernetes user has been in the same boat regarding setting up and using Kubernetes: disable swap space. With the release of Kubernetes 1.22, alpha support is available to run nodes with swap memory. This change lets administrators opt in to configuring swap on Linux nodes, treating a portion of block storage as additional virtual memory.
|
||||
|
||||
### Windows enhancements and capabilities
|
||||
|
||||
Continuing to support the growing developer community, SIG Windows has released their [Development Environment](https://github.com/kubernetes-sigs/sig-windows-dev-tools/). These new tools support multiple CNI providers and can run on multiple platforms. There is also a new way to run bleeding-edge Windows features from scratch by compiling the Windows kubelet and kube-proxy, then using them along with daily builds of other Kubernetes components.
|
||||
|
||||
CSI support for Windows nodes moves to GA in the 1.22 release. In Kubernetes v1.22, Windows privileged containers are an alpha feature. To allow using CSI storage on Windows nodes, [CSIProxy](https://github.com/kubernetes-csi/csi-proxy) enables CSI node plugins to be deployed as unprivileged pods, using the proxy to perform privileged storage operations on the node.
|
||||
|
||||
### Default profiles for seccomp
|
||||
|
||||
An alpha feature for default seccomp profiles has been added to the kubelet, along with a new command line flag and configuration. When in use, this new feature provides cluster-wide seccomp defaults, using the `RuntimeDefault` seccomp profile rather than `Unconfined` by default. This enhances the default security of the Kubernetes Deployment. Security administrators will now sleep better knowing that workloads are more secure by default. To learn more about the feature, please refer to the official [seccomp tutorial](https://kubernetes.io/docs/tutorials/clusters/seccomp/#enable-the-use-of-runtimedefault-as-the-default-seccomp-profile-for-all-workloads).
|
||||
|
||||
### More secure control plane with kubeadm
|
||||
|
||||
A new alpha feature allows running the `kubeadm` control plane components as non-root users. This is a long requested security measure in `kubeadm`. To try it you must enable the `kubeadm` specific RootlessControlPlane feature gate. When you deploy a cluster using this alpha feature, your control plane runs with lower privileges.
|
||||
|
||||
For `kubeadm`, Kubernetes 1.22 also brings a new [v1beta3 configuration API](/docs/reference/config-api/kubeadm-config.v1beta3/). This iteration adds some long requested features and deprecates some existing ones. The v1beta3 version is now the preferred API version; the v1beta2 API also remains available and is not yet deprecated.
|
||||
|
||||
## Major Changes
|
||||
|
||||
### Removal of several deprecated beta APIs
|
||||
|
||||
A number of deprecated beta APIs have been removed in 1.22 in favor of the GA version of those same APIs. All existing objects can be interacted with via stable APIs. This removal includes beta versions of the `Ingress`, `IngressClass`, `Lease`, `APIService`, `ValidatingWebhookConfiguration`, `MutatingWebhookConfiguration`, `CustomResourceDefinition`, `TokenReview`, `SubjectAccessReview`, and `CertificateSigningRequest` APIs.
|
||||
|
||||
For the full list, check out the [Deprecated API Migration Guide](https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22) as well as the blog post [Kubernetes API and Feature Removals In 1.22: Here’s What You Need To Know](https://blog.k8s.io/2021/07/14/upcoming-changes-in-kubernetes-1-22/).
|
||||
|
||||
### API changes and improvements for ephemeral containers
|
||||
|
||||
The API used to create [Ephemeral Containers](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/) changes in 1.22. The Ephemeral Containers feature is alpha and disabled by default, and the new API does not work with clients that attempt to use the old API.
|
||||
|
||||
For stable features, the kubectl tool follows the Kubernetes [version skew policy](https://kubernetes.io/releases/version-skew-policy/); however, kubectl v1.21 and older do not support the new API for ephemeral containers. If you plan to use `kubectl debug` to create ephemeral containers, and your cluster is running Kubernetes v1.22, you cannot do so with kubectl v1.21 or earlier. Please update kubectl to 1.22 if you wish to use `kubectl debug` with a mix of cluster versions.
|
||||
|
||||
## Other Updates
|
||||
|
||||
### Graduated to Stable
|
||||
|
||||
* [Bound Service Account Token Volumes](https://github.com/kubernetes/enhancements/issues/542)
|
||||
* [CSI Service Account Token](https://github.com/kubernetes/enhancements/issues/2047)
|
||||
* [Windows Support for CSI Plugins](https://github.com/kubernetes/enhancements/issues/1122)
|
||||
* [Warning mechanism for deprecated API use](https://github.com/kubernetes/enhancements/issues/1693)
|
||||
* [PodDisruptionBudget Eviction](https://github.com/kubernetes/enhancements/issues/85)
|
||||
|
||||
### Notable Feature Updates
|
||||
|
||||
* A new [PodSecurity admission](https://github.com/kubernetes/enhancements/issues/2579) alpha feature is introduced, intended as a replacement for PodSecurityPolicy
|
||||
* [The Memory Manager](https://github.com/kubernetes/enhancements/issues/1769) moves to beta
|
||||
* A new alpha feature to enable [API Server Tracing](https://github.com/kubernetes/enhancements/issues/647)
|
||||
* A new v1beta3 version of the [kubeadm configuration](https://github.com/kubernetes/enhancements/issues/970) format
|
||||
* [Generic data populators](https://github.com/kubernetes/enhancements/issues/1495) for PersistentVolumes are now available in alpha
|
||||
* The Kubernetes control plane will now always use the [CronJobs v2 controller](https://github.com/kubernetes/enhancements/issues/19)
|
||||
* As an alpha feature, all Kubernetes node components (including the kubelet, kube-proxy, and container runtime) can be [run as a non-root user](https://github.com/kubernetes/enhancements/issues/2033)
|
||||
|
||||
# Release notes
|
||||
|
||||
You can check out the full details of the 1.22 release in the [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md).
|
||||
|
||||
# Availability of release
|
||||
|
||||
Kubernetes 1.22 is [available for download](https://kubernetes.io/releases/download/) and also [on the GitHub project](https://github.com/kubernetes/kubernetes/releases/tag/v1.22.0).
|
||||
|
||||
There are some great resources out there for getting started with Kubernetes. You can check out some [interactive tutorials](https://kubernetes.io/docs/tutorials/) on the main Kubernetes site, or run a local cluster on your machine using Docker containers with [kind](https://kind.sigs.k8s.io). If you’d like to try building a cluster from scratch, check out the [Kubernetes the Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way) tutorial by Kelsey Hightower.
|
||||
|
||||
# Release Team
|
||||
|
||||
This release was made possible by a very dedicated group of individuals, who came together as a team to deliver technical content, documentation, code, and a host of other components that go into every Kubernetes release.
|
||||
|
||||
A huge thank you to the release lead Savitha Raghunathan for leading us through a successful release cycle, and to everyone else on the release team for supporting each other, and working so hard to deliver the 1.22 release for the community.
|
||||
|
||||
We would also like to take this opportunity to remember Peeyush Gupta, a member of our team that we lost earlier this year. Peeyush was actively involved in SIG ContribEx and the Kubernetes Release Team, most recently serving as the 1.22 Communications lead. His contributions and efforts will continue to reflect in the community he helped build. A [CNCF memorial](https://github.com/cncf/memorials/blob/main/peeyush-gupta.md) page has been created where thoughts and memories can be shared by the community.
|
||||
|
||||
# Release Logo
|
||||
|
||||

|
||||
|
||||
Amidst the ongoing pandemic, natural disasters, and ever-present shadow of burnout, the 1.22 release of Kubernetes includes 53 enhancements. This makes it the largest release to date. This accomplishment was only made possible due to the hard-working and passionate Release Team members and the amazing contributors of the Kubernetes ecosystem. The release logo is our reminder to keep reaching for new milestones and setting new records. And it is dedicated to all the Release Team members, hikers, and stargazers!
|
||||
|
||||
The logo is designed by [Boris Zotkin](https://www.instagram.com/boris.z.man/). Boris is a Mac/Linux Administrator at the MathWorks. He enjoys simple things in life and loves spending time with his family. This tech-savvy individual is always up for a challenge and happy to help a friend!
|
||||
|
||||
# User Highlights
|
||||
|
||||
- In May, the CNCF welcomed 27 new organizations across the globe as members of the diverse cloud native ecosystem. These new [members](https://www.cncf.io/announcements/2021/05/05/27-new-members-join-the-cloud-native-computing-foundation/) will participate in CNCF events, including the upcoming [KubeCon + CloudNativeCon NA in Los Angeles](https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/) from October 12 – 15, 2021.
|
||||
- The CNCF granted Spotify the [Top End User Award](https://www.cncf.io/announcements/2021/05/05/cloud-native-computing-foundation-grants-spotify-the-top-end-user-award/) during [KubeCon + CloudNativeCon EU – Virtual 2021](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/).
|
||||
|
||||
# Project Velocity
|
||||
|
||||
The [CNCF K8s DevStats project](https://k8s.devstats.cncf.io/) aggregates a number of interesting data points related to the velocity of Kubernetes and various sub-projects. This includes everything from individual contributions to the number of companies that are contributing, and is an illustration of the depth and breadth of effort that goes into evolving this ecosystem.
|
||||
|
||||
In the v1.22 release cycle, which ran for 15 weeks (April 26 to August 4), we saw contributions from [1063 companies](https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1&var-period_name=v1.21.0%20-%20now&var-metric=contributions) and [2054 individuals](https://k8s.devstats.cncf.io/d/66/developer-activity-counts-by-companies?orgId=1&var-period_name=v1.21.0%20-%20now&var-metric=contributions&var-repogroup_name=Kubernetes&var-country_name=All&var-companies=All).
|
||||
|
||||
# Ecosystem Updates
|
||||
|
||||
- [KubeCon + CloudNativeCon Europe 2021](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/) was held in May, the third such event to be virtual. All talks are [now available on-demand](https://www.youtube.com/playlist?list=PLj6h78yzYM2MqBm19mRz9SYLsw4kfQBrC) for anyone that would like to catch up!
|
||||
- [Spring Term LFX Program](https://www.cncf.io/blog/2021/07/13/spring-term-lfx-program-largest-graduating-class-with-28-successful-cncf-interns) had the largest graduating class with 28 successful CNCF interns!
|
||||
- CNCF launched [livestreaming on Twitch](https://www.cncf.io/blog/2021/06/03/cloud-native-community-goes-live-with-10-shows-on-twitch/) at the beginning of the year targeting definitive interactive media experience for anyone wanting to learn, grow, and collaborate with others in the Cloud Native community from anywhere in the world.
|
||||
|
||||
# Event Updates
|
||||
|
||||
- [KubeCon + CloudNativeCon North America 2021](https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/) will take place in Los Angeles, October 12 – 15, 2021! You can find more information about the conference and registration on the event site.
|
||||
- [Kubernetes Community Days](https://community.cncf.io/kubernetes-community-days/about-kcd/) has upcoming events scheduled in Italy, the UK, and in Washington DC.
|
||||
|
||||
# Upcoming release webinar
|
||||
|
||||
Join members of the Kubernetes 1.22 release team on September 7, 2021 to learn about the major features of this release, as well as deprecations and removals to help plan for upgrades. For more information and registration, visit the [event page](https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kubernetes-122-release/) on the CNCF Online Programs site.
|
||||
|
||||
# Get Involved
|
||||
|
||||
If you’re interested in contributing to the Kubernetes community, Special Interest Groups (SIGs) are a great starting point. Many of them may align with your interests! If there are things you’d like to share with the community, you can join the weekly community meeting, or use any of the following channels:
|
||||
|
||||
* Find out more about contributing to Kubernetes at the [Kubernetes Contributors](https://www.kubernetes.dev/) website.
|
||||
* Follow us on Twitter [@Kubernetesio](https://twitter.com/kubernetesio) for latest updates
|
||||
* Join the community discussion on [Discuss](https://discuss.kubernetes.io/)
|
||||
* Join the community on [Slack](http://slack.k8s.io/)
|
||||
* Share your Kubernetes [story](https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform)
|
||||
* Read more about what’s happening with Kubernetes on the [blog](https://kubernetes.io/blog/)
|
||||
* Learn more about the [Kubernetes Release Team](https://github.com/kubernetes/sig-release/tree/master/release-team)
|
||||
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
---
|
||||
layout: blog
|
||||
title: "Kubernetes 1.22: Server Side Apply moves to GA"
|
||||
date: 2021-08-06
|
||||
slug: server-side-apply-ga
|
||||
---
|
||||
|
||||
**Authors:** Jeffrey Ying, Google & Joe Betz, Google
|
||||
|
||||
Server-side Apply (SSA) has been promoted to GA in the Kubernetes v1.22 release. The GA milestone means you can depend on the feature and its API, without fear of future backwards-incompatible changes. GA features are protected by the Kubernetes [deprecation policy](/docs/reference/using-api/deprecation-policy/).
|
||||
|
||||
## What is Server-side Apply?
|
||||
|
||||
Server-side Apply helps users and controllers manage their resources through declarative configurations. Server-side Apply replaces the client side apply feature implemented by “kubectl apply” with a server-side implementation, permitting use by tools/clients other than kubectl. Server-side Apply is a new merging algorithm, as well as tracking of field ownership, running on the Kubernetes api-server. Server-side Apply enables new features like conflict detection, so the system knows when two actors are trying to edit the same field. Refer to the [Server-side Apply Documentation](/docs/reference/using-api/server-side-apply/) and [Beta 2 release announcement](https://kubernetes.io/blog/2020/04/01/kubernetes-1.18-feature-server-side-apply-beta-2/) for more information.
|
||||
|
||||
## What’s new since Beta?
|
||||
|
||||
Since the [Beta 2 release](https://kubernetes.io/blog/2020/04/01/kubernetes-1.18-feature-server-side-apply-beta-2/) subresources support has been added, and both client-go and Kubebuilder have added comprehensive support for Server-side Apply. This completes the Server-side Apply functionality required to make controller development practical.
|
||||
|
||||
### Support for subresources
|
||||
|
||||
Server-side Apply now fully supports subresources like `status` and `scale`. This is particularly important for [controllers](/docs/concepts/architecture/controller/), which are often responsible for writing to subresources.
|
||||
|
||||
## Server-side Apply support in client-go
|
||||
|
||||
Previously, Server-side Apply could only be called from the client-go typed client using the `Patch` function, with `PatchType` set to `ApplyPatchType`. Now, `Apply` functions are included in the client to allow for a more direct and typesafe way of calling Server-side Apply. Each `Apply` function takes an "apply configuration" type as an argument, which is a structured representation of an Apply request. For example:
|
||||
|
||||
```go
|
||||
import (
|
||||
...
|
||||
v1ac "k8s.io/client-go/applyconfigurations/autoscaling/v1"
|
||||
)
|
||||
|
||||
hpaApplyConfig := v1ac.HorizontalPodAutoscaler(autoscalerName, ns).
|
||||
WithSpec(v1ac.HorizontalPodAutoscalerSpec().
|
||||
WithMinReplicas(0)
|
||||
)
|
||||
|
||||
return hpav1client.Apply(ctx, hpaApplyConfig, metav1.ApplyOptions{FieldManager: "mycontroller", Force: true})
|
||||
```
|
||||
|
||||
Note in this example that `HorizontalPodAutoscaler` is imported from an "applyconfigurations" package. Each "apply configuration" type represents the same Kubernetes object kind as the corresponding go struct, but where all fields are pointers to make them optional, allowing apply requests to be accurately represented. For example, when the apply configuration in the above example is marshalled to YAML, it produces:
|
||||
|
||||
```yaml
|
||||
apiVersion: autoscaling/v1
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: myHPA
|
||||
namespace: myNamespace
|
||||
spec:
|
||||
minReplicas: 0
|
||||
```
|
||||
|
||||
To understand why this is needed, the above YAML cannot be produced by the v1.HorizontalPodAutoscaler go struct. Take for example:
|
||||
|
||||
```go
|
||||
hpa := v1.HorizontalPodAutoscaler{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
APIVersion: "autoscaling/v1",
|
||||
Kind: "HorizontalPodAutoscaler",
|
||||
},
|
||||
ObjectMeta: ObjectMeta{
|
||||
Namespace: ns,
|
||||
Name: autoscalerName,
|
||||
},
|
||||
Spec: v1.HorizontalPodAutoscalerSpec{
|
||||
MinReplicas: pointer.Int32Ptr(0),
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
The above code attempts to declare the same apply configuration as shown in the previous examples, but when marshalled to YAML, produces:
|
||||
|
||||
```yaml
|
||||
kind: HorizontalPodAutoscaler
|
||||
apiVersion: autoscaling/v1
|
||||
metadata
|
||||
name: myHPA
|
||||
namespace: myNamespace
|
||||
creationTimestamp: null
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
kind: ""
|
||||
name: ""
|
||||
minReplicas: 0
|
||||
maxReplicas: 0
|
||||
```
|
||||
|
||||
Which, among other things, contains `spec.maxReplicas` set to `0`. This is almost certainly not what the caller intended (the intended apply configuration says nothing about the `maxReplicas` field), and could have serious consequences on a production system: it directs the autoscaler to downscale to zero pods. The problem here originates from the fact that the go structs contain required fields that are zero valued if not set explicitly. The go structs work as intended for create and update operations, but are fundamentally incompatible with apply, which is why we have introduced the generated "apply configuration" types.
|
||||
|
||||
The "apply configurations" also have convenience `With<FieldName>` functions that make it easier to build apply requests. This allows developers to set fields without having to deal with the fact that all the fields in the "apply configuration" types are pointers, and are inconvenient to set using go. For example `MinReplicas: &0` is not legal go code, so without the `With` functions, developers would work around this problem by using a library, e.g. `MinReplicas: pointer.Int32Ptr(0)`, but string enumerations like `corev1.Protocol` are still a problem since they cannot be supported by a general purpose library. In addition to the convenience, the `With` functions also isolate developers from the underlying representation, which makes it safer for the underlying representation to be changed to support additional features in the future.
|
||||
|
||||
## Using Server-side Apply in a controller
|
||||
|
||||
You can use the new support for Server-side Apply no matter how you implemented your controller. However, the new client-go support makes it easier to use Server-side Apply in controllers.
|
||||
|
||||
When authoring new controllers to use Server-side Apply, a good approach is to have the controller recreate the apply configuration for an object each time it reconciles that object. This ensures that the controller fully reconciles all the fields that it is responsible for. Controllers typically should unconditionally set all the fields they own by setting `Force: true` in the `ApplyOptions`. Controllers must also provide a `FieldManager` name that is unique to the reconciliation loop that apply is called from.
|
||||
|
||||
When upgrading existing controllers to use Server-side Apply the same approach often works well--migrate the controllers to recreate the apply configuration each time it reconciles any object. Unfortunately, the controller might have multiple code paths that update different parts of an object depending on various conditions. Migrating a controller like this to Server-side Apply can be risky because if the controller forgets to include any fields in an apply configuration that is included in a previous apply request, a field can be accidently deleted. To ease this type of migration, client-go apply support provides a way to replace any controller reconciliation code that performs a "read/modify-in-place/update" (or patch) workflow with a "extract/modify-in-place/apply" workflow. Here's an example of the new workflow:
|
||||
|
||||
```go
|
||||
fieldMgr := "my-field-manager"
|
||||
deploymentClient := clientset.AppsV1().Deployments("default")
|
||||
|
||||
// read, could also be read from a shared informer
|
||||
deployment, err := deploymentClient.Get(ctx, "example-deployment", metav1.GetOptions{})
|
||||
if err != nil {
|
||||
// handle error
|
||||
}
|
||||
|
||||
// extract
|
||||
deploymentApplyConfig, err := appsv1ac.ExtractDeployment(deployment, fieldMgr)
|
||||
if err != nil {
|
||||
// handle error
|
||||
}
|
||||
|
||||
// modify-in-place
|
||||
deploymentApplyConfig.Spec.Template.Spec.WithContainers(corev1ac.Container().
|
||||
WithName("modify-slice").
|
||||
WithImage("nginx:1.14.2"),
|
||||
)
|
||||
|
||||
// apply
|
||||
applied, err := deploymentClient.Apply(ctx, extractedDeployment, metav1.ApplyOptions{FieldManager: fieldMgr})
|
||||
```
|
||||
|
||||
For developers using Custom Resource Definitions (CRDs), the Kubebuilder apply support will provide the same capabilities. Documentation will be included in the Kubebuilder book when available.
|
||||
|
||||
## Server-side Apply and CustomResourceDefinitions
|
||||
|
||||
It is strongly recommended that all [Custom Resource Definitions](/docs/concepts/extend-kubernetes/api-extension/custom-resources/) (CRDs) have a schema. CRDs without a schema are treated as unstructured data by Server-side Apply. Keys are treated as fields in a struct and lists are assumed to be atomic.
|
||||
|
||||
CRDs that specify a schema are able to specify additional annotations in the schema. Please refer to the documentation on the full list of available annotations.
|
||||
|
||||
New annotations since beta:
|
||||
|
||||
**Defaulting:** Values for fields that appliers do not express explicit interest in should be defaulted. This prevents an applier from unintentionally owning a defaulted field that might cause conflicts with other appliers. If unspecified, the default value is nil or the nil equivalent for the corresponding type.
|
||||
|
||||
- Usage: see the [CRD Defaulting](/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#defaulting) documentation for more details.
|
||||
- Golang: `+default=<value>`
|
||||
- OpenAPI extension: `default: <value>`
|
||||
|
||||
|
||||
Atomic for maps and structs:
|
||||
|
||||
**Maps:** By default maps are granular. A different manager is able to manage each map entry. They can also be configured to be atomic such that a single manager owns the entire map.
|
||||
|
||||
- Usage: Refer to [Merge Strategy](/docs/reference/using-api/server-side-apply/#merge-strategy) for a more detailed overview
|
||||
- Golang: `+mapType=granular/atomic`
|
||||
- OpenAPI extension: `x-kubernetes-map-type: granular/atomic`
|
||||
|
||||
**Structs:** By default structs are granular and a separate applier may own each field. For certain kinds of structs, atomicity may be desired. This is most commonly seen in small coordinate-like structs such as Field/Object/Namespace Selectors, Object References, RGB values, Endpoints (Protocol/Port pairs), etc.
|
||||
|
||||
- Usage: Refer to [Merge Strategy](/docs/reference/using-api/server-side-apply/#merge-strategy) for a more detailed overview
|
||||
- Golang: `+structType=granular/atomic`
|
||||
- OpenAPI extension: `x-kubernetes-map-type:atomic/granular`
|
||||
|
||||
## What's Next?
|
||||
|
||||
After Server Side Apply, the next focus for the API Expression working-group is around improving the expressiveness and size of the published Kubernetes API schema. To see the full list of items we are working on, please join our working group and refer to the work items document.
|
||||
|
||||
## How to get involved?
|
||||
|
||||
The working-group for apply is [wg-api-expression](https://github.com/kubernetes/community/tree/master/wg-api-expression). It is available on slack [#wg-api-expression](https://kubernetes.slack.com/archives/C0123CNN8F3), through the [mailing list](https://groups.google.com/g/kubernetes-wg-api-expression) and we also meet every other Tuesday at 9.30 PT on Zoom.
|
||||
|
||||
We would also like to use the opportunity to thank the hard work of all the contributors involved in making this promotion to GA possible:
|
||||
|
||||
- Andrea Nodari
|
||||
- Antoine Pelisse
|
||||
- Daniel Smith
|
||||
- Jeffrey Ying
|
||||
- Jenny Buckley
|
||||
- Joe Betz
|
||||
- Julian Modesto
|
||||
- Kevin Delgado
|
||||
- Kevin Wiesmüller
|
||||
- Maria Ntalla
|
||||
@@ -392,6 +392,49 @@ Failed pod objects will be preserved until explicitly deleted or [cleaned up by
|
||||
This is a change of behavior compared to abrupt node termination.
|
||||
{{< /note >}}
|
||||
|
||||
## Swap memory management {#swap-memory}
|
||||
|
||||
{{< feature-state state="alpha" for_k8s_version="v1.22" >}}
|
||||
|
||||
Prior to Kubernetes 1.22, nodes did not support the use of swap memory, and a
|
||||
kubelet would by default fail to start if swap was detected on a node. In 1.22
|
||||
onwards, swap memory support can be enabled on a per-node basis.
|
||||
|
||||
To enable swap on a node, the `NodeSwap` feature gate must be enabled on
|
||||
the kubelet, and the `--fail-swap-on` command line flag or `failSwapOn`
|
||||
[configuration setting](/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
|
||||
must be set to false.
|
||||
|
||||
A user can also optionally configure `memorySwap.swapBehavior` in order to
|
||||
specify how a node will use swap memory. For example,
|
||||
|
||||
```yaml
|
||||
memorySwap:
|
||||
swapBehavior: LimitedSwap
|
||||
```
|
||||
|
||||
The available configuration options for `swapBehavior` are:
|
||||
|
||||
- `LimitedSwap`: Kubernetes workloads are limited in how much swap they can
|
||||
use. Workloads on the node not managed by Kubernetes can still swap.
|
||||
- `UnlimitedSwap`: Kubernetes workloads can use as much swap memory as they
|
||||
request, up to the system limit.
|
||||
|
||||
If configuration for `memorySwap` is not specified and the feature gate is
|
||||
enabled, by default the kubelet will apply the same behaviour as the
|
||||
`LimitedSwap` setting.
|
||||
|
||||
The behaviour of the `LimitedSwap` setting depends if the node is running with
|
||||
v1 or v2 of control groups (also known as "cgroups"):
|
||||
|
||||
- **cgroupsv1:** Kubernetes workloads can use any combination of memory and
|
||||
swap, up to the pod's memory limit, if set.
|
||||
- **cgroupsv2:** Kubernetes workloads cannot use swap memory.
|
||||
|
||||
For more information, and to assist with testing and provide feedback, please
|
||||
see [KEP-2400](https://github.com/kubernetes/enhancements/issues/2400) and its
|
||||
[design proposal](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/2400-node-swap/README.md).
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* Learn about the [components](/docs/concepts/overview/components/#node-components) that make up a node.
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
title: Traces For Kubernetes System Components
|
||||
reviewers:
|
||||
- logicalhan
|
||||
- lilic
|
||||
content_type: concept
|
||||
weight: 60
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
|
||||
System component traces record the latency of and relationships between operations in the cluster.
|
||||
|
||||
Kubernetes components emit traces using the
|
||||
[OpenTelemetry Protocol](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#opentelemetry-protocol-specification)
|
||||
with the gRPC exporter and can be collected and routed to tracing backends using an
|
||||
[OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector#-opentelemetry-collector).
|
||||
|
||||
<!-- body -->
|
||||
|
||||
## Trace Collection
|
||||
|
||||
For a complete guide to collecting traces and using the collector, see
|
||||
[Getting Started with the OpenTelemetry Collector](https://opentelemetry.io/docs/collector/getting-started/).
|
||||
However, there are a few things to note that are specific to Kubernetes components.
|
||||
|
||||
By default, Kubernetes components export traces using the grpc exporter for OTLP on the
|
||||
[IANA OpenTelemetry port](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=opentelemetry), 4317.
|
||||
As an example, if the collector is running as a sidecar to a Kubernetes component,
|
||||
the following receiver configuration will collect spans and log them to standard output:
|
||||
|
||||
```yaml
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
exporters:
|
||||
# Replace this exporter with the exporter for your backend
|
||||
logging:
|
||||
logLevel: debug
|
||||
service:
|
||||
pipelines:
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
exporters: [logging]
|
||||
```
|
||||
|
||||
## Component traces
|
||||
|
||||
### kube-apiserver traces
|
||||
|
||||
The kube-apiserver generates spans for incoming HTTP requests, and for outgoing requests
|
||||
to webhooks, etcd, and re-entrant requests. It propagates the
|
||||
[W3C Trace Context](https://www.w3.org/TR/trace-context/) with outgoing requests
|
||||
but does not make use of the trace context attached to incoming requests,
|
||||
as the kube-apiserver is often a public endpoint.
|
||||
|
||||
#### Enabling tracing in the kube-apiserver
|
||||
|
||||
To enable tracing, enable the `APIServerTracing`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
on the kube-apiserver. Also, provide the kube-apiserver with a tracing configration file
|
||||
with `--tracing-config-file=<path-to-config>`. This is an example config that records
|
||||
spans for 1 in 10000 requests, and uses the default OpenTelemetry endpoint:
|
||||
|
||||
```yaml
|
||||
apiVersion: apiserver.config.k8s.io/v1alpha1
|
||||
kind: TracingConfiguration
|
||||
# default value
|
||||
#endpoint: localhost:4317
|
||||
samplingRatePerMillion: 100
|
||||
```
|
||||
|
||||
For more information about the `TracingConfiguration` struct, see
|
||||
[API server config API (v1alpha1)](/docs/reference/config-api/apiserver-config.v1alpha1/#apiserver-k8s-io-v1alpha1-TracingConfiguration).
|
||||
|
||||
## Stability
|
||||
|
||||
Tracing instrumentation is still under active development, and may change
|
||||
in a variety of ways. This includes span names, attached attributes,
|
||||
instrumented endpoints, etc. Until this feature graduates to stable,
|
||||
there are no guarantees of backwards compatibility for tracing instrumentation.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* Read about [Getting Started with the OpenTelemetry Collector](https://opentelemetry.io/docs/collector/getting-started/)
|
||||
|
||||
@@ -199,7 +199,7 @@ service PodResourcesLister {
|
||||
|
||||
The `List` endpoint provides information on resources of running pods, with details such as the
|
||||
id of exclusively allocated CPUs, device id as it was reported by device plugins and id of
|
||||
the NUMA node where these devices are allocated.
|
||||
the NUMA node where these devices are allocated. Also, for NUMA-based machines, it contains the information about memory and hugepages reserved for a container.
|
||||
|
||||
```gRPC
|
||||
// ListPodResourcesResponse is the response returned by List function
|
||||
@@ -219,6 +219,14 @@ message ContainerResources {
|
||||
string name = 1;
|
||||
repeated ContainerDevices devices = 2;
|
||||
repeated int64 cpu_ids = 3;
|
||||
repeated ContainerMemory memory = 4;
|
||||
}
|
||||
|
||||
// ContainerMemory contains information about memory and hugepages assigned to a container
|
||||
message ContainerMemory {
|
||||
string memory_type = 1;
|
||||
uint64 size = 2;
|
||||
TopologyInfo topology = 3;
|
||||
}
|
||||
|
||||
// Topology describes hardware topology of the resource
|
||||
@@ -247,6 +255,7 @@ It provides more information than kubelet exports to APIServer.
|
||||
message AllocatableResourcesResponse {
|
||||
repeated ContainerDevices devices = 1;
|
||||
repeated int64 cpu_ids = 2;
|
||||
repeated ContainerMemory memory = 3;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
@@ -442,7 +442,7 @@ pods 0 10
|
||||
|
||||
### Cross-namespace Pod Affinity Quota
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
Operators can use `CrossNamespacePodAffinity` quota scope to limit which namespaces are allowed to
|
||||
have pods with affinity terms that cross namespaces. Specifically, it controls which pods are allowed
|
||||
@@ -493,7 +493,7 @@ With the above configuration, pods can use `namespaces` and `namespaceSelector`
|
||||
if the namespace where they are created have a resource quota object with
|
||||
`CrossNamespaceAffinity` scope and a hard limit greater than or equal to the number of pods using those fields.
|
||||
|
||||
This feature is alpha and disabled by default. You can enable it by setting the
|
||||
This feature is beta and enabled by default. You can disable it using the
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
`PodAffinityNamespaceSelector` in both kube-apiserver and kube-scheduler.
|
||||
|
||||
|
||||
@@ -271,14 +271,14 @@ All `matchExpressions` associated with `requiredDuringSchedulingIgnoredDuringExe
|
||||
must be satisfied for the pod to be scheduled onto a node.
|
||||
|
||||
#### Namespace selector
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
Users can also select matching namespaces using `namespaceSelector`, which is a label query over the set of namespaces.
|
||||
The affinity term is applied to the union of the namespaces selected by `namespaceSelector` and the ones listed in the `namespaces` field.
|
||||
Note that an empty `namespaceSelector` ({}) matches all namespaces, while a null or empty `namespaces` list and
|
||||
null `namespaceSelector` means "this pod's namespace".
|
||||
|
||||
This feature is alpha and disabled by default. You can enable it by setting the
|
||||
This feature is beta and enabled by default. You can disable it via the
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
`PodAffinityNamespaceSelector` in both kube-apiserver and kube-scheduler.
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ of the scheduler:
|
||||
* Read about [scheduler performance tuning](/docs/concepts/scheduling-eviction/scheduler-perf-tuning/)
|
||||
* Read about [Pod topology spread constraints](/docs/concepts/workloads/pods/pod-topology-spread-constraints/)
|
||||
* Read the [reference documentation](/docs/reference/command-line-tools-reference/kube-scheduler/) for kube-scheduler
|
||||
* Read the [kube-scheduler config (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/) reference
|
||||
* Read the [kube-scheduler config (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/) reference
|
||||
* Learn about [configuring multiple schedulers](/docs/tasks/extend-kubernetes/configure-multiple-schedulers/)
|
||||
* Learn about [topology management policies](/docs/tasks/administer-cluster/topology-manager/)
|
||||
* Learn about [Pod Overhead](/docs/concepts/scheduling-eviction/pod-overhead/)
|
||||
|
||||
@@ -43,7 +43,7 @@ If you set `percentageOfNodesToScore` above 100, kube-scheduler acts as if you
|
||||
had set a value of 100.
|
||||
|
||||
To change the value, edit the
|
||||
[kube-scheduler configuration file](/docs/reference/config-api/kube-scheduler-config.v1beta1/)
|
||||
[kube-scheduler configuration file](/docs/reference/config-api/kube-scheduler-config.v1beta2/)
|
||||
and then restart the scheduler.
|
||||
In many cases, the configuration file can be found at `/etc/kubernetes/config/kube-scheduler.yaml`.
|
||||
|
||||
@@ -161,5 +161,5 @@ After going over all the Nodes, it goes back to Node 1.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* Check the [kube-scheduler configuration reference (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/)
|
||||
* Check the [kube-scheduler configuration reference (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/)
|
||||
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
reviewers:
|
||||
- zparnold
|
||||
title: Overview of Cloud Native Security
|
||||
description: >
|
||||
A model for thinking about Kubernetes security in the context of Cloud Native security.
|
||||
content_type: concept
|
||||
weight: 10
|
||||
weight: 1
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
---
|
||||
reviewers:
|
||||
- tallclair
|
||||
- liggitt
|
||||
title: Pod Security Admission
|
||||
description: >
|
||||
An overview of the Pod Security Admission Controller, which can enforce the Pod Security
|
||||
Standards.
|
||||
content_type: concept
|
||||
weight: 20
|
||||
min-kubernetes-server-version: v1.22
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
|
||||
The Kubernetes [Pod Security Standards](/docs/concepts/security/pod-security-standards/) define
|
||||
different isolation levels for Pods. These standards let you define how you want to restrict the
|
||||
behavior of pods in a clear, consistent fashion.
|
||||
|
||||
As an Alpha feature, Kubernetes offers a built-in _Pod Security_ {{< glossary_tooltip
|
||||
text="admission controller" term_id="admission-controller" >}}, the successor
|
||||
to [PodSecurityPolicies](/docs/concepts/policy/pod-security-policy/). Pod security restrictions
|
||||
are applied at the {{< glossary_tooltip text="namespace" term_id="namespace" >}} level when pods
|
||||
are created.
|
||||
|
||||
{{< note >}}
|
||||
The PodSecurityPolicy API is deprecated and will be
|
||||
[removed](/docs/reference/using-api/deprecation-guide/#v1-25) from Kubernetes in v1.25.
|
||||
{{< /note >}}
|
||||
|
||||
<!-- body -->
|
||||
|
||||
## Enabling the Alpha feature
|
||||
|
||||
Setting pod security controls by namespace is an alpha feature. You must enable the `PodSecurity`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) in order to use it.
|
||||
|
||||
```shell
|
||||
--feature-gates="...,PodSecurity=true"
|
||||
```
|
||||
|
||||
## Pod Security levels
|
||||
|
||||
Pod Security admission places requirements on a Pod's [Security
|
||||
Context](/docs/tasks/configure-pod-container/security-context/) and other related fields according
|
||||
to the three levels defined by the [Pod Security
|
||||
Standards](/docs/concepts/security/pod-security-standards): `privileged`, `baseline`, and
|
||||
`restricted`. Refer to the [Pod Security Standards](/docs/concepts/security/pod-security-standards)
|
||||
page for an in-depth look at those requirements.
|
||||
|
||||
## Pod Security Admission labels for namespaces
|
||||
|
||||
Provided that you have enabled this feature, you can configure namespaces to define the admission
|
||||
control mode you want to use for pod security in each namespace. Kubernetes defines a set of
|
||||
{{< glossary_tooltip term_id="label" text="labels" >}} that you can set to define which of the
|
||||
predefined Pod Security Standard levels you want to use for a namespace. The label you select
|
||||
defines what action the {{< glossary_tooltip text="control plane" term_id="control-plane" >}}
|
||||
takes if a potential violation is detected:
|
||||
|
||||
{{< table caption="Pod Security Admission modes" >}}
|
||||
Mode | Description
|
||||
:---------|:------------
|
||||
**`enforce`** | Policy violations will cause the pod to be rejected.
|
||||
**`audit`** | Policy violations will trigger the addition of an audit annotation, but are otherwise allowed.
|
||||
**`warn`** | Policy violations will trigger a user-facing warning, but are otherwise allowed.
|
||||
{{< /table >}}
|
||||
|
||||
A namespace can configure any or all modes, or even set a different level for different modes.
|
||||
|
||||
For each mode, there are two labels that determine the policy used:
|
||||
|
||||
```yaml
|
||||
# The per-mode level label indicates which policy level to apply for the mode.
|
||||
#
|
||||
# MODE must be one of `enforce`, `audit`, or `warn`.
|
||||
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
|
||||
pod-security.kubernetes.io/<MODE>: <LEVEL>
|
||||
|
||||
# Optional: per-mode version label that can be used to pin the policy to the
|
||||
# version that shipped with a given Kubernetes minor version (for example v{{< skew latestVersion >}}).
|
||||
#
|
||||
# MODE must be one of `enforce`, `audit`, or `warn`.
|
||||
# VERSION must be a valid Kubernetes minor version, or `latest`.
|
||||
pod-security.kubernetes.io/<MODE>-version: <VERSION>
|
||||
```
|
||||
|
||||
Check out [Enforce Pod Security Standards with Namespace Labels](/docs/tasks/configure-pod-container/enforce-standards-namespace-labels) to see example usage.
|
||||
|
||||
## Workload resources and Pod templates
|
||||
|
||||
Pods are often created indirectly, by creating a [workload
|
||||
object](https://kubernetes.io/docs/concepts/workloads/controllers/) such as a {{< glossary_tooltip
|
||||
term_id="deployment" >}} or {{< glossary_tooltip term_id="job">}}. The workload object defines a
|
||||
_Pod template_ and a {{< glossary_tooltip term_id="controller" text="controller" >}} for the
|
||||
workload resource creates Pods based on that template. To help catch violations early, both the
|
||||
audit and warning modes are applied to the workload resources. However, enforce mode is **not**
|
||||
applied to workload resources, only to the resulting pod objects.
|
||||
|
||||
## Exemptions
|
||||
|
||||
You can define _exemptions_ from pod security enforcement in order allow the creation of pods that
|
||||
would have otherwise been prohibited due to the policy associated with a given namespace.
|
||||
Exemptions can be statically configured in the
|
||||
[Admission Controller configuration](#configuring-the-admission-controller).
|
||||
|
||||
Exemptions must be explicitly enumerated. Requests meeting exemption criteria are _ignored_ by the
|
||||
Admission Controller (all `enforce`, `audit` and `warn` behaviors are skipped). Exemption dimensions include:
|
||||
|
||||
- **Usernames:** requests from users with an exempt authenticated (or impersonated) username are
|
||||
ignored.
|
||||
- **RuntimeClassNames:** pods and [workload resources](#workload-resources-and-pod-templates) specifying an exempt runtime class name are
|
||||
ignored.
|
||||
- **Namespaces:** pods and [workload resources](#workload-resources-and-pod-templates) in an exempt namespace are ignored.
|
||||
|
||||
{{< caution >}}
|
||||
|
||||
Most pods are created by a controller in response to a [workload
|
||||
resource](#workload-resources-and-pod-templates), meaning that exempting an end user will only
|
||||
exempt them from enforcement when creating pods directly, but not when creating a workload resource.
|
||||
Controller service accounts (such as `system:serviceaccount:kube-system:replicaset-controller`)
|
||||
should generally not be exempted, as doing so would implicitly exempt any user that can create the
|
||||
corresponding workload resource.
|
||||
|
||||
{{< /caution >}}
|
||||
|
||||
Updates to the following pod fields are exempt from policy checks, meaning that if a pod update
|
||||
request only changes these fields, it will not be denied even if the pod is in violation of the
|
||||
current policy level:
|
||||
|
||||
- Any metadata updates **except** changes to the seccomp or AppArmor annotations:
|
||||
- `seccomp.security.alpha.kubernetes.io/pod` (deprecated)
|
||||
- `container.seccomp.security.alpha.kubernetes.io/*` (deprecated)
|
||||
- `container.apparmor.security.beta.kubernetes.io/*`
|
||||
- Valid updates to `.spec.activeDeadlineSeconds`
|
||||
- Valid updates to `.spec.tolerations`
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
- [Pod Security Standards](/docs/concepts/security/pod-security-standards)
|
||||
- [Enforcing Pod Security Standards](/docs/setup/best-practices/enforcing-pod-security-standards)
|
||||
- [Enforce Pod Security Standards by Configuring the Built-in Admission Controller](/docs/tasks/configure-pod-container/enforce-standards-admission-controller)
|
||||
- [Enforce Pod Security Standards with Namespace Labels](/docs/tasks/configure-pod-container/enforce-standards-namespace-labels)
|
||||
- [Migrating from PodSecurityPolicy to PodSecurity](/docs/tasks/secure-pods/migrate-from-psp)
|
||||
@@ -2,59 +2,52 @@
|
||||
reviewers:
|
||||
- tallclair
|
||||
title: Pod Security Standards
|
||||
description: >
|
||||
A detailed look at the different policy levels defined in the Pod Security Standards.
|
||||
content_type: concept
|
||||
weight: 10
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
Security settings for Pods are typically applied by using [security
|
||||
contexts](/docs/tasks/configure-pod-container/security-context/). Security Contexts allow for the
|
||||
definition of privilege and access controls on a per-Pod basis.
|
||||
|
||||
The enforcement and policy-based definition of cluster requirements of security contexts has
|
||||
previously been achieved using [Pod Security Policy](/docs/concepts/policy/pod-security-policy/). A
|
||||
_Pod Security Policy_ is a cluster-level resource that controls security sensitive aspects of the
|
||||
Pod specification.
|
||||
|
||||
However, numerous means of policy enforcement have arisen that augment or replace the use of
|
||||
PodSecurityPolicy. The intent of this page is to detail recommended Pod security profiles, decoupled
|
||||
from any specific instantiation.
|
||||
|
||||
The Pod Security Standards define three different _policies_ to broadly cover the security
|
||||
spectrum. These policies are _cumulative_ and range from highly-permissive to highly-restrictive.
|
||||
This guide outlines the requirements of each policy.
|
||||
|
||||
| Profile | Description |
|
||||
| ------ | ----------- |
|
||||
| <strong style="white-space: nowrap">Privileged</strong> | Unrestricted policy, providing the widest possible level of permissions. This policy allows for known privilege escalations. |
|
||||
| <strong style="white-space: nowrap">Baseline</strong> | Minimally restrictive policy which prevents known privilege escalations. Allows the default (minimally specified) Pod configuration. |
|
||||
| <strong style="white-space: nowrap">Restricted</strong> | Heavily restricted policy, following current Pod hardening best practices. |
|
||||
|
||||
<!-- body -->
|
||||
|
||||
## Policy Types
|
||||
|
||||
There is an immediate need for base policy definitions to broadly cover the security spectrum. These
|
||||
should range from highly restricted to highly flexible:
|
||||
|
||||
- **_Privileged_** - Unrestricted policy, providing the widest possible level of permissions. This
|
||||
policy allows for known privilege escalations.
|
||||
- **_Baseline_** - Minimally restrictive policy while preventing known privilege
|
||||
escalations. Allows the default (minimally specified) Pod configuration.
|
||||
- **_Restricted_** - Heavily restricted policy, following current Pod hardening best practices.
|
||||
|
||||
## Policies
|
||||
## Profile Details
|
||||
|
||||
### Privileged
|
||||
|
||||
The Privileged policy is purposely-open, and entirely unrestricted. This type of policy is typically
|
||||
aimed at system- and infrastructure-level workloads managed by privileged, trusted users.
|
||||
**The _Privileged_ policy is purposely-open, and entirely unrestricted.** This type of policy is
|
||||
typically aimed at system- and infrastructure-level workloads managed by privileged, trusted users.
|
||||
|
||||
The privileged policy is defined by an absence of restrictions. For allow-by-default enforcement
|
||||
mechanisms (such as gatekeeper), the privileged profile may be an absence of applied constraints
|
||||
rather than an instantiated policy. In contrast, for a deny-by-default mechanism (such as Pod
|
||||
Security Policy) the privileged policy should enable all controls (disable all restrictions).
|
||||
The Privileged policy is defined by an absence of restrictions. For allow-by-default enforcement
|
||||
mechanisms (such as gatekeeper), the Privileged policy may be an absence of applied constraints
|
||||
rather than an instantiated profile. In contrast, for a deny-by-default mechanism (such as Pod
|
||||
Security Policy) the Privileged policy should enable all controls (disable all restrictions).
|
||||
|
||||
### Baseline
|
||||
|
||||
The Baseline policy is aimed at ease of adoption for common containerized workloads while
|
||||
preventing known privilege escalations. This policy is targeted at application operators and
|
||||
**The _Baseline_ policy is aimed at ease of adoption for common containerized workloads while
|
||||
preventing known privilege escalations.** This policy is targeted at application operators and
|
||||
developers of non-critical applications. The following listed controls should be
|
||||
enforced/disallowed:
|
||||
|
||||
{{< note >}}
|
||||
In this table, wildcards (`*`) indicate all elements in a list. For example,
|
||||
`spec.containers[*].securityContext` refers to the Security Context object for _all defined
|
||||
containers_. If any of the listed containers fails to meet the requirements, the entire pod will
|
||||
fail validation.
|
||||
{{< /note >}}
|
||||
|
||||
<table>
|
||||
<caption style="display:none">Baseline policy specification</caption>
|
||||
<tbody>
|
||||
@@ -63,112 +56,223 @@ enforced/disallowed:
|
||||
<td><strong>Policy</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Host Namespaces</td>
|
||||
<td style="white-space: nowrap">HostProcess</td>
|
||||
<td>
|
||||
Sharing the host namespaces must be disallowed.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.hostNetwork<br>
|
||||
spec.hostPID<br>
|
||||
spec.hostIPC<br>
|
||||
<br><b>Allowed Values:</b> false<br>
|
||||
<p>Windows pods offer the ability to run <a href="/docs/tasks/configure-pod-container/create-hostprocess-pod">HostProcess containers</a> which enables privileged access to the Windows node. Privileged access to the host is disallowed in the baseline policy. HostProcess pods are an <strong>alpha</strong> feature as of Kubernetes <strong>v1.22</strong>.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.windowsOptions.hostProcess</code></li>
|
||||
<li><code>spec.containers[*].securityContext.windowsOptions.hostProcess</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.windowsOptions.hostProcess</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.windowsOptions.hostProcess</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>false</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Privileged Containers</td>
|
||||
<td style="white-space: nowrap">Host Namespaces</td>
|
||||
<td>
|
||||
Privileged Pods disable most security mechanisms and must be disallowed.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.containers[*].securityContext.privileged<br>
|
||||
spec.initContainers[*].securityContext.privileged<br>
|
||||
<br><b>Allowed Values:</b> false, undefined/nil<br>
|
||||
<p>Sharing the host namespaces must be disallowed.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.hostNetwork</code></li>
|
||||
<li><code>spec.hostPID</code></li>
|
||||
<li><code>spec.hostIPC</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>false</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Capabilities</td>
|
||||
<td style="white-space: nowrap">Privileged Containers</td>
|
||||
<td>
|
||||
Adding <tt>NET_RAW</tt> or capabilities beyond the <a href="https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities">default set</a> must be disallowed.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.containers[*].securityContext.capabilities.add<br>
|
||||
spec.initContainers[*].securityContext.capabilities.add<br>
|
||||
<br><b>Allowed Values:</b> empty (or restricted to a known list)<br>
|
||||
<p>Privileged Pods disable most security mechanisms and must be disallowed.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].securityContext.privileged</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.privileged</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.privileged</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>false</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>HostPath Volumes</td>
|
||||
<td style="white-space: nowrap">Capabilities</td>
|
||||
<td>
|
||||
HostPath volumes must be forbidden.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.volumes[*].hostPath<br>
|
||||
<br><b>Allowed Values:</b> undefined/nil<br>
|
||||
<p>Adding additional capabilities beyond those listed below must be disallowed.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].securityContext.capabilities.add</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.capabilities.add</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.capabilities.add</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>AUDIT_WRITE</code></li>
|
||||
<li><code>CHOWN</code></li>
|
||||
<li><code>DAC_OVERRIDE</code></li>
|
||||
<li><code>FOWNER</code></li>
|
||||
<li><code>FSETID</code></li>
|
||||
<li><code>KILL</code></li>
|
||||
<li><code>MKNOD</code></li>
|
||||
<li><code>NET_BIND_SERVICE</code></li>
|
||||
<li><code>SETFCAP</code></li>
|
||||
<li><code>SETGID</code></li>
|
||||
<li><code>SETPCAP</code></li>
|
||||
<li><code>SETUID</code></li>
|
||||
<li><code>SYS_CHROOT</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Host Ports</td>
|
||||
<td style="white-space: nowrap">HostPath Volumes</td>
|
||||
<td>
|
||||
HostPorts should be disallowed, or at minimum restricted to a known list.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.containers[*].ports[*].hostPort<br>
|
||||
spec.initContainers[*].ports[*].hostPort<br>
|
||||
<br><b>Allowed Values:</b> 0, undefined (or restricted to a known list)<br>
|
||||
<p>HostPath volumes must be forbidden.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.volumes[*].hostPath</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AppArmor</td>
|
||||
<td style="white-space: nowrap">Host Ports</td>
|
||||
<td>
|
||||
On supported hosts, the 'runtime/default' AppArmor profile is applied by default.
|
||||
The baseline policy should prevent overriding or disabling the default AppArmor
|
||||
profile, or restrict overrides to an allowed set of profiles.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
metadata.annotations['container.apparmor.security.beta.kubernetes.io/*']<br>
|
||||
<br><b>Allowed Values:</b> 'runtime/default', undefined<br>
|
||||
<p>HostPorts should be disallowed, or at minimum restricted to a known list.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].ports[*].hostPort</code></li>
|
||||
<li><code>spec.initContainers[*].ports[*].hostPort</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].ports[*].hostPort</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li>Known list</li>
|
||||
<li><code>0</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SELinux</td>
|
||||
<td style="white-space: nowrap">AppArmor</td>
|
||||
<td>
|
||||
Setting the SELinux type is restricted, and setting a custom SELinux user or role option is forbidden.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.securityContext.seLinuxOptions.type<br>
|
||||
spec.containers[*].securityContext.seLinuxOptions.type<br>
|
||||
spec.initContainers[*].securityContext.seLinuxOptions.type<br>
|
||||
<br><b>Allowed Values:</b><br>
|
||||
undefined/empty<br>
|
||||
container_t<br>
|
||||
container_init_t<br>
|
||||
container_kvm_t<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.securityContext.seLinuxOptions.user<br>
|
||||
spec.containers[*].securityContext.seLinuxOptions.user<br>
|
||||
spec.initContainers[*].securityContext.seLinuxOptions.user<br>
|
||||
spec.securityContext.seLinuxOptions.role<br>
|
||||
spec.containers[*].securityContext.seLinuxOptions.role<br>
|
||||
spec.initContainers[*].securityContext.seLinuxOptions.role<br>
|
||||
<br><b>Allowed Values:</b> undefined/empty<br>
|
||||
<p>On supported hosts, the <code>runtime/default</code> AppArmor profile is applied by default. The baseline policy should prevent overriding or disabling the default AppArmor profile, or restrict overrides to an allowed set of profiles.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>runtime/default</code></li>
|
||||
<li><code>localhost/*</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>/proc Mount Type</td>
|
||||
<td style="white-space: nowrap">SELinux</td>
|
||||
<td>
|
||||
The default /proc masks are set up to reduce attack surface, and should be required.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.containers[*].securityContext.procMount<br>
|
||||
spec.initContainers[*].securityContext.procMount<br>
|
||||
<br><b>Allowed Values:</b> undefined/nil, 'Default'<br>
|
||||
<p>Setting the SELinux type is restricted, and setting a custom SELinux user or role option is forbidden.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.seLinuxOptions.type</code></li>
|
||||
<li><code>spec.containers[*].securityContext.seLinuxOptions.type</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.seLinuxOptions.type</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.seLinuxOptions.type</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/""</li>
|
||||
<li><code>container_t</code></li>
|
||||
<li><code>container_init_t</code></li>
|
||||
<li><code>container_kvm_t</code></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.seLinuxOptions.user</code></li>
|
||||
<li><code>spec.containers[*].securityContext.seLinuxOptions.user</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.seLinuxOptions.user</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.seLinuxOptions.user</code></li>
|
||||
<li><code>spec.securityContext.seLinuxOptions.role</code></li>
|
||||
<li><code>spec.containers[*].securityContext.seLinuxOptions.role</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.seLinuxOptions.role</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.seLinuxOptions.role</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/""</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sysctls</td>
|
||||
<td style="white-space: nowrap"><code>/proc</code> Mount Type</td>
|
||||
<td>
|
||||
Sysctls can disable security mechanisms or affect all containers on a host, and should be disallowed except for an allowed "safe" subset.
|
||||
A sysctl is considered safe if it is namespaced in the container or the Pod, and it is isolated from other Pods or processes on the same Node.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.securityContext.sysctls<br>
|
||||
<br><b>Allowed Values:</b><br>
|
||||
kernel.shm_rmid_forced<br>
|
||||
net.ipv4.ip_local_port_range<br>
|
||||
net.ipv4.tcp_syncookies<br>
|
||||
net.ipv4.ping_group_range<br>
|
||||
undefined/empty<br>
|
||||
<p>The default <code>/proc</code> masks are set up to reduce attack surface, and should be required.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].securityContext.procMount</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.procMount</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.procMount</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>Default</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Seccomp</td>
|
||||
<td>
|
||||
<p>Seccomp profile must not be explicitly set to <code>Unconfined</code>.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.seccompProfile.type</code></li>
|
||||
<li><code>spec.containers[*].securityContext.seccompProfile.type</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.seccompProfile.type</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.seccompProfile.type</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>RuntimeDefault</code></li>
|
||||
<li><code>Localhost</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="white-space: nowrap">Sysctls</td>
|
||||
<td>
|
||||
<p>Sysctls can disable security mechanisms or affect all containers on a host, and should be disallowed except for an allowed "safe" subset. A sysctl is considered safe if it is namespaced in the container or the Pod, and it is isolated from other Pods or processes on the same Node.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.sysctls[*].name</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>kernel.shm_rmid_forced</code></li>
|
||||
<li><code>net.ipv4.ip_local_port_range</code></li>
|
||||
<li><code>net.ipv4.ip_unprivileged_port_start</code></li>
|
||||
<li><code>net.ipv4.tcp_syncookies</code></li>
|
||||
<li><code>net.ipv4.ping_group_range</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -176,10 +280,17 @@ enforced/disallowed:
|
||||
|
||||
### Restricted
|
||||
|
||||
The Restricted policy is aimed at enforcing current Pod hardening best practices, at the expense of
|
||||
some compatibility. It is targeted at operators and developers of security-critical applications, as
|
||||
well as lower-trust users.The following listed controls should be enforced/disallowed:
|
||||
**The _Restricted_ policy is aimed at enforcing current Pod hardening best practices, at the
|
||||
expense of some compatibility.** It is targeted at operators and developers of security-critical
|
||||
applications, as well as lower-trust users. The following listed controls should be
|
||||
enforced/disallowed:
|
||||
|
||||
{{< note >}}
|
||||
In this table, wildcards (`*`) indicate all elements in a list. For example,
|
||||
`spec.containers[*].securityContext` refers to the Security Context object for _all defined
|
||||
containers_. If any of the listed containers fails to meet the requirements, the entire pod will
|
||||
fail validation.
|
||||
{{< /note >}}
|
||||
|
||||
<table>
|
||||
<caption style="display:none">Restricted policy specification</caption>
|
||||
@@ -192,80 +303,149 @@ well as lower-trust users.The following listed controls should be enforced/disal
|
||||
<td colspan="2"><em>Everything from the baseline profile.</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Volume Types</td>
|
||||
<td style="white-space: nowrap">Volume Types</td>
|
||||
<td>
|
||||
In addition to restricting HostPath volumes, the restricted profile limits usage of non-ephemeral volume types to those defined through PersistentVolumes.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.volumes[*].hostPath<br>
|
||||
spec.volumes[*].gcePersistentDisk<br>
|
||||
spec.volumes[*].awsElasticBlockStore<br>
|
||||
spec.volumes[*].gitRepo<br>
|
||||
spec.volumes[*].nfs<br>
|
||||
spec.volumes[*].iscsi<br>
|
||||
spec.volumes[*].glusterfs<br>
|
||||
spec.volumes[*].rbd<br>
|
||||
spec.volumes[*].flexVolume<br>
|
||||
spec.volumes[*].cinder<br>
|
||||
spec.volumes[*].cephFS<br>
|
||||
spec.volumes[*].flocker<br>
|
||||
spec.volumes[*].fc<br>
|
||||
spec.volumes[*].azureFile<br>
|
||||
spec.volumes[*].vsphereVolume<br>
|
||||
spec.volumes[*].quobyte<br>
|
||||
spec.volumes[*].azureDisk<br>
|
||||
spec.volumes[*].portworxVolume<br>
|
||||
spec.volumes[*].scaleIO<br>
|
||||
spec.volumes[*].storageos<br>
|
||||
<br><b>Allowed Values:</b> undefined/nil<br>
|
||||
<p>In addition to restricting HostPath volumes, the restricted policy limits usage of non-core volume types to those defined through PersistentVolumes.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.volumes[*].hostPath</code></li>
|
||||
<li><code>spec.volumes[*].gcePersistentDisk</code></li>
|
||||
<li><code>spec.volumes[*].awsElasticBlockStore</code></li>
|
||||
<li><code>spec.volumes[*].gitRepo</code></li>
|
||||
<li><code>spec.volumes[*].nfs</code></li>
|
||||
<li><code>spec.volumes[*].iscsi</code></li>
|
||||
<li><code>spec.volumes[*].glusterfs</code></li>
|
||||
<li><code>spec.volumes[*].rbd</code></li>
|
||||
<li><code>spec.volumes[*].flexVolume</code></li>
|
||||
<li><code>spec.volumes[*].cinder</code></li>
|
||||
<li><code>spec.volumes[*].cephfs</code></li>
|
||||
<li><code>spec.volumes[*].flocker</code></li>
|
||||
<li><code>spec.volumes[*].fc</code></li>
|
||||
<li><code>spec.volumes[*].azureFile</code></li>
|
||||
<li><code>spec.volumes[*].vsphereVolume</code></li>
|
||||
<li><code>spec.volumes[*].quobyte</code></li>
|
||||
<li><code>spec.volumes[*].azureDisk</code></li>
|
||||
<li><code>spec.volumes[*].portworxVolume</code></li>
|
||||
<li><code>spec.volumes[*].scaleIO</code></li>
|
||||
<li><code>spec.volumes[*].storageos</code></li>
|
||||
<li><code>spec.volumes[*].photonPersistentDisk</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Privilege Escalation</td>
|
||||
<td style="white-space: nowrap">Privilege Escalation (v1.8+)</td>
|
||||
<td>
|
||||
Privilege escalation (such as via set-user-ID or set-group-ID file mode) should not be allowed.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.containers[*].securityContext.allowPrivilegeEscalation<br>
|
||||
spec.initContainers[*].securityContext.allowPrivilegeEscalation<br>
|
||||
<br><b>Allowed Values:</b> false<br>
|
||||
<p>Privilege escalation (such as via set-user-ID or set-group-ID file mode) should not be allowed.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].securityContext.allowPrivilegeEscalation</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.allowPrivilegeEscalation</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li><code>false</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Running as Non-root</td>
|
||||
<td style="white-space: nowrap">Running as Non-root</td>
|
||||
<td>
|
||||
Containers must be required to run as non-root users.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.securityContext.runAsNonRoot<br>
|
||||
spec.containers[*].securityContext.runAsNonRoot<br>
|
||||
spec.initContainers[*].securityContext.runAsNonRoot<br>
|
||||
<br><b>Allowed Values:</b> true<br>
|
||||
<p>Containers must be required to run as non-root users.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.runAsNonRoot</code></li>
|
||||
<li><code>spec.containers[*].securityContext.runAsNonRoot</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.runAsNonRoot</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.runAsNonRoot</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li><code>true</code></li>
|
||||
</ul>
|
||||
<small>
|
||||
The container fields may be undefined/<code>nil</code> if the pod-level
|
||||
<code>spec.securityContext.runAsNonRoot</code> is set to <code>true</code>.
|
||||
</small>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Non-root groups <em>(optional)</em></td>
|
||||
<td style="white-space: nowrap">Non-root groups <em>(optional)</em></td>
|
||||
<td>
|
||||
Containers should be forbidden from running with a root primary or supplementary GID.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.securityContext.runAsGroup<br>
|
||||
spec.securityContext.supplementalGroups[*]<br>
|
||||
spec.securityContext.fsGroup<br>
|
||||
spec.containers[*].securityContext.runAsGroup<br>
|
||||
spec.initContainers[*].securityContext.runAsGroup<br>
|
||||
<br><b>Allowed Values:</b><br>
|
||||
non-zero<br>
|
||||
undefined / nil (except for `*.runAsGroup`)<br>
|
||||
<p>Containers should be forbidden from running with a root primary or supplementary GID.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.runAsGroup</code></li>
|
||||
<li><code>spec.securityContext.supplementalGroups[*]</code></li>
|
||||
<li><code>spec.securityContext.fsGroup</code></li>
|
||||
<li><code>spec.containers[*].securityContext.runAsGroup</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.runAsGroup</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.runAsGroup</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil (except for <code>*.runAsGroup</code>)</li>
|
||||
<li>Non-zero</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Seccomp</td>
|
||||
<td style="white-space: nowrap">Seccomp (v1.19+)</td>
|
||||
<td>
|
||||
<p>Seccomp profile must be explicitly set to one of the allowed values. Both the <code>Unconfined</code> profile and the <em>absence</em> of a profile are prohibited.</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.securityContext.seccompProfile.type</code></li>
|
||||
<li><code>spec.containers[*].securityContext.seccompProfile.type</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.seccompProfile.type</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.seccompProfile.type</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li><code>RuntimeDefault</code></li>
|
||||
<li><code>Localhost</code></li>
|
||||
</ul>
|
||||
<small>
|
||||
The container fields may be undefined/<code>nil</code> if the pod-level
|
||||
<code>spec.securityContext.seccompProfile.type</code> field is set appropriately.
|
||||
Conversely, the pod-level field may be undefined/<code>nil</code> if _all_ container-
|
||||
level fields are set.
|
||||
</small>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="white-space: nowrap">Capabilities (v1.22+)</td>
|
||||
<td>
|
||||
The RuntimeDefault seccomp profile must be required, or allow specific additional profiles.<br>
|
||||
<br><b>Restricted Fields:</b><br>
|
||||
spec.securityContext.seccompProfile.type<br>
|
||||
spec.containers[*].securityContext.seccompProfile<br>
|
||||
spec.initContainers[*].securityContext.seccompProfile<br>
|
||||
<br><b>Allowed Values:</b><br>
|
||||
'runtime/default'<br>
|
||||
undefined / nil<br>
|
||||
<p>
|
||||
Containers must drop <code>ALL</code> capabilities, and are only permitted to add back
|
||||
the <code>NET_BIND_SERVICE</code> capability.
|
||||
</p>
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].securityContext.capabilities.drop</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.capabilities.drop</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.capabilities.drop</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Any list of capabilities that includes <code>ALL</code></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<p><strong>Restricted Fields</strong></p>
|
||||
<ul>
|
||||
<li><code>spec.containers[*].securityContext.capabilities.add</code></li>
|
||||
<li><code>spec.initContainers[*].securityContext.capabilities.add</code></li>
|
||||
<li><code>spec.ephemeralContainers[*].securityContext.capabilities.add</code></li>
|
||||
</ul>
|
||||
<p><strong>Allowed Values</strong></p>
|
||||
<ul>
|
||||
<li>Undefined/nil</li>
|
||||
<li><code>NET_BIND_SERVICE</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -280,7 +460,13 @@ mechanism.
|
||||
As mechanisms mature, they will be defined below on a per-policy basis. The methods of enforcement
|
||||
of individual policies are not defined here.
|
||||
|
||||
[**PodSecurityPolicy**](/docs/concepts/policy/pod-security-policy/)
|
||||
[**Pod Security Admission Controller**](/docs/concepts/security/pod-security-admission/)
|
||||
|
||||
- {{< example file="security/podsecurity-privileged.yaml" >}}Privileged namespace{{< /example >}}
|
||||
- {{< example file="security/podsecurity-baseline.yaml" >}}Baseline namespace{{< /example >}}
|
||||
- {{< example file="security/podsecurity-restricted.yaml" >}}Restricted namespace{{< /example >}}
|
||||
|
||||
[**PodSecurityPolicy**](/docs/concepts/profile/pod-security-profile/) (Deprecated)
|
||||
|
||||
- {{< example file="policy/privileged-psp.yaml" >}}Privileged{{< /example >}}
|
||||
- {{< example file="policy/baseline-psp.yaml" >}}Baseline{{< /example >}}
|
||||
@@ -298,26 +484,35 @@ policies in this space need to be defined on a case-by-case basis.
|
||||
|
||||
SIG Auth may reconsider this position in the future, should a clear need for other profiles arise.
|
||||
|
||||
### What's the difference between a security policy and a security context?
|
||||
### What's the difference between a security profile and a security context?
|
||||
|
||||
[Security Contexts](/docs/tasks/configure-pod-container/security-context/) configure Pods and
|
||||
Containers at runtime. Security contexts are defined as part of the Pod and container specifications
|
||||
in the Pod manifest, and represent parameters to the container runtime.
|
||||
|
||||
Security policies are control plane mechanisms to enforce specific settings in the Security Context,
|
||||
as well as other parameters outside the Security Context. As of February 2020, the current native
|
||||
solution for enforcing these security policies is [Pod Security
|
||||
Policy](/docs/concepts/policy/pod-security-policy/) - a mechanism for centrally enforcing security
|
||||
policy on Pods across a cluster. Other alternatives for enforcing security policy are being
|
||||
developed in the Kubernetes ecosystem, such as [OPA
|
||||
Gatekeeper](https://github.com/open-policy-agent/gatekeeper).
|
||||
Security profiles are control plane mechanisms to enforce specific settings in the Security Context,
|
||||
as well as other related parameters outside the Security Context. As of July 2021,
|
||||
[Pod Security Policies](/docs/concepts/profile/pod-security-profile/) are deprecated in favor of the
|
||||
built-in [Pod Security Admission Controller](/docs/concepts/security/pod-security-admission/).
|
||||
|
||||
Other alternatives for enforcing security profiles are being developed in the Kubernetes
|
||||
ecosystem, such as [OPA Gatekeeper](https://github.com/open-profile-agent/gatekeeper).
|
||||
|
||||
### What profiles should I apply to my Windows Pods?
|
||||
|
||||
Windows in Kubernetes has some limitations and differentiators from standard Linux-based
|
||||
workloads. Specifically, the Pod SecurityContext fields [have no effect on
|
||||
workloads. Specifically, many of the Pod SecurityContext fields [have no effect on
|
||||
Windows](/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#v1-podsecuritycontext). As
|
||||
such, no standardized Pod Security profiles currently exists.
|
||||
such, no standardized Pod Security profiles currently exist.
|
||||
|
||||
If you apply the restricted profile for a Windows pod, this **may** have an impact on the pod
|
||||
at runtime. The restricted profile requires enforcing Linux-specific restrictions (such as seccomp
|
||||
profile, and disallowing privilege escalation). If the kubelet and / or its container runtime ignore
|
||||
these Linux-specific values, then the Windows pod should still work normally within the restricted
|
||||
profile. However, the lack of enforcement means that there is no additional restriction, for Pods
|
||||
that use Windows containers, compared to the baseline profile.
|
||||
|
||||
The use of the HostProcess flag to create a HostProcess pod should only be done in alignment with the privileged policy. Creation of a Windows HostProcess pod is blocked under the baseline and restricted policies, so any HostProcess pod should be considered privileged.
|
||||
|
||||
### What about sandboxed Pods?
|
||||
|
||||
@@ -330,6 +525,4 @@ restrict privileged permissions is lessened when the workload is isolated from t
|
||||
kernel. This allows for workloads requiring heightened permissions to still be isolated.
|
||||
|
||||
Additionally, the protection of sandboxed workloads is highly dependent on the method of
|
||||
sandboxing. As such, no single recommended policy is recommended for all sandboxed workloads.
|
||||
|
||||
|
||||
sandboxing. As such, no single recommended profile is recommended for all sandboxed workloads.
|
||||
|
||||
@@ -197,7 +197,7 @@ record unless `publishNotReadyAddresses=True` is set on the Service.
|
||||
|
||||
### Pod's setHostnameAsFQDN field {#pod-sethostnameasfqdn-field}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.20" state="beta" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="stable" >}}
|
||||
|
||||
When a Pod is configured to have fully qualified domain name (FQDN), its hostname is the short hostname. For example, if you have a Pod with the fully qualified domain name `busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example`, then by default the `hostname` command inside that Pod returns `busybox-1` and the `hostname --fqdn` command returns the FQDN.
|
||||
|
||||
@@ -313,6 +313,28 @@ search default.svc.cluster-domain.example svc.cluster-domain.example cluster-dom
|
||||
options ndots:5
|
||||
```
|
||||
|
||||
#### Expanded DNS Configuration
|
||||
|
||||
{{< feature-state for_k8s_version="1.22" state="alpha" >}}
|
||||
|
||||
By default, for Pod's DNS Config, Kubernetes allows at most 6 search domains and
|
||||
a list of search domains of up to 256 characters.
|
||||
|
||||
If the feature gate `ExpandedDNSConfig` is enabled for the kube-apiserver and
|
||||
the kubelet, it is allowed for Kubernetes to have at most 32 search domains and
|
||||
a list of search domains of up to 2048 characters.
|
||||
|
||||
### Feature availability
|
||||
|
||||
The availability of Pod DNS Config and DNS Policy "`None`" is shown as below.
|
||||
|
||||
| k8s version | Feature support |
|
||||
| :---------: |:-----------:|
|
||||
| 1.14 | Stable |
|
||||
| 1.10 | Beta (on by default)|
|
||||
| 1.9 | Alpha |
|
||||
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
|
||||
@@ -224,7 +224,7 @@ reference additional implementation-specific configuration for this class.
|
||||
|
||||
#### Namespace-scoped parameters
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
`Parameters` field has a `scope` and `namespace` field that can be used to
|
||||
reference a namespace-specific resource for configuration of an Ingress class.
|
||||
@@ -232,6 +232,11 @@ reference a namespace-specific resource for configuration of an Ingress class.
|
||||
resource. Setting `Scope` to `Namespace` and setting the `Namespace` field
|
||||
will reference a parameters resource in a specific namespace:
|
||||
|
||||
Namespace-scoped parameters avoid the need for a cluster-scoped CustomResourceDefinition
|
||||
for a parameters resource. This further avoids RBAC-related resources
|
||||
that would otherwise be required to grant permissions to cluster-scoped
|
||||
resources.
|
||||
|
||||
{{< codenew file="service/networking/namespaced-params.yaml" >}}
|
||||
|
||||
### Deprecated annotation
|
||||
|
||||
@@ -223,7 +223,7 @@ You must be using a {{< glossary_tooltip text="CNI" term_id="cni" >}} plugin tha
|
||||
|
||||
## Targeting a range of Ports
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
When writing a NetworkPolicy, you can target a range of ports instead of a single port.
|
||||
|
||||
@@ -251,17 +251,25 @@ spec:
|
||||
endPort: 32768
|
||||
```
|
||||
|
||||
The above rule allows any Pod with label `db` on the namespace `default` to communicate with any IP within the range `10.0.0.0/24` over TCP, provided that the target port is between the range 32000 and 32768.
|
||||
The above rule allows any Pod with label `db` on the namespace `default` to communicate
|
||||
with any IP within the range `10.0.0.0/24` over TCP, provided that the target
|
||||
port is between the range 32000 and 32768.
|
||||
|
||||
The following restrictions apply when using this field:
|
||||
* As an alpha feature, this is disabled by default. To enable the `endPort` field at a cluster level, you (or your cluster administrator) need to enable the `NetworkPolicyEndPort` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) for the API server with `--feature-gates=NetworkPolicyEndPort=true,…`.
|
||||
* The `endPort` field must be equal to or greater than the `port` field.
|
||||
* As a beta feature, this is enabled by default. To disable the `endPort` field
|
||||
at a cluster level, you (or your cluster administrator) need to disable the
|
||||
`NetworkPolicyEndPort` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
for the API server with `--feature-gates=NetworkPolicyEndPort=false,…`.
|
||||
* The `endPort` field must be equal than or greater to the `port` field.
|
||||
* `endPort` can only be defined if `port` is also defined.
|
||||
* Both ports must be numeric.
|
||||
|
||||
{{< note >}}
|
||||
Your cluster must be using a {{< glossary_tooltip text="CNI" term_id="cni" >}} plugin that
|
||||
supports the `endPort` field in NetworkPolicy specifications.
|
||||
If your [network plugin](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
|
||||
does not support the `endPort` field and you specify a NetworkPolicy with that,
|
||||
the policy will be applied only for the single `port` field.
|
||||
{{< /note >}}
|
||||
|
||||
## Targeting a Namespace by its name
|
||||
|
||||
@@ -188,9 +188,10 @@ selectors and uses DNS names instead. For more information, see the
|
||||
[ExternalName](#externalname) section later in this document.
|
||||
|
||||
### Over Capacity Endpoints
|
||||
If an Endpoints resource has more than 1000 endpoints then a Kubernetes v1.21
|
||||
cluster annotates that Endpoints with `endpoints.kubernetes.io/over-capacity: warning`.
|
||||
This annotation indicates that the affected Endpoints object is over capacity.
|
||||
If an Endpoints resource has more than 1000 endpoints then a Kubernetes v1.22 (or later)
|
||||
cluster annotates that Endpoints with `endpoints.kubernetes.io/over-capacity: truncated`.
|
||||
This annotation indicates that the affected Endpoints object is over capacity and that
|
||||
the endpoints controller has truncated the number of endpoints to 1000.
|
||||
|
||||
### EndpointSlices
|
||||
|
||||
@@ -384,6 +385,40 @@ The IP address that you choose must be a valid IPv4 or IPv6 address from within
|
||||
If you try to create a Service with an invalid clusterIP address value, the API
|
||||
server will return a 422 HTTP status code to indicate that there's a problem.
|
||||
|
||||
## Traffic policies
|
||||
|
||||
### External traffic policy
|
||||
|
||||
You can set the `spec.externalTrafficPolicy` field to control how traffic from external sources is routed.
|
||||
Valid values are `Cluster` and `Local`. Set the field to `Cluster` to route external traffic to all ready endpoints
|
||||
and `Local` to only route to ready node-local endpoints. If the traffic policy is `Local` and there are are no node-local
|
||||
endpoints, the kube-proxy does not forward any traffic for the relevant Service.
|
||||
|
||||
{{< note >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
If you enable the `ProxyTerminatingEndpoints`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
`ProxyTerminatingEndpoints` for the kube-proxy, the kube-proxy checks if the node
|
||||
has local endpoints and whether or not all the local endpoints are marked as terminating.
|
||||
If there are local endpoints and **all** of those are terminating, then the kube-proxy ignores
|
||||
any external traffic policy of `Local`. Instead, whilst the node-local endpoints remain as all
|
||||
terminating, the kube-proxy forwards traffic for that Service to healthy endpoints elsewhere,
|
||||
as if the external traffic policy were set to `Cluster`.
|
||||
This forwarding behavior for terminating endpoints exists to allow external load balancers to
|
||||
gracefully drain connections that are backed by `NodePort` Services, even when the health check
|
||||
node port starts to fail. Otherwise, traffic can be lost between the time a node is still in the node pool of a load
|
||||
balancer and traffic is being dropped during the termination period of a pod.
|
||||
{{< /note >}}
|
||||
|
||||
### Internal traffic policy
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
You can set the `spec.internalTrafficPolicy` field to control how traffic from internal sources is routed.
|
||||
Valid values are `Cluster` and `Local`. Set the field to `Cluster` to route internal traffic to all ready endpoints
|
||||
and `Local` to only route to ready node-local endpoints. If the traffic policy is `Local` and there are no node-local
|
||||
endpoints, traffic is dropped by kube-proxy.
|
||||
|
||||
## Discovering services
|
||||
|
||||
Kubernetes supports 2 primary modes of finding a Service - environment
|
||||
@@ -642,12 +677,12 @@ You must enable the `ServiceLBNodePortControl` feature gate to use this field.
|
||||
|
||||
#### Specifying class of load balancer implementation {#load-balancer-class}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
Starting in v1.21, you can optionally specify the class of a load balancer implementation for
|
||||
`LoadBalancer` type of Service by setting the field `spec.loadBalancerClass`.
|
||||
`spec.loadBalancerClass` enables you to use a load balancer implementation other than the cloud provider default. This feature is available from v1.21, you must enable the `ServiceLoadBalancerClass` feature gate to use this field in v1.21, and the feature gate is enabled by default from v1.22 onwards.
|
||||
By default, `spec.loadBalancerClass` is `nil` and a `LoadBalancer` type of Service uses
|
||||
the cloud provider's default load balancer implementation.
|
||||
the cloud provider's default load balancer implementation if the cluster is configured with
|
||||
a cloud provider using the `--cloud-provider` component flag.
|
||||
If `spec.loadBalancerClass` is specified, it is assumed that a load balancer
|
||||
implementation that matches the specified class is watching for Services.
|
||||
Any default load balancer implementation (for example, the one provided by
|
||||
@@ -657,7 +692,6 @@ Once set, it cannot be changed.
|
||||
The value of `spec.loadBalancerClass` must be a label-style identifier,
|
||||
with an optional prefix such as "`internal-vip`" or "`example.com/internal-vip`".
|
||||
Unprefixed names are reserved for end-users.
|
||||
You must enable the `ServiceLoadBalancerClass` feature gate to use this field.
|
||||
|
||||
#### Internal load balancer
|
||||
|
||||
|
||||
@@ -314,12 +314,9 @@ PersistentVolume types are implemented as plugins. Kubernetes currently supports
|
||||
* [`azureDisk`](/docs/concepts/storage/volumes/#azuredisk) - Azure Disk
|
||||
* [`azureFile`](/docs/concepts/storage/volumes/#azurefile) - Azure File
|
||||
* [`cephfs`](/docs/concepts/storage/volumes/#cephfs) - CephFS volume
|
||||
* [`cinder`](/docs/concepts/storage/volumes/#cinder) - Cinder (OpenStack block storage)
|
||||
(**deprecated**)
|
||||
* [`csi`](/docs/concepts/storage/volumes/#csi) - Container Storage Interface (CSI)
|
||||
* [`fc`](/docs/concepts/storage/volumes/#fc) - Fibre Channel (FC) storage
|
||||
* [`flexVolume`](/docs/concepts/storage/volumes/#flexVolume) - FlexVolume
|
||||
* [`flocker`](/docs/concepts/storage/volumes/#flocker) - Flocker storage
|
||||
* [`gcePersistentDisk`](/docs/concepts/storage/volumes/#gcepersistentdisk) - GCE Persistent Disk
|
||||
* [`glusterfs`](/docs/concepts/storage/volumes/#glusterfs) - Glusterfs volume
|
||||
* [`hostPath`](/docs/concepts/storage/volumes/#hostpath) - HostPath volume
|
||||
@@ -329,17 +326,28 @@ PersistentVolume types are implemented as plugins. Kubernetes currently supports
|
||||
* [`local`](/docs/concepts/storage/volumes/#local) - local storage devices
|
||||
mounted on nodes.
|
||||
* [`nfs`](/docs/concepts/storage/volumes/#nfs) - Network File System (NFS) storage
|
||||
* `photonPersistentDisk` - Photon controller persistent disk.
|
||||
(This volume type no longer works since the removal of the corresponding
|
||||
cloud provider.)
|
||||
* [`portworxVolume`](/docs/concepts/storage/volumes/#portworxvolume) - Portworx volume
|
||||
* [`quobyte`](/docs/concepts/storage/volumes/#quobyte) - Quobyte volume
|
||||
* [`rbd`](/docs/concepts/storage/volumes/#rbd) - Rados Block Device (RBD) volume
|
||||
* [`scaleIO`](/docs/concepts/storage/volumes/#scaleio) - ScaleIO volume
|
||||
(**deprecated**)
|
||||
* [`storageos`](/docs/concepts/storage/volumes/#storageos) - StorageOS volume
|
||||
* [`vsphereVolume`](/docs/concepts/storage/volumes/#vspherevolume) - vSphere VMDK volume
|
||||
|
||||
The following types of PersistentVolume are deprecated. This means that support is still available but will be removed in a future Kubernetes release.
|
||||
|
||||
* [`cinder`](/docs/concepts/storage/volumes/#cinder) - Cinder (OpenStack block storage)
|
||||
(**deprecated** in v1.18)
|
||||
* [`flocker`](/docs/concepts/storage/volumes/#flocker) - Flocker storage
|
||||
(**deprecated** in v1.22)
|
||||
* [`quobyte`](/docs/concepts/storage/volumes/#quobyte) - Quobyte volume
|
||||
(**deprecated** in v1.22)
|
||||
* [`storageos`](/docs/concepts/storage/volumes/#storageos) - StorageOS volume
|
||||
(**deprecated** in v1.22)
|
||||
|
||||
Older versions of Kubernetes also supported the following in-tree PersistentVolume types:
|
||||
|
||||
* `photonPersistentDisk` - Photon controller persistent disk.
|
||||
(**not available** after v1.15)
|
||||
* [`scaleIO`](/docs/concepts/storage/volumes/#scaleio) - ScaleIO volume
|
||||
(**not available** after v1.21)
|
||||
|
||||
## Persistent Volumes
|
||||
|
||||
Each PV contains a spec and status, which is the specification and status of the volume.
|
||||
@@ -407,38 +415,40 @@ The access modes are:
|
||||
* ReadWriteOnce -- the volume can be mounted as read-write by a single node
|
||||
* ReadOnlyMany -- the volume can be mounted read-only by many nodes
|
||||
* ReadWriteMany -- the volume can be mounted as read-write by many nodes
|
||||
* ReadWriteOncePod -- the volume can be mounted as read-write by a single Pod.
|
||||
This is only supported for CSI volumes and Kubernetes version 1.22+.
|
||||
|
||||
In the CLI, the access modes are abbreviated to:
|
||||
|
||||
* RWO - ReadWriteOnce
|
||||
* ROX - ReadOnlyMany
|
||||
* RWX - ReadWriteMany
|
||||
* RWOP - ReadWriteOncePod
|
||||
|
||||
> __Important!__ A volume can only be mounted using one access mode at a time, even if it supports many. For example, a GCEPersistentDisk can be mounted as ReadWriteOnce by a single node or ReadOnlyMany by many nodes, but not at the same time.
|
||||
|
||||
|
||||
| Volume Plugin | ReadWriteOnce | ReadOnlyMany | ReadWriteMany|
|
||||
| :--- | :---: | :---: | :---: |
|
||||
| AWSElasticBlockStore | ✓ | - | - |
|
||||
| AzureFile | ✓ | ✓ | ✓ |
|
||||
| AzureDisk | ✓ | - | - |
|
||||
| CephFS | ✓ | ✓ | ✓ |
|
||||
| Cinder | ✓ | - | - |
|
||||
| CSI | depends on the driver | depends on the driver | depends on the driver |
|
||||
| FC | ✓ | ✓ | - |
|
||||
| FlexVolume | ✓ | ✓ | depends on the driver |
|
||||
| Flocker | ✓ | - | - |
|
||||
| GCEPersistentDisk | ✓ | ✓ | - |
|
||||
| Glusterfs | ✓ | ✓ | ✓ |
|
||||
| HostPath | ✓ | - | - |
|
||||
| iSCSI | ✓ | ✓ | - |
|
||||
| Quobyte | ✓ | ✓ | ✓ |
|
||||
| NFS | ✓ | ✓ | ✓ |
|
||||
| RBD | ✓ | ✓ | - |
|
||||
| VsphereVolume | ✓ | - | - (works when Pods are collocated) |
|
||||
| PortworxVolume | ✓ | - | ✓ |
|
||||
| ScaleIO | ✓ | ✓ | - |
|
||||
| StorageOS | ✓ | - | - |
|
||||
| Volume Plugin | ReadWriteOnce | ReadOnlyMany | ReadWriteMany | ReadWriteOncePod |
|
||||
| :--- | :---: | :---: | :---: | - |
|
||||
| AWSElasticBlockStore | ✓ | - | - | - |
|
||||
| AzureFile | ✓ | ✓ | ✓ | - |
|
||||
| AzureDisk | ✓ | - | - | - |
|
||||
| CephFS | ✓ | ✓ | ✓ | - |
|
||||
| Cinder | ✓ | - | - | - |
|
||||
| CSI | depends on the driver | depends on the driver | depends on the driver | depends on the driver |
|
||||
| FC | ✓ | ✓ | - | - |
|
||||
| FlexVolume | ✓ | ✓ | depends on the driver | - |
|
||||
| Flocker | ✓ | - | - | - |
|
||||
| GCEPersistentDisk | ✓ | ✓ | - | - |
|
||||
| Glusterfs | ✓ | ✓ | ✓ | - |
|
||||
| HostPath | ✓ | - | - | - |
|
||||
| iSCSI | ✓ | ✓ | - | - |
|
||||
| Quobyte | ✓ | ✓ | ✓ | - |
|
||||
| NFS | ✓ | ✓ | ✓ | - |
|
||||
| RBD | ✓ | ✓ | - | - |
|
||||
| VsphereVolume | ✓ | - | - (works when Pods are collocated) | - |
|
||||
| PortworxVolume | ✓ | - | ✓ | - | - |
|
||||
| StorageOS | ✓ | - | - | - |
|
||||
|
||||
### Class
|
||||
|
||||
@@ -785,6 +795,82 @@ spec:
|
||||
storage: 10Gi
|
||||
```
|
||||
|
||||
## Volume populators and data sources
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
|
||||
{{< note >}}
|
||||
Kubernetes supports custom volume populators; this alpha feature was introduced
|
||||
in Kubernetes 1.18. Kubernetes 1.22 reimplemented the mechanism with a redesigned API.
|
||||
Check that you are reading the version of the Kubernetes documentation that matches your
|
||||
cluster. {{% version-check %}}
|
||||
To use custom volume populators, you must enable the `AnyVolumeDataSource`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) for
|
||||
the kube-apiserver and kube-controller-manager.
|
||||
{{< /note >}}
|
||||
|
||||
Volume populators take advantage of a PVC spec field called `dataSourceRef`. Unlike the
|
||||
`dataSource` field, which can only contain either a reference to another PersistentVolumeClaim
|
||||
or to a VolumeSnapshot, the `dataSourceRef` field can contain a reference to any object in the
|
||||
same namespace, except for core objects other than PVCs. For clusters that have the feature
|
||||
gate enabled, use of the `dataSourceRef` is preferred over `dataSource`.
|
||||
|
||||
## Data source references
|
||||
|
||||
The `dataSourceRef` field behaves almost the same as the `dataSource` field. If either one is
|
||||
specified while the other is not, the API server will give both fields the same value. Neither
|
||||
field can be changed after creation, and attempting to specify different values for the two
|
||||
fields will result in a validation error. Therefore the two fields will always have the same
|
||||
contents.
|
||||
|
||||
There are two differences between the `dataSourceRef` field and the `dataSource` field that
|
||||
users should be aware of:
|
||||
* The `dataSource` field ignores invalid values (as if the field was blank) while the
|
||||
`dataSourceRef` field never ignores values and will cause an error if an invalid value is
|
||||
used. Invalid values are any core object (objects with no apiGroup) except for PVCs.
|
||||
* The `dataSourceRef` field may contain different types of objects, while the `dataSource` field
|
||||
only allows PVCs and VolumeSnapshots.
|
||||
|
||||
Users should always use `dataSourceRef` on clusters that have the feature gate enabled, and
|
||||
fall back to `dataSource` on clusters that do not. It is not necessary to look at both fields
|
||||
under any circumstance. The duplicated values with slightly different semantics exist only for
|
||||
backwards compatibility. In particular, a mixture of older and newer controllers are able to
|
||||
interoperate because the fields are the same.
|
||||
|
||||
### Using volume populators
|
||||
|
||||
Volume populators are {{< glossary_tooltip text="controllers" term_id="controller" >}} that can
|
||||
create non-empty volumes, where the contents of the volume are determined by a Custom Resource.
|
||||
Users create a populated volume by referring to a Custom Resource using the `dataSourceRef` field:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: populated-pvc
|
||||
spec:
|
||||
dataSourceRef:
|
||||
name: example-name
|
||||
kind: ExampleDataSource
|
||||
apiGroup: example.storage.k8s.io
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
```
|
||||
|
||||
Because volume populators are external components, attempts to create a PVC that uses one
|
||||
can fail if not all the correct components are installed. External controllers should generate
|
||||
events on the PVC to provide feedback on the status of the creation, including warnings if
|
||||
the PVC cannot be created due to some missing component.
|
||||
|
||||
You can install the alpha [volume data source validator](https://github.com/kubernetes-csi/volume-data-source-validator)
|
||||
controller into your cluster. That controller generates warning Events on a PVC in the case that no populator
|
||||
is registered to handle that kind of data source. When a suitable populator is installed for a PVC, it's the
|
||||
responsibility of that populator controller to report Events that relate to volume creation and issues during
|
||||
the process.
|
||||
|
||||
## Writing Portable Configuration
|
||||
|
||||
If you're writing configuration templates or examples that run on a wide range of clusters
|
||||
|
||||
@@ -601,6 +601,12 @@ parameters:
|
||||
|
||||
### Quobyte
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="deprecated" >}}
|
||||
|
||||
The Quobyte in-tree storage plugin is deprecated, an
|
||||
[example](https://github.com/quobyte/quobyte-csi/blob/master/example/StorageClass.yaml)
|
||||
`StorageClass` for the out-of-tree Quobyte plugin can be found at the Quobyte CSI repository.
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
|
||||
@@ -124,7 +124,7 @@ beta features must be enabled.
|
||||
{{< feature-state for_k8s_version="v1.17" state="alpha" >}}
|
||||
|
||||
To disable the `awsElasticBlockStore` storage plugin from being loaded by the controller manager
|
||||
and the kubelet, set the `CSIMigrationAWSComplete` flag to `true`. This feature requires the `ebs.csi.aws.com` Container Storage Interface (CSI) driver installed on all worker nodes.
|
||||
and the kubelet, set the `InTreePluginAWSUnregister` flag to `true`.
|
||||
|
||||
### azureDisk {#azuredisk}
|
||||
|
||||
@@ -462,7 +462,8 @@ spec:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: failure-domain.beta.kubernetes.io/zone
|
||||
# failure-domain.beta.kubernetes.io/zone should be used prior to 1.21
|
||||
- key: topology.kubernetes.io/zone
|
||||
operator: In
|
||||
values:
|
||||
- us-central1-a
|
||||
@@ -480,6 +481,13 @@ Driver](https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-drive
|
||||
must be installed on the cluster and the `CSIMigration` and `CSIMigrationGCE`
|
||||
beta features must be enabled.
|
||||
|
||||
#### GCE CSI migration complete
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
|
||||
To disable the `gcePersistentDisk` storage plugin from being loaded by the controller manager
|
||||
and the kubelet, set the `InTreePluginGCEUnregister` flag to `true`.
|
||||
|
||||
### gitRepo (deprecated) {#gitrepo}
|
||||
|
||||
{{< warning >}}
|
||||
@@ -931,7 +939,7 @@ A container using a projected volume source as a [`subPath`](#using-subpath) vol
|
||||
receive updates for those volume sources.
|
||||
{{< /note >}}
|
||||
|
||||
### quobyte
|
||||
### quobyte (deprecated) {#quobyte}
|
||||
|
||||
A `quobyte` volume allows an existing [Quobyte](https://www.quobyte.com) volume to
|
||||
be mounted into your Pod.
|
||||
@@ -967,49 +975,6 @@ Simultaneous writers are not allowed.
|
||||
See the [RBD example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/rbd)
|
||||
for more details.
|
||||
|
||||
### scaleIO (deprecated) {#scaleio}
|
||||
|
||||
ScaleIO is a software-based storage platform that uses existing hardware to
|
||||
create clusters of scalable shared block networked storage. The `scaleIO` volume
|
||||
plugin allows deployed pods to access existing ScaleIO
|
||||
volumes. For information about dynamically provisioning new volumes for
|
||||
persistent volume claims, see
|
||||
[ScaleIO persistent volumes](/docs/concepts/storage/persistent-volumes/#scaleio).
|
||||
|
||||
{{< note >}}
|
||||
You must have an existing ScaleIO cluster already setup and
|
||||
running with the volumes created before you can use them.
|
||||
{{< /note >}}
|
||||
|
||||
The following example is a Pod configuration with ScaleIO:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: pod-0
|
||||
spec:
|
||||
containers:
|
||||
- image: k8s.gcr.io/test-webserver
|
||||
name: pod-0
|
||||
volumeMounts:
|
||||
- mountPath: /test-pd
|
||||
name: vol-0
|
||||
volumes:
|
||||
- name: vol-0
|
||||
scaleIO:
|
||||
gateway: https://localhost:443/api
|
||||
system: scaleio
|
||||
protectionDomain: sd0
|
||||
storagePool: sp1
|
||||
volumeName: vol-0
|
||||
secretRef:
|
||||
name: sio-secret
|
||||
fsType: xfs
|
||||
```
|
||||
|
||||
For further details, see the [ScaleIO](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/scaleio) examples.
|
||||
|
||||
### secret
|
||||
|
||||
A `secret` volume is used to pass sensitive information, such as passwords, to
|
||||
@@ -1029,7 +994,7 @@ receive Secret updates.
|
||||
|
||||
For more details, see [Configuring Secrets](/docs/concepts/configuration/secret/).
|
||||
|
||||
### storageOS {#storageos}
|
||||
### storageOS (deprecated) {#storageos}
|
||||
|
||||
A `storageos` volume allows an existing [StorageOS](https://www.storageos.com)
|
||||
volume to mount into your Pod.
|
||||
@@ -1177,7 +1142,7 @@ but new volumes created by the vSphere CSI driver will not be honoring these par
|
||||
|
||||
{{< feature-state for_k8s_version="v1.19" state="beta" >}}
|
||||
|
||||
To turn off the `vsphereVolume` plugin from being loaded by the controller manager and the kubelet, you need to set this feature flag to `true`. You must install a `csi.vsphere.vmware.com` {{< glossary_tooltip text="CSI" term_id="csi" >}} driver on all worker nodes.
|
||||
To turn off the `vsphereVolume` plugin from being loaded by the controller manager and the kubelet, you need to set `InTreePluginvSphereUnregister` feature flag to `true`. You must install a `csi.vsphere.vmware.com` {{< glossary_tooltip text="CSI" term_id="csi" >}} driver on all worker nodes.
|
||||
|
||||
## Using subPath {#using-subpath}
|
||||
|
||||
|
||||
@@ -36,9 +36,10 @@ maximum length of a Job name is no more than 63 characters.
|
||||
|
||||
## CronJob
|
||||
|
||||
CronJobs are useful for creating periodic and recurring tasks, like running backups or
|
||||
sending emails. CronJobs can also schedule individual tasks for a specific time, such as
|
||||
scheduling a Job for when your cluster is likely to be idle.
|
||||
CronJobs are meant for performing regular scheduled actions such as backups,
|
||||
report generation, and so on. Each of those tasks should be configured to recur
|
||||
indefinitely (for example: once a day / week / month); you can define the point
|
||||
in time within that interval when the job should start.
|
||||
|
||||
### Example
|
||||
|
||||
|
||||
@@ -187,14 +187,7 @@ parallelism, for a variety of reasons:
|
||||
|
||||
### Completion mode
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
|
||||
{{< note >}}
|
||||
To be able to create Indexed Jobs, make sure to enable the `IndexedJob`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
on the [API server](/docs/reference/command-line-tools-reference/kube-apiserver/)
|
||||
and the [controller manager](/docs/reference/command-line-tools-reference/kube-controller-manager/).
|
||||
{{< /note >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
Jobs with _fixed completion count_ - that is, jobs that have non null
|
||||
`.spec.completions` - can have a completion mode that is specified in `.spec.completionMode`:
|
||||
@@ -204,7 +197,13 @@ Jobs with _fixed completion count_ - that is, jobs that have non null
|
||||
completion is homologous to each other. Note that Jobs that have null
|
||||
`.spec.completions` are implicitly `NonIndexed`.
|
||||
- `Indexed`: the Pods of a Job get an associated completion index from 0 to
|
||||
`.spec.completions-1`, available in the annotation `batch.kubernetes.io/job-completion-index`.
|
||||
`.spec.completions-1`. The index is available through three mechanisms:
|
||||
- The Pod annotation `batch.kubernetes.io/job-completion-index`.
|
||||
- As part of the Pod hostname, following the pattern `$(job-name)-$(index)`.
|
||||
When you use an Indexed Job in combination with a
|
||||
{{< glossary_tooltip term_id="Service" >}}, Pods within the Job can use
|
||||
the deterministic hostnames to address each other via DNS.
|
||||
- From the containarized task, in the environment variable `JOB_COMPLETION_INDEX`.
|
||||
The Job is considered complete when there is one successfully completed Pod
|
||||
for each index. For more information about how to use this mode, see
|
||||
[Indexed Job for Parallel Processing with Static Work Assignment](/docs/tasks/job/indexed-parallel-processing-static/).
|
||||
@@ -403,14 +402,12 @@ Here, `W` is the number of work items.
|
||||
|
||||
### Suspending a Job
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
{{< note >}}
|
||||
Suspending Jobs is available in Kubernetes versions 1.21 and above. You must
|
||||
enable the `SuspendJob` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
on the [API server](/docs/reference/command-line-tools-reference/kube-apiserver/)
|
||||
and the [controller manager](/docs/reference/command-line-tools-reference/kube-controller-manager/)
|
||||
in order to use this feature.
|
||||
In Kubernetes version 1.21, this feature was in alpha, which required additional
|
||||
steps to enable this feature; make sure to read the [right documentation for the
|
||||
version of Kubernetes you're using](/docs/home/supported-doc-versions/).
|
||||
{{< /note >}}
|
||||
|
||||
When a Job is created, the Job controller will immediately begin creating Pods
|
||||
@@ -569,6 +566,46 @@ The new Job itself will have a different uid from `a8f3d00d-c6d2-11e5-9f87-42010
|
||||
`manualSelector: true` tells the system to that you know what you are doing and to allow this
|
||||
mismatch.
|
||||
|
||||
### Job tracking with finalizers
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
|
||||
{{< note >}}
|
||||
In order to use this behavior, you must enable the `JobTrackingWithFinalizers`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
on the [API server](/docs/reference/command-line-tools-reference/kube-apiserver/)
|
||||
and the [controller manager](/docs/reference/command-line-tools-reference/kube-controller-manager/).
|
||||
It is disabled by default.
|
||||
|
||||
When enabled, the control plane tracks new Jobs using the behavior described
|
||||
below. Existing Jobs are unaffected. As a user, the only difference you would
|
||||
see is that the control plane tracking of Job completion is more accurate.
|
||||
{{< /note >}}
|
||||
|
||||
When this feature isn't enabled, the Job {{< glossary_tooltip term_id="controller" >}}
|
||||
relies on counting the Pods that exist in the cluster to track the Job status,
|
||||
that is, to keep the counters for `succeeded` and `failed` Pods.
|
||||
However, Pods can be removed for a number of reasons, including:
|
||||
- The garbage collector that removes orphan Pods when a Node goes down.
|
||||
- The garbage collector that removes finished Pods (in `Succeeded` or `Failed`
|
||||
phase) after a threshold.
|
||||
- Human intervention to delete Pods belonging to a Job.
|
||||
- An external controller (not provided as part of Kubernetes) that removes or
|
||||
replaces Pods.
|
||||
|
||||
If you enable the `JobTrackingWithFinalizers` feature for your cluster, the
|
||||
control plane keeps track of the Pods that belong to any Job and notices if any
|
||||
such Pod is removed from the API server. To do that, the Job controller creates Pods with
|
||||
the finalizer `batch.kubernetes.io/job-tracking`. The controller removes the
|
||||
finalizer only after the Pod has been accounted for in the Job status, allowing
|
||||
the Pod to be removed by other controllers or users.
|
||||
|
||||
The Job controller uses the new algorithm for new Jobs only. Jobs created
|
||||
before the feature is enabled are unaffected. You can determine if the Job
|
||||
controller is tracking a Job using Pod finalizers by checking if the Job has the
|
||||
annotation `batch.kubernetes.io/job-tracking`. You should **not** manually add
|
||||
or remove this annotation from Jobs.
|
||||
|
||||
## Alternatives
|
||||
|
||||
### Bare Pods
|
||||
|
||||
@@ -323,7 +323,7 @@ prioritize scaling down pods based on the following general algorithm:
|
||||
If all of the above match, then selection is random.
|
||||
|
||||
### Pod deletion cost
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
|
||||
|
||||
Using the [`controller.kubernetes.io/pod-deletion-cost`](/docs/reference/labels-annotations-taints/#pod-deletion-cost)
|
||||
annotation, users can set a preference regarding which pods to remove first when downscaling a ReplicaSet.
|
||||
@@ -335,7 +335,7 @@ cost are preferred to be deleted before pods with higher deletion cost.
|
||||
The implicit value for this annotation for pods that don't set it is 0; negative values are permitted.
|
||||
Invalid values will be rejected by the API server.
|
||||
|
||||
This feature is alpha and disabled by default. You can enable it by setting the
|
||||
This feature is beta and enabled by default. You can disable it using the
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
`PodDeletionCost` in both kube-apiserver and kube-controller-manager.
|
||||
|
||||
|
||||
@@ -228,29 +228,33 @@ and Ready or completely terminated prior to launching or terminating another
|
||||
Pod. This option only affects the behavior for scaling operations. Updates are not
|
||||
affected.
|
||||
|
||||
## Update Strategies
|
||||
|
||||
In Kubernetes 1.7 and later, StatefulSet's `.spec.updateStrategy` field allows you to configure
|
||||
## Update strategies
|
||||
|
||||
A StatefulSet's `.spec.updateStrategy` field allows you to configure
|
||||
and disable automated rolling updates for containers, labels, resource request/limits, and
|
||||
annotations for the Pods in a StatefulSet.
|
||||
annotations for the Pods in a StatefulSet. There are two possible values:
|
||||
|
||||
### On Delete
|
||||
`OnDelete`
|
||||
: When a StatefulSet's `.spec.updateStrategy.type` is set to `OnDelete`,
|
||||
the StatefulSet controller will not automatically update the Pods in a
|
||||
StatefulSet. Users must manually delete Pods to cause the controller to
|
||||
create new Pods that reflect modifications made to a StatefulSet's `.spec.template`.
|
||||
|
||||
The `OnDelete` update strategy implements the legacy (1.6 and prior) behavior. When a StatefulSet's
|
||||
`.spec.updateStrategy.type` is set to `OnDelete`, the StatefulSet controller will not automatically
|
||||
update the Pods in a StatefulSet. Users must manually delete Pods to cause the controller to
|
||||
create new Pods that reflect modifications made to a StatefulSet's `.spec.template`.
|
||||
`RollingUpdate`
|
||||
: The `RollingUpdate` update strategy implements automated, rolling update for the Pods in a StatefulSet. This is the default update strategy.
|
||||
|
||||
### Rolling Updates
|
||||
## Rolling Updates
|
||||
|
||||
The `RollingUpdate` update strategy implements automated, rolling update for the Pods in a
|
||||
StatefulSet. It is the default strategy when `.spec.updateStrategy` is left unspecified. When a StatefulSet's `.spec.updateStrategy.type` is set to `RollingUpdate`, the
|
||||
When a StatefulSet's `.spec.updateStrategy.type` is set to `RollingUpdate`, the
|
||||
StatefulSet controller will delete and recreate each Pod in the StatefulSet. It will proceed
|
||||
in the same order as Pod termination (from the largest ordinal to the smallest), updating
|
||||
each Pod one at a time. It will wait until an updated Pod is Running and Ready prior to
|
||||
updating its predecessor.
|
||||
each Pod one at a time.
|
||||
|
||||
#### Partitions
|
||||
The Kubernetes control plane waits until an updated Pod is Running and Ready prior
|
||||
to updating its predecessor. If you have set `.spec.minReadySeconds` (see [Minimum Ready Seconds](#minimum-ready-seconds)), the control plane additionally waits that amount of time after the Pod turns ready, before moving on.
|
||||
|
||||
### Partitioned rolling updates {#partitions}
|
||||
|
||||
The `RollingUpdate` update strategy can be partitioned, by specifying a
|
||||
`.spec.updateStrategy.rollingUpdate.partition`. If a partition is specified, all Pods with an
|
||||
@@ -262,7 +266,7 @@ updates to its `.spec.template` will not be propagated to its Pods.
|
||||
In most cases you will not need to use a partition, but they are useful if you want to stage an
|
||||
update, roll out a canary, or perform a phased roll out.
|
||||
|
||||
#### Forced Rollback
|
||||
### Forced rollback
|
||||
|
||||
When using [Rolling Updates](#rolling-updates) with the default
|
||||
[Pod Management Policy](#pod-management-policies) (`OrderedReady`),
|
||||
@@ -282,6 +286,16 @@ After reverting the template, you must also delete any Pods that StatefulSet had
|
||||
already attempted to run with the bad configuration.
|
||||
StatefulSet will then begin to recreate the Pods using the reverted template.
|
||||
|
||||
### Minimum ready seconds
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
|
||||
`.spec.minReadySeconds` is an optional field that specifies the minimum number of seconds for which a newly
|
||||
created Pod should be ready without any of its containers crashing, for it to be considered available.
|
||||
This defaults to 0 (the Pod will be considered available as soon as it is ready). To learn more about when
|
||||
a Pod is considered ready, see [Container Probes](/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
|
||||
|
||||
Please note that this field only works if you enable the `StatefulSetMinReadySeconds` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/).
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
@@ -257,8 +257,9 @@ section.
|
||||
|
||||
## Privileged mode for containers
|
||||
|
||||
Any container in a Pod can enable privileged mode, using the `privileged` flag on the [security context](/docs/tasks/configure-pod-container/security-context/) of the container spec. This is useful for containers that want to use operating system administrative capabilities such as manipulating the network stack or accessing hardware devices.
|
||||
Processes within a privileged container get almost the same privileges that are available to processes outside a container.
|
||||
In Linux, any container in a Pod can enable privileged mode using the `privileged` (Linux) flag on the [security context](/docs/tasks/configure-pod-container/security-context/) of the container spec. This is useful for containers that want to use operating system administrative capabilities such as manipulating the network stack or accessing hardware devices.
|
||||
|
||||
If your cluster has the `WindowsHostProcessContainers` feature enabled, you can create a [Windows HostProcess pod](/docs/tasks/configure-pod-container/create-hostprocess-pod) by setting the `windowsOptions.hostProcess` flag on the security context of the pod spec. All containers in these pods must run as Windows HostProcess containers. HostProcess pods run directly on the host and can also be used to perform administrative tasks as is done with Linux privileged containers.
|
||||
|
||||
{{< note >}}
|
||||
Your {{< glossary_tooltip text="container runtime" term_id="container-runtime" >}} must support the concept of a privileged container for this setting to be relevant.
|
||||
|
||||
@@ -9,7 +9,7 @@ weight: 80
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
|
||||
{{< feature-state state="alpha" for_k8s_version="v1.22" >}}
|
||||
|
||||
This page provides an overview of ephemeral containers: a special type of container
|
||||
that runs temporarily in an existing {{< glossary_tooltip term_id="pod" >}} to
|
||||
@@ -17,7 +17,7 @@ accomplish user-initiated actions such as troubleshooting. You use ephemeral
|
||||
containers to inspect services rather than to build applications.
|
||||
|
||||
{{< warning >}}
|
||||
Ephemeral containers are in early alpha state and are not suitable for production
|
||||
Ephemeral containers are in alpha state and are not suitable for production
|
||||
clusters. In accordance with the [Kubernetes Deprecation Policy](
|
||||
/docs/reference/using-api/deprecation-policy/), this alpha feature could change
|
||||
significantly in the future or be removed entirely.
|
||||
@@ -77,119 +77,7 @@ When using ephemeral containers, it's helpful to enable [process namespace
|
||||
sharing](/docs/tasks/configure-pod-container/share-process-namespace/) so
|
||||
you can view processes in other containers.
|
||||
|
||||
See [Debugging with Ephemeral Debug Container](
|
||||
/docs/tasks/debug-application-cluster/debug-running-pod/#ephemeral-container)
|
||||
for examples of troubleshooting using ephemeral containers.
|
||||
|
||||
## Ephemeral containers API
|
||||
|
||||
{{< note >}}
|
||||
The examples in this section require the `EphemeralContainers` [feature
|
||||
gate](/docs/reference/command-line-tools-reference/feature-gates/) to be
|
||||
enabled, and Kubernetes client and server version v1.16 or later.
|
||||
{{< /note >}}
|
||||
|
||||
The examples in this section demonstrate how ephemeral containers appear in
|
||||
the API. You would normally use `kubectl debug` or another `kubectl`
|
||||
[plugin](/docs/tasks/extend-kubectl/kubectl-plugins/) to automate these steps
|
||||
rather than invoking the API directly.
|
||||
|
||||
Ephemeral containers are created using the `ephemeralcontainers` subresource
|
||||
of Pod, which can be demonstrated using `kubectl --raw`. First describe
|
||||
the ephemeral container to add as an `EphemeralContainers` list:
|
||||
|
||||
```json
|
||||
{
|
||||
"apiVersion": "v1",
|
||||
"kind": "EphemeralContainers",
|
||||
"metadata": {
|
||||
"name": "example-pod"
|
||||
},
|
||||
"ephemeralContainers": [{
|
||||
"command": [
|
||||
"sh"
|
||||
],
|
||||
"image": "busybox",
|
||||
"imagePullPolicy": "IfNotPresent",
|
||||
"name": "debugger",
|
||||
"stdin": true,
|
||||
"tty": true,
|
||||
"terminationMessagePolicy": "File"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
To update the ephemeral containers of the already running `example-pod`:
|
||||
|
||||
```shell
|
||||
kubectl replace --raw /api/v1/namespaces/default/pods/example-pod/ephemeralcontainers -f ec.json
|
||||
```
|
||||
|
||||
This will return the new list of ephemeral containers:
|
||||
|
||||
```json
|
||||
{
|
||||
"kind":"EphemeralContainers",
|
||||
"apiVersion":"v1",
|
||||
"metadata":{
|
||||
"name":"example-pod",
|
||||
"namespace":"default",
|
||||
"selfLink":"/api/v1/namespaces/default/pods/example-pod/ephemeralcontainers",
|
||||
"uid":"a14a6d9b-62f2-4119-9d8e-e2ed6bc3a47c",
|
||||
"resourceVersion":"15886",
|
||||
"creationTimestamp":"2019-08-29T06:41:42Z"
|
||||
},
|
||||
"ephemeralContainers":[
|
||||
{
|
||||
"name":"debugger",
|
||||
"image":"busybox",
|
||||
"command":[
|
||||
"sh"
|
||||
],
|
||||
"resources":{
|
||||
|
||||
},
|
||||
"terminationMessagePolicy":"File",
|
||||
"imagePullPolicy":"IfNotPresent",
|
||||
"stdin":true,
|
||||
"tty":true
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You can view the state of the newly created ephemeral container using `kubectl describe`:
|
||||
|
||||
```shell
|
||||
kubectl describe pod example-pod
|
||||
```
|
||||
|
||||
```
|
||||
...
|
||||
Ephemeral Containers:
|
||||
debugger:
|
||||
Container ID: docker://cf81908f149e7e9213d3c3644eda55c72efaff67652a2685c1146f0ce151e80f
|
||||
Image: busybox
|
||||
Image ID: docker-pullable://busybox@sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
|
||||
Port: <none>
|
||||
Host Port: <none>
|
||||
Command:
|
||||
sh
|
||||
State: Running
|
||||
Started: Thu, 29 Aug 2019 06:42:21 +0000
|
||||
Ready: False
|
||||
Restart Count: 0
|
||||
Environment: <none>
|
||||
Mounts: <none>
|
||||
...
|
||||
```
|
||||
|
||||
You can interact with the new ephemeral container in the same way as other
|
||||
containers using `kubectl attach`, `kubectl exec`, and `kubectl logs`, for
|
||||
example:
|
||||
|
||||
```shell
|
||||
kubectl attach -it example-pod -c debugger
|
||||
```
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* Learn how to [debug pods using ephemeral containers](/docs/tasks/debug-application-cluster/debug-running-pod/#ephemeral-container).
|
||||
|
||||
|
||||
@@ -71,8 +71,10 @@ configure kubernetes components or tools. Most of these APIs are not exposed
|
||||
by the API server in a RESTful way though they are essential for a user or an
|
||||
operator to use or manage a cluster.
|
||||
|
||||
* [kube-apiserver configuration (v1alpha1)](/docs/reference/config-api/apiserver-config.v1alpha1/)
|
||||
* [kubelet configuration (v1beta1)](/docs/reference/config-api/kubelet-config.v1beta1/)
|
||||
* [kube-scheduler configuration (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/)
|
||||
* [kube-scheduler configuration (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/)
|
||||
* [kube-scheduler policy reference (v1)](/docs/reference/config-api/kube-scheduler-policy-config.v1/)
|
||||
* [kube-proxy configuration (v1alpha1)](/docs/reference/config-api/kube-proxy-config.v1alpha1/)
|
||||
* [`audit.k8s.io/v1` API](/docs/reference/config-api/apiserver-audit.v1/)
|
||||
@@ -82,6 +84,7 @@ operator to use or manage a cluster.
|
||||
## Config API for kubeadm
|
||||
|
||||
* [v1beta2](/docs/reference/config-api/kubeadm-config.v1beta2/)
|
||||
* [v1beta3](/docs/reference/config-api/kubeadm-config.v1beta3/)
|
||||
|
||||
## Design Docs
|
||||
|
||||
|
||||
@@ -696,6 +696,18 @@ PodNodeSelector allows forcing pods to run on specifically labeled nodes. Also s
|
||||
admission plugin, which allows preventing pods from running on specifically tainted nodes.
|
||||
{{< /note >}}
|
||||
|
||||
### PodSecurity {#podsecurity}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
|
||||
This is the replacement for the deprecated [PodSecurityPolicy](#podsecuritypolicy) admission controller
|
||||
defined in the next section. This admission controller acts on creation and modification of the pod and
|
||||
determines if it should be admitted based on the requested security context and the
|
||||
[Pod Security Standards](/docs/concepts/security/pod-security-standards/).
|
||||
|
||||
See the [Pod Security Admission documentation](/docs/concepts/security/pod-security-admission/)
|
||||
for more information.
|
||||
|
||||
### PodSecurityPolicy {#podsecuritypolicy}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="deprecated" >}}
|
||||
|
||||
@@ -734,21 +734,32 @@ The following HTTP headers can be used to performing an impersonation request:
|
||||
* `Impersonate-User`: The username to act as.
|
||||
* `Impersonate-Group`: A group name to act as. Can be provided multiple times to set multiple groups. Optional. Requires "Impersonate-User".
|
||||
* `Impersonate-Extra-( extra name )`: A dynamic header used to associate extra fields with the user. Optional. Requires "Impersonate-User". In order to be preserved consistently, `( extra name )` should be lower-case, and any characters which aren't [legal in HTTP header labels](https://tools.ietf.org/html/rfc7230#section-3.2.6) MUST be utf8 and [percent-encoded](https://tools.ietf.org/html/rfc3986#section-2.1).
|
||||
* `Impersonate-Uid`: A unique identifier that represents the user being impersonated. Optional. Requires "Impersonate-User". Kubernetes does not impose any format requirements on this string.
|
||||
|
||||
{{< note >}}
|
||||
Prior to 1.11.3 (and 1.10.7, 1.9.11), `( extra name )` could only contain characters which were [legal in HTTP header labels](https://tools.ietf.org/html/rfc7230#section-3.2.6).
|
||||
{{< /note >}}
|
||||
|
||||
An example set of headers:
|
||||
{{< note >}}
|
||||
`Impersonate-Uid` is only available in versions 1.22.0 and higher.
|
||||
{{< /note >}}
|
||||
|
||||
An example of the impersonation headers used when impersonating a user with groups:
|
||||
```http
|
||||
Impersonate-User: jane.doe@example.com
|
||||
Impersonate-Group: developers
|
||||
Impersonate-Group: admins
|
||||
```
|
||||
|
||||
An example of the impersonation headers used when impersonating a user with a UID and
|
||||
extra fields:
|
||||
```http
|
||||
Impersonate-User: jane.doe@example.com
|
||||
Impersonate-Extra-dn: cn=jane,ou=engineers,dc=example,dc=com
|
||||
Impersonate-Extra-acme.com%2Fproject: some-project
|
||||
Impersonate-Extra-scopes: view
|
||||
Impersonate-Extra-scopes: development
|
||||
Impersonate-Uid: 06f6ce97-e2c5-4ab8-7ba5-7654dd08d52b
|
||||
```
|
||||
|
||||
When using `kubectl` set the `--as` flag to configure the `Impersonate-User`
|
||||
@@ -773,9 +784,13 @@ node/mynode cordoned
|
||||
node/mynode drained
|
||||
```
|
||||
|
||||
To impersonate a user, group, or set extra fields, the impersonating user must
|
||||
{{< note >}}
|
||||
`kubectl` cannot impersonate extra fields or UIDs.
|
||||
{{< /note >}}
|
||||
|
||||
To impersonate a user, group, user identifier (UID) or extra fields, the impersonating user must
|
||||
have the ability to perform the "impersonate" verb on the kind of attribute
|
||||
being impersonated ("user", "group", etc.). For clusters that enable the RBAC
|
||||
being impersonated ("user", "group", "uid", etc.). For clusters that enable the RBAC
|
||||
authorization plugin, the following ClusterRole encompasses the rules needed to
|
||||
set user and group impersonation headers:
|
||||
|
||||
@@ -790,19 +805,20 @@ rules:
|
||||
verbs: ["impersonate"]
|
||||
```
|
||||
|
||||
For impersonation, extra fields and impersonated UIDs are both under the "authentication.k8s.io" `apiGroup`.
|
||||
Extra fields are evaluated as sub-resources of the resource "userextras". To
|
||||
allow a user to use impersonation headers for the extra field "scopes", a user
|
||||
should be granted the following role:
|
||||
allow a user to use impersonation headers for the extra field "scopes" and
|
||||
for UIDs, a user should be granted the following role:
|
||||
|
||||
```yaml
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: scopes-impersonator
|
||||
name: scopes-and-uid-impersonator
|
||||
rules:
|
||||
# Can set "Impersonate-Extra-scopes" header.
|
||||
# Can set "Impersonate-Extra-scopes" header and the "Impersonate-Uid" header.
|
||||
- apiGroups: ["authentication.k8s.io"]
|
||||
resources: ["userextras/scopes"]
|
||||
resources: ["userextras/scopes", "uids"]
|
||||
verbs: ["impersonate"]
|
||||
```
|
||||
|
||||
@@ -832,11 +848,17 @@ rules:
|
||||
resources: ["userextras/scopes"]
|
||||
verbs: ["impersonate"]
|
||||
resourceNames: ["view", "development"]
|
||||
|
||||
# Can impersonate the uid "06f6ce97-e2c5-4ab8-7ba5-7654dd08d52b"
|
||||
- apiGroups: ["authentication.k8s.io"]
|
||||
resources: ["uids"]
|
||||
verbs: ["impersonate"]
|
||||
resourceNames: ["06f6ce97-e2c5-4ab8-7ba5-7654dd08d52b"]
|
||||
```
|
||||
|
||||
## client-go credential plugins
|
||||
|
||||
{{< feature-state for_k8s_version="v1.11" state="beta" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="stable" >}}
|
||||
|
||||
`k8s.io/client-go` and tools using it such as `kubectl` and `kubelet` are able to execute an
|
||||
external command to receive user credentials.
|
||||
@@ -867,6 +889,8 @@ To authenticate against the API:
|
||||
Credential plugins are configured through [kubectl config files](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
|
||||
as part of the user fields.
|
||||
|
||||
{{< tabs name="exec_plugin_kubeconfig_example_1" >}}
|
||||
{{% tab name="client.authentication.k8s.io/v1" %}}
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Config
|
||||
@@ -882,7 +906,81 @@ users:
|
||||
# The API version returned by the plugin MUST match the version listed here.
|
||||
#
|
||||
# To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1alpha1),
|
||||
# set an environment variable or pass an argument to the tool that indicates which version the exec plugin expects.
|
||||
# set an environment variable, pass an argument to the tool that indicates which version the exec plugin expects,
|
||||
# or read the version from the ExecCredential object in the KUBERNETES_EXEC_INFO environment variable.
|
||||
apiVersion: "client.authentication.k8s.io/v1"
|
||||
|
||||
# Environment variables to set when executing the plugin. Optional.
|
||||
env:
|
||||
- name: "FOO"
|
||||
value: "bar"
|
||||
|
||||
# Arguments to pass when executing the plugin. Optional.
|
||||
args:
|
||||
- "arg1"
|
||||
- "arg2"
|
||||
|
||||
# Text shown to the user when the executable doesn't seem to be present. Optional.
|
||||
installHint: |
|
||||
example-client-go-exec-plugin is required to authenticate
|
||||
to the current cluster. It can be installed:
|
||||
|
||||
On macOS: brew install example-client-go-exec-plugin
|
||||
|
||||
On Ubuntu: apt-get install example-client-go-exec-plugin
|
||||
|
||||
On Fedora: dnf install example-client-go-exec-plugin
|
||||
|
||||
...
|
||||
|
||||
# Whether or not to provide cluster information, which could potentially contain
|
||||
# very large CA data, to this exec plugin as a part of the KUBERNETES_EXEC_INFO
|
||||
# environment variable.
|
||||
provideClusterInfo: true
|
||||
|
||||
# The contract between the exec plugin and the standard input I/O stream. If the
|
||||
# contract cannot be satisfied, this plugin will not be run and an error will be
|
||||
# returned. Valid values are "Never" (this exec plugin never uses standard input),
|
||||
# "IfAvailable" (this exec plugin wants to use standard input if it is available),
|
||||
# or "Always" (this exec plugin requires standard input to function). Required.
|
||||
interactiveMode: Never
|
||||
clusters:
|
||||
- name: my-cluster
|
||||
cluster:
|
||||
server: "https://172.17.4.100:6443"
|
||||
certificate-authority: "/etc/kubernetes/ca.pem"
|
||||
extensions:
|
||||
- name: client.authentication.k8s.io/exec # reserved extension name for per cluster exec config
|
||||
extension:
|
||||
arbitrary: config
|
||||
this: can be provided via the KUBERNETES_EXEC_INFO environment variable upon setting provideClusterInfo
|
||||
you: ["can", "put", "anything", "here"]
|
||||
contexts:
|
||||
- name: my-cluster
|
||||
context:
|
||||
cluster: my-cluster
|
||||
user: my-user
|
||||
current-context: my-cluster
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="client.authentication.k8s.io/v1beta1" %}}
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Config
|
||||
users:
|
||||
- name: my-user
|
||||
user:
|
||||
exec:
|
||||
# Command to execute. Required.
|
||||
command: "example-client-go-exec-plugin"
|
||||
|
||||
# API version to use when decoding the ExecCredentials resource. Required.
|
||||
#
|
||||
# The API version returned by the plugin MUST match the version listed here.
|
||||
#
|
||||
# To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1alpha1),
|
||||
# set an environment variable, pass an argument to the tool that indicates which version the exec plugin expects,
|
||||
# or read the version from the ExecCredential object in the KUBERNETES_EXEC_INFO environment variable.
|
||||
apiVersion: "client.authentication.k8s.io/v1beta1"
|
||||
|
||||
# Environment variables to set when executing the plugin. Optional.
|
||||
@@ -912,6 +1010,14 @@ users:
|
||||
# very large CA data, to this exec plugin as a part of the KUBERNETES_EXEC_INFO
|
||||
# environment variable.
|
||||
provideClusterInfo: true
|
||||
|
||||
# The contract between the exec plugin and the standard input I/O stream. If the
|
||||
# contract cannot be satisfied, this plugin will not be run and an error will be
|
||||
# returned. Valid values are "Never" (this exec plugin never uses standard input),
|
||||
# "IfAvailable" (this exec plugin wants to use standard input if it is available),
|
||||
# or "Always" (this exec plugin requires standard input to function). Optional.
|
||||
# Defaults to "IfAvailable".
|
||||
interactiveMode: Never
|
||||
clusters:
|
||||
- name: my-cluster
|
||||
cluster:
|
||||
@@ -930,6 +1036,8 @@ contexts:
|
||||
user: my-user
|
||||
current-context: my-cluster
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
Relative command paths are interpreted as relative to the directory of the config file. If
|
||||
KUBECONFIG is set to `/home/jane/kubeconfig` and the exec command is `./bin/example-client-go-exec-plugin`,
|
||||
@@ -941,21 +1049,53 @@ the binary `/home/jane/bin/example-client-go-exec-plugin` is executed.
|
||||
exec:
|
||||
# Path relative to the directory of the kubeconfig
|
||||
command: "./bin/example-client-go-exec-plugin"
|
||||
apiVersion: "client.authentication.k8s.io/v1beta1"
|
||||
apiVersion: "client.authentication.k8s.io/v1"
|
||||
interactiveMode: Never
|
||||
```
|
||||
|
||||
### Input and output formats
|
||||
|
||||
The executed command prints an `ExecCredential` object to `stdout`. `k8s.io/client-go`
|
||||
authenticates against the Kubernetes API using the returned credentials in the `status`.
|
||||
The executed command is passed an `ExecCredential` object as input via the `KUBERNETES_EXEC_INFO`
|
||||
environment variable. This input contains helpful information like the expected API version
|
||||
of the returned `ExecCredential` object and whether or not the plugin can use `stdin` to interact
|
||||
with the user.
|
||||
|
||||
When run from an interactive session, `stdin` is exposed directly to the plugin. Plugins should use a
|
||||
[TTY check](https://godoc.org/golang.org/x/crypto/ssh/terminal#IsTerminal) to determine if it's
|
||||
appropriate to prompt a user interactively.
|
||||
When run from an interactive session (i.e., a terminal), `stdin` can be exposed directly
|
||||
to the plugin. Plugins should use the `spec.interactive` field of the input
|
||||
`ExecCredential` object from the `KUBERNETES_EXEC_INFO` environment variable in order to
|
||||
determine if `stdin` has been provided. A plugin's `stdin` requirements (i.e., whether
|
||||
`stdin` is optional, strictly required, or never used in order for the plugin
|
||||
to run successfully) is declared via the `user.exec.interactiveMode` field in the
|
||||
[kubeconfig](/docs/concepts/configuration/organize-cluster-access-kubeconfig/) (see table
|
||||
below for valid values). The `user.exec.interactiveMode` field is optional in `client.authentication.k8s.io/v1beta1`
|
||||
and required in `client.authentication.k8s.io/v1`.
|
||||
|
||||
{{< table caption="interactiveMode values" >}}
|
||||
| `interactiveMode` Value | Meaning |
|
||||
| ----------------------- | ------- |
|
||||
| `Never` | This exec plugin never needs to use standard input, and therefore the exec plugin will be run regardless of whether standard input is available for user input. |
|
||||
| `IfAvailable` | This exec plugin would like to use standard input if it is available, but can still operate if standard input is not available. Therefore, the exec plugin will be run regardless of whether stdin is available for user input. If standard input is available for user input, then it will be provided to this exec plugin. |
|
||||
| `Always` | This exec plugin requires standard input in order to run, and therefore the exec plugin will only be run if standard input is available for user input. If standard input is not available for user input, then the exec plugin will not be run and an error will be returned by the exec plugin runner. |
|
||||
{{< /table >}}
|
||||
|
||||
To use bearer token credentials, the plugin returns a token in the status of the
|
||||
[`ExecCredential`](/docs/reference/config-api/client-authentication.v1beta1/#client-authentication-k8s-io-v1beta1-ExecCredential)
|
||||
|
||||
{{< tabs name="exec_plugin_ExecCredential_example_1" >}}
|
||||
{{% tab name="client.authentication.k8s.io/v1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1",
|
||||
"kind": "ExecCredential",
|
||||
"status": {
|
||||
"token": "my-bearer-token"
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="client.authentication.k8s.io/v1beta1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1beta1",
|
||||
@@ -965,6 +1105,8 @@ To use bearer token credentials, the plugin returns a token in the status of the
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
Alternatively, a PEM-encoded client certificate and key can be returned to use TLS client auth.
|
||||
If the plugin returns a different certificate and key on a subsequent call, `k8s.io/client-go`
|
||||
@@ -974,6 +1116,20 @@ If specified, `clientKeyData` and `clientCertificateData` must both must be pres
|
||||
|
||||
`clientCertificateData` may contain additional intermediate certificates to send to the server.
|
||||
|
||||
{{< tabs name="exec_plugin_ExecCredential_example_2" >}}
|
||||
{{% tab name="client.authentication.k8s.io/v1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1",
|
||||
"kind": "ExecCredential",
|
||||
"status": {
|
||||
"clientCertificateData": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
|
||||
"clientKeyData": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="client.authentication.k8s.io/v1beta1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1beta1",
|
||||
@@ -984,6 +1140,8 @@ If specified, `clientKeyData` and `clientCertificateData` must both must be pres
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
Optionally, the response can include the expiry of the credential formatted as a
|
||||
RFC3339 timestamp. Presence or absence of an expiry has the following impact:
|
||||
@@ -994,6 +1152,20 @@ RFC3339 timestamp. Presence or absence of an expiry has the following impact:
|
||||
- If an expiry is omitted, the bearer token and TLS credentials are cached until
|
||||
the server responds with a 401 HTTP status code or until the process exits.
|
||||
|
||||
{{< tabs name="exec_plugin_ExecCredential_example_3" >}}
|
||||
{{% tab name="client.authentication.k8s.io/v1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1",
|
||||
"kind": "ExecCredential",
|
||||
"status": {
|
||||
"token": "my-bearer-token",
|
||||
"expirationTimestamp": "2018-03-05T17:30:20-08:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="client.authentication.k8s.io/v1beta1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1beta1",
|
||||
@@ -1004,14 +1176,38 @@ RFC3339 timestamp. Presence or absence of an expiry has the following impact:
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
To enable the exec plugin to obtain cluster-specific information, set `provideClusterInfo` on the `user.exec`
|
||||
field in the [kubeconfig](/docs/concepts/configuration/organize-cluster-access-kubeconfig/).
|
||||
The plugin will then be supplied with an environment variable, `KUBERNETES_EXEC_INFO`.
|
||||
The plugin will then be supplied this cluster-specific information in the `KUBERNETES_EXEC_INFO` environment variable.
|
||||
Information from this environment variable can be used to perform cluster-specific
|
||||
credential acquisition logic.
|
||||
The following `ExecCredential` manifest describes a cluster information sample.
|
||||
|
||||
{{< tabs name="exec_plugin_ExecCredential_example_4" >}}
|
||||
{{% tab name="client.authentication.k8s.io/v1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1",
|
||||
"kind": "ExecCredential",
|
||||
"spec": {
|
||||
"cluster": {
|
||||
"server": "https://172.17.4.100:6443",
|
||||
"certificate-authority-data": "LS0t...",
|
||||
"config": {
|
||||
"arbitrary": "config",
|
||||
"this": "can be provided via the KUBERNETES_EXEC_INFO environment variable upon setting provideClusterInfo",
|
||||
"you": ["can", "put", "anything", "here"]
|
||||
}
|
||||
},
|
||||
"interactive": true
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="client.authentication.k8s.io/v1beta1" %}}
|
||||
```json
|
||||
{
|
||||
"apiVersion": "client.authentication.k8s.io/v1beta1",
|
||||
@@ -1025,12 +1221,14 @@ The following `ExecCredential` manifest describes a cluster information sample.
|
||||
"this": "can be provided via the KUBERNETES_EXEC_INFO environment variable upon setting provideClusterInfo",
|
||||
"you": ["can", "put", "anything", "here"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"interactive": true
|
||||
}
|
||||
}
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* Read the [client authentication reference (v1beta1)](/docs/reference/config-api/client-authentication.v1beta1/)
|
||||
|
||||
|
||||
@@ -32,6 +32,9 @@ The CertificateSigningRequest object includes a PEM-encoded PKCS#10 signing requ
|
||||
the `spec.request` field. The CertificateSigningRequest denotes the signer (the
|
||||
recipient that the request is being made to) using the `spec.signerName` field.
|
||||
Note that `spec.signerName` is a required key after API version `certificates.k8s.io/v1`.
|
||||
In Kubernetes v1.22 and later, clients may optionally set the `spec.expirationSeconds`
|
||||
field to request a particular lifetime for the issued certificate. The minimum valid
|
||||
value for this field is `600`, i.e. ten minutes.
|
||||
|
||||
Once created, a CertificateSigningRequest must be approved before it can be signed.
|
||||
Depending on the signer selected, a CertificateSigningRequest may be automatically approved
|
||||
@@ -67,11 +70,12 @@ Custom signerNames can also be specified. All signers should provide information
|
||||
This includes:
|
||||
|
||||
1. **Trust distribution**: how trust (CA bundles) are distributed.
|
||||
1. **Permitted subjects**: any restrictions on requested subjects, and the behavior when a disallowed subject is requested.
|
||||
1. **Permitted x509 extensions**: including IP subjectAltNames, DNS subjectAltNames, Email subjectAltNames, URI subjectAltNames etc, and the behavior when a disallowed extension is requested.
|
||||
1. **Permitted key usages / extended key usages**: any restrictions on requested usages, and the behavior when usages different than the signer-determined usages are specified in the CSR.
|
||||
1. **Expiration/certificate lifetime**: whether it is fixed by the signer, configurable by the admin, determined by the CSR object etc, and the behavior when an expiration different than the signer-determined expiration is specified in the CSR.
|
||||
1. **CA bit allowed/disallowed**: the behavior if a CSR contains a request for a CA certificate when the signer does not permit it.
|
||||
1. **Permitted subjects**: any restrictions on and behavior when a disallowed subject is requested.
|
||||
1. **Permitted x509 extensions**: including IP subjectAltNames, DNS subjectAltNames, Email subjectAltNames, URI subjectAltNames etc, and behavior when a disallowed extension is requested.
|
||||
1. **Permitted key usages / extended key usages**: any restrictions on and behavior when usages different than the signer-determined usages are specified in the CSR.
|
||||
1. **Expiration/certificate lifetime**: whether it is fixed by the signer, configurable by the admin, determined by the CSR `spec.expirationSeconds` field, etc
|
||||
and the behavior when the signer-determined expiration is different from the CSR `spec.expirationSeconds` field.
|
||||
1. **CA bit allowed/disallowed**: and behavior if a CSR contains a request a for a CA certificate when the signer does not permit it.
|
||||
|
||||
Commonly, the `status.certificate` field contains a single PEM-encoded X.509
|
||||
certificate once the CSR is approved and the certificate is issued. Some
|
||||
@@ -80,15 +84,19 @@ that case, the documentation for the signer should specify the meaning of
|
||||
additional certificates; for example, this might be the certificate plus
|
||||
intermediates to be presented during TLS handshakes.
|
||||
|
||||
The PKCS#10 signing request format does not allow to specify a certificate
|
||||
expiration or lifetime. The expiration or lifetime therefore has to be set
|
||||
through e.g. an annotation on the CSR object. While it's theoretically
|
||||
possible for a signer to use that expiration date, there is currently no
|
||||
known implementation that does. (The built-in signers all use the same
|
||||
`ClusterSigningDuration` configuration option, which defaults to 1 year,
|
||||
and can be changed with the `--cluster-signing-duration` command-line
|
||||
flag of the kube-controller-manager.)
|
||||
The PKCS#10 signing request format does not have a standard mechanism to specify a
|
||||
certificate expiration or lifetime. The expiration or lifetime therefore has to be set
|
||||
through the `spec.expirationSeconds` field of the CSR object. The built-in signers
|
||||
use the `ClusterSigningDuration` configuration option, which defaults to 1 year,
|
||||
(the `--cluster-signing-duration` command-line flag of the kube-controller-manager)
|
||||
as the default when no `spec.expirationSeconds` is specified. When `spec.expirationSeconds`
|
||||
is specified, the minimum of `spec.expirationSeconds` and `ClusterSigningDuration` is
|
||||
used.
|
||||
|
||||
{{< note >}}
|
||||
The `spec.expirationSeconds` field was added in Kubernetes v1.22. Earlier versions of Kubernetes do not honor this field.
|
||||
Kubernetes API servers prior to v1.22 will silently drop this field when the object is created.
|
||||
{{< /note >}}
|
||||
|
||||
### Kubernetes signers
|
||||
|
||||
@@ -104,8 +112,8 @@ Kubernetes provides built-in signers that each have a well-known `signerName`:
|
||||
but it is often not the only cluster-admin subject in a cluster.
|
||||
1. Permitted x509 extensions - honors subjectAltName and key usage extensions and discards other extensions.
|
||||
1. Permitted key usages - must include `["client auth"]`. Must not include key usages beyond `["digital signature", "key encipherment", "client auth"]`.
|
||||
1. Expiration/certificate lifetime - set by the `--cluster-signing-duration` option for the
|
||||
kube-controller-manager implementation of this signer.
|
||||
1. Expiration/certificate lifetime - for the kube-controller-manager implementation of this signer, set to the minimum
|
||||
of the `--cluster-signing-duration` option or, if specified, the `spec.expirationSeconds` field of the CSR object.
|
||||
1. CA bit allowed/disallowed - not allowed.
|
||||
|
||||
1. `kubernetes.io/kube-apiserver-client-kubelet`: signs client certificates that will be honored as client certificates by the
|
||||
@@ -116,8 +124,8 @@ Kubernetes provides built-in signers that each have a well-known `signerName`:
|
||||
1. Permitted subjects - organizations are exactly `["system:nodes"]`, common name starts with "`system:node:`".
|
||||
1. Permitted x509 extensions - honors key usage extensions, forbids subjectAltName extensions and drops other extensions.
|
||||
1. Permitted key usages - exactly `["key encipherment", "digital signature", "client auth"]`.
|
||||
1. Expiration/certificate lifetime - set by the `--cluster-signing-duration` option for the
|
||||
kube-controller-manager implementation of this signer.
|
||||
1. Expiration/certificate lifetime - for the kube-controller-manager implementation of this signer, set to the minimum
|
||||
of the `--cluster-signing-duration` option or, if specified, the `spec.expirationSeconds` field of the CSR object.
|
||||
1. CA bit allowed/disallowed - not allowed.
|
||||
|
||||
1. `kubernetes.io/kubelet-serving`: signs serving certificates that are honored as a valid kubelet serving certificate
|
||||
@@ -129,8 +137,8 @@ Kubernetes provides built-in signers that each have a well-known `signerName`:
|
||||
1. Permitted x509 extensions - honors key usage and DNSName/IPAddress subjectAltName extensions, forbids EmailAddress and
|
||||
URI subjectAltName extensions, drops other extensions. At least one DNS or IP subjectAltName must be present.
|
||||
1. Permitted key usages - exactly `["key encipherment", "digital signature", "server auth"]`.
|
||||
1. Expiration/certificate lifetime - set by the `--cluster-signing-duration` option for the
|
||||
kube-controller-manager implementation of this signer.
|
||||
1. Expiration/certificate lifetime - for the kube-controller-manager implementation of this signer, set to the minimum
|
||||
of the `--cluster-signing-duration` option or, if specified, the `spec.expirationSeconds` field of the CSR object.
|
||||
1. CA bit allowed/disallowed - not allowed.
|
||||
|
||||
1. `kubernetes.io/legacy-unknown`: has no guarantees for trust at all. Some third-party distributions of Kubernetes
|
||||
@@ -141,14 +149,19 @@ Kubernetes provides built-in signers that each have a well-known `signerName`:
|
||||
1. Permitted subjects - any
|
||||
1. Permitted x509 extensions - honors subjectAltName and key usage extensions and discards other extensions.
|
||||
1. Permitted key usages - any
|
||||
1. Expiration/certificate lifetime - set by the `--cluster-signing-duration` option for the
|
||||
kube-controller-manager implementation of this signer.
|
||||
1. Expiration/certificate lifetime - for the kube-controller-manager implementation of this signer, set to the minimum
|
||||
of the `--cluster-signing-duration` option or, if specified, the `spec.expirationSeconds` field of the CSR object.
|
||||
1. CA bit allowed/disallowed - not allowed.
|
||||
|
||||
{{< note >}}
|
||||
Failures for all of these are only reported in kube-controller-manager logs.
|
||||
{{< /note >}}
|
||||
|
||||
{{< note >}}
|
||||
The `spec.expirationSeconds` field was added in Kubernetes v1.22. Earlier versions of Kubernetes do not honor this field.
|
||||
Kubernetes API servers prior to v1.22 will silently drop this field when the object is created.
|
||||
{{< /note >}}
|
||||
|
||||
Distribution of trust happens out of band for these signers. Any trust outside of those described above are strictly
|
||||
coincidental. For instance, some distributions may honor `kubernetes.io/legacy-unknown` as client certificates for the
|
||||
kube-apiserver, but this is not a standard.
|
||||
@@ -214,6 +227,7 @@ metadata:
|
||||
spec:
|
||||
request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZqQ0NBVDRDQVFBd0VURVBNQTBHQTFVRUF3d0dZVzVuWld4aE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQTByczhJTHRHdTYxakx2dHhWTTJSVlRWMDNHWlJTWWw0dWluVWo4RElaWjBOCnR2MUZtRVFSd3VoaUZsOFEzcWl0Qm0wMUFSMkNJVXBGd2ZzSjZ4MXF3ckJzVkhZbGlBNVhwRVpZM3ExcGswSDQKM3Z3aGJlK1o2MVNrVHF5SVBYUUwrTWM5T1Nsbm0xb0R2N0NtSkZNMUlMRVI3QTVGZnZKOEdFRjJ6dHBoaUlFMwpub1dtdHNZb3JuT2wzc2lHQ2ZGZzR4Zmd4eW8ybmlneFNVekl1bXNnVm9PM2ttT0x1RVF6cXpkakJ3TFJXbWlECklmMXBMWnoyalVnald4UkhCM1gyWnVVV1d1T09PZnpXM01LaE8ybHEvZi9DdS8wYk83c0x0MCt3U2ZMSU91TFcKcW90blZtRmxMMytqTy82WDNDKzBERHk5aUtwbXJjVDBnWGZLemE1dHJRSURBUUFCb0FBd0RRWUpLb1pJaHZjTgpBUUVMQlFBRGdnRUJBR05WdmVIOGR4ZzNvK21VeVRkbmFjVmQ1N24zSkExdnZEU1JWREkyQTZ1eXN3ZFp1L1BVCkkwZXpZWFV0RVNnSk1IRmQycVVNMjNuNVJsSXJ3R0xuUXFISUh5VStWWHhsdnZsRnpNOVpEWllSTmU3QlJvYXgKQVlEdUI5STZXT3FYbkFvczFqRmxNUG5NbFpqdU5kSGxpT1BjTU1oNndLaTZzZFhpVStHYTJ2RUVLY01jSVUyRgpvU2djUWdMYTk0aEpacGk3ZnNMdm1OQUxoT045UHdNMGM1dVJVejV4T0dGMUtCbWRSeEgvbUNOS2JKYjFRQm1HCkkwYitEUEdaTktXTU0xMzhIQXdoV0tkNjVoVHdYOWl4V3ZHMkh4TG1WQzg0L1BHT0tWQW9FNkpsYWFHdTlQVmkKdjlOSjVaZlZrcXdCd0hKbzZXdk9xVlA3SVFjZmg3d0drWm89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
|
||||
signerName: kubernetes.io/kube-apiserver-client
|
||||
expirationSeconds: 86400 # one day
|
||||
usages:
|
||||
- client auth
|
||||
EOF
|
||||
@@ -222,6 +236,7 @@ EOF
|
||||
Some points to note:
|
||||
|
||||
- `usages` has to be '`client auth`'
|
||||
- `expirationSeconds` could be made longer (i.e. `864000` for ten days) or shorter (i.e. `3600` for one hour)
|
||||
- `request` is the base64 encoded value of the CSR file content.
|
||||
You can get the content using this command: ```cat myuser.csr | base64 | tr -d "\n"```
|
||||
|
||||
@@ -383,6 +398,11 @@ Prior to Kubernetes v1.18, the kube-controller-manager would sign any CSRs that
|
||||
were marked as approved.
|
||||
{{< /note >}}
|
||||
|
||||
{{< note >}}
|
||||
The `spec.expirationSeconds` field was added in Kubernetes v1.22. Earlier versions of Kubernetes do not honor this field.
|
||||
Kubernetes API servers prior to v1.22 will silently drop this field when the object is created.
|
||||
{{< /note >}}
|
||||
|
||||
### API-based signers {#signer-api}
|
||||
|
||||
Users of the REST API can sign CSRs by submitting an UPDATE request to the `status`
|
||||
|
||||
@@ -86,7 +86,7 @@ Because ClusterRoles are cluster-scoped, you can also use them to grant access t
|
||||
* cluster-scoped resources (like {{< glossary_tooltip text="nodes" term_id="node" >}})
|
||||
* non-resource endpoints (like `/healthz`)
|
||||
* namespaced resources (like Pods), across all namespaces
|
||||
|
||||
|
||||
For example: you can use a ClusterRole to allow a particular user to run
|
||||
`kubectl get pods --all-namespaces`
|
||||
|
||||
@@ -685,7 +685,10 @@ When used in a <b>RoleBinding</b>, it gives full control over every resource in
|
||||
<td>Allows admin access, intended to be granted within a namespace using a <b>RoleBinding</b>.
|
||||
If used in a <b>RoleBinding</b>, allows read/write access to most resources in a namespace,
|
||||
including the ability to create roles and role bindings within the namespace.
|
||||
This role does not allow write access to resource quota or to the namespace itself.</td>
|
||||
This role does not allow write access to resource quota or to the namespace itself.
|
||||
This role also does not allow write access to Endpoints in clusters created
|
||||
using Kubernetes v1.22+. More information is available in the ["Write Access for
|
||||
Endpoints" section](#write-access-for-endpoints).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>edit</b></td>
|
||||
@@ -695,7 +698,9 @@ This role does not allow write access to resource quota or to the namespace itse
|
||||
This role does not allow viewing or modifying roles or role bindings.
|
||||
However, this role allows accessing Secrets and running Pods as any ServiceAccount in
|
||||
the namespace, so it can be used to gain the API access levels of any ServiceAccount in
|
||||
the namespace.</td>
|
||||
the namespace. This role also does not allow write access to Endpoints in
|
||||
clusters created using Kubernetes v1.22+. More information is available in the
|
||||
["Write Access for Endpoints" section](#write-access-for-endpoints).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>view</b></td>
|
||||
@@ -1185,6 +1190,24 @@ In order from most secure to least secure, the approaches are:
|
||||
--group=system:serviceaccounts
|
||||
```
|
||||
|
||||
## Write access for Endpoints
|
||||
|
||||
Kubernetes clusters created before Kubernetes v1.22 include write access to
|
||||
Endpoints in the aggregated "edit" and "admin" roles. As a mitigation for
|
||||
[CVE-2021-25740](https://github.com/kubernetes/kubernetes/issues/103675), this
|
||||
access is not part of the aggregated roles in clusters that you create using
|
||||
Kubernetes v1.22 or later.
|
||||
|
||||
Existing clusters that have been upgraded to Kubernetes v1.22 will not be
|
||||
subject to this change. The [CVE
|
||||
announcement](https://github.com/kubernetes/kubernetes/issues/103675) includes
|
||||
guidance for restricting this access in existing clusters.
|
||||
|
||||
If you want new clusters to retain this level of access in the aggregated roles,
|
||||
you can create the following ClusterRole:
|
||||
|
||||
{{< codenew file="access/endpoints-aggregated.yaml" >}}
|
||||
|
||||
## Upgrading from ABAC
|
||||
|
||||
Clusters that originally ran older Kubernetes versions often used
|
||||
|
||||
@@ -62,10 +62,9 @@ It acts synchronously to modify pods as they are created or updated. When this p
|
||||
|
||||
#### Bound Service Account Token Volume
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="beta" >}}
|
||||
{{< feature-state for_k8s_version="v1.22" state="stable" >}}
|
||||
|
||||
When the `BoundServiceAccountTokenVolume` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled, the service account admission controller will
|
||||
add the following projected volume instead of a Secret-based volume for the non-expiring service account token created by Token Controller.
|
||||
The ServiceAccount admission controller will add the following projected volume instead of a Secret-based volume for the non-expiring service account token created by Token Controller.
|
||||
|
||||
```yaml
|
||||
- name: kube-api-access-<random-suffix>
|
||||
@@ -96,10 +95,6 @@ This projected volume consists of three sources:
|
||||
|
||||
See more details about [projected volumes](/docs/tasks/configure-pod-container/configure-projected-volume-storage/).
|
||||
|
||||
You can manually migrate a Secret-based service account volume to a projected volume when
|
||||
the `BoundServiceAccountTokenVolume` feature gate is not enabled by adding the above
|
||||
projected volume to the pod spec.
|
||||
|
||||
### Token Controller
|
||||
|
||||
TokenController runs as part of `kube-controller-manager`. It acts asynchronously. It:
|
||||
|
||||
@@ -28,7 +28,7 @@ Use `-h` flag to see a full set of feature gates for all components.
|
||||
To set feature gates for a component, such as kubelet, use the `--feature-gates` flag assigned to a list of feature pairs:
|
||||
|
||||
```shell
|
||||
--feature-gates="...,DynamicKubeletConfig=true"
|
||||
--feature-gates="...,GracefulNodeShutdown=true"
|
||||
```
|
||||
|
||||
The following tables are a summary of the feature gates that you can set on
|
||||
@@ -58,65 +58,60 @@ different Kubernetes components.
|
||||
| `APIResponseCompression` | `false` | Alpha | 1.7 | 1.15 |
|
||||
| `APIResponseCompression` | `true` | Beta | 1.16 | |
|
||||
| `APIServerIdentity` | `false` | Alpha | 1.20 | |
|
||||
| `APIServerTracing` | `false` | Alpha | 1.22 | |
|
||||
| `AllowInsecureBackendProxy` | `true` | Beta | 1.17 | |
|
||||
| `AnyVolumeDataSource` | `false` | Alpha | 1.18 | |
|
||||
| `AppArmor` | `true` | Beta | 1.4 | |
|
||||
| `BalanceAttachedNodeVolumes` | `false` | Alpha | 1.11 | |
|
||||
| `BoundServiceAccountTokenVolume` | `false` | Alpha | 1.13 | 1.20 |
|
||||
| `BoundServiceAccountTokenVolume` | `true` | Beta | 1.21 | |
|
||||
| `ControllerManagerLeaderMigration` | `false` | Alpha | 1.21 | |
|
||||
| `CPUManager` | `false` | Alpha | 1.8 | 1.9 |
|
||||
| `CPUManager` | `true` | Beta | 1.10 | |
|
||||
| `CPUManagerPolicyOptions` | `false` | Alpha | 1.22 | |
|
||||
| `CSIInlineVolume` | `false` | Alpha | 1.15 | 1.15 |
|
||||
| `CSIInlineVolume` | `true` | Beta | 1.16 | - |
|
||||
| `CSIMigration` | `false` | Alpha | 1.14 | 1.16 |
|
||||
| `CSIMigration` | `true` | Beta | 1.17 | |
|
||||
| `CSIMigrationAWS` | `false` | Alpha | 1.14 | |
|
||||
| `CSIMigrationAWS` | `false` | Beta | 1.17 | |
|
||||
| `CSIMigrationAWSComplete` | `false` | Alpha | 1.17 | |
|
||||
| `CSIMigrationAzureDisk` | `false` | Alpha | 1.15 | 1.18 |
|
||||
| `CSIMigrationAzureDisk` | `false` | Beta | 1.19 | |
|
||||
| `CSIMigrationAzureDiskComplete` | `false` | Alpha | 1.17 | |
|
||||
| `CSIMigrationAzureFile` | `false` | Alpha | 1.15 | 1.19 |
|
||||
| `CSIMigrationAzureFile` | `false` | Beta | 1.21 | |
|
||||
| `CSIMigrationAzureFileComplete` | `false` | Alpha | 1.17 | |
|
||||
| `CSIMigrationGCE` | `false` | Alpha | 1.14 | 1.16 |
|
||||
| `CSIMigrationGCE` | `false` | Beta | 1.17 | |
|
||||
| `CSIMigrationGCEComplete` | `false` | Alpha | 1.17 | |
|
||||
| `CSIMigrationOpenStack` | `false` | Alpha | 1.14 | 1.17 |
|
||||
| `CSIMigrationOpenStack` | `true` | Beta | 1.18 | |
|
||||
| `CSIMigrationOpenStackComplete` | `false` | Alpha | 1.17 | |
|
||||
| `CSIMigrationvSphere` | `false` | Beta | 1.19 | |
|
||||
| `CSIMigrationvSphereComplete` | `false` | Beta | 1.19 | |
|
||||
| `CSIServiceAccountToken` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `CSIServiceAccountToken` | `true` | Beta | 1.21 | |
|
||||
| `CSIStorageCapacity` | `false` | Alpha | 1.19 | 1.20 |
|
||||
| `CSIStorageCapacity` | `true` | Beta | 1.21 | |
|
||||
| `CSIVolumeFSGroupPolicy` | `false` | Alpha | 1.19 | 1.19 |
|
||||
| `CSIVolumeFSGroupPolicy` | `true` | Beta | 1.20 | |
|
||||
| `CSIVolumeHealth` | `false` | Alpha | 1.21 | |
|
||||
| `CSRDuration` | `true` | Beta | 1.22 | |
|
||||
| `ConfigurableFSGroupPolicy` | `false` | Alpha | 1.18 | 1.19 |
|
||||
| `ConfigurableFSGroupPolicy` | `true` | Beta | 1.20 | |
|
||||
| `CronJobControllerV2` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `CronJobControllerV2` | `true` | Beta | 1.21 | |
|
||||
| `ControllerManagerLeaderMigration` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `ControllerManagerLeaderMigration` | `true` | Beta | 1.22 | |
|
||||
| `CustomCPUCFSQuotaPeriod` | `false` | Alpha | 1.12 | |
|
||||
| `DaemonSetUpdateSurge` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `DaemonSetUpdateSurge` | `true` | Beta | 1.22 | |
|
||||
| `DefaultPodTopologySpread` | `false` | Alpha | 1.19 | 1.19 |
|
||||
| `DefaultPodTopologySpread` | `true` | Beta | 1.20 | |
|
||||
| `DelegateFSGroupToCSIDriver` | `false` | Alpha | 1.22 | |
|
||||
| `DevicePlugins` | `false` | Alpha | 1.8 | 1.9 |
|
||||
| `DevicePlugins` | `true` | Beta | 1.10 | |
|
||||
| `DisableAcceleratorUsageMetrics` | `false` | Alpha | 1.19 | 1.19 |
|
||||
| `DisableAcceleratorUsageMetrics` | `true` | Beta | 1.20 | |
|
||||
| `DisableCloudProviders` | `false` | Alpha | 1.22 | |
|
||||
| `DownwardAPIHugePages` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `DownwardAPIHugePages` | `false` | Beta | 1.21 | |
|
||||
| `DynamicKubeletConfig` | `false` | Alpha | 1.4 | 1.10 |
|
||||
| `DynamicKubeletConfig` | `true` | Beta | 1.11 | |
|
||||
| `EfficientWatchResumption` | `false` | Alpha | 1.20 | |
|
||||
| `EndpointSliceProxying` | `false` | Alpha | 1.18 | 1.18 |
|
||||
| `EndpointSliceProxying` | `true` | Beta | 1.19 | |
|
||||
| `EndpointSliceTerminatingCondition` | `false` | Alpha | 1.20 | |
|
||||
| `EfficientWatchResumption` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `EfficientWatchResumption` | `true` | Beta | 1.21 | |
|
||||
| `EndpointSliceTerminatingCondition` | `false` | Alpha | 1.20 | 1.21 |
|
||||
| `EndpointSliceTerminatingCondition` | `true` | Beta | 1.22 | |
|
||||
| `EphemeralContainers` | `false` | Alpha | 1.16 | |
|
||||
| `ExpandCSIVolumes` | `false` | Alpha | 1.14 | 1.15 |
|
||||
| `ExpandCSIVolumes` | `true` | Beta | 1.16 | |
|
||||
| `ExpandedDNSConfig` | `false` | Alpha | 1.22 | |
|
||||
| `ExpandInUsePersistentVolumes` | `false` | Alpha | 1.11 | 1.14 |
|
||||
| `ExpandInUsePersistentVolumes` | `true` | Beta | 1.15 | |
|
||||
| `ExpandPersistentVolumes` | `false` | Alpha | 1.8 | 1.10 |
|
||||
@@ -128,70 +123,83 @@ different Kubernetes components.
|
||||
| `GracefulNodeShutdown` | `true` | Beta | 1.21 | |
|
||||
| `HPAContainerMetrics` | `false` | Alpha | 1.20 | |
|
||||
| `HPAScaleToZero` | `false` | Alpha | 1.16 | |
|
||||
| `HugePageStorageMediumSize` | `false` | Alpha | 1.18 | 1.18 |
|
||||
| `HugePageStorageMediumSize` | `true` | Beta | 1.19 | |
|
||||
| `IndexedJob` | `false` | Alpha | 1.21 | |
|
||||
| `IngressClassNamespacedParams` | `false` | Alpha | 1.21 | |
|
||||
| `IndexedJob` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `IndexedJob` | `true` | Beta | 1.22 | |
|
||||
| `JobTrackingWithFinalizers` | `false` | Alpha | 1.22 | |
|
||||
| `IngressClassNamespacedParams` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `IngressClassNamespacedParams` | `true` | Beta | 1.22 | |
|
||||
| `InTreePluginAWSUnregister` | `false` | Alpha | 1.21 | |
|
||||
| `InTreePluginAzureDiskUnregister` | `false` | Alpha | 1.21 | |
|
||||
| `InTreePluginAzureFileUnregister` | `false` | Alpha | 1.21 | |
|
||||
| `InTreePluginGCEUnregister` | `false` | Alpha | 1.21 | |
|
||||
| `InTreePluginOpenStackUnregister` | `false` | Alpha | 1.21 | |
|
||||
| `InTreePluginvSphereUnregister` | `false` | Alpha | 1.21 | |
|
||||
| `IPv6DualStack` | `false` | Alpha | 1.15 | 1.20 |
|
||||
| `IPv6DualStack` | `true` | Beta | 1.21 | |
|
||||
| `JobTrackingWithFinalizers` | `false` | Alpha | 1.22 | |
|
||||
| `KubeletCredentialProviders` | `false` | Alpha | 1.20 | |
|
||||
| `LegacyNodeRoleBehavior` | `false` | Alpha | 1.16 | 1.18 |
|
||||
| `LegacyNodeRoleBehavior` | `true` | Beta | 1.19 | 1.20 |
|
||||
| `LocalStorageCapacityIsolation` | `false` | Alpha | 1.7 | 1.9 |
|
||||
| `LocalStorageCapacityIsolation` | `true` | Beta | 1.10 | |
|
||||
| `LocalStorageCapacityIsolationFSQuotaMonitoring` | `false` | Alpha | 1.15 | |
|
||||
| `LogarithmicScaleDown` | `false` | Alpha | 1.21 | |
|
||||
| `LogarithmicScaleDown` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `LogarithmicScaleDown` | `true` | Beta | 1.22 | |
|
||||
| `KubeletInUserNamespace` | `false` | Alpha | 1.22 | |
|
||||
| `KubeletPodResourcesGetAllocatable` | `false` | Alpha | 1.21 | |
|
||||
| `MemoryManager` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `MemoryManager` | `true` | Beta | 1.22 | |
|
||||
| `MemoryQoS` | `false` | Alpha | 1.22 | |
|
||||
| `MixedProtocolLBService` | `false` | Alpha | 1.20 | |
|
||||
| `NamespaceDefaultLabelName` | `true` | Beta | 1.21 | |
|
||||
| `NetworkPolicyEndPort` | `false` | Alpha | 1.21 | |
|
||||
| `NodeDisruptionExclusion` | `false` | Alpha | 1.16 | 1.18 |
|
||||
| `NodeDisruptionExclusion` | `true` | Beta | 1.19 | 1.20 |
|
||||
| `NetworkPolicyEndPort` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `NetworkPolicyEndPort` | `true` | Beta | 1.22 | |
|
||||
| `NodeSwap` | `false` | Alpha | 1.22 | |
|
||||
| `NonPreemptingPriority` | `false` | Alpha | 1.15 | 1.18 |
|
||||
| `NonPreemptingPriority` | `true` | Beta | 1.19 | |
|
||||
| `PodDeletionCost` | `false` | Alpha | 1.21 | |
|
||||
| `PodAffinityNamespaceSelector` | `false` | Alpha | 1.21 | |
|
||||
| `PodDeletionCost` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `PodDeletionCost` | `true` | Beta | 1.22 | |
|
||||
| `PodAffinityNamespaceSelector` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `PodAffinityNamespaceSelector` | `true` | Beta | 1.22 | |
|
||||
| `PodOverhead` | `false` | Alpha | 1.16 | 1.17 |
|
||||
| `PodOverhead` | `true` | Beta | 1.18 | |
|
||||
| `ProbeTerminationGracePeriod` | `false` | Alpha | 1.21 | |
|
||||
| `PodOverhead` | `true` | Beta | 1.18 | |
|
||||
| `PodSecurity` | `false` | Alpha | 1.22 | |
|
||||
| `PreferNominatedNode` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `PreferNominatedNode` | `true` | Beta | 1.22 | |
|
||||
| `ProbeTerminationGracePeriod` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `ProbeTerminationGracePeriod` | `false` | Beta | 1.22 | |
|
||||
| `ProxyTerminatingEndpoints` | `false` | Alpha | 1.22 | |
|
||||
| `ProcMountType` | `false` | Alpha | 1.12 | |
|
||||
| `QOSReserved` | `false` | Alpha | 1.11 | |
|
||||
| `ReadWriteOncePod` | `false` | Alpha | 1.22 | |
|
||||
| `RemainingItemCount` | `false` | Alpha | 1.15 | 1.15 |
|
||||
| `RemainingItemCount` | `true` | Beta | 1.16 | |
|
||||
| `RemoveSelfLink` | `false` | Alpha | 1.16 | 1.19 |
|
||||
| `RemoveSelfLink` | `true` | Beta | 1.20 | |
|
||||
| `RotateKubeletServerCertificate` | `false` | Alpha | 1.7 | 1.11 |
|
||||
| `RotateKubeletServerCertificate` | `true` | Beta | 1.12 | |
|
||||
| `RunAsGroup` | `true` | Beta | 1.14 | |
|
||||
| `ServerSideApply` | `false` | Alpha | 1.14 | 1.15 |
|
||||
| `ServerSideApply` | `true` | Beta | 1.16 | |
|
||||
| `ServiceInternalTrafficPolicy` | `false` | Alpha | 1.21 | |
|
||||
| `ServiceLBNodePortControl` | `false` | Alpha | 1.20 | |
|
||||
| `ServiceLoadBalancerClass` | `false` | Alpha | 1.21 | |
|
||||
| `ServiceNodeExclusion` | `false` | Alpha | 1.8 | 1.18 |
|
||||
| `ServiceNodeExclusion` | `true` | Beta | 1.19 | 1.20 |
|
||||
| `ServiceTopology` | `false` | Alpha | 1.17 | |
|
||||
| `SetHostnameAsFQDN` | `false` | Alpha | 1.19 | 1.19 |
|
||||
| `SetHostnameAsFQDN` | `true` | Beta | 1.20 | |
|
||||
| `SizeMemoryBackedVolumes` | `false` | Alpha | 1.20 | |
|
||||
| `SeccompDefault` | `false` | Alpha | 1.22 | |
|
||||
| `ServiceInternalTrafficPolicy` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `ServiceInternalTrafficPolicy` | `true` | Beta | 1.22 | |
|
||||
| `ServiceLBNodePortControl` | `false` | Alpha | 1.20 | 1.21 |
|
||||
| `ServiceLBNodePortControl` | `true` | Beta | 1.22 | |
|
||||
| `ServiceLoadBalancerClass` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `ServiceLoadBalancerClass` | `true` | Beta | 1.22 | |
|
||||
| `SizeMemoryBackedVolumes` | `false` | Alpha | 1.20 | 1.21 |
|
||||
| `SizeMemoryBackedVolumes` | `true` | Beta | 1.22 | |
|
||||
| `StatefulSetMinReadySeconds` | `false` | Alpha | 1.22 | |
|
||||
| `StorageVersionAPI` | `false` | Alpha | 1.20 | |
|
||||
| `StorageVersionHash` | `false` | Alpha | 1.14 | 1.14 |
|
||||
| `StorageVersionHash` | `true` | Beta | 1.15 | |
|
||||
| `SuspendJob` | `false` | Alpha | 1.21 | |
|
||||
| `SuspendJob` | `false` | Alpha | 1.21 | 1.21 |
|
||||
| `SuspendJob` | `true` | Beta | 1.22 | |
|
||||
| `TTLAfterFinished` | `false` | Alpha | 1.12 | 1.20 |
|
||||
| `TTLAfterFinished` | `true` | Beta | 1.21 | |
|
||||
| `TopologyAwareHints` | `false` | Alpha | 1.21 | |
|
||||
| `TopologyManager` | `false` | Alpha | 1.16 | 1.17 |
|
||||
| `TopologyManager` | `true` | Beta | 1.18 | |
|
||||
| `ValidateProxyRedirects` | `false` | Alpha | 1.12 | 1.13 |
|
||||
| `ValidateProxyRedirects` | `true` | Beta | 1.14 | |
|
||||
| `VolumeCapacityPriority` | `false` | Alpha | 1.21 | - |
|
||||
| `WarningHeaders` | `true` | Beta | 1.19 | |
|
||||
| `WinDSR` | `false` | Alpha | 1.14 | |
|
||||
| `WinOverlay` | `false` | Alpha | 1.14 | 1.19 |
|
||||
| `WinOverlay` | `true` | Beta | 1.20 | |
|
||||
| `WindowsEndpointSliceProxying` | `false` | Alpha | 1.19 | 1.20 |
|
||||
| `WindowsEndpointSliceProxying` | `true` | Beta | 1.21 | |
|
||||
| `WindowsHostProcessContainers` | `false` | Alpha | 1.22 | |
|
||||
{{< /table >}}
|
||||
|
||||
### Feature gates for graduated or deprecated features
|
||||
@@ -209,9 +217,17 @@ different Kubernetes components.
|
||||
| `AffinityInAnnotations` | - | Deprecated | 1.8 | - |
|
||||
| `AllowExtTrafficLocalEndpoints` | `false` | Beta | 1.4 | 1.6 |
|
||||
| `AllowExtTrafficLocalEndpoints` | `true` | GA | 1.7 | - |
|
||||
| `AttachVolumeLimit` | `false` | Alpha | 1.11 | 1.11 |
|
||||
| `AttachVolumeLimit` | `true` | Beta | 1.12 | 1.16 |
|
||||
| `AttachVolumeLimit` | `true` | GA | 1.17 | - |
|
||||
| `BalanceAttachedNodeVolumes` | `false` | Alpha | 1.11 | 1.21 |
|
||||
| `BalanceAttachedNodeVolumes` | `false` | Deprecated | 1.22 | |
|
||||
| `BlockVolume` | `false` | Alpha | 1.9 | 1.12 |
|
||||
| `BlockVolume` | `true` | Beta | 1.13 | 1.17 |
|
||||
| `BlockVolume` | `true` | GA | 1.18 | - |
|
||||
| `BoundServiceAccountTokenVolume` | `false` | Alpha | 1.13 | 1.20 |
|
||||
| `BoundServiceAccountTokenVolume` | `true` | Beta | 1.21 | 1.21 |
|
||||
| `BoundServiceAccountTokenVolume` | `true` | GA | 1.22 | - |
|
||||
| `CRIContainerLogRotation` | `false` | Alpha | 1.10 | 1.10 |
|
||||
| `CRIContainerLogRotation` | `true` | Beta | 1.11 | 1.20 |
|
||||
| `CRIContainerLogRotation` | `true` | GA | 1.21 | - |
|
||||
@@ -221,15 +237,30 @@ different Kubernetes components.
|
||||
| `CSIDriverRegistry` | `false` | Alpha | 1.12 | 1.13 |
|
||||
| `CSIDriverRegistry` | `true` | Beta | 1.14 | 1.17 |
|
||||
| `CSIDriverRegistry` | `true` | GA | 1.18 | |
|
||||
| `CSIMigrationAWSComplete` | `false` | Alpha | 1.17 | 1.20 |
|
||||
| `CSIMigrationAWSComplete` | - | Deprecated | 1.21 | - |
|
||||
| `CSIMigrationAzureDiskComplete` | `false` | Alpha | 1.17 | 1.20 |
|
||||
| `CSIMigrationAzureDiskComplete` | - | Deprecated | 1.21 | - |
|
||||
| `CSIMigrationAzureFileComplete` | `false` | Alpha | 1.17 | 1.20 |
|
||||
| `CSIMigrationAzureFileComplete` | - | Deprecated | 1.21 | - |
|
||||
| `CSIMigrationGCEComplete` | `false` | Alpha | 1.17 | 1.20 |
|
||||
| `CSIMigrationGCEComplete` | - | Deprecated | 1.21 | - |
|
||||
| `CSIMigrationOpenStackComplete` | `false` | Alpha | 1.17 | 1.20 |
|
||||
| `CSIMigrationOpenStackComplete` | - | Deprecated | 1.21 | - |
|
||||
| `CSIMigrationvSphereComplete` | `false` | Beta | 1.19 | 1.21 |
|
||||
| `CSIMigrationvSphereComplete` | - | Deprecated | 1.22 | - |
|
||||
| `CSINodeInfo` | `false` | Alpha | 1.12 | 1.13 |
|
||||
| `CSINodeInfo` | `true` | Beta | 1.14 | 1.16 |
|
||||
| `CSINodeInfo` | `true` | GA | 1.17 | |
|
||||
| `AttachVolumeLimit` | `false` | Alpha | 1.11 | 1.11 |
|
||||
| `AttachVolumeLimit` | `true` | Beta | 1.12 | 1.16 |
|
||||
| `AttachVolumeLimit` | `true` | GA | 1.17 | - |
|
||||
| `CSIPersistentVolume` | `false` | Alpha | 1.9 | 1.9 |
|
||||
| `CSIPersistentVolume` | `true` | Beta | 1.10 | 1.12 |
|
||||
| `CSIPersistentVolume` | `true` | GA | 1.13 | - |
|
||||
| `CSIServiceAccountToken` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `CSIServiceAccountToken` | `true` | Beta | 1.21 | 1.21 |
|
||||
| `CSIServiceAccountToken` | `true` | GA | 1.22 | |
|
||||
| `CronJobControllerV2` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `CronJobControllerV2` | `true` | Beta | 1.21 | 1.21 |
|
||||
| `CronJobControllerV2` | `true` | GA | 1.22 | - |
|
||||
| `CustomPodDNS` | `false` | Alpha | 1.9 | 1.9 |
|
||||
| `CustomPodDNS` | `true` | Beta| 1.10 | 1.13 |
|
||||
| `CustomPodDNS` | `true` | GA | 1.14 | - |
|
||||
@@ -253,8 +284,14 @@ different Kubernetes components.
|
||||
| `DryRun` | `true` | GA | 1.19 | - |
|
||||
| `DynamicAuditing` | `false` | Alpha | 1.13 | 1.18 |
|
||||
| `DynamicAuditing` | - | Deprecated | 1.19 | - |
|
||||
| `DynamicKubeletConfig` | `false` | Alpha | 1.4 | 1.10 |
|
||||
| `DynamicKubeletConfig` | `true` | Beta | 1.11 | 1.21 |
|
||||
| `DynamicKubeletConfig` | `false` | Deprecated | 1.22 | - |
|
||||
| `DynamicProvisioningScheduling` | `false` | Alpha | 1.11 | 1.11 |
|
||||
| `DynamicProvisioningScheduling` | - | Deprecated| 1.12 | - |
|
||||
| `DynamicKubeletConfig` | `false` | Alpha | 1.4 | 1.10 |
|
||||
| `DynamicKubeletConfig` | `true` | Beta | 1.11 | 1.21 |
|
||||
| `DynamicKubeletConfig` | `false` | Deprecated | 1.22 | - |
|
||||
| `DynamicVolumeProvisioning` | `true` | Alpha | 1.3 | 1.7 |
|
||||
| `DynamicVolumeProvisioning` | `true` | GA | 1.8 | - |
|
||||
| `EnableAggregatedDiscoveryTimeout` | `true` | Deprecated | 1.16 | - |
|
||||
@@ -266,6 +303,9 @@ different Kubernetes components.
|
||||
| `EndpointSlice` | `true` | GA | 1.21 | - |
|
||||
| `EndpointSliceNodeName` | `false` | Alpha | 1.20 | 1.20 |
|
||||
| `EndpointSliceNodeName` | `true` | GA | 1.21 | - |
|
||||
| `EndpointSliceProxying` | `false` | Alpha | 1.18 | 1.18 |
|
||||
| `EndpointSliceProxying` | `true` | Beta | 1.19 | 1.21 |
|
||||
| `EndpointSliceProxying` | `true` | GA | 1.22 | - |
|
||||
| `ExperimentalCriticalPodAnnotation` | `false` | Alpha | 1.5 | 1.12 |
|
||||
| `ExperimentalCriticalPodAnnotation` | `false` | Deprecated | 1.13 | - |
|
||||
| `EvenPodsSpread` | `false` | Alpha | 1.16 | 1.17 |
|
||||
@@ -275,9 +315,15 @@ different Kubernetes components.
|
||||
| `ExternalPolicyForExternalIP` | `true` | GA | 1.18 | - |
|
||||
| `GCERegionalPersistentDisk` | `true` | Beta | 1.10 | 1.12 |
|
||||
| `GCERegionalPersistentDisk` | `true` | GA | 1.13 | - |
|
||||
| `HugePageStorageMediumSize` | `false` | Alpha | 1.18 | 1.18 |
|
||||
| `HugePageStorageMediumSize` | `true` | Beta | 1.19 | 1.21 |
|
||||
| `HugePageStorageMediumSize` | `true` | GA | 1.22 | - |
|
||||
| `HugePages` | `false` | Alpha | 1.8 | 1.9 |
|
||||
| `HugePages` | `true` | Beta| 1.10 | 1.13 |
|
||||
| `HugePages` | `true` | GA | 1.14 | - |
|
||||
| `HugePageStorageMediumSize` | `false` | Alpha | 1.18 | 1.18 |
|
||||
| `HugePageStorageMediumSize` | `true` | Beta | 1.19 | 1.21 |
|
||||
| `HugePageStorageMediumSize` | `true` | GA | 1.22 | - |
|
||||
| `HyperVContainer` | `false` | Alpha | 1.10 | 1.19 |
|
||||
| `HyperVContainer` | `false` | Deprecated | 1.20 | - |
|
||||
| `ImmutableEphemeralVolumes` | `false` | Alpha | 1.18 | 1.18 |
|
||||
@@ -293,16 +339,22 @@ different Kubernetes components.
|
||||
| `KubeletPodResources` | `false` | Alpha | 1.13 | 1.14 |
|
||||
| `KubeletPodResources` | `true` | Beta | 1.15 | |
|
||||
| `KubeletPodResources` | `true` | GA | 1.20 | |
|
||||
| `LegacyNodeRoleBehavior` | `false` | Alpha | 1.16 | 1.18 |
|
||||
| `LegacyNodeRoleBehavior` | `true` | Beta | 1.19 | 1.20 |
|
||||
| `LegacyNodeRoleBehavior` | `false` | GA | 1.21 | - |
|
||||
| `MountContainers` | `false` | Alpha | 1.9 | 1.16 |
|
||||
| `MountContainers` | `false` | Deprecated | 1.17 | - |
|
||||
| `MountPropagation` | `false` | Alpha | 1.8 | 1.9 |
|
||||
| `MountPropagation` | `true` | Beta | 1.10 | 1.11 |
|
||||
| `MountPropagation` | `true` | GA | 1.12 | - |
|
||||
| `NodeDisruptionExclusion` | `false` | Alpha | 1.16 | 1.18 |
|
||||
| `NodeDisruptionExclusion` | `true` | Beta | 1.19 | 1.20 |
|
||||
| `NodeDisruptionExclusion` | `true` | GA | 1.21 | - |
|
||||
| `NodeLease` | `false` | Alpha | 1.12 | 1.13 |
|
||||
| `NodeLease` | `true` | Beta | 1.14 | 1.16 |
|
||||
| `NodeLease` | `true` | GA | 1.17 | - |
|
||||
| `NamespaceDefaultLabelName` | `true` | Beta | 1.21 | 1.21 |
|
||||
| `NamespaceDefaultLabelName` | `true` | GA | 1.22 | - |
|
||||
| `PVCProtection` | `false` | Alpha | 1.9 | 1.9 |
|
||||
| `PVCProtection` | - | Deprecated | 1.10 | - |
|
||||
| `PersistentLocalVolumes` | `false` | Alpha | 1.7 | 1.9 |
|
||||
@@ -332,15 +384,23 @@ different Kubernetes components.
|
||||
| `RootCAConfigMap` | `true` | GA | 1.21 | - |
|
||||
| `RotateKubeletClientCertificate` | `true` | Beta | 1.8 | 1.18 |
|
||||
| `RotateKubeletClientCertificate` | `true` | GA | 1.19 | - |
|
||||
| `RunAsGroup` | `true` | Beta | 1.14 | 1.20 |
|
||||
| `RunAsGroup` | `true` | GA | 1.21 | - |
|
||||
| `RuntimeClass` | `false` | Alpha | 1.12 | 1.13 |
|
||||
| `RuntimeClass` | `true` | Beta | 1.14 | 1.19 |
|
||||
| `RuntimeClass` | `true` | GA | 1.20 | - |
|
||||
| `ScheduleDaemonSetPods` | `false` | Alpha | 1.11 | 1.11 |
|
||||
| `ScheduleDaemonSetPods` | `true` | Beta | 1.12 | 1.16 |
|
||||
| `ScheduleDaemonSetPods` | `true` | GA | 1.17 | - |
|
||||
| `SCTPSupport` | `false` | Alpha | 1.12 | 1.18 |
|
||||
| `SCTPSupport` | `true` | Beta | 1.19 | 1.19 |
|
||||
| `SCTPSupport` | `true` | GA | 1.20 | - |
|
||||
| `ScheduleDaemonSetPods` | `false` | Alpha | 1.11 | 1.11 |
|
||||
| `ScheduleDaemonSetPods` | `true` | Beta | 1.12 | 1.16 |
|
||||
| `ScheduleDaemonSetPods` | `true` | GA | 1.17 | - |
|
||||
| `SelectorIndex` | `false` | Alpha | 1.18 | 1.18 |
|
||||
| `SelectorIndex` | `true` | Beta | 1.19 | 1.19 |
|
||||
| `SelectorIndex` | `true` | GA | 1.20 | - |
|
||||
| `ServerSideApply` | `false` | Alpha | 1.14 | 1.15 |
|
||||
| `ServerSideApply` | `true` | Beta | 1.16 | 1.21 |
|
||||
| `ServerSideApply` | `true` | GA | 1.22 | - |
|
||||
| `ServiceAccountIssuerDiscovery` | `false` | Alpha | 1.18 | 1.19 |
|
||||
| `ServiceAccountIssuerDiscovery` | `true` | Beta | 1.20 | 1.20 |
|
||||
| `ServiceAccountIssuerDiscovery` | `true` | GA | 1.21 | - |
|
||||
@@ -350,15 +410,23 @@ different Kubernetes components.
|
||||
| `ServiceLoadBalancerFinalizer` | `false` | Alpha | 1.15 | 1.15 |
|
||||
| `ServiceLoadBalancerFinalizer` | `true` | Beta | 1.16 | 1.16 |
|
||||
| `ServiceLoadBalancerFinalizer` | `true` | GA | 1.17 | - |
|
||||
| `ServiceNodeExclusion` | `false` | Alpha | 1.8 | 1.18 |
|
||||
| `ServiceNodeExclusion` | `true` | Beta | 1.19 | 1.20 |
|
||||
| `ServiceNodeExclusion` | `true` | GA | 1.21 | - |
|
||||
| `ServiceTopology` | `false` | Alpha | 1.17 | 1.19 |
|
||||
| `ServiceTopology` | `false` | Deprecated | 1.20 | - |
|
||||
| `SetHostnameAsFQDN` | `false` | Alpha | 1.19 | 1.19 |
|
||||
| `SetHostnameAsFQDN` | `true` | Beta | 1.20 | 1.21 |
|
||||
| `SetHostnameAsFQDN` | `true` | GA | 1.22 | - |
|
||||
| `StartupProbe` | `false` | Alpha | 1.16 | 1.17 |
|
||||
| `StartupProbe` | `true` | Beta | 1.18 | 1.19 |
|
||||
| `StartupProbe` | `true` | GA | 1.20 | - |
|
||||
| `StorageObjectInUseProtection` | `true` | Beta | 1.10 | 1.10 |
|
||||
| `StorageObjectInUseProtection` | `true` | GA | 1.11 | - |
|
||||
| `StreamingProxyRedirects` | `false` | Beta | 1.5 | 1.5 |
|
||||
| `StreamingProxyRedirects` | `true` | Beta | 1.6 | 1.18 |
|
||||
| `StreamingProxyRedirects` | - | GA | 1.19 | - |
|
||||
| `StreamingProxyRedirects` | `true` | Beta | 1.6 | 1.17 |
|
||||
| `StreamingProxyRedirects` | `true` | Deprecated | 1.18 | 1.21 |
|
||||
| `StreamingProxyRedirects` | `false` | Deprecated | 1.22 | - |
|
||||
| `SupportIPVSProxyMode` | `false` | Alpha | 1.8 | 1.8 |
|
||||
| `SupportIPVSProxyMode` | `false` | Beta | 1.9 | 1.9 |
|
||||
| `SupportIPVSProxyMode` | `true` | Beta | 1.10 | 1.10 |
|
||||
@@ -383,6 +451,9 @@ different Kubernetes components.
|
||||
| `TokenRequestProjection` | `false` | Alpha | 1.11 | 1.11 |
|
||||
| `TokenRequestProjection` | `true` | Beta | 1.12 | 1.19 |
|
||||
| `TokenRequestProjection` | `true` | GA | 1.20 | - |
|
||||
| `ValidateProxyRedirects` | `false` | Alpha | 1.12 | 1.13 |
|
||||
| `ValidateProxyRedirects` | `true` | Beta | 1.14 | 1.21 |
|
||||
| `ValidateProxyRedirects` | `true` | Deprecated | 1.22 | - |
|
||||
| `VolumePVCDataSource` | `false` | Alpha | 1.15 | 1.15 |
|
||||
| `VolumePVCDataSource` | `true` | Beta | 1.16 | 1.17 |
|
||||
| `VolumePVCDataSource` | `true` | GA | 1.18 | - |
|
||||
@@ -396,12 +467,18 @@ different Kubernetes components.
|
||||
| `VolumeSubpathEnvExpansion` | `false` | Alpha | 1.14 | 1.14 |
|
||||
| `VolumeSubpathEnvExpansion` | `true` | Beta | 1.15 | 1.16 |
|
||||
| `VolumeSubpathEnvExpansion` | `true` | GA | 1.17 | - |
|
||||
| `WarningHeaders` | `true` | Beta | 1.19 | 1.21 |
|
||||
| `WarningHeaders` | `true` | GA | 1.22 | - |
|
||||
| `WatchBookmark` | `false` | Alpha | 1.15 | 1.15 |
|
||||
| `WatchBookmark` | `true` | Beta | 1.16 | 1.16 |
|
||||
| `WatchBookmark` | `true` | GA | 1.17 | - |
|
||||
| `WindowsEndpointSliceProxying` | `false` | Alpha | 1.19 | 1.20 |
|
||||
| `WindowsEndpointSliceProxying` | `true` | Beta | 1.21 | 1.21 |
|
||||
| `WindowsEndpointSliceProxying` | `true` | GA | 1.22| - |
|
||||
| `WindowsGMSA` | `false` | Alpha | 1.14 | 1.15 |
|
||||
| `WindowsGMSA` | `true` | Beta | 1.16 | 1.17 |
|
||||
| `WindowsGMSA` | `true` | GA | 1.18 | - |
|
||||
| `WindowsHostProcessContainers` | `false` | Alpha | 1.22 |
|
||||
| `WindowsRunAsUserName` | `false` | Alpha | 1.16 | 1.16 |
|
||||
| `WindowsRunAsUserName` | `true` | Beta | 1.17 | 1.17 |
|
||||
| `WindowsRunAsUserName` | `true` | GA | 1.18 | - |
|
||||
@@ -456,6 +533,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
prioritization and fairness at each server. (Renamed from `RequestManagement`)
|
||||
- `APIResponseCompression`: Compress the API responses for `LIST` or `GET` requests.
|
||||
- `APIServerIdentity`: Assign each API server an ID in a cluster.
|
||||
- `APIServerTracing`: Add support for distributed tracing in the API server.
|
||||
- `Accelerators`: Enable Nvidia GPU support when using Docker
|
||||
- `AdvancedAuditing`: Enable [advanced auditing](/docs/tasks/debug-application-cluster/audit/#advanced-audit)
|
||||
- `AffinityInAnnotations`: Enable setting
|
||||
@@ -489,6 +567,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
(e.g. the cloud-controller-manager) in an HA cluster without downtime.
|
||||
- `CPUManager`: Enable container level CPU affinity support, see
|
||||
[CPU Management Policies](/docs/tasks/administer-cluster/cpu-management-policies/).
|
||||
- `CPUManagerPolicyOptions`: Allow fine-tuning of CPUManager policies.
|
||||
- `CRIContainerLogRotation`: Enable container log rotation for CRI container runtime. The default max size of a log file is 10MB and the
|
||||
default max number of log files allowed for a container is 5. These values can be configured in the kubelet config.
|
||||
See the [logging at node level](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level) documentation for more details.
|
||||
@@ -508,7 +587,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
kubelet and volume controllers and enables shims and translation logic to
|
||||
route volume operations from the AWS-EBS in-tree plugin to EBS CSI plugin.
|
||||
Requires CSIMigration and CSIMigrationAWS feature flags enabled and EBS CSI
|
||||
plugin installed and configured on all nodes in the cluster.
|
||||
plugin installed and configured on all nodes in the cluster. This flag has
|
||||
been deprecated in favor of the `InTreePluginAWSUnregister` feature flag
|
||||
which prevents the registration of in-tree EBS plugin.
|
||||
- `CSIMigrationAzureDisk`: Enables shims and translation logic to route volume
|
||||
operations from the Azure-Disk in-tree plugin to AzureDisk CSI plugin.
|
||||
Supports falling back to in-tree AzureDisk plugin if a node does not have
|
||||
@@ -519,7 +600,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
logic to route volume operations from the Azure-Disk in-tree plugin to
|
||||
AzureDisk CSI plugin. Requires CSIMigration and CSIMigrationAzureDisk feature
|
||||
flags enabled and AzureDisk CSI plugin installed and configured on all nodes
|
||||
in the cluster.
|
||||
in the cluster. This flag has been deprecated in favor of the
|
||||
`InTreePluginAzureDiskUnregister` feature flag which prevents the registration of in-tree AzureDisk plugin.
|
||||
- `CSIMigrationAzureFile`: Enables shims and translation logic to route volume
|
||||
operations from the Azure-File in-tree plugin to AzureFile CSI plugin.
|
||||
Supports falling back to in-tree AzureFile plugin if a node does not have
|
||||
@@ -530,7 +612,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
logic to route volume operations from the Azure-File in-tree plugin to
|
||||
AzureFile CSI plugin. Requires CSIMigration and CSIMigrationAzureFile feature
|
||||
flags enabled and AzureFile CSI plugin installed and configured on all nodes
|
||||
in the cluster.
|
||||
in the cluster. This flag has been deprecated in favor of the
|
||||
`InTreePluginAzureFileUnregister` feature flag which prevents the registration
|
||||
of in-tree AzureFile plugin.
|
||||
- `CSIMigrationGCE`: Enables shims and translation logic to route volume
|
||||
operations from the GCE-PD in-tree plugin to PD CSI plugin. Supports falling
|
||||
back to in-tree GCE plugin if a node does not have PD CSI plugin installed and
|
||||
@@ -539,7 +623,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
kubelet and volume controllers and enables shims and translation logic to
|
||||
route volume operations from the GCE-PD in-tree plugin to PD CSI plugin.
|
||||
Requires CSIMigration and CSIMigrationGCE feature flags enabled and PD CSI
|
||||
plugin installed and configured on all nodes in the cluster.
|
||||
plugin installed and configured on all nodes in the cluster. This flag has
|
||||
been deprecated in favor of the `InTreePluginGCEUnregister` feature flag which prevents the registration of in-tree GCE PD plugin.
|
||||
- `CSIMigrationOpenStack`: Enables shims and translation logic to route volume
|
||||
operations from the Cinder in-tree plugin to Cinder CSI plugin. Supports
|
||||
falling back to in-tree Cinder plugin if a node does not have Cinder CSI
|
||||
@@ -548,7 +633,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
kubelet and volume controllers and enables shims and translation logic to route
|
||||
volume operations from the Cinder in-tree plugin to Cinder CSI plugin.
|
||||
Requires CSIMigration and CSIMigrationOpenStack feature flags enabled and Cinder
|
||||
CSI plugin installed and configured on all nodes in the cluster.
|
||||
CSI plugin installed and configured on all nodes in the cluster. This flag has
|
||||
been deprecated in favor of the `InTreePluginOpenStackUnregister` feature flag which prevents the registration of in-tree openstack cinder plugin.
|
||||
- `CSIMigrationvSphere`: Enables shims and translation logic to route volume operations
|
||||
from the vSphere in-tree plugin to vSphere CSI plugin.
|
||||
Supports falling back to in-tree vSphere plugin if a node does not have vSphere
|
||||
@@ -557,7 +643,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
and volume controllers and enables shims and translation logic to route volume operations
|
||||
from the vSphere in-tree plugin to vSphere CSI plugin. Requires CSIMigration and
|
||||
CSIMigrationvSphere feature flags enabled and vSphere CSI plugin installed and
|
||||
configured on all nodes in the cluster.
|
||||
configured on all nodes in the cluster. This flag has been deprecated in favor
|
||||
of the `InTreePluginvSphereUnregister` feature flag which prevents the registration of in-tree vsphere plugin.
|
||||
- `CSINodeInfo`: Enable all logic related to the CSINodeInfo API object in csi.storage.k8s.io.
|
||||
- `CSIPersistentVolume`: Enable discovering and mounting volumes provisioned through a
|
||||
[CSI (Container Storage Interface)](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md)
|
||||
@@ -573,14 +660,17 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
This field controls whether volumes created by a CSIDriver support volume ownership
|
||||
and permission modifications when these volumes are mounted.
|
||||
- `CSIVolumeHealth`: Enable support for CSI volume health monitoring on node.
|
||||
- `CSRDuration`: Allows clients to request a duration for certificates issued
|
||||
via the Kubernetes CSR API.
|
||||
- `ConfigurableFSGroupPolicy`: Allows user to configure volume permission change policy
|
||||
for fsGroups when mounting a volume in a Pod. See
|
||||
[Configure volume permission and ownership change policy for Pods](/docs/tasks/configure-pod-container/security-context/#configure-volume-permission-and-ownership-change-policy-for-pods)
|
||||
for more details.
|
||||
- `ControllerManagerLeaderMigration`: Enables leader migration for
|
||||
`kube-controller-manager` and `cloud-controller-manager`.
|
||||
- `CronJobControllerV2`: Use an alternative implementation of the
|
||||
{{< glossary_tooltip text="CronJob" term_id="cronjob" >}} controller. Otherwise,
|
||||
version 1 of the same controller is selected.
|
||||
The version 2 controller provides experimental performance improvements.
|
||||
- `CustomCPUCFSQuotaPeriod`: Enable nodes to change `cpuCFSQuotaPeriod` in
|
||||
[kubelet config](/docs/tasks/administer-cluster/kubelet-config-file/).
|
||||
- `CustomPodDNS`: Enable customizing the DNS settings for a Pod using its `dnsConfig` property.
|
||||
@@ -594,12 +684,20 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
[CustomResourceDefinition](/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
|
||||
- `CustomResourceWebhookConversion`: Enable webhook-based conversion
|
||||
on resources created from [CustomResourceDefinition](/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
|
||||
- `DaemonSetUpdateSurge`: Enables the DaemonSet workloads to maintain
|
||||
availability during update per node.
|
||||
- `DefaultPodTopologySpread`: Enables the use of `PodTopologySpread` scheduling plugin to do
|
||||
[default spreading](/docs/concepts/workloads/pods/pod-topology-spread-constraints/#internal-default-constraints).
|
||||
- `DelegateFSGroupToCSIDriver`: If supported by the CSI driver, delegates the
|
||||
role of applying `fsGroup` from a Pod's `securityContext` to the driver by
|
||||
passing `fsGroup` through the NodeStageVolume and NodePublishVolume CSI calls.
|
||||
- `DevicePlugins`: Enable the [device-plugins](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)
|
||||
based resource provisioning on nodes.
|
||||
- `DisableAcceleratorUsageMetrics`:
|
||||
[Disable accelerator metrics collected by the kubelet](/docs/concepts/cluster-administration/system-metrics/#disable-accelerator-metrics).
|
||||
- `DisableCloudProviders`: Disables any functionality in `kube-apiserver`,
|
||||
`kube-controller-manager` and `kubelet` related to the `--cloud-provider`
|
||||
component flag.
|
||||
- `DownwardAPIHugePages`: Enables usage of hugepages in
|
||||
[downward API](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information).
|
||||
- `DryRun`: Enable server-side [dry run](/docs/reference/using-api/api-concepts/#dry-run) requests
|
||||
@@ -638,6 +736,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
now-corrected fault where Kubernetes ignored exec probe timeouts. See
|
||||
[readiness probes](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes).
|
||||
- `ExpandCSIVolumes`: Enable the expanding of CSI volumes.
|
||||
- `ExpandedDNSConfig`: Enable kubelet and kube-apiserver to allow more DNS
|
||||
search paths and longer list of DNS search paths. See
|
||||
[Expanded DNS Configuration](/docs/concepts/services-networking/dns-pod-service/#expanded-dns-configuration).
|
||||
- `ExpandInUsePersistentVolumes`: Enable expanding in-use PVCs. See
|
||||
[Resizing an in-use PersistentVolumeClaim](/docs/concepts/storage/persistent-volumes/#resizing-an-in-use-persistentvolumeclaim).
|
||||
- `ExpandPersistentVolumes`: Enable the expanding of persistent volumes. See
|
||||
@@ -674,8 +775,24 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
for Windows containers.
|
||||
- `ImmutableEphemeralVolumes`: Allows for marking individual Secrets and ConfigMaps as
|
||||
immutable for better safety and performance.
|
||||
- `InTreePluginAWSUnregister`: Stops registering the aws-ebs in-tree plugin in kubelet
|
||||
and volume controllers.
|
||||
- `InTreePluginAzureDiskUnregister`: Stops registering the azuredisk in-tree plugin in kubelet
|
||||
and volume controllers.
|
||||
- `InTreePluginAzureFileUnregister`: Stops registering the azurefile in-tree plugin in kubelet
|
||||
and volume controllers.
|
||||
- `InTreePluginGCEUnregister`: Stops registering the gce-pd in-tree plugin in kubelet
|
||||
and volume controllers.
|
||||
- `InTreePluginOpenStackUnregister`: Stops registering the OpenStack cinder in-tree plugin in kubelet
|
||||
and volume controllers.
|
||||
- `InTreePluginvSphereUnregister`: Stops registering the vSphere in-tree plugin in kubelet
|
||||
and volume controllers.
|
||||
- `IndexedJob`: Allows the [Job](/docs/concepts/workloads/controllers/job/)
|
||||
controller to manage Pod completions per completion index.
|
||||
- `JobTrackingWithFinalizers`: Enables tracking [Job](/docs/concepts/workloads/controllers/job)
|
||||
completions without relying on Pods remaining in the cluster indefinitely.
|
||||
The Job controller uses Pod finalizers and a field in the Job status to keep
|
||||
track of the finished Pods to count towards completion.
|
||||
- `IngressClassNamespacedParams`: Allow namespace-scoped parameters reference in
|
||||
`IngressClass` resource. This feature adds two fields - `Scope` and `Namespace`
|
||||
to `IngressClass.spec.parameters`.
|
||||
@@ -683,11 +800,17 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
Initializers admission plugin.
|
||||
- `IPv6DualStack`: Enable [dual stack](/docs/concepts/services-networking/dual-stack/)
|
||||
support for IPv6.
|
||||
- `JobTrackingWithFinalizers`: Enables the tracking of Job completion without
|
||||
relying on Pods remaining in the cluster indefinitely. Pod finalizers, in
|
||||
addition to a field in the Job status, allow the Job controller to track
|
||||
Pods that it didn't account for yet.
|
||||
- `KubeletConfigFile`: Enable loading kubelet configuration from
|
||||
a file specified using a config file.
|
||||
See [setting kubelet parameters via a config file](/docs/tasks/administer-cluster/kubelet-config-file/)
|
||||
for more details.
|
||||
- `KubeletCredentialProviders`: Enable kubelet exec credential providers for image pull credentials.
|
||||
- `KubeletInUserNamespace`: Enables support for running kubelet in a {{<glossary_tooltip text="user namespace" term_id="userns">}}.
|
||||
See [Running Kubernetes Node Components as a Non-root User](/docs/tasks/administer-cluster/kubelet-in-userns/).
|
||||
- `KubeletPluginsWatcher`: Enable probe-based plugin watcher utility to enable kubelet
|
||||
to discover plugins such as [CSI volume drivers](/docs/concepts/storage/volumes/#csi).
|
||||
- `KubeletPodResources`: Enable the kubelet's pod resources gRPC endpoint. See
|
||||
@@ -712,6 +835,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
filesystem walk for better performance and accuracy.
|
||||
- `LogarithmicScaleDown`: Enable semi-random selection of pods to evict on controller scaledown
|
||||
based on logarithmic bucketing of pod timestamps.
|
||||
- `MemoryManager`: Allows setting memory affinity for a container based on
|
||||
NUMA topology.
|
||||
- `MemoryQoS`: Enable memory protection and usage throttle on pod / container using cgroup v2 memory controller.
|
||||
- `MixedProtocolLBService`: Enable using different protocols in the same `LoadBalancer` type
|
||||
Service instance.
|
||||
- `MountContainers`: Enable using utility containers on host as the volume mounter.
|
||||
@@ -723,6 +849,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
- `NodeDisruptionExclusion`: Enable use of the Node label `node.kubernetes.io/exclude-disruption`
|
||||
which prevents nodes from being evacuated during zone failures.
|
||||
- `NodeLease`: Enable the new Lease API to report node heartbeats, which could be used as a node health signal.
|
||||
- `NodeSwap`: Enable the kubelet to allocate swap memory for Kubernetes workloads on a node.
|
||||
Must be used with `KubeletConfiguration.failSwapOn` set to false.
|
||||
For more details, please see [swap memory](/docs/concepts/architecture/nodes/#swap-memory)
|
||||
- `NonPreemptingPriority`: Enable `preemptionPolicy` field for PriorityClass and Pod.
|
||||
- `PVCProtection`: Enable the prevention of a PersistentVolumeClaim (PVC) from
|
||||
being deleted when it is still used by any Pod.
|
||||
@@ -740,17 +869,25 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
- `PodReadinessGates`: Enable the setting of `PodReadinessGate` field for extending
|
||||
Pod readiness evaluation. See [Pod readiness gate](/docs/concepts/workloads/pods/pod-lifecycle/#pod-readiness-gate)
|
||||
for more details.
|
||||
- `PodSecurity`: Enables the `PodSecurity` admission plugin.
|
||||
- `PodShareProcessNamespace`: Enable the setting of `shareProcessNamespace` in a Pod for sharing
|
||||
a single process namespace between containers running in a pod. More details can be found in
|
||||
[Share Process Namespace between Containers in a Pod](/docs/tasks/configure-pod-container/share-process-namespace/).
|
||||
- `PreferNominatedNode`: This flag tells the scheduler whether the nominated
|
||||
nodes will be checked first before looping through all the other nodes in
|
||||
the cluster.
|
||||
- `ProbeTerminationGracePeriod`: Enable [setting probe-level
|
||||
`terminationGracePeriodSeconds`](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#probe-level-terminationgraceperiodseconds)
|
||||
on pods. See the [enhancement proposal](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2238-liveness-probe-grace-period) for more details.
|
||||
- `ProcMountType`: Enables control over the type proc mounts for containers
|
||||
by setting the `procMount` field of a SecurityContext.
|
||||
- `ProxyTerminatingEndpoints`: Enable the kube-proxy to handle terminating
|
||||
endpoints when `ExternalTrafficPolicy=Local`.
|
||||
- `QOSReserved`: Allows resource reservations at the QoS level preventing pods
|
||||
at lower QoS levels from bursting into resources requested at higher QoS levels
|
||||
(memory only for now).
|
||||
- `ReadWriteOncePod`: Enables the usage of `ReadWriteOncePod` PersistentVolume
|
||||
access mode.
|
||||
- `RemainingItemCount`: Allow the API servers to show a count of remaining
|
||||
items in the response to a
|
||||
[chunking list request](/docs/reference/using-api/api-concepts/#retrieving-large-results-sets-in-chunks).
|
||||
@@ -782,6 +919,10 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
instead of the DaemonSet controller.
|
||||
- `SCTPSupport`: Enables the _SCTP_ `protocol` value in Pod, Service,
|
||||
Endpoints, EndpointSlice, and NetworkPolicy definitions.
|
||||
- `SeccompDefault`: Enables the use of `RuntimeDefault` as the default seccomp profile for all workloads.
|
||||
The seccomp profile is specified in the `securityContext` of a Pod and/or a Container.
|
||||
- `SelectorIndex`: Allows label and field based indexes in API server watch
|
||||
cache to accelerate list operations.
|
||||
- `ServerSideApply`: Enables the [Sever Side Apply (SSA)](/docs/reference/using-api/server-side-apply/)
|
||||
feature on the API Server.
|
||||
- `ServiceAccountIssuerDiscovery`: Enable OIDC discovery endpoints (issuer and
|
||||
@@ -809,6 +950,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
- `StartupProbe`: Enable the
|
||||
[startup](/docs/concepts/workloads/pods/pod-lifecycle/#when-should-you-use-a-startup-probe)
|
||||
probe in the kubelet.
|
||||
- `StatefulSetMinReadySeconds`: Allows `minReadySeconds` to be respected by
|
||||
the StatefulSet controller.
|
||||
- `StorageObjectInUseProtection`: Postpone the deletion of PersistentVolume or
|
||||
PersistentVolumeClaim objects if they are still being used.
|
||||
- `StorageVersionAPI`: Enable the
|
||||
@@ -870,6 +1013,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
- `WinDSR`: Allows kube-proxy to create DSR loadbalancers for Windows.
|
||||
- `WinOverlay`: Allows kube-proxy to run in overlay mode for Windows.
|
||||
- `WindowsGMSA`: Enables passing of GMSA credential specs from pods to container runtimes.
|
||||
- `WindowsHostProcessContainers`: Enables support for Windows HostProcess containers.
|
||||
- `WindowsRunAsUserName` : Enable support for running applications in Windows containers
|
||||
with as a non-default user. See
|
||||
[Configuring RunAsUserName](/docs/tasks/configure-pod-container/configure-runasusername)
|
||||
@@ -878,6 +1022,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
|
||||
will use EndpointSlices as the primary data source instead of Endpoints,
|
||||
enabling scalability and performance improvements. See
|
||||
[Enabling Endpoint Slices](/docs/tasks/administer-cluster/enabling-endpointslices/).
|
||||
- `WindowsHostProcessContainers`: Enables the support for `HostProcess`
|
||||
containers on Windows nodes.
|
||||
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
@@ -277,6 +277,13 @@ kubelet [flags]
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">CPU Manager policy to use. Possible values: `none`, `static`. (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>
|
||||
<td colspan="2">--cpu-manager-policy-options strings</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Comma-separated list of options to fine-tune the behavior of the selected CPU Manager policy. (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>
|
||||
<td colspan="2">--cpu-manager-reconcile-period duration Default: `10s`</td>
|
||||
</tr>
|
||||
@@ -330,14 +337,14 @@ kubelet [flags]
|
||||
<td colspan="2">--event-burst int32 Default: 10</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding `--event-qps`. Only used if `--event-qps` > 0. (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;">Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding `--event-qps`. The number must be >= 0. If 0 will use DefaultBurst: 10. (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>
|
||||
<td colspan="2">--event-qps int32 Default: 5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">If > `0`, limit event creations per second to this value. If `0`, unlimited. (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;">QPS to limit event creations. The number must be >= 0. If 0 will use DefaultQPS: 5. (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>
|
||||
@@ -514,6 +521,7 @@ RemoveSelfLink=true|false (BETA - default=true)<br/>
|
||||
RootCAConfigMap=true|false (BETA - default=true)<br/>
|
||||
RotateKubeletServerCertificate=true|false (BETA - default=true)<br/>
|
||||
RunAsGroup=true|false (BETA - default=true)<br/>
|
||||
SeccompDefault=true|false (ALPHA - default=false)<br/>
|
||||
ServerSideApply=true|false (BETA - default=true)<br/>
|
||||
ServiceAccountIssuerDiscovery=true|false (BETA - default=true)<br/>
|
||||
ServiceLBNodePortControl=true|false (ALPHA - default=false)<br/>
|
||||
@@ -664,7 +672,7 @@ WindowsEndpointSliceProxying=true|false (ALPHA - default=false)<br/>
|
||||
<td colspan="2">--kube-api-burst int32 Default: 10</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Burst to use while talking with kubernetes API server. (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;">Burst to use while talking with kubernetes API server. The number must be >= 0. If 0 will use DefaultBurst: 10. (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>
|
||||
@@ -678,7 +686,7 @@ WindowsEndpointSliceProxying=true|false (ALPHA - default=false)<br/>
|
||||
<td colspan="2">--kube-api-qps int32 Default: 5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">QPS to use while talking with kubernetes API server. (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;">QPS to use while talking with kubernetes API server. The number must be >= 0. If 0 will use DefaultQPS: 5. (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>
|
||||
@@ -1073,6 +1081,13 @@ WindowsEndpointSliceProxying=true|false (ALPHA - default=false)<br/>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Timeout of all runtime requests except long running request - `pull`, `logs`, `exec` and `attach`. When timeout exceeded, kubelet will cancel the request, throw out an error and retry later. (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>
|
||||
<td colspan="2">--seccomp-default RuntimeDefault Default: `false`</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;"><Warning: Alpha feature> Enable the use of RuntimeDefault as the default seccomp profile for all workloads. The SeccompDefault feature gate must be enabled to allow this flag, which is disabled per default.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">--seccomp-profile-root string Default: `/var/lib/kubelet/seccomp`</td>
|
||||
</tr>
|
||||
@@ -1227,4 +1242,3 @@ Insecure values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_R
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,438 @@
|
||||
---
|
||||
title: kube-apiserver Configuration (v1alpha1)
|
||||
content_type: tool-reference
|
||||
package: apiserver.k8s.io/v1alpha1
|
||||
auto_generated: true
|
||||
---
|
||||
Package v1alpha1 is the v1alpha1 version of the API.
|
||||
|
||||
## Resource Types
|
||||
|
||||
|
||||
- [AdmissionConfiguration](#apiserver-k8s-io-v1alpha1-AdmissionConfiguration)
|
||||
- [EgressSelectorConfiguration](#apiserver-k8s-io-v1alpha1-EgressSelectorConfiguration)
|
||||
- [TracingConfiguration](#apiserver-k8s-io-v1alpha1-TracingConfiguration)
|
||||
|
||||
|
||||
|
||||
|
||||
## `AdmissionConfiguration` {#apiserver-k8s-io-v1alpha1-AdmissionConfiguration}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
AdmissionConfiguration provides versioned configuration for admission controllers.
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
<tr><td><code>apiVersion</code><br/>string</td><td><code>apiserver.k8s.io/v1alpha1</code></td></tr>
|
||||
<tr><td><code>kind</code><br/>string</td><td><code>AdmissionConfiguration</code></td></tr>
|
||||
|
||||
|
||||
|
||||
|
||||
<tr><td><code>plugins</code><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-AdmissionPluginConfiguration"><code>[]AdmissionPluginConfiguration</code></a>
|
||||
</td>
|
||||
<td>
|
||||
Plugins allows specifying a configuration per admission control plugin.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `EgressSelectorConfiguration` {#apiserver-k8s-io-v1alpha1-EgressSelectorConfiguration}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EgressSelectorConfiguration provides versioned configuration for egress selector clients.
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
<tr><td><code>apiVersion</code><br/>string</td><td><code>apiserver.k8s.io/v1alpha1</code></td></tr>
|
||||
<tr><td><code>kind</code><br/>string</td><td><code>EgressSelectorConfiguration</code></td></tr>
|
||||
|
||||
|
||||
|
||||
|
||||
<tr><td><code>egressSelections</code> <B>[Required]</B><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-EgressSelection"><code>[]EgressSelection</code></a>
|
||||
</td>
|
||||
<td>
|
||||
connectionServices contains a list of egress selection client configurations</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `TracingConfiguration` {#apiserver-k8s-io-v1alpha1-TracingConfiguration}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TracingConfiguration provides versioned configuration for tracing clients.
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
<tr><td><code>apiVersion</code><br/>string</td><td><code>apiserver.k8s.io/v1alpha1</code></td></tr>
|
||||
<tr><td><code>kind</code><br/>string</td><td><code>TracingConfiguration</code></td></tr>
|
||||
|
||||
|
||||
|
||||
|
||||
<tr><td><code>endpoint</code><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
Endpoint of the collector that's running on the control-plane node.
|
||||
The APIServer uses the egressType ControlPlane when sending data to the collector.
|
||||
The syntax is defined in https://github.com/grpc/grpc/blob/master/doc/naming.md.
|
||||
Defaults to the otlpgrpc default, localhost:4317
|
||||
The connection is insecure, and does not support TLS.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>samplingRatePerMillion</code><br/>
|
||||
<code>int32</code>
|
||||
</td>
|
||||
<td>
|
||||
SamplingRatePerMillion is the number of samples to collect per million spans.
|
||||
Defaults to 0.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `AdmissionPluginConfiguration` {#apiserver-k8s-io-v1alpha1-AdmissionPluginConfiguration}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [AdmissionConfiguration](#apiserver-k8s-io-v1alpha1-AdmissionConfiguration)
|
||||
|
||||
|
||||
AdmissionPluginConfiguration provides the configuration for a single plug-in.
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>name</code> <B>[Required]</B><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
Name is the name of the admission controller.
|
||||
It must match the registered admission plugin name.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>path</code><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
Path is the path to a configuration file that contains the plugin's
|
||||
configuration</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>configuration</code><br/>
|
||||
<a href="https://godoc.org/k8s.io/apimachinery/pkg/runtime#Unknown"><code>k8s.io/apimachinery/pkg/runtime.Unknown</code></a>
|
||||
</td>
|
||||
<td>
|
||||
Configuration is an embedded configuration object to be used as the plugin's
|
||||
configuration. If present, it will be used instead of the path to the configuration file.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `Connection` {#apiserver-k8s-io-v1alpha1-Connection}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [EgressSelection](#apiserver-k8s-io-v1alpha1-EgressSelection)
|
||||
|
||||
|
||||
Connection provides the configuration for a single egress selection client.
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>proxyProtocol</code> <B>[Required]</B><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-ProtocolType"><code>ProtocolType</code></a>
|
||||
</td>
|
||||
<td>
|
||||
Protocol is the protocol used to connect from client to the konnectivity server.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>transport</code><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-Transport"><code>Transport</code></a>
|
||||
</td>
|
||||
<td>
|
||||
Transport defines the transport configurations we use to dial to the konnectivity server.
|
||||
This is required if ProxyProtocol is HTTPConnect or GRPC.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `EgressSelection` {#apiserver-k8s-io-v1alpha1-EgressSelection}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [EgressSelectorConfiguration](#apiserver-k8s-io-v1alpha1-EgressSelectorConfiguration)
|
||||
|
||||
|
||||
EgressSelection provides the configuration for a single egress selection client.
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>name</code> <B>[Required]</B><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
name is the name of the egress selection.
|
||||
Currently supported values are "controlplane", "master", "etcd" and "cluster"
|
||||
The "master" egress selector is deprecated in favor of "controlplane"</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>connection</code> <B>[Required]</B><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-Connection"><code>Connection</code></a>
|
||||
</td>
|
||||
<td>
|
||||
connection is the exact information used to configure the egress selection</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `ProtocolType` {#apiserver-k8s-io-v1alpha1-ProtocolType}
|
||||
|
||||
(Alias of `string`)
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [Connection](#apiserver-k8s-io-v1alpha1-Connection)
|
||||
|
||||
|
||||
ProtocolType is a set of valid values for Connection.ProtocolType
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## `TCPTransport` {#apiserver-k8s-io-v1alpha1-TCPTransport}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [Transport](#apiserver-k8s-io-v1alpha1-Transport)
|
||||
|
||||
|
||||
TCPTransport provides the information to connect to konnectivity server via TCP
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>url</code> <B>[Required]</B><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
URL is the location of the konnectivity server to connect to.
|
||||
As an example it might be "https://127.0.0.1:8131"</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>tlsConfig</code><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-TLSConfig"><code>TLSConfig</code></a>
|
||||
</td>
|
||||
<td>
|
||||
TLSConfig is the config needed to use TLS when connecting to konnectivity server</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `TLSConfig` {#apiserver-k8s-io-v1alpha1-TLSConfig}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [TCPTransport](#apiserver-k8s-io-v1alpha1-TCPTransport)
|
||||
|
||||
|
||||
TLSConfig provides the authentication information to connect to konnectivity server
|
||||
Only used with TCPTransport
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>caBundle</code><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
caBundle is the file location of the CA to be used to determine trust with the konnectivity server.
|
||||
Must be absent/empty if TCPTransport.URL is prefixed with http://
|
||||
If absent while TCPTransport.URL is prefixed with https://, default to system trust roots.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>clientKey</code><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
clientKey is the file location of the client key to be used in mtls handshakes with the konnectivity server.
|
||||
Must be absent/empty if TCPTransport.URL is prefixed with http://
|
||||
Must be configured if TCPTransport.URL is prefixed with https://</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>clientCert</code><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
clientCert is the file location of the client certificate to be used in mtls handshakes with the konnectivity server.
|
||||
Must be absent/empty if TCPTransport.URL is prefixed with http://
|
||||
Must be configured if TCPTransport.URL is prefixed with https://</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `Transport` {#apiserver-k8s-io-v1alpha1-Transport}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [Connection](#apiserver-k8s-io-v1alpha1-Connection)
|
||||
|
||||
|
||||
Transport defines the transport configurations we use to dial to the konnectivity server
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>tcp</code><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-TCPTransport"><code>TCPTransport</code></a>
|
||||
</td>
|
||||
<td>
|
||||
TCP is the TCP configuration for communicating with the konnectivity server via TCP
|
||||
ProxyProtocol of GRPC is not supported with TCP transport at the moment
|
||||
Requires at least one of TCP or UDS to be set</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td><code>uds</code><br/>
|
||||
<a href="#apiserver-k8s-io-v1alpha1-UDSTransport"><code>UDSTransport</code></a>
|
||||
</td>
|
||||
<td>
|
||||
UDS is the UDS configuration for communicating with the konnectivity server via UDS
|
||||
Requires at least one of TCP or UDS to be set</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## `UDSTransport` {#apiserver-k8s-io-v1alpha1-UDSTransport}
|
||||
|
||||
|
||||
|
||||
|
||||
**Appears in:**
|
||||
|
||||
- [Transport](#apiserver-k8s-io-v1alpha1-Transport)
|
||||
|
||||
|
||||
UDSTransport provides the information to connect to konnectivity server via UDS
|
||||
|
||||
<table class="table">
|
||||
<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr><td><code>udsName</code> <B>[Required]</B><br/>
|
||||
<code>string</code>
|
||||
</td>
|
||||
<td>
|
||||
UDSName is the name of the unix domain socket to connect to konnectivity server
|
||||
This does not use a unix:// prefix. (Eg: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket)</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -721,7 +721,7 @@ for, so other administrators can know its purpose.</td>
|
||||
|
||||
|
||||
<tr><td><code>expires</code> <B>[Required]</B><br/>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#time-v1-meta"><code>meta/v1.Time</code></a>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#time-v1-meta"><code>meta/v1.Time</code></a>
|
||||
</td>
|
||||
<td>
|
||||
`expires` specifies the timestamp when this token expires. Defaults to being set
|
||||
@@ -1199,7 +1199,7 @@ HostPathMount contains elements describing volumes that are mounted from the hos
|
||||
|
||||
|
||||
<tr><td><code>pathType</code> <B>[Required]</B><br/>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#hostpathtype-v1-core"><code>core/v1.HostPathType</code></a>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#hostpathtype-v1-core"><code>core/v1.HostPathType</code></a>
|
||||
</td>
|
||||
<td>
|
||||
`pathType` is the type of the `hostPath` volume.</td>
|
||||
@@ -1451,7 +1451,7 @@ annotated to the Node API object, for later re-use.</td>
|
||||
|
||||
|
||||
<tr><td><code>taints</code> <B>[Required]</B><br/>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#taint-v1-core"><code>[]core/v1.Taint</code></a>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#taint-v1-core"><code>[]core/v1.Taint</code></a>
|
||||
</td>
|
||||
<td>
|
||||
`taints` specifies the taints the Node API object should be registered with. If
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: user namespace
|
||||
id: userns
|
||||
date: 2021-07-13
|
||||
full_link: https://man7.org/linux/man-pages/man7/user_namespaces.7.html
|
||||
short_description: >
|
||||
A Linux kernel feature to emulate superuser privilege for unprivileged users.
|
||||
|
||||
aka:
|
||||
tags:
|
||||
- security
|
||||
---
|
||||
|
||||
A kernel feature to emulate root. Used for "rootless containers".
|
||||
|
||||
<!--more-->
|
||||
|
||||
User namespaces are a Linux kernel feature that allows a non-root user to
|
||||
emulate superuser ("root") privileges,
|
||||
for example in order to run containers without being a superuser outside the container.
|
||||
|
||||
User namespace is effective for mitigating damage of potential container break-out attacks.
|
||||
|
||||
In the context of user namespaces, the namespace is a Linux kernel feature, and not a
|
||||
{{< glossary_tooltip text="namespace" term_id="namespace" >}} in the Kubernetes sense
|
||||
of the term.
|
||||
|
||||
<!-- TODO: https://kinvolk.io/blog/2020/12/improving-kubernetes-and-container-security-with-user-namespaces/ -->
|
||||
@@ -328,7 +328,31 @@ kubectl [flags]
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## {{% heading "envvars" %}}
|
||||
|
||||
<table style="width: 100%; table-layout: fixed;">
|
||||
<colgroup>
|
||||
<col span="1" style="width: 10px;" />
|
||||
<col span="1" />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">KUBECONFIG</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Path to the kubectl configuration ("kubeconfig") file. Default: "$HOME/.kube/config"</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">KUBECTL_COMMAND_HEADERS</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">When set to false, turns off extra HTTP headers detailing invoked kubectl command (Kubernetes version v1.22 or later)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## {{% heading "seealso" %}}
|
||||
|
||||
|
||||
+24
-1
@@ -49,7 +49,7 @@ This API can be used to request client certificates to authenticate to kube-apis
|
||||
|
||||
- **spec** (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequestSpec" >}}">CertificateSigningRequestSpec</a>), required
|
||||
|
||||
spec contains the certificate request, and is immutable after creation. Only the request, signerName, and usages fields can be set on creation. Other fields are derived by Kubernetes and cannot be modified by users.
|
||||
spec contains the certificate request, and is immutable after creation. Only the request, signerName, expirationSeconds, and usages fields can be set on creation. Other fields are derived by Kubernetes and cannot be modified by users.
|
||||
|
||||
- **status** (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequestStatus" >}}">CertificateSigningRequestStatus</a>)
|
||||
|
||||
@@ -95,6 +95,23 @@ CertificateSigningRequestSpec contains the certificate request.
|
||||
5. Expiration/certificate lifetime: whether it is fixed by the signer, configurable by the admin.
|
||||
6. Whether or not requests for CA certificates are allowed.
|
||||
|
||||
- **expirationSeconds** (int32)
|
||||
|
||||
expirationSeconds is the requested duration of validity of the issued certificate. The certificate signer may issue a certificate with a different validity duration so a client must check the delta between the notBefore and and notAfter fields in the issued certificate to determine the actual duration.
|
||||
|
||||
The v1.22+ in-tree implementations of the well-known Kubernetes signers will honor this field as long as the requested duration is not greater than the maximum duration they will honor per the --cluster-signing-duration CLI flag to the Kubernetes controller manager.
|
||||
|
||||
Certificate signers may not honor this field for various reasons:
|
||||
|
||||
1. Old signer that is unaware of the field (such as the in-tree
|
||||
implementations prior to v1.22)
|
||||
2. Signer whose configured maximum is shorter than the requested duration
|
||||
3. Signer whose configured minimum is longer than the requested duration
|
||||
|
||||
The minimum valid value for expirationSeconds is 600, i.e. 10 minutes.
|
||||
|
||||
As of v1.22, this field is beta and is controlled via the CSRDuration feature gate.
|
||||
|
||||
- **extra** (map[string][]string)
|
||||
|
||||
extra contains extra attributes of the user that created the CertificateSigningRequest. Populated by the API server on creation and immutable.
|
||||
@@ -630,6 +647,8 @@ PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
|
||||
|
||||
200 (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequest" >}}">CertificateSigningRequest</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequest" >}}">CertificateSigningRequest</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -678,6 +697,8 @@ PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
|
||||
|
||||
200 (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequest" >}}">CertificateSigningRequest</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequest" >}}">CertificateSigningRequest</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -726,6 +747,8 @@ PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequest" >}}">CertificateSigningRequest</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authentication-resources/certificate-signing-request-v1#CertificateSigningRequest" >}}">CertificateSigningRequest</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+2
@@ -416,6 +416,8 @@ PATCH /api/v1/namespaces/{namespace}/serviceaccounts/{name}
|
||||
|
||||
200 (<a href="{{< ref "../authentication-resources/service-account-v1#ServiceAccount" >}}">ServiceAccount</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authentication-resources/service-account-v1#ServiceAccount" >}}">ServiceAccount</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -40,12 +40,15 @@ TokenRequest requests a token for a given service account.
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../authentication-resources/token-request-v1#TokenRequestSpec" >}}">TokenRequestSpec</a>), required
|
||||
|
||||
Spec holds information about the request being evaluated
|
||||
|
||||
- **status** (<a href="{{< ref "../authentication-resources/token-request-v1#TokenRequestStatus" >}}">TokenRequestStatus</a>)
|
||||
|
||||
Status is filled in by the server and indicates whether the token can be authenticated.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ TokenReview attempts to authenticate a token to a known user. Note: TokenReview
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../authentication-resources/token-review-v1#TokenReviewSpec" >}}">TokenReviewSpec</a>), required
|
||||
|
||||
|
||||
+2
@@ -351,6 +351,8 @@ PATCH /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
|
||||
|
||||
200 (<a href="{{< ref "../authorization-resources/cluster-role-binding-v1#ClusterRoleBinding" >}}">ClusterRoleBinding</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authorization-resources/cluster-role-binding-v1#ClusterRoleBinding" >}}">ClusterRoleBinding</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -66,11 +66,11 @@ ClusterRole is a cluster level, logical grouping of PolicyRules that can be refe
|
||||
|
||||
- **rules.resources** ([]string)
|
||||
|
||||
Resources is a list of resources this rule applies to. ResourceAll represents all resources.
|
||||
Resources is a list of resources this rule applies to. '*' represents all resources.
|
||||
|
||||
- **rules.verbs** ([]string), required
|
||||
|
||||
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.
|
||||
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. '*' represents all verbs.
|
||||
|
||||
- **rules.resourceNames** ([]string)
|
||||
|
||||
@@ -347,6 +347,8 @@ PATCH /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
|
||||
|
||||
200 (<a href="{{< ref "../authorization-resources/cluster-role-v1#ClusterRole" >}}">ClusterRole</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authorization-resources/cluster-role-v1#ClusterRole" >}}">ClusterRole</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+1
@@ -40,6 +40,7 @@ LocalSubjectAccessReview checks whether or not a user or group can perform an ac
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../authorization-resources/subject-access-review-v1#SubjectAccessReviewSpec" >}}">SubjectAccessReviewSpec</a>), required
|
||||
|
||||
|
||||
@@ -444,6 +444,8 @@ PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{na
|
||||
|
||||
200 (<a href="{{< ref "../authorization-resources/role-binding-v1#RoleBinding" >}}">RoleBinding</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authorization-resources/role-binding-v1#RoleBinding" >}}">RoleBinding</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -55,11 +55,11 @@ Role is a namespaced, logical grouping of PolicyRules that can be referenced as
|
||||
|
||||
- **rules.resources** ([]string)
|
||||
|
||||
Resources is a list of resources this rule applies to. ResourceAll represents all resources.
|
||||
Resources is a list of resources this rule applies to. '*' represents all resources.
|
||||
|
||||
- **rules.verbs** ([]string), required
|
||||
|
||||
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.
|
||||
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. '*' represents all verbs.
|
||||
|
||||
- **rules.resourceNames** ([]string)
|
||||
|
||||
@@ -429,6 +429,8 @@ PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
|
||||
|
||||
200 (<a href="{{< ref "../authorization-resources/role-v1#Role" >}}">Role</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../authorization-resources/role-v1#Role" >}}">Role</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+1
@@ -40,6 +40,7 @@ SelfSubjectAccessReview checks whether or the current user can perform an action
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../authorization-resources/self-subject-access-review-v1#SelfSubjectAccessReviewSpec" >}}">SelfSubjectAccessReviewSpec</a>), required
|
||||
|
||||
|
||||
+2
-1
@@ -40,6 +40,7 @@ SelfSubjectRulesReview enumerates the set of actions the current user can perfor
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../authorization-resources/self-subject-rules-review-v1#SelfSubjectRulesReviewSpec" >}}">SelfSubjectRulesReviewSpec</a>), required
|
||||
|
||||
@@ -105,7 +106,7 @@ SelfSubjectRulesReview enumerates the set of actions the current user can perfor
|
||||
|
||||
## SelfSubjectRulesReviewSpec {#SelfSubjectRulesReviewSpec}
|
||||
|
||||
|
||||
SelfSubjectRulesReviewSpec defines the specification for SelfSubjectRulesReview.
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
+1
@@ -40,6 +40,7 @@ SubjectAccessReview checks whether or not a user or group can perform an action.
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../authorization-resources/subject-access-review-v1#SubjectAccessReviewSpec" >}}">SubjectAccessReviewSpec</a>), required
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ APIService represents a server for a particular GroupVersion. Name must be "vers
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../cluster-resources/api-service-v1#APIServiceSpec" >}}">APIServiceSpec</a>)
|
||||
|
||||
@@ -166,9 +167,11 @@ APIServiceList is a list of APIService objects.
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/list-meta#ListMeta" >}}">ListMeta</a>)
|
||||
|
||||
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **items** ([]<a href="{{< ref "../cluster-resources/api-service-v1#APIService" >}}">APIService</a>), required
|
||||
|
||||
Items is the list of APIService
|
||||
|
||||
|
||||
|
||||
@@ -486,6 +489,8 @@ PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/api-service-v1#APIService" >}}">APIService</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/api-service-v1#APIService" >}}">APIService</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -534,6 +539,8 @@ PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/api-service-v1#APIService" >}}">APIService</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/api-service-v1#APIService" >}}">APIService</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -492,6 +492,8 @@ PATCH /apis/events.k8s.io/v1/namespaces/{namespace}/events/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/event-v1#Event" >}}">Event</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/event-v1#Event" >}}">Event</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -106,10 +106,11 @@ FlowSchemaSpec describes how the FlowSchema's specification looks like.
|
||||
|
||||
- **rules.subjects.kind** (string), required
|
||||
|
||||
Required
|
||||
`kind` indicates which one of the other fields is non-empty. Required
|
||||
|
||||
- **rules.subjects.group** (GroupSubject)
|
||||
|
||||
`group` matches based on user group name.
|
||||
|
||||
<a name="GroupSubject"></a>
|
||||
*GroupSubject holds detailed information for group-kind subject.*
|
||||
@@ -120,6 +121,7 @@ FlowSchemaSpec describes how the FlowSchema's specification looks like.
|
||||
|
||||
- **rules.subjects.serviceAccount** (ServiceAccountSubject)
|
||||
|
||||
`serviceAccount` matches ServiceAccounts.
|
||||
|
||||
<a name="ServiceAccountSubject"></a>
|
||||
*ServiceAccountSubject holds detailed information for service-account-kind subject.*
|
||||
@@ -134,6 +136,7 @@ FlowSchemaSpec describes how the FlowSchema's specification looks like.
|
||||
|
||||
- **rules.subjects.user** (UserSubject)
|
||||
|
||||
`user` matches based on username.
|
||||
|
||||
<a name="UserSubject"></a>
|
||||
*UserSubject holds detailed information for user-kind subject.*
|
||||
@@ -588,6 +591,8 @@ PATCH /apis/flowcontrol.apiserver.k8s.io/v1beta1/flowschemas/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/flow-schema-v1beta1#FlowSchema" >}}">FlowSchema</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/flow-schema-v1beta1#FlowSchema" >}}">FlowSchema</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -636,6 +641,8 @@ PATCH /apis/flowcontrol.apiserver.k8s.io/v1beta1/flowschemas/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/flow-schema-v1beta1#FlowSchema" >}}">FlowSchema</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/flow-schema-v1beta1#FlowSchema" >}}">FlowSchema</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -442,6 +442,8 @@ PATCH /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/lease-v1#Lease" >}}">Lease</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/lease-v1#Lease" >}}">Lease</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -492,6 +492,8 @@ PATCH /api/v1/namespaces/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/namespace-v1#Namespace" >}}">Namespace</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/namespace-v1#Namespace" >}}">Namespace</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -540,6 +542,8 @@ PATCH /api/v1/namespaces/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/namespace-v1#Namespace" >}}">Namespace</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/namespace-v1#Namespace" >}}">Namespace</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -62,17 +62,17 @@ NodeSpec describes the attributes that a node is created with.
|
||||
|
||||
- **configSource** (NodeConfigSource)
|
||||
|
||||
If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field
|
||||
Deprecated. If specified, the source of the node's configuration. The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field. This field is deprecated as of 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration
|
||||
|
||||
<a name="NodeConfigSource"></a>
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.*
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. This API is deprecated since 1.22*
|
||||
|
||||
- **configSource.configMap** (ConfigMapNodeConfigSource)
|
||||
|
||||
ConfigMap is a reference to a Node's ConfigMap
|
||||
|
||||
<a name="ConfigMapNodeConfigSource"></a>
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.*
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node. This API is deprecated since 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration*
|
||||
|
||||
- **configSource.configMap.kubeletConfigKey** (string), required
|
||||
|
||||
@@ -226,14 +226,14 @@ NodeStatus is information about the current status of a node.
|
||||
Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.
|
||||
|
||||
<a name="NodeConfigSource"></a>
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.*
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. This API is deprecated since 1.22*
|
||||
|
||||
- **config.active.configMap** (ConfigMapNodeConfigSource)
|
||||
|
||||
ConfigMap is a reference to a Node's ConfigMap
|
||||
|
||||
<a name="ConfigMapNodeConfigSource"></a>
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.*
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node. This API is deprecated since 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration*
|
||||
|
||||
- **config.active.configMap.kubeletConfigKey** (string), required
|
||||
|
||||
@@ -260,14 +260,14 @@ NodeStatus is information about the current status of a node.
|
||||
Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.
|
||||
|
||||
<a name="NodeConfigSource"></a>
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.*
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. This API is deprecated since 1.22*
|
||||
|
||||
- **config.assigned.configMap** (ConfigMapNodeConfigSource)
|
||||
|
||||
ConfigMap is a reference to a Node's ConfigMap
|
||||
|
||||
<a name="ConfigMapNodeConfigSource"></a>
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.*
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node. This API is deprecated since 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration*
|
||||
|
||||
- **config.assigned.configMap.kubeletConfigKey** (string), required
|
||||
|
||||
@@ -298,14 +298,14 @@ NodeStatus is information about the current status of a node.
|
||||
LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.
|
||||
|
||||
<a name="NodeConfigSource"></a>
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.*
|
||||
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. This API is deprecated since 1.22*
|
||||
|
||||
- **config.lastKnownGood.configMap** (ConfigMapNodeConfigSource)
|
||||
|
||||
ConfigMap is a reference to a Node's ConfigMap
|
||||
|
||||
<a name="ConfigMapNodeConfigSource"></a>
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.*
|
||||
*ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node. This API is deprecated since 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration*
|
||||
|
||||
- **config.lastKnownGood.configMap.kubeletConfigKey** (string), required
|
||||
|
||||
@@ -352,7 +352,7 @@ NodeStatus is information about the current status of a node.
|
||||
<a name="ContainerImage"></a>
|
||||
*Describe a container image*
|
||||
|
||||
- **images.names** ([]string), required
|
||||
- **images.names** ([]string)
|
||||
|
||||
Names by which this image is known. e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]
|
||||
|
||||
@@ -770,6 +770,8 @@ PATCH /api/v1/nodes/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/node-v1#Node" >}}">Node</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/node-v1#Node" >}}">Node</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -818,6 +820,8 @@ PATCH /api/v1/nodes/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/node-v1#Node" >}}">Node</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/node-v1#Node" >}}">Node</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+4
@@ -493,6 +493,8 @@ PATCH /apis/flowcontrol.apiserver.k8s.io/v1beta1/prioritylevelconfigurations/{na
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/priority-level-configuration-v1beta1#PriorityLevelConfiguration" >}}">PriorityLevelConfiguration</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/priority-level-configuration-v1beta1#PriorityLevelConfiguration" >}}">PriorityLevelConfiguration</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -541,6 +543,8 @@ PATCH /apis/flowcontrol.apiserver.k8s.io/v1beta1/prioritylevelconfigurations/{na
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/priority-level-configuration-v1beta1#PriorityLevelConfiguration" >}}">PriorityLevelConfiguration</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/priority-level-configuration-v1beta1#PriorityLevelConfiguration" >}}">PriorityLevelConfiguration</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -366,6 +366,8 @@ PATCH /apis/node.k8s.io/v1/runtimeclasses/{name}
|
||||
|
||||
200 (<a href="{{< ref "../cluster-resources/runtime-class-v1#RuntimeClass" >}}">RuntimeClass</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../cluster-resources/runtime-class-v1#RuntimeClass" >}}">RuntimeClass</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -99,6 +99,10 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
|
||||
|
||||
Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.
|
||||
|
||||
- **managedFields.subresource** (string)
|
||||
|
||||
Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.
|
||||
|
||||
- **managedFields.time** (Time)
|
||||
|
||||
Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'
|
||||
|
||||
@@ -28,7 +28,7 @@ guide. You can file document formatting bugs against the
|
||||
|
||||
## allowWatchBookmarks {#allowWatchBookmarks}
|
||||
|
||||
allowWatchBookmarks requests watch events with type "BOOKMARK". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.
|
||||
allowWatchBookmarks requests watch events with type "BOOKMARK". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
@@ -414,6 +414,8 @@ PATCH /api/v1/namespaces/{namespace}/configmaps/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/config-map-v1#ConfigMap" >}}">ConfigMap</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/config-map-v1#ConfigMap" >}}">ConfigMap</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+5
-5
@@ -64,9 +64,11 @@ CSIDriverSpec is the specification of a CSIDriver.
|
||||
|
||||
- **fsGroupPolicy** (string)
|
||||
|
||||
Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.
|
||||
Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is beta, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.
|
||||
|
||||
This field is immutable.
|
||||
|
||||
Defaults to ReadWriteOnceWithFSType, which will examine each volume to determine if Kubernetes should modify ownership and permissions of the volume. With the default policy the defined fsGroup will only be applied if a fstype is defined and the volume's access mode contains ReadWriteOnce.
|
||||
|
||||
- **podInfoOnMount** (boolean)
|
||||
|
||||
@@ -82,8 +84,6 @@ CSIDriverSpec is the specification of a CSIDriver.
|
||||
RequiresRepublish indicates the CSI driver wants `NodePublishVolume` being periodically called to reflect any possible change in the mounted volume. This field defaults to false.
|
||||
|
||||
Note: After a successful initial NodePublishVolume call, subsequent calls to NodePublishVolume should only update the contents of the volume. New mount points will not be seen by a running container.
|
||||
|
||||
This is a beta feature and only available when the CSIServiceAccountToken feature is enabled.
|
||||
|
||||
- **storageCapacity** (boolean)
|
||||
|
||||
@@ -110,8 +110,6 @@ CSIDriverSpec is the specification of a CSIDriver.
|
||||
}
|
||||
|
||||
Note: Audience in each TokenRequest should be different and at most one token is empty string. To receive a new token after expiry, RequiresRepublish can be used to trigger NodePublishVolume periodically.
|
||||
|
||||
This is a beta feature and only available when the CSIServiceAccountToken feature is enabled.
|
||||
|
||||
<a name="TokenRequest"></a>
|
||||
*TokenRequest contains parameters of a service account token.*
|
||||
@@ -399,6 +397,8 @@ PATCH /apis/storage.k8s.io/v1/csidrivers/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/csi-driver-v1#CSIDriver" >}}">CSIDriver</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/csi-driver-v1#CSIDriver" >}}">CSIDriver</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -355,6 +355,8 @@ PATCH /apis/storage.k8s.io/v1/csinodes/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/csi-node-v1#CSINode" >}}">CSINode</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/csi-node-v1#CSINode" >}}">CSINode</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+2
@@ -436,6 +436,8 @@ PATCH /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/csi-storage-capacity-v1beta1#CSIStorageCapacity" >}}">CSIStorageCapacity</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/csi-storage-capacity-v1beta1#CSIStorageCapacity" >}}">CSIStorageCapacity</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+14
-1
@@ -102,7 +102,16 @@ PersistentVolumeClaimSpec describes the common attributes of storage devices and
|
||||
|
||||
- **dataSource** (<a href="{{< ref "../common-definitions/typed-local-object-reference#TypedLocalObjectReference" >}}">TypedLocalObjectReference</a>)
|
||||
|
||||
This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) * An existing custom resource that implements data population (Alpha) In order to use custom resource types that implement data population, the AnyVolumeDataSource feature gate must be enabled. If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source.
|
||||
This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the AnyVolumeDataSource feature gate is enabled, this field will always have the same contents as the DataSourceRef field.
|
||||
|
||||
- **dataSourceRef** (<a href="{{< ref "../common-definitions/typed-local-object-reference#TypedLocalObjectReference" >}}">TypedLocalObjectReference</a>)
|
||||
|
||||
Specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any local object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the DataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, both fields (DataSource and DataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. There are two important differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of objects, DataSourceRef
|
||||
allows any non-core object, as well as PersistentVolumeClaim objects.
|
||||
* While DataSource ignores disallowed values (dropping them), DataSourceRef
|
||||
preserves all values, and generates an error if a disallowed value is
|
||||
specified.
|
||||
(Alpha) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
|
||||
|
||||
|
||||
|
||||
@@ -604,6 +613,8 @@ PATCH /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-claim-v1#PersistentVolumeClaim" >}}">PersistentVolumeClaim</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-claim-v1#PersistentVolumeClaim" >}}">PersistentVolumeClaim</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -657,6 +668,8 @@ PATCH /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-claim-v1#PersistentVolumeClaim" >}}">PersistentVolumeClaim</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-claim-v1#PersistentVolumeClaim" >}}">PersistentVolumeClaim</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+4
@@ -1189,6 +1189,8 @@ PATCH /api/v1/persistentvolumes/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-v1#PersistentVolume" >}}">PersistentVolume</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-v1#PersistentVolume" >}}">PersistentVolume</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -1237,6 +1239,8 @@ PATCH /api/v1/persistentvolumes/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-v1#PersistentVolume" >}}">PersistentVolume</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/persistent-volume-v1#PersistentVolume" >}}">PersistentVolume</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -418,6 +418,8 @@ PATCH /api/v1/namespaces/{namespace}/secrets/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/secret-v1#Secret" >}}">Secret</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/secret-v1#Secret" >}}">Secret</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+4
@@ -54,6 +54,8 @@ StorageClasses are non-namespaced; the name of the storage class according to et
|
||||
|
||||
- **allowedTopologies** ([]TopologySelectorTerm)
|
||||
|
||||
*Atomic: will be replaced during a merge*
|
||||
|
||||
Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.
|
||||
|
||||
<a name="TopologySelectorTerm"></a>
|
||||
@@ -357,6 +359,8 @@ PATCH /apis/storage.k8s.io/v1/storageclasses/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/storage-class-v1#StorageClass" >}}">StorageClass</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/storage-class-v1#StorageClass" >}}">StorageClass</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+4
@@ -479,6 +479,8 @@ PATCH /apis/storage.k8s.io/v1/volumeattachments/{name}
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/volume-attachment-v1#VolumeAttachment" >}}">VolumeAttachment</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/volume-attachment-v1#VolumeAttachment" >}}">VolumeAttachment</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -527,6 +529,8 @@ PATCH /apis/storage.k8s.io/v1/volumeattachments/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../config-and-storage-resources/volume-attachment-v1#VolumeAttachment" >}}">VolumeAttachment</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../config-and-storage-resources/volume-attachment-v1#VolumeAttachment" >}}">VolumeAttachment</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+6
@@ -40,6 +40,7 @@ CustomResourceDefinition represents a resource that should be exposed on the API
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard object's metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../extend-resources/custom-resource-definition-v1#CustomResourceDefinitionSpec" >}}">CustomResourceDefinitionSpec</a>), required
|
||||
|
||||
@@ -590,6 +591,7 @@ CustomResourceDefinitionList is a list of CustomResourceDefinition objects.
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/list-meta#ListMeta" >}}">ListMeta</a>)
|
||||
|
||||
Standard object's metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
|
||||
|
||||
@@ -907,6 +909,8 @@ PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
|
||||
|
||||
200 (<a href="{{< ref "../extend-resources/custom-resource-definition-v1#CustomResourceDefinition" >}}">CustomResourceDefinition</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../extend-resources/custom-resource-definition-v1#CustomResourceDefinition" >}}">CustomResourceDefinition</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -955,6 +959,8 @@ PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../extend-resources/custom-resource-definition-v1#CustomResourceDefinition" >}}">CustomResourceDefinition</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../extend-resources/custom-resource-definition-v1#CustomResourceDefinition" >}}">CustomResourceDefinition</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+2
@@ -479,6 +479,8 @@ PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
|
||||
|
||||
200 (<a href="{{< ref "../extend-resources/mutating-webhook-configuration-v1#MutatingWebhookConfiguration" >}}">MutatingWebhookConfiguration</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../extend-resources/mutating-webhook-configuration-v1#MutatingWebhookConfiguration" >}}">MutatingWebhookConfiguration</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+2
@@ -469,6 +469,8 @@ PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{nam
|
||||
|
||||
200 (<a href="{{< ref "../extend-resources/validating-webhook-configuration-v1#ValidatingWebhookConfiguration" >}}">ValidatingWebhookConfiguration</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../extend-resources/validating-webhook-configuration-v1#ValidatingWebhookConfiguration" >}}">ValidatingWebhookConfiguration</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -447,6 +447,8 @@ PATCH /api/v1/namespaces/{namespace}/limitranges/{name}
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/limit-range-v1#LimitRange" >}}">LimitRange</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/limit-range-v1#LimitRange" >}}">LimitRange</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ NetworkPolicySpec provides the specification of a NetworkPolicy
|
||||
|
||||
- **ingress.ports.endPort** (int32)
|
||||
|
||||
If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate "NetworkPolicyEndPort".
|
||||
If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Beta state and is enabled by default. It can be disabled using the Feature Gate "NetworkPolicyEndPort".
|
||||
|
||||
- **ingress.ports.protocol** (string)
|
||||
|
||||
@@ -184,7 +184,7 @@ NetworkPolicySpec provides the specification of a NetworkPolicy
|
||||
|
||||
- **egress.ports.endPort** (int32)
|
||||
|
||||
If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate "NetworkPolicyEndPort".
|
||||
If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Beta state and is enabled by default. It can be disabled using the Feature Gate "NetworkPolicyEndPort".
|
||||
|
||||
- **egress.ports.protocol** (string)
|
||||
|
||||
@@ -550,6 +550,8 @@ PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/network-policy-v1#NetworkPolicy" >}}">NetworkPolicy</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/network-policy-v1#NetworkPolicy" >}}">NetworkPolicy</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -604,6 +604,8 @@ PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/pod-disruption-budget-v1#PodDisruptionBudget" >}}">PodDisruptionBudget</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/pod-disruption-budget-v1#PodDisruptionBudget" >}}">PodDisruptionBudget</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -657,6 +659,8 @@ PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/pod-disruption-budget-v1#PodDisruptionBudget" >}}">PodDisruptionBudget</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/pod-disruption-budget-v1#PodDisruptionBudget" >}}">PodDisruptionBudget</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+2
@@ -590,6 +590,8 @@ PATCH /apis/policy/v1beta1/podsecuritypolicies/{name}
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/pod-security-policy-v1beta1#PodSecurityPolicy" >}}">PodSecurityPolicy</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/pod-security-policy-v1beta1#PodSecurityPolicy" >}}">PodSecurityPolicy</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -555,6 +555,8 @@ PATCH /api/v1/namespaces/{namespace}/resourcequotas/{name}
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/resource-quota-v1#ResourceQuota" >}}">ResourceQuota</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/resource-quota-v1#ResourceQuota" >}}">ResourceQuota</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -608,6 +610,8 @@ PATCH /api/v1/namespaces/{namespace}/resourcequotas/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../policy-resources/resource-quota-v1#ResourceQuota" >}}">ResourceQuota</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../policy-resources/resource-quota-v1#ResourceQuota" >}}">ResourceQuota</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -505,6 +505,8 @@ PATCH /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/endpoint-slice-v1#EndpointSlice" >}}">EndpointSlice</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/endpoint-slice-v1#EndpointSlice" >}}">EndpointSlice</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ Endpoints is a collection of endpoints that implement the actual service. Exampl
|
||||
|
||||
- **subsets.ports.appProtocol** (string)
|
||||
|
||||
The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default.
|
||||
The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
|
||||
|
||||
|
||||
|
||||
@@ -496,6 +496,8 @@ PATCH /api/v1/namespaces/{namespace}/endpoints/{name}
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/endpoints-v1#Endpoints" >}}">Endpoints</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/endpoints-v1#Endpoints" >}}">Endpoints</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -354,6 +354,8 @@ PATCH /apis/networking.k8s.io/v1/ingressclasses/{name}
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/ingress-class-v1#IngressClass" >}}">IngressClass</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/ingress-class-v1#IngressClass" >}}">IngressClass</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -107,11 +107,7 @@ IngressSpec describes the Ingress the user wishes to exist.
|
||||
|
||||
Backend defines the referenced service endpoint to which the traffic will be forwarded to.
|
||||
|
||||
- **rules.http.paths.path** (string)
|
||||
|
||||
Path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a '/'. When unspecified, all paths from incoming requests are matched.
|
||||
|
||||
- **rules.http.paths.pathType** (string)
|
||||
- **rules.http.paths.pathType** (string), required
|
||||
|
||||
PathType determines the interpretation of the Path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is
|
||||
done on a path element by element basis. A path element refers is the
|
||||
@@ -125,6 +121,10 @@ IngressSpec describes the Ingress the user wishes to exist.
|
||||
or treat it identically to Prefix or Exact path types.
|
||||
Implementations are required to support all path types.
|
||||
|
||||
- **rules.http.paths.path** (string)
|
||||
|
||||
Path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a '/' and must be present when using PathType with value "Exact" or "Prefix".
|
||||
|
||||
- **tls** ([]IngressTLS)
|
||||
|
||||
*Atomic: will be replaced during a merge*
|
||||
@@ -685,6 +685,8 @@ PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/ingress-v1#Ingress" >}}">Ingress</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/ingress-v1#Ingress" >}}">Ingress</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -738,6 +740,8 @@ PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/ingress-v1#Ingress" >}}">Ingress</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/ingress-v1#Ingress" >}}">Ingress</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -96,11 +96,11 @@ ServiceSpec describes the attributes that a user creates on a service.
|
||||
|
||||
- **ports.nodePort** (int32)
|
||||
|
||||
The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport
|
||||
The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
||||
|
||||
- **ports.appProtocol** (string)
|
||||
|
||||
The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default.
|
||||
The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
|
||||
|
||||
- **type** (string)
|
||||
|
||||
@@ -144,7 +144,7 @@ ServiceSpec describes the attributes that a user creates on a service.
|
||||
|
||||
- **loadBalancerSourceRanges** ([]string)
|
||||
|
||||
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/
|
||||
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
|
||||
|
||||
- **loadBalancerClass** (string)
|
||||
|
||||
@@ -188,13 +188,9 @@ ServiceSpec describes the attributes that a user creates on a service.
|
||||
|
||||
timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && \<=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours).
|
||||
|
||||
- **topologyKeys** ([]string)
|
||||
|
||||
topologyKeys is a preference-order list of topology keys which implementations of services should use to preferentially sort endpoints when accessing this Service, it can not be used at the same time as externalTrafficPolicy=Local. Topology keys must be valid label keys and at most 16 keys may be specified. Endpoints are chosen based on the first topology key with available backends. If this field is specified and all entries have no backends that match the topology of the client, the service has no backends for that client and connections should fail. The special value "*" may be used to mean "any topology". This catch-all value, if used, only makes sense as the last value in the list. If this is not specified or empty, no topology constraints will be applied. This field is alpha-level and is only honored by servers that enable the ServiceTopology feature. This field is deprecated and will be removed in a future version.
|
||||
|
||||
- **allocateLoadBalancerNodePorts** (boolean)
|
||||
|
||||
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is "true". It may be set to "false" if the cluster load-balancer does not rely on NodePorts. allocateLoadBalancerNodePorts may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. This field is alpha-level and is only honored by servers that enable the ServiceLBNodePortControl feature.
|
||||
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is "true". It may be set to "false" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. This field is beta-level and is only honored by servers that enable the ServiceLBNodePortControl feature.
|
||||
|
||||
|
||||
|
||||
@@ -733,6 +729,8 @@ PATCH /api/v1/namespaces/{namespace}/services/{name}
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/service-v1#Service" >}}">Service</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/service-v1#Service" >}}">Service</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -786,6 +784,8 @@ PATCH /api/v1/namespaces/{namespace}/services/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../service-resources/service-v1#Service" >}}">Service</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../service-resources/service-v1#Service" >}}">Service</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+3
-1
@@ -6,7 +6,7 @@ api_metadata:
|
||||
content_type: "api_reference"
|
||||
description: "ControllerRevision implements an immutable snapshot of state data."
|
||||
title: "ControllerRevision"
|
||||
weight: 8
|
||||
weight: 7
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
@@ -440,6 +440,8 @@ PATCH /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/controller-revision-v1#ControllerRevision" >}}">ControllerRevision</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/controller-revision-v1#ControllerRevision" >}}">ControllerRevision</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ api_metadata:
|
||||
content_type: "api_reference"
|
||||
description: "CronJob represents the configuration of a single cron job."
|
||||
title: "CronJob"
|
||||
weight: 11
|
||||
weight: 10
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
@@ -572,6 +572,8 @@ PATCH /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/cron-job-v1#CronJob" >}}">CronJob</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/cron-job-v1#CronJob" >}}">CronJob</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -625,6 +627,8 @@ PATCH /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/cron-job-v1#CronJob" >}}">CronJob</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/cron-job-v1#CronJob" >}}">CronJob</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ api_metadata:
|
||||
content_type: "api_reference"
|
||||
description: "DaemonSet represents the configuration of a daemon set."
|
||||
title: "DaemonSet"
|
||||
weight: 9
|
||||
weight: 8
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
@@ -92,14 +92,14 @@ DaemonSetSpec is the specification of a daemon set.
|
||||
|
||||
- **updateStrategy.rollingUpdate.maxSurge** (IntOrString)
|
||||
|
||||
The maximum number of nodes with an existing available DaemonSet pod that can have an updated DaemonSet pod during during an update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up to a minimum of 1. Default value is 0. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their a new pod created before the old pod is marked as deleted. The update starts by launching new pods on 30% of nodes. Once an updated pod is available (Ready for at least minReadySeconds) the old DaemonSet pod on that node is marked deleted. If the old pod becomes unavailable for any reason (Ready transitions to false, is evicted, or is drained) an updated pod is immediatedly created on that node without considering surge limits. Allowing surge implies the possibility that the resources consumed by the daemonset on any given node can double if the readiness check fails, and so resource intensive daemonsets should take into account that they may cause evictions during disruption. This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate.
|
||||
The maximum number of nodes with an existing available DaemonSet pod that can have an updated DaemonSet pod during during an update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up to a minimum of 1. Default value is 0. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their a new pod created before the old pod is marked as deleted. The update starts by launching new pods on 30% of nodes. Once an updated pod is available (Ready for at least minReadySeconds) the old DaemonSet pod on that node is marked deleted. If the old pod becomes unavailable for any reason (Ready transitions to false, is evicted, or is drained) an updated pod is immediatedly created on that node without considering surge limits. Allowing surge implies the possibility that the resources consumed by the daemonset on any given node can double if the readiness check fails, and so resource intensive daemonsets should take into account that they may cause evictions during disruption. This is beta field and enabled/disabled by DaemonSetUpdateSurge feature gate.
|
||||
|
||||
<a name="IntOrString"></a>
|
||||
*IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.*
|
||||
|
||||
- **updateStrategy.rollingUpdate.maxUnavailable** (IntOrString)
|
||||
|
||||
The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding down to a minimum of one. This cannot be 0 if MaxSurge is 0 Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.
|
||||
The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0 if MaxSurge is 0 Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.
|
||||
|
||||
<a name="IntOrString"></a>
|
||||
*IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.*
|
||||
@@ -629,6 +629,8 @@ PATCH /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/daemon-set-v1#DaemonSet" >}}">DaemonSet</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/daemon-set-v1#DaemonSet" >}}">DaemonSet</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -682,6 +684,8 @@ PATCH /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/daemon-set-v1#DaemonSet" >}}">DaemonSet</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/daemon-set-v1#DaemonSet" >}}">DaemonSet</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ api_metadata:
|
||||
content_type: "api_reference"
|
||||
description: "Deployment enables declarative updates for Pods and ReplicaSets."
|
||||
title: "Deployment"
|
||||
weight: 6
|
||||
weight: 5
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
@@ -40,7 +40,7 @@ Deployment enables declarative updates for Pods and ReplicaSets.
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
Standard object metadata.
|
||||
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||
|
||||
- **spec** (<a href="{{< ref "../workload-resources/deployment-v1#DeploymentSpec" >}}">DeploymentSpec</a>)
|
||||
|
||||
@@ -642,6 +642,8 @@ PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/deployment-v1#Deployment" >}}">Deployment</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/deployment-v1#Deployment" >}}">Deployment</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -695,6 +697,8 @@ PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/deployment-v1#Deployment" >}}">Deployment</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/deployment-v1#Deployment" >}}">Deployment</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
-621
@@ -1,621 +0,0 @@
|
||||
---
|
||||
api_metadata:
|
||||
apiVersion: "v1"
|
||||
import: "k8s.io/api/core/v1"
|
||||
kind: "EphemeralContainers"
|
||||
content_type: "api_reference"
|
||||
description: "A list of ephemeral containers used with the Pod ephemeralcontainers subresource."
|
||||
title: "EphemeralContainers"
|
||||
weight: 2
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
<!--
|
||||
The file is auto-generated from the Go source code of the component using a generic
|
||||
[generator](https://github.com/kubernetes-sigs/reference-docs/). To learn how
|
||||
to generate the reference documentation, please read
|
||||
[Contributing to the reference documentation](/docs/contribute/generate-ref-docs/).
|
||||
To update the reference content, please follow the
|
||||
[Contributing upstream](/docs/contribute/generate-ref-docs/contribute-upstream/)
|
||||
guide. You can file document formatting bugs against the
|
||||
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
|
||||
-->
|
||||
|
||||
`apiVersion: v1`
|
||||
|
||||
`import "k8s.io/api/core/v1"`
|
||||
|
||||
|
||||
## EphemeralContainers {#EphemeralContainers}
|
||||
|
||||
A list of ephemeral containers used with the Pod ephemeralcontainers subresource.
|
||||
|
||||
<hr>
|
||||
|
||||
- **apiVersion**: v1
|
||||
|
||||
|
||||
- **kind**: EphemeralContainers
|
||||
|
||||
|
||||
- **metadata** (<a href="{{< ref "../common-definitions/object-meta#ObjectMeta" >}}">ObjectMeta</a>)
|
||||
|
||||
|
||||
- **ephemeralContainers** ([]<a href="{{< ref "../workload-resources/ephemeral-containers-v1#EphemeralContainer" >}}">EphemeralContainer</a>), required
|
||||
|
||||
*Patch strategy: merge on key `name`*
|
||||
|
||||
A list of ephemeral containers associated with this pod. New ephemeral containers may be appended to this list, but existing ephemeral containers may not be removed or modified.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## EphemeralContainer {#EphemeralContainer}
|
||||
|
||||
An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
||||
<hr>
|
||||
|
||||
- **name** (string), required
|
||||
|
||||
Name of the ephemeral container specified as a DNS_LABEL. This name must be unique among all containers, init containers and ephemeral containers.
|
||||
|
||||
- **targetContainerName** (string)
|
||||
|
||||
If set, the name of the container from PodSpec that this ephemeral container targets. The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. If not set then the ephemeral container is run in whatever namespaces are shared for the pod. Note that the container runtime must support this feature.
|
||||
|
||||
|
||||
|
||||
### Image
|
||||
|
||||
|
||||
- **image** (string)
|
||||
|
||||
Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images
|
||||
|
||||
- **imagePullPolicy** (string)
|
||||
|
||||
Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
|
||||
|
||||
### Entrypoint
|
||||
|
||||
|
||||
- **command** ([]string)
|
||||
|
||||
Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
|
||||
|
||||
- **args** ([]string)
|
||||
|
||||
Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
|
||||
|
||||
- **workingDir** (string)
|
||||
|
||||
Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.
|
||||
|
||||
### Environment variables
|
||||
|
||||
|
||||
- **env** ([]EnvVar)
|
||||
|
||||
*Patch strategy: merge on key `name`*
|
||||
|
||||
List of environment variables to set in the container. Cannot be updated.
|
||||
|
||||
<a name="EnvVar"></a>
|
||||
*EnvVar represents an environment variable present in a Container.*
|
||||
|
||||
- **env.name** (string), required
|
||||
|
||||
Name of the environment variable. Must be a C_IDENTIFIER.
|
||||
|
||||
- **env.value** (string)
|
||||
|
||||
Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".
|
||||
|
||||
- **env.valueFrom** (EnvVarSource)
|
||||
|
||||
Source for the environment variable's value. Cannot be used if value is not empty.
|
||||
|
||||
<a name="EnvVarSource"></a>
|
||||
*EnvVarSource represents a source for the value of an EnvVar.*
|
||||
|
||||
- **env.valueFrom.configMapKeyRef** (ConfigMapKeySelector)
|
||||
|
||||
Selects a key of a ConfigMap.
|
||||
|
||||
<a name="ConfigMapKeySelector"></a>
|
||||
*Selects a key from a ConfigMap.*
|
||||
|
||||
- **env.valueFrom.configMapKeyRef.key** (string), required
|
||||
|
||||
The key to select.
|
||||
|
||||
- **env.valueFrom.configMapKeyRef.name** (string)
|
||||
|
||||
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
|
||||
- **env.valueFrom.configMapKeyRef.optional** (boolean)
|
||||
|
||||
Specify whether the ConfigMap or its key must be defined
|
||||
|
||||
- **env.valueFrom.fieldRef** (<a href="{{< ref "../common-definitions/object-field-selector#ObjectFieldSelector" >}}">ObjectFieldSelector</a>)
|
||||
|
||||
Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['\<KEY>']`, `metadata.annotations['\<KEY>']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
|
||||
|
||||
- **env.valueFrom.resourceFieldRef** (<a href="{{< ref "../common-definitions/resource-field-selector#ResourceFieldSelector" >}}">ResourceFieldSelector</a>)
|
||||
|
||||
Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
|
||||
|
||||
- **env.valueFrom.secretKeyRef** (SecretKeySelector)
|
||||
|
||||
Selects a key of a secret in the pod's namespace
|
||||
|
||||
<a name="SecretKeySelector"></a>
|
||||
*SecretKeySelector selects a key of a Secret.*
|
||||
|
||||
- **env.valueFrom.secretKeyRef.key** (string), required
|
||||
|
||||
The key of the secret to select from. Must be a valid secret key.
|
||||
|
||||
- **env.valueFrom.secretKeyRef.name** (string)
|
||||
|
||||
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
|
||||
- **env.valueFrom.secretKeyRef.optional** (boolean)
|
||||
|
||||
Specify whether the Secret or its key must be defined
|
||||
|
||||
- **envFrom** ([]EnvFromSource)
|
||||
|
||||
List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.
|
||||
|
||||
<a name="EnvFromSource"></a>
|
||||
*EnvFromSource represents the source of a set of ConfigMaps*
|
||||
|
||||
- **envFrom.configMapRef** (ConfigMapEnvSource)
|
||||
|
||||
The ConfigMap to select from
|
||||
|
||||
<a name="ConfigMapEnvSource"></a>
|
||||
*ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.
|
||||
|
||||
The contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.*
|
||||
|
||||
- **envFrom.configMapRef.name** (string)
|
||||
|
||||
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
|
||||
- **envFrom.configMapRef.optional** (boolean)
|
||||
|
||||
Specify whether the ConfigMap must be defined
|
||||
|
||||
- **envFrom.prefix** (string)
|
||||
|
||||
An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
|
||||
|
||||
- **envFrom.secretRef** (SecretEnvSource)
|
||||
|
||||
The Secret to select from
|
||||
|
||||
<a name="SecretEnvSource"></a>
|
||||
*SecretEnvSource selects a Secret to populate the environment variables with.
|
||||
|
||||
The contents of the target Secret's Data field will represent the key-value pairs as environment variables.*
|
||||
|
||||
- **envFrom.secretRef.name** (string)
|
||||
|
||||
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
|
||||
- **envFrom.secretRef.optional** (boolean)
|
||||
|
||||
Specify whether the Secret must be defined
|
||||
|
||||
### Volumes
|
||||
|
||||
|
||||
- **volumeMounts** ([]VolumeMount)
|
||||
|
||||
*Patch strategy: merge on key `mountPath`*
|
||||
|
||||
Pod volumes to mount into the container's filesystem. Cannot be updated.
|
||||
|
||||
<a name="VolumeMount"></a>
|
||||
*VolumeMount describes a mounting of a Volume within a container.*
|
||||
|
||||
- **volumeMounts.mountPath** (string), required
|
||||
|
||||
Path within the container at which the volume should be mounted. Must not contain ':'.
|
||||
|
||||
- **volumeMounts.name** (string), required
|
||||
|
||||
This must match the Name of a Volume.
|
||||
|
||||
- **volumeMounts.mountPropagation** (string)
|
||||
|
||||
mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.
|
||||
|
||||
- **volumeMounts.readOnly** (boolean)
|
||||
|
||||
Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.
|
||||
|
||||
- **volumeMounts.subPath** (string)
|
||||
|
||||
Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root).
|
||||
|
||||
- **volumeMounts.subPathExpr** (string)
|
||||
|
||||
Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive.
|
||||
|
||||
- **volumeDevices** ([]VolumeDevice)
|
||||
|
||||
*Patch strategy: merge on key `devicePath`*
|
||||
|
||||
volumeDevices is the list of block devices to be used by the container.
|
||||
|
||||
<a name="VolumeDevice"></a>
|
||||
*volumeDevice describes a mapping of a raw block device within a container.*
|
||||
|
||||
- **volumeDevices.devicePath** (string), required
|
||||
|
||||
devicePath is the path inside of the container that the device will be mapped to.
|
||||
|
||||
- **volumeDevices.name** (string), required
|
||||
|
||||
name must match the name of a persistentVolumeClaim in the pod
|
||||
|
||||
### Lifecycle
|
||||
|
||||
|
||||
- **terminationMessagePath** (string)
|
||||
|
||||
Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.
|
||||
|
||||
- **terminationMessagePolicy** (string)
|
||||
|
||||
Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
|
||||
|
||||
### Debugging
|
||||
|
||||
|
||||
- **stdin** (boolean)
|
||||
|
||||
Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.
|
||||
|
||||
- **stdinOnce** (boolean)
|
||||
|
||||
Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false
|
||||
|
||||
- **tty** (boolean)
|
||||
|
||||
Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.
|
||||
|
||||
### Not allowed
|
||||
|
||||
|
||||
- **ports** ([]ContainerPort)
|
||||
|
||||
Ports are not allowed for ephemeral containers.
|
||||
|
||||
<a name="ContainerPort"></a>
|
||||
*ContainerPort represents a network port in a single container.*
|
||||
|
||||
- **ports.containerPort** (int32), required
|
||||
|
||||
Number of port to expose on the pod's IP address. This must be a valid port number, 0 \< x \< 65536.
|
||||
|
||||
- **ports.hostIP** (string)
|
||||
|
||||
What host IP to bind the external port to.
|
||||
|
||||
- **ports.hostPort** (int32)
|
||||
|
||||
Number of port to expose on the host. If specified, this must be a valid port number, 0 \< x \< 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.
|
||||
|
||||
- **ports.name** (string)
|
||||
|
||||
If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.
|
||||
|
||||
- **ports.protocol** (string)
|
||||
|
||||
Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
|
||||
|
||||
- **resources** (ResourceRequirements)
|
||||
|
||||
Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod.
|
||||
|
||||
<a name="ResourceRequirements"></a>
|
||||
*ResourceRequirements describes the compute resource requirements.*
|
||||
|
||||
- **resources.limits** (map[string]<a href="{{< ref "../common-definitions/quantity#Quantity" >}}">Quantity</a>)
|
||||
|
||||
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||
|
||||
- **resources.requests** (map[string]<a href="{{< ref "../common-definitions/quantity#Quantity" >}}">Quantity</a>)
|
||||
|
||||
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||
|
||||
- **lifecycle** (Lifecycle)
|
||||
|
||||
Lifecycle is not allowed for ephemeral containers.
|
||||
|
||||
<a name="Lifecycle"></a>
|
||||
*Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.*
|
||||
|
||||
- **lifecycle.postStart** (<a href="{{< ref "../workload-resources/pod-v1#Handler" >}}">Handler</a>)
|
||||
|
||||
PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
|
||||
|
||||
- **lifecycle.preStop** (<a href="{{< ref "../workload-resources/pod-v1#Handler" >}}">Handler</a>)
|
||||
|
||||
PreStop is called immediately before a container is terminated due to an API request or management event such as liveness/startup probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod's termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
|
||||
|
||||
- **livenessProbe** (<a href="{{< ref "../workload-resources/pod-v1#Probe" >}}">Probe</a>)
|
||||
|
||||
Probes are not allowed for ephemeral containers.
|
||||
|
||||
- **readinessProbe** (<a href="{{< ref "../workload-resources/pod-v1#Probe" >}}">Probe</a>)
|
||||
|
||||
Probes are not allowed for ephemeral containers.
|
||||
|
||||
- **securityContext** (SecurityContext)
|
||||
|
||||
SecurityContext is not allowed for ephemeral containers.
|
||||
|
||||
<a name="SecurityContext"></a>
|
||||
*SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.*
|
||||
|
||||
- **securityContext.runAsUser** (int64)
|
||||
|
||||
The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
|
||||
|
||||
- **securityContext.runAsNonRoot** (boolean)
|
||||
|
||||
Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
|
||||
|
||||
- **securityContext.runAsGroup** (int64)
|
||||
|
||||
The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
|
||||
|
||||
- **securityContext.readOnlyRootFilesystem** (boolean)
|
||||
|
||||
Whether this container has a read-only root filesystem. Default is false.
|
||||
|
||||
- **securityContext.procMount** (string)
|
||||
|
||||
procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.
|
||||
|
||||
- **securityContext.privileged** (boolean)
|
||||
|
||||
Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.
|
||||
|
||||
- **securityContext.allowPrivilegeEscalation** (boolean)
|
||||
|
||||
AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN
|
||||
|
||||
- **securityContext.capabilities** (Capabilities)
|
||||
|
||||
The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.
|
||||
|
||||
<a name="Capabilities"></a>
|
||||
*Adds and removes POSIX capabilities from running containers.*
|
||||
|
||||
- **securityContext.capabilities.add** ([]string)
|
||||
|
||||
Added capabilities
|
||||
|
||||
- **securityContext.capabilities.drop** ([]string)
|
||||
|
||||
Removed capabilities
|
||||
|
||||
- **securityContext.seccompProfile** (SeccompProfile)
|
||||
|
||||
The seccomp options to use by this container. If seccomp options are provided at both the pod & container level, the container options override the pod options.
|
||||
|
||||
<a name="SeccompProfile"></a>
|
||||
*SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set.*
|
||||
|
||||
- **securityContext.seccompProfile.type** (string), required
|
||||
|
||||
type indicates which kind of seccomp profile will be applied. Valid options are:
|
||||
|
||||
Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.
|
||||
|
||||
- **securityContext.seccompProfile.localhostProfile** (string)
|
||||
|
||||
localhostProfile indicates a profile defined in a file on the node should be used. The profile must be preconfigured on the node to work. Must be a descending path, relative to the kubelet's configured seccomp profile location. Must only be set if type is "Localhost".
|
||||
|
||||
- **securityContext.seLinuxOptions** (SELinuxOptions)
|
||||
|
||||
The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
|
||||
|
||||
<a name="SELinuxOptions"></a>
|
||||
*SELinuxOptions are the labels to be applied to the container*
|
||||
|
||||
- **securityContext.seLinuxOptions.level** (string)
|
||||
|
||||
Level is SELinux level label that applies to the container.
|
||||
|
||||
- **securityContext.seLinuxOptions.role** (string)
|
||||
|
||||
Role is a SELinux role label that applies to the container.
|
||||
|
||||
- **securityContext.seLinuxOptions.type** (string)
|
||||
|
||||
Type is a SELinux type label that applies to the container.
|
||||
|
||||
- **securityContext.seLinuxOptions.user** (string)
|
||||
|
||||
User is a SELinux user label that applies to the container.
|
||||
|
||||
- **securityContext.windowsOptions** (WindowsSecurityContextOptions)
|
||||
|
||||
The Windows specific settings applied to all containers. If unspecified, the options from the PodSecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
|
||||
|
||||
<a name="WindowsSecurityContextOptions"></a>
|
||||
*WindowsSecurityContextOptions contain Windows-specific options and credentials.*
|
||||
|
||||
- **securityContext.windowsOptions.gmsaCredentialSpec** (string)
|
||||
|
||||
GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field.
|
||||
|
||||
- **securityContext.windowsOptions.gmsaCredentialSpecName** (string)
|
||||
|
||||
GMSACredentialSpecName is the name of the GMSA credential spec to use.
|
||||
|
||||
- **securityContext.windowsOptions.runAsUserName** (string)
|
||||
|
||||
The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
|
||||
|
||||
- **startupProbe** (<a href="{{< ref "../workload-resources/pod-v1#Probe" >}}">Probe</a>)
|
||||
|
||||
Probes are not allowed for ephemeral containers.
|
||||
|
||||
|
||||
|
||||
## Operations {#Operations}
|
||||
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### `get` read ephemeralcontainers of the specified Pod
|
||||
|
||||
#### HTTP Request
|
||||
|
||||
GET /api/v1/namespaces/{namespace}/pods/{name}/ephemeralcontainers
|
||||
|
||||
#### Parameters
|
||||
|
||||
|
||||
- **name** (*in path*): string, required
|
||||
|
||||
name of the EphemeralContainers
|
||||
|
||||
|
||||
- **namespace** (*in path*): string, required
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#namespace" >}}">namespace</a>
|
||||
|
||||
|
||||
- **pretty** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#pretty" >}}">pretty</a>
|
||||
|
||||
|
||||
|
||||
#### Response
|
||||
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/ephemeral-containers-v1#EphemeralContainers" >}}">EphemeralContainers</a>): OK
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
### `update` replace ephemeralcontainers of the specified Pod
|
||||
|
||||
#### HTTP Request
|
||||
|
||||
PUT /api/v1/namespaces/{namespace}/pods/{name}/ephemeralcontainers
|
||||
|
||||
#### Parameters
|
||||
|
||||
|
||||
- **name** (*in path*): string, required
|
||||
|
||||
name of the EphemeralContainers
|
||||
|
||||
|
||||
- **namespace** (*in path*): string, required
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#namespace" >}}">namespace</a>
|
||||
|
||||
|
||||
- **body**: <a href="{{< ref "../workload-resources/ephemeral-containers-v1#EphemeralContainers" >}}">EphemeralContainers</a>, required
|
||||
|
||||
|
||||
|
||||
|
||||
- **dryRun** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#dryRun" >}}">dryRun</a>
|
||||
|
||||
|
||||
- **fieldManager** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#fieldManager" >}}">fieldManager</a>
|
||||
|
||||
|
||||
- **pretty** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#pretty" >}}">pretty</a>
|
||||
|
||||
|
||||
|
||||
#### Response
|
||||
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/ephemeral-containers-v1#EphemeralContainers" >}}">EphemeralContainers</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/ephemeral-containers-v1#EphemeralContainers" >}}">EphemeralContainers</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
### `patch` partially update ephemeralcontainers of the specified Pod
|
||||
|
||||
#### HTTP Request
|
||||
|
||||
PATCH /api/v1/namespaces/{namespace}/pods/{name}/ephemeralcontainers
|
||||
|
||||
#### Parameters
|
||||
|
||||
|
||||
- **name** (*in path*): string, required
|
||||
|
||||
name of the EphemeralContainers
|
||||
|
||||
|
||||
- **namespace** (*in path*): string, required
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#namespace" >}}">namespace</a>
|
||||
|
||||
|
||||
- **body**: <a href="{{< ref "../common-definitions/patch#Patch" >}}">Patch</a>, required
|
||||
|
||||
|
||||
|
||||
|
||||
- **dryRun** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#dryRun" >}}">dryRun</a>
|
||||
|
||||
|
||||
- **fieldManager** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#fieldManager" >}}">fieldManager</a>
|
||||
|
||||
|
||||
- **force** (*in query*): boolean
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#force" >}}">force</a>
|
||||
|
||||
|
||||
- **pretty** (*in query*): string
|
||||
|
||||
<a href="{{< ref "../common-parameters/common-parameters#pretty" >}}">pretty</a>
|
||||
|
||||
|
||||
|
||||
#### Response
|
||||
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/ephemeral-containers-v1#EphemeralContainers" >}}">EphemeralContainers</a>): OK
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
+5
-1
@@ -6,7 +6,7 @@ api_metadata:
|
||||
content_type: "api_reference"
|
||||
description: "configuration of a horizontal pod autoscaler."
|
||||
title: "HorizontalPodAutoscaler"
|
||||
weight: 12
|
||||
weight: 11
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
@@ -567,6 +567,8 @@ PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v1#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v1#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -620,6 +622,8 @@ PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v1#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v1#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
+5
-1
@@ -6,7 +6,7 @@ api_metadata:
|
||||
content_type: "api_reference"
|
||||
description: "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified."
|
||||
title: "HorizontalPodAutoscaler v2beta2"
|
||||
weight: 13
|
||||
weight: 12
|
||||
auto_generated: true
|
||||
---
|
||||
|
||||
@@ -1119,6 +1119,8 @@ PATCH /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v2beta2#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v2beta2#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
@@ -1172,6 +1174,8 @@ PATCH /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/
|
||||
|
||||
200 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v2beta2#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): OK
|
||||
|
||||
201 (<a href="{{< ref "../workload-resources/horizontal-pod-autoscaler-v2beta2#HorizontalPodAutoscaler" >}}">HorizontalPodAutoscaler</a>): Created
|
||||
|
||||
401: Unauthorized
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user