From 786d314da5351a0f18aebf5f65814dec321ead3f Mon Sep 17 00:00:00 2001 From: Jim Angel Date: Thu, 27 Sep 2018 18:41:39 -0500 Subject: [PATCH 001/181] [Do Not Merge] Release 1.12 (#10292) * Update docs for fields allowed at root of CRD schema (#9973) * add plugin docs and examples (#10053) * docs update to promote TaintNodesByCondition to beta (#9626) * HPA Specificity Improvements (#8757) Updated the HPA docs to reference the `autoscaling/v2beta2` API version, and added documentation about the new fields. * adjust docs for pod ready++ (#10049) * Remove --cadvisor-port - has been deprecated since v1.10 (#10023) Change-Id: Id2a685473a243aef492a98ff450759f39e362557 * Add Documentation for Snapshot Feature (#9948) * Add documentation for snapshot feature * Update volume-snapshots.md * Add dry-run to api-concepts (#10033) * kubeadm-init: Update the offline support section (#10062) The update includes the following things (in mind with Kubernetes 1.12): - Remove the 1.8 image versions - Add the 1.10 image versions that were missing until now - Include a comment for the missing arch suffixes in 1.12 Signed-off-by: Rostislav M. Georgiev * Say bye to `DynamicProvisioningScheduling` (#10157) The mentioned feature gate is now collapsed into `VolumeScheduling`. xref: kubernetes/kubernetes#67432 * Update ResourceQuota per PriorityClass state for 1.12 (#10229) * TokenRequest and TokenRequestProjection now beta (#10161) xref: kubernetes/kubernetes#67349 * Change feature state for kms provider to beta. (#10230) KMS Provider will be graduating to beta in v1.12, reflecting this change on the website. * coredns default (#10200) * Promote ShareProcessNamespace to beta in docs (#9996) * Add CoreDNS details to DNS Debug docs (#10201) * add coredns details * address nits, add query logging section * Update docs with topology aware dynamic provisioning (#9939) * Document topology aware volume binding feature * update for readability * Update storage-classes.md * comma splice * don't abbreviate * HPA Algorithm Information Improvements (#9780) * Update HPA docs with more algorithm details The HPA docs pointed to an out-of-date document for information on the algorithm details, which users were finding confusing. This sticks a section on the algorithm in the HPA docs instead, documenting both general behavior and corner cases. * Add glossary info, HPA docs on quantities People often ask about the quantity notation when working with the metrics APIs, so this adds a glossary entry on quantities (since they're used elsewhere in the system), and a short explantation in the HPA walkthough. * Information about HPA readiness and stabilization This adds information about the new changes to HPA readiness and stabilization from kubernetes/features#591, and other minor changes that landed in Kubernetes 1.12. * Update horizontal-pod-autoscale.md * Audit 1.12 doc (#9953) * audit 1.12 document * remove legacy audit feature https://github.com/kubernetes/kubernetes/pull/65862 * update feature gate doc * MountPropagation is now GA (#10090) * RuntimeClass documentation (#10102) * RuntimeClass documentation * Update runtime-class.md * Add documentation for Scheduler performance tuning (#10048) * Add documentation for Scheduler performance tuning * Update scheduler-perf-tuning.md * TTL controller for cleaning up finished resources (#10064) * TTL controller for cleaning up finished resources * Address comments * Update ttlafterfinished.md * Bump quota configuration api version (#10217) * Incremental update from master (#10278) * fix invalid href of cloud controller manager (#10240) * fix invalid yaml format (#10238) * update storage-limits doc with Azure disk part (#10224) update storage-limits doc with Azure disk part fix comments * Update kubelet-config-file.md (#10222) Update link to KubeletConfiguration struct. * fix a trivial misspelling (#10244) * Fix cassandra-statefulset.yaml indent level (#10243) * Mention minimum etcd versions (#10208) Source: https://groups.google.com/d/msg/kubernetes-dev/jMPA4JzKiY4/HIx2ugvLBAAJ * fix 404 error (#10250) * Small verb tweak (#10190) Present participle, ftw. * Add AnchorJS logic for header links (#10155) * Add AnchorJS JavaScript * Remove existing inpage_heading logic * Remove underline from anchor tags * Use single icon and add touch visibility * Use paragraph link icon for AnchorJS * Update Sass to use code formatting in docsContent headers * Update header size coverage to H3-H6 * fix broken link in kubefed.md (#10254) * Update the version numbers for the X-Remote-Extra- and Impersonate-Extra- key fixes (#9827) The fix was cherry picked into 1.11.3, 1.10.7, and 1.9.11: https://github.com/kubernetes/kubernetes/pull/67162 https://github.com/kubernetes/kubernetes/pull/67163 https://github.com/kubernetes/kubernetes/pull/67164 * fix typo (#10168) * fix typo * addressing comments. * Update setup-ha-etcd-with-kubeadm.md * fix typos (#10252) * fix description of contribute guide (#10253) * describe truncate feature about advanced audit (#10236) * describe truncate feature about advanced audit * Update audit.md * docs update to promote ScheduleDaemonSetPods to beta (#9923) * Dynamic volume limit updates for 1.12 (#10211) * add a placeholder commit * Update docs for csi volume limits * Update storage-limits.md * Add "MayRunAs" value among other GroupStrategies (#9888) * Add CoreDNS details to the customize DNS doc (#10228) * Add CoreDNS details to the customize DNS doc Rewrite the document to include more details about CoreDNS, since it's now the default from v1.12 * Address comments * Improve doc wording * Fix link * Update dns-custom-nameservers.md * Update dns-custom-nameservers.md * Fix secrets docs in 1.12 branch (#10056) * Fix secrets docs * Update secret.md * Revert CoreDNS Docs (#10319) * Revert "Add CoreDNS details to DNS Debug docs (#10201)" This reverts commit 462817a67479fcc3481648981a4b90df35b86fdc. * Revert "Add CoreDNS details to the customize DNS doc (#10228)" This reverts commit e7319eeb8cde914d06cad039867e6213ecef1001. * Revert "coredns default (#10200)" This reverts commit 698e93b4415600d1a67f117132d8b09713282aa4. * Add CRI installation instructions page Added cri-installation page with CRI installation instructions Referenced it from kubeadm-init and install-kubeadm pages. * kubeadm: update API types documentation for 1.12 (#10283) v1alpha2 -> v1alpha3 MasterConfiguration -> [new-api-types] * TokenRequest feature documentation (#10295) * AdvancedAuditing is now GA (#10156) xref: kubernetes/kubernetes#65862 `AdvancedAuditing` feature is GA in 1.12. This PR adjusts the related docs. * update runtime-class.md (#10332) * update runtime-class.md * Update runtime-class.md * Document cross-authorizer permissions for creating RBAC roles (#10015) * Document cross-authorizer permissions for creating RBAC roles * Update rbac.md * kubeadm: update authored content for 1.12 (reference docs and cluster creation) (#10348) * kubeadm: update authored content in reference docs for 1.12 * kubeadm: add time frame in create-cluster-kubeadm for 1.12 * add AllowedProcMountTypes and ProcMountType to docs (#9911) Signed-off-by: Jess Frazelle * kubeadm: add new command line reference (#10306) Add: - placeholder files - include place holder files - include "renew" sub command - add missing tabs for "alpha phase kubelet" * Documenting SCTP support in Kubernetes (#10279) * Documenting SCTP support in Kubernetes Service, Endpoint, NetworkPolicy and Pod * Updates based on comments on the PR * kubectl expose update with SCTP support * Updated according to comments in the PR * Revert "kubectl expose update with SCTP support" This reverts commit 0d5a1e6720a012390cf100c83e16b4a8c0782356. * TLS Bootstrap and Server Cert Rotation feature documentation (#10232) * TokenRequest feature documentation * line wrapping to make review not insane * update content for GA without major refactor * Update kubelet-tls-bootstrapping.md * Add clarifications for volume snapshots (#10296) * Update kubadm ha installation for 1.12 (#10264) * Update kubadm ha installation for 1.12 Signed-off-by: Chuck Ha * update stable version Signed-off-by: Chuck Ha * Update stacked control plane for v1.12 (#2) * use v1alpha3 Signed-off-by: Chuck Ha * more v1alpha3 (#4) * updates Signed-off-by: Chuck Ha * Document how to run in-tree cloud providers with kubeadm (#10357) Change-Id: Iab6b996a830503d74a6eb0c507c5f8ca7a39235b * kubeadm reference doc for release 1.12 (#10359) * Revert "Revert "Add CoreDNS details to DNS Debug docs (#10201)"" This reverts commit bb30f4d1fcd6fba2fe6190778ead99f8010033b7. * Revert "Revert "Add CoreDNS details to the customize DNS doc (#10228)"" This reverts commit bc23d45c09d7b83cac130fe22a0bd91e72435862. * Revert "Revert "coredns default (#10200)"" This reverts commit 7f4350d6ab7fc554ee53126d3875e845d2e43d1f. * add missing instruction for ha guide (#10374) Signed-off-by: Chuck Ha * kubeadm - Ha upgrade updates (#10340) * Update HA upgrade docs * Adds external etcd HA upgrade guide Signed-off-by: Chuck Ha * copyedit * more edits * add runasgroup in psp (#10076) * update KubeletPluginsWatcher feature gate (#10205) * generated 1.12 docs * Building Multi-arch images with Manifests (#10379) In 1.12, a variety of images used in a typical kubernetes installation have started to using manifests to better support environments with arm or ppc64le architectures. For example all images used with kubeadm by default have manifests, another would be all the tests in the conformance test suite. Here we capture the best practices for everyone to start using manifests in their own workflows. Change-Id: I5ba4c5fe55ffc9486a8251760f3352be4f2e1494 * Upgrade docs for v1.12 (#10344) * generated assets and docs * remove 1.7 * update 1.12 * update plugin documentation under docs>tasks>extend-kubectl (#10259) * update plugin documentation under docs>tasks>extend-kubectl * Update kubectl-plugins.md --- config.toml | 27 +- .../en/docs/concepts/architecture/nodes.md | 6 +- .../cluster-administration/cloud-providers.md | 40 + .../cluster-administration/proxies.md | 5 +- .../configuration/pod-priority-preemption.md | 2 +- .../configuration/scheduler-perf-tuning.md | 112 + .../en/docs/concepts/configuration/secret.md | 12 +- .../configuration/taint-and-toleration.md | 7 +- content/en/docs/concepts/containers/images.md | 20 + .../docs/concepts/containers/runtime-class.md | 122 ++ .../concepts/policy/pod-security-policy.md | 33 + .../docs/concepts/policy/resource-quotas.md | 8 +- .../services-networking/network-policies.md | 9 + .../concepts/services-networking/service.md | 38 +- .../concepts/storage/dynamic-provisioning.md | 7 + .../concepts/storage/persistent-volumes.md | 28 + .../docs/concepts/storage/storage-classes.md | 93 +- .../docs/concepts/storage/storage-limits.md | 37 +- .../storage/volume-snapshot-classes.md | 64 + .../docs/concepts/storage/volume-snapshots.md | 127 ++ content/en/docs/concepts/storage/volumes.md | 10 +- .../workloads/controllers/daemonset.md | 29 +- .../controllers/jobs-run-to-completion.md | 53 + .../workloads/controllers/ttlafterfinished.md | 90 + .../concepts/workloads/pods/pod-lifecycle.md | 8 +- .../docs/reference/access-authn-authz/rbac.md | 12 +- .../cloud-controller-manager.md | 119 +- .../feature-gates.md | 31 +- .../federation-apiserver.md | 7 +- .../federation-controller-manager.md | 7 +- .../kube-apiserver.md | 44 +- .../kube-controller-manager.md | 161 +- .../kube-proxy.md | 4 +- .../kube-scheduler.md | 2 +- .../kubelet-tls-bootstrapping.md | 227 +- .../command-line-tools-reference/kubelet.md | 7 - .../en/docs/reference/glossary/quantity.md | 30 + content/en/docs/reference/kubectl/kubectl.md | 262 ++- content/en/docs/reference/kubectl/overview.md | 81 + .../setup-tools/kubeadm/generated/kubeadm.md | 7 + .../kubeadm/generated/kubeadm_alpha.md | 21 + .../kubeadm/generated/kubeadm_alpha_phase.md | 21 + .../generated/kubeadm_alpha_phase_addon.md | 21 + .../kubeadm_alpha_phase_addon_all.md | 31 +- .../kubeadm_alpha_phase_addon_coredns.md | 27 +- .../kubeadm_alpha_phase_addon_kube-dns.md | 85 - .../kubeadm_alpha_phase_addon_kube-proxy.md | 25 +- .../kubeadm_alpha_phase_bootstrap-token.md | 23 +- ...kubeadm_alpha_phase_bootstrap-token_all.md | 9 +- ...lpha_phase_bootstrap-token_cluster-info.md | 9 +- ...eadm_alpha_phase_bootstrap-token_create.md | 9 +- ...ubeadm_alpha_phase_bootstrap-token_node.md | 9 +- ...bootstrap-token_node_allow-auto-approve.md | 9 +- ...se_bootstrap-token_node_allow-post-csrs.md | 9 +- .../generated/kubeadm_alpha_phase_certs.md | 21 + .../kubeadm_alpha_phase_certs_all.md | 26 +- ...alpha_phase_certs_apiserver-etcd-client.md | 27 +- ...ha_phase_certs_apiserver-kubelet-client.md | 27 +- .../kubeadm_alpha_phase_certs_apiserver.md | 29 +- .../generated/kubeadm_alpha_phase_certs_ca.md | 27 +- .../kubeadm_alpha_phase_certs_etcd-ca.md | 27 +- ...pha_phase_certs_etcd-healthcheck-client.md | 27 +- .../kubeadm_alpha_phase_certs_etcd-peer.md | 29 +- .../kubeadm_alpha_phase_certs_etcd-server.md | 29 +- ...ubeadm_alpha_phase_certs_front-proxy-ca.md | 27 +- ...dm_alpha_phase_certs_front-proxy-client.md | 27 +- .../kubeadm_alpha_phase_certs_renew.md | 54 + .../kubeadm_alpha_phase_certs_renew_all.md | 82 + ...phase_certs_renew_apiserver-etcd-client.md | 84 + ...se_certs_renew_apiserver-kubelet-client.md | 84 + ...beadm_alpha_phase_certs_renew_apiserver.md | 84 + ...ase_certs_renew_etcd-healthcheck-client.md | 84 + ...beadm_alpha_phase_certs_renew_etcd-peer.md | 84 + ...adm_alpha_phase_certs_renew_etcd-server.md | 84 + ...ha_phase_certs_renew_front-proxy-client.md | 84 + .../generated/kubeadm_alpha_phase_certs_sa.md | 27 +- .../kubeadm_alpha_phase_controlplane.md | 21 + .../kubeadm_alpha_phase_controlplane_all.md | 25 +- ...eadm_alpha_phase_controlplane_apiserver.md | 25 +- ...a_phase_controlplane_controller-manager.md | 23 +- ...eadm_alpha_phase_controlplane_scheduler.md | 23 +- .../generated/kubeadm_alpha_phase_etcd.md | 21 + .../kubeadm_alpha_phase_etcd_local.md | 21 + .../kubeadm_alpha_phase_kubeconfig.md | 21 + .../kubeadm_alpha_phase_kubeconfig_admin.md | 21 + .../kubeadm_alpha_phase_kubeconfig_all.md | 21 + ...pha_phase_kubeconfig_controller-manager.md | 21 + .../kubeadm_alpha_phase_kubeconfig_kubelet.md | 21 + ...ubeadm_alpha_phase_kubeconfig_scheduler.md | 21 + .../kubeadm_alpha_phase_kubeconfig_user.md | 21 + .../generated/kubeadm_alpha_phase_kubelet.md | 21 + .../kubeadm_alpha_phase_kubelet_config.md | 21 + ...alpha_phase_kubelet_config_annotate-cri.md | 76 + ...adm_alpha_phase_kubelet_config_download.md | 25 +- ...pha_phase_kubelet_config_enable-dynamic.md | 25 +- ...beadm_alpha_phase_kubelet_config_upload.md | 27 +- ...lpha_phase_kubelet_config_write-to-disk.md | 21 + ...eadm_alpha_phase_kubelet_write-env-file.md | 29 +- .../kubeadm_alpha_phase_mark-master.md | 23 +- .../kubeadm_alpha_phase_preflight.md | 35 + .../kubeadm_alpha_phase_preflight_master.md | 35 + .../kubeadm_alpha_phase_preflight_node.md | 35 + .../kubeadm_alpha_phase_selfhosting.md | 21 + ...ase_selfhosting_convert-from-staticpods.md | 25 +- .../kubeadm_alpha_phase_upload-config.md | 23 +- .../kubeadm/generated/kubeadm_completion.md | 21 + .../kubeadm/generated/kubeadm_config.md | 23 +- .../generated/kubeadm_config_images.md | 9 +- .../generated/kubeadm_config_images_list.md | 13 +- .../generated/kubeadm_config_images_pull.md | 17 +- .../generated/kubeadm_config_migrate.md | 13 +- .../generated/kubeadm_config_print-default.md | 15 +- .../generated/kubeadm_config_upload.md | 9 +- .../kubeadm_config_upload_from-file.md | 9 +- .../kubeadm_config_upload_from-flags.md | 13 +- .../kubeadm/generated/kubeadm_config_view.md | 9 +- .../kubeadm/generated/kubeadm_init.md | 25 +- .../kubeadm/generated/kubeadm_join.md | 48 +- .../kubeadm/generated/kubeadm_reset.md | 23 +- .../kubeadm/generated/kubeadm_token.md | 25 +- .../kubeadm/generated/kubeadm_token_create.md | 9 +- .../kubeadm/generated/kubeadm_token_delete.md | 9 +- .../generated/kubeadm_token_generate.md | 9 +- .../kubeadm/generated/kubeadm_token_list.md | 9 +- .../kubeadm/generated/kubeadm_upgrade.md | 70 +- .../generated/kubeadm_upgrade_apply.md | 134 +- .../kubeadm/generated/kubeadm_upgrade_diff.md | 53 +- .../kubeadm/generated/kubeadm_upgrade_node.md | 46 +- .../generated/kubeadm_upgrade_node_config.md | 57 +- ...upgrade_node_experimental-control-plane.md | 79 + .../kubeadm/generated/kubeadm_upgrade_plan.md | 57 +- .../kubeadm/generated/kubeadm_version.md | 21 + .../kubeadm/implementation-details.md | 7 +- .../setup-tools/kubeadm/kubeadm-alpha.md | 26 + .../setup-tools/kubeadm/kubeadm-init.md | 214 +- .../setup-tools/kubeadm/kubeadm-join.md | 25 +- .../setup-tools/kubeadm/kubeadm-upgrade.md | 4 + .../reference/setup-tools/kubefed/kubefed.md | 21 +- .../setup-tools/kubefed/kubefed_init.md | 101 + .../setup-tools/kubefed/kubefed_join.md | 95 + .../setup-tools/kubefed/kubefed_options.md | 72 + .../setup-tools/kubefed/kubefed_unjoin.md | 82 + .../setup-tools/kubefed/kubefed_version.md | 75 + .../docs/reference/using-api/api-concepts.md | 45 + content/en/docs/setup/cri.md | 226 ++ content/en/docs/setup/custom-cloud/node.yaml | 1 - .../setup/independent/control-plane-flags.md | 26 +- .../independent/create-cluster-kubeadm.md | 1 + .../setup/independent/high-availability.md | 134 +- .../docs/setup/independent/install-kubeadm.md | 57 +- .../setup/independent/kubelet-integration.md | 22 +- .../independent/setup-ha-etcd-with-kubeadm.md | 10 +- .../independent/troubleshooting-kubeadm.md | 2 +- content/en/docs/setup/multiple-zones.md | 16 +- content/en/docs/setup/release/notes.md | 1519 +++++++------ .../custom-resource-definitions.md | 26 +- .../dns-custom-nameservers.md | 172 +- .../dns-debugging-resolution.md | 116 +- .../dns-horizontal-autoscaling.md | 43 +- .../tasks/administer-cluster/kms-provider.md | 2 +- .../kubeadm/kubeadm-upgrade-1-12.md | 295 +++ .../kubeadm/kubeadm-upgrade-1-8.md | 290 --- .../kubeadm/kubeadm-upgrade-1-9.md | 264 --- .../kubeadm/kubeadm-upgrade-ha.md | 236 +- .../configure-service-account.md | 56 +- .../share-process-namespace.md | 6 +- .../tasks/debug-application-cluster/audit.md | 53 +- .../tasks/extend-kubectl/kubectl-plugins.md | 286 ++- .../horizontal-pod-autoscale-walkthrough.md | 144 +- .../horizontal-pod-autoscale.md | 107 +- .../admin/dns/dns-horizontal-autoscaler.yaml | 10 +- resources/OWNERS | 8 - ...s_ba3494e18e2339acfc9f811090f8a3d1.content | 1 + ...sass_ba3494e18e2339acfc9f811090f8a3d1.json | 1 + ...s_146085a92036d31fa476cb2cbb0682ce.content | 1937 +++++++++++++++++ ...sass_146085a92036d31fa476cb2cbb0682ce.json | 1 + update-imported-docs/reference.yml | 2 +- update-imported-docs/release.yml | 2 +- 178 files changed, 9054 insertions(+), 2728 deletions(-) create mode 100644 content/en/docs/concepts/configuration/scheduler-perf-tuning.md create mode 100644 content/en/docs/concepts/containers/runtime-class.md create mode 100644 content/en/docs/concepts/storage/volume-snapshot-classes.md create mode 100644 content/en/docs/concepts/storage/volume-snapshots.md create mode 100644 content/en/docs/concepts/workloads/controllers/ttlafterfinished.md create mode 100644 content/en/docs/reference/glossary/quantity.md delete mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_all.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-peer.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-server.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_front-proxy-client.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_annotate-cri.md create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_experimental-control-plane.md create mode 100644 content/en/docs/reference/setup-tools/kubefed/kubefed_init.md create mode 100644 content/en/docs/reference/setup-tools/kubefed/kubefed_join.md create mode 100644 content/en/docs/reference/setup-tools/kubefed/kubefed_options.md create mode 100644 content/en/docs/reference/setup-tools/kubefed/kubefed_unjoin.md create mode 100644 content/en/docs/reference/setup-tools/kubefed/kubefed_version.md create mode 100644 content/en/docs/setup/cri.md create mode 100644 content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12.md delete mode 100644 content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8.md delete mode 100644 content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md delete mode 100644 resources/OWNERS create mode 100644 resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.content create mode 100644 resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.json create mode 100644 resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.content create mode 100644 resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.json diff --git a/config.toml b/config.toml index 932d918670..9a4e71fbef 100644 --- a/config.toml +++ b/config.toml @@ -63,10 +63,10 @@ time_format_blog = "Monday, January 02, 2006" description = "Production-Grade Container Orchestration" showedit = true -latest = "v1.11" +latest = "v1.12" -fullversion = "v1.11.0" -version = "v1.11" +fullversion = "v1.12.0" +version = "v1.12" githubbranch = "master" docsbranch = "master" deprecated = false @@ -76,10 +76,10 @@ githubWebsiteRepo = "github.com/kubernetes/website" githubWebsiteRaw = "raw.githubusercontent.com/kubernetes/website" [[params.versions]] -fullversion = "v1.11.0" -version = "v1.11" -githubbranch = "v1.11.0" -docsbranch = "release-1.11" +fullversion = "v1.12.0" +version = "v1.12" +githubbranch = "v1.12.0" +docsbranch = "release-1.12" url = "https://kubernetes.io" [params.pushAssets] @@ -93,6 +93,13 @@ js = [ "script" ] +[[params.versions]] +fullversion = "v1.11.3" +version = "v1.11" +githubbranch = "v1.11.3" +docsbranch = "release-1.11" +url = "https://v1-11.docs.kubernetes.io" + [[params.versions]] fullversion = "v1.10.3" version = "v1.10" @@ -114,12 +121,6 @@ githubbranch = "v1.8.4" docsbranch = "release-1.8" url = "https://v1-8.docs.kubernetes.io" -[[params.versions]] -fullversion = "v1.7.6" -version = "v1.7" -githubbranch = "v1.7.6" -docsbranch = "release-1.7" -url = "https://v1-7.docs.kubernetes.io" # Language definitions. diff --git a/content/en/docs/concepts/architecture/nodes.md b/content/en/docs/concepts/architecture/nodes.md index f5868cc2bf..222a21c020 100644 --- a/content/en/docs/concepts/architecture/nodes.md +++ b/content/en/docs/concepts/architecture/nodes.md @@ -76,11 +76,9 @@ the `Terminating` or `Unknown` state. In cases where Kubernetes cannot deduce fr permanently left a cluster, the cluster administrator may need to delete the node object by hand. Deleting the node object from Kubernetes causes all the Pod objects running on the node to be deleted from the apiserver, and frees up their names. -Version 1.8 introduced an alpha feature that automatically creates +In version 1.12, `TaintNodesByCondition` feature is promoted to beta,so node lifecycle controller automatically creates [taints](/docs/concepts/configuration/taint-and-toleration/) that represent conditions. -To enable this behavior, pass an additional feature gate flag `--feature-gates=...,TaintNodesByCondition=true` -to the API server, controller manager, and scheduler. -When `TaintNodesByCondition` is enabled, the scheduler ignores conditions when considering a Node; instead +Similarly the scheduler ignores conditions when considering a Node; instead it looks at the Node's taints and a Pod's tolerations. Now users can choose between the old scheduling model and a new, more flexible scheduling model. diff --git a/content/en/docs/concepts/cluster-administration/cloud-providers.md b/content/en/docs/concepts/cluster-administration/cloud-providers.md index 6bc4729e6a..f87b567ca3 100644 --- a/content/en/docs/concepts/cluster-administration/cloud-providers.md +++ b/content/en/docs/concepts/cluster-administration/cloud-providers.md @@ -9,7 +9,47 @@ This page explains how to manage Kubernetes running on a specific cloud provider. {{% /capture %}} +{{< toc >}} + {{% capture body %}} +### kubeadm +[kubeadm](/docs/reference/setup-tools/kubeadm/kubeadm/) is a popular option for creating kubernetes clusters. +kubeadm has configuration options to specify configuration information for cloud providers. For example a typical +in-tree cloud provider can be configured using kubeadm as shown below: + +```yaml +apiVersion: kubeadm.k8s.io/v1alpha3 +kind: InitConfiguration +nodeRegistration: + kubeletExtraArgs: + cloud-provider: "openstack" + cloud-config: "/etc/kubernetes/cloud.conf" +--- +kind: ClusterConfiguration +apiVersion: kubeadm.k8s.io/v1alpha3 +kubernetesVersion: v1.12.0 +apiServerExtraArgs: + cloud-provider: "openstack" + cloud-config: "/etc/kubernetes/cloud.conf" +apiServerExtraVolumes: +- name: cloud + hostPath: "/etc/kubernetes/cloud.conf" + mountPath: "/etc/kubernetes/cloud.conf" +controllerManagerExtraArgs: + cloud-provider: "openstack" + cloud-config: "/etc/kubernetes/cloud.conf" +controllerManagerExtraVolumes: +- name: cloud + hostPath: "/etc/kubernetes/cloud.conf" + mountPath: "/etc/kubernetes/cloud.conf" +``` + +The in-tree cloud providers typically need both `--cloud-provider` and `--cloud-config` specified in the command lines +for the [kube-apiserver](/docs/admin/kube-apiserver/), [kube-controller-manager](/docs/admin/kube-controller-manager/) and the +[kubelet](/docs/admin/kubelet/). The contents of the file specified in `--cloud-config` for each provider is documented below as well. + +For all external cloud providers, please follow the instructions on the individual repositories. + ## AWS This section describes all the possible configurations which can be used when running Kubernetes on Amazon Web Services. diff --git a/content/en/docs/concepts/cluster-administration/proxies.md b/content/en/docs/concepts/cluster-administration/proxies.md index 419e422da7..8e03334d12 100644 --- a/content/en/docs/concepts/cluster-administration/proxies.md +++ b/content/en/docs/concepts/cluster-administration/proxies.md @@ -36,7 +36,7 @@ There are several different proxies you may encounter when using Kubernetes: 1. The [kube proxy](/docs/concepts/services-networking/service/#ips-and-vips): - runs on each node - - proxies UDP and TCP + - proxies UDP, TCP and SCTP - does not understand HTTP - provides load balancing - is just used to reach services @@ -51,7 +51,8 @@ There are several different proxies you may encounter when using Kubernetes: - are provided by some cloud providers (e.g. AWS ELB, Google Cloud Load Balancer) - are created automatically when the Kubernetes service has type `LoadBalancer` - - use UDP/TCP only + - usually supports UDP/TCP only + - SCTP support is up to the load balancer implementation of the cloud provider - implementation varies by cloud provider. Kubernetes users will typically not need to worry about anything other than the first two types. The cluster admin diff --git a/content/en/docs/concepts/configuration/pod-priority-preemption.md b/content/en/docs/concepts/configuration/pod-priority-preemption.md index 689dfbe754..f94f42f84d 100644 --- a/content/en/docs/concepts/configuration/pod-priority-preemption.md +++ b/content/en/docs/concepts/configuration/pod-priority-preemption.md @@ -42,7 +42,7 @@ other pods to be evicted/not get scheduled. To resolve this issue, [ResourceQuota](https://kubernetes.io/docs/concepts/policy/resource-quotas/) is augmented to support Pod priority. An admin can create ResourceQuota for users at specific priority levels, preventing them from creating pods at high -priorities. However, this feature is in alpha as of Kubernetes 1.11. +priorities. This feature is in beta since Kubernetes 1.12. {{< /warning >}} {{% /capture %}} diff --git a/content/en/docs/concepts/configuration/scheduler-perf-tuning.md b/content/en/docs/concepts/configuration/scheduler-perf-tuning.md new file mode 100644 index 0000000000..f0dcfa47ed --- /dev/null +++ b/content/en/docs/concepts/configuration/scheduler-perf-tuning.md @@ -0,0 +1,112 @@ +--- +reviewers: +- bsalamat +title: Scheduler Performance Tuning +content_template: templates/concept +weight: 70 +--- + +{{% capture overview %}} + +{{< feature-state for_k8s_version="1.12" >}} + +Kube-scheduler is the Kubernetes default scheduler. It is responsible for +placement of Pods on Nodes in a cluster. Nodes in a cluster that meet the +scheduling requirements of a Pod are called "feasible" Nodes for the Pod. The +scheduler finds feasible Nodes for a Pod and then runs a set of functions to +score the feasible Nodes and picks a Node with the highest score among the +feasible ones to run the Pod. The scheduler then notifies the API server about this +decision in a process called "Binding". + +{{% /capture %}} + +{{% capture body %}} + +## Percentage of Nodes to Score + +Before Kubernetes 1.12, Kube-scheduler used to check the feasibility of all the +nodes in a cluster and then scored the feasible ones. Kubernetes 1.12 has a new +feature that allows the scheduler to stop looking for more feasible nodes once +it finds a certain number of them. This improves the scheduler's performance in +large clusters. The number is specified as a percentage of the cluster size and +is controlled by a configuration option called `percentageOfNodesToScore`. The +range should be between 1 and 100. Other values are considered as 100%. The +default value of this option is 50%. A cluster administrator can change this value by providing a +different value in the scheduler configuration. However, it may not be necessary to change this value. + +```yaml +apiVersion: componentconfig/v1alpha1 +kind: KubeSchedulerConfiguration +algorithmSource: + provider: DefaultProvider + +... + +percentageOfNodesToScore: 50 +``` + +{{< note >}} **Note**: In clusters with zero or less than 50 feasible nodes, the +scheduler still checks all the nodes, simply because there are not enough +feasible nodes to stop the scheduler's search early. {{< /note >}} + +**To disable this feature**, you can set `percentageOfNodesToScore` to 100. + +### Tuning percentageOfNodesToScore + +`percentageOfNodesToScore` must be a value between 1 and 100 +with the default value of 50. There is also a hardcoded minimum value of 50 +nodes which is applied internally. The scheduler tries to find at +least 50 nodes regardless of the value of `percentageOfNodesToScore`. This means +that changing this option to lower values in clusters with several hundred nodes +will not have much impact on the number of feasible nodes that the scheduler +tries to find. This is intentional as this option is unlikely to improve +performance noticeably in smaller clusters. In large clusters with over a 1000 +nodes setting this value to lower numbers may show a noticeable performance +improvement. + +An important note to consider when setting this value is that when a smaller +number of nodes in a cluster are checked for feasibility, some nodes are not +sent to be scored for a given Pod. As a result, a Node which could possibly +score a higher value for running the given Pod might not even be passed to the +scoring phase. This would result in a less than ideal placement of the Pod. For +this reason, the value should not be set to very low percentages. A general rule +of thumb is to never set the value to anything lower than 30. Lower values +should be used only when the scheduler's throughput is critical for your +application and the score of nodes is not important. In other words, you prefer +to run the Pod on any Node as long as it is feasible. + +It is not recommended to lower this value from its default if your cluster has +only several hundred Nodes. It is unlikely to improve the scheduler's +performance significantly. + +### How the scheduler iterates over Nodes + +This section is intended for those who want to understand the internal details +of this feature. + +In order to give all the Nodes in a cluster a fair chance of being considered +for running Pods, the scheduler iterates over the nodes in a round robin +fashion. You can imagine that Nodes are in an array. The scheduler starts from +the start of the array and checks feasibility of the nodes until it finds enough +Nodes as specified by `percentageOfNodesToScore`. For the next Pod, the +scheduler continues from the point in the Node array that it stopped at when checking +feasibility of Nodes for the previous Pod. + +If Nodes are in multiple zones, the scheduler iterates over Nodes in various +zones to ensure that Nodes from different zones are considered in the +feasibility checks. As an example, consider six nodes in two zones: + +``` +Zone 1: Node 1, Node 2, Node 3, Node 4 +Zone 2: Node 5, Node 6 +``` + +The Scheduler evaluates feasibility of the nodes in this order: + +``` +Node 1, Node 5, Node 2, Node 6, Node 3, Node 4 +``` + +After going over all the Nodes, it goes back to Node 1. + +{{% /capture %}} diff --git a/content/en/docs/concepts/configuration/secret.md b/content/en/docs/concepts/configuration/secret.md index 4be830729a..13a319fc71 100644 --- a/content/en/docs/concepts/configuration/secret.md +++ b/content/en/docs/concepts/configuration/secret.md @@ -343,9 +343,15 @@ files. When a secret being already consumed in a volume is updated, projected keys are eventually updated as well. Kubelet is checking whether the mounted secret is fresh on every periodic sync. -However, it is using its local ttl-based cache for getting the current value of the secret. -As a result, the total delay from the moment when the secret is updated to the moment when new keys are -projected to the pod can be as long as kubelet sync period + ttl of secrets cache in kubelet. +However, it is using its local cache for getting the current value of the Secret. +The type of the cache is configurable using the (`ConfigMapAndSecretChangeDetectionStrategy` field in +[KubeletConfiguration struct](https://github.com/kubernetes/kubernetes/blob/{{< param "docsbranch" >}}/pkg/kubelet/apis/kubeletconfig/v1beta1/types.go)). +It can be either propagated via watch (default), ttl-based, or simply redirecting +all requests to directly kube-apiserver. +As a result, the total delay from the moment when the Secret is updated to the moment +when new keys are projected to the Pod can be as long as kubelet sync period + cache +propagation delay, where cache propagation delay depends on the chosen cache type +(it equals to watch propagation delay, ttl of cache, or zero corespondingly). {{< note >}} **Note:** A container using a Secret as a diff --git a/content/en/docs/concepts/configuration/taint-and-toleration.md b/content/en/docs/concepts/configuration/taint-and-toleration.md index 9292ebcaae..ceab0e271a 100644 --- a/content/en/docs/concepts/configuration/taint-and-toleration.md +++ b/content/en/docs/concepts/configuration/taint-and-toleration.md @@ -279,9 +279,10 @@ which matches the behavior when this feature is disabled. ## Taint Nodes by Condition -Version 1.8 introduces an alpha feature that causes the node controller to create taints corresponding to -Node conditions. When this feature is enabled (you can do this by including `TaintNodesByCondition=true` in the `--feature-gates` command line flag to the scheduler, such as -`--feature-gates=FooBar=true,TaintNodesByCondition=true`), the scheduler does not check Node conditions; instead the scheduler checks taints. This assures that Node conditions don't affect what's scheduled onto the Node. The user can choose to ignore some of the Node's problems (represented as Node conditions) by adding appropriate Pod tolerations. +In version 1.12, `TaintNodesByCondition` feature is promoted to beta, so node lifecycle controller automatically creates taints corresponding to +Node conditions. +Similarly the scheduler does not check Node conditions; instead the scheduler checks taints. This assures that Node conditions don't affect what's scheduled onto the Node. The user can choose to ignore some of the Node's problems (represented as Node conditions) by adding appropriate Pod tolerations. +Note that `TaintNodesByCondition` only taints nodes with `NoSchedule` effect. `NoExecute` effect is controlled by `TaintBasedEviction` which is an alpha feature and disabled by default. Starting in Kubernetes 1.8, the DaemonSet controller automatically adds the following `NoSchedule` tolerations to all daemons, to prevent DaemonSets from diff --git a/content/en/docs/concepts/containers/images.md b/content/en/docs/concepts/containers/images.md index dd2c40c067..045529d5b8 100644 --- a/content/en/docs/concepts/containers/images.md +++ b/content/en/docs/concepts/containers/images.md @@ -32,6 +32,26 @@ you can do one of the following: Note that you should avoid using `:latest` tag, see [Best Practices for Configuration](/docs/concepts/configuration/overview/#container-images) for more information. +## Building Multi-architecture Images with Manifests + +Docker CLI now supports the following command `docker manifest` with sub commands like `create`, `annotate` and `push`. These commands can be used to build and push the manifests. You can use `docker manifest inspect` to view the manifest. + +Please see docker documentation here: +https://docs.docker.com/edge/engine/reference/commandline/manifest/ + +See examples on how we use this in our build harness: +https://cs.k8s.io/?q=docker%20manifest%20(create%7Cpush%7Cannotate)&i=nope&files=&repos= + +These commands rely on and are implemented purely on the Docker CLI. You will need to either edit the `$HOME/.docker/config.json` and set `experimental` key to `enabled` or you can just set `DOCKER_CLI_EXPERIMENTAL` environment variable to `enabled` when you call the CLI commands. + +{{< note >}} +**Note:** Please use Docker *18.06 or above*, versions below that either have bugs or do not support the experimental command line option. Example https://github.com/docker/cli/issues/1135 causes problems under containerd. +{{< /note >}} + +If you run into trouble with uploading stale manifests, just clean up the older manifests in `$HOME/.docker/manifests` to start fresh. + +For Kubernetes, we have typically used images with suffix `-$(ARCH)`. For backward compatability, please generate the older images with suffixes. The idea is to generate say `pause` image which has the manifest for all the arch(es) and say `pause-amd64` which is backwards compatible for older configurations or YAML files which may have hard coded the images with suffixes. + ## Using a Private Registry Private registries may require keys to read images from them. diff --git a/content/en/docs/concepts/containers/runtime-class.md b/content/en/docs/concepts/containers/runtime-class.md new file mode 100644 index 0000000000..eef2a4f006 --- /dev/null +++ b/content/en/docs/concepts/containers/runtime-class.md @@ -0,0 +1,122 @@ +--- +reviewers: +- tallclair +- dchen1107 +title: Runtime Class +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +This page describes the RuntimeClass resource and runtime selection mechanism. + +{{% /capture %}} + +{{< toc >}} + +{{% capture body %}} + +## Runtime Class + +RuntimeClass is an alpha feature for selecting the container runtime configuration to use to run a +pod's containers. + +### Set Up + +As an early alpha feature, there are some additional setup steps that must be taken in order to use +the RuntimeClass feature: + +1. Enable the RuntimeClass feature gate (on apiservers & kubelets, requires version 1.12+) +2. Install the RuntimeClass CRD +3. Configure the CRI implementation on nodes (runtime dependent) +4. Create the corresponding RuntimeClass resources + +#### 1. Enable the RuntimeClass feature gate + +See [Feature Gates](/docs/reference/command-line-tools-reference/feature-gates/) for an explanation +of enabling feature gates. The `RuntimeClass` feature gate must be enabled on apiservers _and_ +kubelets. + +#### 2. Install the RuntimeClass CRD + +The RuntimeClass [CustomResourceDefinition][/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/] (CRD) can be found in the addons directory of the +Kubernetes git repo: + +https://github.com/kubernetes/kubernetes/tree/release-1.12/cluster/addons/runtimeclass/runtimeclass_crd.yaml + +Install the CRD with `kubectl apply -f runtimeclass_crd.yaml`. + +[CustomResourceDefinition][/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/] + +#### 3. Configure the CRI implementation on nodes + +The configurations to select between with RuntimeClass are CRI implementation dependent. See the +corresponding documentation for your CRI implementation for how to configure. As this is an alpha +feature, not all CRIs support multiple RuntimeClasses yet. + +{{< note >}} +**Note:** RuntimeClass currently assumes a homogeneous node configuration across the cluster +(which means that all nodes are configured the same way with respect to container runtimes). Any heterogeneity (varying configurations) must be +managed independently of RuntimeClass through scheduling features (see [Assigning Pods to +Nodes](/docs/concepts/configuration/assign-pod-node/)). +{{< /note >}} + +The configurations have a corresponding `RuntimeHandler` name, referenced by the RuntimeClass. The +RuntimeHandler must be a valid DNS 1123 subdomain (alpha-numeric + `-` and `.` characters). + +#### 4. Create the corresponding RuntimeClass resources + +The configurations setup in step 3 should each have an associated `RuntimeHandler` name, which +identifies the configuration. For each RuntimeHandler (and optionally the empty `""` handler), +create a corresponding RuntimeClass object. + +The RuntimeClass resource currently only has 2 significant fields: the RuntimeClass name +(`metadata.name`) and the RuntimeHandler (`spec.runtimeHandler`). The object definition looks like this: + +```yaml +apiVersion: node.k8s.io/v1alpha1 # RuntimeClass is defined in the node.k8s.io API group +kind: RuntimeClass +metadata: + name: myclass # The name the RuntimeClass will be referenced by + # RuntimeClass is a non-namespaced resource +spec: + runtimeHandler: myconfiguration # The name of the correpsonding CRI configuration +``` + + +{{< note >}} + +**Note:** It is recommended that RuntimeClass write operations (create/update/patch/delete) be +restricted to the cluster administrator. This is typically the default. See [Authorization +Overview](https://kubernetes.io/docs/reference/access-authn-authz/authorization/) for more details. + +{{< /note >}} + +### Usage + +Once RuntimeClasses are configured for the cluster, using them is very simple. Specify a +`runtimeClassName` in the Pod spec. For example: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: mypod +spec: + runtimeClassName: myclass + # ... +``` + +This will instruct the Kubelet to use the named RuntimeClass to run this pod. If the named +RuntimeClass does not exist, or the CRI cannot run the corresponding handler, the pod will enter the +`Failed` terminal [phase](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase). Look for a +corresponding [event](/docs/tasks/debug-application-cluster/debug-application-introspection/) for an +error message. + +If no `runtimeClassName` is specified, the default RuntimeHandler will be used, which is equivalent +to the behavior when the RuntimeClass feature is disabled. + +{{% /capture %}} diff --git a/content/en/docs/concepts/policy/pod-security-policy.md b/content/en/docs/concepts/policy/pod-security-policy.md index 432d7c1662..8570ea99a3 100644 --- a/content/en/docs/concepts/policy/pod-security-policy.md +++ b/content/en/docs/concepts/policy/pod-security-policy.md @@ -42,6 +42,7 @@ administrator to control the following: | Restricting escalation to root privileges | [`allowPrivilegeEscalation`, `defaultAllowPrivilegeEscalation`](#privilege-escalation) | | Linux capabilities | [`defaultAddCapabilities`, `requiredDropCapabilities`, `allowedCapabilities`](#capabilities) | | The SELinux context of the container | [`seLinux`](#selinux) | +| The Allowed Proc Mount types for the container | [`allowedProcMountTypes`](#allowedProcMountTypes) | | The AppArmor profile used by containers | [annotations](#apparmor) | | The seccomp profile used by containers | [annotations](#seccomp) | | The sysctl profile used by containers | [annotations](#sysctl) | @@ -421,6 +422,9 @@ The **recommended minimum set** of allowed volumes for new PSPs are: - *MustRunAs* - Requires at least one `range` to be specified. Uses the minimum value of the first range as the default. Validates against all ranges. +- *MayRunAs* - Requires at least one `range` to be specified. Allows +`FSGroups` to be left unset without providing a default. Validates against +all ranges if `FSGroups` is set. - *RunAsAny* - No default provided. Allows any `fsGroup` ID to be specified. **AllowedHostPaths** - This specifies a whitelist of host paths that are allowed @@ -487,10 +491,24 @@ image. No default provided. Setting `allowPrivilegeEscalation=false` is strongly recommended with this strategy. - *RunAsAny* - No default provided. Allows any `runAsUser` to be specified. +**RunAsGroup** - Controls the what primary group ID containers run as. + +- *MustRunAs* - Requires at least one `range` to be specified. Uses the +minimum value of the first range as the default. Validates against all ranges. +- *MustRunAsNonRoot* - Requires that the pod be submitted with a non-zero +`runAsUser` or have the `USER` directive defined (using a numeric GID) in the +image. No default provided. Setting `allowPrivilegeEscalation=false` is strongly +recommended with this strategy. +- *RunAsAny* - No default provided. Allows any `runAsGroup` to be specified. + + **SupplementalGroups** - Controls which group IDs containers add. - *MustRunAs* - Requires at least one `range` to be specified. Uses the minimum value of the first range as the default. Validates against all ranges. +- *MayRunAs* - Requires at least one `range` to be specified. Allows +`supplementalGroups` to be left unset without providing a default. +Validates against all ranges if `supplementalGroups` is set. - *RunAsAny* - No default provided. Allows any `supplementalGroups` to be specified. @@ -548,6 +566,21 @@ for the default list of capabilities when using the Docker runtime. - *RunAsAny* - No default provided. Allows any `seLinuxOptions` to be specified. +### AllowedProcMountTypes + +`allowedProcMountTypes` is a whitelist of allowed ProcMountTypes. +Empty or nil indicates that only the `DefaultProcMountType` may be used. + +`DefaultProcMount` uses the container runtime defaults for readonly and masked +paths for /proc. Most container runtimes mask certain paths in /proc to avoid +accidental security exposure of special devices or information. This is denoted +as the string `Default`. + +The only other ProcMountType is `UnmaskedProcMount`, which bypasses the +default masking behavior of the container runtime and ensures the newly +created /proc the container stays in tact with no modifications. This is +denoted as the string `Unmasked`. + ### AppArmor Controlled via annotations on the PodSecurityPolicy. Refer to the [AppArmor diff --git a/content/en/docs/concepts/policy/resource-quotas.md b/content/en/docs/concepts/policy/resource-quotas.md index e4ad1274b0..55c9a68800 100644 --- a/content/en/docs/concepts/policy/resource-quotas.md +++ b/content/en/docs/concepts/policy/resource-quotas.md @@ -194,7 +194,7 @@ The `Terminating`, `NotTerminating`, and `NotBestEffort` scopes restrict a quota ### Resource Quota Per PriorityClass -{{< feature-state for_k8s_version="1.11" state="alpha" >}} +{{< feature-state for_k8s_version="1.12" state="beta" >}} Pods can be created at a specific [priority](/docs/concepts/configuration/pod-priority-preemption/#pod-priority). You can control a pod's consumption of system resources based on a pod's priority, by using the `scopeSelector` @@ -548,7 +548,7 @@ kind: AdmissionConfiguration plugins: - name: "ResourceQuota" configuration: - apiVersion: resourcequota.admission.k8s.io/v1alpha1 + apiVersion: resourcequota.admission.k8s.io/v1beta1 kind: Configuration limitedResources: - resource: pods @@ -568,10 +568,6 @@ For example: values: ["cluster-services"] ``` -{{< note >}} -**Note:** `scopeSelector` is an alpha field and feature gate `ResourceQuotaScopeSelectors` must be enabled before using it. -{{< /note >}} - See [LimitedResources](https://github.com/kubernetes/kubernetes/pull/36765) and [Quota supoport for priority class design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/pod-priority-resourcequota.md) for more information. ## Example diff --git a/content/en/docs/concepts/services-networking/network-policies.md b/content/en/docs/concepts/services-networking/network-policies.md index 89ff50f6d6..45f68088c5 100644 --- a/content/en/docs/concepts/services-networking/network-policies.md +++ b/content/en/docs/concepts/services-networking/network-policies.md @@ -246,6 +246,15 @@ spec: This ensures that even pods that aren't selected by any other NetworkPolicy will not be allowed ingress or egress traffic. +## SCTP support + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +Kubernetes supports SCTP as a `protocol` value in `NetworkPolicy` definitions as an alpha feature. To enable this feature, the cluster administrator needs to enable the `SCTPSupport` feature gate on the apiserver, for example, `“--feature-gates=SCTPSupport=true,...”`. When the feature gate is enabled, users can set the `protocol` field of a `NetworkPolicy` to `SCTP`. Kubernetes sets up the network accordingly for the SCTP associations, just like it does for TCP connections. + +The CNI plugin has to support SCTP as `protocol` value in `NetworkPolicy`. + + {{% /capture %}} {{% capture whatsnext %}} diff --git a/content/en/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md index a361ccbac9..ce529a53bf 100644 --- a/content/en/docs/concepts/services-networking/service.md +++ b/content/en/docs/concepts/services-networking/service.md @@ -84,9 +84,13 @@ deploying and evolving your `Services`. For example, you can change the port number that pods expose in the next version of your backend software, without breaking clients. -Kubernetes `Services` support `TCP` and `UDP` for protocols. The default +Kubernetes `Services` support `TCP`, `UDP` and `SCTP` for protocols. The default is `TCP`. +{{< note >}} +**Note:** SCTP support is an alpha feature since Kubernetes 1.12 +{{< /note >}} + ### Services without selectors Services generally abstract access to Kubernetes `Pods`, but they can also @@ -459,6 +463,12 @@ cloud provider does not support the feature, the field will be ignored. public IP address resource needs to be created first, and it should be in the same resource group of the other automatically created resources of the cluster. For example, `MC_myResourceGroup_myAKSCluster_eastus`. Specify the assigned IP address as loadBalancerIP. Ensure that you have updated the securityGroupName in the cloud provider configuration file. For information about troubleshooting `CreatingLoadBalancerFailed` permission issues see, [Use a static IP address with the Azure Kubernetes Service (AKS) load balancer](https://docs.microsoft.com/en-us/azure/aks/static-ip) or [CreatingLoadBalancerFailed on AKS cluster with advanced networking](https://github.com/Azure/AKS/issues/357). +{{< note >}} +**Note:** The support of SCTP in the cloud provider's load balancer is up to the cloud provider's +load balancer implementation. If SCTP is not supported by the cloud provider's load balancer the +Service creation request is accepted but the creation of the load balancer fails. +{{< /note >}} + #### Internal load balancer In a mixed environment it is sometimes necessary to route traffic from services inside the same VPC. @@ -922,6 +932,32 @@ Service is a top-level resource in the Kubernetes REST API. More details about t API object can be found at: [Service API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#service-v1-core). +## SCTP support + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +Kubernetes supports SCTP as a `protocol` value in `Service`, `Endpoint`, `NetworkPolicy` and `Pod` definitions as an alpha feature. To enable this feature, the cluster administrator needs to enable the `SCTPSupport` feature gate on the apiserver, for example, `“--feature-gates=SCTPSupport=true,...”`. When the feature gate is enabled, users can set the `protocol` field of a `Service`, `Endpoint`, `NetworkPolicy` and `Pod` to `SCTP`. Kubernetes sets up the network accordingly for the SCTP associations, just like it does for TCP connections. + +### Warnings + +#### The support of multihomed SCTP associations + +The support of multihomed SCTP associations requires that the CNI plugin can support the assignment of multiple interfaces and IP addresses to a `Pod`. + +NAT for multihomed SCTP assoications requires special logic in the corresponding kernel modules. + +#### Service with type=LoadBalancer + +A `Service` with `type` LoadBalancer and `protocol` SCTP can be created only if the cloud provider's load balancer implementation supports SCTP as a protocol. Otherwise the `Service` creation request is rejected. The current set of cloud load balancer providers (`Azure`, `AWS`, `CloudStack`, `GCE`, `OpenStack`) do not support SCTP. + +#### Windows + +SCTP is not supported on Windows based nodes. + +#### Userspace kube-proxy + +The kube-proxy does not support the management of SCTP associations when it is in userspace mode. + {{% /capture %}} {{% capture whatsnext %}} diff --git a/content/en/docs/concepts/storage/dynamic-provisioning.md b/content/en/docs/concepts/storage/dynamic-provisioning.md index ee8c0777d8..cb180fb706 100644 --- a/content/en/docs/concepts/storage/dynamic-provisioning.md +++ b/content/en/docs/concepts/storage/dynamic-provisioning.md @@ -124,6 +124,13 @@ Note that there can be at most one *default* storage class on a cluster, or a `PersistentVolumeClaim` without `storageClassName` explicitly specified cannot be created. +## Topology Awareness + +In [Multi-Zone](/docs/setup/multiple-zones) clusters, Pods can be spread across +Zones in a Region. Single-Zone storage backends should be provisioned in the Zones where +Pods are scheduled. This can be accomplished by setting the [Volume Binding +Mode](/docs/concepts/storage/storage-classes/#volume-binding-mode). + {{% /capture %}} diff --git a/content/en/docs/concepts/storage/persistent-volumes.md b/content/en/docs/concepts/storage/persistent-volumes.md index ec3f87bead..688a142f66 100644 --- a/content/en/docs/concepts/storage/persistent-volumes.md +++ b/content/en/docs/concepts/storage/persistent-volumes.md @@ -631,6 +631,34 @@ Volume binding matrix for statically provisioned volumes: **Note:** Only statically provisioned volumes are supported for alpha release. Administrators should take care to consider these values when working with raw block devices. {{< /note >}} +## Volume Snapshot and Restore Volume from Snapshot Support + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +Volume snapshot feature was added to support CSI Volume Plugins only. For details, see [volume snapshots](/docs/concepts/storage/volume-snapshots/). + +To enable support for restoring a volume from a volume snapshot data source, enable the +`VolumeSnapshotDataSource` feature gate on the apiserver and controller-manager. + +### Create Persistent Volume Claim from Volume Snapshot +```yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: restore-pvc +spec: + storageClassName: csi-hostpath-sc + dataSource: + name: new-snapshot-test + kind: VolumeSnapshot + apiGroup: snapshot.storage.k8s.io + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +``` + ## Writing Portable Configuration If you're writing configuration templates or examples that run on a wide range of clusters diff --git a/content/en/docs/concepts/storage/storage-classes.md b/content/en/docs/concepts/storage/storage-classes.md index ce189c3c51..0cd7d0afbc 100644 --- a/content/en/docs/concepts/storage/storage-classes.md +++ b/content/en/docs/concepts/storage/storage-classes.md @@ -55,6 +55,7 @@ parameters: reclaimPolicy: Retain mountOptions: - debug +volumeBindingMode: Immediate ``` ### Provisioner @@ -64,7 +65,7 @@ for provisioning PVs. This field must be specified. | Volume Plugin | Internal Provisioner| Config Example | | :--- | :---: | :---: | -| AWSElasticBlockStore | ✓ | [AWS](#aws) | +| AWSElasticBlockStore | ✓ | [AWS EBS](#aws-ebs) | | AzureFile | ✓ | [Azure File](#azure-file) | | AzureDisk | ✓ | [Azure Disk](#azure-disk) | | CephFS | - | - | @@ -72,7 +73,7 @@ for provisioning PVs. This field must be specified. | FC | - | - | | Flexvolume | - | - | | Flocker | ✓ | - | -| GCEPersistentDisk | ✓ | [GCE](#gce) | +| GCEPersistentDisk | ✓ | [GCE PD](#gce-pd) | | Glusterfs | ✓ | [Glusterfs](#glusterfs) | | iSCSI | - | - | | Quobyte | ✓ | [Quobyte](#quobyte) | @@ -118,6 +119,74 @@ If the volume plugin does not support mount options but mount options are specified, provisioning will fail. Mount options are not validated on either the class or PV, so mount of the PV will simply fail if one is invalid. +### Volume Binding Mode + +{{< feature-state for_k8s_version="v1.12" state="beta" >}} + +**Note:** This feature requires the `VolumeScheduling` feature gate to be +enabled. + +The `volumeBindingMode` field controls when [volume binding and dynamic +provisioning](/docs/concepts/storage/persistent-volumes/#provisioning) should occur. + +By default, the `Immediate` mode indicates that volume binding and dynamic +provisioning occurs once the PersistentVolumeClaim is created. For storage +backends that are topology-constrained and not globally accessible from all Nodes +in the cluster, PersistentVolumes will be bound or provisioned without knowledge of the Pod's scheduling +requirements. This may result in unschedulable Pods. + +A cluster administrator can address this issue by specifying the `WaitForFirstConsumer` mode which +will delay the binding and provisioning of a PersistentVolume until a Pod using the PersistentVolumeClaim is created. +PersistentVolumes will be selected or provisioned conforming to the topology that is +specified by the Pod's scheduling constraints. These include, but are not limited to, [resource +requirements](/docs/concepts/configuration/manage-compute-resources-container), +[node selectors](/docs/concepts/configuration/assign-pod-node/#nodeselector), +[pod affinity and +anti-affinity](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity), +and [taints and tolerations](/docs/concepts/configuration/taint-and-toleration). + +The following plugins support `WaitForFirstConsumer` with dynamic provisioning: + +* [AWSElasticBlockStore](#aws-ebs) +* [GCEPersistentDisk](#gce-pd) +* [AzureDisk](#azure-disk) + +The following plugins support `WaitForFirstConsumer` with pre-created PersistentVolume binding: + +* All of the above +* [Local](#local) + +### Allowed Topologies +{{< feature-state for_k8s_version="v1.12" state="beta" >}} + +**Note:** This feature requires the `VolumeScheduling` feature gate to be +enabled. + +When a cluster operactor specifies the `WaitForFirstConsumer` volume binding mode, it is no longer necessary +to restrict provisioning to specific topologies in most situations. However, +if still required, `allowedTopologies` can be specified. + +This example demonstrates how to restrict the topology of provisioned volumes to specific +zones and should be used as a replacement for the `zone` and `zones` parameters for the +supported plugins. + +```yaml +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: standard +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard +volumeBindingMode: WaitForFirstConsumer +allowedTopologies: +- matchLabelExpressions: + - key: failure-domain.beta.kubernetes.io/zone + values: + - us-central1-a + - us-central1-b +``` + ## Parameters Storage classes have parameters that describe volumes belonging to the storage @@ -126,7 +195,7 @@ class. Different parameters may be accepted depending on the `provisioner`. For `iopsPerGB` are specific to EBS. When a parameter is omitted, some default is used. -### AWS +### AWS EBS ```yaml kind: StorageClass @@ -136,7 +205,6 @@ metadata: provisioner: kubernetes.io/aws-ebs parameters: type: io1 - zones: us-east-1d, us-east-1c iopsPerGB: "10" fsType: ext4 ``` @@ -144,10 +212,10 @@ parameters: * `type`: `io1`, `gp2`, `sc1`, `st1`. See [AWS docs](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) for details. Default: `gp2`. -* `zone`: AWS zone. If neither `zone` nor `zones` is specified, volumes are +* `zone` (Deprecated): AWS zone. If neither `zone` nor `zones` is specified, volumes are generally round-robin-ed across all active zones where Kubernetes cluster has a node. `zone` and `zones` parameters must not be used at the same time. -* `zones`: A comma separated list of AWS zone(s). If neither `zone` nor `zones` +* `zones` (Deprecated): A comma separated list of AWS zone(s). If neither `zone` nor `zones` is specified, volumes are generally round-robin-ed across all active zones where Kubernetes cluster has a node. `zone` and `zones` parameters must not be used at the same time. @@ -164,7 +232,10 @@ parameters: encrypting the volume. If none is supplied but `encrypted` is true, a key is generated by AWS. See AWS docs for valid ARN value. -### GCE +**Note:** `zone` and `zones` parameters are deprecated and replaced with +[allowedTopologies](#allowed-topologies) + +### GCE PD ```yaml kind: StorageClass @@ -174,15 +245,14 @@ metadata: provisioner: kubernetes.io/gce-pd parameters: type: pd-standard - zones: us-central1-a, us-central1-b replication-type: none ``` * `type`: `pd-standard` or `pd-ssd`. Default: `pd-standard` -* `zone`: GCE zone. If neither `zone` nor `zones` is specified, volumes are +* `zone` (Deprecated): GCE zone. If neither `zone` nor `zones` is specified, volumes are generally round-robin-ed across all active zones where Kubernetes cluster has a node. `zone` and `zones` parameters must not be used at the same time. -* `zones`: A comma separated list of GCE zone(s). If neither `zone` nor `zones` +* `zones` (Deprecated): A comma separated list of GCE zone(s). If neither `zone` nor `zones` is specified, volumes are generally round-robin-ed across all active zones where Kubernetes cluster has a node. `zone` and `zones` parameters must not be used at the same time. @@ -199,6 +269,9 @@ specified, Kubernetes will arbitrarily choose among the specified zones. If the `zones` parameter is omitted, Kubernetes will arbitrarily choose among zones managed by the cluster. +**Note:** `zone` and `zones` parameters are deprecated and replaced with +[allowedTopologies](#allowed-topologies) + ### Glusterfs ```yaml diff --git a/content/en/docs/concepts/storage/storage-limits.md b/content/en/docs/concepts/storage/storage-limits.md index d291c6eca2..b01d54e89d 100644 --- a/content/en/docs/concepts/storage/storage-limits.md +++ b/content/en/docs/concepts/storage/storage-limits.md @@ -11,11 +11,11 @@ content_template: templates/concept {{% capture overview %}} This page describes the maximum number of volumes that can be attached -to a node for various cloud providers. +to a Node for various cloud providers. Cloud providers like Google, Amazon, and Microsoft typically have a limit on -how many volumes can be attached to a node. It is important for Kubernetes to -respect those limits. Otherwise, Pods scheduled on a node could get stuck +how many volumes can be attached to a Node. It is important for Kubernetes to +respect those limits. Otherwise, Pods scheduled on a Node could get stuck waiting for volumes to attach. {{% /capture %}} @@ -25,10 +25,10 @@ waiting for volumes to attach. ## Kubernetes default limits The Kubernetes scheduler has default limits on the number of volumes -that can be attached to a node: +that can be attached to a Node: - + @@ -40,28 +40,28 @@ You can change these limits by setting the value of the `KUBE_MAX_PD_VOLS` environment variable, and then starting the scheduler. Use caution if you set a limit that is higher than the default limit. Consult -the cloud provider's documentation to make sure that nodes can actually support +the cloud provider's documentation to make sure that Nodes can actually support the limit you set. -The limit applies to the entire cluster, so it affects all nodes. +The limit applies to the entire cluster, so it affects all Nodes. ## Dynamic volume limits -{{< feature-state state="alpha" for_k8s_version="v1.11" >}} +{{< feature-state state="beta" for_k8s_version="v1.12" >}} -Kubernetes 1.11 introduces dynamic volume limits based on node type. This -is an alpha feature that supports these services: +Kubernetes 1.11 introduced support for dynamic volume limits based on Node type as an Alpha feature. +In Kubernetes 1.12 this feature is graduating to Beta and will be enabled by default. + +Dynamic volume limits is supported for following volume types. - Amazon EBS - Google Persistent Disk - Azure Disk +- CSI -To enable dynamic volume limits, set the `AttachVolumeLimit` -[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) -to True. When the dynamic volume limits feature is enabled, Kubernetes automatically -determines the node type and supports the appropriate number of attachable +determines the Node type and enforces the appropriate number of attachable volumes for the node. For example: * On @@ -69,11 +69,14 @@ volumes for the node. For example: up to 128 volumes can be attached to a node, [depending on the node type](https://cloud.google.com/compute/docs/disks/#pdnumberlimits). -* For Amazon EBS disks on M5/C5 instance types, Kubernetes allows only 25 -volumes to be attached to a node. For other instance types on +* For Amazon EBS disks on M5,C5,R5,T3 and Z1D instance types, Kubernetes allows only 25 +volumes to be attached to a Node. For other instance types on Amazon Elastic Compute Cloud (EC2), -Kubernetes allows 39 volumes to be attached to a node. +Kubernetes allows 39 volumes to be attached to a Node. * On Azure, up to 64 disks can be attached to a node, depending on the node type. For more details, refer to [Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes). +* For CSI, any driver that advertises volume attach limits via CSI specs will have those limits available as the Node's allocatable property + and the Scheduler will not schedule Pods with volumes on any Node that is already at its capacity. Refer to the [CSI specs](https://github.com/container-storage-interface/spec/blob/master/spec.md#nodegetinfo) for more details. + {{% /capture %}} diff --git a/content/en/docs/concepts/storage/volume-snapshot-classes.md b/content/en/docs/concepts/storage/volume-snapshot-classes.md new file mode 100644 index 0000000000..5ad05107eb --- /dev/null +++ b/content/en/docs/concepts/storage/volume-snapshot-classes.md @@ -0,0 +1,64 @@ +--- +reviewers: +- jsafrane +- saad-ali +- thockin +- msau42 +title: Volume Snapshot Classes +content_template: templates/concept +weight: 30 +--- + +{{% capture overview %}} + +This document describes the concept of `VolumeSnapshotClass` in Kubernetes. Familiarity +with [volume snapshots](/docs/concepts/storage/volume-snapshots/) and +[storage classes](/docs/concepts/storage/storage-classes) is suggested. + +{{% /capture %}} + +{{< toc >}} + +{{% capture body %}} + +## Introduction + +Just like `StorageClass` provides a way for administrators to describe the "classes" +of storage they offer when provisioning a volume, `VolumeSnapshotClass` provides a +way to describe the "classes" of storage when provisioning a volume snapshot. + +## The VolumeSnapshotClass Resource + +Each `VolumeSnapshotClass` contains the fields `snapshotter` and `parameters`, +which are used when a `VolumeSnapshot` belonging to the class needs to be +dynamically provisioned. + +The name of a `VolumeSnapshotClass` object is significant, and is how users can +request a particular class. Administrators set the name and other parameters +of a class when first creating `VolumeSnapshotClass` objects, and the objects cannot +be updated once they are created. + +Administrators can specify a default `VolumeSnapshotClass` just for VolumeSnapshots +that don't request any particular class to bind to. + +```yaml +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotClass +metadata: + name: csi-hostpath-snapclass +snapshotter: csi-hostpath +parameters: +``` + +### Snapshotter + +Volume snapshot classes have a snapshotter that determines what CSI volume plugin is +used for provisioning VolumeSnapshots. This field must be specified. + +## Parameters + +Volume snapshot classes have parameters that describe volume snapshots belonging to +the volume snapshot class. Different parameters may be accepted depending on the +`snapshotter`. + +{{% /capture %}} diff --git a/content/en/docs/concepts/storage/volume-snapshots.md b/content/en/docs/concepts/storage/volume-snapshots.md new file mode 100644 index 0000000000..73647b7825 --- /dev/null +++ b/content/en/docs/concepts/storage/volume-snapshots.md @@ -0,0 +1,127 @@ +--- +reviewers: +- jsafrane +- saad-ali +- thockin +- msau42 +title: Volume Snapshots +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +This document describes the current state of `VolumeSnapshots` in Kubernetes. Familiarity with [persistent volumes](/docs/concepts/storage/persistent-volumes/) is suggested. + +{{% /capture %}} + +{{< toc >}} + +{{% capture body %}} + +## Introduction + +Similar to how API resources `PersistentVolume` and `PersistentVolumeClaim` are used to provision volumes for users and administrators, `VolumeSnapshotContent` and `VolumeSnapshot` API resources are provided to create volume snapshots for users and administrators. + +A `VolumeSnapshotContent` is a snapshot taken from a volume in the cluster that has been provisioned by an administrator. It is a resource in the cluster just like a PersistentVolume is a cluster resource. + +A `VolumeSnapshot` is a request for snapshot of a volume by a user. It is similar to a PersistentVolumeClaim. + +While `VolumeSnapshots` allow a user to consume abstract storage resources, cluster administrators +need to be able to offer a variety of `VolumeSnapshotContents` without exposing +users to the details of how those volume snapshots should be provisioned. For these needs +there is the `VolumeSnapshotClass` resource. + +Users need to be aware of the following when using this feature: + +* API Objects `VolumeSnapshot`, `VolumeSnapshotContent`, and `VolumeSnapshotClass` are CRDs, not part of the core API. +* `VolumeSnapshot` support is only available for CSI drivers. +* As part of the deployment process, the Kubernetes team provides a sidecar helper container for the snapshot controller called `external-snapshotter`. It watches `VolumeSnapshot` objects and triggers `CreateSnapshot` and `DeleteSnapshot` operations against a CSI endpoint. +* CSI drivers may or may not have implemented the volume snapshot functionality. The CSI drivers that have provided support for volume snapshot will likely use `external-snapshotter`. +* The CSI drivers that support volume snapshot will automatically install CRDs defined for the volume snapshots. + +## Lifecycle of a volume snapshot and volume snapshot content + +`VolumeSnapshotContents` are resources in the cluster. `VolumeSnapshots` are requests for those resources. The interaction between `VolumeSnapshotContents` and `VolumeSnapshots` follow this lifecycle: + +### Provisioning Volume Snapshot + +There are two ways snapshots may be provisioned: statically or dynamically. + +#### Static +A cluster administrator creates a number of `VolumeSnapshotContents`. They carry the details of the real storage which is available for use by cluster users. They exist in the Kubernetes API and are available for consumption. + +#### Dynamic +When none of the static `VolumeSnapshotContents` the administrator created matches a user's `VolumeSnapshot`, +the cluster may try to dynamically provision a volume snapshot specially for the `VolumeSnapshot` object. +This provisioning is based on `VolumeSnapshotClasses`: the `VolumeSnapshot` must request a +[volume snapshot class](/docs/concepts/storage/volume-snapshot-classes/) and +the administrator must have created and configured that class in order for dynamic +provisioning to occur. + +### Binding + +A user creates, or has already created in the case of dynamic provisioning, a `VolumeSnapshot` with a specific amount of storage requested and with certain access modes. A control loop watches for new VolumeSnapshots, finds a matching VolumeSnapshotContent (if possible), and binds them together. If a VolumeSnapshotContent was dynamically provisioned for a new VolumeSnapshot, the loop will always bind that VolumeSnapshotContent to the VolumeSnapshot. Once bound, `VolumeSnapshot` binds are exclusive, regardless of how they were bound. A VolumeSnapshot to VolumeSnapshotContent binding is a one-to-one mapping. + +VolumeSnapshots will remain unbound indefinitely if a matching VolumeSnapshotContent does not exist. VolumeSnapshots will be bound as matching VolumeSnapshotContents become available. + +### Delete + +Deletion removes both the `VolumeSnapshotContent` object from the Kubernetes API, as well as the associated storage asset in the external infrastructure. + +## Volume Snapshot Contents + +Each VolumeSnapshotContent contains a spec, which is the specification of the volume snapshot. + +```yaml +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotContent +metadata: + name: new-snapshot-content-test +spec: + snapshotClassName: csi-hostpath-snapclass + source: + name: pvc-test + kind: PersistentVolumeClaim + volumeSnapshotSource: + csiVolumeSnapshotSource: + creationTime: 1535478900692119403 + driver: csi-hostpath + restoreSize: 10Gi + snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002 +``` + +### Class + +A VolumeSnapshotContent can have a class, which is specified by setting the +`snapshotClassName` attribute to the name of a +[VolumeSnapshotClass](/docs/concepts/storage/volume-snapshot-classes/). +A VolumeSnapshotContent of a particular class can only be bound to VolumeSnapshots requesting +that class. A VolumeSnapshotContent with no `snapshotClassName` has no class and can only be bound +to VolumeSnapshots that request no particular class. + +## VolumeSnapshots + +Each VolumeSnapshot contains a spec and a status, which is the specification and status of the volume snapshot. + +```yaml +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshot +metadata: + name: new-snapshot-test +spec: + snapshotClassName: csi-hostpath-snapclass + source: + name: pvc-test + kind: PersistentVolumeClaim +``` + +### Class + +A volume snapshot can request a particular class by specifying the name of a +[VolumeSnapshotClass](/docs/concepts/storage/volume-snapshot-classes/) +using the attribute `snapshotClassName`. +Only VolumeSnapshotContents of the requested class, ones with the same `snapshotClassName` +as the VolumeSnapshot, can be bound to the VolumeSnapshot. + +{{% /capture %}} diff --git a/content/en/docs/concepts/storage/volumes.md b/content/en/docs/concepts/storage/volumes.md index 327ba55a1e..5ad6ec22c2 100644 --- a/content/en/docs/concepts/storage/volumes.md +++ b/content/en/docs/concepts/storage/volumes.md @@ -656,7 +656,8 @@ All sources are required to be in the same namespace as the Pod. For more detail see the [all-in-one volume design document](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/node/all-in-one-volume.md). The projection of service account tokens is a feature introduced in Kubernetes -1.11. To enable this feature, you need to explicitly set the `TokenRequestProjection` +1.11 and promoted to Beta in 1.12. +To enable this feature on 1.11, you need to explicitly set the `TokenRequestProjection` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) to True. @@ -1236,16 +1237,9 @@ More details can be found [here](https://github.com/kubernetes/community/blob/ma ## Mount propagation -{{< feature-state for_k8s_version="v1.10" state="beta" >}} - Mount propagation allows for sharing volumes mounted by a Container to other Containers in the same Pod, or even to other Pods on the same node. -If the "`MountPropagation`" feature is disabled or a Pod does not explicitly -specify specific mount propagation, volume mounts in the Pod's Containers are -not propagated. That is, Containers run with `private` mount propagation as -described in the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). - Mount propagation of a volume is controlled by `mountPropagation` field in Container.volumeMounts. Its values are: diff --git a/content/en/docs/concepts/workloads/controllers/daemonset.md b/content/en/docs/concepts/workloads/controllers/daemonset.md index 422a03e847..92a995b042 100644 --- a/content/en/docs/concepts/workloads/controllers/daemonset.md +++ b/content/en/docs/concepts/workloads/controllers/daemonset.md @@ -103,7 +103,7 @@ If you do not specify either, then the DaemonSet controller will create Pods on ## How Daemon Pods are Scheduled -### Scheduled by DaemonSet controller (default) +### Scheduled by DaemonSet controller (disabled by default since 1.12) Normally, the machine that a Pod runs on is selected by the Kubernetes scheduler. However, Pods created by the DaemonSet controller have the machine already selected (`.spec.nodeName` is specified @@ -115,9 +115,9 @@ when the Pod is created, so it is ignored by the scheduler). Therefore: bootstrap. -### Scheduled by default scheduler +### Scheduled by default scheduler (enabled by default since 1.12) -{{< feature-state state="alpha" for-kubernetes-version="1.11" >}} +{{< feature-state state="beta" for-kubernetes-version="1.12" >}} A DaemonSet ensures that all eligible nodes run a copy of a Pod. Normally, the node that a Pod runs on is selected by the Kubernetes scheduler. However, @@ -151,14 +151,8 @@ nodeAffinity: ``` In addition, `node.kubernetes.io/unschedulable:NoSchedule` toleration is added -automatically to DaemonSet Pods. The DaemonSet controller ignores -`unschedulable` Nodes when scheduling DaemonSet Pods. You must enable -`TaintNodesByCondition` to ensure that the default scheduler behaves the same -way and schedules DaemonSet pods on `unschedulable` nodes. - -When this feature and `TaintNodesByCondition` are enabled together, if DaemonSet -uses the host network, you must also add the -`node.kubernetes.io/network-unavailable:NoSchedule toleration`. +automatically to DaemonSet Pods. The default scheduler ignores +`unschedulable` Nodes when scheduling DaemonSet Pods. ### Taints and Tolerations @@ -170,13 +164,12 @@ the related features. | Toleration Key | Effect | Alpha Features | Version | Description | | ---------------------------------------- | ---------- | ------------------------------------------------------------ | ------- | ------------------------------------------------------------ | -| `node.kubernetes.io/not-ready` | NoExecute | `TaintBasedEvictions` | 1.8+ | when `TaintBasedEvictions` is enabled,they will not be evicted when there are node problems such as a network partition. | -| `node.kubernetes.io/unreachable` | NoExecute | `TaintBasedEvictions` | 1.8+ | when `TaintBasedEvictions` is enabled,they will not be evicted when there are node problems such as a network partition. | -| `node.kubernetes.io/disk-pressure` | NoSchedule | `TaintNodesByCondition` | 1.8+ | | -| `node.kubernetes.io/memory-pressure` | NoSchedule | `TaintNodesByCondition` | 1.8+ | | -| `node.kubernetes.io/unschedulable` | NoSchedule | `ScheduleDaemonSetPods`, `TaintNodesByCondition` | 1.11+ | When ` ScheduleDaemonSetPods` is enabled, ` TaintNodesByCondition` is necessary to make sure DaemonSet pods tolerate unschedulable attributes by default scheduler. | -| `node.kubernetes.io/network-unavailable` | NoSchedule | `ScheduleDaemonSetPods`, `TaintNodesByCondition`, hostnework | 1.11+ | When ` ScheduleDaemonSetPods` is enabled, ` TaintNodesByCondition` is necessary to make sure DaemonSet pods, who uses host network, tolerate network-unavailable attributes by default scheduler. | -| `node.kubernetes.io/out-of-disk` | NoSchedule | `ExperimentalCriticalPodAnnotation` (critical pod only), `TaintNodesByCondition` | 1.8+ | | +| `node.kubernetes.io/not-ready` | NoExecute | `TaintBasedEvictions` | 1.8+ | When `TaintBasedEvictions` is enabled, they will not be evicted when there are node problems such as a network partition. | +| `node.kubernetes.io/unreachable` | NoExecute | `TaintBasedEvictions` | 1.8+ | When `TaintBasedEvictions` is enabled, they will not be evicted when there are node problems such as a network partition. | +| `node.kubernetes.io/disk-pressure` | NoSchedule | | 1.8+ | | +| `node.kubernetes.io/memory-pressure` | NoSchedule | | 1.8+ | | +| `node.kubernetes.io/unschedulable` | NoSchedule | | 1.12+ | DaemonSet pods tolerate unschedulable attributes by default scheduler. | +| `node.kubernetes.io/network-unavailable` | NoSchedule | | 1.12+ | DaemonSet pods, who uses host network, tolerate network-unavailable attributes by default scheduler. | diff --git a/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md b/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md index fabfbcc435..9e6ec9f9c9 100644 --- a/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md +++ b/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md @@ -251,6 +251,59 @@ spec: Note that both the Job Spec and the [Pod Template Spec](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#detailed-behavior) within the Job have an `activeDeadlineSeconds` field. Ensure that you set this field at the proper level. +## Clean Up Finished Jobs Automatically + +Finished Jobs are usually no longer needed in the system. Keeping them around in +the system will put pressure on the API server. If the Jobs are managed directly +by a higher level controller, such as +[CronJobs](/docs/concepts/workloads/controllers/cron-jobs/), the Jobs can be +cleaned up by CronJobs based on the specified capacity-based cleanup policy. + +### TTL Mechanism for Finished Jobs + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +Another way to clean up finished Jobs (either `Complete` or `Failed`) +automatically is to use a TTL mechanism provided by a +[TTL controller](/docs/concepts/workloads/controllers/ttlafterfinished/) for +finished resources, by specifying the `.spec.ttlSecondsAfterFinished` field of +the Job. + +When the TTL controller cleans up the Job, it will delete the Job cascadingly, +i.e. delete its dependent objects, such as Pods, together with the Job. Note +that when the Job is deleted, its lifecycle guarantees, such as finalizers, will +be honored. + +For example: + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: pi-with-ttl +spec: +spec: + ttlSecondsAfterFinished: 100 + template: + spec: + containers: + - name: pi + image: perl + command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] + restartPolicy: Never +``` + +The Job `pi-with-ttl` will be eligible to be automatically deleted, `100` +seconds after it finishes. + +If the field is set to `0`, the Job will be eligible to be automatically deleted +immediately after it finishes. If the field is unset, this Job won't be cleaned +up by the TTL controller after it finishes. + +Note that this TTL mechanism is alpha, with feature gate `TTLAfterFinished`. For +more information, see the documentation for +[TTL controller](/docs/concepts/workloads/controllers/ttlafterfinished/) for +finished resources. ## Job Patterns diff --git a/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md b/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md new file mode 100644 index 0000000000..1f8e355ff8 --- /dev/null +++ b/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md @@ -0,0 +1,90 @@ +--- +reviewers: +- janetkuo +title: TTL Controller for Finished Resources +content_template: templates/concept +weight: 65 +--- + +{{% capture overview %}} + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +The TTL controller provides a TTL mechanism to limit the lifetime of resource +objects that have finished execution. TTL controller only handles +[Jobs](/docs/concepts/workloads/controllers/jobs-run-to-completion/) for +now, and may be expanded to handle other resources that will finish execution, +such as Pods and custom resources. + +Alpha Disclaimer: this feature is currently alpha, and can be enabled with +[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) +`TTLAfterFinished`. + + +{{% /capture %}} + + +{{< toc >}} + + +{{% capture body %}} + +## TTL Controller + +The TTL controller only supports Jobs for now. A cluster operator can use this feature to clean +up finished Jobs (either `Complete` or `Failed`) automatically by specifying the +`.spec.ttlSecondsAfterFinished` field of a Job, as in this +[example](/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically). +The TTL controller will assume that a resource is eligible to be cleaned up +TTL seconds after the resource has finished, in other words, when the TTL has expired. When the +TTL controller cleans up a resource, it will delete it cascadingly, i.e. delete +its dependent objects together with it. Note that when the resource is deleted, +its lifecycle guarantees, such as finalizers, will be honored. + +The TTL seconds can be set at any time. Here are some examples for setting the +`.spec.ttlSecondsAfterFinished` field of a Job: + +* Specify this field in the resource manifest, so that a Job can be cleaned up + automatically some time after it finishes. +* Set this field of existing, already finished resources, to adopt this new + feature. +* Use a + [mutating admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) + to set this field dynamically at resource creation time. Cluster administrators can + use this to enforce a TTL policy for finished resources. +* Use a + [mutating admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) + to set this field dynamically after the resource has finished, and choose + different TTL values based on resource status, labels, etc. + +## Caveat + +### Updating TTL Seconds + +Note that the TTL period, e.g. `.spec.ttlSecondsAfterFinished` field of Jobs, +can be modified after the resource is created or has finished. However, once the +Job becomes eligible to be deleted (when the TTL has expired), the system won't +guarantee that the Jobs will be kept, even if an update to extend the TTL +returns a successful API response. + +### Time Skew + +Because TTL controller uses timestamps stored in the Kubernetes resources to +determine whether the TTL has expired or not, this feature is sensitive to time +skew in the cluster, which may cause TTL controller to clean up resource objects +at the wrong time. + +In Kubernetes, it's required to run NTP on all nodes +(see [#6159](https://github.com/kubernetes/kubernetes/issues/6159#issuecomment-93844058)) +to avoid time skew. Clocks aren't always correct, but the difference should be +very small. Please be aware of this risk when setting a non-zero TTL. + +{{% /capture %}} + +{{% capture whatsnext %}} + +[Clean up Jobs automatically](/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically) + +[Design doc](https://github.com/kubernetes/community/blob/master/keps/sig-apps/0026-ttl-after-finish.md) + +{{% /capture %}} diff --git a/content/en/docs/concepts/workloads/pods/pod-lifecycle.md b/content/en/docs/concepts/workloads/pods/pod-lifecycle.md index ff2e841a52..2b559bd6a2 100644 --- a/content/en/docs/concepts/workloads/pods/pod-lifecycle.md +++ b/content/en/docs/concepts/workloads/pods/pod-lifecycle.md @@ -157,7 +157,7 @@ Note that the information reported as Pod status depends on the current ## Pod readiness gate -{{< feature-state for_k8s_version="v1.11" state="alpha" >}} +{{< feature-state for_k8s_version="v1.12" state="beta" >}} In order to add extensibility to Pod readiness by enabling the injection of extra feedbacks or signals into `PodStatus`, Kubernetes 1.11 introduced a @@ -203,9 +203,11 @@ when both the following statements are true: To facilitate this change to Pod readiness evaluation, a new Pod condition `ContainersReady` is introduced to capture the old Pod `Ready` condition. -As an alpha feature, the "Pod Ready++" feature has to be explicitly enabled by +In K8s 1.11, as an alpha feature, the "Pod Ready++" feature has to be explicitly enabled by setting the `PodReadinessGates` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) -to True. +to true. + +In K8s 1.12, the feature is enabled by default. ## Restart policy diff --git a/content/en/docs/reference/access-authn-authz/rbac.md b/content/en/docs/reference/access-authn-authz/rbac.md index 94648a8564..bf009af587 100644 --- a/content/en/docs/reference/access-authn-authz/rbac.md +++ b/content/en/docs/reference/access-authn-authz/rbac.md @@ -672,13 +672,19 @@ These roles include: The RBAC API prevents users from escalating privileges by editing roles or role bindings. Because this is enforced at the API level, it applies even when the RBAC authorizer is not in use. -A user can only create/update a role if they already have all the permissions contained in the role, -at the same scope as the role (cluster-wide for a `ClusterRole`, within the same namespace or cluster-wide for a `Role`). +A user can only create/update a role if at least one of the following things is true: + +1. they already have all the permissions contained in the role, at the same scope as the object being modified +(cluster-wide for a `ClusterRole`, within the same namespace or cluster-wide for a `Role`) +2. they are given explicit permission to perform the `escalate` verb on the `roles` or `clusterroles` resource in the `rbac.authorization.k8s.io` API group (Kubernetes 1.12 and newer) + For example, if "user-1" does not have the ability to list secrets cluster-wide, they cannot create a `ClusterRole` containing that permission. To allow a user to create/update roles: 1. Grant them a role that allows them to create/update `Role` or `ClusterRole` objects, as desired. -2. Grant them roles containing the permissions you would want them to be able to set in a `Role` or `ClusterRole`. If they attempt to create or modify a `Role` or `ClusterRole` with permissions they themselves have not been granted, the API request will be forbidden. +2. Grant them permission to include specific permissions in the roles the create/update: + * implicitly, by giving them those permissions (if they attempt to create or modify a `Role` or `ClusterRole` with permissions they themselves have not been granted, the API request will be forbidden) + * or explicitly allow specifying any permission in a `Role` or `ClusterRole` by giving them permission to perform the `escalate` verb on `roles` or `clusterroles` resources in the `rbac.authorization.k8s.io` API group (Kubernetes 1.12 and newer) A user can only create/update a role binding if they already have all the permissions contained in the referenced role (at the same scope as the role binding) *or* if they've been given explicit permission to perform the `bind` verb on the referenced role. diff --git a/content/en/docs/reference/command-line-tools-reference/cloud-controller-manager.md b/content/en/docs/reference/command-line-tools-reference/cloud-controller-manager.md index fd7e36d823..4ddb32c0db 100644 --- a/content/en/docs/reference/command-line-tools-reference/cloud-controller-manager.md +++ b/content/en/docs/reference/command-line-tools-reference/cloud-controller-manager.md @@ -5,6 +5,7 @@ notitle: true ## cloud-controller-manager + ### Synopsis @@ -24,13 +25,6 @@ cloud-controller-manager [flags] - - - - - - - @@ -38,6 +32,55 @@ cloud-controller-manager [flags] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -66,6 +109,13 @@ cloud-controller-manager [flags] + + + + + + + @@ -122,11 +172,18 @@ cloud-controller-manager [flags] + + + + + + + - + @@ -241,13 +298,6 @@ cloud-controller-manager [flags] - - - - - - - @@ -255,6 +305,41 @@ cloud-controller-manager [flags] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -263,10 +348,10 @@ cloud-controller-manager [flags] - + - + diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates.md b/content/en/docs/reference/command-line-tools-reference/feature-gates.md index 6c229f7538..ec632df097 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates.md @@ -29,10 +29,11 @@ different Kubernetes components. |---------|---------|-------|-------|-------| | `Accelerators` | `false` | Alpha | 1.6 | 1.10 | | `AdvancedAuditing` | `false` | Alpha | 1.7 | 1.7 | -| `AdvancedAuditing` | `true` | Beta | 1.8 | | +| `AdvancedAuditing` | `true` | Beta | 1.8 | 1.11 | +| `AdvancedAuditing` | `true` | GA | 1.12 | - | | `AffinityInAnnotations` | `false` | Alpha | 1.6 | 1.7 | | `AllowExtTrafficLocalEndpoints` | `false` | Beta | 1.4 | 1.6 | -| `AllowExtTrafficLocalEndpoints` | `true` | GA | 1.7 | | +| `AllowExtTrafficLocalEndpoints` | `true` | GA | 1.7 | - | | `APIListChunking` | `false` | Alpha | 1.8 | 1.8 | | `APIListChunking` | `true` | Beta | 1.9 | | | `APIResponseCompression` | `false` | Alpha | 1.7 | | @@ -56,7 +57,7 @@ different Kubernetes components. | `DevicePlugins` | `true` | Beta | 1.10 | | | `DynamicKubeletConfig` | `false` | Alpha | 1.4 | 1.10 | | `DynamicKubeletConfig` | `true` | Beta | 1.11 | | -| `DynamicProvisioningScheduling` | `false` | Alpha | 1.11 | | +| `DynamicProvisioningScheduling` | `false` | Alpha | 1.11 | 1.11 | | `DynamicVolumeProvisioning` | `true` | Alpha | 1.3 | 1.7 | | `DynamicVolumeProvisioning` | `true` | GA | 1.8 | | | `EnableEquivalenceClassCache` | `false` | Alpha | 1.8 | | @@ -71,23 +72,29 @@ different Kubernetes components. | `HyperVContainer` | `false` | Alpha | 1.10 | | | `Initializers` | `false` | Alpha | 1.7 | | | `KubeletConfigFile` | `false` | Alpha | 1.8 | 1.9 | -| `KubeletPluginsWatcher` | `false` | Alpha | 1.11 | | +| `KubeletPluginsWatcher` | `false` | Alpha | 1.11 | 1.11 | +| `KubeletPluginsWatcher` | `true` | Beta | 1.12 | | | `LocalStorageCapacityIsolation` | `false` | Alpha | 1.7 | 1.9 | | `LocalStorageCapacityIsolation` | `true` | Beta| 1.10 | | | `MountContainers` | `false` | Alpha | 1.9 | | | `MountPropagation` | `false` | Alpha | 1.8 | 1.9 | -| `MountPropagation` | `true` | Beta | 1.10 | | +| `MountPropagation` | `true` | Beta | 1.10 | 1.11 | +| `MountPropagation` | `true` | GA | 1.12 | | | `PersistentLocalVolumes` | `false` | Alpha | 1.7 | 1.9 | | `PersistentLocalVolumes` | `true` | Beta | 1.10 | | | `PodPriority` | `false` | Alpha | 1.8 | | | `PodReadinessGates` | `false` | Alpha | 1.11 | | +| `PodReadinessGates` | `true` | Beta | 1.12 | | | `PodShareProcessNamespace` | `false` | Alpha | 1.10 | | +| `PodShareProcessNamespace` | `true` | Beta | 1.12 | | | `PVCProtection` | `false` | Alpha | 1.9 | 1.9 | | `ReadOnlyAPIDataVolumes` | `true` | Deprecated | 1.10 | | | `ResourceLimitsPriorityFunction` | `false` | Alpha | 1.9 | | | `RotateKubeletClientCertificate` | `true` | Beta | 1.7 | | | `RotateKubeletServerCertificate` | `false` | Alpha | 1.7 | | | `RunAsGroup` | `false` | Alpha | 1.10 | | +| `RuntimeClass` | `false` | Alpha | 1.12 | | +| `SCTPSupport` | `false` | Alpha | 1.12 | | | `ServiceNodeExclusion` | `false` | Alpha | 1.8 | | | `StorageObjectInUseProtection` | `true` | Beta | 1.10 | 1.10 | | `StorageObjectInUseProtection` | `true` | GA | 1.11 | | @@ -100,12 +107,16 @@ different Kubernetes components. | `Sysctls` | `true` | Beta | 1.11 | | | `TaintBasedEvictions` | `false` | Alpha | 1.6 | | | `TaintNodesByCondition` | `false` | Alpha | 1.8 | | -| `TokenRequest` | `false` | Alpha | 1.10 | | -| `TokenRequestProjection` | `false` | Alpha | 1.11 | | +| `TaintNodesByCondition` | `true` | Beta | 1.12 | | +| `TokenRequest` | `false` | Alpha | 1.10 | 1.11 | +| `TokenRequest` | `True` | Beta | 1.12 | | +| `TokenRequestProjection` | `false` | Alpha | 1.11 | 1.11 | +| `TokenRequestProjection` | `True` | Beta | 1.12 | | +| `TTLAfterFinished` | `false` | Alpha | 1.12 | | | `VolumeScheduling` | `false` | Alpha | 1.9 | 1.9 | | `VolumeScheduling` | `true` | Beta | 1.10 | | | `VolumeSubpathEnvExpansion` | `false` | Alpha | 1.11 | | -| `ScheduleDaemonSetPods` | `false` | Alpha | 1.11 | | +| `ScheduleDaemonSetPods` | `true` | Beta | 1.12 | | ## Using a Feature @@ -183,6 +194,7 @@ Each feature gate is designed for enabling/disabling a specific feature: based resource provisioning on nodes. - `DynamicKubeletConfig`: Enable the dynamic configuration of kubelet. See [Reconfigure kubelet](/docs/tasks/administer-cluster/reconfigure-kubelet/). - `DynamicProvisioningScheduling`: Extend the default scheduler to be aware of volume topology and handle PV provisioning. + This feature is superceded by the `VolumeScheduling` feature completely in v1.12. - `DynamicVolumeProvisioning`(*deprecated*): Enable the [dynamic provisioning](/docs/concepts/storage/dynamic-provisioning/) of persistent volumes to Pods. - `EnableEquivalenceClassCache`: Enable the scheduler to cache equivalence of nodes when scheduling Pods. - `ExpandInUsePersistentVolumes`: Enable expanding in-use PVCs. See [Resizing an in-use PersistentVolumeClaim](/docs/concepts/storage/persistent-volumes/#resizing-an-in-use-persistentvolumeclaim). @@ -227,7 +239,9 @@ Each feature gate is designed for enabling/disabling a specific feature: - `RotateKubeletServerCertificate`: Enable the rotation of the server TLS certificate on the kubelet. See [kubelet configuration](/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#kubelet-configuration) for more details. - `RunAsGroup`: Enable control over the primary group ID set on the init processes of containers. +- `RuntimeClass`: Enable the [RuntimeClass](/docs/concepts/containers/runtime-class/) feature for selecting container runtime configurations. - `ScheduleDaemonSetPods`: Enable DaemonSet Pods to be scheduled by the default scheduler instead of the DaemonSet controller. +- `SCTPSupport`: Enables the usage of SCTP as `protocol` value in `Service`, `Endpoint`, `NetworkPolicy` and `Pod` definitions - `ServiceNodeExclusion`: Enable the exclusion of nodes from load balancers created by a cloud provider. A node is eligible for exclusion if annotated with "`alpha.service-controller.kubernetes.io/exclude-balancer`" key. - `StorageObjectInUseProtection`: Postpone the deletion of PersistentVolume or @@ -246,6 +260,7 @@ Each feature gate is designed for enabling/disabling a specific feature: - `TokenRequest`: Enable the `TokenRequest` endpoint on service account resources. - `TokenRequestProjection`: Enable the injection of service account tokens into a Pod through the [`projected` volume](/docs/concepts/storage/volumes/#projected). +- `TTLAfterFinished`: Allow a [TTL controller](/docs/concepts/workloads/controllers/ttlafterfinished/) to clean up resources after they finish execution. - `VolumeScheduling`: Enable volume topology aware scheduling and make the PersistentVolumeClaim (PVC) binding aware of scheduling decisions. It also enables the usage of [`local`](/docs/concepts/storage/volumes/#local) volume diff --git a/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md b/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md index e7e420381e..09a672d78e 100644 --- a/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md +++ b/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md @@ -1,8 +1,3 @@ ---- -title: federation-apiserver -notitle: true -weight: 100 ---- ## federation-apiserver @@ -150,4 +145,4 @@ VolumeScheduling=true|false (ALPHA - default=false) --watch-cache-sizes strings List of watch cache sizes for every resource (pods, nodes, etc.), comma separated. The individual override format: resource[.group]#size, where resource is lowercase plural (no version), group is optional, and size is a number. It takes effect when watch-cache is enabled. Some resources (replicationcontrollers, endpoints, nodes, pods, services, apiservices.apiregistration.k8s.io) have system defaults set by heuristics, others default to default-watch-cache-size ``` -###### Auto generated by spf13/cobra on 25-Mar-2018 +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md b/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md index f3d841a1c8..a6527d97f6 100644 --- a/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md +++ b/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md @@ -1,8 +1,3 @@ ---- -title: federation-controller-manager -notitle: true -weight: 110 ---- ## federation-controller-manager @@ -56,4 +51,4 @@ federation-controller-manager [flags] --zone-name string Zone name, like example.com. ``` -###### Auto generated by spf13/cobra on 25-Mar-2018 +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md b/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md index da2e787ffc..0bc8a51723 100644 --- a/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md +++ b/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md @@ -70,21 +70,21 @@ kube-apiserver [flags] - + - + - + @@ -98,7 +98,7 @@ kube-apiserver [flags] - + @@ -108,7 +108,7 @@ kube-apiserver [flags] - + @@ -164,7 +164,7 @@ kube-apiserver [flags] - + @@ -178,7 +178,7 @@ kube-apiserver [flags] - + @@ -227,7 +227,7 @@ kube-apiserver [flags] - + @@ -262,7 +262,7 @@ kube-apiserver [flags] - + @@ -409,21 +409,21 @@ kube-apiserver [flags] - + - + - + @@ -542,7 +542,7 @@ kube-apiserver [flags] - + @@ -759,7 +759,7 @@ kube-apiserver [flags] - + @@ -794,7 +794,7 @@ kube-apiserver [flags] - + @@ -825,6 +825,13 @@ kube-apiserver [flags] + + + + + + + @@ -860,13 +867,6 @@ kube-apiserver [flags] - - - - - - - diff --git a/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md b/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md index be3aa7a122..55d4404c6c 100644 --- a/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md +++ b/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md @@ -31,13 +31,6 @@ kube-controller-manager [flags] - - - - - - - @@ -52,6 +45,55 @@ kube-controller-manager [flags] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -80,6 +122,13 @@ kube-controller-manager [flags] + + + + + + + @@ -178,6 +227,13 @@ kube-controller-manager [flags] + + + + + + + @@ -210,7 +266,7 @@ kube-controller-manager [flags] - + @@ -273,7 +329,7 @@ kube-controller-manager [flags] - + @@ -291,14 +347,28 @@ kube-controller-manager [flags] - + - + - + + + + + + + + + + + + + + + @@ -311,20 +381,6 @@ kube-controller-manager [flags] - - - - - - - - - - - - - - @@ -479,13 +535,6 @@ kube-controller-manager [flags] - - - - - - - @@ -542,6 +591,41 @@ kube-controller-manager [flags] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -571,10 +655,17 @@ kube-controller-manager [flags] - + - + + + + + + + + diff --git a/content/en/docs/reference/command-line-tools-reference/kube-proxy.md b/content/en/docs/reference/command-line-tools-reference/kube-proxy.md index 848eaf3994..802edd5169 100644 --- a/content/en/docs/reference/command-line-tools-reference/kube-proxy.md +++ b/content/en/docs/reference/command-line-tools-reference/kube-proxy.md @@ -11,7 +11,7 @@ notitle: true The Kubernetes network proxy runs on each node. This reflects services as defined in the Kubernetes API on each node and can do simple -TCP and UDP stream forwarding or round robin TCP and UDP forwarding across a set of backends. +TCP, UDP, and SCTP stream forwarding or round robin TCP, UDP, and SCTP forwarding across a set of backends. Service cluster IPs and ports are currently found through Docker-links-compatible environment variables specifying ports opened by the service proxy. There is an optional addon that provides cluster DNS for these cluster IPs. The user must create a service @@ -111,7 +111,7 @@ kube-proxy [flags] - + diff --git a/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md b/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md index 382ba3784b..fc52d55775 100644 --- a/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md +++ b/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md @@ -69,7 +69,7 @@ kube-scheduler [flags] - + diff --git a/content/en/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping.md b/content/en/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping.md index a2a84d9ffc..192cf963d2 100644 --- a/content/en/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping.md +++ b/content/en/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping.md @@ -1,17 +1,20 @@ --- reviewers: -- ericchiang - mikedanese -- jcbsmpsn +- liggitt +- smarterclayton +- awly title: TLS bootstrapping content_template: templates/concept --- {{% capture overview %}} -This document describes how to set up TLS client certificate bootstrapping for kubelets. -Kubernetes 1.4 introduced an API for requesting certificates from a cluster-level Certificate Authority (CA). The original intent of this API is to enable provisioning of TLS client certificates for kubelets. The proposal can be found [here](https://github.com/kubernetes/kubernetes/pull/20439) -and progress on the feature is being tracked as [feature #43](https://github.com/kubernetes/features/issues/43). +This document describes how to set up TLS client certificate bootstrapping for +kubelets. Kubernetes 1.4 introduced an API for requesting certificates from a +cluster-level Certificate Authority (CA). The original intent of this API is to +enable provisioning of TLS client certificates for kubelets. The proposal can be +found [here](https://github.com/kubernetes/kubernetes/pull/20439). {{% /capture %}} @@ -19,53 +22,76 @@ and progress on the feature is being tracked as [feature #43](https://github.com ## kube-apiserver configuration -The API server should be configured with an [authenticator](/docs/reference/access-authn-authz/authentication/) that can authenticate tokens as a user in the `system:bootstrappers` group. +The API server should be configured with an +[authenticator](/docs/reference/access-authn-authz/authentication/) that can +authenticate tokens as a user in the `system:bootstrappers` group. -This group will later be used in the controller-manager configuration to scope approvals in the default approval -controller. As this feature matures, you should ensure tokens are bound to a Role-Based Access Control (RBAC) policy which limits requests -(using the bootstrap token) strictly to client requests related to certificate provisioning. With RBAC in place, scoping the tokens to a group allows for great flexibility (e.g. you could disable a particular bootstrap group's access when you are done provisioning the nodes). +This group will later be used in the controller-manager configuration to scope +approvals in the default approval controller. As this feature matures, you +should ensure tokens are bound to a Role Based Access Control (RBAC) policy +which limits requests (using the [bootstrap +token](/docs/reference/access-authn-authz/bootstrap-tokens/)) strictly to client +requests related to certificate provisioning. With RBAC in place, scoping the +tokens to a group allows for great flexibility (e.g. you could disable a +particular bootstrap group's access when you are done provisioning the nodes). -While any authentication strategy can be used for the kubelet's initial bootstrap credentials, the following two authenticators are recommended for ease of provisioning. +While any authentication strategy can be used for the kubelet's initial +bootstrap credentials, the following two authenticators are recommended for ease +of provisioning. 1. [Bootstrap Tokens](/docs/reference/access-authn-authz/bootstrap-tokens/) - __beta__ 2. [Token authentication file](#token-authentication-file) -Using bootstrap tokens is currently __beta__ and will simplify the management of bootstrap token management especially in a HA scenario. +Using bootstrap tokens is currently __beta__ and will simplify the management of +bootstrap token management especially in a HA scenario. ### Token authentication file -Tokens are arbitrary but should represent at least 128 bits of entropy derived from a secure random number -generator (such as /dev/urandom on most modern systems). There are multiple ways you can generate a token. For example: + +Tokens are arbitrary but should represent at least 128 bits of entropy derived +from a secure random number generator (such as /dev/urandom on most modern Linux +systems). There are multiple ways you can generate a token. For example: ``` head -c 16 /dev/urandom | od -An -t x | tr -d ' ' ``` -will generate tokens that look like `02b50b05283e98dd0fd71db496ef01e8` +will generate tokens that look like `02b50b05283e98dd0fd71db496ef01e8`. -The token file should look like the following example, where the first three values can be anything and the quoted group -name should be as depicted: +The token file should look like the following example, where the first three +values can be anything and the quoted group name should be as depicted: ``` 02b50b05283e98dd0fd71db496ef01e8,kubelet-bootstrap,10001,"system:bootstrappers" ``` -Add the `--token-auth-file=FILENAME` flag to the kube-apiserver command (in your systemd unit file perhaps) to enable the token file. -See docs [here](/docs/reference/access-authn-authz/authentication/#static-token-file) for further details. +Add the `--token-auth-file=FILENAME` flag to the kube-apiserver command (in your +systemd unit file perhaps) to enable the token file. See docs +[here](/docs/reference/access-authn-authz/authentication/#static-token-file) for +further details. ### Client certificate CA bundle -Add the `--client-ca-file=FILENAME` flag to the kube-apiserver command to enable client certificate authentication, -referencing a certificate authority bundle containing the signing certificate (e.g. `--client-ca-file=/var/lib/kubernetes/ca.pem`). +Add the `--client-ca-file=FILENAME` flag to the kube-apiserver command to enable +client certificate authentication, referencing a certificate authority bundle +containing the signing certificate (e.g. +`--client-ca-file=/var/lib/kubernetes/ca.pem`). ## kube-controller-manager configuration -The API for requesting certificates adds a certificate-issuing control loop to the Kubernetes Controller Manager. This takes the form of a -[cfssl](https://blog.cloudflare.com/introducing-cfssl/) local signer using assets on disk. Currently, all certificates issued have one year validity and a default set of key usages. + +The API for requesting certificates adds a certificate-issuing control loop to +the Kubernetes Controller Manager. This takes the form of a +[cfssl](https://blog.cloudflare.com/introducing-cfssl/) local signer using +assets on disk. Currently, all certificates issued have one year validity and a +default set of key usages. ### Signing assets -You must provide a Certificate Authority in order to provide the cryptographic materials necessary to issue certificates. -This CA should be trusted by kube-apiserver for authentication with the `--client-ca-file=FILENAME` flag. The management -of the CA is beyond the scope of this document but it is recommended that you generate a dedicated CA for Kubernetes. -Both certificate and key are assumed to be PEM-encoded. + +You must provide a Certificate Authority in order to provide the cryptographic +materials necessary to issue certificates. This CA should be trusted by +kube-apiserver for authentication with the `--client-ca-file=FILENAME` flag. The +management of the CA is beyond the scope of this document but it is recommended +that you generate a dedicated CA for Kubernetes. Both certificate and key are +assumed to be PEM-encoded. The kube-controller-manager flags are: @@ -73,31 +99,31 @@ The kube-controller-manager flags are: --cluster-signing-cert-file="/etc/path/to/kubernetes/ca/ca.crt" --cluster-signing-key-file="/etc/path/to/kubernetes/ca/ca.key" ``` -### Approval controller +The validity duration of signed certificates can be configured with flag: -In 1.7 the experimental "group auto approver" controller is dropped in favor of the new `csrapproving` controller -that ships as part of [kube-controller-manager](/docs/admin/kube-controller-manager/) and is enabled by default. -The controller uses the [`SubjectAccessReview` API](/docs/reference/access-authn-authz/authorization/#checking-api-access) to determine -if a given user is authorized to request a CSR, then approves based on the authorization outcome. To prevent -conflicts with other approvers, the builtin approver doesn't explicitly deny CSRs, only ignoring unauthorized requests. +``` +--experimental-cluster-signing-duration +``` + +### SubjectAccessReview Approval Controller + +The `csrapproving` controller that ships as part of +[kube-controller-manager](/docs/admin/kube-controller-manager/) and is enabled +by default. The controller uses the [`SubjectAccessReview` +API](/docs/reference/access-authn-authz/authorization/#checking-api-access) to +determine if a given user is authorized to request a CSR, then approves based on +the authorization outcome. To prevent conflicts with other approvers, the +builtin approver doesn't explicitly deny CSRs. It only ignores unauthorized +requests. The controller also prunes expired certificates as part of garbage +collection. The controller categorizes CSRs into three subresources: 1. `nodeclient` - a request by a user for a client certificate with `O=system:nodes` and `CN=system:node:(node name)`. -2. `selfnodeclient` - a node renewing a client certificate with the same `O` and `CN`. -3. `selfnodeserver` - a node renewing a serving certificate. (ALPHA, requires feature gate) +2. `selfnodeclient` - a node renewing a client certificate with the same `O` and `CN`. A node can use its existing client certificate to authenticate this request. -The checks to determine if a CSR is a `selfnodeserver` request is currently tied to the kubelet's credential rotation -implementation, an __alpha__ feature. As such, the definition of `selfnodeserver` will likely change in a future and -requires the `RotateKubeletServerCertificate` feature gate on the controller manager. The feature progress can be -tracked at [kubernetes/features#267](https://github.com/kubernetes/features/issues/267). - -``` ---feature-gates=RotateKubeletServerCertificate=true -``` - -The following RBAC `ClusterRoles` represent the `nodeclient`, `selfnodeclient`, and `selfnodeserver` capabilities. Similar roles -may be automatically created in future releases. +The following RBAC `ClusterRoles` represent the `nodeclient` and +`selfnodeclient`, capabilities. ```yml # A ClusterRole which instructs the CSR approver to approve a user requesting @@ -121,36 +147,21 @@ rules: - apiGroups: ["certificates.k8s.io"] resources: ["certificatesigningrequests/selfnodeclient"] verbs: ["create"] ---- -# A ClusterRole which instructs the CSR approver to approve a node requesting a -# serving cert matching its client cert. -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: approve-node-server-renewal-csr -rules: -- apiGroups: ["certificates.k8s.io"] - resources: ["certificatesigningrequests/selfnodeserver"] - verbs: ["create"] ``` -As of 1.8, equivalent roles to the ones listed above are automatically created as part of the default RBAC roles. -For 1.8 clusters admins are recommended to bind tokens to the following roles instead of creating their own: +As of 1.8, equivalent roles to the ones listed above are automatically created +as part of the default RBAC roles. For 1.8 clusters admins are recommended to +bind node bootstrap identities to the following roles instead of creating their +own: * `system:certificates.k8s.io:certificatesigningrequests:nodeclient` - Automatically approve CSRs for client certs bound to this role. * `system:certificates.k8s.io:certificatesigningrequests:selfnodeclient` - Automatically approve CSRs when a client bound to its role renews its own certificate. -These powers can be granted to credentials, such as bootstrapping tokens. For example, to replicate the behavior -provided by the removed auto-approval flag, of approving all CSRs by a single group: - -``` -# REMOVED: This flag no longer works as of 1.7. ---insecure-experimental-approve-all-kubelet-csrs-for-group="system:bootstrappers" -``` - -An admin would create a `ClusterRoleBinding` targeting that group. +For example, to grant these permissions to identities attached to bootstrap +tokens, an admin would create a `ClusterRoleBinding` targeting the +`system:bootstrappers` group: ```yml # Approve all CSRs for the group "system:bootstrappers" @@ -168,8 +179,8 @@ roleRef: apiGroup: rbac.authorization.k8s.io ``` -To let a node renew its own credentials, an admin can construct a `ClusterRoleBinding` targeting -that node's credentials: +To let all nodes renew their own credentials, an admin can create a +`ClusterRoleBinding` targeting node identities: ```yml kind: ClusterRoleBinding @@ -177,8 +188,8 @@ apiVersion: rbac.authorization.k8s.io/v1 metadata: name: node1-client-cert-renewal subjects: -- kind: User - name: system:node:node-1 # Let "node-1" renew its client certificate. +- kind: Group + name: system:nodes apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole @@ -186,18 +197,28 @@ roleRef: apiGroup: rbac.authorization.k8s.io ``` -Deleting the binding will prevent the node from renewing its client credentials, effectively -removing it from the cluster once its certificate expires. - ## kubelet configuration -To request a client certificate from kube-apiserver, the kubelet first needs a path to a kubeconfig file that contains the -bootstrap authentication token. You can use `kubectl config set-cluster`, `set-credentials`, and `set-context` to build this kubeconfig. Provide the name `kubelet-bootstrap` to `kubectl config set-credentials` and include `--token=` as follows: + +To request a client certificate from kube-apiserver, the kubelet first needs a +path to a kubeconfig file that contains the credentials for the identity that it +will use to bootstrap its individual node identity. + +If you are using a bootstrap token, you can use `kubectl config set-cluster`, +`set-credentials`, and `set-context` to build this kubeconfig. Provide the name +`kubelet-bootstrap` to `kubectl config set-credentials` and include +`--token=` as follows: ``` kubectl config set-credentials kubelet-bootstrap --token=${BOOTSTRAP_TOKEN} --kubeconfig=bootstrap.kubeconfig ``` -When starting the kubelet, if the file specified by `--kubeconfig` does not exist, the bootstrap kubeconfig is used to request a client certificate from the API server. On approval of the certificate request and receipt back by the kubelet, a kubeconfig file referencing the generated key and obtained certificate is written to the path specified by `--kubeconfig`. The certificate and key file will be placed in the directory specified by `--cert-dir`. +When starting the kubelet, if the file specified via `--kubeconfig` does not +exist, the bootstrap kubeconfig specified via `--bootstrap-kubeconfig` is used +to request a client certificate from the API server. On approval of the +certificate request and receipt back by the kubelet, a kubeconfig file +referencing the generated key and obtained certificate is written to the path +specified by `--kubeconfig`. The certificate and key file will be placed in the +directory specified by `--cert-dir`. {{< note >}} **Note:** The following flags are required to enable this bootstrapping when starting the kubelet: @@ -207,25 +228,49 @@ When starting the kubelet, if the file specified by `--kubeconfig` does not exis ``` {{< /note >}} -Additionally, in 1.7 the kubelet implements __alpha__ features for enabling rotation of both its client and/or serving certs. -These can be enabled through the respective `RotateKubeletClientCertificate` and `RotateKubeletServerCertificate` feature -flags on the kubelet, but may change in backward incompatible ways in future releases. +Additionally, in 1.7 the kubelet implements __beta__ features for enabling +rotation of both its client and/or serving certs. These can be enabled through +the respective `RotateKubeletClientCertificate` and +`RotateKubeletServerCertificate` feature flags on the kubelet and are enabled by +default. + +`RotateKubeletClientCertificate` causes the kubelet to rotate its client +certificates by creating new CSRs as its existing credentials expire. To enable +this feature pass the following flag to the kubelet: ``` ---feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true +--rotate-certificates ``` -`RotateKubeletClientCertificate` causes the kubelet to rotate its client certificates by creating new CSRs as its existing -credentials expire. `RotateKubeletServerCertificate` causes the kubelet to both request a serving certificate after -bootstrapping its client credentials and rotate the certificate. The serving cert currently does not request DNS or IP -SANs. +`RotateKubeletServerCertificate` causes the kubelet to both request a serving +certificate after bootstrapping its client credentials and to rotate that +certificate. To enable this feature pass the following flag to the kubelet: + +``` +--rotate-server-certificates +``` + +{{< note >}} +**Note:** The CSR approving controllers implemented in core Kubernetes do not +approve node serving certificates for [security +reasons](https://github.com/kubernetes/community/pull/1982). To use +`RotateKubeletServerCertificate` operators need to run a custom approving +controller, or manually approve the serving certificate requests. +{{< /note >}} ## kubectl approval -The signing controller does not immediately sign all certificate requests. Instead, it waits until they have been flagged with an -"Approved" status by an appropriately-privileged user. This is intended to eventually be an automated process handled by an external -approval controller, but for the alpha version of the API it can be done manually by a cluster administrator using kubectl. -An administrator can list CSRs with `kubectl get csr` and describe one in detail with `kubectl describe csr `. Before the 1.6 release there were -[no direct approve/deny commands](https://github.com/kubernetes/kubernetes/issues/30163) so an approver had to update -the Status field directly ([rough how-to](https://github.com/gtank/csrctl)). Later versions of Kubernetes offer `kubectl certificate approve ` and `kubectl certificate deny ` commands. + +CSRs can be approved outside of the approval flows builtin to the controller +manager. + +The signing controller does not immediately sign all certificate requests. +Instead, it waits until they have been flagged with an "Approved" status by an +appropriately-privileged user. This flow is intended to allow for automated +approval handled by an external approval controller or the approval controller +implemented in the core controller-manager. However cluster administrators can +also manually approve certificate requests using kubectl. An administrator can +list CSRs with `kubectl get csr` and describe one in detail with `kubectl +describe csr `. An administrator can approve or deny a CSR with `kubectl +certificate approve ` and `kubectl certificate deny `. {{% /capture %}} diff --git a/content/en/docs/reference/command-line-tools-reference/kubelet.md b/content/en/docs/reference/command-line-tools-reference/kubelet.md index 9f4902659b..8102198ef8 100644 --- a/content/en/docs/reference/command-line-tools-reference/kubelet.md +++ b/content/en/docs/reference/command-line-tools-reference/kubelet.md @@ -142,13 +142,6 @@ kubelet [flags] - - - - - - - diff --git a/content/en/docs/reference/glossary/quantity.md b/content/en/docs/reference/glossary/quantity.md new file mode 100644 index 0000000000..c0c0edd52b --- /dev/null +++ b/content/en/docs/reference/glossary/quantity.md @@ -0,0 +1,30 @@ +--- +title: Quantity +id: quantity +date: 2018-08-07 +full_link: +short_description: > + A whole-number representation of small or large numbers using SI suffixes. + +aka: +tags: +--- + A whole-number representation of small or large numbers using SI suffixes. + + + +Quantities are representations of small or large numbers using a compact, +whole-number notation with SI suffixes. Fractional numbers are represented +using milli-units, while large numbers can be represented using kilo-units, +mega-units, giga-units, etc. + +For instance, the number `1.5` is represented `1500m`, while the number `1000` +can be represented as `1k`, and `1000000` as `1M`. You can also specify +binary-notation suffixes; the number 2048 can be written as `2Ki`. + +The accepted decimal (power-of-10) units are `m` (milli), `k` (kilo, +intentionally lowercase), `M` (mega), `G` (giga), `T` (terra), `P` (peta), +`E` (exa). + +The accepted binary (power-of-2) units are `Ki` (kibi), `Mi` (mebi), `Gi` (gibi), +`Ti` (tebi), `Pi` (pebi), `Ei` (exbi). diff --git a/content/en/docs/reference/kubectl/kubectl.md b/content/en/docs/reference/kubectl/kubectl.md index 923ad9a84c..c32a7cad88 100755 --- a/content/en/docs/reference/kubectl/kubectl.md +++ b/content/en/docs/reference/kubectl/kubectl.md @@ -2,13 +2,13 @@ title: kubectl notitle: true --- - ## kubectl kubectl controls the Kubernetes cluster manager ### Synopsis + kubectl controls the Kubernetes cluster manager. Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/ @@ -19,35 +19,236 @@ kubectl [flags] ### Options -``` - --alsologtostderr log to standard error as well as files - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --cache-dir string Default HTTP cache directory (default "/home/username/.kube/http-cache") - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for kubectl - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to the kubeconfig file to use for CLI requests. - --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) - --log-dir string If non-empty, write log files in this directory - --logtostderr log to standard error instead of files - --match-server-version Require server version to match client version - -n, --namespace string If present, the namespace scope for this CLI request - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - -s, --server string The address and port of the Kubernetes API server - --stderrthreshold severity logs at or above this threshold go to stderr (default 2) - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - -v, --v Level log level for V logs - --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging -``` +
Cloud serviceMaximum volumes per node
Cloud serviceMaximum volumes per Node
Amazon Elastic Block Store (EBS)39
Google Persistent Disk16
Microsoft Azure Disk Storage16
--address ip     Default: 0.0.0.0
DEPRECATED: the IP address on which to listen for the --port port (set to 0.0.0.0 for all IPv4 interfaces and :: for all IPv6 interfaces). See --bind-address instead.
--allocate-node-cidrs
Should CIDRs for Pods be allocated and set on the cloud provider.
--authentication-kubeconfig string
kubeconfig file pointing at the 'core' kubernetes server with enough rights to create tokenaccessreviews.authentication.k8s.io. This is optional. If empty, all token requests are considered to be anonymous and no client CA is looked up in the cluster.
--authentication-skip-lookup
If false, the authentication-kubeconfig will be used to lookup missing authentication configuration from the cluster.
--authentication-token-webhook-cache-ttl duration     Default: 10s
The duration to cache responses from the webhook token authenticator.
--authorization-always-allow-paths stringSlice     Default: [/healthz]
A list of HTTP paths to skip during authorization, i.e. these are authorized without contacting the 'core' kubernetes server.
--authorization-kubeconfig string
kubeconfig file pointing at the 'core' kubernetes server with enough rights to create subjectaccessreviews.authorization.k8s.io. This is optional. If empty, all requests not skipped by authorization are forbidden.
--authorization-webhook-cache-authorized-ttl duration     Default: 10s
The duration to cache 'authorized' responses from the webhook authorizer.
--authorization-webhook-cache-unauthorized-ttl duration     Default: 10s
The duration to cache 'unauthorized' responses from the webhook authorizer.
--azure-container-registry-config string
Type of CIDR allocator to use
--client-ca-file string
If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate.
--cloud-config string
Interval between starting controller managers.
--external-cloud-volume-plugin string
The plugin to use when cloud provider is set to external. Can be empty, should only be set when cloud-provider is external. Currently used to allow node and volume controllers to work for in tree cloud providers.
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (ALPHA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (BETA - default=true)
DynamicProvisioningScheduling=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
TokenRequestProjection=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (BETA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIDriverRegistry=true|false (ALPHA - default=false)
CSINodeInfo=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DryRun=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (BETA - default=true)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
NodeLease=true|false (ALPHA - default=false)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=true)
PodShareProcessNamespace=true|false (BETA - default=true)
ProcMountType=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (BETA - default=true)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
RunAsGroup=true|false (ALPHA - default=false)
RuntimeClass=true|false (ALPHA - default=false)
SCTPSupport=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (BETA - default=true)
ServiceNodeExclusion=true|false (ALPHA - default=false)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TTLAfterFinished=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (BETA - default=true)
TokenRequest=true|false (BETA - default=true)
TokenRequestProjection=true|false (BETA - default=true)
VolumeScheduling=true|false (BETA - default=true)
VolumeSnapshotDataSource=true|false (ALPHA - default=false)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
Specifies how often the controller updates nodes' status.
--port int     Default: 10253
DEPRECATED: the port on which to serve HTTP insecurely without authentication and authorization. If 0, don't serve HTTPS at all. See --secure-port instead.
--profiling
Enable profiling via web interface host:port/debug/pprof/
--requestheader-allowed-names stringSlice
List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed.
--requestheader-client-ca-file string
Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers. WARNING: generally do not depend on authorization being already done for incoming requests.
--requestheader-extra-headers-prefix stringSlice     Default: [x-remote-extra-]
List of request header prefixes to inspect. X-Remote-Extra- is suggested.
--requestheader-group-headers stringSlice     Default: [x-remote-group]
List of request headers to inspect for groups. X-Remote-Group is suggested.
--requestheader-username-headers stringSlice     Default: [x-remote-user]
List of request headers to inspect for usernames. X-Remote-User is common.
--route-reconciliation-period duration     Default: 10s
--secure-port int--secure-port int     Default: 10258
The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.The port on which to serve HTTPS with authentication and authorization.If 0, don't serve HTTPS at all.
--audit-log-batch-max-size int     Default: 400--audit-log-batch-max-size int     Default: 1
The maximum size of a batch. Only used in batch mode.
--audit-log-batch-max-wait duration     Default: 30s--audit-log-batch-max-wait duration
The amount of time to wait before force writing the batch that hadn't reached the max size. Only used in batch mode.
--audit-log-batch-throttle-burst int     Default: 15--audit-log-batch-throttle-burst int
Maximum number of requests sent at the same moment if ThrottleQPS was not utilized before. Only used in batch mode.
--audit-log-batch-throttle-qps float32     Default: 10--audit-log-batch-throttle-qps float32
Maximum average number of batches per second. Only used in batch mode.--audit-log-format string     Default: "json"
Format of saved audits. "legacy" indicates 1-line text format for each event. "json" indicates structured json format. Requires the 'AdvancedAuditing' feature gate. Known formats are legacy,json.Format of saved audits. "legacy" indicates 1-line text format for each event. "json" indicates structured json format. Known formats are legacy,json.
--audit-log-truncate-max-event-size int     Default: 102400
Maximum size of the audit event sent to the underlying backend. If the size of an event is greater than this number, first request and response are removed, andif this doesn't reduce the size enough, event is discarded.Maximum size of the audit event sent to the underlying backend. If the size of an event is greater than this number, first request and response are removed, and if this doesn't reduce the size enough, event is discarded.
--audit-policy-file string
Path to the file that defines the audit policy configuration. Requires the 'AdvancedAuditing' feature gate. With AdvancedAuditing, a profile is required to enable auditing.Path to the file that defines the audit policy configuration.
--audit-webhook-config-file string
Path to a kubeconfig formatted file that defines the audit webhook configuration. Requires the 'AdvancedAuditing' feature gate.Path to a kubeconfig formatted file that defines the audit webhook configuration.
--audit-webhook-truncate-max-event-size int     Default: 102400
Maximum size of the audit event sent to the underlying backend. If the size of an event is greater than this number, first request and response are removed, andif this doesn't reduce the size enough, event is discarded.Maximum size of the audit event sent to the underlying backend. If the size of an event is greater than this number, first request and response are removed, and if this doesn't reduce the size enough, event is discarded.
--disable-admission-plugins stringSlice
admission plugins that should be disabled although they are in the default enabled plugins list. Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, DefaultStorageClass, DefaultTolerationSeconds, DenyEscalatingExec, DenyExecOnPrivileged, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, Initializers, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodPreset, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.admission plugins that should be disabled although they are in the default enabled plugins list (NamespaceLifecycle, LimitRanger, ServiceAccount, Priority, DefaultTolerationSeconds, DefaultStorageClass, PersistentVolumeClaimResize, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota). Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, DefaultStorageClass, DefaultTolerationSeconds, DenyEscalatingExec, DenyExecOnPrivileged, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, Initializers, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodPreset, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.
--enable-admission-plugins stringSlice
admission plugins that should be enabled in addition to default enabled ones. Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, DefaultStorageClass, DefaultTolerationSeconds, DenyEscalatingExec, DenyExecOnPrivileged, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, Initializers, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodPreset, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.admission plugins that should be enabled in addition to default enabled ones (NamespaceLifecycle, LimitRanger, ServiceAccount, Priority, DefaultTolerationSeconds, DefaultStorageClass, PersistentVolumeClaimResize, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota). Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, DefaultStorageClass, DefaultTolerationSeconds, DenyEscalatingExec, DenyExecOnPrivileged, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, Initializers, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodPreset, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.
--enable-aggregator-routing
Turns on aggregator routing requests to endoints IP rather than cluster IP.Turns on aggregator routing requests to endpoints IP rather than cluster IP.
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (ALPHA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (BETA - default=true)
DynamicProvisioningScheduling=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
TokenRequestProjection=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (BETA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIDriverRegistry=true|false (ALPHA - default=false)
CSINodeInfo=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DryRun=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (BETA - default=true)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
NodeLease=true|false (ALPHA - default=false)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=true)
PodShareProcessNamespace=true|false (BETA - default=true)
ProcMountType=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (BETA - default=true)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
RunAsGroup=true|false (ALPHA - default=false)
RuntimeClass=true|false (ALPHA - default=false)
SCTPSupport=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (BETA - default=true)
ServiceNodeExclusion=true|false (ALPHA - default=false)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TTLAfterFinished=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (BETA - default=true)
TokenRequest=true|false (BETA - default=true)
TokenRequestProjection=true|false (BETA - default=true)
VolumeScheduling=true|false (BETA - default=true)
VolumeSnapshotDataSource=true|false (ALPHA - default=false)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
--requestheader-client-ca-file string
Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers. WARNING: do **not** reuse a CA that is used in a different context (for example with --client-ca-file) unless you understand the risks and the mechanisms to protect the CA's usage. Generally it is recommended to not depend on authorization being already done for incoming requests.Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers. WARNING: generally do not depend on authorization being already done for incoming requests.
--secure-port int     Default: 6443
The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.The port on which to serve HTTPS with authentication and authorization.It cannot be switched off with 0.
If true, validate ServiceAccount tokens exist in etcd as part of authentication.
--service-account-max-token-expiration duration
The maximum validity duration of a token created by the service account token issuer. If an otherwise valid TokenRequest with a validity duration larger than this value is requested, a token will be issued with a validity duration of this value.
--service-account-signing-key-file string
The media type to use to store objects in storage. Some resources or storage backends may only support a specific media type and will ignore this setting.
--storage-versions string     Default: "admission.k8s.io/v1beta1,
admissionregistration.k8s.io/v1beta1,
apps/v1,
authentication.k8s.io/v1,
authorization.k8s.io/v1,
autoscaling/v1,
batch/v1,
certificates.k8s.io/v1beta1,
componentconfig/v1alpha1,
events.k8s.io/v1beta1,
extensions/v1beta1,
imagepolicy.k8s.io/v1alpha1,
networking.k8s.io/v1,
policy/v1beta1,
rbac.authorization.k8s.io/v1,
scheduling.k8s.io/v1beta1,
settings.k8s.io/v1alpha1,
storage.k8s.io/v1,
v1"
The per-group version to store resources in. Specified in the format "group1/version1,group2/version2,...". In the case where objects are moved from one group to the other, you may specify the format "group1=group2/v1beta1,group3/v1beta1,...". You only need to pass the groups you wish to change from the defaults. It defaults to a list of preferred versions of all known groups.
--target-ram-mb int
--address ip     Default: 0.0.0.0
DEPRECATED: the IP address on which to listen for the --port port (set to 0.0.0.0 for all IPv4 interfaces and :: for all IPv6 interfaces). See --bind-address instead.
--allocate-node-cidrs
The reconciler sync wait time between volume attach detach. This duration must be larger than one second, and increasing this value from the default may allow for volumes to be mismatched with pods.
--authentication-kubeconfig string
kubeconfig file pointing at the 'core' kubernetes server with enough rights to create tokenaccessreviews.authentication.k8s.io. This is optional. If empty, all token requests are considered to be anonymous and no client CA is looked up in the cluster.
--authentication-skip-lookup
If false, the authentication-kubeconfig will be used to lookup missing authentication configuration from the cluster.
--authentication-token-webhook-cache-ttl duration     Default: 10s
The duration to cache responses from the webhook token authenticator.
--authorization-always-allow-paths stringSlice     Default: [/healthz]
A list of HTTP paths to skip during authorization, i.e. these are authorized without contacting the 'core' kubernetes server.
--authorization-kubeconfig string
kubeconfig file pointing at the 'core' kubernetes server with enough rights to create subjectaccessreviews.authorization.k8s.io. This is optional. If empty, all requests not skipped by authorization are forbidden.
--authorization-webhook-cache-authorized-ttl duration     Default: 10s
The duration to cache 'authorized' responses from the webhook authorizer.
--authorization-webhook-cache-unauthorized-ttl duration     Default: 10s
The duration to cache 'unauthorized' responses from the webhook authorizer.
--azure-container-registry-config string
Type of CIDR allocator to use
--client-ca-file string
If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate.
--cloud-config string
The number of service account token objects that are allowed to sync concurrently. Larger number = more responsive token generation, but more CPU (and network) load
--concurrent-ttl-after-finished-syncs int32     Default: 5
The number of TTL-after-finished controller workers that are allowed to sync concurrently.
--concurrent_rc_syncs int32     Default: 5
--controllers stringSlice     Default: [*]
A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller named 'foo', '-foo' disables the controller named 'foo'.
All controllers: attachdetach, bootstrapsigner, clusterrole-aggregation, cronjob, csrapproving, csrcleaner, csrsigning, daemonset, deployment, disruption, endpoint, garbagecollector, horizontalpodautoscaling, job, namespace, nodeipam, nodelifecycle, persistentvolume-binder, persistentvolume-expander, podgc, pv-protection, pvc-protection, replicaset, replicationcontroller, resourcequota, route, service, serviceaccount, serviceaccount-token, statefulset, tokencleaner, ttl
Disabled-by-default controllers: bootstrapsigner, tokencleaner
A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller named 'foo', '-foo' disables the controller named 'foo'.
All controllers: attachdetach, bootstrapsigner, clusterrole-aggregation, cronjob, csrapproving, csrcleaner, csrsigning, daemonset, deployment, disruption, endpoint, garbagecollector, horizontalpodautoscaling, job, namespace, nodeipam, nodelifecycle, persistentvolume-binder, persistentvolume-expander, podgc, pv-protection, pvc-protection, replicaset, replicationcontroller, resourcequota, route, service, serviceaccount, serviceaccount-token, statefulset, tokencleaner, ttl, ttl-after-finished
Disabled-by-default controllers: bootstrapsigner, tokencleaner
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (ALPHA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (BETA - default=true)
DynamicProvisioningScheduling=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
TokenRequestProjection=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (BETA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIDriverRegistry=true|false (ALPHA - default=false)
CSINodeInfo=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DryRun=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (BETA - default=true)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
NodeLease=true|false (ALPHA - default=false)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=true)
PodShareProcessNamespace=true|false (BETA - default=true)
ProcMountType=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (BETA - default=true)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
RunAsGroup=true|false (ALPHA - default=false)
RuntimeClass=true|false (ALPHA - default=false)
SCTPSupport=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (BETA - default=true)
ServiceNodeExclusion=true|false (ALPHA - default=false)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TTLAfterFinished=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (BETA - default=true)
TokenRequest=true|false (BETA - default=true)
TokenRequestProjection=true|false (BETA - default=true)
VolumeScheduling=true|false (BETA - default=true)
VolumeSnapshotDataSource=true|false (ALPHA - default=false)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
--horizontal-pod-autoscaler-downscale-delay duration     Default: 5m0s--horizontal-pod-autoscaler-cpu-initialization-period duration     Default: 5m0s
The period since last downscale, before another downscale can be performed in horizontal pod autoscaler.The period after pod start when CPU samples might be skipped.
--horizontal-pod-autoscaler-sync-period duration     Default: 30s--horizontal-pod-autoscaler-downscale-stabilization duration     Default: 5m0s
The period for which autoscaler will look backwards and not scale down below any recommendation it made during that period.
--horizontal-pod-autoscaler-initial-readiness-delay duration     Default: 30s
The period after pod start during which readiness changes will be treated as initial readiness.
--horizontal-pod-autoscaler-sync-period duration     Default: 15s
The period for syncing the number of pods in horizontal pod autoscaler.The minimum change (from 1.0) in the desired-to-actual metrics ratio for the horizontal pod autoscaler to consider scaling.
--horizontal-pod-autoscaler-upscale-delay duration     Default: 3m0s
The period since last upscale, before another upscale can be performed in horizontal pod autoscaler.
--horizontal-pod-autoscaler-use-rest-clients     Default: true
If set to true, causes the horizontal pod autoscaler controller to use REST clients through the kube-aggregator, instead of using the legacy metrics client through the API server proxy. This is required for custom metrics support in the horizontal pod autoscaler.
--http2-max-streams-per-connection int
The grace period for deleting pods on failed nodes.
--port int     Default: 10252
DEPRECATED: the port on which to serve HTTP insecurely without authentication and authorization. If 0, don't serve HTTPS at all. See --secure-port instead.
--profiling
The period for syncing persistent volumes and persistent volume claims
--requestheader-allowed-names stringSlice
List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed.
--requestheader-client-ca-file string
Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers. WARNING: generally do not depend on authorization being already done for incoming requests.
--requestheader-extra-headers-prefix stringSlice     Default: [x-remote-extra-]
List of request header prefixes to inspect. X-Remote-Extra- is suggested.
--requestheader-group-headers stringSlice     Default: [x-remote-group]
List of request headers to inspect for groups. X-Remote-Group is suggested.
--requestheader-username-headers stringSlice     Default: [x-remote-user]
List of request headers to inspect for usernames. X-Remote-User is common.
--resource-quota-sync-period duration     Default: 5m0s
--secure-port int--secure-port int     Default: 10257
The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.The port on which to serve HTTPS with authentication and authorization.If 0, don't serve HTTPS at all.
--service-account-private-key-file string
Filename containing a PEM-encoded private RSA or ECDSA key used to sign service account tokens.
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (ALPHA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (BETA - default=true)
DynamicProvisioningScheduling=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
TokenRequestProjection=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (BETA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIDriverRegistry=true|false (ALPHA - default=false)
CSINodeInfo=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DryRun=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (BETA - default=true)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
NodeLease=true|false (ALPHA - default=false)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=true)
PodShareProcessNamespace=true|false (BETA - default=true)
ProcMountType=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (BETA - default=true)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
RunAsGroup=true|false (ALPHA - default=false)
RuntimeClass=true|false (ALPHA - default=false)
SCTPSupport=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (BETA - default=true)
ServiceNodeExclusion=true|false (ALPHA - default=false)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TTLAfterFinished=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (BETA - default=true)
TokenRequest=true|false (BETA - default=true)
TokenRequestProjection=true|false (BETA - default=true)
VolumeScheduling=true|false (BETA - default=true)
VolumeSnapshotDataSource=true|false (ALPHA - default=false)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (ALPHA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (BETA - default=true)
DynamicProvisioningScheduling=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
TokenRequestProjection=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
AttachVolumeLimit=true|false (BETA - default=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (BETA - default=true)
CSIBlockVolume=true|false (ALPHA - default=false)
CSIDriverRegistry=true|false (ALPHA - default=false)
CSINodeInfo=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (BETA - default=true)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DryRun=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (BETA - default=true)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (BETA - default=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
KubeletPluginsWatcher=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
NodeLease=true|false (ALPHA - default=false)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (BETA - default=true)
PodReadinessGates=true|false (BETA - default=true)
PodShareProcessNamespace=true|false (BETA - default=true)
ProcMountType=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
ResourceQuotaScopeSelectors=true|false (BETA - default=true)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
RunAsGroup=true|false (ALPHA - default=false)
RuntimeClass=true|false (ALPHA - default=false)
SCTPSupport=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (BETA - default=true)
ServiceNodeExclusion=true|false (ALPHA - default=false)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
Sysctls=true|false (BETA - default=true)
TTLAfterFinished=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (BETA - default=true)
TokenRequest=true|false (BETA - default=true)
TokenRequestProjection=true|false (BETA - default=true)
VolumeScheduling=true|false (BETA - default=true)
VolumeSnapshotDataSource=true|false (ALPHA - default=false)
VolumeSubpathEnvExpansion=true|false (ALPHA - default=false)
Path to a kubeconfig file that will be used to get client certificate for kubelet. If the file specified by --kubeconfig does not exist, the bootstrap kubeconfig is used to request a client certificate from the API server. On success, a kubeconfig file referencing the generated client certificate and key is written to the path specified by --kubeconfig. The client certificate and key file will be stored in the directory pointed by --cert-dir.
--cadvisor-port int32
The port of the localhost cAdvisor endpoint (set to 0 to disable) (default 4194)
--cert-dir string
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--allow-verification-with-non-compliant-keys
Allow a SignatureVerifier to use keys which are technically non-compliant with RFC6962.
--alsologtostderr
log to standard error as well as files
--as string
Username to impersonate for the operation
--as-group stringArray
Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--azure-container-registry-config string
Path to the file containing Azure container registry configuration information.
--cache-dir string     Default: "/Users/zarnold/.kube/http-cache"
Default HTTP cache directory
--certificate-authority string
Path to a cert file for the certificate authority
--client-certificate string
Path to a client certificate file for TLS
--client-key string
Path to a client key file for TLS
--cloud-provider-gce-lb-src-cidrs cidrs     Default: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16
CIDRs opened in GCE firewall for LB traffic proxy & health checks
--cluster string
The name of the kubeconfig cluster to use
--context string
The name of the kubeconfig context to use
--default-not-ready-toleration-seconds int     Default: 300
Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration.
--default-unreachable-toleration-seconds int     Default: 300
Indicates the tolerationSeconds of the toleration for unreachable:NoExecute that is added by default to every pod that does not already have such a toleration.
-h, --help
help for kubectl
--insecure-skip-tls-verify
If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
--kubeconfig string
Path to the kubeconfig file to use for CLI requests.
--log-backtrace-at traceLocation     Default: :0
when logging hits line file:N, emit a stack trace
--log-dir string
If non-empty, write log files in this directory
--log-flush-frequency duration     Default: 5s
Maximum number of seconds between log flushes
--logtostderr     Default: true
log to standard error instead of files
--match-server-version
Require server version to match client version
-n, --namespace string
If present, the namespace scope for this CLI request
--request-timeout string     Default: "0"
The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests.
-s, --server string
The address and port of the Kubernetes API server
--stderrthreshold severity     Default: 2
logs at or above this threshold go to stderr
--token string
Bearer token for authentication to the API server
--user string
The name of the kubeconfig user to use
-v, --v Level
log level for V logs
--version version[=true]
Print version information and quit
--vmodule moduleSpec
comma-separated list of pattern=N settings for file-filtered logging
+ + ### SEE ALSO - * [kubectl alpha](kubectl_alpha.md) - Commands for features in alpha * [kubectl annotate](kubectl_annotate.md) - Update the annotations on a resource * [kubectl api-resources](kubectl_api-resources.md) - Print the supported API resources on the server @@ -76,7 +277,7 @@ kubectl [flags] * [kubectl logs](kubectl_logs.md) - Print the logs for a container in a pod * [kubectl options](kubectl_options.md) - Print the list of flags inherited by all commands * [kubectl patch](kubectl_patch.md) - Update field(s) of a resource using strategic merge patch -* [kubectl plugin](kubectl_plugin.md) - Runs a command-line plugin +* [kubectl plugin](kubectl_plugin.md) - Provides utilities for interacting with plugins. * [kubectl port-forward](kubectl_port-forward.md) - Forward one or more local ports to a pod * [kubectl proxy](kubectl_proxy.md) - Run a proxy to the Kubernetes API server * [kubectl replace](kubectl_replace.md) - Replace a resource by filename or stdin @@ -88,6 +289,5 @@ kubectl [flags] * [kubectl top](kubectl_top.md) - Display Resource (CPU/Memory/Storage) usage. * [kubectl uncordon](kubectl_uncordon.md) - Mark node as schedulable * [kubectl version](kubectl_version.md) - Print the client and server version information -* [kubectl wait](kubectl_wait.md) - Experimental: Wait for one condition on one or many resources +* [kubectl wait](kubectl_wait.md) - Experimental: Wait for a specific condition on one or many resources. -###### Auto generated by spf13/cobra on 16-Jun-2018 diff --git a/content/en/docs/reference/kubectl/overview.md b/content/en/docs/reference/kubectl/overview.md index dba8ea36a4..c51c24af3f 100644 --- a/content/en/docs/reference/kubectl/overview.md +++ b/content/en/docs/reference/kubectl/overview.md @@ -349,6 +349,87 @@ $ kubectl logs $ kubectl logs -f ``` +## Examples: Creating and using plugins + +Use the following set of examples to help you familiarize yourself with writing and using `kubectl` plugins: + +```shell +// create a simple plugin in any language and name the resulting executable file +// so that it begins with the prefix "kubectl-" +$ cat ./kubectl-hello +#!/bin/bash + +# this plugin prints the words "hello world" +echo "hello world" + +// with our plugin written, let's make it executable +$ sudo chmod +x ./kubectl-hello + +// and move it to a location in our PATH +$ sudo mv ./kubectl-hello /usr/local/bin + +// we have now created and "installed" a kubectl plugin. +// we can begin using our plugin by invoking it from kubectl as if it were a regular command +$ kubectl hello +hello world + +// we can "uninstall" a plugin, by simply removing it from our PATH +$ sudo rm /usr/local/bin/kubectl-hello +``` + +In order to view all of the plugins that are available to `kubectl`, we can use +the `kubectl plugin list` subcommand: + +```shell +$ kubectl plugin list +The following kubectl-compatible plugins are available: + +/usr/local/bin/kubectl-hello +/usr/local/bin/kubectl-foo +/usr/local/bin/kubectl-bar + +// this command can also warn us about plugins that are +// not executable, or that are overshadowed by other +// plugins, for example +$ sudo chmod -x /usr/local/bin/kubectl-foo +$ kubectl plugin list +The following kubectl-compatible plugins are available: + +/usr/local/bin/kubectl-hello +/usr/local/bin/kubectl-foo + - warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable +/usr/local/bin/kubectl-bar + +error: one plugin warning was found +``` + +We can think of plugins as a means to build more complex functionality on top +of the existing kubectl commands: + +```shell +$ cat ./kubectl-whoami +#!/bin/bash + +# this plugin makes use of the `kubectl config` command in order to output +# information about the current user, based on the currently selected context +kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ .context.user }}{{ end }}{{ end }}' +``` + +Running the above plugin gives us an output containing the user for the currently selected +context in our KUBECONFIG file: + +```shell +// make the file executable +$ sudo chmod +x ./kubectl-whoami + +// and move it into our PATH +$ sudo mv ./kubectl-whoami /usr/local/bin + +$ kubectl whoami +Current user: plugins-user +``` + +To find out more about plugins, take a look at the [example cli plugin](https://github.com/kubernetes/sample-cli-plugin). ## Next steps diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm.md index 9c36cd372e..66869de837 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm.md @@ -53,6 +53,13 @@ Example usage: help for kubeadm + + --rootfs string + + + [EXPERIMENTAL] The path to the 'real' host root filesystem. + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md index def246a453..9022c61dbc 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md @@ -27,3 +27,24 @@ Experimental sub-commands not yet fully functional. +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md index aa175471ca..11771b9355 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md index 52689eee0c..834becc463 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md index 29655fd8c6..f30b47e323 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md @@ -4,7 +4,7 @@ Installs all addons to a Kubernetes cluster ### Synopsis -Installs the CoreDNS and the kube-proxys addons components via the API server. Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed. +Installs the CoreDNS and the kube-proxy addons components via the API server. Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed. Alpha Disclaimer: this command is currently alpha. @@ -15,7 +15,7 @@ kubeadm alpha phase addon all [flags] ### Examples ``` - # Installs the CoreDNS and the kube-proxys addons components via the API server, + # Installs the CoreDNS and the kube-proxy addons components via the API server, # functionally equivalent to what installed by kubeadm init. kubeadm alpha phase selfhosting from-staticpods @@ -55,7 +55,7 @@ kubeadm alpha phase addon all [flags] --feature-gates string - A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) + A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false) @@ -76,11 +76,11 @@ kubeadm alpha phase addon all [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -112,3 +112,24 @@ kubeadm alpha phase addon all [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_coredns.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_coredns.md index 0c17c292f3..4387b42f8e 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_coredns.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_coredns.md @@ -32,7 +32,7 @@ kubeadm alpha phase addon coredns [flags] --feature-gates string - A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) + A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false) @@ -53,11 +53,11 @@ kubeadm alpha phase addon coredns [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -82,3 +82,24 @@ kubeadm alpha phase addon coredns [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md deleted file mode 100644 index c9be9dc6ad..0000000000 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md +++ /dev/null @@ -1,85 +0,0 @@ - -Installs the kube-dns addon to a Kubernetes cluster - -### Synopsis - - -Installs the kube-dns addon components via the API server. -Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed. - -Alpha Disclaimer: this command is currently alpha. - -``` -kubeadm alpha phase addon kube-dns [flags] -``` - -### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--config string
Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental!
--feature-gates string
A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (BETA - default=false)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
-h, --help
help for kube-dns
--image-repository string     Default: "k8s.gcr.io"
Choose a container registry to pull control plane images from
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster
--kubernetes-version string     Default: "stable-1.10"
Choose a specific Kubernetes version for the control plane
--service-cidr string     Default: "10.96.0.0/12"
The range of IP address used for service VIPs
--service-dns-domain string     Default: "cluster.local"
Alternative domain for services
- - - diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md index 40d91010cb..0c36be4676 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md @@ -60,11 +60,11 @@ kubeadm alpha phase addon kube-proxy [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -82,3 +82,24 @@ kubeadm alpha phase addon kube-proxy [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md index 491ef4d66c..638eda6f50 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md @@ -26,7 +26,28 @@ This command is not meant to be run on its own. See list of available subcommand --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. + + + + + + + +### Options inherited from parent commands + + + + + + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md index dd131e37d7..0169c68221 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md @@ -105,7 +105,14 @@ kubeadm alpha phase bootstrap-token all [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md index 9e812e0916..5cc7f3fc05 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md @@ -48,7 +48,14 @@ kubeadm alpha phase bootstrap-token cluster-info [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md index d1cdf5d181..aed484bb38 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md @@ -97,7 +97,14 @@ kubeadm alpha phase bootstrap-token create [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md index 2128d7c290..ef5cab6139 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md @@ -40,7 +40,14 @@ This command is not meant to be run on its own. See list of available subcommand - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md index 1d04250869..405ece9bce 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md @@ -48,7 +48,14 @@ kubeadm alpha phase bootstrap-token node allow-auto-approve [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md index 713644e273..8aee98f2ec 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md @@ -48,7 +48,14 @@ kubeadm alpha phase bootstrap-token node allow-post-csrs [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md index d7ce2c46a0..56d01fba8e 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md index f40cf7c054..07916e76e8 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md @@ -6,8 +6,7 @@ Generates all PKI assets necessary to establish the control plane Generates a self-signed CA to provision identities for each component in the cluster (including nodes) and client certificates to be used by various components. -If a given certificate and private key pair both exist, kubeadm skips the generation step and -existing files will be used. +If a given certificate and private key pair both exist, kubeadm skips the generation step and existing files will be used. Alpha Disclaimer: this command is currently alpha. @@ -60,7 +59,7 @@ kubeadm alpha phase certs all [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -89,3 +88,24 @@ kubeadm alpha phase certs all [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md index 0f93b4f2f6..65ef3d793a 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md @@ -1,10 +1,10 @@ -Generates a client certificate for the API server to connect to etcd securely +Generates the client apiserver uses to access etcd ### Synopsis -Generates the client certificate for the API server to connect to etcd securely and the respective key, and saves them into apiserver-etcd-client.crt and apiserver-etcd-client.key files. +Generates the client apiserver uses to access etcd, and saves them into apiserver-etcd-client.cert and apiserver-etcd-client.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs apiserver-etcd-client [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs apiserver-etcd-client [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md index 9772c82378..37aeb21fb4 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md @@ -1,10 +1,10 @@ -Generates a client certificate for the API server to connect to the kubelets securely +Generates the Client certificate for the API server to connect to kubelet ### Synopsis -Generates the client certificate for the API server to connect to the kubelet securely and the respective key, and saves them into apiserver-kubelet-client.crt and apiserver-kubelet-client.key files. +Generates the Client certificate for the API server to connect to kubelet, and saves them into apiserver-kubelet-client.cert and apiserver-kubelet-client.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs apiserver-kubelet-client [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs apiserver-kubelet-client [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md index 6fa23650d3..13f358c12a 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md @@ -1,12 +1,12 @@ -Generates an API server serving certificate and key +Generates the certificate for serving the kubernetes API ### Synopsis -Generates the API server serving certificate and key and saves them into apiserver.crt and apiserver.key files. +Generates the certificate for serving the kubernetes API, and saves them into apiserver.cert and apiserver.key files. -The certificate includes default subject alternative names and additional SANs provided by the user; default SANs are: , , kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc. , (that is the .10 address in address space). +Default SANs are kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, 10.96.0.1, 127.0.0.1 If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -50,7 +50,7 @@ kubeadm alpha phase certs apiserver [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -79,3 +79,24 @@ kubeadm alpha phase certs apiserver [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md index 2d13b77835..7f4e19a2d3 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md @@ -1,10 +1,10 @@ -Generates a self-signed kubernetes CA to provision identities for components of the cluster +Generates the self-signed kubernetes CA to provision identities for other kuberenets components ### Synopsis -Generates the self-signed kubernetes certificate authority and related key, and saves them into ca.crt and ca.key files. +Generates the self-signed kubernetes CA to provision identities for other kuberenets components, and saves them into ca.cert and ca.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs ca [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs ca [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md index 23ccb50b8a..186905c298 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md @@ -1,10 +1,10 @@ -Generates a self-signed CA to provision identities for etcd +Generates the self-signed CA to provision identities for etcd ### Synopsis -Generates the self-signed etcd certificate authority and related key and saves them into etcd/ca.crt and etcd/ca.key files. +Generates the self-signed CA to provision identities for etcd, and saves them into etcd/ca.cert and etcd/ca.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs etcd-ca [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs etcd-ca [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md index fa0abd61cc..fd5b135b02 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md @@ -1,10 +1,10 @@ -Generates a client certificate for liveness probes to healthcheck etcd +Generates the client certificate for liveness probes to healtcheck etcd ### Synopsis -Generates the client certificate for liveness probes to healthcheck etcd and the respective key, and saves them into etcd/healthcheck-client.crt and etcd/healthcheck-client.key files. +Generates the client certificate for liveness probes to healtcheck etcd, and saves them into etcd/healthcheck-client.cert and etcd/healthcheck-client.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs etcd-healthcheck-client [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs etcd-healthcheck-client [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md index 6a02d7f21f..d9a73e800a 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md @@ -1,12 +1,12 @@ -Generates an etcd peer certificate and key +Generates the credentials for etcd nodes to communicate with each other ### Synopsis -Generates the etcd peer certificate and key and saves them into etcd/peer.crt and etcd/peer.key files. +Generates the credentials for etcd nodes to communicate with each other, and saves them into etcd/peer.cert and etcd/peer.key files. -The certificate includes default subject alternative names and additional SANs provided by the user; default SANs are: , . +Default SANs are localhost, 127.0.0.1, 127.0.0.1, ::1 If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -36,7 +36,7 @@ kubeadm alpha phase certs etcd-peer [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -51,3 +51,24 @@ kubeadm alpha phase certs etcd-peer [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md index 9c7d9d95c5..6965eceb66 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md @@ -1,12 +1,12 @@ -Generates an etcd serving certificate and key +Generates the certificate for serving etcd ### Synopsis -Generates the etcd serving certificate and key and saves them into etcd/server.crt and etcd/server.key files. +Generates the certificate for serving etcd, and saves them into etcd/server.cert and etcd/server.key files. -The certificate includes default subject alternative names and additional SANs provided by the user; default SANs are: localhost, 127.0.0.1. +Default SANs are localhost, 127.0.0.1, ::1 If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -36,7 +36,7 @@ kubeadm alpha phase certs etcd-server [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -51,3 +51,24 @@ kubeadm alpha phase certs etcd-server [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md index 3eed51d2ac..e6cde90042 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md @@ -1,10 +1,10 @@ -Generates a front proxy CA certificate and key for a Kubernetes cluster +Generates the self-signed CA to provision identities for front proxy ### Synopsis -Generates the front proxy CA certificate and key and saves them into front-proxy-ca.crt and front-proxy-ca.key files. +Generates the self-signed CA to provision identities for front proxy, and saves them into front-proxy-ca.cert and front-proxy-ca.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs front-proxy-ca [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs front-proxy-ca [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md index 072d83dfdd..bde1a92cda 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md @@ -1,10 +1,10 @@ -Generates a front proxy CA client certificate and key for a Kubernetes cluster +Generates the client for the front proxy ### Synopsis -Generates the front proxy client certificate and key and saves them into front-proxy-client.crt and front-proxy-client.key files. +Generates the client for the front proxy, and saves them into front-proxy-client.cert and front-proxy-client.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. @@ -34,7 +34,7 @@ kubeadm alpha phase certs front-proxy-client [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +49,24 @@ kubeadm alpha phase certs front-proxy-client [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew.md new file mode 100644 index 0000000000..348c268eed --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew.md @@ -0,0 +1,54 @@ + +Renews certificates for a Kubernetes cluster + +### Synopsis + + +This command is not meant to be run on its own. See list of available subcommands. + +``` +kubeadm alpha phase certs renew [flags] +``` + +### Options + + + + + + + + + + + + + + + + +
-h, --help
help for renew
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_all.md new file mode 100644 index 0000000000..c5fd726b3c --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_all.md @@ -0,0 +1,82 @@ + +renew all available certificates + +### Synopsis + + +Renews all known certificates necessary to run the control plan. Renewals are run unconditionally, regardless of expiration date. Renewals can also be run individually for more control. + +``` +kubeadm alpha phase certs renew all [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for all
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md new file mode 100644 index 0000000000..255b18b0d1 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md @@ -0,0 +1,84 @@ + +Generates the client apiserver uses to access etcd + +### Synopsis + + +Renews the client apiserver uses to access etcd, and saves them into apiserver-etcd-client.cert and apiserver-etcd-client.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew apiserver-etcd-client [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for apiserver-etcd-client
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md new file mode 100644 index 0000000000..1fc536f2ac --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md @@ -0,0 +1,84 @@ + +Generates the Client certificate for the API server to connect to kubelet + +### Synopsis + + +Renews the Client certificate for the API server to connect to kubelet, and saves them into apiserver-kubelet-client.cert and apiserver-kubelet-client.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew apiserver-kubelet-client [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for apiserver-kubelet-client
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver.md new file mode 100644 index 0000000000..c56b907b99 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_apiserver.md @@ -0,0 +1,84 @@ + +Generates the certificate for serving the kubernetes API + +### Synopsis + + +Renews the certificate for serving the kubernetes API, and saves them into apiserver.cert and apiserver.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew apiserver [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for apiserver
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md new file mode 100644 index 0000000000..1ecafc8366 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md @@ -0,0 +1,84 @@ + +Generates the client certificate for liveness probes to healtcheck etcd + +### Synopsis + + +Renews the client certificate for liveness probes to healtcheck etcd, and saves them into etcd/healthcheck-client.cert and etcd/healthcheck-client.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew etcd-healthcheck-client [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for etcd-healthcheck-client
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-peer.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-peer.md new file mode 100644 index 0000000000..75da17a311 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-peer.md @@ -0,0 +1,84 @@ + +Generates the credentials for etcd nodes to communicate with each other + +### Synopsis + + +Renews the credentials for etcd nodes to communicate with each other, and saves them into etcd/peer.cert and etcd/peer.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew etcd-peer [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for etcd-peer
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-server.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-server.md new file mode 100644 index 0000000000..a44a852aeb --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_etcd-server.md @@ -0,0 +1,84 @@ + +Generates the certificate for serving etcd + +### Synopsis + + +Renews the certificate for serving etcd, and saves them into etcd/server.cert and etcd/server.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew etcd-server [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for etcd-server
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_front-proxy-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_front-proxy-client.md new file mode 100644 index 0000000000..41ad8887a1 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_renew_front-proxy-client.md @@ -0,0 +1,84 @@ + +Generates the client for the front proxy + +### Synopsis + + +Renews the client for the front proxy, and saves them into front-proxy-client.cert and front-proxy-client.key files. + +Extra attributes such as SANs will be based on the existing certificates, there is no need to resupply them. + +``` +kubeadm alpha phase certs renew front-proxy-client [flags] +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--cert-dir string     Default: "/etc/kubernetes/pki"
The path where to save the certificates
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for front-proxy-client
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--use-api
Use the Kubernetes certificate API to renew certificates
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md index 5d56ec7b5c..4c707b4a5c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md @@ -4,9 +4,7 @@ Generates a private key for signing service account tokens along with its public ### Synopsis -Generates the private key for signing service account tokens along with its public key, and saves them into sa.key and sa.pub files. - -If both files already exist, kubeadm skips the generation step and existing files will be used. +Generates the private key for signing service account tokens along with its public key, and saves them into sa.key and sa.pub files. If both files already exist, kubeadm skips the generation step and existing files will be used. Alpha Disclaimer: this command is currently alpha. @@ -34,7 +32,7 @@ kubeadm alpha phase certs sa [flags] --config string - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) @@ -49,3 +47,24 @@ kubeadm alpha phase certs sa [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md index a14adfcf44..3605a67b17 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md index 0a15bced4b..e940dae06b 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md @@ -78,7 +78,7 @@ kubeadm alpha phase controlplane all [flags] --feature-gates string - A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) + A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false) @@ -89,7 +89,7 @@ kubeadm alpha phase controlplane all [flags] - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -121,3 +121,24 @@ kubeadm alpha phase controlplane all [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md index 3939b997f4..de5fff7083 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md @@ -60,7 +60,7 @@ kubeadm alpha phase controlplane apiserver [flags] --feature-gates string - A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) + A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false) @@ -71,7 +71,7 @@ kubeadm alpha phase controlplane apiserver [flags] - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -89,3 +89,24 @@ kubeadm alpha phase controlplane apiserver [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md index 004692b024..402703698c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md @@ -50,7 +50,7 @@ kubeadm alpha phase controlplane controller-manager [flags] - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -68,3 +68,24 @@ kubeadm alpha phase controlplane controller-manager [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md index d8bab2226e..e07e4b46d8 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md @@ -43,7 +43,7 @@ kubeadm alpha phase controlplane scheduler [flags] - --kubernetes-version string     Default: "stable-1.10" + --kubernetes-version string     Default: "stable-1" Choose a specific Kubernetes version for the control plane @@ -61,3 +61,24 @@ kubeadm alpha phase controlplane scheduler [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md index 285144797f..60819008a3 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md index d3ca8e253a..19802040fc 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md @@ -58,3 +58,24 @@ kubeadm alpha phase etcd local [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md index 1c7c61dd0c..ba11bde684 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md index 4ed4e00b13..e58fad7829 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md @@ -68,3 +68,24 @@ kubeadm alpha phase kubeconfig admin [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md index fa98914fbc..ffb3610e9b 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md @@ -86,3 +86,24 @@ kubeadm alpha phase kubeconfig all [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md index 6cae50ba82..24f77d50af 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md @@ -68,3 +68,24 @@ kubeadm alpha phase kubeconfig controller-manager [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md index 9eaa2c3521..ff7c787b1d 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md @@ -77,3 +77,24 @@ kubeadm alpha phase kubeconfig kubelet [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md index b98f615b0b..6de62a33ce 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md @@ -68,3 +68,24 @@ kubeadm alpha phase kubeconfig scheduler [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md index b2f43935eb..9f7c0d92f0 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md @@ -89,3 +89,24 @@ kubeadm alpha phase kubeconfig user [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet.md index 726a98890c..648b219e76 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config.md index 8f2958f607..2c2d8ca004 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_annotate-cri.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_annotate-cri.md new file mode 100644 index 0000000000..5b9cd0fa6a --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_annotate-cri.md @@ -0,0 +1,76 @@ + +annotates the node with the given crisocket + +### Synopsis + + +Adds an annotation to the current node with the CRI socket specified in the kubeadm InitConfiguration object. + +Alpha Disclaimer: this command is currently alpha. + +``` +kubeadm alpha phase kubelet config annotate-cri [flags] +``` + +### Examples + +``` + kubeadm alpha phase kubelet config annotate-cri --config kubeadm.yaml +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
-h, --help
help for annotate-cri
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_download.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_download.md index d8b3b3cd5f..8f1118ee1e 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_download.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_download.md @@ -19,7 +19,7 @@ kubeadm alpha phase kubelet config download [flags] kubeadm alpha phase kubelet config download # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. - kubeadm alpha phase kubelet config download --kubelet-version v1.11.0 + kubeadm alpha phase kubelet config download --kubelet-version v1.12.0 ``` ### Options @@ -42,7 +42,7 @@ kubeadm alpha phase kubelet config download [flags] --kubeconfig string     Default: "/etc/kubernetes/kubelet.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. @@ -57,3 +57,24 @@ kubeadm alpha phase kubelet config download [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md index 56d653b7fb..91bf90d15e 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md @@ -18,7 +18,7 @@ kubeadm alpha phase kubelet config enable-dynamic [flags] ``` # Enables dynamic kubelet configuration for a Node. - kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.11.0 + kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.12.0 WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it may have surprising side-effects at this stage. @@ -44,7 +44,7 @@ kubeadm alpha phase kubelet config enable-dynamic [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. @@ -66,3 +66,24 @@ kubeadm alpha phase kubelet config enable-dynamic [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_upload.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_upload.md index eb56fe1d03..63584465ca 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_upload.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_upload.md @@ -1,10 +1,10 @@ -Uploads kubelet configuration to a ConfigMap based on a kubeadm MasterConfiguration file. +Uploads kubelet configuration to a ConfigMap based on a kubeadm InitConfiguration file. ### Synopsis -Uploads kubelet configuration extracted from the kubeadm MasterConfiguration object to a ConfigMap of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version. +Uploads kubelet configuration extracted from the kubeadm InitConfiguration object to a ConfigMap of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version. Alpha Disclaimer: this command is currently alpha. @@ -46,7 +46,28 @@ kubeadm alpha phase kubelet config upload [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. + + + + + + + +### Options inherited from parent commands + + + + + + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_write-to-disk.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_write-to-disk.md index 09bcad8394..02eaee18e0 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_write-to-disk.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_config_write-to-disk.md @@ -47,3 +47,24 @@ kubeadm alpha phase kubelet config write-to-disk [flags] +### Options inherited from parent commands + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_write-env-file.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_write-env-file.md index 7dc61eabb9..eadafa78dd 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_write-env-file.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubelet_write-env-file.md @@ -4,7 +4,7 @@ Writes an environment file with runtime flags for the kubelet. ### Synopsis -Writes an environment file with flags that should be passed to the kubelet executing on the master or node. This --config flag can either consume a MasterConfiguration object or a NodeConfiguration one, as this function is used for both "kubeadm init" and "kubeadm join". +Writes an environment file with flags that should be passed to the kubelet executing on the master or node. This --config flag can either consume a InitConfiguration object or a JoinConfiguration one, as this function is used for both "kubeadm init" and "kubeadm join". Alpha Disclaimer: this command is currently alpha. @@ -15,11 +15,11 @@ kubeadm alpha phase kubelet write-env-file [flags] ### Examples ``` - # Writes a dynamic environment file with kubelet flags from a MasterConfiguration file. + # Writes a dynamic environment file with kubelet flags from a InitConfiguration file. kubeadm alpha phase kubelet write-env-file --config masterconfig.yaml - # Writes a dynamic environment file with kubelet flags from a NodeConfiguration file. - kubeadm alpha phase kubelet write-env-file --config nodeConfig.yaml + # Writes a dynamic environment file with kubelet flags from a JoinConfiguration file. + kubeadm alpha phase kubelet write-env-file --config nodeconfig.yaml ``` ### Options @@ -50,3 +50,24 @@ kubeadm alpha phase kubelet write-env-file [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md index 9c456dd483..61e3e17473 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md @@ -49,7 +49,7 @@ kubeadm alpha phase mark-master [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. @@ -64,3 +64,24 @@ kubeadm alpha phase mark-master [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md index b47c3938c3..b41e864631 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md @@ -15,6 +15,13 @@ This command is not meant to be run on its own. See list of available subcommand + + --config string + + + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) + + -h, --help @@ -22,6 +29,34 @@ This command is not meant to be run on its own. See list of available subcommand help for preflight + + --ignore-preflight-errors stringSlice + + + A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. + + + + + + + +### Options inherited from parent commands + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md index 2a84b5a9c3..eb1b8de7ef 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md @@ -40,3 +40,38 @@ kubeadm alpha phase preflight master [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
--ignore-preflight-errors stringSlice
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md index 973c743a4c..2c0cfe2247 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md @@ -40,3 +40,38 @@ kubeadm alpha phase preflight node [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--config string
Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
--ignore-preflight-errors stringSlice
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md index 85f87530d2..a4543c9ee7 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md @@ -27,3 +27,24 @@ This command is not meant to be run on its own. See list of available subcommand +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md index 76e16d03e0..fc403a9d46 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md @@ -51,7 +51,7 @@ kubeadm alpha phase selfhosting convert-from-staticpods [flags] --feature-gates string - A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) + A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false) @@ -65,7 +65,28 @@ kubeadm alpha phase selfhosting convert-from-staticpods [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. + + + + + + + +### Options inherited from parent commands + + + + + + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md index c9b013f934..657b643004 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md @@ -48,7 +48,28 @@ kubeadm alpha phase upload-config [flags] - + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the clusterThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md index 301a76999b..37481780b1 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md @@ -69,3 +69,24 @@ source <(kubeadm completion zsh) +### Options inherited from parent commands + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md index 54a478a8ea..b840595320 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md @@ -35,7 +35,28 @@ kubeadm config [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster. + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. + + + + + + + +### Options inherited from parent commands + + + + + + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md index 85f978a88e..ee309006b8 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md @@ -44,7 +44,14 @@ kubeadm config images [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md index ca2a2119b5..345d832898 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md @@ -30,7 +30,7 @@ kubeadm config images list [flags] - + @@ -41,7 +41,7 @@ kubeadm config images list [flags] - + @@ -65,7 +65,14 @@ kubeadm config images list [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md index d5efa5ab05..83b3a6c10c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md @@ -27,17 +27,17 @@ kubeadm config images pull [flags] - + - + - + @@ -48,7 +48,7 @@ kubeadm config images pull [flags] - + @@ -72,7 +72,14 @@ kubeadm config images pull [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md index 2a41580170..eff30744e3 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md @@ -9,9 +9,9 @@ This command lets you convert configuration objects of older versions to the lat locally in the CLI tool without ever touching anything in the cluster. In this version of kubeadm, the following API versions are supported: - kubeadm.k8s.io/v1alpha2 -- kubeadm.k8s.io/v1alpha1 +- kubeadm.k8s.io/v1alpha3 -Further, kubeadm can only write out config of version "kubeadm.k8s.io/v1alpha2", but read both types. +Further, kubeadm can only write out config of version "kubeadm.k8s.io/v1alpha3", but read both types. So regardless of what version you pass to the --old-config parameter here, the API object will be read, deserialized, defaulted, converted, validated, and re-serialized when written to stdout or --new-config if specified. @@ -72,7 +72,14 @@ kubeadm config migrate [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print-default.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print-default.md index 3e011d9743..ede571108c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print-default.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print-default.md @@ -5,8 +5,8 @@ Print the default values for a kubeadm configuration object. -This command prints the default MasterConfiguration object that is used for 'kubeadm init' and 'kubeadm upgrade', -and the default NodeConfiguration object that is used for 'kubeadm join'. +This command prints the default InitConfiguration object that is used for 'kubeadm init' and 'kubeadm upgrade', +and the default JoinConfiguration object that is used for 'kubeadm join'. Note that sensitive values like the Bootstrap Token fields are replaced with silly values like {"abcdef.0123456789abcdef" "" "nil" [] []} in order to pass validation but not perform the real computation for creating a token. @@ -29,7 +29,7 @@ kubeadm config print-default [flags] - + @@ -57,7 +57,14 @@ kubeadm config print-default [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md index e20d2ca0c7..d16f6f9124 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md @@ -44,7 +44,14 @@ kubeadm config upload [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md index aa2905e2c1..87764b606f 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md @@ -57,7 +57,14 @@ kubeadm config upload from-file [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md index faf57f341f..bb660cbe41 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md @@ -64,7 +64,7 @@ kubeadm config upload from-flags [flags] - + @@ -75,7 +75,7 @@ kubeadm config upload from-flags [flags] - + @@ -127,7 +127,14 @@ kubeadm config upload from-flags [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md index 9869d43c8d..664055d815 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md @@ -48,7 +48,14 @@ kubeadm config view [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md index b846cf9034..c476ed5803 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md @@ -72,7 +72,7 @@ kubeadm init [flags] - + @@ -90,7 +90,7 @@ kubeadm init [flags] - + @@ -150,3 +150,24 @@ kubeadm init [flags] +### Options inherited from parent commands + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--feature-gates string
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false)
--kubernetes-version string     Default: "stable-1.10"--kubernetes-version string     Default: "stable-1"
Choose a specific Kubernetes version for the control plane.--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--cri-socket-path string     Default: "/var/run/dockershim.sock"--cri-socket string     Default: "/var/run/dockershim.sock"
Path to the CRI socket.Specify the CRI socket to connect to.
--feature-gates string
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false)
--kubernetes-version string     Default: "stable-1.10"--kubernetes-version string     Default: "stable-1"
Choose a specific Kubernetes version for the control plane.--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--api-objects stringSlice
A comma-separated list for API objects to print the default values for. Available values: [MasterConfiguration NodeConfiguration]. This flag unset means 'print all known objects'A comma-separated list for API objects to print the default values for. Available values: [InitConfiguration ClusterConfiguration JoinConfiguration KubeProxyConfiguration KubeletConfiguration MasterConfiguration]. This flag unset means 'print all known objects'
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--feature-gates string
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false)
--kubernetes-version string     Default: "stable-1.10"--kubernetes-version string     Default: "stable-1"
Choose a specific Kubernetes version for the control plane.--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--feature-gates string
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false)
--kubernetes-version string     Default: "stable-1.10"--kubernetes-version string     Default: "stable-1"
Choose a specific Kubernetes version for the control plane.
+ + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md index c321fe6af9..4643946ce5 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md @@ -28,7 +28,7 @@ value of this flag is specified as ":", where the supported hash type is "sha256". The hash is calculated over the bytes of the Subject Public Key Info (SPKI) object (as in RFC7469). This value is available in the output of "kubeadm init" or can be -calcuated using standard tools. The --discovery-token-ca-cert-hash flag +calculated using standard tools. The --discovery-token-ca-cert-hash flag may be repeated multiple times to allow more than one public key. If you cannot know the CA public key hash ahead of time, you can pass @@ -60,6 +60,20 @@ kubeadm join [flags] + + --apiserver-advertise-address string + + + If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. + + + + --apiserver-bind-port int32     Default: 6443 + + + If the node should host a new control plane instance, the port for the API Server to bind to. + + --config string @@ -85,7 +99,7 @@ kubeadm join [flags] --discovery-token string - A token used to validate cluster information fetched from the master. + A token used to validate cluster information fetched from the api server. @@ -102,11 +116,18 @@ kubeadm join [flags] For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. + + --experimental-control-plane + + + Create a new control plane instance on this node + + --feature-gates string - A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) + A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false) @@ -149,3 +170,24 @@ kubeadm join [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md index 5f5cd9b4be..d4f273f1c8 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md @@ -34,7 +34,7 @@ kubeadm reset [flags] - --force + -f, --force Reset the node without prompting for confirmation. @@ -59,3 +59,24 @@ kubeadm reset [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md index 56d1a06080..77e2596f6b 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md @@ -20,7 +20,7 @@ What is a bootstrap token more exactly? - The name of the Secret must be named "bootstrap-token-(token-id)". You can read more about bootstrap tokens here: - https://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/ + https://kubernetes.io/docs/admin/bootstrap-tokens/ ``` @@ -54,7 +54,28 @@ kubeadm token [flags] --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig file + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. + + + + + + + +### Options inherited from parent commands + + + + + + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md index d2ea7b1413..fe2a710103 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md @@ -100,7 +100,14 @@ kubeadm token create [token] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md index 8a47b4345d..3a92d9ff74 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md @@ -56,7 +56,14 @@ kubeadm token delete [token-value] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md index f76a8d9d1a..43aed13f1c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md @@ -61,7 +61,14 @@ kubeadm token generate [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md index a65b730a28..ed4f822fd4 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md @@ -53,7 +53,14 @@ kubeadm token list [flags] - + + + + + + + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md index 8bd7924283..dd3d5f9d89 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md @@ -19,34 +19,6 @@ kubeadm upgrade [flags] - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -54,27 +26,27 @@ kubeadm upgrade [flags] - - - - - - - - - - - - - - - - - - - - - + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig fileThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig fileThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig fileThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig fileThe KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
--allow-experimental-upgrades
Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes.
--allow-release-candidate-upgrades
Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes.
--config string
Path to kubeadm config file. WARNING: Usage of a configuration file is experimental!
--feature-gates string
A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
-h, --help
help for upgrade
--ignore-preflight-errors stringSlice
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"
The KubeConfig file to use when talking to the cluster.
--print-config
Specifies whether the configuration file that will be used in the upgrade should be printed or not.
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md index 15ae2a283e..87ace5dcc0 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md @@ -12,62 +12,6 @@ kubeadm upgrade apply [version] ### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--dry-run
Do not change any state, just output what actions would be performed.
--etcd-upgrade     Default: true
Perform the upgrade of etcd.
-f, --force
Force upgrading although some requirements might not be met. This also implies non-interactive mode.
-h, --help
help for apply
--image-pull-timeout duration     Default: 15m0s
The maximum amount of time to wait for the control plane pods to be downloaded.
-y, --yes
Perform the upgrade and do not prompt for confirmation (non-interactive mode).
- - - -### Options inherited from parent commands - @@ -93,14 +37,49 @@ kubeadm upgrade apply [version] - + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + @@ -111,10 +90,17 @@ kubeadm upgrade apply [version] - + - + + + + + + + + @@ -124,6 +110,34 @@ kubeadm upgrade apply [version] + + + + + + + + +
--config string
Path to kubeadm config file. WARNING: Usage of a configuration file is experimental!Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
--cri-socket string     Default: "/var/run/dockershim.sock"
Specify the CRI socket to connect to.
--dry-run
Do not change any state, just output what actions would be performed.
--etcd-upgrade     Default: true
Perform the upgrade of etcd.
--feature-gates string
A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false)
-f, --force
Force upgrading although some requirements might not be met. This also implies non-interactive mode.
-h, --help
help for apply
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"--image-pull-timeout duration     Default: 15m0s
The KubeConfig file to use when talking to the cluster.The maximum amount of time to wait for the control plane pods to be downloaded.
--kubeconfig string     Default: "/Users/zarnold/.kube/config"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
Specifies whether the configuration file that will be used in the upgrade should be printed or not.
-y, --yes
Perform the upgrade and do not prompt for confirmation (non-interactive mode).
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md index 64053f17fc..099dd2381c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md @@ -26,6 +26,13 @@ kubeadm upgrade diff [version] [flags] path to API server manifest + + --config string + + + Path to kubeadm config file (WARNING: Usage of a configuration file is experimental) + + -c, --context-lines int     Default: 3 @@ -69,52 +76,10 @@ kubeadm upgrade diff [version] [flags] - --allow-experimental-upgrades + --rootfs string - Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. - - - - --allow-release-candidate-upgrades - - - Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. - - - - --config string - - - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental! - - - - --feature-gates string - - - A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) - - - - --ignore-preflight-errors stringSlice - - - A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. - - - - --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - - - The KubeConfig file to use when talking to the cluster. - - - - --print-config - - - Specifies whether the configuration file that will be used in the upgrade should be printed or not. + [EXPERIMENTAL] The path to the 'real' host root filesystem. diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md index 037a07e56b..0c76e50de5 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md @@ -41,52 +41,10 @@ kubeadm upgrade node [flags] - --allow-experimental-upgrades + --rootfs string - Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. - - - - --allow-release-candidate-upgrades - - - Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. - - - - --config string - - - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental! - - - - --feature-gates string - - - A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) - - - - --ignore-preflight-errors stringSlice - - - A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. - - - - --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - - - The KubeConfig file to use when talking to the cluster. - - - - --print-config - - - Specifies whether the configuration file that will be used in the upgrade should be printed or not. + [EXPERIMENTAL] The path to the 'real' host root filesystem. diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_config.md index 3172348328..957e151227 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_config.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_config.md @@ -14,11 +14,11 @@ kubeadm upgrade node config [flags] ``` # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. - kubeadm upgrade node config --kubelet-version v1.11.0 + kubeadm upgrade node config --kubelet-version v1.12.0 # Simulates the downloading of the kubelet configuration from the ConfigMap in the cluster with a specific desired # version. Does not change any state locally on the node. - kubeadm upgrade node config --kubelet-version v1.11.0 --dry-run + kubeadm upgrade node config --kubelet-version v1.12.0 --dry-run ``` ### Options @@ -44,6 +44,13 @@ kubeadm upgrade node config [flags] help for config + + --kubeconfig string     Default: "/etc/kubernetes/kubelet.conf" + + + The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. + + --kubelet-version string @@ -66,52 +73,10 @@ kubeadm upgrade node config [flags] - --allow-experimental-upgrades + --rootfs string - Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. - - - - --allow-release-candidate-upgrades - - - Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. - - - - --config string - - - Path to kubeadm config file. WARNING: Usage of a configuration file is experimental! - - - - --feature-gates string - - - A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false) - - - - --ignore-preflight-errors stringSlice - - - A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. - - - - --kubeconfig string     Default: "/etc/kubernetes/admin.conf" - - - The KubeConfig file to use when talking to the cluster. - - - - --print-config - - - Specifies whether the configuration file that will be used in the upgrade should be printed or not. + [EXPERIMENTAL] The path to the 'real' host root filesystem. diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_experimental-control-plane.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_experimental-control-plane.md new file mode 100644 index 0000000000..091f7ac1ed --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_experimental-control-plane.md @@ -0,0 +1,79 @@ + +Upgrades the control plane instance deployed on this node. IMPORTANT. This command should be executed after executing `kubeadm upgrade apply` on another control plane instance + +### Synopsis + + +Downloads the kubelet configuration from a ConfigMap of the form "kubelet-config-1.X" in the cluster, where X is the minor version of the kubelet. kubeadm uses the --kubelet-version parameter to determine what the desired kubelet version is. Give + +``` +kubeadm upgrade node experimental-control-plane [flags] +``` + +### Examples + +``` + # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. + kubeadm upgrade node config --kubelet-version v1.12.0 + + # Simulates the downloading of the kubelet configuration from the ConfigMap in the cluster with a specific desired + # version. Does not change any state locally on the node. + kubeadm upgrade node config --kubelet-version v1.12.0 --dry-run +``` + +### Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--dry-run
Do not change any state, just output the actions that would be performed.
-h, --help
help for experimental-control-plane
--kubeconfig string     Default: "/etc/kubernetes/kubelet.conf"
The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
+ + + +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md index 23e42a6401..842e070f19 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md @@ -12,27 +12,6 @@ kubeadm upgrade plan [version] [flags] ### Options - - - - - - - - - - - - - - - -
-h, --help
help for plan
- - - -### Options inherited from parent commands - @@ -58,14 +37,21 @@ kubeadm upgrade plan [version] [flags] - + - + + + + + + + + @@ -76,10 +62,10 @@ kubeadm upgrade plan [version] [flags] - + - + @@ -94,3 +80,24 @@ kubeadm upgrade plan [version] [flags] +### Options inherited from parent commands + +
--config string
Path to kubeadm config file. WARNING: Usage of a configuration file is experimental!Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)
--feature-gates string
A set of key=value pairs that describe feature gates for various features.Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
A set of key=value pairs that describe feature gates for various features. Options are:
Auditing=true|false (ALPHA - default=false)
CoreDNS=true|false (default=true)
DynamicKubeletConfig=true|false (BETA - default=false)
-h, --help
help for plan
--kubeconfig string     Default: "/etc/kubernetes/admin.conf"--kubeconfig string     Default: "/Users/zarnold/.kube/config"
The KubeConfig file to use when talking to the cluster.The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.
+ + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md index 9d47c24691..9e824f238c 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md @@ -38,3 +38,24 @@ kubeadm version [flags] +### Options inherited from parent commands + + + + + + + + + + + + + + + + +
--rootfs string
[EXPERIMENTAL] The path to the 'real' host root filesystem.
+ + + diff --git a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md index 342149e7ce..67fcee964a 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -324,8 +324,9 @@ Please note that: 1. To make dynamic kubelet configuration work, flag `--dynamic-config-dir=/var/lib/kubelet/config/dynamic` should be specified in `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` -1. Kubelet init configuration can be changed by using kubeadm MasterConfiguration file by setting `.kubeletConfiguration.baseConfig`. - See [using kubeadm init with a configuration file](/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) for more detail +1. The kubelet configuration can be changed by passing a `KubeletConfiguration` object to `kubeadm init` or `kubeadm join` by using + a configuration file `--config some-file.yaml`. The `KubeletConfiguration` object can be separated from other objects such + as `InitConfiguration` using the `---` separator. For more details have a look at the `kubeadm config print-default` command. ### Wait for the control plane to come up @@ -346,7 +347,7 @@ If kubeadm is invoked with `--feature-gates=DynamicKubeletConfig`: (that is `system:bootstrappers:kubeadm:default-node-token` and `system:nodes` groups) 3. Enable the dynamic kubelet configuration feature for the initial master node by pointing `Node.spec.configSource` to the newly-created ConfigMap -### Save kubeadm MasterConfiguration in a ConfigMap for later reference +### Save the kubeadm ClusterConfiguration in a ConfigMap for later reference kubeadm saves the configuration passed to `kubeadm init`, either via flags or the config file, in a ConfigMap named `kubeadm-config` under `kube-system` namespace. diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md index ae8afd71df..ba29459a2a 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md @@ -41,6 +41,20 @@ You can create all required certificates with the `all` subcommand or selectivel {{< tab name="front-proxy-client" include="generated/kubeadm_alpha_phase_certs_front-proxy-client.md" />}} {{< /tabs >}} +## kubeadm alpha phase certs renew {#cmd-phase-certs-renew} + +You can renew all Kubernetes certificates using the `all` subcommand or renew them selectively. + +{{< tabs name="tab-certs-renew" >}} +{{< tab name="all" include="generated/kubeadm_alpha_phase_certs_renew_all.md" />}} +{{< tab name="apiserver-etcd-client" include="generated/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md" />}} +{{< tab name="apiserver-kubelet-client" include="generated/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md" />}} +{{< tab name="apiserver" include="generated/kubeadm_alpha_phase_certs_renew_apiserver.md" />}} +{{< tab name="etcd-healthcheck-client" include="generated/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md" />}} +{{< tab name="etcd-peer" include="generated/kubeadm_alpha_phase_certs_renew_etcd-peer.md" />}} +{{< tab name="etcd-server" include="generated/kubeadm_alpha_phase_certs_renew_etcd-server.md" />}} +{{< tab name="front-proxy-client" include="generated/kubeadm_alpha_phase_certs_renew_front-proxy-client.md" />}} +{{< /tabs >}} ## kubeadm alpha phase kubeconfig {#cmd-phase-kubeconfig} @@ -56,6 +70,18 @@ Additionally, the `user` subcommand supports the creation of kubeconfig files fo {{< tab name="user" include="generated/kubeadm_alpha_phase_kubeconfig_user.md" />}} {{< /tabs >}} +## kubeadm alpha phase kubelet {#cmd-phase-kubelet} + +Use the following commands to manage the kubelet phase. + +{{< tabs name="tab-kubelet" >}} +{{< tab name="config annotate-cri" include="generated/kubeadm_alpha_phase_kubelet_config_annotate-cri.md" />}} +{{< tab name="config download" include="generated/kubeadm_alpha_phase_kubelet_config_download.md" />}} +{{< tab name="config enable-dynamic" include="generated/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md" />}} +{{< tab name="config upload" include="generated/kubeadm_alpha_phase_kubelet_config_upload.md" />}} +{{< tab name="config write-to-disk" include="generated/kubeadm_alpha_phase_kubelet_config_write-to-disk.md" />}} +{{< tab name="write-env-file" include="generated/kubeadm_alpha_phase_kubelet_write-env-file.md" />}} +{{< /tabs >}} ## kubeadm alpha phase controlplane {#cmd-phase-controlplane} diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md index bcd3c39c88..9562bb7829 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md @@ -102,164 +102,16 @@ configuration file options. This file is passed in the `--config` option. In Kubernetes 1.11 and later, the default configuration can be printed out using the [kubeadm config print-default](/docs/reference/setup-tools/kubeadm/kubeadm-config/) command. -It is **recommended** that you migrate your old `v1alpha1` configuration to `v1alpha2` using +It is **recommended** that you migrate your old `v1alpha2` configuration to `v1alpha3` using the [kubeadm config migrate](/docs/reference/setup-tools/kubeadm/kubeadm-config/) command, -because `v1alpha1` will be removed in Kubernetes 1.12. +because `v1alpha2` will be removed in Kubernetes 1.13. For more details on each field in the configuration you can navigate to our -[API reference pages.] (https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#MasterConfiguration) - -Example of the kubeadm MasterConfiguration version `v1alpha2`: - -```yaml -apiVersion: kubeadm.k8s.io/v1alpha2 -kind: MasterConfiguration -kubernetesVersion: v1.11.0 -api: - advertiseAddress: 192.168.0.102 - bindPort: 6443 - controlPlaneEndpoint: "" -auditPolicy: - logDir: /var/log/kubernetes/audit - logMaxAge: 2 - path: "" -bootstrapTokens: -- groups: - - system:bootstrappers:kubeadm:default-node-token - token: abcdef.0123456789abcdef - ttl: 24h0m0s - usages: - - signing - - authentication -certificatesDir: /etc/kubernetes/pki -clusterName: kubernetes -etcd: - local: - dataDir: /var/lib/etcd - image: "" -imageRepository: k8s.gcr.io -kubeProxy: - config: - bindAddress: 0.0.0.0 - clientConnection: - acceptContentTypes: "" - burst: 10 - contentType: application/vnd.kubernetes.protobuf - kubeconfig: /var/lib/kube-proxy/kubeconfig.conf - qps: 5 - clusterCIDR: "" - configSyncPeriod: 15m0s - conntrack: - max: null - maxPerCore: 32768 - min: 131072 - tcpCloseWaitTimeout: 1h0m0s - tcpEstablishedTimeout: 24h0m0s - enableProfiling: false - healthzBindAddress: 0.0.0.0:10256 - hostnameOverride: "" - iptables: - masqueradeAll: false - masqueradeBit: 14 - minSyncPeriod: 0s - syncPeriod: 30s - ipvs: - ExcludeCIDRs: null - minSyncPeriod: 0s - scheduler: "" - syncPeriod: 30s - metricsBindAddress: 127.0.0.1:10249 - mode: "" - nodePortAddresses: null - oomScoreAdj: -999 - portRange: "" - resourceContainer: /kube-proxy - udpIdleTimeout: 250ms -kubeletConfiguration: - baseConfig: - address: 0.0.0.0 - authentication: - anonymous: - enabled: false - webhook: - cacheTTL: 2m0s - enabled: true - x509: - clientCAFile: /etc/kubernetes/pki/ca.crt - authorization: - mode: Webhook - webhook: - cacheAuthorizedTTL: 5m0s - cacheUnauthorizedTTL: 30s - cgroupDriver: cgroupfs - cgroupsPerQOS: true - clusterDNS: - - 10.96.0.10 - clusterDomain: cluster.local - containerLogMaxFiles: 5 - containerLogMaxSize: 10Mi - contentType: application/vnd.kubernetes.protobuf - cpuCFSQuota: true - cpuManagerPolicy: none - cpuManagerReconcilePeriod: 10s - enableControllerAttachDetach: true - enableDebuggingHandlers: true - enforceNodeAllocatable: - - pods - eventBurst: 10 - eventRecordQPS: 5 - evictionHard: - imagefs.available: 15% - memory.available: 100Mi - nodefs.available: 10% - nodefs.inodesFree: 5% - evictionPressureTransitionPeriod: 5m0s - failSwapOn: true - fileCheckFrequency: 20s - hairpinMode: promiscuous-bridge - healthzBindAddress: 127.0.0.1 - healthzPort: 10248 - httpCheckFrequency: 20s - imageGCHighThresholdPercent: 85 - imageGCLowThresholdPercent: 80 - imageMinimumGCAge: 2m0s - iptablesDropBit: 15 - iptablesMasqueradeBit: 14 - kubeAPIBurst: 10 - kubeAPIQPS: 5 - makeIPTablesUtilChains: true - maxOpenFiles: 1000000 - maxPods: 110 - nodeStatusUpdateFrequency: 10s - oomScoreAdj: -999 - podPidsLimit: -1 - port: 10250 - registryBurst: 10 - registryPullQPS: 5 - resolvConf: /etc/resolv.conf - rotateCertificates: true - runtimeRequestTimeout: 2m0s - serializeImagePulls: true - staticPodPath: /etc/kubernetes/manifests - streamingConnectionIdleTimeout: 4h0m0s - syncFrequency: 1m0s - volumeStatsAggPeriod: 1m0s -networking: - dnsDomain: cluster.local - podSubnet: "" - serviceSubnet: 10.96.0.0/12 -nodeRegistration: - criSocket: /var/run/dockershim.sock - name: your-host-name - taints: - - effect: NoSchedule - key: node-role.kubernetes.io/master -unifiedControlPlaneImage: "" -``` +[API reference pages.] (https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm) ### Adding kube-proxy parameters {#kube-proxy} -For information about kube-proxy parameters in the MasterConfiguration see: +For information about kube-proxy parameters in the kubeadm configuration see: - [kube-proxy](https://godoc.org/k8s.io/kubernetes/pkg/proxy/apis/config#KubeProxyConfiguration) For information about enabling IPVS mode with kubeadm see: @@ -329,7 +181,7 @@ Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manife Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" -Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" +Environment="KUBELET_CADVISOR_ARGS=" Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki" ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS ``` @@ -357,21 +209,11 @@ Here's a breakdown of what/why: API using this CA certificate. * `--authorization-mode=Webhook` authorizes requests to the Kubelet API by `POST`-ing a `SubjectAccessReview` to the API server. -* `--cadvisor-port=0` disables cAdvisor from listening to `0.0.0.0:4194` by default. - cAdvisor will still be run inside of the kubelet and its API can be accessed at - `https://{node-ip}:10250/stats/`. If you want to enable cAdvisor to listen on a - wide-open port, run: - - ```bash - sed -e "/cadvisor-port=0/d" -i /etc/systemd/system/kubelet.service.d/10-kubeadm.conf - systemctl daemon-reload - systemctl restart kubelet - ``` * `--rotate-certificates` auto rotate the kubelet client certificates by requesting new certificates from the `kube-apiserver` when the certificate expiration approaches. * `--cert-dir`the directory where the TLS certs are located. -### Use kubeadm with other CRI runtimes +### Use kubeadm with CRI runtimes Since v1.6.0, Kubernetes has enabled the use of CRI, Container Runtime Interface, by default. The container runtime used by default is Docker, which is enabled through the built-in @@ -384,6 +226,8 @@ Other CRI-based runtimes include: - [frakti](https://github.com/kubernetes/frakti) - [rkt](https://github.com/kubernetes-incubator/rktlet) +Refer to the [CRI installation instructions](/docs/setup/cri.md) for more information. + After you have successfully installed `kubeadm` and `kubelet`, execute these two additional steps: @@ -437,10 +281,11 @@ manager, and scheduler run as [DaemonSet pods](/docs/concepts/workloads/controll configured via the Kubernetes API instead of [static pods](/docs/tasks/administer-cluster/static-pod/) configured in the kubelet via static files. +To create a self-hosted cluster, pass the flag `--feature-gates=SelfHosting=true` to `kubeadm init`. + {{< caution >}} -**Caution:** Self-hosting is alpha, but is expected to become the default in -a future version. To create a self-hosted cluster, pass the `--feature-gates=SelfHosting=true` -flag to `kubeadm init`. +**Caution:** `SelfHosting` is an alpha feature. It is deprecated in 1.12 +and will be removed in 1.13. {{< /caution >}} {{< warning >}} @@ -463,6 +308,11 @@ instead. This requires very careful control over the authentication and authorization configuration for your cluster, and may not be appropriate for your environment. +{{< caution >}} +**Caution:** `StoreCertsInSecrets` is an alpha feature. It is deprecated in 1.12 +and will be removed in 1.13. +{{< /caution >}} + In kubeadm 1.8, the self-hosted portion of the control plane does not include etcd, which still runs as a static Pod. @@ -497,24 +347,25 @@ This process (steps 3-6) can also be triggered with `kubeadm phase selfhosting c For running kubeadm without an internet connection you have to pre-pull the required master images for the version of choice: -| Image Name | v1.8 release branch version | v1.9 release branch version | -|----------------------------------------------------------|-----------------------------|-----------------------------| -| k8s.gcr.io/kube-apiserver-${ARCH} | v1.8.x | v1.9.x | -| k8s.gcr.io/kube-controller-manager-${ARCH} | v1.8.x | v1.9.x | -| k8s.gcr.io/kube-scheduler-${ARCH} | v1.8.x | v1.9.x | -| k8s.gcr.io/kube-proxy-${ARCH} | v1.8.x | v1.9.x | -| k8s.gcr.io/etcd-${ARCH} | 3.0.17 | 3.1.10 | -| k8s.gcr.io/pause-${ARCH} | 3.0 | 3.0 | -| k8s.gcr.io/k8s-dns-sidecar-${ARCH} | 1.14.5 | 1.14.7 | -| k8s.gcr.io/k8s-dns-kube-dns-${ARCH} | 1.14.5 | 1.14.7 | -| k8s.gcr.io/k8s-dns-dnsmasq-nanny-${ARCH} | 1.14.5 | 1.14.7 | +| Image Name | v1.10 release branch version | +|--------------------------------------------|------------------------------| +| k8s.gcr.io/kube-apiserver-${ARCH} | v1.10.x | +| k8s.gcr.io/kube-controller-manager-${ARCH} | v1.10.x | +| k8s.gcr.io/kube-scheduler-${ARCH} | v1.10.x | +| k8s.gcr.io/kube-proxy-${ARCH} | v1.10.x | +| k8s.gcr.io/etcd-${ARCH} | 3.1.12 | +| k8s.gcr.io/pause-${ARCH} | 3.1 | +| k8s.gcr.io/k8s-dns-sidecar-${ARCH} | 1.14.8 | +| k8s.gcr.io/k8s-dns-kube-dns-${ARCH} | 1.14.8 | +| k8s.gcr.io/k8s-dns-dnsmasq-nanny-${ARCH} | 1.14.8 | +| coredns/coredns | 1.0.6 | -Here `v1.8.x` means the "latest patch release of the v1.8 branch". +Here `v1.10.x` means the "latest patch release of the v1.10 branch". `${ARCH}` can be one of: `amd64`, `arm`, `arm64`, `ppc64le` or `s390x`. If you run Kubernetes version 1.10 or earlier, and if you set `--feature-gates=CoreDNS=true`, -you must also use the image `coredns/coredns:1.0.2`, instead of the three `k8s-dns-*` images. +you must also use the `coredns/coredns` image, instead of the three `k8s-dns-*` images. In Kubernetes 1.11 and later, you can list and pull the images using the `kubeadm config images` sub-command: ``` @@ -522,6 +373,9 @@ kubeadm config images list kubeadm config images pull ``` +Starting with Kubernetes 1.12, the `k8s.gcr.io/kube-*`, `k8s.gcr.io/etcd` and `k8s.gcr.io/pause` images +don't require an `-${ARCH}` suffix. + ### Automating kubeadm Rather than copying the token you obtained from `kubeadm init` to each node, as diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md index eb9448b1e2..c0882d0b01 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md @@ -210,26 +210,17 @@ still considered alpha and may change in future versions. It's possible to configure `kubeadm join` with a configuration file instead of command line flags, and some more advanced features may only be available as -configuration file options. This file is passed in the `--config` option. +configuration file options. This file is passed using the `--config` flag and it must +contain a `JoinConfiguration` structure. -```json -apiVersion: kubeadm.k8s.io/v1alpha1 -kind: NodeConfiguration -caCertPath: -discoveryFile: -discoveryToken: -discoveryTokenAPIServers: -- -- -nodeName: -tlsBootstrapToken: -token: -discoveryTokenCACertHashes: -- -- -discoveryTokenUnsafeSkipCAVerification: +To print the default values of `JoinConfiguration` run the following command: + +```bash +kubeadm config print-default --api-objects=JoinConfiguration ``` +For details on individual fields in `JoinConfiguration` see [the godoc](https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#JoinConfiguration). + {{% /capture %}} {{% capture whatsnext %}} diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md index 55f61028f5..3fb5856448 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md @@ -26,6 +26,7 @@ For more version-specific upgrade guidance, see the following resources: * [1.9.x to 1.9.y upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9/) * [1.9.x to 1.9.y HA cluster upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha/) * [1.10 to 1.11 upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-11/) + * [1.11 to 1.12 upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12/) In Kubernetes v1.11.0 and later, you can use `kubeadm upgrade diff` to see the changes that would be applied to static pod manifests. @@ -42,6 +43,9 @@ applied to static pod manifests. ## kubeadm upgrade node config {#cmd-upgrade-node-config} {{< include "generated/kubeadm_upgrade_node_config.md" >}} +## kubeadm upgrade node experimental-control-plane {#cmd-experimental-control-plane} +{{< include "generated/kubeadm_upgrade_node_experimental-control-plane.md" >}} + {{% /capture %}} {{% capture whatsnext %}} diff --git a/content/en/docs/reference/setup-tools/kubefed/kubefed.md b/content/en/docs/reference/setup-tools/kubefed/kubefed.md index ce72a322ae..4d296ba22c 100644 --- a/content/en/docs/reference/setup-tools/kubefed/kubefed.md +++ b/content/en/docs/reference/setup-tools/kubefed/kubefed.md @@ -1,8 +1,3 @@ ---- -title: kubefed -notitle: true -weight: 10 ---- ## kubefed kubefed controls a Kubernetes Cluster Federation @@ -10,7 +5,7 @@ kubefed controls a Kubernetes Cluster Federation ### Synopsis -kubefed controls a Kubernetes Cluster Federation. +kubefed controls a Kubernetes Cluster Federation. Find more information at https://github.com/kubernetes/federation. @@ -24,7 +19,7 @@ kubefed [flags] --alsologtostderr log to standard error as well as files --as string Username to impersonate for the operation --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --cache-dir string Default HTTP cache directory (default "/Users/jrondeau/.kube/http-cache") + --cache-dir string Default HTTP cache directory (default "/Users/zarnold/.kube/http-cache") --certificate-authority string Path to a cert file for the certificate authority --client-certificate string Path to a client certificate file for TLS --client-key string Path to a client key file for TLS @@ -62,10 +57,10 @@ kubefed [flags] ``` ### SEE ALSO -* [kubefed init](/docs/reference/setup-tools/kubefed/kubefed-init/) - Initialize a federation control plane -* [kubefed join](/docs/reference/setup-tools/kubefed/kubefed-join/) - Join a cluster to a federation -* [kubefed options](/docs/reference/setup-tools/kubefed/kubefed-options/) - Print the list of flags inherited by all commands -* [kubefed unjoin](/docs/reference/setup-tools/kubefed/kubefed-unjoin/) - Unjoin a cluster from a federation -* [kubefed version](/docs/reference/setup-tools/kubefed/kubefed-version/) - Print the client and server version information +* [kubefed init](kubefed_init.md) - Initialize a federation control plane +* [kubefed join](kubefed_join.md) - Join a cluster to a federation +* [kubefed options](kubefed_options.md) - Print the list of flags inherited by all commands +* [kubefed unjoin](kubefed_unjoin.md) - Unjoin a cluster from a federation +* [kubefed version](kubefed_version.md) - Print the client and server version information -###### Auto generated by spf13/cobra on 25-Mar-2018 +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/setup-tools/kubefed/kubefed_init.md b/content/en/docs/reference/setup-tools/kubefed/kubefed_init.md new file mode 100644 index 0000000000..69da8c83fe --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubefed/kubefed_init.md @@ -0,0 +1,101 @@ +## kubefed init + +Initialize a federation control plane + +### Synopsis + + +Init initializes a federation control plane. + + Federation control plane is hosted inside a Kubernetes + cluster. The host cluster must be specified using the + --host-cluster-context flag. + +``` +kubefed init FEDERATION_NAME --host-cluster-context=HOST_CONTEXT [flags] +``` + +### Examples + +``` + # Initialize federation control plane for a federation + # named foo in the host cluster whose local kubeconfig + # context is bar. + kubefed init foo --host-cluster-context=bar +``` + +### Options + +``` + --api-server-advertise-address string Preferred address to advertise api server nodeport service. Valid only if 'api-server-service-type=NodePort'. + --api-server-port int32 Preferred port to use for api server nodeport service (0 for random port assignment). Valid only if 'api-server-service-type=NodePort'. + --api-server-service-type string The type of service to create for federation API server. Options: 'LoadBalancer' (default), 'NodePort'. (default "LoadBalancer") + --apiserver-arg-overrides string comma separated list of federation-apiserver arguments to override: Example "--arg1=value1,--arg2=value2..." + --apiserver-enable-basic-auth Enables HTTP Basic authentication for the federation-apiserver. Defaults to false. + --apiserver-enable-token-auth Enables token authentication for the federation-apiserver. Defaults to false. + --controllermanager-arg-overrides string comma separated list of federation-controller-manager arguments to override: Example "--arg1=value1,--arg2=value2..." + --credentials-kubeconfig string Kubeconfig file path on local file system, which should be used to authenticate with host cluster or the joining cluster (instead of the default kubeconfig).This can be used to override the RBAC based authentication while initialising the federation control plane or joining a cluster to one, even when the cluster exposes the RBAC API. + --dns-provider string Dns provider to be used for this deployment. + --dns-provider-config string Config file path on local file system for configuring DNS provider. + --dns-zone-name string DNS suffix for this federation. Federated Service DNS names are published with this suffix. + --dry-run dry run without sending commands to server. + --etcd-image string Image to use for etcd server. (default "gcr.io/google_containers/etcd:3.1.10") + --etcd-persistent-storage Use persistent volume for etcd. Defaults to 'true'. (default true) + --etcd-pv-capacity string Size of persistent volume claim to be used for etcd. (default "10Gi") + --etcd-pv-storage-class string The storage class of the persistent volume claim used for etcd. Must be provided if a default storage class is not enabled for the host cluster. + --etcd-servers string External pre-deployed etcd server to be used to store federation state. + --federation-system-namespace string Namespace in the host cluster where the federation system components are installed (default "federation-system") + -h, --help help for init + --host-cluster-context string Host cluster context + --image string Image to use for federation API server and controller manager binaries. (default "gcr.io/k8s-jkns-e2e-gce-federation/fcp-amd64:v0.0.0-master_$Format:%h$") + --image-pull-policy string PullPolicy describes a policy for if/when to pull a container image. The default pull policy is IfNotPresent which will not pull an image if it already exists. (default "IfNotPresent") + --image-pull-secrets string Provide secrets that can access the private registry. + --node-selector string comma separated list of nodeSelector arguments: Example "arg1=value1,arg2=value2..." +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --cache-dir string Default HTTP cache directory (default "/Users/zarnold/.kube/http-cache") + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cloud-provider-gce-lb-src-cidrs cidrs CIDRs opened in GCE firewall for LB traffic proxy & health checks (default 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16) + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --default-not-ready-toleration-seconds int Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --default-unreachable-toleration-seconds int Indicates the tolerationSeconds of the toleration for unreachable:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --ir-data-source string Data source used by InitialResources. Supported options: influxdb, gcm. (default "influxdb") + --ir-dbname string InfluxDB database name which contains metrics required by InitialResources (default "k8s") + --ir-hawkular string Hawkular configuration URL + --ir-influxdb-host string Address of InfluxDB which contains metrics required by InitialResources (default "localhost:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:api/proxy") + --ir-namespace-only Whether the estimation should be made only based on data from the same namespace. + --ir-password string Password used for connecting to InfluxDB (default "root") + --ir-percentile int Which percentile of samples should InitialResources use when estimating resources. For experiment purposes. (default 90) + --ir-user string User used for connecting to InfluxDB (default "root") + --kubeconfig string Path to the kubeconfig file to use for CLI requests. + --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) + --log-dir string If non-empty, write log files in this directory + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --logtostderr log to standard error instead of files (default true) + --match-server-version Require server version to match client version + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -s, --server string The address and port of the Kubernetes API server + --stderrthreshold severity logs at or above this threshold go to stderr (default 2) + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --v Level log level for V logs + --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO +* [kubefed](kubefed.md) - kubefed controls a Kubernetes Cluster Federation + +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/setup-tools/kubefed/kubefed_join.md b/content/en/docs/reference/setup-tools/kubefed/kubefed_join.md new file mode 100644 index 0000000000..79b29a4f99 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubefed/kubefed_join.md @@ -0,0 +1,95 @@ +## kubefed join + +Join a cluster to a federation + +### Synopsis + + +Join adds a cluster to a federation. + + Current context is assumed to be a federation API + server. Please use the --context flag otherwise. + +``` +kubefed join CLUSTER_NAME --host-cluster-context=HOST_CONTEXT [flags] +``` + +### Examples + +``` + # Join a cluster to a federation by specifying the + # cluster name and the context name of the federation + # control plane's host cluster. Cluster name must be + # a valid RFC 1123 subdomain name. Cluster context + # must be specified if the cluster name is different + # than the cluster's context in the local kubeconfig. + kubefed join foo --host-cluster-context=bar +``` + +### Options + +``` + --allow-missing-template-keys If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. (default true) + --cluster-context string Name of the cluster's context in the local kubeconfig. Defaults to cluster name if unspecified. + --credentials-kubeconfig string Kubeconfig file path on local file system, which should be used to authenticate with host cluster or the joining cluster (instead of the default kubeconfig).This can be used to override the RBAC based authentication while initialising the federation control plane or joining a cluster to one, even when the cluster exposes the RBAC API. + --dry-run If true, only print the object that would be sent, without sending it. + --federation-system-namespace string Namespace in the host cluster where the federation system components are installed (default "federation-system") + --generator string The name of the API generator to use. (default "cluster/v1beta1") + -h, --help help for join + --host-cluster-context string Host cluster context + --no-headers When using the default or custom-column output format, don't print headers (default print headers). + -o, --output string Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. + --save-config If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future. + -a, --show-all When printing, show all resources (default hide terminated pods.) + --show-labels When printing, show all labels as the last column (default hide labels column) + --sort-by string If non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string. + --template string Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + --validate If true, use a schema to validate the input before sending it (default true) +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --cache-dir string Default HTTP cache directory (default "/Users/zarnold/.kube/http-cache") + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cloud-provider-gce-lb-src-cidrs cidrs CIDRs opened in GCE firewall for LB traffic proxy & health checks (default 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16) + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --default-not-ready-toleration-seconds int Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --default-unreachable-toleration-seconds int Indicates the tolerationSeconds of the toleration for unreachable:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --ir-data-source string Data source used by InitialResources. Supported options: influxdb, gcm. (default "influxdb") + --ir-dbname string InfluxDB database name which contains metrics required by InitialResources (default "k8s") + --ir-hawkular string Hawkular configuration URL + --ir-influxdb-host string Address of InfluxDB which contains metrics required by InitialResources (default "localhost:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:api/proxy") + --ir-namespace-only Whether the estimation should be made only based on data from the same namespace. + --ir-password string Password used for connecting to InfluxDB (default "root") + --ir-percentile int Which percentile of samples should InitialResources use when estimating resources. For experiment purposes. (default 90) + --ir-user string User used for connecting to InfluxDB (default "root") + --kubeconfig string Path to the kubeconfig file to use for CLI requests. + --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) + --log-dir string If non-empty, write log files in this directory + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --logtostderr log to standard error instead of files (default true) + --match-server-version Require server version to match client version + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -s, --server string The address and port of the Kubernetes API server + --stderrthreshold severity logs at or above this threshold go to stderr (default 2) + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --v Level log level for V logs + --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO +* [kubefed](kubefed.md) - kubefed controls a Kubernetes Cluster Federation + +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/setup-tools/kubefed/kubefed_options.md b/content/en/docs/reference/setup-tools/kubefed/kubefed_options.md new file mode 100644 index 0000000000..d1255f2865 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubefed/kubefed_options.md @@ -0,0 +1,72 @@ +## kubefed options + +Print the list of flags inherited by all commands + +### Synopsis + + +Print the list of flags inherited by all commands + +``` +kubefed options [flags] +``` + +### Examples + +``` + # Print flags inherited by all commands + kubefed options +``` + +### Options + +``` + -h, --help help for options +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --cache-dir string Default HTTP cache directory (default "/Users/zarnold/.kube/http-cache") + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cloud-provider-gce-lb-src-cidrs cidrs CIDRs opened in GCE firewall for LB traffic proxy & health checks (default 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16) + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --default-not-ready-toleration-seconds int Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --default-unreachable-toleration-seconds int Indicates the tolerationSeconds of the toleration for unreachable:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --ir-data-source string Data source used by InitialResources. Supported options: influxdb, gcm. (default "influxdb") + --ir-dbname string InfluxDB database name which contains metrics required by InitialResources (default "k8s") + --ir-hawkular string Hawkular configuration URL + --ir-influxdb-host string Address of InfluxDB which contains metrics required by InitialResources (default "localhost:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:api/proxy") + --ir-namespace-only Whether the estimation should be made only based on data from the same namespace. + --ir-password string Password used for connecting to InfluxDB (default "root") + --ir-percentile int Which percentile of samples should InitialResources use when estimating resources. For experiment purposes. (default 90) + --ir-user string User used for connecting to InfluxDB (default "root") + --kubeconfig string Path to the kubeconfig file to use for CLI requests. + --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) + --log-dir string If non-empty, write log files in this directory + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --logtostderr log to standard error instead of files (default true) + --match-server-version Require server version to match client version + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -s, --server string The address and port of the Kubernetes API server + --stderrthreshold severity logs at or above this threshold go to stderr (default 2) + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --v Level log level for V logs + --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO +* [kubefed](kubefed.md) - kubefed controls a Kubernetes Cluster Federation + +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/setup-tools/kubefed/kubefed_unjoin.md b/content/en/docs/reference/setup-tools/kubefed/kubefed_unjoin.md new file mode 100644 index 0000000000..ae80ef3bb8 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubefed/kubefed_unjoin.md @@ -0,0 +1,82 @@ +## kubefed unjoin + +Unjoin a cluster from a federation + +### Synopsis + + +Unjoin a cluster from a federation. + + Current context is assumed to be a federation endpoint. + Please use the --context flag otherwise. + +``` +kubefed unjoin CLUSTER_NAME --host-cluster-context=HOST_CONTEXT [flags] +``` + +### Examples + +``` + # Unjoin the specified cluster from a federation. + # Federation control plane's host cluster context name + # must be specified via the --host-cluster-context flag + # to properly cleanup the credentials. + kubectl unjoin foo --host-cluster-context=bar --cluster-context=baz +``` + +### Options + +``` + --cluster-context string Name of the cluster's context in the local kubeconfig. Defaults to cluster name if unspecified. + --credentials-kubeconfig string Kubeconfig file path on local file system, which should be used to authenticate with host cluster or the joining cluster (instead of the default kubeconfig).This can be used to override the RBAC based authentication while initialising the federation control plane or joining a cluster to one, even when the cluster exposes the RBAC API. + --federation-system-namespace string Namespace in the host cluster where the federation system components are installed (default "federation-system") + -h, --help help for unjoin + --host-cluster-context string Host cluster context +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --cache-dir string Default HTTP cache directory (default "/Users/zarnold/.kube/http-cache") + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cloud-provider-gce-lb-src-cidrs cidrs CIDRs opened in GCE firewall for LB traffic proxy & health checks (default 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16) + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --default-not-ready-toleration-seconds int Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --default-unreachable-toleration-seconds int Indicates the tolerationSeconds of the toleration for unreachable:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --ir-data-source string Data source used by InitialResources. Supported options: influxdb, gcm. (default "influxdb") + --ir-dbname string InfluxDB database name which contains metrics required by InitialResources (default "k8s") + --ir-hawkular string Hawkular configuration URL + --ir-influxdb-host string Address of InfluxDB which contains metrics required by InitialResources (default "localhost:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:api/proxy") + --ir-namespace-only Whether the estimation should be made only based on data from the same namespace. + --ir-password string Password used for connecting to InfluxDB (default "root") + --ir-percentile int Which percentile of samples should InitialResources use when estimating resources. For experiment purposes. (default 90) + --ir-user string User used for connecting to InfluxDB (default "root") + --kubeconfig string Path to the kubeconfig file to use for CLI requests. + --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) + --log-dir string If non-empty, write log files in this directory + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --logtostderr log to standard error instead of files (default true) + --match-server-version Require server version to match client version + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -s, --server string The address and port of the Kubernetes API server + --stderrthreshold severity logs at or above this threshold go to stderr (default 2) + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --v Level log level for V logs + --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO +* [kubefed](kubefed.md) - kubefed controls a Kubernetes Cluster Federation + +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/setup-tools/kubefed/kubefed_version.md b/content/en/docs/reference/setup-tools/kubefed/kubefed_version.md new file mode 100644 index 0000000000..eb2cfdbfff --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubefed/kubefed_version.md @@ -0,0 +1,75 @@ +## kubefed version + +Print the client and server version information + +### Synopsis + + +Print the client and server version information for the current context + +``` +kubefed version [flags] +``` + +### Examples + +``` + # Print the client and server versions for the current context + kubefed version +``` + +### Options + +``` + --client Client version only (no server required). + -h, --help help for version + -o, --output string One of 'yaml' or 'json'. + --short Print just the version number. +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --cache-dir string Default HTTP cache directory (default "/Users/zarnold/.kube/http-cache") + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cloud-provider-gce-lb-src-cidrs cidrs CIDRs opened in GCE firewall for LB traffic proxy & health checks (default 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16) + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --default-not-ready-toleration-seconds int Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --default-unreachable-toleration-seconds int Indicates the tolerationSeconds of the toleration for unreachable:NoExecute that is added by default to every pod that does not already have such a toleration. (default 300) + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --ir-data-source string Data source used by InitialResources. Supported options: influxdb, gcm. (default "influxdb") + --ir-dbname string InfluxDB database name which contains metrics required by InitialResources (default "k8s") + --ir-hawkular string Hawkular configuration URL + --ir-influxdb-host string Address of InfluxDB which contains metrics required by InitialResources (default "localhost:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:api/proxy") + --ir-namespace-only Whether the estimation should be made only based on data from the same namespace. + --ir-password string Password used for connecting to InfluxDB (default "root") + --ir-percentile int Which percentile of samples should InitialResources use when estimating resources. For experiment purposes. (default 90) + --ir-user string User used for connecting to InfluxDB (default "root") + --kubeconfig string Path to the kubeconfig file to use for CLI requests. + --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) + --log-dir string If non-empty, write log files in this directory + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --logtostderr log to standard error instead of files (default true) + --match-server-version Require server version to match client version + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -s, --server string The address and port of the Kubernetes API server + --stderrthreshold severity logs at or above this threshold go to stderr (default 2) + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --v Level log level for V logs + --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO +* [kubefed](kubefed.md) - kubefed controls a Kubernetes Cluster Federation + +###### Auto generated by spf13/cobra on 24-Sep-2018 diff --git a/content/en/docs/reference/using-api/api-concepts.md b/content/en/docs/reference/using-api/api-concepts.md index aac69ea32f..623e2b9937 100644 --- a/content/en/docs/reference/using-api/api-concepts.md +++ b/content/en/docs/reference/using-api/api-concepts.md @@ -284,6 +284,51 @@ An encoded Protobuf message with the following IDL: Clients that receive a response in `application/vnd.kubernetes.protobuf` that does not match the expected prefix should reject the response, as future versions may need to alter the serialization format in an incompatible way and will do so by changing the prefix. + +## Dry run + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} In version 1.12, if the dry run alpha feature is enabled, the modifying verbs (`POST`, `PUT`, `PATCH`, and `DELETE`) can accept requests in a dry run mode. Dry run mode helps to evaluate a request through the typical request stages (admission chain, validation, merge conflicts) up until persisting objects to storage. The response body for the request is as close as possible to a non dry run response. The system guarantees that dry run requests will not be persisted in storage or have any other side effects. + + +### Enable the dry run alpha feature + +Dry run is an alpha feature, so it is disabled by default. To turn it on, +you need to: + +* Include "DryRun=true" in the `--feature-gates` flag when starting + `kube-apiserver`. If you have multiple `kube-apiserver` replicas, all should + have the same flag setting. + +If this feature is not enabled, all requests with a modifying verb (`POST`, `PUT`, `PATCH`, and `DELETE`) which set the `dryRun` query parameter will be rejected with a 400 Bad Request error. Kubernetes 1.11 always rejects dry run requests like this, so it is safe for clients to make dry run requests even if the feature is not enabled on the server, as long as the server version is >= 1.11. + + +### Make a dry run request + +Dry run is triggered by setting the `dryRun` query parameter. This parameter is a string, working as an enum, and in 1.12 the only accepted values are: + +* `All`: Every stage runs as normal, except for the final storage stage. Admission controllers are run to check that the request is valid, mutating controllers mutate the request, merge is performed on `PATCH`, fields are defaulted, and schema validation occurs. The changes are not persisted to the underlying storage, but the final object which would have been persisted is still returned to the user, along with the normal status code. If the request would trigger an admission controller which would have side effects, the request will be failed rather than risk an unwanted side effect. Admission webhooks can now declare (in their configuration object) that they do not have side effects to prevent this. All built in admission control plugins support dry run. +* Leave the value empty, which is also the default: Keep the default modifying behavior. + +For example: + + POST /api/v1/namespaces/test/pods?dryRun=All + Content-Type: application/json + Accept: application/json + +The response would look the same as for non dry run request, but the values of some generated fields may differ. + + +### Generated values + +Some values of an object are typically generated before the object is persisted. It is important not to rely upon the values of these fields set by a dry run request, since these values will likely be different in dry run mode from when the real request is made. Some of these fields are: + +* `name`: if `generateName` is set, `name` will have a unique random name +* `creationTimestamp`/`deletionTimestamp`: records the time of creation/deletion +* `UID`: uniquely identifies the object and is randomly generated (non-deterministic) +* `resourceVersion`: tracks the persisted version of the object +* Any field set by a mutating admission controller +* For the `Service` resource: Ports or IPs that kube-apiserver assigns to v1.Service objects + {{% /capture %}} diff --git a/content/en/docs/setup/cri.md b/content/en/docs/setup/cri.md new file mode 100644 index 0000000000..5ff203d776 --- /dev/null +++ b/content/en/docs/setup/cri.md @@ -0,0 +1,226 @@ +--- +reviewers: +- vincepri +- bart0sh +title: CRI installation +content_template: templates/concept +weight: 100 +--- +{{% capture overview %}} +Since v1.6.0, Kubernetes has enabled the use of CRI, Container Runtime Interface, by default. +This page contains installation instruction for various runtimes. + +{{% /capture %}} + +{{% capture body %}} + +Please proceed with executing the following commands based on your OS as root. +You may become the root user by executing `sudo -i` after SSH-ing to each host. + +## Docker + +On each of your machines, install Docker. +Version 18.06 is recommended, but 1.11, 1.12, 1.13 and 17.03 are known to work as well. +Keep track of the latest verified Docker version in the Kubernetes release notes. + +Use the following commands to install Docker on your system: + +{{< tabs name="tab-cri-docker-installation" >}} +{{< tab name="Ubuntu 16.04" codelang="bash" >}} +# Install Docker from Ubuntu's repositories: +apt-get update +apt-get install -y docker.io + +# or install Docker CE 18.06 from Docker's repositories for Ubuntu or Debian: + +## Install prerequisites. +apt-get update && apt-get install apt-transport-https ca-certificates curl software-properties-common + +## Download GPG key. +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - + +## Add docker apt repository. +add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" + +## Install docker. +apt-get update && apt-get install docker-ce=18.06.0~ce~3-0~ubuntu + +# Setup daemon. +cat > /etc/docker/daemon.json <}} +{{< tab name="CentOS/RHEL 7.4+" codelang="bash" >}} + +# Install Docker from CentOS/RHEL repository: +yum install -y docker + +# or install Docker CE 18.06 from Docker's CentOS repositories: + +## Install prerequisites. +yum install yum-utils device-mapper-persistent-data lvm2 + +## Add docker repository. +yum-config-manager \ + --add-repo \ + https://download.docker.com/linux/centos/docker-ce.repo + +## Install docker. +yum update && yum install docker-ce-18.06.1.ce + +# Setup daemon. +cat > /etc/docker/daemon.json <}} +{{< /tabs >}} + +Refer to the [official Docker installation guides](https://docs.docker.com/engine/installation/) +for more information. + +## CRI-O + +This section contains the necessary steps to install `CRI-O` as CRI runtime. + +Use the following commands to install CRI-O on your system: + +### Prerequisites + +```shell +modprobe overlay +modprobe br_netfilter + +# Setup required sysctl params, these persist across reboots. +cat > /etc/sysctl.d/99-kubernetes-cri.conf <}} +{{< tab name="Ubuntu 16.04" codelang="bash" >}} + +# Install prerequisites +apt-get update +apt-get install software-properties-common + +add-apt-repository ppa:projectatomic/ppa +apt-get update + +# Install CRI-O +apt-get install cri-o-1.11 + +{{< /tab >}} +{{< tab name="CentOS/RHEL 7.4+" codelang="bash" >}} + +# Install prerequisites +yum-config-manager --add-repo=https://cbs.centos.org/repos/paas7-crio-311-candidate/x86_64/os/ + +# Install CRI-O +yum install --nogpgcheck cri-o + +{{< /tab >}} +{{< /tabs >}} + +### Start CRI-O + +``` +systemctl start crio +``` + +Refer to the [CRI-O installation guide](https://github.com/kubernetes-sigs/cri-o#getting-started) +for more information. + +## Containerd + +This section contains the necessary steps to use `containerd` as CRI runtime. + +Use the following commands to install Containerd on your system: + +### Prerequisites + +```shell +modprobe overlay +modprobe br_netfilter + +# Setup required sysctl params, these persist across reboots. +cat > /etc/sysctl.d/99-kubernetes-cri.conf <}} +{{< tab name="Ubuntu 16.04+" codelang="bash" >}} +apt-get install -y libseccomp2 +{{< /tab >}} +{{< tab name="CentOS/RHEL 7.4+" codelang="bash" >}} +yum install -y libseccomp +{{< /tab >}} +{{< /tabs >}} + +### Install containerd + +[Containerd releases](https://github.com/containerd/containerd/releases) are published regularly, the values below are hardcoded to the latest version available at the time of writing. Please check for newer versions and hashes [here](https://storage.googleapis.com/cri-containerd-release). + +```shell +# Export required environment variables. +export CONTAINERD_VERSION="1.1.2" +export CONTAINERD_SHA256="d4ed54891e90a5d1a45e3e96464e2e8a4770cd380c21285ef5c9895c40549218" + +# Download containerd tar. +wget https://storage.googleapis.com/cri-containerd-release/cri-containerd-${CONTAINERD_VERSION}.linux-amd64.tar.gz + +# Check hash. +echo "${CONTAINERD_SHA256} cri-containerd-${CONTAINERD_VERSION}.linux-amd64.tar.gz" | sha256sum --check - + +# Unpack. +tar --no-overwrite-dir -C / -xzf cri-containerd-${CONTAINERD_VERSION}.linux-amd64.tar.gz + +# Start containerd. +systemctl start containerd +``` + +## Other CRI runtimes: rktlet and frakti + +Refer to the [Frakti QuickStart guide](https://github.com/kubernetes/frakti#quickstart) and [Rktlet Getting Started guide](https://github.com/kubernetes-incubator/rktlet/blob/master/docs/getting-started-guide.md) for more information. + +{{% /capture %}} diff --git a/content/en/docs/setup/custom-cloud/node.yaml b/content/en/docs/setup/custom-cloud/node.yaml index 503d67dd55..9f5caff49b 100644 --- a/content/en/docs/setup/custom-cloud/node.yaml +++ b/content/en/docs/setup/custom-cloud/node.yaml @@ -83,7 +83,6 @@ coreos: --api-servers=:8080 \ --allow-privileged=true \ --logtostderr=true \ - --cadvisor-port=4194 \ --healthz-bind-address=0.0.0.0 \ --healthz-port=10248 Restart=always diff --git a/content/en/docs/setup/independent/control-plane-flags.md b/content/en/docs/setup/independent/control-plane-flags.md index b1d1f4ebca..ba01d29b4c 100644 --- a/content/en/docs/setup/independent/control-plane-flags.md +++ b/content/en/docs/setup/independent/control-plane-flags.md @@ -20,7 +20,7 @@ These fields consist of `key: value` pairs. To override a flag for a control pla 2. Add the flags to override to the field. For more details on each field in the configuration you can navigate to our -[API reference pages](https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#MasterConfiguration). +[API reference pages](https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#ClusterConfiguration). {{% /capture %}} @@ -32,11 +32,11 @@ For details, see the [reference documentation for kube-apiserver](https://kubern Example usage: ```yaml -apiVersion: kubeadm.k8s.io/v1alpha2 -kind: MasterConfiguration -kubernetesVersion: v1.11.0 +apiVersion: kubeadm.k8s.io/v1alpha3 +kind: ClusterConfiguration +kubernetesVersion: v1.12.0 metadata: - name: 1.11-sample + name: 1.12-sample apiServerExtraArgs: advertise-address: 192.168.0.103 anonymous-auth: false @@ -50,11 +50,11 @@ For details, see the [reference documentation for kube-controller-manager](https Example usage: ```yaml -apiVersion: kubeadm.k8s.io/v1alpha2 -kind: MasterConfiguration -kubernetesVersion: v1.11.0 +apiVersion: kubeadm.k8s.io/v1alpha3 +kind: ClusterConfiguration +kubernetesVersion: v1.12.0 metadata: - name: 1.11-sample + name: 1.12-sample controllerManagerExtraArgs: cluster-signing-key-file: /home/johndoe/keys/ca.key bind-address: 0.0.0.0 @@ -67,11 +67,11 @@ For details, see the [reference documentation for kube-scheduler](https://kubern Example usage: ```yaml -apiVersion: kubeadm.k8s.io/v1alpha2 -kind: MasterConfiguration -kubernetesVersion: v1.11.0 +apiVersion: kubeadm.k8s.io/v1alpha3 +kind: ClusterConfiguration +kubernetesVersion: v1.12.0 metadata: - name: 1.11-sample + name: 1.12-sample schedulerExtraArgs: address: 0.0.0.0 config: /home/johndoe/schedconfig.yaml diff --git a/content/en/docs/setup/independent/create-cluster-kubeadm.md b/content/en/docs/setup/independent/create-cluster-kubeadm.md index 94efe78911..cd23475401 100644 --- a/content/en/docs/setup/independent/create-cluster-kubeadm.md +++ b/content/en/docs/setup/independent/create-cluster-kubeadm.md @@ -69,6 +69,7 @@ timeframe; which also applies to `kubeadm`. | v1.9.x | December 2017 | September 2018   | | v1.10.x | March 2018 | December 2018   | | v1.11.x | June 2018 | March 2019   | +| v1.12.x | September 2018 | June 2019   | {{% /capture %}} diff --git a/content/en/docs/setup/independent/high-availability.md b/content/en/docs/setup/independent/high-availability.md index 33c2cdd53c..fdf3df5def 100644 --- a/content/en/docs/setup/independent/high-availability.md +++ b/content/en/docs/setup/independent/high-availability.md @@ -16,7 +16,7 @@ and control plane nodes are co-located. - With an external etcd cluster. This approach requires more infrastructure. The control plane nodes and etcd members are separated. -Your clusters must run Kubernetes version 1.11 or later. You should also be aware that +Your clusters must run Kubernetes version 1.12 or later. You should also be aware that setting up HA clusters with kubeadm is still experimental. You might encounter issues with upgrading your clusters, for example. We encourage you to try either approach, and provide feedback. @@ -139,15 +139,18 @@ different configuration. ### Bootstrap the first stacked control plane node +{{< note >}} +**Note**: Optionally replace `stable` with a different version of Kubernetes, for example `v1.12.0`. +{{< /note >}} + 1. Create a `kubeadm-config.yaml` template file: - apiVersion: kubeadm.k8s.io/v1alpha2 - kind: MasterConfiguration - kubernetesVersion: v1.11.x + apiVersion: kubeadm.k8s.io/v1alpha3 + kind: ClusterConfiguration + kubernetesVersion: stable apiServerCertSANs: - "LOAD_BALANCER_DNS" - api: - controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" + controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" etcd: local: extraArgs: @@ -166,9 +169,6 @@ different configuration. # This CIDR is a Calico default. Substitute or remove for your CNI provider. podSubnet: "192.168.0.0/16" -1. Replace `x` in `kubernetesVersion: v1.11.x` with the latest available version. - For example: `kubernetesVersion: v1.11.1` - 1. Replace the following variables in the template with the appropriate values for your cluster: @@ -224,13 +224,12 @@ done 1. Create a second, different `kubeadm-config.yaml` template file: - apiVersion: kubeadm.k8s.io/v1alpha2 - kind: MasterConfiguration - kubernetesVersion: v1.11.x + apiVersion: kubeadm.k8s.io/v1alpha3 + kind: ClusterConfiguration + kubernetesVersion: stable apiServerCertSANs: - "LOAD_BALANCER_DNS" - api: - controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" + controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" etcd: local: extraArgs: @@ -250,9 +249,6 @@ done # This CIDR is a calico default. Substitute or remove for your CNI provider. podSubnet: "192.168.0.0/16" -1. Replace `x` in `kubernetesVersion: v1.11.x` with the latest available version. - For example: `kubernetesVersion: v1.11.1` - 1. Replace the following variables in the template with the appropriate values for your cluster: - `LOAD_BALANCER_DNS` @@ -296,7 +292,7 @@ done export CP1_IP=10.0.0.8 export CP1_HOSTNAME=cp1 - export KUBECONFIG=/etc/kubernetes/admin.conf + export KUBECONFIG=/etc/kubernetes/admin.conf kubectl exec -n kube-system etcd-${CP0_HOSTNAME} -- etcdctl --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/peer.crt --key-file /etc/kubernetes/pki/etcd/peer.key --endpoints=https://${CP0_IP}:2379 member add ${CP1_HOSTNAME} https://${CP1_IP}:2380 kubeadm alpha phase etcd local --config kubeadm-config.yaml ``` @@ -317,13 +313,12 @@ done 1. Create a third, different `kubeadm-config.yaml` template file: - apiVersion: kubeadm.k8s.io/v1alpha2 - kind: MasterConfiguration - kubernetesVersion: v1.11.x + apiVersion: kubeadm.k8s.io/v1alpha3 + kind: ClusterConfiguration + kubernetesVersion: stable apiServerCertSANs: - "LOAD_BALANCER_DNS" - api: - controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" + controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" etcd: local: extraArgs: @@ -343,9 +338,6 @@ done # This CIDR is a calico default. Substitute or remove for your CNI provider. podSubnet: "192.168.0.0/16" -1. Replace `x` in `kubernetesVersion: v1.11.x` with the latest available version. - For example: `kubernetesVersion: v1.11.1` - 1. Replace the following variables in the template with the appropriate values for your cluster: - `LOAD_BALANCER_DNS` @@ -391,7 +383,7 @@ done export CP2_IP=10.0.0.9 export CP2_HOSTNAME=cp2 - export KUBECONFIG=/etc/kubernetes/admin.conf + export KUBECONFIG=/etc/kubernetes/admin.conf kubectl exec -n kube-system etcd-${CP0_HOSTNAME} -- etcdctl --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/peer.crt --key-file /etc/kubernetes/pki/etcd/peer.key --endpoints=https://${CP0_IP}:2379 member add ${CP2_HOSTNAME} https://${CP2_IP}:2380 kubeadm alpha phase etcd local --config kubeadm-config.yaml ``` @@ -411,39 +403,49 @@ done - Follow [these instructions](/docs/setup/independent/setup-ha-etcd-with-kubeadm/) to set up the etcd cluster. -### Copy required files to other control plane nodes - -The following certificates were created when you created the cluster. Copy them -to your other control plane nodes: - -- `/etc/kubernetes/pki/etcd/ca.crt` -- `/etc/kubernetes/pki/apiserver-etcd-client.crt` -- `/etc/kubernetes/pki/apiserver-etcd-client.key` +#### Copy required files from an etcd node to all control plane nodes In the following example, replace `USER` and `CONTROL_PLANE_HOSTS` values with values for your environment. ```sh +# Make a list of required etcd certificate files +cat << EOF > etcd-pki-files.txt +/etc/kubernetes/pki/etcd/ca.crt +/etc/kubernetes/pki/apiserver-etcd-client.crt +/etc/kubernetes/pki/apiserver-etcd-client.key +EOF + +# create the archive +tar -czf etcd-pki.tar.gz -T etcd-pki-files.txt + +# copy the archive to the control plane nodes USER=ubuntu CONTROL_PLANE_HOSTS="10.0.0.7 10.0.0.8 10.0.0.9" for host in $CONTROL_PLANE_HOSTS; do - scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host: - scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${USER}"@$host: - scp /etc/kubernetes/pki/apiserver-etcd-client.key "${USER}"@$host: + scp etcd-pki.tar.gz "${USER}"@$host: done ``` ### Set up the first control plane node -1. Create a `kubeadm-config.yaml` template file: +1. Extract the etcd certificates - apiVersion: kubeadm.k8s.io/v1alpha2 - kind: MasterConfiguration - kubernetesVersion: v1.11.x + mkdir -p /etc/kubernetes/pki + tar -xzf etcd-pki.tar.gz -C /etc/kubernetes/pki --strip-components=3 + +1. Create a `kubeadm-config.yaml`: + +{{< note >}} +**Note**: Optionally replace `stable` with a different version of Kubernetes, for example `v1.11.3`. +{{< /note >}} + + apiVersion: kubeadm.k8s.io/v1alpha3 + kind: ClusterConfiguration + kubernetesVersion: stable apiServerCertSANs: - "LOAD_BALANCER_DNS" - api: - controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" + controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" etcd: external: endpoints: @@ -457,9 +459,6 @@ done # This CIDR is a calico default. Substitute or remove for your CNI provider. podSubnet: "192.168.0.0/16" -1. Replace `x` in `kubernetesVersion: v1.11.x` with the latest available version. - For example: `kubernetesVersion: v1.11.1` - 1. Replace the following variables in the template with the appropriate values for your cluster: - `LOAD_BALANCER_DNS` @@ -469,11 +468,12 @@ done - `ETCD_2_IP` 1. Run `kubeadm init --config kubeadm-config.yaml` +1. Copy the output join commamnd. ### Copy required files to the correct locations -The following certificates and other required files were created when you ran `kubeadm init`. -Copy these files to your other control plane nodes: +The following pki files were created during the `kubeadm init` step and must be shared with +all other control plane nodes. - `/etc/kubernetes/pki/ca.crt` - `/etc/kubernetes/pki/ca.key` @@ -486,24 +486,34 @@ In the following example, replace the list of `CONTROL_PLANE_IPS` values with the IP addresses of the other control plane nodes. ```sh +# make a list of required kubernetes certificate files +cat << EOF > certificate_files.txt +/etc/kubernetes/pki/ca.crt +/etc/kubernetes/pki/ca.key +/etc/kubernetes/pki/sa.key +/etc/kubernetes/pki/sa.pub +/etc/kubernetes/pki/front-proxy-ca.crt +/etc/kubernetes/pki/front-proxy-ca.key +EOF + +# create the archive +tar -czf control-plane-certificates.tar.gz -T certificate_files.txt + USER=ubuntu # customizable CONTROL_PLANE_IPS="10.0.0.7 10.0.0.8" for host in ${CONTROL_PLANE_IPS}; do - scp /etc/kubernetes/pki/ca.crt "${USER}"@$host: - scp /etc/kubernetes/pki/ca.key "${USER}"@$host: - scp /etc/kubernetes/pki/sa.key "${USER}"@$host: - scp /etc/kubernetes/pki/sa.pub "${USER}"@$host: - scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host: - scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host: + scp control-plane-certificates.tar.gz "${USER}"@$host: done ``` -{{< note >}} -**Note**: Remember that your config may differ from this example. -{{< /note >}} - ### Set up the other control plane nodes +1. Extract the required certificates + + mkdir -p /etc/kubernetes/pki + tar -xzf etcd-pki.tar.gz -C /etc/kubernetes/pki --strip-components 3 + tar -xzf control-plane-certificates.tar.gz -C /etc/kubernetes/pki --strip-components 3 + 1. Verify the location of the copied files. Your `/etc/kubernetes` directory should look like this: @@ -517,8 +527,10 @@ done - `/etc/kubernetes/pki/sa.pub` - `/etc/kubernetes/pki/etcd/ca.crt` -1. Run `kubeadm init --config kubeadm-config.yaml` on each control plane node, where - `kubeadm-config.yaml` is the file you already created. +1. Run the copied `kubeadm join` command from above. Add the flag "--experimental-control-plane". + The final command will look something like this: + + kubeadm join ha.k8s.example.com:6443 --token 5ynki1.3erp9i3yo7gqg1nv --discovery-token-ca-cert-hash sha256:a00055bd8c710a9906a3d91b87ea02976334e1247936ac061d867a0f014ecd81 --experimental-control-plane ## Common tasks after bootstrapping control plane diff --git a/content/en/docs/setup/independent/install-kubeadm.md b/content/en/docs/setup/independent/install-kubeadm.md index c80c5aaba2..df670972c5 100644 --- a/content/en/docs/setup/independent/install-kubeadm.md +++ b/content/en/docs/setup/independent/install-kubeadm.md @@ -79,57 +79,20 @@ The pod network plugin you use (see below) may also require certain ports to be open. Since this differs with each pod network plugin, please see the documentation for the plugins about what port(s) those need. -## Installing Docker +## Installing runtime -On each of your machines, install Docker. -Version 17.03 is recommended, but 1.11, 1.12 and 1.13 are known to work as well. -Versions 17.06+ _might work_, but have not yet been tested and verified by the Kubernetes node team. -Keep track of the latest verified Docker version in the Kubernetes release notes. +Since v1.6.0, Kubernetes has enabled the use of CRI, Container Runtime Interface, by default. +The container runtime used by default is Docker, which is enabled through the built-in +`dockershim` CRI implementation inside of the `kubelet`. -Please proceed with executing the following commands based on your OS as root. You may become the root user by executing `sudo -i` after SSH-ing to each host. +Other CRI-based runtimes include: -If you already have the required versions of the Docker installed, you can move on to next section. -If not, you can use the following commands to install Docker on your system: +- [cri-containerd](https://github.com/containerd/cri-containerd) +- [cri-o](https://github.com/kubernetes-incubator/cri-o) +- [frakti](https://github.com/kubernetes/frakti) +- [rkt](https://github.com/kubernetes-incubator/rktlet) -{{< tabs name="docker_install" >}} -{{% tab name="Ubuntu, Debian or HypriotOS" %}} -Install Docker from Ubuntu's repositories: - -```bash -apt-get update -apt-get install -y docker.io -``` - -or install Docker CE 17.03 from Docker's repositories for Ubuntu or Debian: - -```bash -apt-get update -apt-get install -y apt-transport-https ca-certificates curl software-properties-common -curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - -add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" -apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}') -``` -{{% /tab %}} -{{% tab name="CentOS, RHEL or Fedora" %}} -Install Docker using your operating system's bundled package: - -```bash -yum install -y docker -systemctl enable docker && systemctl start docker -``` -{{% /tab %}} -{{% tab name="Container Linux" %}} -Enable and start Docker: - -```bash -systemctl enable docker && systemctl start docker -``` -{{% /tab %}} -{{< /tabs >}} - - -Refer to the [official Docker installation guides](https://docs.docker.com/engine/installation/) -for more information. +Refer to the [CRI installation instructions](/docs/setup/cri.md) for more information. ## Installing kubeadm, kubelet and kubectl diff --git a/content/en/docs/setup/independent/kubelet-integration.md b/content/en/docs/setup/independent/kubelet-integration.md index 55d905455f..926d26e1a9 100644 --- a/content/en/docs/setup/independent/kubelet-integration.md +++ b/content/en/docs/setup/independent/kubelet-integration.md @@ -23,7 +23,7 @@ manager instead, but you need to configure it manually. Some kubelet configuration details need to be the same across all kubelets involved in the cluster, while other configuration aspects need to be set on a per-kubelet basis, to accommodate the different characteristics of a given machine, such as OS, storage, and networking. You can manage the configuration -of your kubelets manually, but [kubeadm now provides a `MasterConfig` API type for managing your +of your kubelets manually, but [kubeadm now provides a `KubeletConfiguration` API type for managing your kubelet configurations centrally](#configure-kubelets-using-kubeadm). {{% /capture %}} @@ -63,10 +63,7 @@ clusterDNS: - 10.96.0.10 ``` -See the -[API reference for the -kubelet ComponentConfig](https://godoc.org/k8s.io/kubernetes/pkg/kubelet/apis/config#KubeletConfiguration) -for more information. +For more details on the ComponentConfig have a look at [this section](#configure-kubelets-using-kubeadm). ### Providing instance-specific configuration details @@ -96,14 +93,19 @@ such as systemd. ## Configure kubelets using kubeadm -The kubeadm config API type `MasterConfiguration` embeds the kubelet's ComponentConfig under -the `.kubeletConfiguration.baseConfig` key. Any user writing a `MasterConfiguration` -file can use this configuration key to also set the base-level configuration for all kubelets -in the cluster. +It is possible to configure the kubelet that kubeadm will start if a custom `KubeletConfiguration` +API object is passed with a configuration file like so `kubeadm ... --config some-config-file.yaml`. + +By calling `kubeadm config print-default --api-objects KubeletConfiguration` you can +see all the default values for this structure. + +Also have a look at the [API reference for the +kubelet ComponentConfig](https://godoc.org/k8s.io/kubernetes/pkg/kubelet/apis/config#KubeletConfiguration) +for more information on the individual fields. ### Workflow when using `kubeadm init` -When you call `kubeadm init`, the `.kubeletConfiguration.baseConfig` structure is marshalled to disk +When you call `kubeadm init`, the kubelet configuration is marshalled to disk at `/var/lib/kubelet/config.yaml`, and also uploaded to a ConfigMap in the cluster. The ConfigMap is named `kubelet-config-1.X`, where `.X` is the minor version of the Kubernetes version you are initializing. A kubelet configuration file is also written to `/etc/kubernetes/kubelet.conf` with the diff --git a/content/en/docs/setup/independent/setup-ha-etcd-with-kubeadm.md b/content/en/docs/setup/independent/setup-ha-etcd-with-kubeadm.md index dc66ce34f1..9e312d5464 100644 --- a/content/en/docs/setup/independent/setup-ha-etcd-with-kubeadm.md +++ b/content/en/docs/setup/independent/setup-ha-etcd-with-kubeadm.md @@ -1,7 +1,7 @@ --- reviewers: - sig-cluster-lifecycle -title: Set up a high availability etcd cluster with kubeadm +title: Set up a High Availability etcd cluster with kubeadm content_template: templates/task weight: 60 --- @@ -9,7 +9,7 @@ weight: 60 {{% capture overview %}} Kubeadm defaults to running a single member etcd cluster in a static pod managed -by the kubelet on the control plane node. This is not a high availability setup +by the kubelet on the control plane node. This is not a high availability setup as the etcd cluster contains only one member and cannot sustain any members becoming unavailable. This task walks through the process of creating a high availability etcd cluster of three members that can be used as an external etcd @@ -83,8 +83,8 @@ this example. HOST=${ETCDHOSTS[$i]} NAME=${NAMES[$i]} cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml - apiVersion: "kubeadm.k8s.io/v1alpha2" - kind: MasterConfiguration + apiVersion: "kubeadm.k8s.io/v1alpha3" + kind: ClusterConfiguration etcd: local: serverCertSANs: @@ -107,7 +107,7 @@ this example. If you already have a CA then the only action that is copying the CA's `crt` and `key` file to `/etc/kubernetes/pki/etcd/ca.crt` and - `/etc/kubernetes/pki/etcd/ca.key`. After those files have been copied, + `/etc/kubernetes/pki/etcd/ca.key`. After those files have been copied, proceed to the next step, "Create certificates for each member". If you do not already have a CA then run this command on `$HOST0` (where you diff --git a/content/en/docs/setup/independent/troubleshooting-kubeadm.md b/content/en/docs/setup/independent/troubleshooting-kubeadm.md index 481b429e02..8a66795d50 100644 --- a/content/en/docs/setup/independent/troubleshooting-kubeadm.md +++ b/content/en/docs/setup/independent/troubleshooting-kubeadm.md @@ -190,7 +190,7 @@ Error from server: Get https://10.19.0.41:10250/containerLogs/default/mysql-ddc6 curl http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address ``` - The workaround is to tell `kubelet` which IP to use using `--node-ip`. When using Digital Ocean, it can be the public one (assigned to `eth0`) or the private one (assigned to `eth1`) should you want to use the optional private network. The [KubeletExtraArgs section of the MasterConfiguration file](https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/apis/kubeadm/v1alpha2/types.go#L147) can be used for this. + The workaround is to tell `kubelet` which IP to use using `--node-ip`. When using Digital Ocean, it can be the public one (assigned to `eth0`) or the private one (assigned to `eth1`) should you want to use the optional private network. The [`KubeletExtraArgs` section of the kubeadm `NodeRegistrationOptions` structure](https://github.com/kubernetes/kubernetes/blob/release-1.12/cmd/kubeadm/app/apis/kubeadm/v1alpha3/types.go#L163-L166) can be used for this. Then restart `kubelet`: diff --git a/content/en/docs/setup/multiple-zones.md b/content/en/docs/setup/multiple-zones.md index 70ca0fcf06..d98604c25e 100644 --- a/content/en/docs/setup/multiple-zones.md +++ b/content/en/docs/setup/multiple-zones.md @@ -73,18 +73,20 @@ available and can tolerate the loss of a zone, the control plane is located in a single zone. Users that want a highly available control plane should follow the [high availability](/docs/admin/high-availability) instructions. +### Volume limitations +The following limitations are addressed with [topology-aware volume binding](/docs/concepts/storage/storage-classes/#volume-binding-mode). + * StatefulSet volume zone spreading when using dynamic provisioning is currently not compatible with -pod affinity or anti-affinity policies. + pod affinity or anti-affinity policies. * If the name of the StatefulSet contains dashes ("-"), volume zone spreading -may not provide a uniform distribution of storage across zones. + may not provide a uniform distribution of storage across zones. * When specifying multiple PVCs in a Deployment or Pod spec, the StorageClass -needs to be configured for a specific, single zone, or the PVs need to be -statically provisioned in a specific zone. Another workaround is to use a -StatefulSet, which will ensure that all the volumes for a replica are -provisioned in the same zone. - + needs to be configured for a specific single zone, or the PVs need to be + statically provisioned in a specific zone. Another workaround is to use a + StatefulSet, which will ensure that all the volumes for a replica are + provisioned in the same zone. ## Walkthrough diff --git a/content/en/docs/setup/release/notes.md b/content/en/docs/setup/release/notes.md index 7ba44e23b4..45f6f83ae1 100644 --- a/content/en/docs/setup/release/notes.md +++ b/content/en/docs/setup/release/notes.md @@ -1,725 +1,846 @@ ---- -title: v1.11 Release Notes -content_template: templates/concept ---- + +- [v1.12.0-rc.2](#v1120-rc2) + - [Downloads for v1.12.0-rc.2](#downloads-for-v1120-rc2) + - [Client Binaries](#client-binaries) + - [Server Binaries](#server-binaries) + - [Node Binaries](#node-binaries) + - [Changelog since v1.12.0-rc.1](#changelog-since-v1120-rc1) + - [Other notable changes](#other-notable-changes) +- [v1.12.0-rc.1](#v1120-rc1) + - [Downloads for v1.12.0-rc.1](#downloads-for-v1120-rc1) + - [Client Binaries](#client-binaries-1) + - [Server Binaries](#server-binaries-1) + - [Node Binaries](#node-binaries-1) + - [Changelog since v1.12.0-beta.2](#changelog-since-v1120-beta2) + - [Action Required](#action-required) + - [Other notable changes](#other-notable-changes-1) +- [v1.12.0-beta.2](#v1120-beta2) + - [Downloads for v1.12.0-beta.2](#downloads-for-v1120-beta2) + - [Client Binaries](#client-binaries-2) + - [Server Binaries](#server-binaries-2) + - [Node Binaries](#node-binaries-2) + - [Changelog since v1.12.0-beta.1](#changelog-since-v1120-beta1) + - [Action Required](#action-required-1) + - [Other notable changes](#other-notable-changes-2) +- [v1.12.0-beta.1](#v1120-beta1) + - [Downloads for v1.12.0-beta.1](#downloads-for-v1120-beta1) + - [Client Binaries](#client-binaries-3) + - [Server Binaries](#server-binaries-3) + - [Node Binaries](#node-binaries-3) + - [Changelog since v1.12.0-alpha.1](#changelog-since-v1120-alpha1) + - [Action Required](#action-required-2) + - [Other notable changes](#other-notable-changes-3) +- [v1.12.0-alpha.1](#v1120-alpha1) + - [Downloads for v1.12.0-alpha.1](#downloads-for-v1120-alpha1) + - [Client Binaries](#client-binaries-4) + - [Server Binaries](#server-binaries-4) + - [Node Binaries](#node-binaries-4) + - [Changelog since v1.11.0](#changelog-since-v1110) + - [Action Required](#action-required-3) + - [Other notable changes](#other-notable-changes-4) + -{{% capture overview %}} + -[Documentation](https://docs.k8s.io) & [Examples](https://github.com/kubernetes/examples) -## Downloads for v1.11.0 +# v1.12.0-rc.2 + +[Documentation](https://docs.k8s.io) & [Examples](https://releases.k8s.io/release-1.12/examples) + +## Downloads for v1.12.0-rc.2 filename | sha256 hash -------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes.tar.gz) | `3c779492574a5d8ce702d89915184f5dd52280da909abf134232e5ab00b4a885` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-src.tar.gz) | `f0b2d8e61860acaf50a9bae0dc36b8bfdb4bb41b8d0a1bb5a9bc3d87aad3b794` +[kubernetes.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes.tar.gz) | `184ea437bc72d0e6a4c96b964de53181273e919a1d4785515da3406c7e982bf5` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-src.tar.gz) | `aee82938827ef05ab0ee81bac42f4f79fff126294469868d02efb3426717d71e` ### Client Binaries filename | sha256 hash -------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-darwin-386.tar.gz) | `196738ef058510438b3129f0a72544544b7d52a8732948b4f9358781f87dab59` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-darwin-amd64.tar.gz) | `9ec8357b10b79f8fd87f3a836879d0a4bb46fb70adbb82f1e34dc7e91d74999f` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-linux-386.tar.gz) | `e8ee8a965d3ea241d9768b9ac868ecbbee112ef45038ff219e4006fa7f4ab4e2` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-linux-amd64.tar.gz) | `d31377c92b4cc9b3da086bc1974cbf57b0d2c2b22ae789ba84cf1b7554ea7067` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-linux-arm.tar.gz) | `9e9da909293a4682a5d6270a39894b056b3e901532b15eb8fdc0814a8d628d65` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-linux-arm64.tar.gz) | `149df9daac3e596042f5759977f9f9299a397130d9dddc2d4a2b513dd64f1092` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-linux-ppc64le.tar.gz) | `ff3d3e4714406d92e9a2b7ef2887519800b89f6592a756524f7a37dc48057f44` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-linux-s390x.tar.gz) | `e5a39bdc1e474d9d00974a81101e043aaff37c30c1418fb85a0c2561465e14c7` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-windows-386.tar.gz) | `4ba1102a33c6d4df650c4864a118f99a9882021fea6f250a35f4b4f4a2d68eaa` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-client-windows-amd64.tar.gz) | `0bb74af7358f9a2f4139ed1c10716a2f5f0c1c13ab3af71a0621a1983233c8d7` +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-darwin-386.tar.gz) | `40ed3ef9bbc4fad7787dd14eae952edf06d40e1094604bc6d10209b8778c3121` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-darwin-amd64.tar.gz) | `a317fe3801ea5387ce474b9759a7e28ede8324587f79935a7a945da44c99a4b2` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-linux-386.tar.gz) | `cd61b4b71d6b739582c02b5be1d87d928507bc59f64ee72629a920cc529a0941` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-linux-amd64.tar.gz) | `306af04fc18ca2588e16fd831358df50a2cb02219687b543073836f835de8583` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-linux-arm.tar.gz) | `497584f2686339cce857cff1ebf4ed10dcd63f4684a03c242b0828fcd307be4c` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-linux-arm64.tar.gz) | `1dfbb8c299f5af15239ef39135a6c8a52ee4c234764ee0437d8f707e636c9124` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-linux-ppc64le.tar.gz) | `668d6f35c5f6adcd25584d9ef74c549db13ffca9d93b4bc8d25609a8e5837640` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-linux-s390x.tar.gz) | `8a8e205c38858bd9d161115e5e2870c6cfc9c82e189d156e7062e6fa979c3fda` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-windows-386.tar.gz) | `cdef48279c22cc8c764e43a4b9c2a86f02f21c80abbbcd48041fb1e89fb1eb67` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-client-windows-amd64.tar.gz) | `50621a3d2b1550c69325422c6dce78f5690574b35d3778dd3afcf698b57f0f54` ### Server Binaries filename | sha256 hash -------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-server-linux-amd64.tar.gz) | `b8a8a88afd8a40871749b2362dbb21295c6a9c0a85b6fc87e7febea1688eb99e` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-server-linux-arm.tar.gz) | `88b9168013bb07a7e17ddc0638e7d36bcd2984d049a50a96f54cb4218647d8da` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-server-linux-arm64.tar.gz) | `12fab9e9f0e032f278c0e114c72ea01899a0430fc772401f23e26de306e0f59f` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-server-linux-ppc64le.tar.gz) | `6616d726a651e733cfd4cccd78bfdc1d421c4a446edf4b617b8fd8f5e21f073e` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-server-linux-s390x.tar.gz) | `291838980929c8073ac592219d9576c84a9bdf233585966c81a380c3d753316e` +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-server-linux-amd64.tar.gz) | `87a8438887a2daa199508aae591b158025860b8381c64cbe9b1d0c06c4eebde9` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-server-linux-arm.tar.gz) | `f65be73870a0e564ef8ce1b6bb2b75ff7021a6807de84b5750e4fa78635051b6` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-server-linux-arm64.tar.gz) | `171f15aa8b7c365f4fee70ce025c882a921d0075bd726a99b5534cadd09273ef` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-server-linux-ppc64le.tar.gz) | `abc2003d58bd1aca517415c582ed1e8bb1ed596bf04197f4fc7c0c51865a9f86` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-server-linux-s390x.tar.gz) | `e2ce834abb4d45d91fd7a8d774e47f0f8092eb4edcf556605c2ef6e2b190b8b1` ### Node Binaries filename | sha256 hash -------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-node-linux-amd64.tar.gz) | `b23e905efb828fdffc4efc208f7343236b22c964e408fe889f529502aed4a335` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-node-linux-arm.tar.gz) | `44bf8973581887a2edd33eb637407e76dc0dc3a5abcc2ff04aec8338b533156d` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-node-linux-arm64.tar.gz) | `51e481c782233b46ee21e9635c7d8c2a84450cbe30d7b1cbe5c5982b33f40b13` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-node-linux-ppc64le.tar.gz) | `d1a3feda31a954d3a83193a51a117873b6ef9f8acc3e10b3f1504fece91f2eb8` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-node-linux-s390x.tar.gz) | `0ad76c6e6aef670c215256803b3b0d19f4730a0843429951c6421564c73d4932` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.11.0/kubernetes-node-windows-amd64.tar.gz) | `8ad26200ed40d40a1b78d7a5dbe56220f0813d31194f40f267b476499fe2c5c3` - -## Urgent Upgrade Notes - -{{< caution >}} -**Caution**: You **MUST** do this before you upgrade! -{{< /caution >}} - -Before upgrading to Kubernetes 1.11, you must keep the following in mind: - -* **JSON configuration files that contain fields with incorrect case will no longer be valid. You must correct these files before upgrading.** When specifying keys in JSON resource definitions during direct API server communication, the keys are case-sensitive. A bug introduced in Kubernetes 1.8 caused the API server to accept a request with incorrect case and coerce it to correct case, but this behaviour has been fixed in 1.11 and the API server will once again be enforcing the correct case. It’s worth noting that during this time, the `kubectl` tool continued to enforce case-sensitive keys, so users that strictly manage resources with `kubectl` will be unaffected by this change. ([#65034](https://github.com/kubernetes/kubernetes/pull/65034), [@caesarxuchao](https://github.com/caesarxuchao)) -* **[Pod priority and preemption](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) is now enabled by default.** Note that this means that pods from *any* namespace can now request priority classes that compete with and/or cause preemption of critical system pods that are already running. If that is not desired, disable the PodPriority feature by setting `--feature-gates=PodPriority=false` on the kube-apiserver, kube-scheduler, and kubelet components before upgrading to 1.11. Disabling the PodPriority feature limits [critical pods](https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical-when-priorites-are-enabled) to the `kube-system` namespace. - -{{% /capture %}} - -{{< toc >}} - -{{% capture body %}} - -## Major Themes - -### SIG API Machinery - -This release SIG API Machinery focused mainly on CustomResources. For example, subresources for CustomResources are now beta and enabled by default. With this, updates to the `/status` subresource will disallow updates to all fields other than `.status` (not just `.spec` and `.metadata` as before). Also, `required` and `description` can be used at the root of the CRD OpenAPI validation schema when the `/status` subresource is enabled. - -In addition, users can now create multiple versions of CustomResourceDefinitions, but without any kind of automatic conversion, and CustomResourceDefinitions now allow specification of additional columns for `kubectl get` output via the `spec.additionalPrinterColumns` field. - -### SIG Auth - -Work this cycle focused on graduating existing functions, and on making security functions more understandable for users. - -RBAC [cluster role aggregation](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#aggregated-clusterroles), introduced in 1.9, graduated to stable status with no changes in 1.11, and [client-go credential plugins](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins) graduated to beta status, while also adding support for obtaining TLS credentials from an external plugin. - -Kubernetes 1.11 also makes it easier to see what's happening, as audit events can now be annotated with information about how an API request was handled: - -* Authorization sets `authorization.k8s.io/decision` and `authorization.k8s.io/reason` annotations with the authorization decision ("allow" or "forbid") and a human-readable description of why the decision was made (for example, RBAC includes the name of the role/binding/subject which allowed a request). -* PodSecurityPolicy admission sets `podsecuritypolicy.admission.k8s.io/admit-policy` and `podsecuritypolicy.admission.k8s.io/validate-policy` annotations containing the name of the policy that allowed a pod to be admitted. (PodSecurityPolicy also gained the ability to [limit hostPath volume mounts to be read-only](https://kubernetes.io/docs/concepts/policy/pod-security-policy/#volumes-and-file-systems).) - -In addition, the NodeRestriction admission plugin now prevents kubelets from modifying taints on their Node API objects, making it easier to keep track of which nodes should be in use. - -### SIG CLI - -SIG CLI's main focus this release was on refactoring `kubectl` internals to improve composability, readability and testability of `kubectl` commands. Those refactors will allow the team to extract a mechanism for extensibility of kubectl -- that is, plugins -- in the next releases. - -### SIG Cluster Lifecycle - -SIG Cluster Lifecycle focused on improving kubeadm’s user experience by including a set of new commands related to maintaining the kubeadm configuration file, the API version of which has now has been incremented to `v1alpha2`. These commands can handle the migration of the configuration to a newer version, printing the default configuration, and listing and pulling the required container images for bootstrapping a cluster. - -Other notable changes include: - -* CoreDNS replaces kube-dns as the default DNS provider -* Improved user experience for environments without a public internet connection and users using other CRI runtimes than Docker -* Support for structured configuration for the kubelet, which avoids the need to modify the systemd drop-in file -* Many improvements to the upgrade process and other bug fixes - -### SIG Instrumentation - -As far as Sig Instrumentation, the major change in Kubernetes 1.11 is the deprecation of Heapster as part of ongoing efforts to move to the new Kubernetes monitoring model. Clusters still using Heapster for autoscaling should be migrated over to metrics-server and the custom metrics API. See the deprecation section for more information. - -### SIG Network - -The main milestones for SIG Network this release are the graduation of IPVS-based load balancing and CoreDNS to general availability. - -IPVS is an alternative approach to in-cluster load balancing that uses in-kernel hash tables rather than the previous iptables approach, while CoreDNS is a replacement for kube-dns for service discovery. - -### SIG Node - -SIG-Node advanced several features and made incremental improvements in a few key topic areas this release. - -The dynamic kubelet config feature graduated to beta, so it is enabled by default, simplifying management of the node object itself. Kubelets that are configured to work with the CRI may take advantage of the log rotation feature, which is graduating to beta this release. - -The cri-tools project, which aims to provide consistent tooling for operators to debug and introspect their nodes in production independent of their chosen container runtime, graduated to GA. - -As far as platforms, working with SIG-Windows, enhancements were made to the kubelet to improve platform support on Windows operating systems, and improvements to resource management were also made. In particular, support for sysctls on Linux graduated to beta. - -### SIG OpenStack - -SIG-OpenStack continued to build out testing, with eleven acceptance tests covering a wide-range of scenarios and use-cases. During the 1.11 cycle our reporting back to test-grid has qualified the OpenStack cloud provider as a gating job for the Kubernetes release. - -New features include improved integration between the Keystone service and Kubernetes RBAC, and a number of stability and compatibility improvements across the entire provider code-base. - -### SIG Scheduling -[Pod Priority and Preemption](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) has graduated to Beta, so it is enabled by default. Note that this involves [significant and important changes for operators](https://github.com/kubernetes/sig-release/pull/201/files). The team also worked on improved performance and reliability of the scheduler. - -### SIG Storage - -Sig Storage graduated two features that had been introduced in previous versions and introduced three new features in an alpha state. - -The StorageProtection feature, which prevents deletion of PVCs while Pods are still using them and of PVs while still bound to a PVC, is now generally available, and volume resizing, which lets you increase size of a volume after a Pod restarts is now beta, which means it is on by default. - -New alpha features include: - -* Online volume resizing will increase the filesystem size of a resized volume without requiring a Pod restart. -* AWS EBS and GCE PD volumes support increased limits on the maximum number of attached volumes per node. -* Subpath volume directories can be created using DownwardAPI environment variables. - -### SIG Windows - -This release supports more of Kubernetes API for pods and containers on Windows, including: - -* Metrics for Pod, Container, Log filesystem -* The run_as_user security contexts -* Local persistent volumes and fstype for Azure disk - -Improvements in Windows Server version 1803 also bring new storage functionality to Kubernetes v1.11, including: - -* Volume mounts for ConfigMap and Secret -* Flexvolume plugins for SMB and iSCSI storage are also available out-of-tree at [Microsoft/K8s-Storage-Plugins](https://github.com/Microsoft/K8s-Storage-Plugin) - -## Known Issues - -* IPVS based kube-proxy doesn't support graceful close connections for terminating pod. This issue will be fixed in a future release. ([#57841](https://github.com/kubernetes/kubernetes/pull/57841), [@jsravn](https://github.com/jsravn)) -* kube-proxy needs to be configured to override hostname in some environments. ([#857](https://github.com/kubernetes/kubeadm/issues/857), [@detiber](https://github.com/detiber)) -* There's a known issue where the Vertical Pod Autoscaler will radically change implementation in 1.12, so users of VPA (alpha) in 1.11 are warned that they will not be able to automatically migrate their VPA configs from 1.11 to 1.12. - - -## Before Upgrading - -* When Response is a `metav1.Status`, it is no longer copied into the audit.Event status. Only the "status", "reason" and "code" fields are set. For example, when we run `kubectl get pods abc`, the API Server returns a status object: -``` -{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"pods \"abc\" not found","reason":"NotFound","details":{"name":"abc","kind":"pods"},"code":404} -``` -In previous versions, the whole object was logged in audit events. Starting in 1.11, only `status`, `reason`, and `code` are logged. Code that relies on the older version must be updated to avoid errors. -([#62695](https://github.com/kubernetes/kubernetes/pull/62695), [@CaoShuFeng](https://github.com/CaoShuFeng)) -* HTTP transport now uses `context.Context` to cancel dial operations. k8s.io/client-go/transport/Config struct has been updated to accept a function with a `context.Context` parameter. This is a breaking change if you use this field in your code. ([#60012](https://github.com/kubernetes/kubernetes/pull/60012), [@ash2k](https://github.com/ash2k)) -* kubectl: This client version requires the `apps/v1` APIs, so it will not work against a cluster version older than v1.9.0. Note that kubectl only guarantees compatibility with clusters that are +/-1 minor version away. ([#61419](https://github.com/kubernetes/kubernetes/pull/61419), [@enisoc](https://github.com/enisoc)) -* Pod priority and preemption is now enabled by default. Even if you don't plan to use this feature, you might need to take some action immediately after upgrading. In multi-tenant clusters where not all users are trusted, you are advised to create appropriate quotas for two default priority classes, system-cluster-critical and system-node-critical, which are added to clusters by default. `ResourceQuota` should be created to limit users from creating Pods at these priorities if not all users of your cluster are trusted. We do not advise disabling this feature because critical system Pods rely on the scheduler preemption to be scheduled when cluster is under resource pressure. -* Default mount propagation has changed from `HostToContainer` ("rslave" in Linux terminology), as it was in 1.10, to `None` ("private") to match the behavior in 1.9 and earlier releases; `HostToContainer` as a default caused regressions in some pods. If you are relying on this behavior you will need to set it explicitly. ([#62462](https://github.com/kubernetes/kubernetes/pull/62462), [@jsafrane](https://github.com/jsafrane)) -* The kube-apiserver `--storage-version` flag has been removed; you must use `--storage-versions` instead. ([#61453](https://github.com/kubernetes/kubernetes/pull/61453), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) -* Authors of aggregated API servers must not rely on authorization being done by the kube-apiserver, and must do delegated authorization in addition. ([#61349](https://github.com/kubernetes/kubernetes/pull/61349), [@sttts](https://github.com/sttts)) -* GC is now bound by QPS so if you need more QPS to avoid ratelimiting GC, you'll have to set it explicitly. ([#63657](https://github.com/kubernetes/kubernetes/pull/63657), [@shyamjvs](https://github.com/shyamjvs)) -* `kubeadm join` is now blocking on the kubelet performing the TLS Bootstrap properly. Earlier, `kubeadm join` only did the discovery part and exited successfully without checking that the kubelet actually started properly and performed the TLS bootstrap correctly. Now, as kubeadm runs some post-join steps (for example, annotating the Node API object with the CRISocket), `kubeadm join` is now waiting for the kubelet to perform the TLS Bootstrap, and then uses that credential to perform further actions. This also improves the UX, as `kubeadm` will exit with a non-zero code if the kubelet isn't in a functional state, instead of pretending everything's fine. - ([#64792](https://github.com/kubernetes/kubernetes/pull/64792), [@luxas](https://github.com/luxas)) -* The structure of the kubelet dropin in the kubeadm deb package has changed significantly. Instead of hard-coding the parameters for the kubelet in the dropin, a structured configuration file for the kubelet is used, and is expected to be present in `/var/lib/kubelet/config.yaml`. For runtime-detected, instance-specific configuration values, a environment file with dynamically-generated flags at `kubeadm init` or `kubeadm join` run time is used. Finally, if you want to override something specific for the kubelet that can't be done via the kubeadm Configuration file (which is preferred), you might add flags to the `KUBELET_EXTRA_ARGS` environment variable in either `/etc/default/kubelet` -or `/etc/sysconfig/kubelet`, depending on the system you're running on. -([#64780](https://github.com/kubernetes/kubernetes/pull/64780), [@luxas](https://github.com/luxas)) -* The `--node-name` flag for kubeadm now dictates the Node API object name the kubelet uses for registration, in all cases but where you might use an in-tree cloud provider. If you're not using an in-tree cloud provider, `--node-name` will set the Node API object name. If you're using an in-tree cloud provider, you MUST make `--node-name` match the name the in-tree cloud provider decides to use. -([#64706](https://github.com/kubernetes/kubernetes/pull/64706), [@liztio](https://github.com/liztio)) -* The `PersistentVolumeLabel` admission controller is now disabled by default. If you depend on this feature (AWS/GCE) then ensure it is added to the `--enable-admission-plugins` flag on the kube-apiserver. ([#64326](https://github.com/kubernetes/kubernetes/pull/64326), [@andrewsykim](https://github.com/andrewsykim)) -* kubeadm: kubelets in kubeadm clusters now disable the readonly port (10255). If you're relying on unauthenticated access to the readonly port, please switch to using the secure port (10250). Instead, you can now use ServiceAccount tokens when talking to the secure port, which will make it easier to get access to, for example, the `/metrics` endpoint of the kubelet, securely. ([#64187](https://github.com/kubernetes/kubernetes/pull/64187), [@luxas](https://github.com/luxas)) -* The formerly publicly-available cAdvisor web UI that the kubelet ran on port 4194 by default is now turned off by default. The flag configuring what port to run this UI on `--cadvisor-port` was deprecated in v1.10. Now the default is `--cadvisor-port=0`, in other words, to not run the web server. If you still need to run cAdvisor, the recommended way to run it is via a DaemonSet. Note that the `--cadvisor-port` will be removed in v1.12 ([#63881](https://github.com/kubernetes/kubernetes/pull/63881), [@luxas](https://github.com/luxas)) - -### New Deprecations - -* As a reminder, etcd2 as a backend is deprecated and support will be removed in Kubernetes 1.13. Please ensure that your clusters are upgraded to etcd3 as soon as possible. -* InfluxDB cluster monitoring has been deprecated as part of the deprecation of Heapster. Instead, you may use the [metrics server](https://github.com/kubernetes-incubator/metrics-server). It's a simplified heapster that is able to gather and serve current metrics values. It provides the Metrics API that is used by `kubectl top`, and horizontal pod autoscaler. Note that it doesn't include some features of Heapster, such as short term metrics for graphs in kube-dashboard and dedicated push sinks, which proved hard to maintain and scale. Clusters using Heapster for transfering metrics into long-term storage should consider using their metric solution's native Kubernetes support, if present, or should consider alternative solutions. ([#62328](https://github.com/kubernetes/kubernetes/pull/62328), [@serathius](https://github.com/serathius)) -* The kubelet `--rotate-certificates` flag is now deprecated, and will be removed in a future release. The kubelet certificate rotation feature can now be enabled via the `.RotateCertificates` field in the kubelet's config file. ([#63912](https://github.com/kubernetes/kubernetes/pull/63912), [@luxas](https://github.com/luxas)) -* The kubeadm configuration file version has been upgraded from `v1alpha2` from `v1alpha1`. `v1alpha1` read support exists in v1.11, but will be removed in v1.12. ([#63788](https://github.com/kubernetes/kubernetes/pull/63788), [@luxas](https://github.com/luxas)) -The following PRs changed the API spec: - * In the new v1alpha2 kubeadm Configuration API, the `.CloudProvider` and `.PrivilegedPods` fields don't exist anymore. Instead, you should use the out-of-tree cloud provider implementations, which are beta in v1.11. - * If you have to use the legacy in-tree cloud providers, you can rearrange your config like the example below. If you need the `cloud-config` file (located in `{cloud-config-path}`), you can mount it into the API Server and controller-manager containers using ExtraVolumes, as in: - - - kind: MasterConfiguration - apiVersion: kubeadm.k8s.io/v1alpha2 - apiServerExtraArgs: - cloud-provider: "{cloud}" - cloud-config: "{cloud-config-path}" - apiServerExtraVolumes: - - name: cloud - hostPath: "{cloud-config-path}" - mountPath: "{cloud-config-path}" - controllerManagerExtraArgs: - cloud-provider: "{cloud}" - cloud-config: "{cloud-config-path}" - controllerManagerExtraVolumes: - - name: cloud - hostPath: "{cloud-config-path}" - mountPath: "{cloud-config-path}" - - -* If you need to use the `.PrivilegedPods` functionality, you can still edit the manifests in `/etc/kubernetes/manifests/`, and set `.SecurityContext.Privileged=true` for the apiserver and controller manager. - ([#63866](https://github.com/kubernetes/kubernetes/pull/63866), [@luxas](https://github.com/luxas)) - * kubeadm: The Token-related fields in the `MasterConfiguration` object have now been refactored. Instead of the top-level `.Token`, `.TokenTTL`, `.TokenUsages`, `.TokenGroups` fields, there is now a `BootstrapTokens` slice of `BootstrapToken` objects that support the same features under the `.Token`, `.TTL`, `.Usages`, `.Groups` fields. ([#64408](https://github.com/kubernetes/kubernetes/pull/64408), [@luxas](https://github.com/luxas)) - * `.NodeName` and `.CRISocket` in the `MasterConfiguration` and `NodeConfiguration` v1alpha1 API objects are now `.NodeRegistration.Name` and `.NodeRegistration.CRISocket` respectively in the v1alpha2 API. The `.NoTaintMaster` field has been removed in the v1alpha2 API. ([#64210](https://github.com/kubernetes/kubernetes/pull/64210), [@luxas](https://github.com/luxas)) - * kubeadm: Support for `.AuthorizationModes` in the kubeadm v1alpha2 API has been removed. Instead, you can use the `.APIServerExtraArgs` and `.APIServerExtraVolumes` fields to achieve the same effect. Files using the v1alpha1 API and setting this field will be automatically upgraded to this v1alpha2 API and the information will be preserved. ([#64068](https://github.com/kubernetes/kubernetes/pull/64068), [@luxas](https://github.com/luxas)) -* The annotation `service.alpha.kubernetes.io/tolerate-unready-endpoints` is deprecated. Users should use Service.spec.publishNotReadyAddresses instead. ([#63742](https://github.com/kubernetes/kubernetes/pull/63742), [@thockin](https://github.com/thockin)) -* `--show-all`, which only affected pods, and even then only for human readable/non-API printers, is inert in v1.11, and will be removed in a future release. ([#60793](https://github.com/kubernetes/kubernetes/pull/60793), [@charrywanganthony](https://github.com/charrywanganthony)) -* The `kubectl rolling-update` is now deprecated. Use `kubectl rollout` instead. ([#61285](https://github.com/kubernetes/kubernetes/pull/61285), [@soltysh](https://github.com/soltysh)) -* kube-apiserver: the default `--endpoint-reconciler-type` is now `lease`. The `master-count` endpoint reconciler type is deprecated and will be removed in 1.13. ([#63383](https://github.com/kubernetes/kubernetes/pull/63383), [@liggitt](https://github.com/liggitt)) -* OpenStack built-in cloud provider is now deprecated. Please use the external cloud provider for OpenStack. ([#63524](https://github.com/kubernetes/kubernetes/pull/63524), [@dims](https://github.com/dims)) -* The Kubelet's deprecated `--allow-privileged` flag now defaults to true. This enables users to stop setting `--allow-privileged` in order to transition to `PodSecurityPolicy`. Previously, users had to continue setting `--allow-privileged`, because the default was false. ([#63442](https://github.com/kubernetes/kubernetes/pull/63442), [@mtaufen](https://github.com/mtaufen)) -* The old dynamic client has been replaced by a new one. The previous dynamic client will exist for one release in `client-go/deprecated-dynamic`. Switch as soon as possible. ([#63446](https://github.com/kubernetes/kubernetes/pull/63446), [@deads2k](https://github.com/deads2k)) -* In-tree support for openstack credentials is now deprecated. please use the "client-keystone-auth" from the cloud-provider-openstack repository. details on how to use this new capability is documented [here](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/using-client-keystone-auth.md) ([#64346](https://github.com/kubernetes/kubernetes/pull/64346), [@dims](https://github.com/dims)) -* The GitRepo volume type is deprecated. To provision a container with a git repo, mount an `EmptyDir` into an `InitContainer` that clones the repo using git, then `moEmptyDir` into the Pod's container. -([#63445](https://github.com/kubernetes/kubernetes/pull/63445), [@ericchiang](https://github.com/ericchiang)) -* Alpha annotation for PersistentVolume node affinity has been removed. Update your PersistentVolumes to use the beta PersistentVolume.nodeAffinity field before upgrading to this release. ([#61816](https://github.com/kubernetes/kubernetes/pull/61816), [@wackxu -](https://github.com/wackxu)) - -### Removed Deprecations - -* kubeadm has removed the `.ImagePullPolicy` field in the v1alpha2 API version. Instead it's set statically to `IfNotPresent` for all required images. If you want to always pull the latest images before cluster init (as `Always` would do), run `kubeadm config images pull` before each `kubeadm init`. If you don't want the kubelet to pull any images at `kubeadm init` time, for example if you don't have an internet connection, you can also run `kubeadm config images pull` before `kubeadm init` or side-load the images some other way (such as `docker load -i image.tar`). Having the images locally cached will result in no pull at runtime, which makes it possible to run without any internet connection. ([#64096](https://github.com/kubernetes/kubernetes/pull/64096), [@luxas](https://github.com/luxas)) -* kubeadm has removed `.Etcd.SelfHosting` from its configuration API. It was never used in practice ([#63871](https://github.com/kubernetes/kubernetes/pull/63871), [@luxas](https://github.com/luxas)) -* The deprecated and inactive option '--enable-custom-metrics' has been removed in 1.11. ([#60699](https://github.com/kubernetes/kubernetes/pull/60699), [@CaoShuFeng](https://github.com/CaoShuFeng)) -* --include-extended-apis, which was deprecated back in [#32894](https://github.com/kubernetes/kubernetes/pull/32894), has been removed. ([#62803](https://github.com/kubernetes/kubernetes/pull/62803), [@deads2k](https://github.com/deads2k)) -* Kubelets will no longer set `externalID` in their node spec. This feature has been deprecated since v1.1. ([#61877](https://github.com/kubernetes/kubernetes/pull/61877), [@mikedanese](https://github.com/mikedanese)) -* The `initresource` admission plugin has been removed. ([#58784](https://github.com/kubernetes/kubernetes/pull/58784), [@wackxu](https://github.com/wackxu)) -* `ObjectMeta `, `ListOptions`, and `DeleteOptions` have been removed from the core api group. Please reference them in `meta/v1` instead. ([#61809](https://github.com/kubernetes/kubernetes/pull/61809), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) -* The deprecated `--mode` flag in `check-network-mode` has been removed. ([#60102](https://github.com/kubernetes/kubernetes/pull/60102), [@satyasm](https://github.com/satyasm)) -* Support for the `alpha.kubernetes.io/nvidia-gpu` resource, which was deprecated in 1.10, has been removed. Please use the resource exposed by DevicePlugins instead (`nvidia.com/gpu`). ([#61498](https://github.com/kubernetes/kubernetes/pull/61498), [@mindprince](https://github.com/mindprince)) -* The `kube-cloud-controller-manager` flag `--service-account-private-key-file` has been removed. Use `--use-service-account-credentials` instead. ([#60875](https://github.com/kubernetes/kubernetes/pull/60875), [@charrywanganthony](https://github.com/charrywanganthony)) -* The rknetes code, which was deprecated in 1.10, has been removed. Use rktlet and CRI instead. ([#61432](https://github.com/kubernetes/kubernetes/pull/61432), [@filbranden](https://github.com/filbranden)) -* DaemonSet scheduling associated with the alpha ScheduleDaemonSetPods feature flag has been emoved. See https://github.com/kubernetes/features/issues/548 for feature status. ([#61411](https://github.com/kubernetes/kubernetes/pull/61411), [@liggitt](https://github.com/liggitt)) -* The `METADATA_AGENT_VERSION` configuration option has been removed to keep metadata agent version consistent across Kubernetes deployments. ([#63000](https://github.com/kubernetes/kubernetes/pull/63000), [@kawych](https://github.com/kawych)) -* The deprecated `--service-account-private-key-file` flag has been removed from the cloud-controller-manager. The flag is still present and supported in the kube-controller-manager. ([#65182](https://github.com/kubernetes/kubernetes/pull/65182), [@liggitt](https://github.com/liggitt)) -* Removed alpha functionality that allowed the controller manager to approve kubelet server certificates. This functionality should be replaced by automating validation and approval of node server certificate signing requests. ([#62471](https://github.com/kubernetes/kubernetes/pull/62471), [@mikedanese](https://github.com/mikedanese)) - -#### Graduated to Stable/GA -* IPVS-based in-cluster load balancing is now GA ([ref](https://github.com/kubernetes/features/issues/265)) -* Enable CoreDNS as a DNS plugin for Kubernetes ([ref](https://github.com/kubernetes/features/issues/427)) -* Azure Go SDK is now GA ([#63063](https://github.com/kubernetes/kubernetes/pull/63063), [@feiskyer](https://github.com/feiskyer)) -* ClusterRole aggregation is now GA ([ref](https://github.com/kubernetes/features/issues/502)) -* CRI validation test suite is now GA ([ref](https://github.com/kubernetes/features/issues/292)) -* StorageObjectInUseProtection is now GA ([ref](https://github.com/kubernetes/features/issues/498)) and ([ref](https://github.com/kubernetes/features/issues/499)) - -#### Graduated to Beta - -* Supporting out-of-tree/external cloud providers is now considered beta ([ref](https://github.com/kubernetes/features/issues/88)) -* Resizing PersistentVolumes after pod restart is now considered beta. ([ref](https://github.com/kubernetes/features/issues/284)) -* sysctl support is now considered beta ([ref](https://github.com/kubernetes/features/issues/34)) -* Support for Azure Virtual Machine Scale Sets is now considered beta. ([ref](https://github.com/kubernetes/features/issues/513)) -* Azure support for Cluster Autoscaler is now considered beta. ([ref](https://github.com/kubernetes/features/issues/514)) -* The ability to limit a node's access to the API is now considered beta. ([ref](https://github.com/kubernetes/features/issues/279)) -* CustomResource versioning is now considered beta. ([ref](https://github.com/kubernetes/features/issues/544)) -* Windows container configuration in CRI is now considered beta ([ref](https://github.com/kubernetes/features/issues/547)) -* CRI logging and stats are now considered beta ([ref](https://github.com/kubernetes/features/issues/552)) -* The dynamic Kubelet config feature is now beta, and the DynamicKubeletConfig feature gate is on by default. In order to use dynamic Kubelet config, ensure that the Kubelet's --dynamic-config-dir option is set. ([#64275](https://github.com/kubernetes/kubernetes/pull/64275), [@mtaufen](https://github.com/mtaufen)) -* The Sysctls experimental feature has been promoted to beta (enabled by default via the `Sysctls` feature flag). PodSecurityPolicy and Pod objects now have fields for specifying and controlling sysctls. Alpha sysctl annotations will be ignored by 1.11+ kubelets. All alpha sysctl annotations in existing deployments must be converted to API fields to be effective. ([#6371](https://github.com/kubernetes/kubernetes/pull/63717), [@ingvagabund](https://github.com/ingvagabund)) -* Volume expansion is now considered Beta. ([#64288](https://github.com/kubernetes/kubernetes/pull/64288), [@gnufied](https://github.com/gnufied)) -* CRI container log rotation is now considered beta, and is enabled by default. ([#64046](https://github.com/kubernetes/kubernetes/pull/64046), [@yujuhong](https://github.com/yujuhong)) -* The `PriorityClass` API has been promoted to `scheduling.k8s.io/v1beta1` ([#63100](https://github.com/kubernetes/kubernetes/pull/63100), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -* The priorityClass feature is now considered beta. ([#63724](https://github.com/kubernetes/kubernetes/pull/63724), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -* client-go: credential exec plugins is now considered beta. ([#64482](https://github.com/kubernetes/kubernetes/pull/64482), [@ericchiang](https://github.com/ericchiang)) -* Subresources for custom resources is now considered beta and enabled by default. With this, updates to the `/status` subresource will disallow updates to all fields other than `.status` (not just `.spec` and `.metadata` as before). Also, `required` can be used at the root of the CRD OpenAPI validation schema when the `/status` subresource is enabled. ([#63598](https://github.com/kubernetes/kubernetes/pull/63598), [@nikhita](https://github.com/nikhita)) - -### New alpha features - -* kube-scheduler can now schedule DaemonSet pods ([ref](https://github.com/kubernetes/features/issues/548)) -* You can now resize PersistentVolumes without taking them offline ([ref](https://github.com/kubernetes/features/issues/531)) -* You can now set a maximum volume count ([ref](https://github.com/kubernetes/features/issues/554)) -* You can now do environment variable expansion in a subpath mount. ([ref](https://github.com/kubernetes/features/issues/559)) -* You can now run containers in a pod as a particular group. ([ref](https://github.com/kubernetes/features/issues/213)) -You can now bind tokens to service requests. ([ref](https://github.com/kubernetes/features/issues/542)) -* The --experimental-qos-reserve kubelet flags has been replaced by the alpha level --qos-reserved flag or the QOSReserved field in the kubeletconfig, and requires the QOSReserved feature gate to be enabled. ([#62509](https://github.com/kubernetes/kubernetes/pull/62509), [@sjenning](https://github.com/sjenning)) - -## Other Notable Changes - -### SIG API Machinery - -* Orphan delete is now supported for custom resources. ([#63386](https://github.com/kubernetes/kubernetes/pull/63386), [@roycaihw](https://github.com/roycaihw)) -* Metadata of CustomResources is now pruned and schema-checked during deserialization of requests and when read from etcd. In the former case, invalid meta data is rejected, in the later it is dropped from the CustomResource objects. ([#64267](https://github.com/kubernetes/kubernetes/pull/64267), [@sttts](https://github.com/sttts)) -* The kube-apiserver openapi doc now includes extensions identifying `APIService` and `CustomResourceDefinition` `kind`s ([#64174](https://github.com/kubernetes/kubernetes/pull/64174), [@liggitt](https://github.com/liggitt)) -* CustomResourceDefinitions Status subresource now supports GET and PATCH ([#63619](https://github.com/kubernetes/kubernetes/pull/63619), [@roycaihw](https://github.com/roycaihw)) -* When updating `/status` subresource of a custom resource, only the value at the `.status` subpath for the update is considered. ([#63385](https://github.cm/kubernetes/kubernetes/pull/63385), [@CaoShuFeng](https://github.com/CaoShuFeng)) -* Added a way to pass extra arguments to etcd. The these extra arguments can be used to adjust runtime configuration like heartbeat interval etc. ([#63961](https://github.com/kubernetes/kubernetes/pull/63961), [@mborsz](https://github.com/mborsz)) -* Added Establishing Controller on CRDs to avoid race between Established condition and CRs actually served. In HA setups, the Established condition is delayed by 5 seconds. ([#63068](https://github.com/kubernetes/kubernetes/pull/63068), [@xmudrii](https://github.com/xmudrii)) -* Added `spec.additionalPrinterColumns` to CRDs to define server side printing columns. ([#60991](https://github.com/kubernetes/kubernetes/pull/60991), [@sttts](https://github.com/sttts)) -* Added CRD Versioning with NOP converter ([#63830](https://github.com/kubernetes/kubernetes/pull/63830), [@mbohlool](https://github.com/mbohlool)) -* Allow "required" and "description" to be used at the CRD OpenAPI validation schema root when the `/status` subresource is enabled. ([#63533](https://github.com/kubernetes/kubernetes/pull/63533), [@sttts](https://github.com/sttts)) -* Etcd health checks by the apiserver now ensure the apiserver can connect to and exercise the etcd API. ([#65027](https://github.com/kubernetes/kubernetes/pull/65027), [@liggitt](https://github.com/liggitt)) api- machinery -* The deprecated `--service-account-private-key-file` flag has been removed from the `cloud-controller-manager`. The flag is still present and supported in the `kube-controller-manager`. ([#65182](https://github.com/kubernetes/kubernetes/pull/65182), [@liggitt](https://github.com/liggitt)) -* Webhooks for the mutating admission controller now support the "remove" operation. ([#64255](https://github.com/kubernetes/kubernetes/pull/64255), [@rojkov](https://github.com/rojkov)) sig-API machinery -* The CRD OpenAPI v3 specification for validation now allows `additionalProperties`, which are mutually exclusive to properties. ([#62333](https://github.com/kubernetes/kubernetes/pull/62333), [@sttts](https://github.com/sttts)) -* Added the apiserver configuration option to choose the audit output version. ([#60056](https://github.com/kubernetes/kubernetes/pull/60056), [@crassirostris](https://github.com/crassirostris)) -* Created a new `dryRun` query parameter for mutating endpoints. If the parameter is set, then the query will be rejected, as the feature is not implemented yet. This will allow forward compatibility with future clients; otherwise, future clients talking with older apiservers might end up modifying a resource even if they include the `dryRun` query parameter. ([#63557](https://github.com/kubernetes/kubernetes/pull/63557), [@apelisse](https://github.com/apelisse)) -* `list`/`watch` API requests with a `fieldSelector` that specifies `metadata.name` can now be authorized as requests for an individual named resource ([#63469](https://github.com/kubernetes/kubernetes/pull/63469), [@wojtek-t](https://github.com/wojtek-t)) -* Exposed `/debug/flags/v` to allow dynamically set glog logging level. For example, to change glog level to 3, send a PUT request such as `curl -X PUT http://127.0.0.1:8080/debug/flags/v -d "3"`. ([#63777](https://github.com/kubernetes/kubernetes/pull/63777), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) -* Exec authenticator plugin supports TLS client certificates. ([#61803](https://github.com/kubernetes/kubernetes/pull/61803), [@awly](https://github.com/awly)) -* The `serverAddressByClientCIDRs` property in `metav1.APIGroup`(discovery API) is now optional instead of required. ([#61963](https://github.com/kubernetes/kubernetes/pull/61963), [@roycaihw](https://github.com/roycaihw)) -* `apiservices/status` and `certificatesigningrequests/status` now support `GET` and `PATCH` ([#64063](https://github.com/kubernetes/kubernetes/pull/64063), [@roycaihw](https://github.com/roycaihw)) -* APIServices with kube-like versions (e.g. `v1`, `v2beta1`, etc.) will be sorted appropriately within each group. ([#64004](https://github.com/kubernetes/kubernetes/pull/64004), [@mbohlool](https://github.com/mbohlool)) -* Event object references with apiversion will now that value. ([#63913](https://github.com/kubernetes/kubernetes/pull/63913), [@deads2k](https://github.com/deads2k)) -* Fixes the `kubernetes.default.svc` loopback service resolution to use a loopback configuration. ([#62649](https://github.com/kubernetes/kubernetes/pull/62649), [@liggitt](https://github.com/liggitt)) - -### SIG Apps - -* Added generators for `apps/v1` deployments. ([#61288](https://github.com/kubernetes/kubernetes/pull/61288), [@ayushpateria](https://github.com/ayushpateria)) - -### SIG Auth - -* RBAC information is now included in audit logs via audit.Event annotations: - * authorization.k8s.io/decision = {allow, forbid} - * authorization.k8s.io/reason = human-readable reason for the decision ([#58807](https://github.com/kubernetes/kubernetes/pull/58807), [@CaoShuFeng](https://github.com/CaoShuFeng)) -* `kubectl certificate approve|deny` will not modify an already approved or denied CSR unless the `--force` flag is provided. ([#61971](https://github.com/kubernetes/kubernetes/pull/61971), [@smarterclayton](https://github.com/smarterclayton)) -* The `--bootstrap-kubeconfig` argument to Kubelet previously created the first bootstrap client credentials in the certificates directory as `kubelet-client.key` and `kubelet-client.crt`. Subsequent certificates created by cert rotation were created in a combined PEM file that was atomically rotated as `kubelet-client-DATE.pem` in that directory, which meant clients relying on the `node.kubeconfig` generated by bootstrapping would never use a rotated cert. The initial bootstrap certificate is now generated into the cert directory as a PEM file and symlinked to `kubelet-client-current.pem` so that the generated kubeconfig remains valid after rotation. ([#62152](https://github.com/kubernetes/kubernetes/pull/62152), [@smarterclayton](https://github.com/smarterclayton)) -* Owner references can now be set during creation, even if the user doesn't have deletion power ([#63403](https://github.com/kubernetes/kubernetes/pull/63403), [@deads2k](https://github.com/deads2k)) -* Laid the groundwork for OIDC distributed claims handling in the apiserver authentication token checker. A distributed claim allows the OIDC provider to delegate a claim to a separate URL. ([ref](http://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims)). ([#63213](https://github.com/kubernetes/kubernetes/pull/63213), [@filmil](https://github.com/filmil)) -* RBAC: all configured authorizers are now checked to determine if an RBAC role or clusterrole escalation (setting permissions the user does not currently have via RBAC) is allowed. ([#56358](https://github.com/kubernetes/kubernetes/pull/56358), [@liggitt](https://github.com/liggitt)) -* kube-apiserver: OIDC authentication now supports requiring specific claims with `--oidc-required-claim==` Previously, there was no mechanism for a user to specify claims in the OIDC authentication process that were requid to be present in the ID Token with an expected value. This version now makes it possible to require claims support for the OIDC authentication. It allows users to pass in a `--oidc-required-claims` flag, and `key=value` pairs in the API config, which will ensure that the specified required claims are checked against the ID Token claims. ([#62136](https://github.com/kubernetes/kubernetes/pull/62136), [@rithujohn191](https://github.com/rithujohn191)) -* Included the list of security groups when failing with the errors that more than one is tagged. ([#58874](https://github.com/kubernetes/kubernetes/pull/58874), [@sorenmat](https://github.com/sorenmat)) -* Added proxy for container streaming in kubelet for streaming auth. ([#64006](https://github.com/kubernetes/kubernetes/pull/64006), [@Random-Liu](https://github.com/Random-Liu)) -* PodSecurityPolicy admission information has been added to audit logs. ([#58143](https://github.com/kubernetes/kubernetes/pull/58143), [@CaoShuFeng](https://github.com/CaoShuFeng)) -* TokenRequests now are required to have an expiration duration between 10 minutes and 2^32 seconds. ([#63999](https://github.com/kubernetes/kubernetes/pull/63999), [@mikedanese](https://github.com/mikedanese)) -* The `NodeRestriction` admission plugin now prevents kubelets from modifying/removing taints applied to their Node API object. ([#63167](https://github.com/kubernetes/kubernetes/pull/63167), [@liggitt](https://github.com/liggitt)) -* authz: nodes should not be able to delete themselves ([#62818](https://github.com/kubernetes/kubernetes/pull/62818), [@mikedanese](https://github.com/mikedanese)) - -### SIG Autoscaling - -* A cluster-autoscaler ClusterRole is added to cover only the functionality required by Cluster Autoscaler and avoid abusing system:cluster-admin role. Cloud providers other than GCE might want to update their deployments or sample yaml files to reuse the role created via add-on. ([#64503](https://github.com/kubernetes/kubernetes/pull/64503), [@kgolab](https://github.com/kgolab)) - -### SIG Azure - -* The Azure cloud provider now supports standard SKU load balancer and public IP. -`excludeMasterFromStandardLB` defaults to true, which means master nodes are excluded from the standard load balancer. Also note that because all nodes (except master) are added as loadbalancer backends, the standard load balancer doesn't work with the `service.beta.kubernetes.io/azure-load-balancer-mode` annotation. -([#61884](https://github.com/kubernetes/kubernetes/pull/61884), [#62707](https://github.com/kubernetes/kubernetes/pull/62707), [@feiskyer](https://github.com/feiskyer)) -* The Azure cloud provider now supports specifying allowed service tags by the `service.beta.kubernetes.io/azure-allowed-service-tags` annotation. ([#61467](https://github.com/kubernetes/kubernetes/pull/61467), [@feiskyer](https://github.com/feiskyer)) -* You can now change the size of an azuredisk PVC using `kubectl edit pvc pvc-azuredisk`. Note that this operation will fail if the volume is already attached to a running VM. ([#64386](https://github.com/kubernetes/kubernetes/pull/64386), [@andyzhangx](https://github.com/andyzhangx)) -* Block device support has been added for azure disk. ([#63841](https://github.com/kubernetes/kubernetes/pull/63841), [@andyzhangx](https://github.com/andyzhangx)) -* Azure VM names can now contain the underscore (`_`) character ([#63526](https://github.com/kubernetes/kubernetes/pull/63526), [@djsly](https://github.com/djsly)) -* Azure disks now support external resource groups. -([#64427](https://github.com/kubernetes/kuernetes/pull/64427), [@andyzhangx](https://github.com/andyzhangx)) -* Added reason message logs for non-existant Azure resources. -([#64248](https://github.com/kubernetes/kubernetes/pull/64248), [@feiskyer](https://github.com/feiskyer)) - -### SIG CLI - -* You can now use the `base64decode` function in kubectl go templates to decode base64-encoded data, such as `kubectl get secret SECRET -o go-template='{{ .data.KEY | base64decode }}'`. ([#60755](https://github.com/kubernetes/kubernetes/pull/60755), [@glb](https://github.com/glb)) -* `kubectl patch` now supports `--dry-run`. ([#60675](https://github.com/kubernetes/kubernetes/pull/60675), [@timoreimann](https://github.com/timoreimann)) -* The global flag `--match-server-version` is now global. `kubectl version` will respect it. ([#63613](https://github.com/kubernetes/kubernetes/pull/63613), [@deads2k](https://github.com/deads2k)) -* kubectl will list all allowed print formats when an invalid format is passed. ([#64371](https://github.com/kubernetes/kubernetes/pull/64371), [@CaoShuFeng](https://github.com/CaoShuFeng)) -* The global flag "context" now gets applied to `kubectl config view --minify`. In previous versions, this command was only available for `current-context`. Now it will be easier for users to view other non current contexts when minifying. ([#64608](https://github.com/kubernetes/kubernetes/pull/64608), [@dixudx](https://github.com/dixudx)) -* `kubectl apply --prune` supports CronJob resources. ([#62991](https://github.com/kubernetes/kubernetes/pull/62991), [@tomoe](https://github.com/tomoe)) -* The `--dry-run` flag has been enabled for `kubectl auth reconcile` ([#64458](https://github.com/kubernetes/kubernetes/pull/64458), [@mrogers950](https://github.com/mrogers950)) -* `kubectl wait` is a new command that allows waiting for one or more resources to be deleted or to reach a specific condition. It adds a `kubectl wait --for=[delete|condition=condition-name] resource/string` command. ([#64034](https://github.com/kubernetes/kubernetes/pull/64034), [@deads2k](https://github.com/deads2k)) -* `kubectl auth reconcile` only works with rbac.v1; all the core helpers have been switched over to use the external types. ([#63967](https://github.com/kubernetes/kubernetes/pull/63967), [@deads2k](https://github.com/deads2k)) -* kubectl and client-go now detect duplicated names for user, cluster and context when loading kubeconfig and report this condition as an error. ([#60464](https://github.com/kubernetes/kubernetes/pull/60464), [@roycaihw](https://github.com/roycaihw)) -* Added 'UpdateStrategyType' and 'RollingUpdateStrategy' to 'kubectl describe sts' command output. ([#63844](https://github.com/kubernetes/kubernetes/pull/63844), [@tossmilestone](https://github.com/tossmilestone)) -* Initial Korean translation for kubectl has been added. ([#62040](https://github.com/kubernetes/kubernetes/pull/62040), [@ianychoi](https://github.com/ianychoi)) -* `kubectl cp` now supports completion. -([#60371](https://github.com/kubernetes/kubernetes/pull/60371), [@superbrothers](https://github.com/superbrothers)) -* The shortcuts that were moved server-side in at least 1.9 have been removed from being hardcoded in kubectl. This means that the client-based restmappers have been moved to client-go, where everyone who needs them can have access. ([#63507](https://github.com/kubernetes/kubernetes/pull/63507), [@deads2k](https://github.com/deads2k)) -* When using `kubectl delete` with selection criteria, the defaults to is now to ignore "not found" errors. Note that this does not apply when deleting a speciic resource. ([#63490](https://github.com/kubernetes/kubernetes/pull/63490), [@deads2k](https://github.com/deads2k)) -* `kubectl create [secret | configmap] --from-file` now works on Windows with fully-qualified paths ([#63439](https://github.com/kubernetes/kubernetes/pull/63439), [@liggitt](https://github.com/liggitt)) -* Portability across systems has been increased by the use of `/usr/bin/env` in all script shebangs. ([#62657](https://github.com/kubernetes/kubernetes/pull/62657), [@matthyx](https://github.com/matthyx)) -* You can now use `kubectl api-resources` to discover resources. - ([#42873](https://github.com/kubernetes/kubernetes/pull/42873), [@xilabao](https://github.com/xilabao)) -* You can now display requests/limits of extended resources in node allocated resources. ([#46079](https://github.com/kubernetes/kubernetes/pull/46079), [@xiangpengzhao](https://github.com/xiangpengzhao)) -* The `--remove-extra-subjects` and `--remove-extra-permissions` flags have been enabled for `kubectl auth reconcile` ([#64541](https://github.com/kubernetes/kubernetes/pull/64541), [@mrogers950](https://github.com/mrogers950)) -* kubectl now has improved compatibility with older servers when creating/updating API objects ([#61949](https://github.com/kubernetes/kubernetes/pull/61949), [@liggitt](https://github.com/liggitt)) -* `kubectl apply` view/edit-last-applied now supports completion. ([#60499](https://github.com/kubernetes/kubernetes/pull/60499), [@superbrothers](https://github.com/superbrothers)) - -### SIG Cluster Lifecycle - - * kubeadm: The `:Etcd` struct has been refactored in the v1alpha2 API. All the options now reside under either `.Etcd.Local` or `.Etcd.External`. Automatic conversions from the v1alpha1 API are supported. ([#64066](https://github.com/kubernetes/kubernetes/pull/64066), [@luxas](https://github.com/luxas)) -* kubeadm now uses an upgraded API version for the configuration file, `kubeadm.k8s.io/v1alpha2`. kubeadm in v1.11 will still be able to read `v1alpha1` configuration, and will automatically convert the configuration to `v1alpha2`, both internally and when storing the configuration in the ConfigMap in the cluster. ([#63788](https://github.com/kubernetes/kubernetes/pull/63788), [@luxas](https://github.com/luxas)) -* Phase `kubeadm alpha phase kubelet` has been added to support dynamic kubelet configuration in kubeadm. ([#57224](https://github.com/kubernetes/kubernetes/pull/57224), [@xiangpengzhao](https://github.com/xiangpengzhao)) -* The kubeadm config option `API.ControlPlaneEndpoint` has been extended to take an optional port, which may differ from the apiserver's bind port. ([#62314](https://github.com/kubernetes/kubernetes/pull/62314), [@rjosephwright](https://github.com/rjosephwright)) -* The `--cluster-name` parameter has been added to kubeadm init, enabling users to specify the cluster name in kubeconfig. ([#60852](https://github.com/kubernetes/kubernetes/pull/60852), [@karan](https://github.com/karan)) -* The logging feature for kubeadm commands now supports a verbosity setting. ([#57661](https://github.com/kubernetes/kubernetes/pull/57661), [@vbmade2000](https://github.com/vbmade2000)) -* kubeadm now has a join timeout that can be controlled via the `discoveryTimeout` config option. This option is set to 5 minutes by default. ([#60983](https://github.com/kubernetes/kubernetes/pull/60983), [@rosti](https://github.com/rosti)) -* Added the `writable` boolean option to kubeadm config. This option works on a per-volume basis for `ExtraVolumes` config keys. ([#60428](https://github.com/kubernetes/kubernetes/pul60428), [@rosti](https://github.com/rosti)) -* Added a new `kubeadm upgrade node config` command. ([#64624](https://github.com/kubernetes/kubernetes/pull/64624), [@luxas](https://github.com/luxas)) -* kubeadm now makes the CoreDNS container more secure by dropping (root) capabilities and improves the integrity of the container by running the whole container in read-only. ([#64473](https://github.com/kubernetes/kubernetes/pull/64473), [@nberlee](https://github.com/nberlee)) -* kubeadm now detects the Docker cgroup driver and starts the kubelet with the matching driver. This eliminates a common error experienced by new users in when the Docker cgroup driver is not the same as the one set for the kubelet due to different Linux distributions setting different cgroup drivers for Docker, making it hard to start the kubelet properly. -([#64347](https://github.com/kubernetes/kubernetes/pull/64347), [@neolit123](https://github.com/neolit123)) -* Added a 'kubeadm config migrate' command to convert old API types to their newer counterparts in the new, supported API types. This is just a client-side tool; it just executes locally without requiring a cluster to be running, operating in much the same way as a Unix pipe that upgrades config files. ([#64232](https://github.com/kubernetes/kubernetes/pull/64232), [@luxas](https://github.com/luxas)) -* kubeadm will now pull required images during preflight checks if it cannot find them on the system. ([#64105](https://github.com/kubernetes/kubernetes/pull/64105), [@chuckha](https://github.com/chuckha)) -* "kubeadm init" now writes a structured and versioned kubelet ComponentConfiguration file to `/var/lib/kubelet/config.yaml` and an environment file with runtime flags that you can source in the systemd kubelet dropin to `/var/lib/kubelet/kubeadm-flags.env`. ([#63887](https://github.com/kubernetes/kubernetes/pull/63887), [@luxas](https://github.com/luxas)) -* A `kubeadm config print-default` command has now been added. You can use this command to output a starting point when writing your own kubeadm configuration files. ([#63969](https://github.com/kubernetes/kubernetes/pull/63969), [@luxas](https://github.com/luxas)) -* Updated kubeadm's minimum supported kubernetes in v1.11.x to 1.10 ([#63920](https://github.com/kubernetes/kubernetes/pull/63920), [@dixudx](https://github.com/dixudx)) -* Added the `kubeadm upgrade diff` command to show how static pod manifests will be changed by an upgrade. This command shows the changes that will be made to the static pod manifests before applying them. This is a narrower case than kubeadm upgrade apply --dry-run, which specifically focuses on the static pod manifests. ([#63930](https://github.com/kubernetes/kubernetes/pull/63930), [@liztio](https://github.com/liztio)) -* The `kubeadm config images pull` command can now be used to pull container images used by kubeadm. ([#63833](https://github.com/kubernetes/kubernetes/pull/63833), [@chuckha](https://github.com/chuckha)) -* kubeadm will now deploy CoreDNS by default instead of KubeDNS ([#63509](https://github.com/kubernetes/kubernetes/pull/63509), [@detiber](https://github.com/detiber)) -* Preflight checks for kubeadm no longer validate custom kube-apiserver, kube-controller-manager and kube-scheduler arguments. ([#63673](https://github.com/kubernetes/kubernetes/pull/63673), [@chuckha](https://github.com/chuckha)) -* Added a `kubeadm config images list` command that lists required container images for a kubeadm install. ([#63450](https://github.com/kubernetes/kubernetes/pull/63450), [@chuckha](https://github.com/chukha)) -* You can now use `kubeadm token` specifying `--kubeconfig`. In this case, kubeadm searches the current user home path and the environment variable KUBECONFIG for existing files. If provided, the `--kubeconfig` flag will be honored instead. ([#62850](https://github.com/kubernetes/kubernetes/pull/62850), [@neolit123](https://github.com/neolit123)) -([#64988](https://github.com/kubernetes/kubernetes/pull/64988), [@detiber](https://github.com/detiber)) -* kubeadm now sets peer URLs for the default etcd instance. Previously we left the defaults, which meant the peer URL was unsecured. -* Kubernetes now packages crictl in a cri-tools deb and rpm package. ([#64836](https://github.com/kubernetes/kubernetes/pull/64836), [@chuckha](https://github.com/chuckha)) -* kubeadm now prompts the user for confirmation when resetting a master node. ([#59115](https://github.com/kubernetes/kubernetes/pull/59115), [@alexbrand](https://github.com/alexbrand)) -* kubead now creates kube-proxy with a toleration to run on all nodes, no matter the taint. ([#62390](https://github.com/kubernetes/kubernetes/pull/62390), [@discordianfish](https://github.com/discordianfish)) -* kubeadm now sets the kubelet `--resolv-conf` flag conditionally on init. ([#64665](https://github.com/kubernetes/kubernetes/pull/64665), [@stealthybox](https://github.com/stealthybox)) -* Added ipset and udevadm to the hyperkube base image. ([#61357](https://github.com/kubernetes/kubernetes/pull/61357), [@rphillips](https://github.com/rphillips)) - -### SIG GCP - -* Kubernetes clusters on GCE now have crictl installed. Users can use it to help debug their nodes. See the [crictl documentation](https://github.com/kubernetes-incubator/cri-tools/blob/master/docs/crictl.md) for details. ([#63357](https://github.com/kubernetes/kubernetes/pull/63357), [@Random-Liu](https://github.com/Random-Liu)) -* `cluster/kube-up.sh` now provisions a Kubelet config file for GCE via the metadata server. This file is installed by the corresponding GCE init scripts. ([#62183](https://github.com/kubernetes/kubernetes/pull/62183), [@mtaufen](https://github.com/mtaufen)) -* GCE: Update cloud provider to use TPU v1 API ([#64727](https://github.com/kubernetes/kubernetes/pull/64727), [@yguo0905](https://github.com/yguo0905)) -* GCE: Bump GLBC version to 1.1.1 - fixing an issue of handling multiple certs with identical certificates. ([#62751](https://github.com/kubernetes/kubernetes/pull/62751), [@nicksardo](https://github.com/nicksardo)) - -### SIG Instrumentation - -* Added prometheus cluster monitoring addon to kube-up. ([#62195](https://github.com/kubernetes/kubernetes/pull/62195), [@serathius](https://github.com/serathius)) -* Kubelet now exposes a new endpoint, `/metrics/probes`, which exposes a Prometheus metric containing the liveness and/or readiness probe results for a container. ([#61369](https://github.com/kubernetes/kubernetes/pull/61369), [@rramkumar1](https://github.com/rramkumar1)) - -### SIG Network - -* The internal IP address of the node is now added as additional information for kubectl. ([#57623](https://github.com/kubernetes/kubernetes/pull/57623), [@dixudx](https://github.com/dixudx)) -* NetworkPolicies can now target specific pods in other namespaces by including both a namespaceSelector and a podSelector in the same peer element. ([#60452](https://github.com/kubernetes/kubernetes/pull/60452), [@danwinship](https://github.com/danwinship)) -* CoreDNS deployment configuration now uses the k8s.gcr.io imageRepository. ([#64775](https://github.com/kubernetes/kubernetes/pull/64775), [@rajansandeep](https://giub.com/rajansandeep)) -* kubelet's `--cni-bin-dir` option now accepts multiple comma-separated CNI binary directory paths, which are searched for CNI plugins in the given order. ([#58714](https://github.com/kubernetes/kubernetes/pull/58714), [@dcbw](https://github.com/dcbw)) -* You can now use `--ipvs-exclude-cidrs` to specify a list of CIDR's which the IPVS proxier should not touch when cleaning up IPVS rules. ([#62083](https://github.com/kubernetes/kubernetes/pull/62083), [@rramkumar1](https://github.com/rramkumar1)) -* You can now receive node DNS info with the `--node-ip` flag, which adds `ExternalDNS`, `InternalDNS`, and `ExternalIP` to kubelet's output. ([#63170](https://github.com/kubernetes/kubernetes/pull/63170), [@micahhausler](https://github.com/micahhausler)) -* You can now have services that listen on the same host ports on different interfaces by specifying `--nodeport-addresses`. ([#62003](https://github.com/kubernetes/kubernetes/pull/62003), [@m1093782566](https://github.com/m1093782566)) -* Added port-forward examples for service - -### SIG Node - -* CRI: The container log path has been changed from containername_attempt#.log to containername/attempt#.log ([#62015](https://github.com/kubernetes/kubernetes/pull/62015), [@feiskyer](https://github.com/feiskyer)) -* Introduced the `ContainersReady` condition in Pod status. ([#64646](https://github.com/kubernetes/kubernetes/pull/64646), [@freehan](https://github.com/freehan)) -* Kubelet will now set extended resource capacity to zero after it restarts. If the extended resource is exported by a device plugin, its capacity will change to a valid value after the device plugin re-connects with the Kubelet. If the extended resource is exported by an external component through direct node status capacity patching, the component should repatch the field after kubelet becomes ready again. During the time gap, pods previously assigned with such resources may fail kubelet admission but their controller should create new pods in response to such failures. ([#64784](https://github.com/kubernetes/kubernetes/pull/64784), [@jiayingz](https://github.com/jiayingz)) node -* You can now use a security context with Windows containers -([#64009](https://github.com/kubernetes/kubernetes/pull/64009), [@feiskyer](https://github.com/feiskyer)) -* Added e2e regression tests for kubelet security. ([#64140](https://github.com/kubernetes/kubernetes/pull/64140), [@dixudx](https://github.com/dixudx)) -* The maximum number of images the Kubelet will report in the Node status can now be controlled via the Kubelet's `--node-status-max-images` flag. The default (50) remains the same. ([#64170](https://github.com/kubernetes/kubernetes/pull/64170), [@mtaufen](https://github.com/mtaufen)) -* The Kubelet now exports metrics that report the assigned (`node_config_assigned`), last-known-good (`node_config_last_known_good`), and active (`node_config_active`) config sources, and a metric indicating whether the node is experiencing a config-related error (`node_config_error`). The config source metrics always report the value `1`, and carry the `node_config_name`, `node_config_uid`, `node_config_resource_version`, and `node_config_kubelet_key labels`, which identify the config version. The error metric reports `1` if there is an error, `0` otherwise. ([#57527](https://github.com/kubernetes/kubernetes/pull/57527), [@mtaufen](https://github.com/mtaufen)) -* You now have the ability to quota resources by priority. ([#57963](https://github.com/kubernetes/kubernetes/pull/57963), [@vikaschoudhary16](https://github.com/ikaschoudhary16)) -* The gRPC max message size in the remote container runtime has been increased to 16MB. ([#64672](https://github.com/kubernetes/kubernetes/pull/64672), [@mcluseau](https://github.com/mcluseau)) -* Added a feature gate for the plugin watcher. ([#64605](https://github.com/kubernetes/kubernetes/pull/64605), [@vikaschoudhary16](https://github.com/vikaschoudhary16)) -* The status of dynamic Kubelet config is now reported via Node.Status.Config, rather than the KubeletConfigOk node condition. ([#63314](https://github.com/kubernetes/kubernetes/pull/63314), [@mtaufen](https://github.com/mtaufen)) -* You must now specify `Node.Spec.ConfigSource.ConfigMap.KubeletConfigKey` when using dynamic Kubelet config to tell the Kubelet which key of the `ConfigMap` identifies its config file. ([#59847](https://github.com/kubernetes/kubernetes/pull/59847), [@mtaufen](https://github.com/mtaufen)) -* The dynamic Kubelet config feature will now update the config in the event of a ConfigMap mutation, which reduces the chance for silent config skew. Only name, namespace, and kubeletConfigKey may now be set in `Node.Spec.ConfigSource.ConfigMap`. The least disruptive pattern for config management is still to create a new ConfigMap and incrementally roll out a new `Node.Spec.ConfigSource`. ([#63221](https://github.com/kubernetes/kubernetes/pull/63221), [@mtaufen](https://github.com/mtaufen)) -* Change seccomp annotation from "docker/default" to "runtime/default" ([#62662](https://github.com/kubernetes/kubernetes/pull/62662), [@wangzhen127](https://github.com/wangzhen127)) -* The node authorizer now automatically sets up rules for `Node.Spec.ConfigSource` when the DynamicKubeletConfig feature gate is enabled. ([#60100](https://github.com/kubernetes/kubernetes/pull/60100), [@mtaufen](https://github.com/mtaufen)) -* CRI now defines mounting behavior. If the host path doesn't exist, the runtime should return an error. If the host path is a symlink, the runtime should follow the symlink and mount the real destination to the container. ([#61460](https://github.com/kubernetes/kubernetes/pull/61460), [@feiskyer](https://github.com/feiskyer)) - -### SIG OpenStack - -* Provide a meaningful error message in the openstack cloud provider when no valid IP address can be found for a node, rather than just the first address of the node, which leads to a load balancer error if that address is a hostname or DNS name instead of an IP address. ([#64318](https://github.com/kubernetes/kubernetes/pull/64318), [@gonzolino](https://github.com/gonzolino)) -* Restored the pre-1.10 behavior of the openstack cloud provider, which uses the instance name as the Kubernetes Node name. This requires instances be named with RFC-1123 compatible names. ([#63903](https://github.com/kubernetes/kubernetes/pull/63903), [@liggitt](https://github.com/liggitt)) -* Kubernetes will try to read the openstack auth config from the client config and fall back to read from the environment variables if the auth config is not available. ([#60200](https://github.com/kubernetes/kubernetes/pull/60200), [@dixudx](https://github.com/dixudx)) - -### SIG Scheduling - -* Schedule DaemonSet Pods in scheduler, rather than the Daemonset controller. -([#63223](https://github.com/kubernetes/kubernetes/pull/63223), [@k82cn](https://github.com/k82cn)) -* Added `MatchFields` to `NodeSelectorTerm`; in 1.11, it only supports `metadata.name`. ([#62002](https://github.com/kubernetes/kubernetes/pull/62002), [@k82cn](https://github.com/k82cn)) -* kube-scheduler now has the `--write-config-to` flag so that Scheduler canwritets default configuration to a file. -([#62515](https://github.com/kubernetes/kubernetes/pull/62515), [@resouer](https://github.com/resouer)) -* Performance of the affinity/anti-affinity predicate for the default scheduler has been significantly improved. ([#62211](https://github.com/kubernetes/kubernetes/pull/62211), [@bsalamat](https://github.com/bsalamat)) -* The 'scheduling_latency_seconds' metric into has been split into finer steps (predicate, priority, preemption). ([#65306](https://github.com/kubernetes/kubernetes/pull/65306), [@shyamjvs](https://github.com/shyamjvs)) -* Scheduler now has a summary-type metric, 'scheduling_latency_seconds'. ([#64838](https://github.com/kubernetes/kubernetes/pull/64838), [@krzysied](https://github.com/krzysied)) -* `nodeSelector.matchFields` (node's `metadata.node`) is now supported in scheduler. ([#62453](https://github.com/kubernetes/kubernetes/pull/62453), [@k82cn](https://github.com/k82cn)) -* Added a parametrizable priority function mapping requested/capacity ratio to priority. This function is disabled by default and can be enabled via the scheduler policy config file. -([#63929](https://github.com/kubernetes/kubernetes/pull/63929), [@losipiuk](https://github.com/losipiuk)) -* System critical priority classes are now automatically added at cluster boostrapping. ([#60519](https://github.com/kubernetes/kubernetes/pull/60519), [@bsalamat](https://github.com/bsalamat)) - -### SIG Storage - -* AWS EBS, Azure Disk, GCE PD and Ceph RBD volume plugins now support dynamic provisioning of raw block volumes. ([#64447](https://github.com/kubernetes/kubernetes/pull/64447), [@jsafrane](https://github.com/jsafrane)) -* gitRepo volumes in pods no longer require git 1.8.5 or newer; older git versions are now supported. ([#62394](https://github.com/kubernetes/kubernetes/pull/62394), [@jsafrane](https://github.com/jsafrane)) -* Added support for resizing Portworx volumes. ([#62308](https://github.com/kubernetes/kubernetes/pull/62308), [@harsh-px](https://github.com/harsh-px)) -* Added block volume support to Cinder volume plugin. ([#64879](https://github.com/kubernetes/kubernetes/pull/64879), [@bertinatto](https://github.com/bertinatto)) -* Provided API support for external CSI storage drivers to support block volumes. ([#64723](https://github.com/kubernetes/kubernetes/pull/64723), [@vladimirvivien](https://github.com/vladimirvivien)) -* Volume topology aware dynamic provisioning for external provisioners is now supported. ([#63193](https://github.com/kubernetes/kubernetes/pull/63193), [@lichuqiang](https://github.com/lichuqiang)) -* Added a volume projection that is able to project service account tokens. ([#62005](https://github.com/kubernetes/kubernetes/pull/62005), [@mikedanese](https://github.com/mikedanese)) -* PodSecurityPolicy now supports restricting hostPath volume mounts to be readOnly and under specific path prefixes ([#58647](https://github.com/kubernetes/kubernetes/pull/58647), [@jhorwit2](https://github.com/jhorwit2)) -* Added StorageClass API to restrict topologies of dynamically provisioned volumes. ([#63233](https://github.com/kubernetes/kubernetes/pull/63233), [@lichuqiang](https://github.com/lichuqiang)) -* Added Alpha support for dynamic volume limits based on node type ([#64154](https://github.com/kubernetes/kubernetes/pull/64154), [@gnufied](https://github.com/gnufied)) -* AWS EBS volumes can be now used as ReadOnly in pods. ([#64403](https://github.com/kubernetes/kubernetes/pull/64403), [@jsafrane](https://github.com/jsafrane)) -* Basic plumbing for volume topology aware dynamic provisionin has been implemented. ([#63232](https://github.com/kubernetes/kubernetes/pull/63232), [@lichuqiang](https://github.com/lichuqiang)) -* Changed ext3/ext4 volume creation to not reserve any portion of the volume for the root user. When creating ext3/ext4 volume, mkfs defaults to reserving 5% of the volume for the super-user (root). This patch changes the mkfs to pass -m0 to disable this setting. -([#64102](https://github.com/kubernetes/kubernetes/pull/64102), [@atombender](https://github.com/atombender)) -* Added support for NFS relations on kubernetes-worker charm. ([#63817](https://github.com/kubernetes/kubernetes/pull/63817), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* Implemented kubelet side online file system resizing ([#62460](https://github.com/kubernetes/kubernetes/pull/62460), [@mlmhl](https://github.com/mlmhl)) -* Generated subpath name from Downward API env ([#49388](https://github.com/kubernetes/kubernetes/pull/49388), [@kevtaylor](https://github.com/kevtaylor)) - -### SIG vSphere - -* Added a mechanism in vSphere Cloud Provider to get credentials from Kubernetes secrets, rather than the plain text `vsphere.conf` file.([#63902](https://github.com/kubernetes/kubernetes/pull/63902), [@abrarshivani](https://github.com/abrarshivani)) -* vSphere Cloud Provider: added SAML token authentication support ([#63824](https://github.com/kubernetes/kubernetes/pull/63824), [@dougm](https://github.com/dougm)) - -### SIG Windows - -* Added log and fs stats for Windows containers. ([#62266](https://github.com/kubernetes/kubernetes/pull/62266), [@feiskyer](https://github.com/feiskyer)) -* Added security contexts for Windows containers. [#64009](https://github.com/kubernetes/kubernetes/pull/64009), ([@feiskyer](https://github.com/feiskyer)) -* Added local persistent volumes for Windows containers. ([#62012](https://github.com/kubernetes/kubernetes/pull/62012), [@andyzhangx](https://github.com/andyzhangx)) and fstype for Azure disk ([#61267](https://github.com/kubernetes/kubernetes/pull/61267), [@andyzhangx](https://github.com/andyzhangx)) -* Improvements in Windows Server version 1803 also bring new storage functionality to Kubernetes v1.11, including: - * Volume mounts for ConfigMap and Secret - * Flexvolume plugins for SMB and iSCSI storage are also available out-of-tree at [Microsoft/K8s-Storage-Plugins](https://github.com/Microsoft/K8s-Storage-Plugins) -* Setup dns servers and search domains for Windows Pods in dockershim. Docker EE version >= 17.10.0 is required for propagating DNS to containers. ([#63905](https://github.com/kubernetes/kubernetes/pull/63905), [@feiskyer](https://github.com/feiskyer)) - -### Additional changes - -* Extended the Stackdriver Metadata Agent by adding a new Deployment for ingesting unscheduled pods and services. ([#62043](https://github.com/kubernetes/kubernetes/pull/62043), [@supriyagarg](https://github.com/supriyagarg)) -* Added all kinds of resource objects' statuses in HPA description. ([#59609](https://github.com/kubernetes/kubernetes/pull/59609), [@zhangxiaoyu-zidif](https://github.com/zhangxiaoyu-zidif)) -* Implemented preemption for extender with a verb and new interface ([#58717](https://github.com/kubernetes/kubernetes/pull/58717), [@resouer](https://github.com/resouer)) -* Updated nvidia-gpu-device-plugin DaemonSet config to use RollingUpdate updateStrategy instead of OnDelete. ([#64296](https://github.com/kubernetes/kubernetes/pull/64296), [@mindprince](https://github.com/mindprince)) -* increased grpc client default response size. ([#63977](https://github.com/kubernetes/kubernetes/pull/677), [@runcom](https://github.com/runcom)) -* Applied pod name and namespace labels to pod cgroup in cAdvisor metrics ([#63406](https://github.com/kubernetes/kubernetes/pull/63406), [@derekwaynecarr](https://github.com/derekwaynecarr)) -* [fluentd-gcp addon] Use the logging agent's node name as the metadata agent URL. ([#63353](https://github.com/kubernetes/kubernetes/pull/63353), [@bmoyles0117](https://github.com/bmoyles0117)) -* The new default value for the --allow-privileged parameter of the Kubernetes-worker charm has been set to true based on changes which went into the Kubernetes 1.10 release. Before this change the default value was set to false. If you're installing Canonical Kubernetes you should expect this value to now be true by default and you should now look to use PSP (pod security policies). ([#64104](https://github.com/kubernetes/kubernetes/pull/64104), [@CalvinHartwell](https://github.com/CalvinHartwell)) - -## External Dependencies - -* Default etcd server version is v3.2.18 compared with v3.1.12 in v1.10 ([#61198](https://github.com/kubernetes/kubernetes/pull/61198)) -* Rescheduler is v0.4.0, compared with v0.3.1 in v1.10 ([#65454](https://github.com/kubernetes/kubernetes/pull/65454)) -* The validated docker versions are the same as for v1.10: 1.11.2 to 1.13.1 and 17.03.x (ref) -* The Go version is go1.10.2, as compared to go1.9.3 in v1.10. ([#63412](https://github.com/kubernetes/kubernetes/pull/63412)) -* The minimum supported go is the same as for v1.10: go1.9.1. ([#55301](https://github.com/kubernetes/kubernetes/pull/55301)) -* CNI is the same as v1.10: v0.6.0 ([#51250](https://github.com/kubernetes/kubernetes/pull/51250)) -* CSI is updated to 0.3.0 as compared to 0.2.0 in v1.10. ([#64719](https://github.com/kubernetes/kubernetes/pull/64719)) -* The dashboard add-on is the same as v1.10: v1.8.3. ([#517326](https://github.com/kubernetes/kubernetes/pull/57326)) -* Bump Heapster to v1.5.2 as compared to v1.5.0 in v1.10 ([#61396](https://github.com/kubernetes/kubernetes/pull/61396)) -* Updates Cluster Autoscaler version to v1.3.0 from v1.2.0 in v1.10. See [release notes](https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.3.0) for details. ([#65219](https://github.com/kubernetes/kubernetes/pull/65219)) -* Kube-dns has been updated to v1.14.10, as compared to v1.14.8 in v1.10 ([#62676](https://github.com/kubernetes/kubernetes/pull/62676)) -* Influxdb is unchanged from v1.10: v1.3.3 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) -* Grafana is unchanged from v1.10: v4.4.3 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) -* CAdvisor is v0.30.1, as opposed to v0.29.1 in v1.10 ([#64987](https://github.com/kubernetes/kubernetes/pull/64987)) -* fluentd-gcp-scaler is unchanged from v1.10: v0.3.0 ([#61269](https://github.com/kubernetes/kubernetes/pull/61269)) -* fluentd in fluentd-es-image is unchanged from 1.10: v1.1.0 ([#58525](https://github.com/kubernetes/kubernetes/pull/58525)) -* fluentd-elasticsearch is unchanged from 1.10: v2.0.4 ([#58525](https://github.com/kubernetes/kubernetes/pull/58525)) -* fluentd-gcp is unchanged from 1.10: v3.0.0. ([#60722](https://github.com/kubernetes/kubernetes/pull/60722)) -* Ingress glbc is unchanged from 1.10: v1.0.0 ([#61302](https://github.com/kubernetes/kubernetes/pull/61302)) -* OIDC authentication is unchanged from 1.10: coreos/go-oidc v2 ([#58544](https://github.com/kubernetes/kubernetes/pull/58544)) -* Calico is unchanged from 1.10: v2.6.7 ([#59130](https://github.com/kubernetes/kubernetes/pull/59130)) -* hcsshim has been updated to v0..11 ([#64272](https://github.com/kubernetes/kubernetes/pull/64272)) -* gitRepo volumes in pods no longer require git 1.8.5 or newer; older git versions are now supported. ([#62394](https://github.com/kubernetes/kubernetes/pull/62394)) -* Update crictl on GCE to v1.11.0. ([#65254](https://github.com/kubernetes/kubernetes/pull/65254)) -* CoreDNS is now v1.1.3 ([#64258](https://github.com/kubernetes/kubernetes/pull/64258)) -* Setup dns servers and search domains for Windows Pods in dockershim. Docker EE version >= 17.10.0 is required for propagating DNS to containers. ([#63905](https://github.com/kubernetes/kubernetes/pull/63905)) -* Update version of Istio addon from 0.5.1 to 0.8.0. See [full Istio release notes](https://istio.io/about/notes/0.6.html).([#64537](https://github.com/kubernetes/kubernetes/pull/64537)) -* Update cadvisor godeps to v0.30.0 ([#64800](https://github.com/kubernetes/kubernetes/pull/64800)) -* Update event-exporter to version v0.2.0 that supports old (gke_container/gce_instance) and new (k8s_container/k8s_node/k8s_pod) stackdriver resources. ([#63918](https://github.com/kubernetes/kubernetes/pull/63918)) -* Rev the Azure SDK for networking to 2017-06-01 ([#61955](https://github.com/kubernetes/kubernetes/pull/61955)) - -## Bug Fixes - -* Fixed spurious "unable to find api field" errors patching custom resources ([#63146](https://github.com/kubernetes/kubernetes/pull/63146), [@liggitt](https://github.com/liggitt)) -* Nodes are not deleted from kubernetes anymore if node is shutdown in Openstack. ([#59931](https://github.com/kubernetes/kubernetes/pull/59931), [@zetaab](https://github.com/zetaab)) -* Re-enabled nodeipam controller for external clouds. Re-enables nodeipam controller for external clouds. Also does a small refactor so that we don't need to pass in allocateNodeCidr into the controller. - ([#63049](https://github.com/kubernetes/kubernetes/pull/63049), [@andrewsykim](https://github.com/andrewsykim)) -* Fixed a configuration error when upgrading kubeadm from 1.9 to 1.10+; Kubernetes must have the same major and minor versions as the kubeadm library. ([#62568](https://github.com/kubernetes/kubernetes/pull/62568), [@liztio](https://github.com/liztio)) -* kubectl no longer renders a List as suffix kind name for CRD resources ([#62512](https://github.com/kubernetes/kubernetes/pull/62512), [@dixudx](https://github.com/dixudx)) -* Restored old behavior to the `--template` flag in `get.go`. In old releases, providing a `--template` flag value and no `--output` value implicitly assigned a default value ("go-template") to `--output`, printing using the provided template argument. -([#65377](https://github.com/kubernetes/kubernetes/pull/65377),[@juanvallejo](https://github.com/juanvallejo)) -* Ensured cloudprovider.InstanceNotFound is reported when the VM is not found on Azure ([#61531](https://github.com/kubernetes/kubernetes/pull/61531), [@feiskyer](https://github.com/feiskyer)) -* Kubernetes version command line parameter in kubeadm has been updated to drop an unnecessary redirection from ci/latest.txt to ci-cross/latest.txt. Users should know exactly where the builds are stored on Google Cloud storage buckets from now on. For example for 1.9 and 1.10, users can specify ci/latest-1.9 and ci/latest-1.10 as the CI build jobs what build images correctly updates those. The CI jobs for master update the ci-cross/latest location, so if you are looking for latest master builds, then the correct parameter to use would be ci-cross/latest. ([#63504](https://github.com/kubernetes/kubernetes/pull/63504), [@dims](https://github.cm/dims)) +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-node-linux-amd64.tar.gz) | `6016c3a1e14c42dcc88caed6497de1b2c56a02bb52d836b19e2ff52098302dda` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-node-linux-arm.tar.gz) | `e712e38c8037159ea074ad93c2f2905cf279f3f119e5fdbf9b97391037a8813f` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-node-linux-arm64.tar.gz) | `7f4095f12d8ad9438919fa447360113799f88bb9435369b9307a41dd9c7692a6` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-node-linux-ppc64le.tar.gz) | `4aeb5dbb0c68e54570542eb5a1d7506d73c81b57eba3c2080ee73bb53dbc3be0` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-node-linux-s390x.tar.gz) | `a160599598167208286db6dc73b415952836218d967fa964fc432b213f1b9908` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.2/kubernetes-node-windows-amd64.tar.gz) | `174bedf62b7959d4cb1b1595666f607cd6377c7a2e2208fef5bd554603db5db3` + +## Changelog since v1.12.0-rc.1 + +### Other notable changes + +* Update to use manifest list for etcd image ([#68896](https://github.com/kubernetes/kubernetes/pull/68896), [@ixdy](https://github.com/ixdy)) +* Fix Azure nodes power state for InstanceShutdownByProviderID() ([#68921](https://github.com/kubernetes/kubernetes/pull/68921), [@feiskyer](https://github.com/feiskyer)) +* Bump kube-dns to 1.14.13 ([#68900](https://github.com/kubernetes/kubernetes/pull/68900), [@MrHohn](https://github.com/MrHohn)) + * - Update Alpine base image to 3.8.1. + * - Build multi-arch images correctly. +* kubelet: fix grpc timeout in the CRI client ([#67793](https://github.com/kubernetes/kubernetes/pull/67793), [@fisherxu](https://github.com/fisherxu)) +* Update to golang 1.10.4 ([#68802](https://github.com/kubernetes/kubernetes/pull/68802), [@ixdy](https://github.com/ixdy)) +* kubeadm now uses fat manifests for the kube-dns images ([#68830](https://github.com/kubernetes/kubernetes/pull/68830), [@rosti](https://github.com/rosti)) +* Update Cluster Autoscaler version to 1.12.0. ([#68739](https://github.com/kubernetes/kubernetes/pull/68739), [@losipiuk](https://github.com/losipiuk)) + * See https://github.com/kubernetes/autoscaler/releases/tag/1.12.0 for CA release notes. +* kube-proxy restores the *filter table when running in ipvs mode. ([#68786](https://github.com/kubernetes/kubernetes/pull/68786), [@alexjx](https://github.com/alexjx)) +* New kubeDNS image fixes an issue where SRV records were incorrectly being compressed. Added manifest file for multiple arch images. ([#68430](https://github.com/kubernetes/kubernetes/pull/68430), [@prameshj](https://github.com/prameshj)) +* Drain should delete terminal pods. ([#68767](https://github.com/kubernetes/kubernetes/pull/68767), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) + + + +# v1.12.0-rc.1 + +[Documentation](https://docs.k8s.io) & [Examples](https://releases.k8s.io/release-1.12/examples) + +## Downloads for v1.12.0-rc.1 + + +filename | sha256 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes.tar.gz) | `ac65cf9571c3a03105f373db23c8d7f4d01fe1c9ee09b06615bb02d0b81d572c` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-src.tar.gz) | `28518e1d9c7fe5c54aa3b57235ac8d1a7dae02aec04177c38ca157fc2d16edb6` + +### Client Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `7b6f6f264464d40b7975baecdd796d4f75c5a305999b4ae1f4513646184cac7c` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `5feabe3e616125a36ce4c8021d6bdccdec0f3d82f151b80af7cac1453255b4d5` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-linux-386.tar.gz) | `40524a1a09dd24081b3494593a02a461227727f8706077542f2b8603e1cf7e06` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `ac2c9757d7df761bdf8ffc259fff07448c300dd110c7dbe2ae3830197eb023e9` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `02f27ae16e8ebb12b3cb66391fe85f64de08a99450d726e9defd2c5bcd590955` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `1286af2cad3f8e2ee8e2dc18a738935779631b58e7ef3da8794bbeadca2f332e` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `9c04419b159fb0fe501d6e0c8122d6a80b5d6961070ebc5e759f4327a1156cf4` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `104d5c695826971c64cb0cec26cf791d609d3e831edb33574e9af2c4b191f049` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-windows-386.tar.gz) | `0096f8126eb04eafa9decd258f6d09977d24eee91b83781347a34ebb7d2064aa` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `a641a1a421795279a6213163d7becab9dc6014362e6566f13d660ef1638dc286` + +### Server Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `202958d3cfb774fd065ad1ec2477dc9c92ce7f0ff355807c9a2a3a61e8dad927` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `474de8f6a58d51eb01f6cc73b41897351528a839f818d5c4f828a484f8bc988b` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `dbd5affd244815bf45ac0c7a56265800864db623a6a37e7ce9ebe5e5896453f8` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `a62fefa8ad7b3fbfeb7702dac7d4d6f37823b6c3e4edae3356bf0781b48e42e1` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `0f77690f87503c8ee7ccb473c9d2b9d26420292defd82249509cf50d8bb1a16c` + +### Node Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `2191845147d5aab08f14312867f86078b513b6aff8685bb8ce84a06b78ae9914` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `54de98d7d2a71b78bc7a45e70a2005144d210401663f5a9daadedd05f89291f0` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `a765514e0c4865bb20ceb476af83b9d9356c9b565cfe12615ecf7ad3d5a6b4f7` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `b7ae7d159602d0b933614071f11216ede4df3fc2b28a30d0018e06b3bb22cf6e` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `7d4f502eda6aa70b7a18420344abfaec740d74a1edffcb9869e4305c22bba260` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `ed5516b1f66a39592a101bec135022b3905a66ae526b8ed3e2e9dff5ed68eda0` + +## Changelog since v1.12.0-beta.2 + +### Action Required + +* Service events are now added in azure-cloud-provider for easily identify the underground errors of Azure API. ([#68212](https://github.com/kubernetes/kubernetes/pull/68212), [@feiskyer](https://github.com/feiskyer)) + * Action required: The following clusterrole and clusterrolebinding should be applied: + * kind: List + * apiVersion: v1 + * items: + * - apiVersion: rbac.authorization.k8s.io/v1 + * kind: ClusterRole + * metadata: + * labels: + * kubernetes.io/cluster-service: "true" + * name: system:azure-cloud-provider + * rules: + * - apiGroups: [""] + * resources: ["events"] + * verbs: + * - create + * - patch + * - update + * - apiVersion: rbac.authorization.k8s.io/v1 + * kind: ClusterRoleBinding + * metadata: + * labels: + * kubernetes.io/cluster-service: "true" + * name: system:azure-cloud-provider + * roleRef: + * apiGroup: rbac.authorization.k8s.io + * kind: ClusterRole + * name: system:azure-cloud-provider + * subjects: + * - kind: ServiceAccount + * name: azure-cloud-provider + * namespace: kube-system + * If the clusterrole with same has already been provisioned (e.g. for accessing azurefile secrets), then the above yaml should be merged togather, e.g. + * kind: List + * apiVersion: v1 + * items: + * - apiVersion: rbac.authorization.k8s.io/v1 + * kind: ClusterRole + * metadata: + * labels: + * kubernetes.io/cluster-service: "true" + * name: system:azure-cloud-provider + * rules: + * - apiGroups: [""] + * resources: ["events"] + * verbs: + * - create + * - patch + * - update + * - apiGroups: [""] + * resources: ["secrets"] + * verbs: + * - get + * - create + * - apiVersion: rbac.authorization.k8s.io/v1 + * kind: ClusterRoleBinding + * metadata: + * labels: + * kubernetes.io/cluster-service: "true" + * name: system:azure-cloud-provider + * roleRef: + * apiGroup: rbac.authorization.k8s.io + * kind: ClusterRole + * name: system:azure-cloud-provider + * subjects: + * - kind: ServiceAccount + * name: azure-cloud-provider + * namespace: kube-system + * - kind: ServiceAccount + * name: persistent-volume-binder + * namespace: kube-system + +### Other notable changes + +* Update metrics-server to v0.3.1 ([#68746](https://github.com/kubernetes/kubernetes/pull/68746), [@DirectXMan12](https://github.com/DirectXMan12)) +* Upgrade kubeadm's version of docker support ([#68495](https://github.com/kubernetes/kubernetes/pull/68495), [@yuansisi](https://github.com/yuansisi)) +* fix a bug that overwhelming number of prometheus metrics are generated because $NAMESPACE is not replaced by string "{namespace}" ([#68530](https://github.com/kubernetes/kubernetes/pull/68530), [@wenjiaswe](https://github.com/wenjiaswe)) +* The feature gates `ReadOnlyAPIDataVolumes` and `ServiceProxyAllowExternalIPs`, deprecated since 1.10, have been removed and any references must be removed from command-line invocations. ([#67951](https://github.com/kubernetes/kubernetes/pull/67951), [@liggitt](https://github.com/liggitt)) +* Verify invalid secret/configmap/projected volumes before calling setup ([#68691](https://github.com/kubernetes/kubernetes/pull/68691), [@gnufied](https://github.com/gnufied)) +* Fix bug that caused `kubectl` commands to sometimes fail to refresh access token when running against GKE clusters. ([#66314](https://github.com/kubernetes/kubernetes/pull/66314), [@jlowdermilk](https://github.com/jlowdermilk)) +* Use KubeDNS by default in GCE setups, as CoreDNS has significantly higher memory usage in large clusters. ([#68629](https://github.com/kubernetes/kubernetes/pull/68629), [@shyamjvs](https://github.com/shyamjvs)) +* Fix PodAntiAffinity issues in case of multiple affinityTerms. ([#68173](https://github.com/kubernetes/kubernetes/pull/68173), [@Huang-Wei](https://github.com/Huang-Wei)) +* Make APIGroup field in TypedLocalObjectReference optional. ([#68419](https://github.com/kubernetes/kubernetes/pull/68419), [@xing-yang](https://github.com/xing-yang)) +* Fix potential panic when getting azure load balancer status ([#68609](https://github.com/kubernetes/kubernetes/pull/68609), [@feiskyer](https://github.com/feiskyer)) +* Fix kubelet panics when RuntimeClass is enabled. ([#68521](https://github.com/kubernetes/kubernetes/pull/68521), [@yujuhong](https://github.com/yujuhong)) +* - cAdvisor: Fix NVML initialization race condition ([#68431](https://github.com/kubernetes/kubernetes/pull/68431), [@dashpole](https://github.com/dashpole)) + * - cAdvisor: Fix brtfs filesystem discovery + * - cAdvisor: Fix race condition with AllDockerContainers + * - cAdvisor: Don't watch .mount cgroups + * - cAdvisor: Reduce lock contention during list containers +* Promote ScheduleDaemonSetPods by default scheduler to beta ([#67899](https://github.com/kubernetes/kubernetes/pull/67899), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) + + + +# v1.12.0-beta.2 + +[Documentation](https://docs.k8s.io) & [Examples](https://releases.k8s.io/release-1.12/examples) + +## Downloads for v1.12.0-beta.2 + + +filename | sha256 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes.tar.gz) | `7163d18b9c1bd98ce804b17469ed67b399deb7b574dd12a86609fc647c5c773b` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-src.tar.gz) | `6225b71b2dec0f29afb713e64d2b6b82bd0e122274c31310c0de19ef023cb1d0` + +### Client Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `f2ec9799e47c28fce336bc90a6e9b4e47def7081fd73b8e2164940f0a6c824c7` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `0e8cfcbe5ec862423ced97da1d9740d4cc4904a0d5cd11a60616aee596bc7622` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-linux-386.tar.gz) | `1cbd6e8dd892cfc2555d37e733b66aaf85df9950466c7295875d312ac254ddfc` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `47337b58a26a4953e5c061d28e3ec89b3d4354bce40f9b51fbe269598caeff03` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `eaaed82f428fb7ddbb10b4e39a2f287817c33ae24ff16008159f437acc653d4a` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `3249d1c7d5d5500793546eb144fe537d1984a01c7a79c1382eb2e26a78e532cd` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `67afd34f2199deff901b0872a177dc448ba700dc4ced9ede6f3187a0eed2c6fb` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `e8faa6e45c6e2aeb67ac65737e09be87c190e3c89782ec87a9a205d4f1af9246` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-windows-386.tar.gz) | `2395051c8cbd0a995b5f3689c0f8c0447bcc1c46440d8cdeffd7c7fccf8e8ae1` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `c6a38ee6eda20656b391ecfcc1f24505eb8a3a5a3200d4bddede318291773619` + +### Server Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `795c713a91118218f5952e1bd4cf0933f36476aa3d9d60a9ee43c9bae8400fd3` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `1798d48a37b8f06878e0ecb8d9b67d0fb5c8ee721608412add57725eb5ce5f1e` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `da2459b5e811daaa2fc04a072773e81dc220400f3aeb6e29bb9594c306c7b266` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `7fd1c2ba0c2c9da5db54f8d0aed28261f03e9953ce01fa367e4ce3d84bf01b4f` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `c9fafb009d7e5da74f588aaa935244c452de52b9488863b90e8b477b1bb16e52` + +### Node Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `ab901137b499829b20b868492d04c1f69d738620b96eb349c642d6d773c44448` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `116dd82721f200f3f37df0e47aebb611fdd7856f94d4c2ebb1d51db21b793a9c` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `56d8316eb95f7f54c154625063617b86ffb8e2cc80b8225cce4f5c91d2d3a64f` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `66535b16ad588ba3bfcb40728a0497c6821360ab7be9c3ced2072bfa107e5c46` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `688e09becc9327e50c68b33161eac63a8ba018c02fb298cbd0de82d6ed5dba90` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `b72582f67d19c06f605ca9b02c08b7227796c15c639e3c09b06a8b667c4569fe` + +## Changelog since v1.12.0-beta.1 + +### Action Required + +* Action required: The --storage-versions flag of kube-apiserver is deprecated. Please omit this flag to ensure the default storage versions are used. Otherwise the cluster is not safe to upgrade to a version newer than 1.12. This flag will be removed in 1.13. ([#68080](https://github.com/kubernetes/kubernetes/pull/68080), [@caesarxuchao](https://github.com/caesarxuchao)) + +### Other notable changes + +* kubeadm: add mandatory "--config" flag to "kubeadm alpha phase preflight" ([#68446](https://github.com/kubernetes/kubernetes/pull/68446), [@neolit123](https://github.com/neolit123)) +* Apply user configurations for local etcd ([#68334](https://github.com/kubernetes/kubernetes/pull/68334), [@SataQiu](https://github.com/SataQiu)) +* kubeadm: added phase command "alpha phase kubelet config annotate-cri" ([#68449](https://github.com/kubernetes/kubernetes/pull/68449), [@fabriziopandini](https://github.com/fabriziopandini)) +* If `TaintNodesByCondition` is enabled, add `node.kubernetes.io/unschedulable` and ([#64954](https://github.com/kubernetes/kubernetes/pull/64954), [@k82cn](https://github.com/k82cn)) + * `node.kubernetes.io/network-unavailable` automatically to DaemonSet pods. +* Deprecate cloudstack and ovirt controllers ([#68199](https://github.com/kubernetes/kubernetes/pull/68199), [@dims](https://github.com/dims)) +* add missing LastTransitionTime of ContainerReady condition ([#64867](https://github.com/kubernetes/kubernetes/pull/64867), [@dixudx](https://github.com/dixudx)) +* kube-controller-manager: use informer cache instead of active pod gets in HPA controller ([#68241](https://github.com/kubernetes/kubernetes/pull/68241), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* Support NodeShutdown taint for azure ([#68033](https://github.com/kubernetes/kubernetes/pull/68033), [@yastij](https://github.com/yastij)) +* Registers volume topology information reported by a node-level Container Storage Interface (CSI) driver. This enables Kubernetes support of CSI topology mechanisms. ([#67684](https://github.com/kubernetes/kubernetes/pull/67684), [@verult](https://github.com/verult)) +* Update default etcd server to 3.2.24 for kubernetes 1.12 ([#68318](https://github.com/kubernetes/kubernetes/pull/68318), [@timothysc](https://github.com/timothysc)) +* External CAs can now be used for kubeadm with only a certificate, as long as all required certificates already exist. ([#68296](https://github.com/kubernetes/kubernetes/pull/68296), [@liztio](https://github.com/liztio)) +* Bump addon-manager to v8.7 ([#68299](https://github.com/kubernetes/kubernetes/pull/68299), [@MrHohn](https://github.com/MrHohn)) + * - Support extra `--prune-whitelist` resources in kube-addon-manager. + * - Update kubectl to v1.10.7. +* Let service controller retry creating load balancer when persistUpdate failed due to conflict. ([#68087](https://github.com/kubernetes/kubernetes/pull/68087), [@grayluck](https://github.com/grayluck)) +* Kubelet now only sync iptables on Linux. ([#67690](https://github.com/kubernetes/kubernetes/pull/67690), [@feiskyer](https://github.com/feiskyer)) +* CSI NodePublish call can optionally contain information about the pod that requested the CSI volume. ([#67945](https://github.com/kubernetes/kubernetes/pull/67945), [@jsafrane](https://github.com/jsafrane)) +* [e2e] verifying LimitRange update is effective before creating new pod ([#68171](https://github.com/kubernetes/kubernetes/pull/68171), [@dixudx](https://github.com/dixudx)) +* cluster/gce: generate consistent key sizes in config-default.sh using /dev/urandom instead of /dev/random ([#67139](https://github.com/kubernetes/kubernetes/pull/67139), [@yogi-sagar](https://github.com/yogi-sagar)) +* Add support for volume attach limits for CSI volumes ([#67731](https://github.com/kubernetes/kubernetes/pull/67731), [@gnufied](https://github.com/gnufied)) +* CSI volume plugin does not need external attacher for non-attachable CSI volumes. ([#67955](https://github.com/kubernetes/kubernetes/pull/67955), [@jsafrane](https://github.com/jsafrane)) +* KubeletPluginsWatcher feature graduates to beta. ([#68200](https://github.com/kubernetes/kubernetes/pull/68200), [@RenaudWasTaken](https://github.com/RenaudWasTaken)) +* Update etcd client to 3.2.24 for latest release ([#68147](https://github.com/kubernetes/kubernetes/pull/68147), [@timothysc](https://github.com/timothysc)) +* [fluentd-gcp-scaler addon] Bump fluentd-gcp-scaler to 0.4 to pick up security fixes. ([#67691](https://github.com/kubernetes/kubernetes/pull/67691), [@loburm](https://github.com/loburm)) + * [prometheus-to-sd addon] Bump prometheus-to-sd to 0.3.1 to pick up security fixes, bug fixes and new features. + * [event-exporter addon] Bump event-exporter to 0.2.3 to pick up security fixes. +* Fixes issue where pod scheduling may fail when using local PVs and pod affinity and anti-affinity without the default StatefulSet OrderedReady pod management policy ([#67556](https://github.com/kubernetes/kubernetes/pull/67556), [@msau42](https://github.com/msau42)) +* Kubelet only applies default hard evictions of nodefs.inodesFree on Linux ([#67709](https://github.com/kubernetes/kubernetes/pull/67709), [@feiskyer](https://github.com/feiskyer)) +* Add kubelet stats for windows system container "pods" ([#66427](https://github.com/kubernetes/kubernetes/pull/66427), [@feiskyer](https://github.com/feiskyer)) +* Add a TTL machenism to clean up Jobs after they finish. ([#66840](https://github.com/kubernetes/kubernetes/pull/66840), [@janetkuo](https://github.com/janetkuo)) + + + +# v1.12.0-beta.1 + +[Documentation](https://docs.k8s.io) & [Examples](https://releases.k8s.io/release-1.12/examples) + +## Downloads for v1.12.0-beta.1 + + +filename | sha256 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes.tar.gz) | `caa332b14a6ea9d24710e3b015a91b62c04cab14bed14c49077e08bd82b8f4c1` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-src.tar.gz) | `821bdea3a52a348306fa8226bcfffa67b375cf1dd80e4be343ce0b38dd20a9a0` + +### Client Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `58323c0a81afe53dd0dda1c6eb513caa4c82514fb6c7f0a327242e573ce80490` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `28e9344ede16890ea7848c261e461ded89c3bb2dd5b08446da04b071b48f0b02` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-linux-386.tar.gz) | `a9eece5e0994d2ad5e07152d88787a8b5e9efcdf78983a5bafe3699e5274a9da` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `9a67750cc4243335f0c2eb89db1c4b54b0a8af08c59e2041636d0a3e946546bf` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `bbd2644f843917a3de517a53c90b327502b577fe533a9ad3da4fe6bc437c4a02` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `630946f49ef18dd43c004d99dccd9ae76390281f54740d7335c042f6f006324b` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `1d4e5cd83faf4cae8e16667576492fcd48a72f69e8fd89d599a8b555a41e90d6` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `9cefdcf21a62075b5238fda8ef2db08f81b0541ebce0e67353af1dded9e53483` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-windows-386.tar.gz) | `8b0085606ff38bded362bbe4826b5c8ee5199a33d5cbbc1b9b58f1336648ad5b` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `f44a3ec55dc7d926e681c33b5f7830c6d1cb165e24e349e426c1089b2d05a1df` + +### Server Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `1bf7364aa168fc251768bc850d66fef1d93f324f0ec85f6dce74080627599b70` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `dadc94fc0564cfa98add5287763bbe9c33bf8ba3eebad95fb2258c33fe8c5df3` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `2e6c8a7810705594f191b33476bf4c8fca8cebb364f0855dfea577b01fca7b7e` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `ced4a0a4e03639378eff0d3b8bfb832f5fb96be8df3e0befbdbd71373a323130` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `7e1a3fac2115c15b5baa0db04c7f319fbaaca92aa4c4588ecf62fb19812465a8` + +### Node Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `81d2e2f4cd3254dd345c1e921b12bff62eb96e7551336c44fb0da5407bf5fe5f` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `b14734a20190aca2b2af9cee59549d285be4f0c38faf89c5308c94534110edc1` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `ad0a81ecf6ef8346b7aa98a8d02a4f3853d0a5439d149a14b1ac2307b763b2ad` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `8e6d72837fe19afd055786c8731bd555fe082e107195c956c6985e56a03d504f` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `0fc7d55fb2750b29c0bbc36da050c8bf14508b1aa40e38e3b7f6cf311b464827` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `09bf133156b9bc474d272bf16e765b143439959a1f007283c477e7999f2b4d6a` + +## Changelog since v1.12.0-alpha.1 + +### Action Required + +* Move volume dynamic provisioning scheduling to beta (ACTION REQUIRED: The DynamicProvisioningScheduling alpha feature gate has been removed. The VolumeScheduling beta feature gate is still required for this feature) ([#67432](https://github.com/kubernetes/kubernetes/pull/67432), [@lichuqiang](https://github.com/lichuqiang)) + +### Other notable changes + +* Not split nodes when searching for nodes but doing it all at once. ([#67555](https://github.com/kubernetes/kubernetes/pull/67555), [@wgliang](https://github.com/wgliang)) +* Deprecate kubectl run generators, except for run-pod/v1 ([#68132](https://github.com/kubernetes/kubernetes/pull/68132), [@soltysh](https://github.com/soltysh)) +* Using the Horizontal Pod Autoscaler with metrics from Heapster is now deprecated. ([#68089](https://github.com/kubernetes/kubernetes/pull/68089), [@DirectXMan12](https://github.com/DirectXMan12)) +* Support both directory and block device for local volume plugin FileSystem VolumeMode ([#63011](https://github.com/kubernetes/kubernetes/pull/63011), [@NickrenREN](https://github.com/NickrenREN)) +* Add CSI volume attributes for kubectl describe pv. ([#65074](https://github.com/kubernetes/kubernetes/pull/65074), [@wgliang](https://github.com/wgliang)) +* `kubectl rollout status` now works for unlimited timeouts. ([#67817](https://github.com/kubernetes/kubernetes/pull/67817), [@tnozicka](https://github.com/tnozicka)) +* Fix panic when processing Azure HTTP response. ([#68210](https://github.com/kubernetes/kubernetes/pull/68210), [@feiskyer](https://github.com/feiskyer)) +* add mixed protocol support for azure load balancer ([#67986](https://github.com/kubernetes/kubernetes/pull/67986), [@andyzhangx](https://github.com/andyzhangx)) +* Replace scale down forbidden window with scale down stabilization window. Rather than waiting a fixed period of time between scale downs HPA now scales down to the highest recommendation it during the scale down stabilization window. ([#68122](https://github.com/kubernetes/kubernetes/pull/68122), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* Adding validation to kube-scheduler at the API level ([#66799](https://github.com/kubernetes/kubernetes/pull/66799), [@noqcks](https://github.com/noqcks)) +* Improve performance of Pod affinity/anti-affinity in the scheduler ([#67788](https://github.com/kubernetes/kubernetes/pull/67788), [@ahmad-diaa](https://github.com/ahmad-diaa)) +* kubeadm: fix air-gapped support and also allow some kubeadm commands to work without an available networking interface ([#67397](https://github.com/kubernetes/kubernetes/pull/67397), [@neolit123](https://github.com/neolit123)) +* Increase Horizontal Pod Autoscaler default update interval (30s -> 15s). It will improve HPA reaction time for metric changes. ([#68021](https://github.com/kubernetes/kubernetes/pull/68021), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* Increase scrape frequency of metrics-server to 30s ([#68127](https://github.com/kubernetes/kubernetes/pull/68127), [@serathius](https://github.com/serathius)) +* Add new `--server-dry-run` flag to `kubectl apply` so that the request will be sent to the server with the dry-run flag (alpha), which means that changes won't be persisted. ([#68069](https://github.com/kubernetes/kubernetes/pull/68069), [@apelisse](https://github.com/apelisse)) +* kubelet v1beta1 external ComponentConfig types are now available in the `k8s.io/kubelet` repo ([#67263](https://github.com/kubernetes/kubernetes/pull/67263), [@luxas](https://github.com/luxas)) +* Adds a kubelet parameter and config option to change CFS quota period from the default 100ms to some other value between 1µs and 1s. This was done to improve response latencies for workloads running in clusters with guaranteed and burstable QoS classes. ([#63437](https://github.com/kubernetes/kubernetes/pull/63437), [@szuecs](https://github.com/szuecs)) +* Enable secure serving on port 10258 to cloud-controller-manager (configurable via `--secure-port`). Delegated authentication and authorization have to be configured like for aggregated API servers. ([#67069](https://github.com/kubernetes/kubernetes/pull/67069), [@sttts](https://github.com/sttts)) +* Support extra `--prune-whitelist` resources in kube-addon-manager. ([#67743](https://github.com/kubernetes/kubernetes/pull/67743), [@Random-Liu](https://github.com/Random-Liu)) +* Upon receiving a LIST request with expired continue token, the apiserver now returns a continue token together with the 410 "the from parameter is too old " error. If the client does not care about getting a list from a consistent snapshot, the client can use this token to continue listing from the next key, but the returned chunk will be from the latest snapshot. ([#67284](https://github.com/kubernetes/kubernetes/pull/67284), [@caesarxuchao](https://github.com/caesarxuchao)) +* Role, ClusterRole and their bindings for cloud-provider is put under system namespace. Their addonmanager mode switches to EnsureExists. ([#67224](https://github.com/kubernetes/kubernetes/pull/67224), [@grayluck](https://github.com/grayluck)) +* Mount propagation has promoted to GA. The `MountPropagation` feature gate is deprecated and will be removed in 1.13. ([#67255](https://github.com/kubernetes/kubernetes/pull/67255), [@bertinatto](https://github.com/bertinatto)) +* Introduce CSI Cluster Registration mechanism to ease CSI plugin discovery and allow CSI drivers to customize Kubernetes' interaction with them. ([#67803](https://github.com/kubernetes/kubernetes/pull/67803), [@saad-ali](https://github.com/saad-ali)) +* Adds the commands `kubeadm alpha phases renew ` ([#67910](https://github.com/kubernetes/kubernetes/pull/67910), [@liztio](https://github.com/liztio)) +* ProcMount added to SecurityContext and AllowedProcMounts added to PodSecurityPolicy to allow paths in the container's /proc to not be masked. ([#64283](https://github.com/kubernetes/kubernetes/pull/64283), [@jessfraz](https://github.com/jessfraz)) +* support cross resource group for azure file ([#68117](https://github.com/kubernetes/kubernetes/pull/68117), [@andyzhangx](https://github.com/andyzhangx)) +* Port 31337 will be used by fluentd ([#68051](https://github.com/kubernetes/kubernetes/pull/68051), [@Szetty](https://github.com/Szetty)) +* Improve CPU sample sanitization in HPA by taking metric's freshness into account. ([#68068](https://github.com/kubernetes/kubernetes/pull/68068), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* CoreDNS is now v1.2.2 for Kubernetes 1.12 ([#68076](https://github.com/kubernetes/kubernetes/pull/68076), [@rajansandeep](https://github.com/rajansandeep)) +* Enable secure serving on port 10257 to kube-controller-manager (configurable via `--secure-port`). Delegated authentication and authorization have to be configured like for aggregated API servers. ([#64149](https://github.com/kubernetes/kubernetes/pull/64149), [@sttts](https://github.com/sttts)) +* Update metrics-server to v0.3.0. ([#68077](https://github.com/kubernetes/kubernetes/pull/68077), [@DirectXMan12](https://github.com/DirectXMan12)) +* TokenRequest and TokenRequestProjection are now beta features. To enable these feature, the API server needs to be started with the following flags: ([#67349](https://github.com/kubernetes/kubernetes/pull/67349), [@mikedanese](https://github.com/mikedanese)) + * --service-account-issuer + * --service-account-signing-key-file + * --service-account-api-audiences +* Don't let aggregated apiservers fail to launch if the external-apiserver-authentication configmap is not found in the cluster. ([#67836](https://github.com/kubernetes/kubernetes/pull/67836), [@sttts](https://github.com/sttts)) +* Promote AdvancedAuditing to GA, replacing the previous (legacy) audit logging mechanisms. ([#65862](https://github.com/kubernetes/kubernetes/pull/65862), [@loburm](https://github.com/loburm)) +* Azure cloud provider now supports unmanaged nodes (such as on-prem) that are labeled with `kubernetes.azure.com/managed=false` and `alpha.service-controller.kubernetes.io/exclude-balancer=true` ([#67984](https://github.com/kubernetes/kubernetes/pull/67984), [@feiskyer](https://github.com/feiskyer)) +* `kubectl get apiservice` now shows the target service and whether the service is available ([#67747](https://github.com/kubernetes/kubernetes/pull/67747), [@smarterclayton](https://github.com/smarterclayton)) +* Openstack supports now node shutdown taint. Taint is added when instance is shutdown in openstack. ([#67982](https://github.com/kubernetes/kubernetes/pull/67982), [@zetaab](https://github.com/zetaab)) +* Return apiserver panics as 500 errors instead terminating the apiserver process. ([#68001](https://github.com/kubernetes/kubernetes/pull/68001), [@sttts](https://github.com/sttts)) +* Fix VMWare VM freezing bug by reverting [#51066](https://github.com/kubernetes/kubernetes/pull/51066) ([#67825](https://github.com/kubernetes/kubernetes/pull/67825), [@nikopen](https://github.com/nikopen)) +* Make CoreDNS be the default DNS server in kube-up (instead of kube-dns formerly). ([#67569](https://github.com/kubernetes/kubernetes/pull/67569), [@fturib](https://github.com/fturib)) + * It is still possible to deploy kube-dns by setting CLUSTER_DNS_CORE_DNS=false. +* Added support to restore a volume from a volume snapshot data source. ([#67087](https://github.com/kubernetes/kubernetes/pull/67087), [@xing-yang](https://github.com/xing-yang)) +* fixes the errors/warnings in fluentd configuration ([#67947](https://github.com/kubernetes/kubernetes/pull/67947), [@saravanan30erd](https://github.com/saravanan30erd)) +* Stop counting soft-deleted pods for scaling purposes in HPA controller to avoid soft-deleted pods incorrectly affecting scale up replica count calculation. ([#67067](https://github.com/kubernetes/kubernetes/pull/67067), [@moonek](https://github.com/moonek)) +* delegated authn/z: optionally opt-out of mandatory authn/authz kubeconfig ([#67545](https://github.com/kubernetes/kubernetes/pull/67545), [@sttts](https://github.com/sttts)) +* kubeadm: Control plane images (etcd, kube-apiserver, kube-proxy, etc.) don't use arch suffixes. Arch suffixes are kept for kube-dns only. ([#66960](https://github.com/kubernetes/kubernetes/pull/66960), [@rosti](https://github.com/rosti)) +* Adds sample-cli-plugin staging repository ([#67938](https://github.com/kubernetes/kubernetes/pull/67938), [@soltysh](https://github.com/soltysh)) +* adjusted http/2 buffer sizes for apiservers to prevent starvation issues between concurrent streams ([#67902](https://github.com/kubernetes/kubernetes/pull/67902), [@liggitt](https://github.com/liggitt)) +* SCTP is now supported as additional protocol (alpha) alongside TCP and UDP in Pod, Service, Endpoint, and NetworkPolicy. ([#64973](https://github.com/kubernetes/kubernetes/pull/64973), [@janosi](https://github.com/janosi)) +* Always create configmaps/extensions-apiserver-authentication from kube-apiserver. ([#67694](https://github.com/kubernetes/kubernetes/pull/67694), [@sttts](https://github.com/sttts)) +* kube-proxy v1beta1 external ComponentConfig types are now available in the `k8s.io/kube-proxy` repo ([#67688](https://github.com/kubernetes/kubernetes/pull/67688), [@Lion-Wei](https://github.com/Lion-Wei)) +* Apply unreachable taint to a node when it lost network connection. ([#67734](https://github.com/kubernetes/kubernetes/pull/67734), [@Huang-Wei](https://github.com/Huang-Wei)) +* Allow ImageReview backend to return annotations to be added to the created pod. ([#64597](https://github.com/kubernetes/kubernetes/pull/64597), [@wteiken](https://github.com/wteiken)) +* Bump ip-masq-agent to v2.1.1 ([#67916](https://github.com/kubernetes/kubernetes/pull/67916), [@MrHohn](https://github.com/MrHohn)) + * - Update debian-iptables image for CVEs. + * - Change chain name to IP-MASQ to be compatible with the + * pre-injected masquerade rules. +* AllowedTopologies field inside StorageClass is now validated against set and map semantics. Specifically, there cannot be duplicate TopologySelectorTerms, MatchLabelExpressions keys, and TopologySelectorLabelRequirement Values. ([#66843](https://github.com/kubernetes/kubernetes/pull/66843), [@verult](https://github.com/verult)) +* Introduces autoscaling/v2beta2 and custom_metrics/v1beta2, which implement metric selectors for Object and Pods metrics, as well as allowing AverageValue targets on Objects, similar to External metrics. ([#64097](https://github.com/kubernetes/kubernetes/pull/64097), [@damemi](https://github.com/damemi)) +* The cloudstack cloud provider now reports a `Hostname` address type for nodes based on the `local-hostname` metadata key. ([#67719](https://github.com/kubernetes/kubernetes/pull/67719), [@liggitt](https://github.com/liggitt)) +* kubeadm: --cri-socket now defaults to tcp://localhost:2375 when running on Windows ([#67447](https://github.com/kubernetes/kubernetes/pull/67447), [@benmoss](https://github.com/benmoss)) +* kubeadm: The kubeadm configuration now support definition of more than one control plane instances with their own APIEndpoint. The APIEndpoint for the "bootstrap" control plane instance should be defined using `InitConfiguration.APIEndpoint`, while the APIEndpoints for additional control plane instances should be added using `JoinConfiguration.APIEndpoint`. ([#67832](https://github.com/kubernetes/kubernetes/pull/67832), [@fabriziopandini](https://github.com/fabriziopandini)) +* Enable dynamic azure disk volume limits ([#67772](https://github.com/kubernetes/kubernetes/pull/67772), [@andyzhangx](https://github.com/andyzhangx)) +* kubelet: Users can now enable the alpha NodeLease feature gate to have the Kubelet create and periodically renew a Lease in the kube-node-lease namespace. The lease duration defaults to 40s, and can be configured via the kubelet.config.k8s.io/v1beta1.KubeletConfiguration's NodeLeaseDurationSeconds field. ([#66257](https://github.com/kubernetes/kubernetes/pull/66257), [@mtaufen](https://github.com/mtaufen)) +* latent controller caches no longer cause repeating deletion messages for deleted pods ([#67826](https://github.com/kubernetes/kubernetes/pull/67826), [@deads2k](https://github.com/deads2k)) +* API paging is now enabled for custom resource definitions, custom resources and APIService objects ([#67861](https://github.com/kubernetes/kubernetes/pull/67861), [@liggitt](https://github.com/liggitt)) +* kubeadm: ControlPlaneEndpoint was moved from the API config struct to ClusterConfiguration ([#67830](https://github.com/kubernetes/kubernetes/pull/67830), [@fabriziopandini](https://github.com/fabriziopandini)) +* kubeadm - feature-gates HighAvailability, SelfHosting, CertsInSecrets are now deprecated and can't be used anymore for new clusters. Update of cluster using above feature-gates flag is not supported ([#67786](https://github.com/kubernetes/kubernetes/pull/67786), [@fabriziopandini](https://github.com/fabriziopandini)) +* Replace scale up forbidden window with disregarding CPU samples collected when pod was initializing. ([#67252](https://github.com/kubernetes/kubernetes/pull/67252), [@jbartosik](https://github.com/jbartosik)) +* Moving KubeSchedulerConfiguration from ComponentConfig API types to staging repos ([#66916](https://github.com/kubernetes/kubernetes/pull/66916), [@dixudx](https://github.com/dixudx)) +* Improved error message when checking the rollout status of StatefulSet with OnDelete strategy type ([#66983](https://github.com/kubernetes/kubernetes/pull/66983), [@mortent](https://github.com/mortent)) +* RuntimeClass is a new API resource for defining different classes of runtimes that may be used to run containers in the cluster. Pods can select a RunitmeClass to use via the RuntimeClassName field. This feature is in alpha, and the RuntimeClass feature gate must be enabled in order to use it. ([#67737](https://github.com/kubernetes/kubernetes/pull/67737), [@tallclair](https://github.com/tallclair)) +* Remove rescheduler since scheduling DS pods by default scheduler is moving to beta. ([#67687](https://github.com/kubernetes/kubernetes/pull/67687), [@Lion-Wei](https://github.com/Lion-Wei)) +* Turn on PodReadinessGate by default ([#67406](https://github.com/kubernetes/kubernetes/pull/67406), [@freehan](https://github.com/freehan)) +* Speed up kubelet start time by executing an immediate runtime and node status update when the Kubelet sees that it has a CIDR. ([#67031](https://github.com/kubernetes/kubernetes/pull/67031), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski)) +* The OpenStack cloud provider now reports a `Hostname` address type for nodes ([#67748](https://github.com/kubernetes/kubernetes/pull/67748), [@FengyunPan2](https://github.com/FengyunPan2)) +* The aws cloud provider now reports a `Hostname` address type for nodes based on the `local-hostname` metadata key. ([#67715](https://github.com/kubernetes/kubernetes/pull/67715), [@liggitt](https://github.com/liggitt)) +* Azure cloud provider now supports cross resource group nodes that are labeled with `kubernetes.azure.com/resource-group=` and `alpha.service-controller.kubernetes.io/exclude-balancer=true` ([#67604](https://github.com/kubernetes/kubernetes/pull/67604), [@feiskyer](https://github.com/feiskyer)) +* Reduce API calls for Azure instance metadata. ([#67478](https://github.com/kubernetes/kubernetes/pull/67478), [@feiskyer](https://github.com/feiskyer)) +* `kubectl create secret tls` can now read certificate and key files from process substitution arguments ([#67713](https://github.com/kubernetes/kubernetes/pull/67713), [@liggitt](https://github.com/liggitt)) +* change default value of kind for azure disk ([#67483](https://github.com/kubernetes/kubernetes/pull/67483), [@andyzhangx](https://github.com/andyzhangx)) +* To address the possibility dry-run requests overwhelming admission webhooks that rely on side effects and a reconciliation mechanism, a new field is being added to admissionregistration.k8s.io/v1beta1.ValidatingWebhookConfiguration and admissionregistration.k8s.io/v1beta1.MutatingWebhookConfiguration so that webhooks can explicitly register as having dry-run support. If a dry-run request is made on a resource that triggers a non dry-run supporting webhook, the request will be completely rejected, with "400: Bad Request". Additionally, a new field is being added to the admission.k8s.io/v1beta1.AdmissionReview API object, exposing to webhooks whether or not the request being reviewed is a dry-run. ([#66936](https://github.com/kubernetes/kubernetes/pull/66936), [@jennybuckley](https://github.com/jennybuckley)) +* Kubeadm ha upgrade ([#66973](https://github.com/kubernetes/kubernetes/pull/66973), [@fabriziopandini](https://github.com/fabriziopandini)) +* kubeadm: InitConfiguration now consists of two structs: InitConfiguration and ClusterConfiguration ([#67441](https://github.com/kubernetes/kubernetes/pull/67441), [@rosti](https://github.com/rosti)) +* Updated Cluster Autoscaler version to 1.3.2-beta.2. Release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.3.2-beta.2 ([#67697](https://github.com/kubernetes/kubernetes/pull/67697), [@aleksandra-malinowska](https://github.com/aleksandra-malinowska)) +* cpumanager: rollback state if updateContainerCPUSet failed ([#67430](https://github.com/kubernetes/kubernetes/pull/67430), [@choury](https://github.com/choury)) +* [CRI] Adds a "runtime_handler" field to RunPodSandboxRequest, for selecting the runtime configuration to run the sandbox with (alpha feature). ([#67518](https://github.com/kubernetes/kubernetes/pull/67518), [@tallclair](https://github.com/tallclair)) +* Create cli-runtime staging repository ([#67658](https://github.com/kubernetes/kubernetes/pull/67658), [@soltysh](https://github.com/soltysh)) +* Headless Services with no ports defined will now create Endpoints correctly, and appear in DNS. ([#67622](https://github.com/kubernetes/kubernetes/pull/67622), [@thockin](https://github.com/thockin)) +* Kubernetes juju charms will now use CSI for ceph. ([#66523](https://github.com/kubernetes/kubernetes/pull/66523), [@hyperbolic2346](https://github.com/hyperbolic2346)) +* kubeadm: Fix panic when node annotation is nil ([#67648](https://github.com/kubernetes/kubernetes/pull/67648), [@xlgao-zju](https://github.com/xlgao-zju)) +* Prevent `resourceVersion` updates for custom resources on no-op writes. ([#67562](https://github.com/kubernetes/kubernetes/pull/67562), [@nikhita](https://github.com/nikhita)) +* Fail container start if its requested device plugin resource hasn't registered after Kubelet restart. ([#67145](https://github.com/kubernetes/kubernetes/pull/67145), [@jiayingz](https://github.com/jiayingz)) +* Use sync.map to scale ecache better ([#66862](https://github.com/kubernetes/kubernetes/pull/66862), [@resouer](https://github.com/resouer)) +* DaemonSet: Fix bug- daemonset didn't create pod after node have enough resource ([#67337](https://github.com/kubernetes/kubernetes/pull/67337), [@linyouchong](https://github.com/linyouchong)) +* updates kibana to 6.3.2 ([#67582](https://github.com/kubernetes/kubernetes/pull/67582), [@monotek](https://github.com/monotek)) +* fixes json logging in fluentd-elasticsearch image by downgrading fluent-plugin-kubernetes_metadata_filter plugin to version 2.0.0 ([#67544](https://github.com/kubernetes/kubernetes/pull/67544), [@monotek](https://github.com/monotek)) +* add --dns-loop-detect option to dnsmasq run by kube-dns ([#67302](https://github.com/kubernetes/kubernetes/pull/67302), [@dixudx](https://github.com/dixudx)) +* Switched certificate data replacement from "REDACTED" to "DATA+OMITTED" ([#66023](https://github.com/kubernetes/kubernetes/pull/66023), [@ibrasho](https://github.com/ibrasho)) +* improve performance of anti-affinity predicate of default scheduler. ([#66948](https://github.com/kubernetes/kubernetes/pull/66948), [@mohamed-mehany](https://github.com/mohamed-mehany)) +* Fixed a bug that was blocking extensible error handling when serializing API responses error out. Previously, serialization failures always resulted in the status code of the original response being returned. Now, the following behavior occurs: ([#67041](https://github.com/kubernetes/kubernetes/pull/67041), [@tristanburgess](https://github.com/tristanburgess)) + * - If the serialization type is application/vnd.kubernetes.protobuf, and protobuf marshaling is not implemented for the requested API resource type, a '406 Not Acceptable is returned'. + * - If the serialization type is 'application/json': + * - If serialization fails, and the original status code was an failure (e.g. 4xx or 5xx), the original status code will be returned. + * - If serialization fails, and the original status code was not a failure (e.g. 2xx), the status code of the serialization failure will be returned. By default, this is '500 Internal Server Error', because JSON serialization is our default, and not supposed to be implemented on a type-by-type basis. +* Add a feature to the scheduler to score fewer than all nodes in every scheduling cycle. This can improve performance of the scheduler in large clusters. ([#66733](https://github.com/kubernetes/kubernetes/pull/66733), [@bsalamat](https://github.com/bsalamat)) +* kube-controller-manager can now start the quota controller when discovery results can only be partially determined. ([#67433](https://github.com/kubernetes/kubernetes/pull/67433), [@deads2k](https://github.com/deads2k)) +* The plugin mechanism functionality now closely follows the git plugin design ([#66876](https://github.com/kubernetes/kubernetes/pull/66876), [@juanvallejo](https://github.com/juanvallejo)) +* GCE: decrease cpu requests on master node, to allow more components to fit on one core machine. ([#67504](https://github.com/kubernetes/kubernetes/pull/67504), [@loburm](https://github.com/loburm)) +* PVC may not be synced to controller local cache in time if PV is bound by external PV binder (e.g. kube-scheduler), double check if PVC is not found to prevent reclaiming PV wrongly. ([#67062](https://github.com/kubernetes/kubernetes/pull/67062), [@cofyc](https://github.com/cofyc)) +* add more storage account sku support for azure disk ([#67528](https://github.com/kubernetes/kubernetes/pull/67528), [@andyzhangx](https://github.com/andyzhangx)) +* updates es-image to elasticsearch 6.3.2 ([#67484](https://github.com/kubernetes/kubernetes/pull/67484), [@monotek](https://github.com/monotek)) +* Bump GLBC version to 1.2.3 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793), [@freehan](https://github.com/freehan)) +* kube-apiserver: fixes error creating system priority classes when starting multiple apiservers simultaneously ([#67372](https://github.com/kubernetes/kubernetes/pull/67372), [@tanshanshan](https://github.com/tanshanshan)) +* kubectl patch now respects --local ([#67399](https://github.com/kubernetes/kubernetes/pull/67399), [@deads2k](https://github.com/deads2k)) +* Defaults for file audit logging backend in batch mode changed: ([#67223](https://github.com/kubernetes/kubernetes/pull/67223), [@tallclair](https://github.com/tallclair)) + * - Logs are written 1 at a time (no batching) + * - Only a single writer process (lock contention) +* Forget rate limit when CRD establish controller successfully updated CRD condition ([#67370](https://github.com/kubernetes/kubernetes/pull/67370), [@yue9944882](https://github.com/yue9944882)) +* updates fluentd in fluentd-elasticsearch to version 1.2.4 ([#67434](https://github.com/kubernetes/kubernetes/pull/67434), [@monotek](https://github.com/monotek)) + * also updates activesupport, fluent-plugin-elasticsearch & oj gems +* The dockershim now sets the "bandwidth" and "ipRanges" CNI capabilities (dynamic parameters). Plugin authors and administrators can now take advantage of this by updating their CNI configuration file. For more information, see the [CNI docs](https://github.com/containernetworking/cni/blob/master/CONVENTIONS.md#dynamic-plugin-specific-fields-capabilities--runtime-configuration) ([#64445](https://github.com/kubernetes/kubernetes/pull/64445), [@squeed](https://github.com/squeed)) +* Expose `/debug/flags/v` to allow kubelet dynamically set glog logging level. If want to change glog level to 3, you only have to send a PUT request like `curl -X PUT http://127.0.0.1:8080/debug/flags/v -d "3"`. ([#64601](https://github.com/kubernetes/kubernetes/pull/64601), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) +* Fix an issue that pods using hostNetwork keep increasing. ([#67456](https://github.com/kubernetes/kubernetes/pull/67456), [@Huang-Wei](https://github.com/Huang-Wei)) +* DaemonSet controller is now using backoff algorithm to avoid hot loops fighting with kubelet on pod recreation when a particular DaemonSet is misconfigured. ([#65309](https://github.com/kubernetes/kubernetes/pull/65309), [@tnozicka](https://github.com/tnozicka)) +* Add node affinity for Azure unzoned managed disks ([#67229](https://github.com/kubernetes/kubernetes/pull/67229), [@feiskyer](https://github.com/feiskyer)) +* Attacher/Detacher refactor for local storage ([#66884](https://github.com/kubernetes/kubernetes/pull/66884), [@NickrenREN](https://github.com/NickrenREN)) +* Update debian-iptables and hyperkube-base images to include CVE fixes. ([#67365](https://github.com/kubernetes/kubernetes/pull/67365), [@ixdy](https://github.com/ixdy)) +* Fix an issue where filesystems are not unmounted when a backend is not reachable and returns EIO. ([#67097](https://github.com/kubernetes/kubernetes/pull/67097), [@chakri-nelluri](https://github.com/chakri-nelluri)) +* Update Cluster Autoscaler version to 1.3.2-beta.1. Release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.3.2-beta.1 ([#67396](https://github.com/kubernetes/kubernetes/pull/67396), [@aleksandra-malinowska](https://github.com/aleksandra-malinowska)) +* Remove unused binary and container image for kube-aggregator. The functionality is already integrated into the kube-apiserver. ([#67157](https://github.com/kubernetes/kubernetes/pull/67157), [@dims](https://github.com/dims)) +* Avoid creating new controller revisions for statefulsets when cache is stale ([#67039](https://github.com/kubernetes/kubernetes/pull/67039), [@mortent](https://github.com/mortent)) +* Revert [#63905](https://github.com/kubernetes/kubernetes/pull/63905): Setup dns servers and search domains for Windows Pods. DNS for Windows containers will be set by CNI plugins. ([#66587](https://github.com/kubernetes/kubernetes/pull/66587), [@feiskyer](https://github.com/feiskyer)) +* attachdetach controller attaches volumes immediately when Pod's PVCs are bound ([#66863](https://github.com/kubernetes/kubernetes/pull/66863), [@cofyc](https://github.com/cofyc)) +* The check for unsupported plugins during volume resize has been moved from the admission controller to the two controllers that handle volume resize. ([#66780](https://github.com/kubernetes/kubernetes/pull/66780), [@kangarlou](https://github.com/kangarlou)) +* Fix kubelet to not leak goroutines/intofiy watchers on an inactive connection if it's closed ([#67285](https://github.com/kubernetes/kubernetes/pull/67285), [@yujuhong](https://github.com/yujuhong)) +* fix azure disk create failure due to sdk upgrade ([#67236](https://github.com/kubernetes/kubernetes/pull/67236), [@andyzhangx](https://github.com/andyzhangx)) +* Kubeadm join --control-plane main workflow ([#66873](https://github.com/kubernetes/kubernetes/pull/66873), [@fabriziopandini](https://github.com/fabriziopandini)) +* Dynamic provisions that create iSCSI PVs can ensure that multipath is used by specifying 2 or more target portals in the PV, which will cause kubelet to wait up to 10 seconds for the multipath device. PVs with just one portal continue to work as before, with kubelet not waiting for the multipath device and just using the first disk it finds. ([#67140](https://github.com/kubernetes/kubernetes/pull/67140), [@bswartz](https://github.com/bswartz)) +* kubectl: recreating resources for immutable fields when force is applied ([#66602](https://github.com/kubernetes/kubernetes/pull/66602), [@dixudx](https://github.com/dixudx)) +* Remove deprecated --interactive flag from kubectl logs. ([#65420](https://github.com/kubernetes/kubernetes/pull/65420), [@jsoref](https://github.com/jsoref)) +* kubeadm uses audit policy v1 instead of v1beta1 ([#67176](https://github.com/kubernetes/kubernetes/pull/67176), [@charrywanganthony](https://github.com/charrywanganthony)) +* kubeadm: make sure pre-pulled kube-proxy image and the one specified in its daemon set manifest are the same ([#67131](https://github.com/kubernetes/kubernetes/pull/67131), [@rosti](https://github.com/rosti)) +* Graduate Resource Quota ScopeSelectors to beta, and enable it by default. ([#67077](https://github.com/kubernetes/kubernetes/pull/67077), [@vikaschoudhary16](https://github.com/vikaschoudhary16)) +* Decrease the amount of time it takes to modify kubeconfig files with large amounts of contexts ([#67093](https://github.com/kubernetes/kubernetes/pull/67093), [@juanvallejo](https://github.com/juanvallejo)) +* Fixes issue when updating a DaemonSet causes a hash collision. ([#66476](https://github.com/kubernetes/kubernetes/pull/66476), [@mortent](https://github.com/mortent)) +* fix cluster-info dump error ([#66652](https://github.com/kubernetes/kubernetes/pull/66652), [@charrywanganthony](https://github.com/charrywanganthony)) +* The PodShareProcessNamespace feature to configure PID namespace sharing within a pod has been promoted to beta. ([#66507](https://github.com/kubernetes/kubernetes/pull/66507), [@verb](https://github.com/verb)) +* `kubectl create {clusterrole,role}`'s `--resources` flag supports asterisk to specify all resources. ([#62945](https://github.com/kubernetes/kubernetes/pull/62945), [@nak3](https://github.com/nak3)) +* Bump up version number of debian-base, debian-hyperkube-base and debian-iptables. ([#67026](https://github.com/kubernetes/kubernetes/pull/67026), [@satyasm](https://github.com/satyasm)) + * Also updates dependencies of users of debian-base. + * debian-base version 0.3.1 is already available. +* DynamicProvisioningScheduling and VolumeScheduling is now supported for Azure managed disks. Feature gates DynamicProvisioningScheduling and VolumeScheduling should be enabled before using this feature. ([#67121](https://github.com/kubernetes/kubernetes/pull/67121), [@feiskyer](https://github.com/feiskyer)) +* kube-apiserver now includes all registered API groups in discovery, including registered extension API group/versions for unavailable extension API servers. ([#66932](https://github.com/kubernetes/kubernetes/pull/66932), [@nilebox](https://github.com/nilebox)) +* Allows extension API server to dynamically discover the requestheader CA certificate when the core API server doesn't use certificate based authentication for it's clients ([#66394](https://github.com/kubernetes/kubernetes/pull/66394), [@rtripat](https://github.com/rtripat)) +* audit.k8s.io api group is upgraded from v1beta1 to v1. ([#65891](https://github.com/kubernetes/kubernetes/pull/65891), [@CaoShuFeng](https://github.com/CaoShuFeng)) + * Deprecated element metav1.ObjectMeta and Timestamp are removed from audit Events in v1 version. + * Default value of option --audit-webhook-version and --audit-log-version will be changed from `audit.k8s.io/v1beta1` to `audit.k8s.io/v1` in release 1.13 +* scope AWS LoadBalancer security group ICMP rules to spec.loadBalancerSourceRanges ([#63572](https://github.com/kubernetes/kubernetes/pull/63572), [@haz-mat](https://github.com/haz-mat)) +* Add NoSchedule/NoExecute tolerations to ip-masq-agent, ensuring it to be scheduled in all nodes except master. ([#66260](https://github.com/kubernetes/kubernetes/pull/66260), [@tanshanshan](https://github.com/tanshanshan)) +* The flag `--skip-preflight-checks` of kubeadm has been removed. Please use `--ignore-preflight-errors` instead. ([#62727](https://github.com/kubernetes/kubernetes/pull/62727), [@xiangpengzhao](https://github.com/xiangpengzhao)) +* The watch API endpoints prefixed with `/watch` are deprecated and will be removed in a future release. These standard method for watching resources (supported since v1.0) is to use the list API endpoints with a `?watch=true` parameter. All client-go clients have used the parameter method since v1.6.0. ([#65147](https://github.com/kubernetes/kubernetes/pull/65147), [@liggitt](https://github.com/liggitt)) +* Bump Heapster to v1.6.0-beta.1 ([#67074](https://github.com/kubernetes/kubernetes/pull/67074), [@kawych](https://github.com/kawych)) +* kube-apiserver: setting a `dryRun` query parameter on a CONNECT request will now cause the request to be rejected, consistent with behavior of other mutating API requests. Examples of CONNECT APIs are the `nodes/proxy`, `services/proxy`, `pods/proxy`, `pods/exec`, and `pods/attach` subresources. Note that this prevents sending a `dryRun` parameter to backends via `{nodes,services,pods}/proxy` subresources. ([#66083](https://github.com/kubernetes/kubernetes/pull/66083), [@jennybuckley](https://github.com/jennybuckley)) +* In clusters where the DryRun feature is enabled, dry-run requests will go through the normal admission chain. Because of this, ImagePolicyWebhook authors should especially make sure that their webhooks do not rely on side effects. ([#66391](https://github.com/kubernetes/kubernetes/pull/66391), [@jennybuckley](https://github.com/jennybuckley)) +* Metadata Agent Improvements ([#66485](https://github.com/kubernetes/kubernetes/pull/66485), [@bmoyles0117](https://github.com/bmoyles0117)) + * Bump metadata agent version to 0.2-0.0.21-1. + * Expand the metadata agent's access to all API groups. + * Remove metadata agent config maps in favor of command line flags. + * Update the metadata agent's liveness probe to a new /healthz handler. + * Logging Agent Improvements + * Bump logging agent version to 0.2-1.5.33-1-k8s-1. + * Appropriately set log severity for k8s_container. + * Fix detect exceptions plugin to analyze message field instead of log field. + * Fix detect exceptions plugin to analyze streams based on local resource id. + * Disable the metadata agent for monitored resource construction in logging. + * Disable timestamp adjustment in logs to optimize performance. + * Reduce logging agent buffer chunk limit to 512k to optimize performance. +* kubectl: the wait command now prints an error message and exits with the code 1, if there is no resources matching selectors ([#66692](https://github.com/kubernetes/kubernetes/pull/66692), [@m1kola](https://github.com/m1kola)) +* Quota admission configuration api graduated to v1beta1 ([#66156](https://github.com/kubernetes/kubernetes/pull/66156), [@vikaschoudhary16](https://github.com/vikaschoudhary16)) +* Unit tests for scopes and scope selectors in the quota spec ([#66351](https://github.com/kubernetes/kubernetes/pull/66351), [@vikaschoudhary16](https://github.com/vikaschoudhary16)) +* Print kube-apiserver --help flag help in sections. ([#64517](https://github.com/kubernetes/kubernetes/pull/64517), [@sttts](https://github.com/sttts)) +* Azure managed disks now support availability zones and new parameters `zoned`, `zone` and `zones` are added for AzureDisk storage class. ([#66553](https://github.com/kubernetes/kubernetes/pull/66553), [@feiskyer](https://github.com/feiskyer)) +* nodes: improve handling of erroneous host names ([#64815](https://github.com/kubernetes/kubernetes/pull/64815), [@dixudx](https://github.com/dixudx)) +* remove deprecated shorthand flag `-c` from `kubectl version (--client)` ([#66817](https://github.com/kubernetes/kubernetes/pull/66817), [@charrywanganthony](https://github.com/charrywanganthony)) +* Added etcd_object_count metrics for CustomResources. ([#65983](https://github.com/kubernetes/kubernetes/pull/65983), [@sttts](https://github.com/sttts)) +* Handle newlines for `command`, `args`, `env`, and `annotations` in `kubectl describe` wrapping ([#66841](https://github.com/kubernetes/kubernetes/pull/66841), [@smarterclayton](https://github.com/smarterclayton)) +* Fix pod launch by kubelet when --cgroups-per-qos=false and --cgroup-driver="systemd" ([#66617](https://github.com/kubernetes/kubernetes/pull/66617), [@pravisankar](https://github.com/pravisankar)) +* kubelet: fix nil pointer dereference while enforce-node-allocatable flag is not config properly ([#66190](https://github.com/kubernetes/kubernetes/pull/66190), [@linyouchong](https://github.com/linyouchong)) +* Fix a bug on GCE that /etc/crictl.yaml is not generated when crictl is preloaded. ([#66877](https://github.com/kubernetes/kubernetes/pull/66877), [@Random-Liu](https://github.com/Random-Liu)) +* This fix prevents a GCE PD volume from being mounted if the udev device link is stale and tries to correct the link. ([#66832](https://github.com/kubernetes/kubernetes/pull/66832), [@msau42](https://github.com/msau42)) + + + +# v1.12.0-alpha.1 + +[Documentation](https://docs.k8s.io) & [Examples](https://releases.k8s.io/master/examples) + +## Downloads for v1.12.0-alpha.1 + + +filename | sha256 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes.tar.gz) | `603345769f5e2306e5c22db928aa1cbedc6af63f387ab7a8818cb0111292133f` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-src.tar.gz) | `f8fb4610cee20195381e54bfd163fbaeae228d68986817b685948b8957f324d0` + +### Client Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `e081c275601bcaa45d906a976d35902256f836bb60caa738a2fd8719ff3e1048` +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `2dd222a267ac247dce4dfc52aff313f20c427b4351f7410aadebe8569ede3139` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `46b16d6b0429163da67b06242772c3c6c5ab9da6deda5306e63d21be04b4811d` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `8b8bf0a8a4568559d3762a72c1095ab37785fc8bbbb290aaff3a34341a24d7eb` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `d71dc60e087746b2832e66170053816dc8ed42e95efe0769ed926a6e044175ef` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `e9091bbfb997d1603dfd17ba9f145ca7dacf304f04d10230e056f8a12ce44445` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `fc6c0985ccbd806add497f2557000f7e90f3176427250e019a40e8acf7c42282` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `b8c64b318d702f6e8be76330fd5da9b87e2e4e31e904ea7e00c0cd6412ab2bcf` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `cb96e353eb5d400756a93c8d16321d0fac87d6a4f8ad89fda42858f8e4d85e9d` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `003284f983cafc6fd0ce1205c03d47e638a999def1ef4e1e77bfb9149e5f598b` + +### Server Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `d9c282cd02c8c3fdbeb2f46abd0ddd257a8449e94be3beed2514c6e30a335a87` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `613390ba73f4236feb10bb4f70cbf96e504cf8d598da0180efc887d316b8bc5e` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `1dd417f59d17c3583c6b4a3989d24c57e4989eb7b6ab9f2aa10c4cbf9bf5c11b` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `44e9e6424ed3a5a91f5adefa456b2b71c0c5d3b01be9f60f5c8c0f958815ffc1` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `3118d9c955f9a50f86ebba324894f06dbf7c1cb8f9bc5bdf6a95caf2a6678805` + +### Node Binaries + +filename | sha256 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `6b4d363d190e0ce6f4e41d19a0ac350b39cad7859bc442166a1da9124d1a82bb` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `c80ac005c228217b871bf3e9de032044659db3aa048cc95b101820e31d62264c` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `d8b84e7cc6ff5d0e26b045de37bdd40ca8809c303b601d8604902e5957d98621` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `b0a667c5c905e6e724fba95d44797fb52afb564aedd1c25cbd4e632e152843e9` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `78e7dbb82543ea6ac70767ed63c92823726adb6257f6b70b5911843d18288df7` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.12.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `1a3e11cc3f1a0297de2b894a43eb56ede5fbd5cdc43e4da7e61171f5c1f3ef60` + +## Changelog since v1.11.0 + +### Action Required + +* action required: the API server and client-go libraries have been fixed to support additional non-alpha-numeric characters in UserInfo "extra" data keys. Both should be updated in order to properly support extra data containing "/" characters or other characters disallowed in HTTP headers. ([#65799](https://github.com/kubernetes/kubernetes/pull/65799), [@dekkagaijin](https://github.com/dekkagaijin)) +* [action required] The `NodeConfiguration` kind in the kubeadm v1alpha2 API has been renamed `JoinConfiguration` in v1alpha3 ([#65951](https://github.com/kubernetes/kubernetes/pull/65951), [@luxas](https://github.com/luxas)) +* ACTION REQUIRED: Removes defaulting of CSI file system type to ext4. All the production drivers listed under https://kubernetes-csi.github.io/docs/Drivers.html were inspected and should not be impacted after this change. If you are using a driver not in that list, please test the drivers on an updated test cluster first. ``` ([#65499](https://github.com/kubernetes/kubernetes/pull/65499), [@krunaljain](https://github.com/krunaljain)) +* [action required] The `MasterConfiguration` kind in the kubeadm v1alpha2 API has been renamed `InitConfiguration` in v1alpha3 ([#65945](https://github.com/kubernetes/kubernetes/pull/65945), [@luxas](https://github.com/luxas)) +* [action required] The formerly publicly-available cAdvisor web UI that the kubelet started using `--cadvisor-port` is now entirely removed in 1.12. The recommended way to run cAdvisor if you still need it, is via a DaemonSet. ([#65707](https://github.com/kubernetes/kubernetes/pull/65707), [@dims](https://github.com/dims)) +* Cluster Autoscaler version updated to 1.3.1-beta.1. Release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.3.1-beta.1 ([#65857](https://github.com/kubernetes/kubernetes/pull/65857), [@aleksandra-malinowska](https://github.com/aleksandra-malinowska)) + * Default value for expendable pod priority cutoff in GCP deployment of Cluster Autoscaler changed from 0 to -10. + * action required: users deploying workloads with priority lower than 0 may want to use priority lower than -10 to avoid triggering scale-up. +* [action required] kubeadm: The `v1alpha1` config API has been removed. ([#65628](https://github.com/kubernetes/kubernetes/pull/65628), [@luxas](https://github.com/luxas)) + * Please convert your `v1alpha1` configuration files to `v1alpha2` using the + * `kubeadm config migrate` command of kubeadm v1.11.x +* kube-apiserver: the `Priority` admission plugin is now enabled by default when using `--enable-admission-plugins`. If using `--admission-control` to fully specify the set of admission plugins, the `Priority` admission plugin should be added if using the `PodPriority` feature, which is enabled by default in 1.11. ([#65739](https://github.com/kubernetes/kubernetes/pull/65739), [@liggitt](https://github.com/liggitt)) +* The `system-node-critical` and `system-cluster-critical` priority classes are now limited to the `kube-system` namespace by the `PodPriority` admission plugin. ([#65593](https://github.com/kubernetes/kubernetes/pull/65593), [@bsalamat](https://github.com/bsalamat)) +* kubernetes-worker juju charm: Added support for setting the --enable-ssl-chain-completion option on the ingress proxy. "action required": if your installation relies on supplying incomplete certificate chains and using OCSP to fill them in, you must set "ingress-ssl-chain-completion" to "true" in your juju configuration. ([#63845](https://github.com/kubernetes/kubernetes/pull/63845), [@paulgear](https://github.com/paulgear)) + +### Other notable changes + +* admin RBAC role now aggregates edit and view. edit RBAC role now aggregates view. ([#66684](https://github.com/kubernetes/kubernetes/pull/66684), [@deads2k](https://github.com/deads2k)) +* Speed up HPA reaction to metric changes by removing scale up forbidden window. ([#66615](https://github.com/kubernetes/kubernetes/pull/66615), [@jbartosik](https://github.com/jbartosik)) + * Scale up forbidden window was protecting HPA against making decision to scale up based on metrics gathered during pod initialisation (which may be invalid, for example pod may be using a lot of CPU despite not doing any "actual" work). + * To avoid that negative effect only use per pod metrics from pods that are: + * - ready (so metrics about them should be valid), or + * - unready but creation and last readiness change timestamps are apart more than 10s (pods that have formerly been ready and so metrics are in at least some cases (pod becoming unready because of overload) very useful). +* The `kubectl patch` command no longer exits with exit code 1 when a redundant patch results in a no-op ([#66725](https://github.com/kubernetes/kubernetes/pull/66725), [@juanvallejo](https://github.com/juanvallejo)) +* Improved the output of `kubectl get events` to prioritize showing the message, and move some fields to `-o wide`. ([#66643](https://github.com/kubernetes/kubernetes/pull/66643), [@smarterclayton](https://github.com/smarterclayton)) +* Added CPU Manager state validation in case of changed CPU topology. ([#66718](https://github.com/kubernetes/kubernetes/pull/66718), [@ipuustin](https://github.com/ipuustin)) +* Make EBS volume expansion faster ([#66728](https://github.com/kubernetes/kubernetes/pull/66728), [@gnufied](https://github.com/gnufied)) +* Kubelet serving certificate bootstrapping and rotation has been promoted to beta status. ([#66726](https://github.com/kubernetes/kubernetes/pull/66726), [@liggitt](https://github.com/liggitt)) +* Flag --pod (-p shorthand) of kubectl exec command marked as deprecated ([#66558](https://github.com/kubernetes/kubernetes/pull/66558), [@quasoft](https://github.com/quasoft)) +* Fixed an issue which prevented `gcloud` from working on GCE when metadata concealment was enabled. ([#66630](https://github.com/kubernetes/kubernetes/pull/66630), [@dekkagaijin](https://github.com/dekkagaijin)) +* Azure Go SDK has been upgraded to v19.0.0 and VirtualMachineScaleSetVM now supports availability zones. ([#66648](https://github.com/kubernetes/kubernetes/pull/66648), [@feiskyer](https://github.com/feiskyer)) +* kubeadm now can join the cluster with pre-existing client certificate if provided ([#66482](https://github.com/kubernetes/kubernetes/pull/66482), [@dixudx](https://github.com/dixudx)) +* If `TaintNodesByCondition` enabled, taint node with `TaintNodeUnschedulable` when ([#63955](https://github.com/kubernetes/kubernetes/pull/63955), [@k82cn](https://github.com/k82cn)) + * initializing node to avoid race condition. +* kubeadm: remove misleading error message regarding image pulling ([#66658](https://github.com/kubernetes/kubernetes/pull/66658), [@dixudx](https://github.com/dixudx)) +* Fix Stackdriver integration based on node annotation container.googleapis.com/instance_id. ([#66676](https://github.com/kubernetes/kubernetes/pull/66676), [@kawych](https://github.com/kawych)) +* Fix kubelet startup failure when using ExecPlugin in kubeconfig ([#66395](https://github.com/kubernetes/kubernetes/pull/66395), [@awly](https://github.com/awly)) +* When attaching iSCSI volumes, kubelet now scans only the specific ([#63176](https://github.com/kubernetes/kubernetes/pull/63176), [@bswartz](https://github.com/bswartz)) + * LUNs being attached, and also deletes them after detaching. This avoids + * dangling references to LUNs that no longer exist, which used to be the + * cause of random I/O errors/timeouts in kernel logs, slowdowns during + * block-device related operations, and very rare cases of data corruption. +* kubeadm: Pull sidecar and dnsmasq-nanny images when using kube-dns ([#66499](https://github.com/kubernetes/kubernetes/pull/66499), [@rosti](https://github.com/rosti)) +* Extender preemption should respect IsInterested() ([#66291](https://github.com/kubernetes/kubernetes/pull/66291), [@resouer](https://github.com/resouer)) +* Properly autopopulate OpenAPI version field without needing other OpenAPI fields present in generic API server code. ([#66411](https://github.com/kubernetes/kubernetes/pull/66411), [@DirectXMan12](https://github.com/DirectXMan12)) +* renamed command line option --cri-socket-path of the kubeadm subcommand "kubeadm config images pull" to --cri-socket to be consistent with the rest of kubeadm subcommands. ([#66382](https://github.com/kubernetes/kubernetes/pull/66382), [@bart0sh](https://github.com/bart0sh)) +* The --docker-disable-shared-pid kubelet flag has been removed. PID namespace sharing can instead be enable per-pod using the ShareProcessNamespace option. ([#66506](https://github.com/kubernetes/kubernetes/pull/66506), [@verb](https://github.com/verb)) +* Add support for using User Assigned MSI (https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/overview) with Kubernetes cluster on Azure. ([#66180](https://github.com/kubernetes/kubernetes/pull/66180), [@kkmsft](https://github.com/kkmsft)) +* fix acr could not be listed in sp issue ([#66429](https://github.com/kubernetes/kubernetes/pull/66429), [@andyzhangx](https://github.com/andyzhangx)) +* This PR will leverage subtests on the existing table tests for the scheduler units. ([#63665](https://github.com/kubernetes/kubernetes/pull/63665), [@xchapter7x](https://github.com/xchapter7x)) + * Some refactoring of error/status messages and functions to align with new approach. +* Fix volume limit for EBS on m5 and c5 instance types ([#66397](https://github.com/kubernetes/kubernetes/pull/66397), [@gnufied](https://github.com/gnufied)) +* Extend TLS timeouts to work around slow arm64 math/big ([#66264](https://github.com/kubernetes/kubernetes/pull/66264), [@joejulian](https://github.com/joejulian)) +* kubeadm: stop setting UID in the kubelet ConfigMap ([#66341](https://github.com/kubernetes/kubernetes/pull/66341), [@runiq](https://github.com/runiq)) +* kubectl: fixes a panic displaying pods with nominatedNodeName set ([#66406](https://github.com/kubernetes/kubernetes/pull/66406), [@liggitt](https://github.com/liggitt)) +* Update crictl to v1.11.1. ([#66152](https://github.com/kubernetes/kubernetes/pull/66152), [@Random-Liu](https://github.com/Random-Liu)) +* fixes a panic when using a mutating webhook admission plugin with a DELETE operation ([#66425](https://github.com/kubernetes/kubernetes/pull/66425), [@liggitt](https://github.com/liggitt)) +* GCE: Fixes loadbalancer creation and deletion issues appearing in 1.10.5. ([#66400](https://github.com/kubernetes/kubernetes/pull/66400), [@nicksardo](https://github.com/nicksardo)) +* Azure nodes with availability zone now will have label `failure-domain.beta.kubernetes.io/zone=-`. ([#66242](https://github.com/kubernetes/kubernetes/pull/66242), [@feiskyer](https://github.com/feiskyer)) +* Re-design equivalence class cache to two level cache ([#65714](https://github.com/kubernetes/kubernetes/pull/65714), [@resouer](https://github.com/resouer)) +* Checks CREATE admission for create-on-update requests instead of UPDATE admission ([#65572](https://github.com/kubernetes/kubernetes/pull/65572), [@yue9944882](https://github.com/yue9944882)) +* This PR will leverage subtests on the existing table tests for the scheduler units. ([#63666](https://github.com/kubernetes/kubernetes/pull/63666), [@xchapter7x](https://github.com/xchapter7x)) + * Some refactoring of error/status messages and functions to align with new approach. +* Fixed a panic in the node status update logic when existing node has nil labels. ([#66307](https://github.com/kubernetes/kubernetes/pull/66307), [@guoshimin](https://github.com/guoshimin)) +* Bump Ingress-gce version to 1.2.0 ([#65641](https://github.com/kubernetes/kubernetes/pull/65641), [@freehan](https://github.com/freehan)) +* Bump event-exporter to 0.2.2 to pick up security fixes. ([#66157](https://github.com/kubernetes/kubernetes/pull/66157), [@loburm](https://github.com/loburm)) +* Allow ScaleIO volumes to be provisioned without having to first manually create /dev/disk/by-id path on each kubernetes node (if not already present) ([#66174](https://github.com/kubernetes/kubernetes/pull/66174), [@ddebroy](https://github.com/ddebroy)) +* fix rollout status for statefulsets ([#62943](https://github.com/kubernetes/kubernetes/pull/62943), [@faraazkhan](https://github.com/faraazkhan)) +* Fix for resourcepool-path configuration in the vsphere.conf file. ([#66261](https://github.com/kubernetes/kubernetes/pull/66261), [@divyenpatel](https://github.com/divyenpatel)) +* OpenAPI spec and documentation reflect 202 Accepted response path for delete request ([#63418](https://github.com/kubernetes/kubernetes/pull/63418), [@roycaihw](https://github.com/roycaihw)) +* fixes a validation error that could prevent updates to StatefulSet objects containing non-normalized resource requests ([#66165](https://github.com/kubernetes/kubernetes/pull/66165), [@liggitt](https://github.com/liggitt)) +* Fix validation for HealthzBindAddress in kube-proxy when --healthz-port is set to 0 ([#66138](https://github.com/kubernetes/kubernetes/pull/66138), [@wsong](https://github.com/wsong)) +* kubeadm: use an HTTP request timeout when fetching the latest version of Kubernetes from dl.k8s.io ([#65676](https://github.com/kubernetes/kubernetes/pull/65676), [@dkoshkin](https://github.com/dkoshkin)) +* Support configuring the Azure load balancer idle connection timeout for services ([#66045](https://github.com/kubernetes/kubernetes/pull/66045), [@cpuguy83](https://github.com/cpuguy83)) +* `kubectl config set-context` can now set attributes of the current context, like the current namespace, by passing `--current` instead of a specific context name ([#66140](https://github.com/kubernetes/kubernetes/pull/66140), [@liggitt](https://github.com/liggitt)) +* The alpha `Initializers` admission plugin is no longer enabled by default. This matches the off-by-default behavior of the alpha API which drives initializer behavior. ([#66039](https://github.com/kubernetes/kubernetes/pull/66039), [@liggitt](https://github.com/liggitt)) +* kubeadm: Default component configs are printable via kubeadm config print-default ([#66074](https://github.com/kubernetes/kubernetes/pull/66074), [@rosti](https://github.com/rosti)) +* prevents infinite CLI wait on delete when item is recreated ([#66136](https://github.com/kubernetes/kubernetes/pull/66136), [@deads2k](https://github.com/deads2k)) +* Preserve vmUUID when renewing nodeinfo in vSphere cloud provider ([#66007](https://github.com/kubernetes/kubernetes/pull/66007), [@w-leads](https://github.com/w-leads)) +* Cluster Autoscaler version updated to 1.3.1. Release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.3.1 ([#66122](https://github.com/kubernetes/kubernetes/pull/66122), [@aleksandra-malinowska](https://github.com/aleksandra-malinowska)) +* Expose docker registry config for addons used in Juju deployments ([#66092](https://github.com/kubernetes/kubernetes/pull/66092), [@kwmonroe](https://github.com/kwmonroe)) +* kubelets that specify `--cloud-provider` now only report addresses in Node status as determined by the cloud provider ([#65594](https://github.com/kubernetes/kubernetes/pull/65594), [@liggitt](https://github.com/liggitt)) + * kubelet serving certificate rotation now reacts to changes in reported node addresses, and will request certificates for addresses set by an external cloud provider +* Fix the bug where image garbage collection is disabled by mistake. ([#66051](https://github.com/kubernetes/kubernetes/pull/66051), [@jiaxuanzhou](https://github.com/jiaxuanzhou)) +* fixes an issue with multi-line annotations injected via downward API files getting scrambled ([#65992](https://github.com/kubernetes/kubernetes/pull/65992), [@liggitt](https://github.com/liggitt)) +* kubeadm: run kube-proxy on non-master tainted nodes ([#65931](https://github.com/kubernetes/kubernetes/pull/65931), [@neolit123](https://github.com/neolit123)) +* "kubectl delete" no longer waits for dependent objects to be deleted when removing parent resources ([#65908](https://github.com/kubernetes/kubernetes/pull/65908), [@juanvallejo](https://github.com/juanvallejo)) +* Introduce a new flag `--keepalive` for kubectl proxy to allow setting keep-alive period for long-running request. ([#63793](https://github.com/kubernetes/kubernetes/pull/63793), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) +* If Openstack LoadBalancer is not defined in cloud config, the loadbalancer is not initialized any more in openstack. All setups must have some setting under that section ([#65781](https://github.com/kubernetes/kubernetes/pull/65781), [@zetaab](https://github.com/zetaab)) +* Re-adds `pkg/generated/bindata.go` to the repository to allow some parts of k8s.io/kubernetes to be go-vendorable. ([#65985](https://github.com/kubernetes/kubernetes/pull/65985), [@ixdy](https://github.com/ixdy)) +* Fix a bug that preempting a pod may block forever. ([#65987](https://github.com/kubernetes/kubernetes/pull/65987), [@Random-Liu](https://github.com/Random-Liu)) +* Fix flexvolume in containarized kubelets ([#65549](https://github.com/kubernetes/kubernetes/pull/65549), [@gnufied](https://github.com/gnufied)) +* Add volume mode filed to constructed volume spec for CSI plugin ([#65456](https://github.com/kubernetes/kubernetes/pull/65456), [@wenlxie](https://github.com/wenlxie)) +* Fix an issue with dropped audit logs, when truncating and batch backends enabled at the same time. ([#65823](https://github.com/kubernetes/kubernetes/pull/65823), [@loburm](https://github.com/loburm)) +* Support traffic shaping for CNI network driver ([#63194](https://github.com/kubernetes/kubernetes/pull/63194), [@m1093782566](https://github.com/m1093782566)) +* kubeadm: Use separate YAML documents for the kubelet and kube-proxy ComponentConfigs ([#65787](https://github.com/kubernetes/kubernetes/pull/65787), [@luxas](https://github.com/luxas)) +* kubeadm: Fix pause image to not use architecture, as it is a manifest list ([#65920](https://github.com/kubernetes/kubernetes/pull/65920), [@dims](https://github.com/dims)) +* kubeadm: print required flags when running kubeadm upgrade plan ([#65802](https://github.com/kubernetes/kubernetes/pull/65802), [@xlgao-zju](https://github.com/xlgao-zju)) +* Fix `RunAsGroup` which doesn't work since 1.10. ([#65926](https://github.com/kubernetes/kubernetes/pull/65926), [@Random-Liu](https://github.com/Random-Liu)) +* Running `kubectl describe pvc` now shows which pods are mounted to the pvc being described with the `Mounted By` field ([#65837](https://github.com/kubernetes/kubernetes/pull/65837), [@clandry94](https://github.com/clandry94)) +* fix azure storage account creation failure ([#65846](https://github.com/kubernetes/kubernetes/pull/65846), [@andyzhangx](https://github.com/andyzhangx)) +* Allow kube- and cloud-controller-manager to listen on ports up to 65535. ([#65860](https://github.com/kubernetes/kubernetes/pull/65860), [@sttts](https://github.com/sttts)) +* Allow kube-scheduler to listen on ports up to 65535. ([#65833](https://github.com/kubernetes/kubernetes/pull/65833), [@sttts](https://github.com/sttts)) +* kubeadm: Remove usage of `PersistentVolumeLabel` ([#65827](https://github.com/kubernetes/kubernetes/pull/65827), [@xlgao-zju](https://github.com/xlgao-zju)) +* kubeadm: Add a `v1alpha3` API. ([#65629](https://github.com/kubernetes/kubernetes/pull/65629), [@luxas](https://github.com/luxas)) +* Update to use go1.10.3 ([#65726](https://github.com/kubernetes/kubernetes/pull/65726), [@ixdy](https://github.com/ixdy)) +* LimitRange and Endpoints resources can be created via an update API call if the object does not already exist. When this occurs, an authorization check is now made to ensure the user making the API call is authorized to create the object. In previous releases, only an update authorization check was performed. ([#65150](https://github.com/kubernetes/kubernetes/pull/65150), [@jennybuckley](https://github.com/jennybuckley)) +* Fix 'kubectl cp' with no arguments causes a panic ([#65482](https://github.com/kubernetes/kubernetes/pull/65482), [@wgliang](https://github.com/wgliang)) +* bazel deb package bugfix: The kubeadm deb package now reloads the kubelet after installation ([#65554](https://github.com/kubernetes/kubernetes/pull/65554), [@rdodev](https://github.com/rdodev)) +* fix smb mount issue ([#65751](https://github.com/kubernetes/kubernetes/pull/65751), [@andyzhangx](https://github.com/andyzhangx)) +* More fields are allowed at the root of the CRD validation schema when the status subresource is enabled. ([#65357](https://github.com/kubernetes/kubernetes/pull/65357), [@nikhita](https://github.com/nikhita)) +* Reload systemd config files before starting kubelet. ([#65702](https://github.com/kubernetes/kubernetes/pull/65702), [@mborsz](https://github.com/mborsz)) +* Unix: support ZFS as a valid graph driver for Docker ([#65635](https://github.com/kubernetes/kubernetes/pull/65635), [@neolit123](https://github.com/neolit123)) +* Fix controller-manager crashes when flex plugin is removed from flex plugin directory ([#65536](https://github.com/kubernetes/kubernetes/pull/65536), [@gnufied](https://github.com/gnufied)) +* Enable etcdv3 client prometheus metics ([#64741](https://github.com/kubernetes/kubernetes/pull/64741), [@wgliang](https://github.com/wgliang)) +* skip nodes that have a primary NIC in a 'Failed' provisioningState ([#65412](https://github.com/kubernetes/kubernetes/pull/65412), [@yastij](https://github.com/yastij)) +* kubeadm: remove redundant flags settings for kubelet ([#64682](https://github.com/kubernetes/kubernetes/pull/64682), [@dixudx](https://github.com/dixudx)) +* Fixes the wrong elasticsearch node counter ([#65627](https://github.com/kubernetes/kubernetes/pull/65627), [@IvanovOleg](https://github.com/IvanovOleg)) +* - Can configure the vsphere cloud provider with a trusted Root-CA ([#64758](https://github.com/kubernetes/kubernetes/pull/64758), [@mariantalla](https://github.com/mariantalla)) +* Add Ubuntu 18.04 (Bionic) series to Juju charms ([#65644](https://github.com/kubernetes/kubernetes/pull/65644), [@tvansteenburgh](https://github.com/tvansteenburgh)) +* Fix local volume directory can't be deleted because of volumeMode error ([#65310](https://github.com/kubernetes/kubernetes/pull/65310), [@wenlxie](https://github.com/wenlxie)) +* kubectl: --use-openapi-print-columns is deprecated in favor of --server-print ([#65601](https://github.com/kubernetes/kubernetes/pull/65601), [@liggitt](https://github.com/liggitt)) +* Add prometheus scrape port to CoreDNS service ([#65589](https://github.com/kubernetes/kubernetes/pull/65589), [@rajansandeep](https://github.com/rajansandeep)) +* fixes an out of range panic in the NoExecuteTaintManager controller when running a non-64-bit build ([#65596](https://github.com/kubernetes/kubernetes/pull/65596), [@liggitt](https://github.com/liggitt)) +* kubectl: fixes a regression with --use-openapi-print-columns that would not print object contents ([#65600](https://github.com/kubernetes/kubernetes/pull/65600), [@liggitt](https://github.com/liggitt)) +* Hostnames are now converted to lowercase before being used for node lookups in the kubernetes-worker charm. ([#65487](https://github.com/kubernetes/kubernetes/pull/65487), [@dshcherb](https://github.com/dshcherb)) +* N/A ([#64660](https://github.com/kubernetes/kubernetes/pull/64660), [@figo](https://github.com/figo)) +* bugfix: Do not print feature gates in the generic apiserver code for glog level 0 ([#65584](https://github.com/kubernetes/kubernetes/pull/65584), [@neolit123](https://github.com/neolit123)) +* Add metrics for PVC in-use ([#64527](https://github.com/kubernetes/kubernetes/pull/64527), [@gnufied](https://github.com/gnufied)) +* Fixed exception detection in fluentd-gcp plugin. ([#65361](https://github.com/kubernetes/kubernetes/pull/65361), [@xperimental](https://github.com/xperimental)) +* api-machinery utility functions `SetTransportDefaults` and `DialerFor` once again respect custom Dial functions set on transports ([#65547](https://github.com/kubernetes/kubernetes/pull/65547), [@liggitt](https://github.com/liggitt)) +* Improve the display of jobs in `kubectl get` and `kubectl describe` to emphasize progress and duration. ([#65463](https://github.com/kubernetes/kubernetes/pull/65463), [@smarterclayton](https://github.com/smarterclayton)) +* kubectl convert previous created a list inside of a list. Now it is only wrapped once. ([#65489](https://github.com/kubernetes/kubernetes/pull/65489), [@deads2k](https://github.com/deads2k)) +* fix azure disk creation issue when specifying external resource group ([#65516](https://github.com/kubernetes/kubernetes/pull/65516), [@andyzhangx](https://github.com/andyzhangx)) +* fixes a regression in kube-scheduler to properly load client connection information from a `--config` file that references a kubeconfig file ([#65507](https://github.com/kubernetes/kubernetes/pull/65507), [@liggitt](https://github.com/liggitt)) +* Fixed cleanup of CSI metadata files. ([#65323](https://github.com/kubernetes/kubernetes/pull/65323), [@jsafrane](https://github.com/jsafrane)) +* Update Rescheduler's manifest to use version 0.4.0. ([#65454](https://github.com/kubernetes/kubernetes/pull/65454), [@bsalamat](https://github.com/bsalamat)) +* On COS, NPD creates a node condition for frequent occurrences of unregister_netdevice ([#65342](https://github.com/kubernetes/kubernetes/pull/65342), [@dashpole](https://github.com/dashpole)) +* Properly manage security groups for loadbalancer services on OpenStack. ([#65373](https://github.com/kubernetes/kubernetes/pull/65373), [@multi-io](https://github.com/multi-io)) +* Add user-agent to audit-logging. ([#64812](https://github.com/kubernetes/kubernetes/pull/64812), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) +* kubeadm: notify the user of manifest upgrade timeouts ([#65164](https://github.com/kubernetes/kubernetes/pull/65164), [@xlgao-zju](https://github.com/xlgao-zju)) * Fixes incompatibility with custom scheduler extender configurations specifying `bindVerb` ([#65424](https://github.com/kubernetes/kubernetes/pull/65424), [@liggitt](https://github.com/liggitt)) -* kubectl built for darwin from darwin now enables cgo to use the system-native C libraries for DNS resolution. Cross-compiled kubectl (e.g. from an official kubernetes release) still uses the go-native netgo DNS implementation. ([#64219](https://github.com/kubernetes/kubernetes/pull/64219), [@ixdy](https://github.com/ixdy)) -* API server properly parses propagationPolicy as a query parameter sent with a delete request ([#63414](https://github.com/kubernetes/kubernetes/pull/63414), [@roycaihw](https://github.com/roycaihw)) -* Corrected a race condition in bootstrapping aggregated cluster roles in new HA clusters ([#63761](https://github.com/kubernetes/kubernetes/pull/63761), [@liggitt](https://github.com/liggitt)) -* kubelet: fix hangs in updating Node status after network interruptions/changes between the kubelet and API server ([#63492](https://github.com/kubernetes/kubernetes/pull/63492), [@liggitt](https://github.com/liggitt)) -* Added log and fs stats for Windows containers ([#62266](https://github.com/kubernetes/kubernetes/pull/62266), [@feiskyer](https://github.com/feiskyer)) -* Fail fast if cgroups-per-qos is set on Windows ([#62984](https://github.com/kubernetes/kubernetes/pull/62984), [@feiskyer](https://github.com/feiskyer)) -* Minor fix for VolumeZoneChecker predicate, storageclass can be in annotation and spec. ([#63749](https://github.com/kubernetes/kubernetes/pull/63749), [@wenlxie](https://github.com/wenlxie)) -* Fixes issue for readOnly subpath mounts for SELinux systems and when the volume mountPath already existed in the container image. ([#64351](https://github.com/kubernetes/kubernetes/pull/64351), [@msau42](https://github.com/msau42)) -* Fixed CSI gRPC connection leak during volume operations. ([#64519](https://github.com/kubernetes/kubernetes/pull/64519), [@vladimirvivien](https://github.com/vladimirvivien)) -* Fixed error reporting of CSI volumes attachment. ([#63303](https://github.com/kubernetes/kubernetes/pull/63303), [@jsafrane](https://github.com/jsafrane)) -* Fixed SELinux relabeling of CSI volumes. ([#64026](https://github.com/kubernetes/kubernetes/pull/64026), [@jsafrane](https://github.com/jsafrane)) -* Fixed detach of already detached CSI volumes. ([#63295](https://github.com/kubernetes/kubernetes/pull/63295), [@jsafrane](https://github.com/jsafrane)) -* fix rbd device works at block mode not get mapped to container ([#64555](https://github.com/kubernetes/kubernetes/pull/64555), [@wenlxie](https://github.com/wenlxie)) -* Fixed an issue where Portworx PVCs remain in pending state when created using a StorageClass with empty parameters ([#64895](https://github.com/kubernetes/kubernetes/pull/64895), [@harsh-px](https://github.com/harsh-px)) storage -* FIX: The OpenStack cloud providers DeleteRoute method fails to delete routes when it can’t find the corresponding instance in OpenStack. (#62729, databus23) -* [fluentd-gcp addon] Increase CPU limit for fluentd to 1 core to achieve 100kb/s throughput. ([#62430](https://github.com/kubernetes/kubernetes/pull/62430), [@bmoyles0117](https://github.com/bmoyles0117)) -* GCE: Fixed operation polling to adhere to the specified interval. Furthermore, operation errors are now returned instead of ignored. ([#64630](https://github.com/kubernetes/kubernetes/pull/64630), [@nicksardo](https://github.com/nicksardo)) -* Included kms-plugin-container.manifest to master nifests tarball. ([#65035](https://github.com/kubernetes/kubernetes/pull/65035), [@immutableT](https://github.com/immutableT)) -* Fixed missing nodes lines when kubectl top nodes ([#64389](https://github.com/kubernetes/kubernetes/pull/64389), [@yue9944882](https://github.com/yue9944882)) sig-cli -* Fixed kubectl drain --timeout option when eviction is used. ([#64378](https://github.com/kubernetes/kubernetes/pull/64378), [@wrdls](https://github.com/wrdls)) sig-cli -* Fixed kubectl auth can-i exit code. It will return 1 if the user is not allowed and 0 if it's allowed. ([#59579](https://github.com/kubernetes/kubernetes/pull/59579), [@fbac](https://github.com/fbac)) -* Fixed data loss issue if using existing azure disk with partitions in disk mount ([#63270](https://github.com/kubernetes/kubernetes/pull/63270), [@andyzhangx](https://github.com/andyzhangx)) -* Fixed azure file size grow issue ([#64383](https://github.com/kubernetes/kubernetes/pull/64383), [@andyzhangx](https://github.com/andyzhangx)) -* Fixed SessionAffinity not updated issue for Azure load balancer ([#64180](https://github.com/kubernetes/kubernetes/pull/64180), [@feiskyer](https://github.com/feiskyer)) -* Fixed kube-controller-manager panic while provisioning Azure security group rules ([#64739](https://github.com/kubernetes/kubernetes/pull/64739), [@feiskyer](https://github.com/feiskyer)) -* Fixed API server panic during concurrent GET or LIST requests with non-empty `resourceVersion`. ([#65092](https://github.com/kubernetes/kubernetes/pull/65092), [@sttts](https://github.com/sttts)) -* Fixed incorrect OpenAPI schema for CustomResourceDefinition objects ([#65256](https://github.com/kubernetes/kubernetes/pull/65256), [@liggitt](https://github.com/liggitt)) -* Fixed issue where PersistentVolume.NodeAffinity.NodeSelectorTerms were ANDed instead of ORed. ([#62556](https://github.com/kubernetes/kubernetes/pull/62556), [@msau42](https://github.com/msau42)) -* Fixed potential infinite loop that can occur when NFS PVs are recycled. ([#62572](https://github.com/kubernetes/kubernetes/pull/62572), [@joelsmith](https://github.com/joelsmith)) -* Fixed column alignment when kubectl get is used with custom columns from OpenAPI schema ([#56629](https://github.com/kubernetes/kubernetes/pull/56629), [@luksa](https://github.com/luksa)) -* kubectl: restore the ability to show resource kinds when displaying multiple objects ([#61985](https://github.com/kubernetes/kubernetes/pull/61985), [@liggitt](https://github.com/liggitt)) -* Fixed a panic in `kubectl run --attach ...` when the api server failed to create the runtime object (due to name conflict, PSP restriction, etc.) ([#61713](https://github.com/kubernetes/kubernetes/pull/61713), [@mountkin](https://github.com/mountkin)) -* kube-scheduler has been fixed to use `--leader-elect` option back to true (as it was in previous versions) ([#59732](https://github.com/kubernetes/kubernetes/pull/59732), [@dims](https://github.com/dims)) -* kubectl: fixes issue with `-o yaml` and `-o json` omitting kind and apiVersion when used with `--dry-run` ([#61808](https://github.com/kubernetes/kubernetes/pull/61808), [@liggitt](https://github.com/liggitt)) -* Ensure reasons end up as comments in `kubectl edit`. ([#60990](https://github.com/kubernetes/kubernetes/pull/60990), [@bmcstdio](https://github.com/bmcstdio)) -* Fixes issue where subpath readOnly mounts failed ([#63045](https://github.com/kubernetes/kubernetes/pull/63045), [@msau42](https://github.com/msau42)) -* Fix stackdriver metrics for node memory using wrong metric type ([#63535](https://github.co/kubernetes/kubernetes/pull/63535), [@serathius](https://github.com/serathius)) -* fix mount unmount failure for a Windows pod ([#63272](https://github.com/kubernetes/kubernetes/pull/63272), [@andyzhangx](https://github.com/andyzhangx)) - -### General Fixes and Reliability - -* Fixed a regression in kube-scheduler to properly load client connection information from a `--config` file that references a kubeconfig file. ([#65507](https://github.com/kubernetes/kubernetes/pull/65507), [@liggitt](https://github.com/liggitt)) -* Fix regression in `v1.JobSpec.backoffLimit` that caused failed Jobs to be restarted indefinitely. ([#63650](https://github.com/kubernetes/kubernetes/pull/63650), [@soltysh](https://github.com/soltysh)) -* fixes a potential deadlock in the garbage collection controller ([#64235](https://github.com/kubernetes/kubernetes/pull/64235), [@liggitt](https://github.com/liggitt)) -* fix formatAndMount func issue on Windows ([#63248](https://github.com/kubernetes/kubernetes/pull/63248), [@andyzhangx](https://github.com/andyzhangx)) -* Fix issue of colliding nodePorts when the cluster has services with externalTrafficPolicy=Local ([#64349](https://github.com/kubernetes/kubernetes/pull/64349), [@nicksardo](https://github.com/nicksardo)) -* fixes a panic applying json patches containing out of bounds operations ([#64355](https://github.com/kubernetes/kubernetes/pull/64355), [@liggitt](https://github.com/liggitt)) -* Fix incorrectly propagated ResourceVersion in ListRequests returning 0 items. ([#64150](https://github.com/kubernetes/kubernetes/pull/64150), [@wojtek-t](https://github.com/wojtek-t)) -* GCE: Fix to make the built-in `kubernetes` service properly point to the master's load balancer address in clusters that use multiple master VMs. ([#63696](https://github.com/kubernetes/kubernetes/pull/63696), [@grosskur](https://github.com/grosskur)) -* Fixes fake client generation for non-namespaced subresources ([#60445](https://github.com/kubernetes/kubernetes/pull/60445), [@jhorwit2](https://github.com/jhorwit2)) -* Schedule even if extender is not available when using extender ([#61445](https://github.com/kubernetes/kubernetes/pull/61445), [@resouer](https://github.com/resouer)) -* Fix panic create/update CRD when mutating/validating webhook configured. ([#61404](https://github.com/kubernetes/kubernetes/pull/61404), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) -* Pods requesting resources prefixed with `*kubernetes.io` will remain unscheduled if there are no nodes exposing that resource. ([#61860](https://github.com/kubernetes/kubernetes/pull/61860), [@mindprince](https://github.com/mindprince)) -* fix scheduling policy on ConfigMap breaks without the --policy-configmap-namespace flag set ([#61388](https://github.com/kubernetes/kubernetes/pull/61388), [@zjj2wry](https://github.com/zjj2wry)) -* Bugfix for erroneous upgrade needed messaging in kubernetes worker charm. ([#60873](https://github.com/kubernetes/kubernetes/pull/60873), [@wwwtyro](https://github.com/wwwtyro)) -* Fix inter-pod anti-affinity check to consider a pod a match when all the anti-affinity terms match. ([#62715](https://github.com/kubernetes/kubernetes/pull/62715), [@bsalamat](https://github.com/bsalamat)) -* Pod affinity `nodeSelectorTerm.matchExpressions` may now be empty, and works as previously documented: nil or empty `matchExpressions` matches no objects in scheduler. ([#62448](https://github.com/kubernetes/kubernetes/pull/62448), [@k82cn](https://github.com/k82cn)) -* Fix an issue in inter-pod affinity predicate that cause affinity to self being processed correctly ([#62591](https://github.com/kubernetes/kubernetes/pull/62591), [@bsalamat](https://github.com/bsalamat)) -* fix WaitForAttach failure issue for azure disk ([#62612](https://github.com/kubernetes/kubernetes/pull/62612), [@andyzhangx](https://github.com/andyzhangx)) -* Fix user visible files creation for windows ([#62375](https://github.com/kubernetes/kubernetes/pull/62375), [@feiskyer](https://github.com/feiskyer)) -* Fix machineID getting for vmss nodes when using instance metadata ([#62611](https://github.com/kubernetes/kubernetes/pull/62611), [@feiskyer](https://github.com/feiskyer)) -* Fix Forward chain default reject policy for IPVS proxier ([#62007](https://github.com/kubernetes/kubernetes/pull/62007), [@m1093782566](https://github.com/m1093782566)) -* fix nsenter GetFileType issue in containerized kubelet ([#62467](https://github.com/kubernetes/kubernetes/pull/62467), [@andyzhangx](https://github.com/andyzhangx)) -* Ensure expected load balancer is selected for Azure ([#62450](https://github.com/kubernetes/kubernetes/pull/62450), [@feiskyer](https://github.com/feiskyer)) -* Resolves forbidden error when the `daemon-set-controller` cluster role access `controllerrevisions` resources. ([#62146](https://github.com/kubernetes/kubernetes/pull/62146), [@frodenas](https://github.com/frodenas)) -* fix incompatible file type checking on Windows ([#62154](https://github.com/kubernetes/kubernetes/pull/62154), [@dixudx](https://github.com/dixudx)) -* fix local volume absolute path issue on Windows ([#620s18](https://github.com/kubernetes/kubernetes/pull/62018), [@andyzhangx](https://github.com/andyzhangx)) -* fix the issue that default azure disk fsypte(ext4) does not work on Windows ([#62250](https://github.com/kubernetes/kubernetes/pull/62250), [@andyzhangx](https://github.com/andyzhangx)) -* Fixed bug in rbd-nbd utility when nbd is used. ([#62168](https://github.com/kubernetes/kubernetes/pull/62168), [@piontec](https://github.com/piontec)) -* fix local volume issue on Windows ([#62012](https://github.com/kubernetes/kubernetes/pull/62012), [@andyzhangx](https://github.com/andyzhangx)) -* Fix a bug that fluentd doesn't inject container logs for CRI container runtimes (containerd, cri-o etc.) into elasticsearch on GCE. ([#61818](https://github.com/kubernetes/kubernetes/pull/61818), [@Random-Liu](https://github.com/Random-Liu)) -* flexvolume: trigger plugin init only for the relevant plugin while probe ([#58519](https://github.com/kubernetes/kubernetes/pull/58519), [@linyouchong](https://github.com/linyouchong)) -* Fixed ingress issue with CDK and pre-1.9 versions of kubernetes. ([#61859](https://github.com/kubernetes/kubernetes/pull/61859), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* Fixed racy panics when using fake watches with ObjectTracker ([#61195](https://github.com/kubernetes/kubernetes/pull/61195), [@grantr](https://github.com/grantr)) -* Fixed mounting of UNIX sockets(and other special files) in subpaths ([#61480](https://github.com/kubernetes/kubernetes/pull/61480), [@gnufscied](https://github.com/gnufied)) -* Fixed [#61123](https://github.com/kubernetes/kubernetes/pull/61123) by triggering syncer.Update on all cases including when a syncer is created ([#61124](https://github.com/kubernetes/kubernetes/pull/61124), [@satyasm](https://github.com/satyasm)) -* Fixed data race in node lifecycle controller ([#60831](https://github.com/kubernetes/kubernetes/pull/60831), [@resouer](https://github.com/resouer)) -* Fixed resultRun by resetting it to 0 on pod restart ([#62853](https://github.com/kubernetes/kubernetes/pull62853), [@tony612](https://github.com/tony612)) -* Fixed the liveness probe to use `/bin/bash -c` instead of `/bin/bash c`. ([#63033](https://github.com/kubernetes/kubernetes/pull/63033), [@bmoyles0117](https://github.com/bmoyles0117)) -* Fixed scheduler informers to receive events for all the pods in the cluster. ([#63003](https://github.com/kubernetes/kubernetes/pull/63003), [@bsalamat](https://github.com/bsalamat)) -* Fixed in vSphere Cloud Provider to handle upgrades from kubernetes version less than v1.9.4 to v1.9.4 and above. ([#62919](https://github.com/kubernetes/kubernetes/pull/62919), [@abrarshivani](https://github.com/abrarshivani)) -* Fixed error where config map for Metadata Agent was not created by addon manager. ([#62909](https://github.com/kubernetes/kubernetes/pull/62909), [@kawych](https://github.com/kawych)) -* Fixed permissions to allow statefulset scaling for admins, editors, and viewers ([#62336](https://github.com/kubernetes/kubernetes/pull/62336), [@deads2k](https://github.com/deads2k)) -* GCE: Fixed for internal load balancer management resulting in backend services with outdated instance group links. ([#62885](https://github.com/kubernetes/kubernetes/pull/62885), [@nicksardo](https://github.com/nicksardo)) -* Deployment will stop adding pod-template-hash labels/selector to ReplicaSets and Pods it adopts. Resources created by Deployments are not affected (will still have pod-template-hash labels/selector). ([#61615](https://github.com/kubernetes/kubernetes/pull/61615), [@janetkuo](https://github.com/janetkuo)) -* Used inline func to ensure unlock is executed ([#61644](https://github.com/kubernetes/kubernetes/pull/61644), [@resouer](https://github.com/resouer)) -* kubernetes-master charm now properly clears the client-ca-file setting on the apiserver snap ([#61479](https://github.com/kubernetes/kubernetes/pull/61479), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* Bound cloud allocator to 10 retries with 100 ms delay between retries. ([#61375](https://github.com/kubernetes/kubernetes/pull/61375), [@satyasm](https://github.com/satyasm)) -* Respect fstype in Windows for azure disk ([#61267](https://github.com/kubernetes/kubernetes/pull/61267), [@andyzhangx](https://github.com/andyzhangx)) -* Unready pods will no longer impact the number of desired replicas when using horizontal auto-scaling with external metrics or object metrics. ([#60886](https://github.com/kubernetes/kubernetes/pull/60886), [@mattjmcnaughton](https://github.com/mattjmcnaughton)) -* Removed unsafe double RLock in cpumanager ([#62464](https://github.com/kubernetes/kubernetes/pull/62464), [@choury](https://github.com/choury)) - -## Non-user-facing changes - -* Remove UID mutation from request.context. ([#63957](https://github.com/kubernetes/kubernetes/pull/63957), [@hzxuzhonghu](https://github.com/hzxuzhonghu)) -* Use Patch instead of Put to sync pod status. ([#62306](https://github.com/kubernetes/kubernetes/pull/62306), [@freehan](https://github.com/freehan)) -* Allow env from resource with keys & updated tests ([#60636](https://github.com/kubernetes/kubernetes/pull/60636), [@PhilipGough](https://github.com/PhilipGough)) +* Using `kubectl describe` on CRDs that use underscores will be prettier. ([#65391](https://github.com/kubernetes/kubernetes/pull/65391), [@smarterclayton](https://github.com/smarterclayton)) +* Improve scheduler's performance by eliminating sorting of nodes by their score. ([#65396](https://github.com/kubernetes/kubernetes/pull/65396), [@bsalamat](https://github.com/bsalamat)) +* Add more conditions to the list of predicate failures that won't be resolved by preemption. ([#64995](https://github.com/kubernetes/kubernetes/pull/64995), [@bsalamat](https://github.com/bsalamat)) +* Allow access to ClusterIP from the host network namespace when kube-proxy is started in IPVS mode without either masqueradeAll or clusterCIDR flags ([#65388](https://github.com/kubernetes/kubernetes/pull/65388), [@lbernail](https://github.com/lbernail)) +* User can now use `sudo crictl` on GCE cluster. ([#65389](https://github.com/kubernetes/kubernetes/pull/65389), [@Random-Liu](https://github.com/Random-Liu)) +* Tolerate missing watch permission when deleting a resource ([#65370](https://github.com/kubernetes/kubernetes/pull/65370), [@deads2k](https://github.com/deads2k)) +* Prevents a `kubectl delete` hang when deleting controller managed lists ([#65367](https://github.com/kubernetes/kubernetes/pull/65367), [@deads2k](https://github.com/deads2k)) +* fixes a memory leak in the kube-controller-manager observed when large numbers of pods with tolerations are created/deleted ([#65339](https://github.com/kubernetes/kubernetes/pull/65339), [@liggitt](https://github.com/liggitt)) +* checkLimitsForResolvConf for the pod create and update events instead of checking period ([#64860](https://github.com/kubernetes/kubernetes/pull/64860), [@wgliang](https://github.com/wgliang)) +* Fix concurrent map access panic ([#65334](https://github.com/kubernetes/kubernetes/pull/65334), [@dashpole](https://github.com/dashpole)) + * Don't watch .mount cgroups to reduce number of inotify watches + * Fix NVML initialization race condition + * Fix brtfs disk metrics when using a subdirectory of a subvolume +* Change Azure ARM Rate limiting error message. ([#65292](https://github.com/kubernetes/kubernetes/pull/65292), [@wgliang](https://github.com/wgliang)) +* AWS now checks for validity of ecryption key when creating encrypted volumes. Dynamic provisioning of encrypted volume may get slower due to these checks. ([#65223](https://github.com/kubernetes/kubernetes/pull/65223), [@jsafrane](https://github.com/jsafrane)) +* Report accurate status for kubernetes-master and -worker charms. ([#65187](https://github.com/kubernetes/kubernetes/pull/65187), [@kwmonroe](https://github.com/kwmonroe)) +* Fixed issue 63608, which is that under rare circumstances the ResourceQuota admission controller could lose track of an request in progress and time out after waiting 10 seconds for a decision to be made. ([#64598](https://github.com/kubernetes/kubernetes/pull/64598), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) +* In the vSphere cloud provider the `Global.vm-uuid` configuration option is not deprecated anymore, it can be used to overwrite the VMUUID on the controller-manager ([#65152](https://github.com/kubernetes/kubernetes/pull/65152), [@alvaroaleman](https://github.com/alvaroaleman)) +* fluentd-gcp grace termination period increased to 60s. ([#65084](https://github.com/kubernetes/kubernetes/pull/65084), [@x13n](https://github.com/x13n)) +* Pass cluster_location argument to Heapster ([#65176](https://github.com/kubernetes/kubernetes/pull/65176), [@kawych](https://github.com/kawych)) +* Fix a scalability issue where high rates of event writes degraded etcd performance. ([#64539](https://github.com/kubernetes/kubernetes/pull/64539), [@ccding](https://github.com/ccding)) +* Corrected a mistake in the documentation for wait.PollImmediate(...) ([#65026](https://github.com/kubernetes/kubernetes/pull/65026), [@spew](https://github.com/spew)) +* Split 'scheduling_latency_seconds' metric into finer steps (predicate, priority, premption) ([#65306](https://github.com/kubernetes/kubernetes/pull/65306), [@shyamjvs](https://github.com/shyamjvs)) +* Etcd health checks by the apiserver now ensure the apiserver can connect to and exercise the etcd API ([#65027](https://github.com/kubernetes/kubernetes/pull/65027), [@liggitt](https://github.com/liggitt)) +* Add e2e regression tests for the kubelet being secure ([#64140](https://github.com/kubernetes/kubernetes/pull/64140), [@dixudx](https://github.com/dixudx)) * set EnableHTTPSTrafficOnly in azure storage account creation ([#64957](https://github.com/kubernetes/kubernetes/pull/64957), [@andyzhangx](https://github.com/andyzhangx)) -* New conformance test added for Watch. ([#61424](https://github.com/kubernetes/kubernetes/pull/61424), [@jennybuckley](https://github.com/jennybuckley)) -* Use DeleteOptions.PropagationPolicy instead of OrphanDependents in kubectl ([#59851](https://thub.com/kubernetes/kubernetes/pull/59851), [@nilebox](https://github.com/nilebox)) -* Add probe based mechanism for kubelet plugin discovery ([#63328](https://github.com/kubernetes/kubernetes/pull/63328), [@vikaschoudhary16](https://github.com/vikaschoudhary16)) -* keep pod state consistent when scheduler cache UpdatePod ([#64692](https://github.com/kubernetes/kubernetes/pull/64692), [@adohe](https://github.com/adohe)) -* kubectl delete does not use reapers for removing objects anymore, but relies on server-side GC entirely ([#63979](https://github.com/kubernetes/kubernetes/pull/63979), [@soltysh](https://github.com/soltysh)) +* Fixes an issue where Portworx PVCs remain in pending state when created using a StorageClass with empty parameters ([#64895](https://github.com/kubernetes/kubernetes/pull/64895), [@harsh-px](https://github.com/harsh-px)) +* This PR will leverage subtests on the existing table tests for the scheduler units. ([#63662](https://github.com/kubernetes/kubernetes/pull/63662), [@xchapter7x](https://github.com/xchapter7x)) + * Some refactoring of error/status messages and functions to align with new approach. +* This PR will leverage subtests on the existing table tests for the scheduler units. ([#63661](https://github.com/kubernetes/kubernetes/pull/63661), [@xchapter7x](https://github.com/xchapter7x)) + * Some refactoring of error/status messages and functions to align with new approach. +* This PR will leverage subtests on the existing table tests for the scheduler units. ([#63660](https://github.com/kubernetes/kubernetes/pull/63660), [@xchapter7x](https://github.com/xchapter7x)) + * Some refactoring of error/status messages and functions to align with new approach. * Updated default image for nginx ingress in CDK to match current Kubernetes docs. ([#64285](https://github.com/kubernetes/kubernetes/pull/64285), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* Increase scheduler cache generation number monotonically in order to avoid collision and use of stale information in scheduler. ([#63264](https://github.com/kubernetes/kubernetes/pull/63264), [@bsalamat](https://github.com/bsalamat)) -* Adding CSI driver registration code. ([#64560](https://github.com/kubernetes/kubernetes/pull/64560), [@sbezverk](https://github.com/sbezverk)) -* Do not check vmSetName when getting Azure node's IP ([#63541](https://github.com/kubernetes/kubernetes/pull/63541), [@feiskyer](https://github.com/feiskyer)) -* [fluentd-gcp addon] Update event-exporter image to have the latest base image. ([#61727](https://github.com/kubernetes/kubernetes/pull/61727), [@crassirostris](https://github.com/crassirostris)) -* Make volume usage metrics available for Cinder ([#62668](https://github.com/kubernetes/kubernetes/pull/62668), [@zetaab](https://github.com/zetaab)) -* cinder volume plugin : When the cinder volume status is `error`, controller will not do `attach ` and `detach ` operation ([#61082](https://github.com/kubernetes/kubernetes/pull/61082), [@wenlxie](https://github.com/wenlxie)) -* Allow user to scale l7 default backend deployment ([#62685](https://github.com/kubernetes/kubernetes/pull/62685), [@freehan](https://github.com/freehan)) -* Add support to ingest log entries to Stackdriver against new "k8s_container" and "k8s_node" resources. ([#62076](https://github.com/kubernetes/kubernetes/pull/62076), [@qingling128](https://github.com/qingling128)) -* Disabled CheckNodeMemoryPressure and CheckNodeDiskPressure predicates if TaintNodesByCondition enabled ([#60398](https://github.com/kubernetes/kubernetes/pull/60398), [@k82cn](https://github.com/k82cn)) -* Support custom test configuration for IPAM performance integration tests ([#61959](https://github.com/kubernetes/kubernetes/pull/61959), [@satyasm](https://github.com/satyasm)) -* OIDC authentication now allows tokens without an "email_verified" claim when using the "email" claim. If an "email_verified" claim is present when using the "email" claim, it must be `true`. ([#61508](https://github.com/kubernetes/kubernetes/pull/61508), [@rithujohn191](https://github.com/rithujohn191)) -* Add e2e test for CRD Watch ([#61025](https://github.com/kubernetes/kubernetes/pull/61025), [@ayushpateria](https://github.com/ayushpateria)) -* Return error if get NodeStageSecret and NodePublishSecret failed in CSI volume plugin ([#61096](https://github.com/kubernetes/kubernetes/pull/61096), [@mlmhl](https://github.com/mlmhl)) -* kubernetes-master charm now supports metrics server for horizontal pod autoscaler. ([#60174](https://github.com/kubernetes/kubernetes/pull/60174), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* In a GCE cluster, the default `HIRPIN_MODE` is now "hairpin-veth". ([#60166](https://github.com/kubernetes/kubernetes/pull/60166), [@rramkumar1](https://github.com/rramkumar1)) -* Balanced resource allocation priority in scheduler to include volume count on node ([#60525](https://github.com/kubernetes/kubernetes/pull/60525), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -* new dhcp-domain parameter to be used for figuring out the hostname of a node ([#61890](https://github.com/kubernetes/kubernetes/pull/61890), [@dims](https://github.com/dims)) -* Disable ipamperf integration tests as part of every PR verification. ([#61863](https://github.com/kubernetes/kubernetes/pull/61863), [@satyasm](https://github.com/satyasm)) -* Enable server-side print in kubectl by default, with the ability to turn it off with --server-print=false ([#61477](https://github.com/kubernetes/kubernetes/pull/61477), [@soltysh](https://github.com/soltysh)) -* Updated admission controller settings for Juju deployed Kubernetes clusters ([#61427](https://github.com/kubernetes/kubernetes/pull/61427), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* Performance test framework and basic tests for the IPAM controller, to simulate behavior of the four supported modes under lightly loaded and loaded conditions, where load is defined as the number of operations to perform as against the configured kubernetes. ([#61143](https://github.com/kubernetes/kubernetes/pull/61143), [@satyasm](https://github.com/satyasm)) -* Removed always pull policy from the template for ingress on CDK. ([#61598](https://github.com/kubernetes/kubernetes/pull/61598), [@hyperbolic2346](https://github.com/hyperbolic2346)) -* `make test-cmd` now works on macOS. ([#61393](https://github.com/kubernetes/kubernetes/pull/61393), [@totherme](https://github.com/totherme)) -* Conformance: ReplicaSet must be supported in the `apps/v1` version. ([#61367](https://github.com/kubernetes/kubernetes/pull/61367), [@enisoc](https://github.com/enisoc)) -* Remove 'system' prefix from Metadata Agent rbac configuration ([#61394](https://github.com/kubernetes/kubernetes/pull/61394), [@kawych](https://github.com/kawych)) -* Support new NODE_OS_DISTRIBUTION 'custom' on GCE on a new add event. ([#61235](https://github.com/kubernetes/kubernetes/pull/61235), [@yguo0905](https://github.com/yguo0905)) -* include file name in the error when visiting files ([#60919](https://github.com/kubernetes/kubernetes/pull/60919), [@dixudx](https://github.com/dixudx)) -* Split PodPriority and PodPreemption feature gate ([#62243](https://github.com/kubernetes/kubernetes/pull/62243), [@resouer](https://github.com/resouer)) -* Code generated for CRDs now passes `go vet`. ([#62412](https://github.com/kubernetes/kubernetes/pull/62412), [@bhcleek](https://github.com/bhcleek)) -* "beginPort+offset" format support for port range which affects kube-proxy only ([#58731](https://github.com/kubernetes/kubernetes/pull/58731), [@yue9944882](https://github.com/yue9944882)) -* Added e2e test for watch ([#60331](https://github.com/kubernetes/kubernetes/pull/60331), [@jennybuckley](https://github.com/jennybuckley)) -* add warnings on using pod-infra-container-image for remote container runtime ([#62982](https://github.com/kubernetes/kubernetes/pull/62982), [@dixudx](https://github.com/dixudx)) -* Mount additional paths required for a working CA root, for setups where /etc/ssl/certs doesn't contains certificates but just symlink. ([#59122](https://github.com/kubernetes/kubernetes/pull/59122), [@klausenbusk](https://github.com/klausenbusk)) -* Introduce truncating audit bacnd that can be enabled for existing backend to limit the size of individual audit events and batches of events. ([#61711](https://github.com/kubernetes/kubernetes/pull/61711), [@crassirostris](https://github.com/crassirostris)) -* stop kubelet to cloud provider integration potentially wedging kubelet sync loop ([#62543](https://github.com/kubernetes/kubernetes/pull/62543), [@ingvagabund](https://github.com/ingvagabund)) -* Set pod status to "Running" if there is at least one container still reporting as "Running" status and others are "Completed". ([#62642](https://github.com/kubernetes/kubernetes/pull/62642), [@ceshihao](https://github.com/ceshihao)) -* Fix memory cgroup notifications, and reduce associated log spam. ([#63220](https://github.com/kubernetes/kubernetes/pull/63220), [@dashpole](https://github.com/dashpole)) -* Remove never used NewCronJobControllerFromClient method (#59471, dmathieu) +* Added block volume support to Cinder volume plugin. ([#64879](https://github.com/kubernetes/kubernetes/pull/64879), [@bertinatto](https://github.com/bertinatto)) +* fixed incorrect OpenAPI schema for CustomResourceDefinition objects ([#65256](https://github.com/kubernetes/kubernetes/pull/65256), [@liggitt](https://github.com/liggitt)) +* ignore not found file error when watching manifests ([#64880](https://github.com/kubernetes/kubernetes/pull/64880), [@dixudx](https://github.com/dixudx)) +* add port-forward examples for sevice ([#64773](https://github.com/kubernetes/kubernetes/pull/64773), [@MasayaAoyama](https://github.com/MasayaAoyama)) +* Fix issues for block device not mapped to container. ([#64555](https://github.com/kubernetes/kubernetes/pull/64555), [@wenlxie](https://github.com/wenlxie)) +* Update crictl on GCE to v1.11.0. ([#65254](https://github.com/kubernetes/kubernetes/pull/65254), [@Random-Liu](https://github.com/Random-Liu)) +* Fixes missing nodes lines when kubectl top nodes ([#64389](https://github.com/kubernetes/kubernetes/pull/64389), [@yue9944882](https://github.com/yue9944882)) +* keep pod state consistent when scheduler cache UpdatePod ([#64692](https://github.com/kubernetes/kubernetes/pull/64692), [@adohe](https://github.com/adohe)) +* add external resource group support for azure disk ([#64427](https://github.com/kubernetes/kubernetes/pull/64427), [@andyzhangx](https://github.com/andyzhangx)) +* Increase the gRPC max message size to 16MB in the remote container runtime. ([#64672](https://github.com/kubernetes/kubernetes/pull/64672), [@mcluseau](https://github.com/mcluseau)) +* The new default value for the --allow-privileged parameter of the Kubernetes-worker charm has been set to true based on changes which went into the Kubernetes 1.10 release. Before this change the default value was set to false. If you're installing Canonical Kubernetes you should expect this value to now be true by default and you should now look to use PSP (pod security policies). ([#64104](https://github.com/kubernetes/kubernetes/pull/64104), [@CalvinHartwell](https://github.com/CalvinHartwell)) +* The --remove-extra-subjects and --remove-extra-permissions flags have been enabled for kubectl auth reconcile ([#64541](https://github.com/kubernetes/kubernetes/pull/64541), [@mrogers950](https://github.com/mrogers950)) +* Fix kubectl drain --timeout option when eviction is used. ([#64378](https://github.com/kubernetes/kubernetes/pull/64378), [@wrdls](https://github.com/wrdls)) +* This PR will leverage subtests on the existing table tests for the scheduler units. ([#63659](https://github.com/kubernetes/kubernetes/pull/63659), [@xchapter7x](https://github.com/xchapter7x)) + * Some refactoring of error/status messages and functions to align with new approach. -{{% /capture %}} diff --git a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md index 3292d07c0d..892f9f55e6 100644 --- a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md +++ b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md @@ -447,8 +447,9 @@ The column's `format` controls the style used when `kubectl` prints the value. ### Subresources +{{< feature-state state="beta" for_kubernetes_version="1.11" >}} + Custom resources support `/status` and `/scale` subresources. -This feature is __beta__ in v1.11 and enabled by default. You can disable this feature using the `CustomResourceSubresources` feature gate on the [kube-apiserver](/docs/admin/kube-apiserver): @@ -469,7 +470,28 @@ When the status subresource is enabled, the `/status` subresource for the custom - `PUT` requests to the `/status` subresource only validate the status stanza of the custom resource. - `PUT`/`POST`/`PATCH` requests to the custom resource ignore changes to the status stanza. - Any changes to the spec stanza increments the value at `.metadata.generation`. -- `properties`, `required` and `description` are the only constructs allowed in the root of the CRD OpenAPI validation schema. +- Only the following constructs are allowed at the root of the CRD OpenAPI validation schema: + + - Description + - Example + - ExclusiveMaximum + - ExclusiveMinimum + - ExternalDocs + - Format + - Items + - Maximum + - MaxItems + - MaxLength + - Minimum + - MinItems + - MinLength + - MultipleOf + - Pattern + - Properties + - Required + - Title + - Type + - UniqueItems #### Scale subresource diff --git a/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md b/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md index b6eac169f1..7067097b0b 100644 --- a/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md +++ b/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md @@ -28,28 +28,19 @@ DNS is a built-in Kubernetes service launched automatically using the addon manager [cluster add-on](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/README.md). -The running DNS Pod holds 3 containers: +As of Kubernetes v1.12, CoreDNS is the recommended DNS Server, replacing kube-dns. However, kube-dns may still be installed by +default with certain Kubernetes installer tools. Refer to the documentation provided by your installer to know which DNS server is installed by default. -- "`kubedns`": watches the Kubernetes master for changes - in Services and Endpoints, and maintains in-memory lookup structures to serve - DNS requests. -- "`dnsmasq`": adds DNS caching to improve performance. -- "`sidecar`": provides a single health check endpoint - to perform healthchecks for `dnsmasq` and `kubedns`. -The DNS Pod is exposed as a Kubernetes Service with a static IP. -The kubelet passes DNS to each container with the `--cluster-dns=` -flag. +The CoreDNS Deployment is exposed as a Kubernetes Service with a static IP. +Both the CoreDNS and kube-dns Service are named `kube-dns` in the `metadata.name` field. This is done so that there is greater interoperability with workloads that relied on the legacy `kube-dns` Service name to resolve addresses internal to the cluster. It abstracts away the implementation detail of which DNS provider is running behind that common endpoint. +The kubelet passes DNS to each container with the `--cluster-dns=` flag. DNS names also need domains. You configure the local domain in the kubelet with the flag `--cluster-domain=`. -The Kubernetes cluster DNS server is based on the -[SkyDNS](https://github.com/skynetservices/skydns) library. It supports forward -lookups (A records), service lookups (SRV records), and reverse IP address -lookups (PTR records). - -## Inheriting DNS from the node +The DNS server supports forward lookups (A records), port lookups (SRV records), reverse IP address lookups (PTR records), +and more. For more information see [DNS for Services and Pods] (/docs/concepts/services-networking/dns-pod-service/). If a Pod's `dnsPolicy` is set to "`default`", it inherits the name resolution configuration from the node that the Pod runs on. The Pod's DNS resolution @@ -61,7 +52,130 @@ use the kubelet's `--resolv-conf` flag. Set this flag to "" to prevent Pods fro inheriting DNS. Set it to a valid file path to specify a file other than `/etc/resolv.conf` for DNS inheritance. -## Configure stub-domain and upstream DNS servers +## CoreDNS + +CoreDNS is a general-purpose authoritative DNS server that can serve as cluster DNS, complying with the [dns specifications] +(https://github.com/kubernetes/dns/blob/master/docs/specification.md). + +### CoreDNS ConfigMap options + +CoreDNS is a DNS server that is modular and pluggable, and each plugin adds new functionality to CoreDNS. +This can be configured by maintaining a [Corefile](https://coredns.io/2017/07/23/corefile-explained/), which is the CoreDNS +configuration file. A cluster administrator can modify the ConfigMap for the CoreDNS Corefile to change how service discovery works. + +In Kubernetes, CoreDNS is installed with the following default Corefile configuration. + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: coredns + namespace: kube-system +Corefile: | + .:53 { + errors + health + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + upstream + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + proxy . /etc/resolv.conf + cache 30 + loop + reload + loadbalance + } +``` +The Corefile configuration includes the following [plugins](https://coredns.io/plugins/) of CoreDNS: + +* [errors](https://coredns.io/plugins/errors/): Errors are logged to stdout. +* [health](https://coredns.io/plugins/health/): Health of CoreDNS is reported to http://localhost:8080/health. +* [kubernetes](https://coredns.io/plugins/kubernetes/): CoreDNS will reply to DNS queries based on IP of the services and pods of Kubernetes. You can find more details [here](https://coredns.io/plugins/kubernetes/). + +> The `pods insecure` option is provided for backward compatibility with kube-dns. You can use the `pod verified` option, which returns an A record only if there exists a pod in same namespace with matching IP. The `pods disabled` option can be used if you don't use pod records. + +> `Upstream` is used for resolving services that point to external hosts (External Services). + +* [prometheus](https://coredns.io/plugins/prometheus/): Metrics of CoreDNS are available at http://localhost:9153/metrics in [Prometheus](https://prometheus.io/) format. +* [proxy](https://coredns.io/plugins/proxy/): Any queries that are not within the cluster domain of Kubernetes will be forwarded to predefined resolvers (/etc/resolv.conf). +* [cache](https://coredns.io/plugins/cache/): This enables a frontend cache. +* [loop](https://coredns.io/plugins/loop/): Detects simple forwarding loops and halts the CoreDNS process if a loop is found. +* [reload](https://coredns.io/plugins/reload): Allows automatic reload of a changed Corefile. +* [loadbalance](https://coredns.io/plugins/loadbalance): This is a round-robin DNS loadbalancer by randomizing the order of A, AAAA, and MX records in the answer. + +We can modify the default behavior by modifying this configmap. + +### Configuration of Stub-domain and upstream nameserver using CoreDNS + +CoreDNS has the ability to configure stubdomains and upstream nameservers using the [proxy plugin](https://coredns.io/plugins/proxy/). + +#### Example +If a cluster operator has a [Consul](https://www.consul.io/) domain server located at 10.150.0.1, and all Consul names have the suffix .consul.local. To configure it in CoreDNS, the cluster administrator creates the following stanza in the CoreDNS ConfigMap. + +``` +consul.local:53 { + errors + cache 30 + proxy . 10.150.0.1 + } +``` + +To explicitly force all non-cluster DNS lookups to go through a specific nameserver at 172.16.0.1, point the `proxy` and `upstream` to the nameserver instead of `/etc/resolv.conf` + +``` +proxy . 172.16.0.1 +``` +``` +upstream 172.16.0.1 +``` + +So, the final ConfigMap along with the default `Corefile` configuration will look like: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: coredns + namespace: kube-system +Corefile: | + .:53 { + errors + health + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + upstream 172.16.0.1 + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + proxy . 172.16.0.1 + cache 30 + loop + reload + loadbalance + } + consul.local:53 { + errors + cache 30 + proxy . 10.150.0.1 + } +``` +In Kubernetes version 1.10 and later, kubeadm supports automatic translation of the CoreDNS ConfigMap from the kube-dns ConfigMap. + +## Kube-dns + +Kube-dns is now available as a optional DNS server since CoreDNS is now the default. +The running DNS Pod holds 3 containers: + +- "`kubedns`": watches the Kubernetes master for changes + in Services and Endpoints, and maintains in-memory lookup structures to serve + DNS requests. +- "`dnsmasq`": adds DNS caching to improve performance. +- "`sidecar`": provides a single health check endpoint + to perform healthchecks for `dnsmasq` and `kubedns`. + +### Configure stub-domain and upstream DNS servers Cluster administrators can specify custom stub domains and upstream nameservers by providing a ConfigMap for kube-dns (`kube-system:kube-dns`). @@ -102,7 +216,7 @@ details about the configuration option format. {{% capture discussion %}} -### Effects on Pods +#### Effects on Pods Custom upstream nameservers and stub domains do not affect Pods with a `dnsPolicy` set to "`Default`" or "`None`". @@ -136,7 +250,7 @@ DNS queries are routed according to the following flow: ![DNS lookup flow](/docs/tasks/administer-cluster/dns-custom-nameservers/dns.png) -## ConfigMap options +### ConfigMap options Options for the kube-dns `kube-system:kube-dns` ConfigMap: @@ -145,9 +259,9 @@ Options for the kube-dns `kube-system:kube-dns` ConfigMap: | `stubDomains` (optional) | A JSON map using a DNS suffix key such as “acme.local”, and a value consisting of a JSON array of DNS IPs. | The target nameserver can itself be a Kubernetes Service. For instance, you can run your own copy of dnsmasq to export custom DNS names into the ClusterDNS namespace. | | `upstreamNameservers` (optional) | A JSON array of DNS IPs. | If specified, the values replace the nameservers taken by default from the node’s `/etc/resolv.conf`. Limits: a maximum of three upstream nameservers can be specified. | -### Examples +#### Examples -#### Example: Stub domain +##### Example: Stub domain In this example, the user has a Consul DNS service discovery system they want to integrate with kube-dns. The consul domain server is located at 10.150.0.1, and @@ -169,7 +283,7 @@ Note that the cluster administrator does not want to override the node’s upstream nameservers, so they did not specify the optional `upstreamNameservers` field. -#### Example: Upstream nameserver +##### Example: Upstream nameserver In this example the cluster administrator wants to explicitly force all non-cluster DNS lookups to go through their own nameserver at 172.16.0.1. @@ -189,17 +303,9 @@ data: {{% /capture %}} -## Configuring CoreDNS {#config-coredns} +## CoreDNS configuration equivalent to kube-dns -You can configure [CoreDNS](https://coredns.io/) as a service discovery. - -CoreDNS is available as an option in Kubernetes starting with version 1.9. -It is currently a [GA feature](https://github.com/kubernetes/community/blob/master/keps/sig-network/0010-20180314-coredns-GA-proposal.md) and is on course to be [the default](https://github.com/kubernetes/community/blob/master/keps/sig-network/0012-20180518-coredns-default-proposal.md), replacing kube-dns. - - -## CoreDNS ConfigMap options - -CoreDNS chains plugins and can be configured by maintaining a Corefile with the ConfigMap. CoreDNS supports all the functionalities and more that is provided by kube-dns. +CoreDNS supports all the functionalities and more that is provided by kube-dns. A ConfigMap created for kube-dns to support `StubDomains`and `upstreamNameservers` translates to the `proxy` plugin in CoreDNS. Similarly, the `Federation` plugin translates to the `federation` plugin in CoreDNS. @@ -276,8 +382,8 @@ In Kubernetes version 1.10 and later, kubeadm supports automatic translation of ## Migration to CoreDNS -A number of tools support the installation of CoreDNS instead of kube-dns. To migrate from kube-dns to CoreDNS, [a detailed blog](https://coredns.io/2018/05/21/migration-from-kube-dns-to-coredns/) is available to help users adapt CoreDNS in place of kube-dns. +A cluster administrator can also migrate using [the deploy script](https://github.com/coredns/deployment/blob/master/kubernetes/deploy.sh), which will also help you translate the kube-dns configmap to the equivalent CoreDNS one. ## What's next - [Debugging DNS Resolution](/docs/tasks/administer-cluster/dns-debugging-resolution/). diff --git a/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md b/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md index 23061cbd74..1a9b7bf7e2 100644 --- a/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md +++ b/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md @@ -13,7 +13,7 @@ This page provides hints on diagnosing DNS problems. {{% capture prerequisites %}} * {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Kubernetes version 1.6 and above. -* The cluster must be configured to use the `kube-dns` addon. +* The cluster must be configured to use the `coredns` (or `kube-dns`) addons. {{% /capture %}} {{% capture steps %}} @@ -68,7 +68,7 @@ nameserver 10.0.0.10 options ndots:5 ``` -Errors such as the following indicate a problem with the kube-dns add-on or +Errors such as the following indicate a problem with the coredns/kube-dns add-on or associated Services: ``` @@ -93,6 +93,17 @@ nslookup: can't resolve 'kubernetes.default' Use the `kubectl get pods` command to verify that the DNS pod is running. +For CoreDNS: +```shell +kubectl get pods --namespace=kube-system -l k8s-app=kube-dns +NAME READY STATUS RESTARTS AGE +... +coredns-7b96bf9f76-5hsxb 1/1 Running 0 1h +coredns-7b96bf9f76-mvmmt 1/1 Running 0 1h +... +``` + +Or for kube-dns: ```shell kubectl get pods --namespace=kube-system -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE @@ -107,8 +118,26 @@ have to deploy it manually. ### Check for Errors in the DNS pod -Use `kubectl logs` command to see logs for the DNS daemons. +Use `kubectl logs` command to see logs for the DNS containers. +For CoreDNS: +```shell +for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name); do kubectl logs --namespace=kube-system $p; done +``` + +Here is an example of a healthy CoreDNS log: + +``` +.:53 +2018/08/15 14:37:17 [INFO] CoreDNS-1.2.2 +2018/08/15 14:37:17 [INFO] linux/amd64, go1.10.3, 2e322f6 +CoreDNS-1.2.2 +linux/amd64, go1.10.3, 2e322f6 +2018/08/15 14:37:17 [INFO] plugin/reload: Running configuration MD5 = 24e6c59e83ce706f07bcc82c31b1ea1c +``` + + +For kube-dns, there are 3 sets of logs: ```shell kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name | head -1) -c kubedns @@ -117,8 +146,8 @@ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name | head -1) -c sidecar ``` -See if there is any suspicious log. Letter '`W`', '`E`', '`F`' at the beginning -represent Warning, Error and Failure. Please search for entries that have these +See if there are any suspicious error messages in the logs. In kube-dns, a '`W`', '`E`' or '`F`' at the beginning +of a line represents a Warning, Error or Failure. Please search for entries that have these as the logging level and use [kubernetes issues](https://github.com/kubernetes/kubernetes/issues) to report unexpected errors. @@ -135,6 +164,8 @@ kube-dns ClusterIP 10.0.0.10 53/UDP,53/TCP 1h ... ``` + +Note that the service name will be "kube-dns" for both CoreDNS and kube-dns deployments. If you have created the service or in the case it should be created by default but it does not appear, see [debugging services](/docs/tasks/debug-application-cluster/debug-service/) for @@ -158,20 +189,83 @@ For additional Kubernetes DNS examples, see the [cluster-dns examples](https://github.com/kubernetes/examples/tree/master/staging/cluster-dns) in the Kubernetes GitHub repository. + +### Are DNS queries being received/processed? + +You can verify if queries are being received by CoreDNS by adding the `log` plugin to the CoreDNS configuration (aka Corefile). +The CoreDNS Corefile is held in a ConfigMap named `coredns`. To edit it, use the command ... + +``` +kubectl -n kube-system edit configmap coredns +``` + +Then add `log` in the Corefile section per the example below. + +``` +apiVersion: v1 +kind: ConfigMap +metadata: + name: coredns + namespace: kube-system +data: + Corefile: | + .:53 { + log + errors + health + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + upstream + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + proxy . /etc/resolv.conf + cache 30 + loop + reload + loadbalance + } + +``` + +After saving the changes, it may take up to minute or two for Kubernetes to propagate these changes to the CoreDNS pods. + +Next, make some queries and view the logs per the sections above in this document. If CoreDNS pods are receiving the queries, you should see them in the logs. + +Here is an example of a query in the log. + +``` +.:53 +2018/08/15 14:37:15 [INFO] CoreDNS-1.2.0 +2018/08/15 14:37:15 [INFO] linux/amd64, go1.10.3, 2e322f6 +CoreDNS-1.2.0 +linux/amd64, go1.10.3, 2e322f6 +2018/09/07 15:29:04 [INFO] plugin/reload: Running configuration MD5 = 162475cdf272d8aa601e6fe67a6ad42f +2018/09/07 15:29:04 [INFO] Reloading complete +172.17.0.18:41675 - [07/Sep/2018:15:29:11 +0000] 59925 "A IN kubernetes.default.svc.cluster.local. udp 54 false 512" NOERROR qr,aa,rd,ra 106 0.000066649s + +``` + ## Known issues -Kubernetes installs do not configure the nodes' resolv.conf files to use the -cluster DNS by default, because that process is inherently distro-specific. +Some Linux distributions (e.g. Ubuntu), use a local DNS resolver by default (systemd-resolved). +Systemd-resolved moves and replaces `/etc/resolv.conf` with a stub file that can cause a fatal forwarding +loop when resolving names in upstream servers. This can be fixed manually by using kubelet's `--resolv-conf` flag +to point to the correct `resolv.conf` (With `systemd-resolved`, this is `/run/systemd/resolve/resolv.conf`). +kubeadm 1.11 automatically detects `systemd-resolved`, and adjusts the kubelet flags accordingly. + +Kubernetes installs do not configure the nodes' `resolv.conf` files to use the +cluster DNS by default, because that process is inherently distribution-specific. This should probably be implemented eventually. Linux's libc is impossibly stuck ([see this bug from 2005](https://bugzilla.redhat.com/show_bug.cgi?id=168253)) with limits of just -3 DNS `nameserver` records and 6 DNS `search` records. Kubernetes needs to -consume 1 `nameserver` record and 3 `search` records. This means that if a +3 DNS `nameserver` records and 6 DNS `search` records. Kubernetes needs to +consume 1 `nameserver` record and 3 `search` records. This means that if a local installation already uses 3 `nameserver`s or uses more than 3 `search`es, -some of those settings will be lost. As a partial workaround, the node can run +some of those settings will be lost. As a partial workaround, the node can run `dnsmasq` which will provide more `nameserver` entries, but not more `search` -entries. You can also use kubelet's `--resolv-conf` flag. +entries. You can also use kubelet's `--resolv-conf` flag. If you are using Alpine version 3.3 or earlier as your base image, DNS may not work properly owing to a known issue with Alpine. diff --git a/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md b/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md index afdb829455..c28f4c1001 100644 --- a/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md +++ b/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md @@ -36,10 +36,10 @@ The output is similar to this: NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ... - kube-dns-autoscaler 1 1 1 1 ... + dns-autoscaler 1 1 1 1 ... ... -If you see "kube-dns-autoscaler" in the output, DNS horizontal autoscaling is +If you see "dns-autoscaler" in the output, DNS horizontal autoscaling is already enabled, and you can skip to [Tuning autoscaling parameters](#tuning-autoscaling-parameters). @@ -53,10 +53,13 @@ The output is similar to this: NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ... - kube-dns 1 1 1 1 ... + coredns 2 2 2 2 ... ... -In Kubernetes versions earlier than 1.5 DNS is implemented using a + +In Kubernetes versions earlier than 1.12, the DNS Deployment was called "kube-dns". + +In Kubernetes versions earlier than 1.5 DNS was implemented using a ReplicationController instead of a Deployment. So if you don't see kube-dns, or a similar name, in the preceding output, list the ReplicationControllers in your cluster in the kube-system namespace: @@ -77,7 +80,7 @@ If you have a DNS Deployment, your scale target is: Deployment/ where is the name of your DNS Deployment. For example, if -your DNS Deployment name is kube-dns, your scale target is Deployment/kube-dns. +your DNS Deployment name is coredns, your scale target is Deployment/coredns. If you have a DNS ReplicationController, your scale target is: @@ -111,7 +114,7 @@ DNS horizontal autoscaling is now enabled. ## Tuning autoscaling parameters -Verify that the kube-dns-autoscaler ConfigMap exists: +Verify that the dns-autoscaler ConfigMap exists: kubectl get configmap --namespace=kube-system @@ -119,12 +122,12 @@ The output is similar to this: NAME DATA AGE ... - kube-dns-autoscaler 1 ... + dns-autoscaler 1 ... ... Modify the data in the ConfigMap: - kubectl edit configmap kube-dns-autoscaler --namespace=kube-system + kubectl edit configmap dns-autoscaler --namespace=kube-system Look for this line: @@ -151,15 +154,15 @@ There are other supported scaling patterns. For details, see There are a few options for turning DNS horizontal autoscaling. Which option to use depends on different conditions. -### Option 1: Scale down the kube-dns-autoscaler deployment to 0 replicas +### Option 1: Scale down the dns-autoscaler deployment to 0 replicas This option works for all situations. Enter this command: - kubectl scale deployment --replicas=0 kube-dns-autoscaler --namespace=kube-system + kubectl scale deployment --replicas=0 dns-autoscaler --namespace=kube-system The output is: - deployment.extensions/kube-dns-autoscaler scaled + deployment.extensions/dns-autoscaler scaled Verify that the replica count is zero: @@ -169,33 +172,33 @@ The output displays 0 in the DESIRED and CURRENT columns: NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ... - kube-dns-autoscaler 0 0 0 0 ... + dns-autoscaler 0 0 0 0 ... ... -### Option 2: Delete the kube-dns-autoscaler deployment +### Option 2: Delete the dns-autoscaler deployment -This option works if kube-dns-autoscaler is under your own control, which means +This option works if dns-autoscaler is under your own control, which means no one will re-create it: - kubectl delete deployment kube-dns-autoscaler --namespace=kube-system + kubectl delete deployment dns-autoscaler --namespace=kube-system The output is: - deployment.extensions "kube-dns-autoscaler" deleted + deployment.extensions "dns-autoscaler" deleted -### Option 3: Delete the kube-dns-autoscaler manifest file from the master node +### Option 3: Delete the dns-autoscaler manifest file from the master node -This option works if kube-dns-autoscaler is under control of the +This option works if dns-autoscaler is under control of the [Addon Manager](https://git.k8s.io/kubernetes/cluster/addons/README.md)'s control, and you have write access to the master node. Sign in to the master node and delete the corresponding manifest file. -The common path for this kube-dns-autoscaler is: +The common path for this dns-autoscaler is: /etc/kubernetes/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml After the manifest file is deleted, the Addon Manager will delete the -kube-dns-autoscaler Deployment. +dns-autoscaler Deployment. {{% /capture %}} diff --git a/content/en/docs/tasks/administer-cluster/kms-provider.md b/content/en/docs/tasks/administer-cluster/kms-provider.md index 526ecb63ce..5f14375b9e 100644 --- a/content/en/docs/tasks/administer-cluster/kms-provider.md +++ b/content/en/docs/tasks/administer-cluster/kms-provider.md @@ -16,7 +16,7 @@ This page shows how to configure a Key Management Service (KMS) provider and plu * etcd v3 or later is required -{{< feature-state for_k8s_version="v1.10" state="alpha" >}} +{{< feature-state for_k8s_version="v1.12" state="beta" >}} {{% /capture %}} diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12.md new file mode 100644 index 0000000000..6be3b687bf --- /dev/null +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12.md @@ -0,0 +1,295 @@ +--- +reviewers: +- sig-cluster-lifecycle +title: Upgrading kubeadm clusters from v1.11 to v1.12 +content_template: templates/task +--- + +{{% capture overview %}} + +This page explains how to upgrade a Kubernetes cluster created with `kubeadm` from version 1.11.x to version 1.12.x, and from version 1.12.x to 1.12.y, where `y > x`. + +{{% /capture %}} + +{{% capture prerequisites %}} + +- You need to have a `kubeadm` Kubernetes cluster running version 1.11.0 or later. + [Swap must be disabled][swap]. + The cluster should use a static control plane and etcd pods. +- Make sure you read the [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md) carefully. +- Make sure to back up any important components, such as app-level state stored in a database. + `kubeadm upgrade` does not touch your workloads, only components internal to Kubernetes, but backups are always a best practice. + + +[swap]: https://serverfault.com/questions/684771/best-way-to-disable-swap-in-linux +### Additional information + +- All containers are restarted after upgrade, because the container spec hash value is changed. +- You can upgrade only from one minor version to the next minor version. + That is, you cannot skip versions when you upgrade. + For example, you can upgrade only from 1.10 to 1.11, not from 1.9 to 1.11. + +{{% /capture %}} + +{{% capture steps %}} + +## Upgrade the control plane + +1. On your master node, upgrade kubeadm: + + {{< tabs name="k8s_install" >}} + {{% tab name="Ubuntu, Debian or HypriotOS" %}} + apt-get update + apt-get upgrade -y kubelet kubeadm + {{% /tab %}} + {{% tab name="CentOS, RHEL or Fedora" %}} + yum upgrade -y kubeadm --disableexcludes=kubernetes + {{% /tab %}} + {{< /tabs >}} + +1. Verify that the download works and has the expected version: + + ```shell + kubeadm version + ``` + +1. On the master node, run: + + ```shell + kubeadm upgrade plan + ``` + + You should see output similar to this: + + ```shell + [preflight] Running pre-flight checks. + [upgrade] Making sure the cluster is healthy: + [upgrade/config] Making sure the configuration is correct: + [upgrade/config] Reading configuration from the cluster... + [upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' + [upgrade] Fetching available versions to upgrade to + [upgrade/versions] Cluster version: v1.11.3 + [upgrade/versions] kubeadm version: v1.12.0 + [upgrade/versions] Latest stable version: v1.11.3 + [upgrade/versions] Latest version in the v1.11 series: v1.11.3 + [upgrade/versions] Latest experimental version: v1.13.0-alpha.0 + + Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply': + COMPONENT CURRENT AVAILABLE + Kubelet 2 x v1.11.1 v1.12.0 + 1 x v1.11.3 v1.12.0 + + Upgrade to the latest experimental version: + + COMPONENT CURRENT AVAILABLE + API Server v1.11.3 v1.12.0 + Controller Manager v1.11.3 v1.12.0 + Scheduler v1.11.3 v1.12.0 + Kube Proxy v1.11.3 v1.12.0 + CoreDNS 1.1.3 1.2.2 + Etcd 3.2.18 3.2.24 + + You can now apply the upgrade by executing the following command: + + kubeadm upgrade apply v1.12.0 + + _____________________________________________________________________ + + ``` + + This command checks that your cluster can be upgraded, and fetches the versions you can upgrade to. + +1. Choose a version to upgrade to, and run the appropriate command. For example: + + ```shell + kubeadm upgrade apply v1.12.0 + ``` + + You should see output similar to this: + + + + ```shell + [preflight] Running pre-flight checks. + [upgrade] Making sure the cluster is healthy: + [upgrade/config] Making sure the configuration is correct: + [upgrade/config] Reading configuration from the cluster... + [upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' + [upgrade/apply] Respecting the --cri-socket flag that is set with higher priority than the config file. + [upgrade/version] You have chosen to change the cluster version to "v1.12.0" + [upgrade/versions] Cluster version: v1.11.3 + [upgrade/versions] kubeadm version: v1.12.0 + [upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y + [upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler etcd] + [upgrade/prepull] Prepulling image for component etcd. + [upgrade/prepull] Prepulling image for component kube-apiserver. + [upgrade/prepull] Prepulling image for component kube-controller-manager. + [upgrade/prepull] Prepulling image for component kube-scheduler. + [apiclient] Found 0 Pods for label selector k8s-app=upgrade-prepull-etcd + [apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-kube-apiserver + [apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-kube-scheduler + [apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-kube-controller-manager + [apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-etcd + [upgrade/prepull] Prepulled image for component kube-apiserver. + [upgrade/prepull] Prepulled image for component kube-controller-manager. + [upgrade/prepull] Prepulled image for component kube-scheduler. + [upgrade/prepull] Prepulled image for component etcd. + [upgrade/prepull] Successfully prepulled the images for all the control plane components + [upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.12.0"... + Static pod: kube-apiserver-ip-172-31-80-76 hash: d9b7af93990d702b3ee9a2beca93384b + Static pod: kube-controller-manager-ip-172-31-80-76 hash: 44a081fb5d26e90773ceb98b4e16fe10 + Static pod: kube-scheduler-ip-172-31-80-76 hash: 009228e74aef4d7babd7968782118d5e + Static pod: etcd-ip-172-31-80-76 hash: 997fcf3d8d974c98abc14556cc02617e + [etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests661777755/etcd.yaml" + [upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2018-09-19-18-58-14/etcd.yaml" + [upgrade/staticpods] Waiting for the kubelet to restart the component + [upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 5m0s + Static pod: etcd-ip-172-31-80-76 hash: 997fcf3d8d974c98abc14556cc02617e + + [apiclient] Found 1 Pods for label selector component=etcd + [upgrade/staticpods] Component "etcd" upgraded successfully! + [upgrade/etcd] Waiting for etcd to become available + [util/etcd] Waiting 0s for initial delay + [util/etcd] Attempting to see if all cluster endpoints are available 1/10 + [upgrade/staticpods] Writing new Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests661777755" + [controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests661777755/kube-apiserver.yaml" + [controlplane] wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests661777755/kube-controller-manager.yaml" + [controlplane] wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests661777755/kube-scheduler.yaml" + [upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2018-09-19-18-58-14/kube-apiserver.yaml" + [upgrade/staticpods] Waiting for the kubelet to restart the component + [upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 5m0s + + Static pod: kube-apiserver-ip-172-31-80-76 hash: 854a5a8468f899093c6a967bb81dcfbc + [apiclient] Found 1 Pods for label selector component=kube-apiserver + [upgrade/staticpods] Component "kube-apiserver" upgraded successfully! + [upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/kube-controller-manager.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2018-09-19-18-58-14/kube-controller-manager.yaml" + [upgrade/staticpods] Waiting for the kubelet to restart the component + [upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 5m0s + Static pod: kube-controller-manager-ip-172-31-80-76 hash: 44a081fb5d26e90773ceb98b4e16fe10 + Static pod: kube-controller-manager-ip-172-31-80-76 hash: b651f83474ae70031d5fb2cab73bd366 + [apiclient] Found 1 Pods for label selector component=kube-controller-manager + [upgrade/staticpods] Component "kube-controller-manager" upgraded successfully! + [upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/kube-scheduler.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests-2018-09-19-18-58-14/kube-scheduler.yaml" + [upgrade/staticpods] Waiting for the kubelet to restart the component + [upgrade/staticpods] This might take a minute or longer depending on the component/version gap (timeout 5m0s + Static pod: kube-scheduler-ip-172-31-80-76 hash: 009228e74aef4d7babd7968782118d5e + Static pod: kube-scheduler-ip-172-31-80-76 hash: da406e5a49adfbbeb90fe2a0cf8fd8d1 + [apiclient] Found 1 Pods for label selector component=kube-scheduler + [upgrade/staticpods] Component "kube-scheduler" upgraded successfully! + [uploadconfig] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace + [kubelet] Creating a ConfigMap "kubelet-config-1.12" in namespace kube-system with the configuration for the kubelets in the cluster + [kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.12" ConfigMap in the kube-system namespace + [kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" + [patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "ip-172-31-80-76" as an annotation + [bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials + [bootstraptoken] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token + [bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster + [addons] Applied essential addon: CoreDNS + [addons] Applied essential addon: kube-proxy + + [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.12.0". Enjoy! + + [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so. + ``` + +1. Manually upgrade your Software Defined Network (SDN). + + Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow. + Check the [addons](/docs/concepts/cluster-administration/addons/) page to + find your CNI provider and see whether additional upgrade steps are required. + +## Upgrade master and node packages + +1. Prepare each node for maintenance, marking it unschedulable and evicting the workloads: + + ```shell + kubectl drain $NODE --ignore-daemonsets + ``` + + On the master node, you must add `--ignore-daemonsets`: + + ```shell + kubectl drain ip-172-31-85-18 + node "ip-172-31-85-18" cordoned + error: unable to drain node "ip-172-31-85-18", aborting command... + + There are pending nodes to be drained: + ip-172-31-85-18 + error: DaemonSet-managed pods (use --ignore-daemonsets to ignore): calico-node-5798d, kube-proxy-thjp9 + ``` + + ``` + kubectl drain ip-172-31-85-18 --ignore-daemonsets + node "ip-172-31-85-18" already cordoned + WARNING: Ignoring DaemonSet-managed pods: calico-node-5798d, kube-proxy-thjp9 + node "ip-172-31-85-18" drained + ``` + +1. Upgrade the Kubernetes package version on each `$NODE` node by running the Linux package manager for your distribution: + + {{< tabs name="k8s_install" >}} + {{% tab name="Ubuntu, Debian or HypriotOS" %}} + apt-get update + apt-get upgrade -y kubelet kubeadm + {{% /tab %}} + {{% tab name="CentOS, RHEL or Fedora" %}} + yum upgrade -y kubelet kubeadm --disableexcludes=kubernetes + {{% /tab %}} + {{< /tabs >}} + +## Upgrade kubelet on each node + +1. On each node except the master node, upgrade the kubelet config: + + ```shell + sudo kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2) + ``` + +1. Restart the kubelet process: + + ```shell + sudo systemctl restart kubelet + ``` + +1. Verify that the new version of the `kubelet` is running on the node: + + ```shell + systemctl status kubelet + ``` + +1. Bring the node back online by marking it schedulable: + + ```shell + kubectl uncordon $NODE + ``` + +1. After the kubelet is upgraded on all nodes, verify that all nodes are available again by running the following command from anywhere kubectl can access the cluster: + + ```shell + kubectl get nodes + ``` + + The `STATUS` column should show `Ready` for all your nodes, and the version number should be updated. + +{{% /capture %}} + +## Recovering from a failure state + +If `kubeadm upgrade` fails and does not roll back, for example because of an unexpected shutdown during execution, you can run `kubeadm upgrade` again. +This command is idempotent and eventually makes sure that the actual state is the desired state you declare. + +To recover from a bad state, you can also run `kubeadm upgrade --force` without changing the version that your cluster is running. + +## How it works + +`kubeadm upgrade apply` does the following: + +- Checks that your cluster is in an upgradeable state: + - The API server is reachable + - All nodes are in the `Ready` state + - The control plane is healthy +- Enforces the version skew policies. +- Makes sure the control plane images are available or available to pull to the machine. +- Upgrades the control plane components or rollbacks if any of them fails to come up. +- Applies the new `kube-dns` and `kube-proxy` manifests and enforces that all necessary RBAC rules are created. +- Creates new certificate and key files of the API server and backs up old files if they're about to expire in 180 days. diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8.md deleted file mode 100644 index 24da924d94..0000000000 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8.md +++ /dev/null @@ -1,290 +0,0 @@ ---- -reviewers: -- pipejakob -- luxas -- roberthbailey -- jbeda -title: Upgrading kubeadm clusters from 1.7 to 1.8 -content_template: templates/task ---- - -{{% capture overview %}} - -This guide is for upgrading `kubeadm` clusters from version 1.7.x to 1.8.x, as well as 1.7.x to 1.7.y and 1.8.x to 1.8.y where `y > x`. -See also [upgrading kubeadm clusters from 1.6 to 1.7](/docs/tasks/administer-cluster/kubeadm-upgrade-1-7/) if you're on a 1.6 cluster currently. - -{{% /capture %}} - -{{% capture prerequisites %}} - -Before proceeding: - -- You need to have a functional `kubeadm` Kubernetes cluster running version 1.7.0 or higher in order to use the process described here. -- Make sure you read the [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#v180-beta1) carefully. -- As `kubeadm upgrade` does not upgrade etcd make sure to back it up. You can, for example, use `etcdctl backup` to take care of this. -- Note that `kubeadm upgrade` will not touch any of your workloads, only Kubernetes-internal components. As a best-practice you should back up what's important to you. For example, any app-level state, such as a database an app might depend on (like MySQL or MongoDB) must be backed up beforehand. - -Also, note that only one minor version upgrade is supported. That is, you can only upgrade from, say 1.7 to 1.8, not from 1.7 to 1.9. - -{{% /capture %}} - -{{% capture steps %}} - -## Upgrading your control plane - -You have to carry out the following steps by executing these commands on your master node: - -1. Install the most recent version of `kubeadm` using `curl` like so: - -{{< caution >}} -```shell -export VERSION=$(curl -sSL https://dl.k8s.io/release/stable.txt) # or manually specify a released Kubernetes version -export ARCH=amd64 # or: arm, arm64, ppc64le, s390x -curl -sSL https://dl.k8s.io/release/${VERSION}/bin/linux/${ARCH}/kubeadm > /usr/bin/kubeadm -chmod a+rx /usr/bin/kubeadm -``` -**Caution:** Upgrading the `kubeadm` package on your system prior to -upgrading the control plane causes a failed upgrade. Even though -`kubeadm` is shipped in the Kubernetes repositories, it's important -to install `kubeadm` manually. The kubeadm team is working on fixing -this limitation. -{{< /caution >}} - -Verify that this download of kubeadm works, and has the expected version: - -```shell -kubeadm version -``` - -2. If this the first time you use `kubeadm upgrade`, in order to preserve the configuration for future upgrades, do: - -Note that for below you will need to recall what CLI args you passed to `kubeadm init` the first time. - -If you used flags, do: - -```shell -kubeadm config upload from-flags [flags] -``` - -Where `flags` can be empty. - -If you used a config file, do: - -```shell -kubeadm config upload from-file --config [config] -``` - -Where the `config` is mandatory. - -3. On the master node, run the following: - -```shell -kubeadm upgrade plan -``` - -You should see output similar to this: - -```shell -[preflight] Running pre-flight checks -[upgrade] Making sure the cluster is healthy: -[upgrade/health] Checking API Server health: Healthy -[upgrade/health] Checking Node health: All Nodes are healthy -[upgrade/health] Checking Static Pod manifests exists on disk: All manifests exist on disk -[upgrade/config] Making sure the configuration is correct: -[upgrade/config] Reading configuration from the cluster... -[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' -[upgrade] Fetching available versions to upgrade to: -[upgrade/versions] Cluster version: v1.7.1 -[upgrade/versions] kubeadm version: v1.8.0 -[upgrade/versions] Latest stable version: v1.8.0 -[upgrade/versions] Latest version in the v1.7 series: v1.7.6 - -Components that must be upgraded manually after you've upgraded the control plane with 'kubeadm upgrade apply': -COMPONENT CURRENT AVAILABLE -Kubelet 1 x v1.7.1 v1.7.6 - -Upgrade to the latest version in the v1.7 series: - -COMPONENT CURRENT AVAILABLE -API Server v1.7.1 v1.7.6 -Controller Manager v1.7.1 v1.7.6 -Scheduler v1.7.1 v1.7.6 -Kube Proxy v1.7.1 v1.7.6 -Kube DNS 1.14.4 1.14.4 - -You can now apply the upgrade by executing the following command: - - kubeadm upgrade apply v1.7.6 - -_____________________________________________________________________ - -Components that must be upgraded manually after you've upgraded the control plane with 'kubeadm upgrade apply': -COMPONENT CURRENT AVAILABLE -Kubelet 1 x v1.7.1 v1.8.0 - -Upgrade to the latest stable version: - -COMPONENT CURRENT AVAILABLE -API Server v1.7.1 v1.8.0 -Controller Manager v1.7.1 v1.8.0 -Scheduler v1.7.1 v1.8.0 -Kube Proxy v1.7.1 v1.8.0 -Kube DNS 1.14.4 1.14.4 - -You can now apply the upgrade by executing the following command: - - kubeadm upgrade apply v1.8.0 - -Note: Before you do can perform this upgrade, you have to update kubeadm to v1.8.0 - -_____________________________________________________________________ -``` - -The `kubeadm upgrade plan` checks that your cluster is in an upgradeable state and fetches the versions available to upgrade to in an user-friendly way. - -4. Pick a version to upgrade to and run, for example, `kubeadm upgrade apply` as follows: - -```shell -kubeadm upgrade apply v1.8.0 -``` - -You should see output similar to this: - -```shell -[preflight] Running pre-flight checks -[upgrade] Making sure the cluster is healthy: -[upgrade/health] Checking API Server health: Healthy -[upgrade/health] Checking Node health: All Nodes are healthy -[upgrade/health] Checking Static Pod manifests exists on disk: All manifests exist on disk -[upgrade/config] Making sure the configuration is correct: -[upgrade/config] Reading configuration from the cluster... -[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' -[upgrade/version] You have chosen to upgrade to version "v1.8.0" -[upgrade/versions] Cluster version: v1.7.1 -[upgrade/versions] kubeadm version: v1.8.0 -[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler] -[upgrade/prepull] Prepulling image for component kube-scheduler. -[upgrade/prepull] Prepulling image for component kube-apiserver. -[upgrade/prepull] Prepulling image for component kube-controller-manager. -[apiclient] Found 0 Pods for label selector k8s-app=upgrade-prepull-kube-scheduler -[apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-kube-scheduler -[apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-kube-apiserver -[apiclient] Found 1 Pods for label selector k8s-app=upgrade-prepull-kube-controller-manager -[upgrade/prepull] Prepulled image for component kube-apiserver. -[upgrade/prepull] Prepulled image for component kube-controller-manager. -[upgrade/prepull] Prepulled image for component kube-scheduler. -[upgrade/prepull] Successfully prepulled the images for all the control plane components -[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.8.0"... -[upgrade/staticpods] Writing upgraded Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests432902769" -[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests432902769/kube-apiserver.yaml" -[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests432902769/kube-controller-manager.yaml" -[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests432902769/kube-scheduler.yaml" -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests155856668/kube-apiserver.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=kube-apiserver -[upgrade/staticpods] Component "kube-apiserver" upgraded successfully! -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-controller-manager.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests155856668/kube-controller-manager.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=kube-controller-manager -[upgrade/staticpods] Component "kube-controller-manager" upgraded successfully! -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-scheduler.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests155856668/kube-scheduler.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=kube-scheduler -[upgrade/staticpods] Component "kube-scheduler" upgraded successfully! -[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace -[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials -[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token -[addons] Applied essential addon: kube-dns -[addons] Applied essential addon: kube-proxy - -[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.8.0". Enjoy! - -[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets in turn. -``` - -`kubeadm upgrade apply` does the following: - -- It checks that your cluster is in an upgradeable state, that is: - - The API Server is reachable, - - All nodes are in the `Ready` state, and - - The control plane is healthy -- It enforces the version skew policies. -- It makes sure the control plane images are available or available to pull to the machine. -- It upgrades the control plane components or rollbacks if any of them fails to come up. -- It applies the new `kube-dns` and `kube-proxy` manifests and enforces that all necessary RBAC rules are created. - -5. Manually upgrade your Software Defined Network (SDN). - - Your Container Network Interface (CNI) provider might have its own upgrade instructions to follow now. - Check the [addons](/docs/concepts/cluster-administration/addons/) page to - find your CNI provider and see if there are additional upgrade steps - necessary. - -6. Add RBAC permissions for automated certificate rotation. In the future, kubeadm will perform this step automatically: - -```shell -kubectl create clusterrolebinding kubeadm:node-autoapprove-certificate-rotation --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes -``` - -## Upgrading your master and node packages - -For each host (referred to as `$HOST` below) in your cluster, upgrade `kubelet` by executing the following commands: - -1. Prepare the host for maintenance, marking it unschedulable and evicting the workload: - -```shell -kubectl drain $HOST --ignore-daemonsets -``` - -When running this command against the master host, this error is expected and can be safely ignored (since there are static pods running on the master): - -```shell -node "master" already cordoned -error: pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): etcd-kubeadm, kube-apiserver-kubeadm, kube-controller-manager-kubeadm, kube-scheduler-kubeadm -``` - -2. Upgrade the Kubernetes package versions on the `$HOST` node by using a Linux distribution-specific package manager: - -If the host is running a Debian-based distro such as Ubuntu, run: - -```shell -apt-get update -apt-get upgrade -``` - -If the host is running CentOS or the like, run: - -```shell -yum update -``` - -Now the new version of the `kubelet` should be running on the host. Verify this using the following command on `$HOST`: - -```shell -systemctl status kubelet -``` - -3. Bring the host back online by marking it schedulable: - -```shell -kubectl uncordon $HOST -``` - -4. After upgrading `kubelet` on each host in your cluster, verify that all nodes are available again by executing the following (from anywhere, for example, from outside the cluster): - -```shell -kubectl get nodes -``` - -If the `STATUS` column of the above command shows `Ready` for all of your hosts, you are done. - -## Recovering from a bad state - -If `kubeadm upgrade` somehow fails and fails to roll back, due to an unexpected shutdown during execution for instance, -you may run `kubeadm upgrade` again as it is idempotent and should eventually make sure the actual state is the desired state you are declaring. - -You can use `kubeadm upgrade` to change a running cluster with `x.x.x --> x.x.x` with `--force`, which can be used to recover from a bad state. - -{{% /capture %}} - - diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md deleted file mode 100644 index dac73e9862..0000000000 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md +++ /dev/null @@ -1,264 +0,0 @@ ---- -reviewers: -- pipejakob -- luxas -- roberthbailey -- jbeda -title: Upgrading/downgrading kubeadm clusters between v1.8 to v1.9 -content_template: templates/task ---- - -{{% capture overview %}} - -This guide is for upgrading `kubeadm` clusters from version 1.8.x to 1.9.x, as well as 1.8.x to 1.8.y and 1.9.x to 1.9.y where `y > x`. -See also [upgrading kubeadm clusters from 1.7 to 1.8](/docs/tasks/administer-cluster/kubeadm-upgrade-1-8/) if you're on a 1.7 cluster currently. - -{{% /capture %}} - -{{% capture prerequisites %}} - -Before proceeding: - -- You need to have a functional `kubeadm` Kubernetes cluster running version 1.8.0 or higher in order to use the process described here. Swap also needs to be disabled. -- Make sure you read the [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md) carefully. -- `kubeadm upgrade` now allows you to upgrade etcd. `kubeadm upgrade` will also upgrade of etcd to 3.1.10 as part of upgrading from v1.8 to v1.9 by default. This is due to the fact that etcd 3.1.10 is the officially validated etcd version for Kubernetes v1.9. The upgrade is handled automatically by kubeadm for you. -- Note that `kubeadm upgrade` will not touch any of your workloads, only Kubernetes-internal components. As a best-practice you should back up what's important to you. For example, any app-level state, such as a database an app might depend on (like MySQL or MongoDB) must be backed up beforehand. - -{{< caution >}} -**Caution:** All the containers will get restarted after the upgrade, due to container spec hash value gets changed. -{{< /caution >}} - -Also, note that only one minor version upgrade is supported. For example, you can only upgrade from 1.8 to 1.9, not from 1.7 to 1.9. - -{{% /capture %}} - -{{% capture steps %}} - -## Upgrading your control plane - -Execute these commands on your master node: - -1. Install the most recent version of `kubeadm` using `curl` like so: - -```shell -export VERSION=$(curl -sSL https://dl.k8s.io/release/stable.txt) # or manually specify a released Kubernetes version -export ARCH=amd64 # or: arm, arm64, ppc64le, s390x -curl -sSL https://dl.k8s.io/release/${VERSION}/bin/linux/${ARCH}/kubeadm > /usr/bin/kubeadm -chmod a+rx /usr/bin/kubeadm -``` - -{{< caution >}} -**Caution:** Upgrading the `kubeadm` package on your system prior to upgrading the control plane causes a failed upgrade. -Even though `kubeadm` ships in the Kubernetes repositories, it's important to install `kubeadm` manually. The kubeadm -team is working on fixing this limitation. -{{< /caution >}} - -Verify that this download of kubeadm works and has the expected version: - -```shell -kubeadm version -``` - -2. On the master node, run the following: - -```shell -kubeadm upgrade plan -``` - -You should see output similar to this: - -```shell -[preflight] Running pre-flight checks -[upgrade] Making sure the cluster is healthy: -[upgrade/health] Checking API Server health: Healthy -[upgrade/health] Checking Node health: All Nodes are healthy -[upgrade/health] Checking Static Pod manifests exists on disk: All manifests exist on disk -[upgrade/config] Making sure the configuration is correct: -[upgrade/config] Reading configuration from the cluster... -[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' -[upgrade] Fetching available versions to upgrade to: -[upgrade/versions] Cluster version: v1.8.1 -[upgrade/versions] kubeadm version: v1.9.0 -[upgrade/versions] Latest stable version: v1.9.0 -[upgrade/versions] Latest version in the v1.8 series: v1.8.6 - -Components that must be upgraded manually after you've upgraded the control plane with 'kubeadm upgrade apply': -COMPONENT CURRENT AVAILABLE -Kubelet 1 x v1.8.1 v1.8.6 - -Upgrade to the latest version in the v1.8 series: - -COMPONENT CURRENT AVAILABLE -API Server v1.8.1 v1.8.6 -Controller Manager v1.8.1 v1.8.6 -Scheduler v1.8.1 v1.8.6 -Kube Proxy v1.8.1 v1.8.6 -Kube DNS 1.14.4 1.14.5 - -You can now apply the upgrade by executing the following command: - - kubeadm upgrade apply v1.8.6 - -_____________________________________________________________________ - -Components that must be upgraded manually after you've upgraded the control plane with 'kubeadm upgrade apply': -COMPONENT CURRENT AVAILABLE -Kubelet 1 x v1.8.1 v1.9.0 - -Upgrade to the latest stable version: - -COMPONENT CURRENT AVAILABLE -API Server v1.8.1 v1.9.0 -Controller Manager v1.8.1 v1.9.0 -Scheduler v1.8.1 v1.9.0 -Kube Proxy v1.8.1 v1.9.0 -Kube DNS 1.14.5 1.14.7 - -You can now apply the upgrade by executing the following command: - - kubeadm upgrade apply v1.9.0 - -Note: Before you do can perform this upgrade, you have to update kubeadm to v1.9.0 - -_____________________________________________________________________ -``` - -The `kubeadm upgrade plan` checks that your cluster is upgradeable and fetches the versions available to upgrade to in an user-friendly way. - -To check CoreDNS version, include the `--feature-gates=CoreDNS=true` flag to verify the CoreDNS version which will be installed in place of kube-dns. - -3. Pick a version to upgrade to and run. For example: - -```shell -kubeadm upgrade apply v1.9.0 -``` - -You should see output similar to this: - -```shell -[preflight] Running pre-flight checks. -[upgrade] Making sure the cluster is healthy: -[upgrade/config] Making sure the configuration is correct: -[upgrade/config] Reading configuration from the cluster... -[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' -[upgrade/version] You have chosen to upgrade to version "v1.9.0" -[upgrade/versions] Cluster version: v1.8.1 -[upgrade/versions] kubeadm version: v1.9.0 -[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y -[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler] -[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.9.0"... -[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/etcd.yaml" -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/etcd.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=etcd -[upgrade/staticpods] Component "etcd" upgraded successfully! -[upgrade/staticpods] Writing upgraded Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804" -[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/kube-apiserver.yaml" -[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/kube-controller-manager.yaml" -[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/kube-scheduler.yaml" -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/kube-apiserver.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=kube-apiserver -[upgrade/staticpods] Component "kube-apiserver" upgraded successfully! -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-controller-manager.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/kube-controller-manager.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=kube-controller-manager -[upgrade/staticpods] Component "kube-controller-manager" upgraded successfully! -[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-scheduler.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/kube-scheduler.yaml" -[upgrade/staticpods] Waiting for the kubelet to restart the component -[apiclient] Found 1 Pods for label selector component=kube-scheduler -[upgrade/staticpods] Component "kube-scheduler" upgraded successfully! -[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace -[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials -[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token -[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster -[addons] Applied essential addon: kube-dns -[addons] Applied essential addon: kube-proxy - -[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.9.0". Enjoy! - -[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets in turn. -``` - -To upgrade the cluster with CoreDNS as the default internal DNS, invoke `kubeadm upgrade apply` with the `--feature-gates=CoreDNS=true` flag. -`kubeadm upgrade apply` does the following: - -- Checks that your cluster is in an upgradeable state: - - The API server is reachable, - - All nodes are in the `Ready` state - - The control plane is healthy -- Enforces the version skew policies. -- Makes sure the control plane images are available or available to pull to the machine. -- Upgrades the control plane components or rollbacks if any of them fails to come up. -- Applies the new `kube-dns` and `kube-proxy` manifests and enforces that all necessary RBAC rules are created. -- Creates new certificate and key files of apiserver and backs up old files if they're about to expire in 180 days. - -4. Manually upgrade your Software Defined Network (SDN). - - Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow. - Check the [addons](/docs/concepts/cluster-administration/addons/) page to - find your CNI provider and see if there are additional upgrade steps - necessary. - -## Upgrading your master and node packages - -For each host (referred to as `$HOST` below) in your cluster, upgrade `kubelet` by executing the following commands: - -1. Prepare the host for maintenance, marking it unschedulable and evicting the workload: - -```shell -kubectl drain $HOST --ignore-daemonsets -``` - -When running this command against the master host, this error is expected and can be safely ignored (since there are static pods running on the master): - -```shell -node "master" already cordoned -error: pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): etcd-kubeadm, kube-apiserver-kubeadm, kube-controller-manager-kubeadm, kube-scheduler-kubeadm -``` - -2. Upgrade the Kubernetes package versions on the `$HOST` node by using a Linux distribution-specific package manager: - -If the host is running a Debian-based distro such as Ubuntu, run: - -```shell -apt-get update -apt-get upgrade -``` - -If the host is running CentOS or the like, run: - -```shell -yum update -``` - -Now the new version of the `kubelet` should be running on the host. Verify this using the following command on `$HOST`: - -```shell -systemctl status kubelet -``` - -3. Bring the host back online by marking it schedulable: - -```shell -kubectl uncordon $HOST -``` - -4. After upgrading `kubelet` on each host in your cluster, verify that all nodes are available again by executing the following (from anywhere, for example, from outside the cluster): - -```shell -kubectl get nodes -``` - -If the `STATUS` column of the above command shows `Ready` for all of your hosts, you are done. - -## Recovering from a failure state - -If `kubeadm upgrade` somehow fails and fails to roll back, for example due to an unexpected shutdown during execution, -you can run `kubeadm upgrade` again as it is idempotent and should eventually make sure the actual state is the desired state you are declaring. - -You can use `kubeadm upgrade` to change a running cluster with `x.x.x --> x.x.x` with `--force`, which can be used to recover from a bad state. - -{{% /capture %}} - - diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md index dfa8c127d9..064dae86d3 100644 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md @@ -1,16 +1,16 @@ --- reviewers: -- jamiehannaford +- jamiehannaford - luxas -- timothysc +- timothysc - jbeda -title: Upgrading kubeadm HA clusters from 1.9.x to 1.9.y +title: Upgrading kubeadm HA clusters from v1.11 to v1.12 content_template: templates/task --- {{% capture overview %}} -This guide is for upgrading `kubeadm` HA clusters from version 1.9.x to 1.9.y where `y > x`. The term "`kubeadm` HA clusters" refers to clusters of more than one master node created with `kubeadm`. To set up an HA cluster for Kubernetes version 1.9.x `kubeadm` requires additional manual steps. See [Creating HA clusters with kubeadm](/docs/setup/independent/high-availability/) for instructions on how to do this. The upgrade procedure described here targets clusters created following those very instructions. See [Upgrading/downgrading kubeadm clusters between v1.8 to v1.9](/docs/tasks/administer-cluster/kubeadm-upgrade-1-9/) for more instructions on how to create an HA cluster with `kubeadm`. +This page explains how to upgrade a highly available (HA) Kubernetes cluster created with `kubeadm` from version 1.11.x to version 1.12.x. In addition to upgrading, you must also follow the instructions in [Creating HA clusters with kubeadm](/docs/setup/independent/high-availability/). {{% /capture %}} @@ -18,119 +18,223 @@ This guide is for upgrading `kubeadm` HA clusters from version 1.9.x to 1.9.y wh Before proceeding: -- You need to have a functional `kubeadm` HA cluster running version 1.9.0 or higher in order to use the process described here. -- Make sure you read the [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md) carefully. -- Note that `kubeadm upgrade` will not touch any of your workloads, only Kubernetes-internal components. As a best-practice you should back up anything important to you. For example, any application-level state, such as a database and application might depend on (like MySQL or MongoDB) should be backed up beforehand. -- Read [Upgrading/downgrading kubeadm clusters between v1.8 to v1.9](/docs/tasks/administer-cluster/kubeadm-upgrade-1-9/) to learn about the relevant prerequisites. +- You need to have a `kubeadm` HA cluster running version 1.11 or higher. +- Make sure you read the [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md) carefully. +- Make sure to back up any important components, such as app-level state stored in a database. `kubeadm upgrade` does not touch your workloads, only components internal to Kubernetes, but backups are always a best practice. +- Check the prerequisites for [Upgrading/downgrading kubeadm clusters between v1.11 to v1.12](/docs/tasks/administer-cluster/kubeadm-upgrade-1-12/). + +{{< note >}} +**Note**: All commands on any control plane or etcd node should be +run as root. +{{< /note >}} {{% /capture %}} {{% capture steps %}} -## Preparation +## Prepare for both methods -Some preparation is needed prior to starting the upgrade. First download the version of `kubeadm` that matches the version of Kubernetes that you are upgrading to: +Upgrade `kubeadm` to the version that matches the version of Kubernetes that you are upgrading to: ```shell -# Use the latest stable release or manually specify a -# released Kubernetes version -export VERSION=$(curl -sSL https://dl.k8s.io/release/stable.txt) -export ARCH=amd64 # or: arm, arm64, ppc64le, s390x -curl -sSL https://dl.k8s.io/release/${VERSION}/bin/linux/${ARCH}/kubeadm > /tmp/kubeadm -chmod a+rx /tmp/kubeadm +apt-mark unhold kubeadm && \ +apt-get update && apt-get install -y kubeadm && \ +apt-mark hold kubeadm ``` -Copy this file to `/tmp` on your primary master if necessary. Run this command for checking prerequisites and determining the versions you will receive: +Check prerequisites and determine the upgrade versions: ```shell -/tmp/kubeadm upgrade plan +kubeadm upgrade plan ``` -If the prerequisites are met you'll get a summary of the software versions kubeadm will upgrade to, like this: +You should see something like the following: Upgrade to the latest stable version: COMPONENT CURRENT AVAILABLE - API Server v1.9.0 v1.9.2 - Controller Manager v1.9.0 v1.9.2 - Scheduler v1.9.0 v1.9.2 - Kube Proxy v1.9.0 v1.9.2 - Kube DNS 1.14.5 1.14.7 - Etcd 3.2.7 3.1.11 + API Server v1.11.3 v1.12.0 + Controller Manager v1.11.3 v1.12.0 + Scheduler v1.11.3 v1.12.0 + Kube Proxy v1.11.3 v1.12.0 + CoreDNS 1.1.3 1.2.2 + Etcd 3.2.18 3.2.24 -{{< caution >}} -**Caution:** Currently the only supported configuration for kubeadm HA clusters requires the use of an externally managed etcd cluster. Upgrading etcd is not supported as a part of the upgrade. If necessary you will have to upgrade the etcd cluster according to [etcd's upgrade instructions](/docs/tasks/administer-cluster/configure-upgrade-etcd/), which is beyond the scope of these instructions. -{{< /caution >}} +## Stacked control plane nodes -## Upgrading your control plane +### Upgrade the first control plane node -The following procedure must be applied on a single master node and repeated for each subsequent master node sequentially. - -Before initiating the upgrade with `kubeadm` `configmap/kubeadm-config` needs to be modified for the current master host. Replace any hard reference to a master host name with the current master hosts' name: +Modify `configmap/kubeadm-config` for this control plane node: ```shell -kubectl get configmap -n kube-system kubeadm-config -o yaml >/tmp/kubeadm-config-cm.yaml -sed -i 's/^\([ \t]*nodeName:\).*/\1 /' /tmp/kubeadm-config-cm.yaml -kubectl apply -f /tmp/kubeadm-config-cm.yaml --force +kubectl get configmap -n kube-system kubeadm-config -o yaml > kubeadm-config-cm.yaml ``` -Now the upgrade process can start. Use the target version determined in the preparation step and run the following command (press “y” when prompted): +Open the file in an editor and replace the following values: + +- `api.advertiseAddress` + + This should be set to the local node's IP address. + +- `etcd.local.extraArgs.advertise-client-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.initial-advertise-peer-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.listen-client-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.listen-peer-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.initial-cluster` + + This should be updated to include the hostname and IP address pairs for each control plane node in the cluster. For example: + + "ip-172-31-92-42=https://172.31.92.42:2380,ip-172-31-89-186=https://172.31.89.186:2380,ip-172-31-90-42=https://172.31.90.42:2380" + +You must also pass an additional argument (`initial-cluster-state: existing`) to etcd.local.extraArgs. ```shell -/tmp/kubeadm upgrade apply v +kubectl apply -f kubeadm-config-cm.yaml --force ``` -If the operation was successful you’ll get a message like this: - - [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.9.2". Enjoy! - -To upgrade the cluster with CoreDNS as the default internal DNS, invoke `kubeadm upgrade apply` with the `--feature-gates=CoreDNS=true` flag. - -Next, manually upgrade your CNI provider - -Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow. Check the [addons](/docs/concepts/cluster-administration/addons/) page to find your CNI provider and see if there are additional upgrade steps necessary. - -{{< note >}} -**Note:** The `kubeadm upgrade apply` step has been known to fail when run initially on the secondary masters (timed out waiting for the restarted static pods to come up). It should succeed if retried after a minute or two. -{{< /note >}} - -## Upgrade base software packages - -At this point all the static pod manifests in your cluster, for example API Server, Controller Manager, Scheduler, Kube Proxy have been upgraded, however the base software, for example `kubelet`, `kubectl`, `kubeadm` installed on your nodes’ OS are still of the old version. For upgrading the base software packages we will upgrade them and restart services on all nodes one by one: +Start the upgrade: ```shell -# use your distro's package manager, e.g. 'yum' on RH-based systems +kubeadm upgrade apply v +``` + +You should see something like the following: + + [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.12.0". Enjoy! + +The `kubeadm-config` ConfigMap is now updated from `v1alpha2` version to `v1alpha3`. + +### Upgrading additional control plane nodes + +Each additional control plane node requires modifications that are different from the first control plane node. Run: + +```shell +kubectl get configmap -n kube-system kubeadm-config -o yaml > kubeadm-config-cm.yaml +``` + +Open the file in an editor and replace the following values for `ClusterConfiguration`: + +- `etcd.local.extraArgs.advertise-client-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.initial-advertise-peer-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.listen-client-urls` + + This should be updated to the local node's IP address. + +- `etcd.local.extraArgs.listen-peer-urls` + + This should be updated to the local node's IP address. + +You must also modify the `ClusterStatus` to add a mapping for the current host under apiEndpoints. + +Add an annotation for the cri-socket to the current node, for example to use docker: + +```shell +kubectl annotate node kubeadm.alpha.kubernetes.io/cri-socket=/var/run/dockershim.sock +``` + +Start the upgrade: + +```shell +kubeadm upgrade apply v +``` + +You should see something like the following: + + [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.12.0". Enjoy! + +## External etcd + +### Upgrade each control plane + +Get a copy of the kubeadm config used to create this cluster. The config should be the same for every node. The config must exist on every control plane node before the upgrade begins. + +``` +# on each control plane node +kubectl get configmap -n kube-system kubeadm-config -o jsonpath={.data.MasterConfiguration} > kubeadm-config.yaml +``` + +Now run the upgrade on each control plane node one at a time. + +``` +kubeadm upgrade apply v1.12.0 --config kubeadm-config.yaml +``` + +### Upgrade etcd + +Kubernetes v1.11 to v1.12 only changed the patch version of etcd from v3.2.18 to v3.2.24. This is a rolling upgrade with no downtime, because you can run both versions in the same cluster. + +On the first host, modify the etcd manifest: + +```shell +sed -i 's/3.2.18/3.2.24/' /etc/kubernetes/manifests/etcd.yaml +``` + +Wait for the etcd process to reconnect. There will be error warnings in the other etcd node logs. This is expected. + +Repeat this step on the other etcd hosts. + +## Next steps + +### Manually upgrade your CNI provider + +Your Container Network Interface (CNI) provider might have its own upgrade instructions to follow. Check the [addons](/docs/concepts/cluster-administration/addons/) page to find your CNI provider and see whether you need to take additional upgrade steps. + +### Update kubelet and kubectl packages + +Upgrade the kubelet and kubectl by running the following on each node: + +```shell +# use your distro's package manager, e.g. 'apt-get' on Debian-based systems # for the versions stick to kubeadm's output (see above) -yum install -y kubelet- kubectl- kubeadm- kubernetes-cni- +apt-mark unhold kubelet kubectl && \ +apt-get update && \ +apt-get install kubelet= kubectl= && \ +apt-mark hold kubelet kubectl && \ systemctl restart kubelet ``` -In this example an _rpm_-based system is assumed and `yum` is used for installing the upgraded software. On _deb_-based systems it will be `apt-get update` and then `apt-get install =` for all packages. +In this example a _deb_-based system is assumed and `apt-get` is used for installing the upgraded software. On rpm-based systems the command is `yum install =` for all packages. -Now the new version of the `kubelet` should be running on the host. Verify this using the following command on the respective host: +Verify that the new version of the kubelet is running: ```shell systemctl status kubelet ``` -Verify that the upgraded node is available again by executing the following from wherever you run `kubectl` commands: +Verify that the upgraded node is available again by running the following command from wherever you run `kubectl`: ```shell kubectl get nodes ``` -If the `STATUS` column of the above command shows `Ready` for the upgraded host, you can continue (you may have to repeat this for a couple of time before the node gets `Ready`). +If the `STATUS` column shows `Ready` for the upgraded host, you can continue. You might need to repeat the command until the node shows `Ready`. ## If something goes wrong -If the upgrade fails the situation afterwards depends on the phase in which things went wrong: +If the upgrade fails, see whether one of the following scenarios applies: -1. If `/tmp/kubeadm upgrade apply` failed to upgrade the cluster it will try to perform a rollback. Hence if that happened on the first master, chances are pretty good that the cluster is still intact. +- If `kubeadm upgrade apply` failed to upgrade the cluster, it will try to perform a rollback. If this is the case on the first master, the cluster is probably still intact. - You can run `/tmp/kubeadm upgrade apply` again as it is idempotent and should eventually make sure the actual state is the desired state you are declaring. You can use `/tmp/kubeadm upgrade apply` to change a running cluster with `x.x.x --> x.x.x` with `--force`, which can be used to recover from a bad state. + You can run `kubeadm upgrade apply` again, because it is idempotent and should eventually make sure the actual state is the desired state you are declaring. You can run `kubeadm upgrade apply` to change a running cluster with `x.x.x --> x.x.x` with `--force` to recover from a bad state. -2. If `/tmp/kubeadm upgrade apply` on one of the secondary masters failed you still have a working, upgraded cluster, but with the secondary masters in a somewhat undefined condition. You will have to find out what went wrong and join the secondaries manually. As mentioned above, sometimes upgrading one of the secondary masters fails waiting for the restarted static pods first, but succeeds when the operation is simply repeated after a little pause of one or two minutes. +- If `kubeadm upgrade apply` on one of the secondary masters failed, the cluster is upgraded and working, but the secondary masters are in an undefined state. You need to investigate further and join the secondaries manually. {{% /capture %}} - - diff --git a/content/en/docs/tasks/configure-pod-container/configure-service-account.md b/content/en/docs/tasks/configure-pod-container/configure-service-account.md index 5c42fccd74..f8eab60ebd 100644 --- a/content/en/docs/tasks/configure-pod-container/configure-service-account.md +++ b/content/en/docs/tasks/configure-pod-container/configure-service-account.md @@ -250,12 +250,58 @@ spec: TODO: Test and explain how to use additional non-K8s secrets with an existing service account. --> -## Service Account Volume Projection +## Service Account Token Volume Projection -Kubernetes 1.11 and higher supports a new way to project a service account token into a Pod. -You can specify a token request with audiences, expirationSeconds. The service account token -becomes invalid when the Pod is deleted. A Projected Volume named -[ServiceAccountToken](/docs/concepts/storage/volumes/#projected) requests and stores the token. +{{< feature-state for_k8s_version="v1.12" state="beta" >}} + +{{< note >}} +**Note:** This ServiceAccountTokenVolumeProjection is __beta__ in 1.12 and +enabled by passing all of the following flags to the API server: + +* `--service-account-issuer` +* `--service-account-signing-key-file` +* `--service-account-api-audiences` + +{{< /note >}} + +The kubelet can also project a service account token into a Pod. You can +specify desired properties of the token, such as the audience and the validity +duration. These properties are not configurable on the default service account +token. The service account token will also become invalid against the API when +the Pod or the ServiceAccount is deleted. + +This behavior is configured on a PodSpec using a ProjectedVolume type called +[ServiceAccountToken](/docs/concepts/storage/volumes/#projected). To provide a +pod with a token with an audience of "vault" and a validity duration of two +hours, you would configure the following in your PodSpec: + +```yaml +kind: Pod +apiVersion: v1 +spec: + containers: + - image: nginx + name: nginx + volumeMounts: + - mountPath: /var/run/secrets/tokens + name: vault-token + volumes: + - name: vault-token + projected: + sources: + - serviceAccountToken: + path: vault-token + expirationSeconds: 7200 + audience: vault +``` + +The kubelet will request and store the token on behalf of the pod, make the +token avaialble to the pod at a configurable file path, and refresh the token as +it approaches expiration. Kubelet proactively rotates the token if it is older +than 80% of its total TTL, or if the token is older than 24 hours. + +The application is responsible for reloading the token when it rotates. Periodic +reloading (e.g. once every 5 minutes) is sufficient for most usecases. {{% /capture %}} diff --git a/content/en/docs/tasks/configure-pod-container/share-process-namespace.md b/content/en/docs/tasks/configure-pod-container/share-process-namespace.md index 1e8d902384..b2b97815f0 100644 --- a/content/en/docs/tasks/configure-pod-container/share-process-namespace.md +++ b/content/en/docs/tasks/configure-pod-container/share-process-namespace.md @@ -11,7 +11,7 @@ weight: 160 {{% capture overview %}} -{{< feature-state state="alpha" >}} +{{< feature-state state="beta" >}} This page shows how to configure process namespace sharing for a pod. When process namespace sharing is enabled, processes in a container are visible @@ -27,8 +27,8 @@ include debugging utilities like a shell. {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -A special **alpha** feature gate `PodShareProcessNamespace` must be set to true -across the system: `--feature-gates=PodShareProcessNamespace=true`. +Process Namespace Sharing is a **beta** feature that is enabled by default. It +may be disabled by setting `--feature-gates=PodShareProcessNamespace=false`. {{% /capture %}} diff --git a/content/en/docs/tasks/debug-application-cluster/audit.md b/content/en/docs/tasks/debug-application-cluster/audit.md index 54bf093a14..c4440d247c 100644 --- a/content/en/docs/tasks/debug-application-cluster/audit.md +++ b/content/en/docs/tasks/debug-application-cluster/audit.md @@ -9,8 +9,6 @@ title: Auditing {{% capture overview %}} -{{< feature-state state="beta" >}} - Kubernetes auditing provides a security-relevant chronological set of records documenting the sequence of activities that have affected system by individual users, administrators or other components of the system. It allows cluster administrator to @@ -83,7 +81,7 @@ You can use a minimal audit policy file to log all requests at the `Metadata` le ```yaml # Log all requests at the Metadata level. -apiVersion: audit.k8s.io/v1beta1 +apiVersion: audit.k8s.io/v1 kind: Policy rules: - level: Metadata @@ -102,7 +100,7 @@ Audit backends persist audit events to an external storage. In both cases, audit events structure is defined by the API in the `audit.k8s.io` API group. The current version of the API is -[`v1beta1`][auditing-api]. +[`v1`][auditing-api]. {{< note >}} **Note:** In case of patches, request body is a JSON array with patch operations, not a JSON object @@ -363,54 +361,11 @@ Note that in addition to file output plugin, logstash has a variety of outputs t let users route data where they want. For example, users can emit audit events to elasticsearch plugin which supports full-text search and analytics. -## Legacy Audit - -__Note:__ Legacy Audit is deprecated and is disabled by default since 1.8 and -will be removed in 1.12. To fallback to this legacy audit, disable the advanced -auditing feature using the `AdvancedAuditing` feature gate in [kube-apiserver][kube-apiserver]: - -``` ---feature-gates=AdvancedAuditing=false -``` - -In legacy format, each audit log entry contains two lines: - -1. The request line containing a unique ID to match the response and request - metadata, such as the source IP, requesting user, impersonation information, - resource being requested, etc. -2. The response line containing a unique ID matching the request line and the response code. - -Example output for `admin` user listing pods in the `default` namespace: - -``` -2017-03-21T03:57:09.106841886-04:00 AUDIT: id="c939d2a7-1c37-4ef1-b2f7-4ba9b1e43b53" ip="127.0.0.1" method="GET" user="admin" groups="\"system:masters\",\"system:authenticated\"" as="" asgroups="" namespace="default" uri="/api/v1/namespaces/default/pods" -2017-03-21T03:57:09.108403639-04:00 AUDIT: id="c939d2a7-1c37-4ef1-b2f7-4ba9b1e43b53" response="200" -``` - -### Configuration - -[Kube-apiserver][kube-apiserver] provides the following options which are responsible -for configuring where and how audit logs are handled: - -- `audit-log-path` - enables the audit log pointing to a file where the requests are being logged to, '-' means standard out. -- `audit-log-maxage` - specifies maximum number of days to retain old audit log files based on the timestamp encoded in their filename. -- `audit-log-maxbackup` - specifies maximum number of old audit log files to retain. -- `audit-log-maxsize` - specifies maximum size in megabytes of the audit log file before it gets rotated. Defaults to 100MB. - -If an audit log file already exists, Kubernetes appends new audit logs to that file. -Otherwise, Kubernetes creates an audit log file at the location you specified in -`audit-log-path`. If the audit log file exceeds the size you specify in `audit-log-maxsize`, -Kubernetes will rename the current log file by appending the current timestamp on -the file name (before the file extension) and create a new audit log file. -Kubernetes may delete old log files when creating a new log file; you can configure -how many files are retained and how old they can be by specifying the `audit-log-maxbackup` -and `audit-log-maxage` options. - [kube-apiserver]: /docs/admin/kube-apiserver [auditing-proposal]: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/auditing.md -[auditing-api]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1beta1/types.go +[auditing-api]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1/types.go [gce-audit-profile]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/cluster/gce/gci/configure-helper.sh#L735 -[kubeconfig]: https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/ +[kubeconfig]: /docs/tasks/access-application-cluster/configure-access-multiple-clusters/ [fluentd]: http://www.fluentd.org/ [fluentd_install_doc]: http://docs.fluentd.org/v0.12/articles/quickstart#step1-installing-fluentd [fluentd_plugin_management_doc]: https://docs.fluentd.org/v0.12/articles/plugin-management diff --git a/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md b/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md index 4ee79ba7fa..d4e3b256d3 100644 --- a/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md +++ b/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md @@ -1,7 +1,8 @@ --- title: Extend kubectl with plugins reviewers: -- fabianofranz +- juanvallejo +- soltysh description: With kubectl plugins, you can extend the functionality of the kubectl command by adding new subcommands. content_template: templates/task --- @@ -10,7 +11,8 @@ content_template: templates/task {{< feature-state state="alpha" >}} -This guide shows you how to install and write extensions for [kubectl](/docs/user-guide/kubectl/). Usually called *plugins* or *binary extensions*, this feature allows you to extend the default set of commands available in `kubectl` by adding new subcommands to perform new tasks and extend the set of features available in the main distribution of `kubectl`. +This guide demonstrates how to install and write extensions for [kubectl](/docs/reference/kubectl/kubectl/). By thinking of core `kubectl` commands as essential building blocks for interacting with a Kubernetes cluster, a cluster administrator can think +of plugins as a means of utilizing these building blocks to create more complex behavior. Plugins extend `kubectl` with new sub-commands, allowing for new and custom features not included in the main distribution of `kubectl`. {{% /capture %}} @@ -18,10 +20,10 @@ This guide shows you how to install and write extensions for [kubectl](/docs/use You need to have a working `kubectl` binary installed. {{< note >}} -**Note:** Plugins were officially introduced as an alpha feature in the v1.8.0 release. So, while some parts of the plugins feature were already available in previous versions, a `kubectl` version of 1.8.0 or later is recommended. +**Note:** Plugins were officially introduced as an alpha feature in the v1.8.0 release. They have been re-worked in the v1.12.0 release to support a wider range of use-cases. So, while some parts of the plugins feature were already available in previous versions, a `kubectl` version of 1.12.0 or later is recommended if you are following these docs. {{< /note >}} -Until a GA version is released, plugins will only be available under the `kubectl plugin` subcommand. +Until a GA version is released, plugins should be considered unstable, and their underlying mechanism is prone to change. {{% /capture %}} @@ -29,112 +31,246 @@ Until a GA version is released, plugins will only be available under the `kubect ## Installing kubectl plugins -A plugin is nothing more than a set of files: at least a **plugin.yaml** descriptor, and likely one or more binary, script, or assets files. To install a plugin, copy those files to one of the locations in the filesystem where `kubectl` searches for plugins. +A plugin is nothing more than a standalone executable file, whose name begins with `kubectl-`. To install a plugin, simply move this executable file to anywhere on your PATH. {{< note >}} -**Note:** Kubernetes does not provide a package manager or anything similar to install or update plugins. It is your responsibility to place the plugin files in the correct location. We recommend that each plugin be stored in its own directory so that installing a plugin distributed as a compressed file is as simple as extracting it to one of the locations specified in the [Plugin loader](#plugin-loader) section. +**Note:** Kubernetes does not provide a package manager or anything similar to install or update plugins. It is your responsibility to ensure that plugin executables have a filename that begins with `kubectl-`, and that they are placed somewhere on your PATH. {{< /note >}} -### Plugin loader +### Discovering plugins -The plugin loader is responsible for searching plugin files in the filesystem locations specified below, and checking if the plugin provides the minimum amount of information required for it to run. Files placed in the right location that don't provide the minimum amount of information, for example an incomplete *plugin.yaml* descriptor, are ignored. +`kubectl` provides a command `kubectl plugin list` that searches your PATH for valid plugin executables. +Executing this command causes a traversal of all files in your PATH. Any files that are executable, and begin with `kubectl-` will show up *in the order in which they are present in your PATH* in this command's output. +A warning will be included for any files beginning with `kubectl-` that are *not* executable. +A warning will also be included for any valid plugin files that overlap each other's name. -#### Search order +#### Limitations -The plugin loader uses the following search order: - -1. `${KUBECTL_PLUGINS_PATH}` If specified, the search stops here. -2. `${XDG_DATA_DIRS}/kubectl/plugins` -3. `~/.kube/plugins` - -If the `KUBECTL_PLUGINS_PATH` environment variable is present, the loader uses it as the only location to look for plugins. -The `KUBECTL_PLUGINS_PATH` environment variable is a list of directories. In Linux and Mac, the list is colon-delimited. In -Windows, the list is semicolon-delimited. - -If `KUBECTL_PLUGINS_PATH` is not present, the loader searches these additional locations: - -First, one or more directories specified according to the -[XDG System Directory Structure](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) -specification. Specifically, the loader locates the directories specified by the `XDG_DATA_DIRS` environment variable, -and then searches `kubectl/plugins` directory inside of those. -If `XDG_DATA_DIRS` is not specified, it defaults to `/usr/local/share:/usr/share`. - -Second, the `plugins` directory under the user's kubeconfig dir. In most cases, this is `~/.kube/plugins`. - -```shell -# Loads plugins from both /path/to/dir1 and /path/to/dir2 -KUBECTL_PLUGINS_PATH=/path/to/dir1:/path/to/dir2 kubectl plugin -h -``` +It is currently not possible to create plugins that overwrite existing `kubectl` commands. For example, creating a plugin `kubectl-version` will cause that plugin to never be executed, as the existing `kubectl version` command will always take precedence over it. Due to this limitation, it is also *not* possible to use plugins to add new subcommands to existing `kubectl` commands. For example, adding a subcommand `kubectl create foo` by naming your plugin `kubectl-create-foo` will cause that plugin to be ignored. Warnings will appear under the output of `kubectl plugin list` for any valid plugins that attempt to do this. ## Writing kubectl plugins You can write a plugin in any programming language or script that allows you to write command-line commands. -A plugin does not necessarily need to have a binary component. It could rely entirely on operating system utilities -like `echo`, `sed`, or `grep`. Or it could rely on the `kubectl` binary. -The only strong requirement for a `kubectl` plugin is the `plugin.yaml` descriptor file. This file is responsible for declaring at least the minimum attributes required to register a plugin and must be located under one of the locations specified in the [Search order](#search-order) section. +There is no plugin installation or pre-loading required. Plugin executables receive the inherited environment from the `kubectl` binary. +A plugin determines which command path it wishes to implement based on its name. For example, a plugin wanting to provide a new command +`kubectl foo`, would simply be named `kubectl-foo`, and live somewhere in the user's PATH. -### The plugin.yaml descriptor - -The descriptor file supports the following attributes: +### Example plugin ``` -name: "targaryen" # REQUIRED: the plugin command name, to be invoked under 'kubectl' -shortDesc: "Dragonized plugin" # REQUIRED: the command short description, for help -longDesc: "" # the command long description, for help -example: "" # command example(s), for help -command: "./dracarys" # REQUIRED: the command, binary, or script to invoke when running the plugin -flags: # flags supported by the plugin - - name: "heat" # REQUIRED for each flag: flag name - shorthand: "h" # short version of the flag name - desc: "Fire heat" # REQUIRED for each flag: flag description - defValue: "extreme" # default value of the flag -tree: # allows the declaration of subcommands - - ... # subcommands support the same set of attributes +#!/bin/bash + +# optional argument handling +if [[ "$1" == "version" ]] +then + echo "1.0.0" + exit 0 +fi + +# optional argument handling +if [[ "$1" == "config" ]] +then + echo $KUBECONFIG + exit 0 +fi + +echo "I am a plugin named kubectl-foo" ``` -The preceding descriptor declares the `kubectl plugin targaryen` plugin, which has one flag named `-h | --heat`. -When the plugin is invoked, it calls the `dracarys` binary or script, which is located in the same directory as the descriptor file. The [Accessing runtime attributes](#accessing-runtime-attributes) section describes how the `dracarys` command accesses the flag value and other runtime context. +### Using a plugin -### Recommended directory structure - -It is recommended that each plugin has its own subdirectory in the filesystem, preferably with the same name as the plugin command. The directory must contain the `plugin.yaml` descriptor and any binary, script, asset, or other dependency it might require. - -For example, the directory structure for the `targaryen` plugin could look like this: +To use the above plugin, simply make it executable: ``` -~/.kube/plugins/ -└── targaryen - ├── plugin.yaml - └── dracarys +sudo chmod +x ./kubectl-foo ``` -### Accessing runtime attributes +and place it anywhere in your PATH: -In most use cases, the binary or script file you write to support the plugin must have access to some contextual information provided by the plugin framework. For example, if you declared flags in the descriptor file, your plugin must have access to the user-provided flag values at runtime. The same is true for global flags. The plugin framework is responsible for doing that, so plugin writers don't need to worry about parsing arguments. This also ensures the best level of consistency between plugins and regular `kubectl` commands. +``` +sudo mv ./kubectl-foo /usr/local/bin +``` -Plugins have access to runtime context attributes through environment variables. So to access the value provided through a flag, for example, just look for the value of the proper environment variable using the appropriate function call for your binary or script. +You may now invoke your plugin as a `kubectl` command: -The supported environment variables are: +``` +$ kubectl foo +I am a plugin named kubectl-foo +``` -* `KUBECTL_PLUGINS_CALLER`: The full path to the `kubectl` binary that was used in the current command invocation. -As a plugin writer, you don't have to implement logic to authenticate and access the Kubernetes API. Instead, you can invoke `kubectl` to obtain the information you need, through something like `kubectl get --raw=/apis`. +All args and flags are passed as-is to the executable: -* `KUBECTL_PLUGINS_CURRENT_NAMESPACE`: The current namespace that is the context for this call. This is the actual namespace to be used, meaning it was already processed in terms of the precedence between what was provided through the kubeconfig, the `--namespace` global flag, environment variables, and so on. +``` +$ kubectl foo version +1.0.0 +``` -* `KUBECTL_PLUGINS_DESCRIPTOR_*`: One environment variable for every attribute declared in the `plugin.yaml` descriptor. -For example, `KUBECTL_PLUGINS_DESCRIPTOR_NAME`, `KUBECTL_PLUGINS_DESCRIPTOR_COMMAND`. +All environment variables are also passed as-is to the executable: -* `KUBECTL_PLUGINS_GLOBAL_FLAG_*`: One environment variable for every global flag supported by `kubectl`. -For example, `KUBECTL_PLUGINS_GLOBAL_FLAG_NAMESPACE`, `KUBECTL_PLUGINS_GLOBAL_FLAG_V`. +```bash +$ export KUBECONFIG=~/.kube/config +$ kubectl foo config +/home//.kube/config -* `KUBECTL_PLUGINS_LOCAL_FLAG_*`: One environment variable for every local flag declared in the `plugin.yaml` descriptor. For example, `KUBECTL_PLUGINS_LOCAL_FLAG_HEAT` in the preceding `targaryen` example. +$ KUBECONFIG=/etc/kube/config kubectl foo config +/etc/kube/config +``` + +Additionally, the first argument that is passed to a plugin will always be the full path to the location where it was invoked (`$0` would equal `/usr/local/bin/kubectl-foo` in our example above). + +### Naming a plugin + +As seen in the example above, a plugin determines the command path that it will implement based on its filename. Every sub-command in the command path that a plugin targets, is separated by a dash (`-`). +For example, a plugin that wishes to be invoked whenever the command `kubectl foo bar baz` is invoked by the user, would have the filename of `kubectl-foo-bar-baz`. + +#### Flags and argument handling + +Taking our `kubectl-foo-bar-baz` plugin from the above scenario, we further explore additional cases where users invoke our plugin while providing additional flags and arguments. +For example, in a situation where a user invokes the command `kubectl foo bar baz arg1 --flag=value arg2`, the plugin mechanism will first try to find the plugin with the longest possible name, which in this case +would be `kubectk-foo-bar-baz-arg1`. Upon not finding that plugin, it then treats the last dash-separated value as an argument (`arg1` in this case), and attempts to find the next longest possible name, `kubectl-foo-bar-baz`. +Upon finding a plugin with this name, it then invokes that plugin, passing all args and flags after its name to the plugin executable. + +Example: + +```bash +# create a plugin +$ echo '#!/bin/bash\n\necho "My first command-line argument was $1"' > kubectl-foo-bar-baz +$ sudo chmod +x ./kubectl-foo-bar-baz + +# "install" our plugin by placing it on our PATH +$ sudo mv ./kubectl-foo-bar-baz /usr/local/bin + +# ensure our plugin is recognized by kubectl +$ kubectl plugin list +The following kubectl-compatible plugins are available: + +/usr/local/bin/kubectl-foo-bar-baz + +# test that calling our plugin via a "kubectl" command works +# even when additional arguments and flags are passed to our +# plugin executable by the user. +$ kubectl foo bar baz arg1 --meaningless-flag=true +My first command-line argument was arg1 +``` + +As you can see, our plugin was found based on the `kubectl` command specified by a user, and all extra arguments and flags were passed as-is to the plugin executable once it was found. + +#### Names with dashes and underscores + +Although the `kubectl` plugin mechanism uses the dashes (`-`) in plugin filenames to determine the sequence of sub-commands that should invoke them, it is still possible to create a plugin +command containing dashes in its commandline invocation by using underscores `_` in its filename. + +Example: + +```bash +# create a plugin containing an underscore in its filename +$ echo '#!/bin/bash\n\necho "I am a plugin with a dash in my name"' > ./kubectl-foo_bar +$ sudo chmod +x ./kubectl-foo_bar + +# move the plugin into your PATH +$ sudo mv ./kubectl-foo_bar /usr/local/bin + +# our plugin can now be invoked from `kubectl` like so: +$ kubectl foo-bar +I am a plugin with a dash in my name +``` + +Note that the introduction of underscores to a plugin filename does not prevent us from having commands such as `kubectl foo_bar`. +The command from the above example, can be invoked using either a dash (`-`) or an underscore (`_`): + +```bash +# our plugin can be invoked with a dash +$ kubectl foo-bar +I am a plugin with a dash in my name + +# it can also be inovked using an underscore +$ kubectl foo_bar +I am a plugin with a dash in my name +``` + +#### Name conflicts and overshadowing + +It can be possible to have multiple pluins with the same filename in different locations throughout your PATH. +For example, given a PATH with the following value: `PATH=/usr/local/bin/plugins:/usr/local/bin/moreplugins`, a copy of plugin `kubectl-foo` could exist in `/usr/local/bin/plugins` and `/usr/local/bin/moreplugins`, +such that the output of the `kubectl plugin list` command is: + +```bash +$ PATH=/usr/local/bin/plugins:/usr/local/bin/moreplugins kubectl plugin list +The following kubectl-compatible plugins are available: + +/usr/local/bin/plugins/kubectl-foo +/usr/local/bin/moreplugins/kubectl-foo + - warning: /usr/local/bin/moreplugins/kubectl-foo is overshadowed by a similarly named plugin: /usr/local/bin/plugins/kubectl-foo + +error: one plugin warning was found +``` + +In the above scenario, the warning under `/usr/local/bin/moreplugins/kubectl-foo` tells us that this plugin will never be executed. Instead, the executable that appears first in our PATH, `/usr/local/bin/plugins/kubectl-foo`, willalways be found and executed first by the `kubectl` plugin mechanism. + +A way to resolve this issue is to ensure that the location of the plugin that you wish to use with `kubectl` always comes first in your PATH. For example, if we wanted to always use `/usr/local/bin/moreplugins/kubectl-foo` anytime that the `kubectl` command `kubectl foo` was invoked, we would simply change the value of our PATH to be `PATH=/usr/local/bin/moreplugins:/usr/local/bin/plugins`. + +#### Invocation of the longest executable filename + +There is another kind of overshadowing that can occur with plugin filenames. Given two plugins present in a user's PATH `kubectl-foo-bar` and `kubectl-foo-bar-baz`, the `kubectl` plugin mechanism will always choose the longest possible plugin name for a given user command. Some examples below, clarify this further: + +```bash +# for a given kubectl command, the plugin with the longest possible filename will always be preferred +$ kubectl foo bar baz +Plugin kubectl-foo-bar-baz is executed + +$ kubectl foo bar +Plugin kubectl-foo-bar is executed + +$ kubectl foo bar baz buz +Plugin kubectl-foo-bar-baz is executed, with "buz" as its first argument + +$ kubectl foo bar buz +Plugin kubectl-foo-bar is executed, with "buz" as its first argument +``` + +This design choice ensures that plugin sub-commands can be implemented across multiple files, if needed, and that these sub-commands can be nested under a "parent" plugin command: + +```bash +$ ls ./plugin_command_tree +kubectl-parent +kubectl-parent-subcommand +kubectl-parent-subcommand-subsubcommand +``` + +### Checking for plugin warnings + +You can use the aforementioned `kubectl plugin list` command to ensure that your plugin is visible by `kubectl`, and verify that there are no warnings preventing it from being called as a `kubectl` command. + +```bash +$ kubectl plugin list +The following kubectl-compatible plugins are available: + +test/fixtures/pkg/kubectl/plugins/kubectl-foo +/usr/local/bin/kubectl-foo + - warning: /usr/local/bin/kubectl-foo is overshadowed by a similarly named plugin: test/fixtures/pkg/kubectl/plugins/kubectl-foo +plugins/kubectl-invalid + - warning: plugins/kubectl-invalid identified as a kubectl plugin, but it is not executable + +error: 2 plugin warnings were found +``` + +### Using the command line runtime package + +As part of the plugin mechanism update in the v1.12.0 release, an additional set of utilities have been made available to plugin authors. These utilities +exist under the [k8s.io/cli-runtime](https://github.com/kubernetes/cli-runtime) repository, and can be used by plugins written in Go to parse and update +a user's KUBECONFIG file, obtain REST clients to talk to the API server, and automatically bind flags associated with configuration and printing. + +Plugins *do not* have to be written in Go in order to be recognized as valid plugins by `kubectl`, but they do have to use Go in order to take advantage of +the tools and utilities in the CLI Runtime repository. + +See the [Sample CLI Plugin](https://github.com/kubernetes/sample-cli-plugin) for an example usage of the tools provided in the CLI Runtime repo. {{% /capture %}} {{% capture whatsnext %}} -* Check the repository for [some more examples](https://github.com/kubernetes/kubernetes/tree/release-1.11/pkg/kubectl/plugins/examples) of plugins. +* Check the Sample CLI Plugin repository for [a detailed example](https://github.com/kubernetes/sample-cli-plugin) of a plugin written in Go. * In case of any questions, feel free to reach out to the [CLI SIG team](https://github.com/kubernetes/community/tree/master/sig-cli). * Binary plugins is still an alpha feature, so this is the time to contribute ideas and improvements to the codebase. We're also excited to hear about what you're planning to implement with plugins, so [let us know](https://github.com/kubernetes/community/tree/master/sig-cli)! diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md index 3ccf9dadc5..ca1ec171bd 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md @@ -167,18 +167,18 @@ Here CPU utilization dropped to 0, and so HPA autoscaled the number of replicas ## Autoscaling on multiple metrics and custom metrics You can introduce additional metrics to use when autoscaling the `php-apache` Deployment -by making use of the `autoscaling/v2beta1` API version. +by making use of the `autoscaling/v2beta2` API version. -First, get the YAML of your HorizontalPodAutoscaler in the `autoscaling/v2beta1` form: +First, get the YAML of your HorizontalPodAutoscaler in the `autoscaling/v2beta2` form: ```shell -$ kubectl get hpa.v2beta1.autoscaling -o yaml > /tmp/hpa-v2.yaml +$ kubectl get hpa.v2beta2.autoscaling -o yaml > /tmp/hpa-v2.yaml ``` Open the `/tmp/hpa-v2.yaml` file in an editor, and you should see YAML which looks like this: ```yaml -apiVersion: autoscaling/v2beta1 +apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: php-apache @@ -194,7 +194,9 @@ spec: - type: Resource resource: name: cpu - targetAverageUtilization: 50 + target: + type: Utilization + averageUtilization: 50 status: observedGeneration: 1 lastScaleTime: @@ -204,8 +206,9 @@ status: - type: Resource resource: name: cpu - currentAverageUtilization: 0 - currentAverageValue: 0 + current: + averageUtilization: 0 + averageValue: 0 ``` Notice that the `targetCPUUtilizationPercentage` field has been replaced with an array called `metrics`. @@ -215,8 +218,8 @@ the only other supported resource metric is memory. These resources do not chan to cluster, and should always be available, as long as the `metrics.k8s.io` API is available. You can also specify resource metrics in terms of direct values, instead of as percentages of the -requested value. To do so, use the `targetAverageValue` field instead of the `targetAverageUtilization` -field. +requested value, by using a `target` type of `AverageValue` instead of `AverageUtilization`, and +setting the corresponding `target.averageValue` field instead of the `target.averageUtilization`. There are two other types of metrics, both of which are considered *custom metrics*: pod metrics and object metrics. These metrics may have names which are cluster specific, and require a more @@ -224,31 +227,40 @@ advanced cluster monitoring setup. The first of these alternative metric types is *pod metrics*. These metrics describe pods, and are averaged together across pods and compared with a target value to determine the replica count. -They work much like resource metrics, except that they *only* have the `targetAverageValue` field. +They work much like resource metrics, except that they *only* support a `target` type of `AverageValue`. Pod metrics are specified using a metric block like this: ```yaml type: Pods pods: - metricName: packets-per-second - targetAverageValue: 1k + metric: + name: packets-per-second + target: + type: AverageValue + averageValue: 1k ``` -The second alternative metric type is *object metrics*. These metrics describe a different -object in the same namespace, instead of describing pods. Note that the metrics are not -fetched from the object -- they simply describe it. Object metrics do not involve averaging, -and look like this: +The second alternative metric type is *object metrics*. These metrics describe a different +object in the same namespace, instead of describing pods. The metrics are not necessarily +fetched from the object; they only describe it. Object metrics support `target` types of +both `Value` and `AverageValue`. With `Value`, the target is compared directly to the returned +metric from the API. With `AverageValue`, the value returned from the custom metrics API is divided +by the number of pods before being compared to the target. The following example is the YAML +representation of the `requests-per-second` metric. ```yaml type: Object object: - metricName: requests-per-second - target: + metric: + name: requests-per-second + describedObject: apiVersion: extensions/v1beta1 kind: Ingress name: main-route - targetValue: 2k + target: + type: Value + value: 2k ``` If you provide multiple such metric blocks, the HorizontalPodAutoscaler will consider each metric in turn. @@ -275,19 +287,25 @@ spec: - type: Resource resource: name: cpu - targetAverageUtilization: 50 + target: + kind: AverageUtilization + averageUtilization: 50 - type: Pods pods: - metricName: packets-per-second + metric: + name: packets-per-second targetAverageValue: 1k - type: Object object: - metricName: requests-per-second - target: + metric: + name: requests-per-second + describedObject: apiVersion: extensions/v1beta1 kind: Ingress name: main-route - targetValue: 10k + target: + kind: Value + value: 10k status: observedGeneration: 1 lastScaleTime: @@ -297,14 +315,47 @@ status: - type: Resource resource: name: cpu - currentAverageUtilization: 0 - currentAverageValue: 0 + current: + averageUtilization: 0 + averageValue: 0 + - type: Object + object: + metric: + name: requests-per-second + describedObject: + apiVersion: extensions/v1beta1 + kind: Ingress + name: main-route + current: + value: 10k ``` Then, your HorizontalPodAutoscaler would attempt to ensure that each pod was consuming roughly 50% of its requested CPU, serving 1000 packets per second, and that all pods behind the main-route Ingress were serving a total of 10000 requests per second. +### Autoscaling on more specific metrics + +Many metrics pipelines allow you to describe metrics either by name or by a set of additional +descriptors called _labels_. For all non-resource metric types (pod, object, and external, +described below), you can specify an additional label selector which is passed to your metric +pipeline. For instance, if you collect a metric `http_requests` with the `verb` +label, you can specify the following metric block to scale only on GET requests: + +```yaml +type: Object +object: + metric: + name: `http_requests` + selector: `verb=GET` +``` + +This selector uses the same syntax as the full Kubernetes label selectors. The monitoring pipeline +determines how to collapse multiple series into a single value, if the name and selector +match multiple series. The selector is additive, and cannot select metrics +that describe objects that are **not** the target object (the target pods in the case of the `Pods` +type, and the described object in the case of the `Object` type). + ### Autoscaling on metrics not related to Kubernetes objects Applications running on Kubernetes may need to autoscale based on metrics that don't have an obvious @@ -312,12 +363,14 @@ relationship to any object in the Kubernetes cluster, such as metrics describing no direct correlation to Kubernetes namespaces. In Kubernetes 1.10 and later, you can address this use case with *external metrics*. -Using external metrics requires a certain level of knowledge of your monitoring system, and it requires a cluster -monitoring setup similar to one required for using custom metrics. With external metrics, you can autoscale -based on any metric available in your monitoring system by providing a `metricName` field in your -HorizontalPodAutoscaler manifest. Additionally you can use a `metricSelector` field to limit which -metrics' time series you want to use for autoscaling. If multiple time series are matched by `metricSelector`, +Using external metrics requires knowledge of your monitoring system; the setup is +similar to that required when using custom metrics. External metrics allow you to autoscale your cluster +based on any metric available in your monitoring system. Just provide a `metric` block with a +`name` and `selector`, as above, and use the `External` metric type instead of `Object`. +If multiple time series are matched by the `metricSelector`, the sum of their values is used by the HorizontalPodAutoscaler. +External metrics support both the `Value` and `AverageValue` target types, which function exactly the same +as when you use the `Object` type. For example if your application processes tasks from a hosted queue service, you could add the following section to your HorizontalPodAutoscaler manifest to specify that you need one worker per 30 outstanding tasks. @@ -325,20 +378,21 @@ section to your HorizontalPodAutoscaler manifest to specify that you need one wo ```yaml - type: External external: - metricName: queue_messages_ready - metricSelector: - matchLabels: - queue: worker_tasks - targetAverageValue: 30 + metric: + name: queue_messages_ready + selector: "queue=worker_tasks" + target: + type: AverageValue + averageValue: 30 ``` -If your metric describes work or resources that can be divided between autoscaled pods the `targetAverageValue` -field describes how much of that work each pod can handle. Instead of using the `targetAverageValue` field, you could use the -`targetValue` to define a desired value of your external metric. +When possible, it's preferrable to use the custom metric target types instead of external metrics, since it's +easier for cluster administrators to secure the custom metrics API. The external metrics API potentially allows +access to any metric, so cluster administrators should take care when exposing it. ## Appendix: Horizontal Pod Autoscaler Status Conditions -When using the `autoscaling/v2beta1` form of the HorizontalPodAutoscaler, you will be able to see +When using the `autoscaling/v2beta2` form of the HorizontalPodAutoscaler, you will be able to see *status conditions* set by Kubernetes on the HorizontalPodAutoscaler. These status conditions indicate whether or not the HorizontalPodAutoscaler is able to scale, and whether or not it is currently restricted in any way. @@ -378,6 +432,16 @@ was capped by the maximum or minimum of the HorizontalPodAutoscaler. This is an you may wish to raise or lower the minimum or maximum replica count constraints on your HorizontalPodAutoscaler. +## Appendix: Quantities + +All metrics in the HorizontalPodAutoscaler and metrics APIs are specified using +a special whole-number notation known in Kubernetes as a *quantity*. For example, +the quantity `10500m` would be written as `10.5` in decimal notation. The metrics APIs +will return whole numbers without a suffix when possible, and will generally return +quantities in milli-units otherwise. This means you might see your metric value fluctuate +between `1` and `1500m`, or `1` and `1.5` when written in decimal notation. See the +[glossary entry on quantities](/docs/reference/glossary/quantity.md) for more information. + ## Appendix: Other possible scenarios ### Creating the autoscaler declaratively diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md index 393708cab9..078d2c537f 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md @@ -55,15 +55,19 @@ or the custom metrics API (for all other metrics). the number of desired replicas. Please note that if some of the pod's containers do not have the relevant resource request set, - CPU utilization for the pod will not be defined and the autoscaler will not take any action - for that metric. See the [autoscaling algorithm design document](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#autoscaling-algorithm) for further - details about how the autoscaling algorithm works. + CPU utilization for the pod will not be defined and the autoscaler will + not take any action for that metric. See the [algorithm + details](#algorithm-details) section below for more information about + how the autoscaling algorithm works. * For per-pod custom metrics, the controller functions similarly to per-pod resource metrics, except that it works with raw values, not utilization values. -* For object metrics, a single metric is fetched (which describes the object - in question), and compared to the target value, to produce a ratio as above. +* For object metrics and external metrics, a single metric is fetched, which describes + the object in question. This metric is compared compared to the target + value, to produce a ratio as above. In the `autoscaling/v2beta2` API + version, this value can optionally be divided by the number of pods before the + comparison is made. The HorizontalPodAutoscaler normally fetches metrics from a series of aggregated APIs (`metrics.k8s.io`, `custom.metrics.k8s.io`, and `external.metrics.k8s.io`). The `metrics.k8s.io` API is usually provided by @@ -83,6 +87,85 @@ by using the scale sub-resource. Scale is an interface that allows you to dynami each of their current states. More details on scale sub-resource can be found [here](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#scale-subresource). +### Algorithm Details + +From the most basic perspective, the Horizontal Pod Autoscaler controller +operates on the ratio between desired metric value and current metric +value: + +``` +desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )] +``` + +For example, if the current metric value is `200m`, and the desired value +is `100m`, the number of replicas will be doubled, since `200.0 / 100.0 == +2.0` If the the current value is instead `50m`, we'll halve the number of +replicas, since `50.0 / 100.0 == 0.5`. We'll skip scaling if the ratio is +sufficiently close to 1.0 (within a globally-configurable tolerance, from +the `--horizontal-pod-autoscaler-tolerance` flag, which defaults to 0.1). + +When a `targetAverageValue` or `targetAverageUtilization` is specified, +the `currentMetricValue` is computed by taking the average of the given +metric across all Pods in the HorizontalPodAutoscaler's scale target. +Before checking the tolerance and deciding on the final values, we take +pod readiness and missing metrics into consideration, however. + +All Pods with a deletion timestamp set (i.e. Pods in the process of being +shut down) and all failed Pods are discarded. + +If a particular Pod is missing metrics, it is set aside for later; Pods +with missing metrics will be used to adjust the final scaling amount. + +When scaling on CPU, if any pod has yet to become ready (i.e. it's still +initializing) *or* the most recent metric point for the pod was before it +became ready, that pod is set aside as well. + +Due to technical constraints, the HorizontalPodAutoscaler controller +cannot exactly determine the first time a pod becomes ready when +determinining whether to set aside certain CPU metrics. Instead, it +considers a Pod "not yet ready" if it's unready and transitioned to +unready within a short, configurable window of time since it started. +This value is configured with the `--horizontal-pod-autoscaler-initial-readiness-delay` flag, and its default is 30 +seconds. Once a pod has become ready, it considers any transition to +ready to be the first if it occurred within a longer, configurable time +since it started. This value is configured with the `--horizontal-pod-autoscaler-cpu-initialization-period` flag, and its +default is 5 minutes. + +The `currentMetricValue / desiredMetricValue` base scale ratio is then +calculated using the remaining pods not set aside or discarded from above. + +If there were any missing metrics, we recompute the average more +conservatively, assuming those pods were consuming 100% of the desired +value in case of a scale down, and 0% in case of a scale up. This dampens +the magnitude of any potential scale. + +Futhermore, if any not-yet-ready pods were present, and we would have +scaled up without factoring in missing metrics or not-yet-ready pods, we +conservatively assume the non-yet-ready pods are consuming 0% of the +desired metric, further dampening the magnitude of a scale up. + +After factoring in the not-yet-ready pods and missing metrics, we +recalculate the usage ratio. If the new ratio reverses the scale +direction, or is within the tolerance, we skip scaling. Otherwise, we use +the new ratio to scale. + +Note that the *original* value for the average utilization is reported +back via the HorizontalPodAutoscaler status, without factoring in the +not-yet-ready pods or missing metrics, even when the new usage ratio is +used. + +If multiple metrics are specified in a HorizontalPodAutoscaler, this +calculation is done for each metric, and then the largest of the desired +replica counts is chosen. If any of those metrics cannot be converted +into a desired replica count (e.g. due to an error fetching the metrics +from the metrics APIs), scaling is skipped. + +Finally, just before HPA scales the target, the scale reccomendation is recorded. The +controller considers all reccomendations within a configurable window choosing the +highest recommendation from within that window. This value can be configured using the `--horizontal-pod-autoscaler-downscale-stabilization-window` flag, which defaults to 5 minutes. +This means that scaledowns will occur gradually, smothing out the impact of rapidly +fluctuating metric values. + ## API Object The Horizontal Pod Autoscaler is an API resource in the Kubernetes `autoscaling` API group. @@ -90,7 +173,7 @@ The current stable version, which only includes support for CPU autoscaling, can be found in the `autoscaling/v1` API version. The beta version, which includes support for scaling on memory and custom metrics, -can be found in `autoscaling/v2beta1`. The new fields introduced in `autoscaling/v2beta1` +can be found in `autoscaling/v2beta2`. The new fields introduced in `autoscaling/v2beta2` are preserved as annotations when working with `autoscaling/v1`. More details about the API object can be found at @@ -131,16 +214,14 @@ dynamic nature of the metrics evaluated. This is sometimes referred to as *thras Starting from v1.6, a cluster operator can mitigate this problem by tuning the global HPA settings exposed as flags for the `kube-controller-manager` component: +Starting from v1.12, a new algorithmic update removes the need for the +upscale delay. + - `--horizontal-pod-autoscaler-downscale-delay`: The value for this option is a duration that specifies how long the autoscaler has to wait before another downscale operation can be performed after the current one has completed. The default value is 5 minutes (`5m0s`). -- `--horizontal-pod-autoscaler-upscale-delay`: The value for this option is a - duration that specifies how long the autoscaler has to wait before another - upscale operation can be performed after the current one has completed. - The default value is 3 minutes (`3m0s`). - {{< note >}} **Note**: When tuning these parameter values, a cluster operator should be aware of the possible consequences. If the delay (cooldown) value is set too long, there @@ -151,7 +232,7 @@ may keep thrashing as usual. ## Support for multiple metrics -Kubernetes 1.6 adds support for scaling based on multiple metrics. You can use the `autoscaling/v2beta1` API +Kubernetes 1.6 adds support for scaling based on multiple metrics. You can use the `autoscaling/v2beta2` API version to specify multiple metrics for the Horizontal Pod Autoscaler to scale on. Then, the Horizontal Pod Autoscaler controller will evaluate each metric, and propose a new scale based on that metric. The largest of the proposed scales will be used as the new scale. @@ -164,7 +245,7 @@ custom metrics is still available, these metrics will not be available for use b annotations for specifying which custom metrics to scale on are no longer honored by the Horizontal Pod Autoscaler controller. Kubernetes 1.6 adds support for making use of custom metrics in the Horizontal Pod Autoscaler. -You can add custom metrics for the Horizontal Pod Autoscaler to use in the `autoscaling/v2beta1` API. +You can add custom metrics for the Horizontal Pod Autoscaler to use in the `autoscaling/v2beta2` API. Kubernetes then queries the new custom metrics API to fetch the values of the appropriate custom metrics. See [Support for metrics APIs](#support-for-metrics-APIs) for the requirements. diff --git a/content/en/examples/admin/dns/dns-horizontal-autoscaler.yaml b/content/en/examples/admin/dns/dns-horizontal-autoscaler.yaml index 3c7eb40ffe..5e6d55a6b2 100644 --- a/content/en/examples/admin/dns/dns-horizontal-autoscaler.yaml +++ b/content/en/examples/admin/dns/dns-horizontal-autoscaler.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: kube-dns-autoscaler + name: dns-autoscaler namespace: kube-system labels: - k8s-app: kube-dns-autoscaler + k8s-app: dns-autoscaler spec: selector: matchLabels: - k8s-app: kube-dns-autoscaler + k8s-app: dns-autoscaler template: metadata: labels: - k8s-app: kube-dns-autoscaler + k8s-app: dns-autoscaler spec: containers: - name: autoscaler @@ -24,7 +24,7 @@ spec: command: - /cluster-proportional-autoscaler - --namespace=kube-system - - --configmap=kube-dns-autoscaler + - --configmap=dns-autoscaler - --target= # When cluster is using large nodes(with more cores), "coresPerReplica" should dominate. # If using small nodes, "nodesPerReplica" should dominate. diff --git a/resources/OWNERS b/resources/OWNERS deleted file mode 100644 index 87ee22388b..0000000000 --- a/resources/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -# Allow CSS/SASS updates from blog and case studies owners -options: - no_parent_owners: false -reviewers: - - alexcontini -approvers: - - alexcontini - \ No newline at end of file diff --git a/resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.content b/resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.content new file mode 100644 index 0000000000..eec7d2558f --- /dev/null +++ b/resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.content @@ -0,0 +1 @@ +html,body{margin:0;padding:0}input,button{outline:0}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:roboto,sans-serif;background:0 0;margin:0;border:0}body{font-family:roboto,sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:0}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20%/3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%,-50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:0 0}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:400}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:'';bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,.1);content:''}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:700}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:'';right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:0;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px!important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:roboto,sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:0 0;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:roboto mono,monospace;vertical-align:baseline;font-size:14px;font-weight:700;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:roboto mono,monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-family:inherit;font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0!important}#docsContent .includecode th{text-align:right!important;padding:10px!important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff!important;background-color:transparent!important}#docsContent .includecode pre{margin:0!important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:400}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent a{text-decoration:underline}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-image:url(/images/kub_video_banner_homepage.jpg);background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%,-50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%,-50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:80vw;height:45vw;max-width:142.22222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-color:#f7f7f7;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block!important}#feature-state-dialog-link{text-decoration:none!important;padding:5px!important}#feature-state-dialog-link a:visited{color:#454545!important}#feature-state-dialog-link a code{display:inline-block!important;box-sizing:border-box!important;background-color:#f7f7f7!important;color:#303030!important;font-family:roboto mono,monospace!important;vertical-align:baseline!important;font-size:14px!important;font-weight:700!important;padding:0 4px!important}#feature-state-dialog{background:#fff!important;border:1px solid #ddd!important;padding:.5em 1em!important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc!important;margin:4px 12px!important}#feature-state-dialog p{margin:8px 0!important}#feature-state-dialog code{display:inline-block!important;box-sizing:border-box!important;background-color:#f7f7f7!important;color:#303030!important;font-family:roboto mono,monospace!important;vertical-align:baseline!important;font-size:14px!important;font-weight:700!important;padding:0 4px!important}.ui-dialog{background:#f7f7f7!important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:roboto mono,monospace;vertical-align:baseline;font-size:14px;font-weight:700;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:roboto mono,monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0!important}.ui-dialog-content .includecode th{text-align:right!important;padding:10px!important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff!important;background-color:transparent!important}.ui-dialog-content .includecode pre{margin:0!important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:400}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7!important}.ui-widget-header{background:0 0!important;background-color:transparent!important;border:0!important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0!important;list-style:none!important;margin-bottom:0!important;margin-left:4px!important}.ui-tabs-panel ul li{list-style:disc!important}.ui-tabs-panel ol li{list-style:decimal!important}.ui-widget-content{border:0!important}.ui-widget-content table{margin:0!important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc!important}.ui-tabs-anchor{text-decoration:none!important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;padding:125px 10px 15px;margin-bottom:30px;background-position:top center;background-repeat:no-repeat}#home #caseStudiesWrapper div:nth-child(1){background-image:url(/images/community_logos/pearson_logo.png)}#home #caseStudiesWrapper div:nth-child(2){background-image:url(/images/community_logos/box_logo.png)}#home #caseStudiesWrapper div:nth-child(3){background-image:url(/images/community_logos/ebay_logo.png)}#home #caseStudiesWrapper div:nth-child(4){background-image:url(/images/community_logos/wikimedia_foundation_logo.png)}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:0;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0!important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none!important;cursor:pointer;color:#00c;margin-right:8px}hr{background-color:#999}h2{margin-bottom:15px!important}.subhead{padding-bottom:2%!important;padding-top:0%!important}.details{margin-left:1.9%;padding-right:5%;font-size:16px!important;padding-bottom:2%!important}.section1{margin-bottom:3%}.section1 .cols{width:80%!important;margin-left:6.8%;padding-top:1.5%}.section1 .cols .col1{width:52%!important;font-weight:300!important}.section1 .cols .col2{width:46%!important}.banner2text{width:63%;padding-top:10%;padding-left:0%!important;float:initial!important;text-align:center;margin:0 auto;position:relative}.banner3text,.banner4text,.banner5text{width:63%;padding-left:0%!important;float:initial!important;text-align:center;margin:0 auto;position:relative}.fullcol{float:initial!important}body footer{background-color:#585858!important}.section1{float:left!important}.banner1{padding-left:11.9%!important}.banner2{float:initial!important;padding-bottom:2%!important}footer{padding:0% 7%}.banner4,.banner3,.banner5{float:initial!important}@media screen and (max-width:910px){.banner2text{width:47%;padding-top:45%}.details{margin-left:0%;margin-bottom:3%}.subhead{padding-bottom:0%!important;padding-top:0%!important}.banner3{width:100%!important}}@media screen and (max-width:780px){.section1 .cols{width:100%!important;margin-left:0%;padding-top:5%}.section1 .cols .col1,.section1 .cols .col2{width:100%!important;margin-left:0%!important}.fullcol{width:90%!important;margin-left:5%!important}.banner1{padding-left:10%!important;margin-bottom:6%!important}.banner2text{padding-top:60%!important;padding-bottom:2%!important}}@media screen and (min-width:750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20%/3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:400}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width:1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1e3px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1e3px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-image:url(../images/kub_video_banner_homepage.jpg);background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width:1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width:456px){#vendorStrip li+li{margin-left:20px}} \ No newline at end of file diff --git a/resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.json b/resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.json new file mode 100644 index 0000000000..a2c5ded24a --- /dev/null +++ b/resources/_gen/assets/sass/sass/case_study_styles.sass_ba3494e18e2339acfc9f811090f8a3d1.json @@ -0,0 +1 @@ +{"Target":"css/styles.min.55d1e72cc5418eace24df1a4450abe45a6ee9111f9814269bc6540e8c49d2399.css","MediaType":"text/css","Data":{"Integrity":"sha256-VdHnLMVBjqziTfGkRQq+RabukRH5gUJpvGVA6MSdI5k="}} \ No newline at end of file diff --git a/resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.content b/resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.content new file mode 100644 index 0000000000..f72db6b2e7 --- /dev/null +++ b/resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.content @@ -0,0 +1,1937 @@ +html, body { + margin: 0; + padding: 0; } + +input, button { + outline: none; } + +button { + cursor: pointer; } + +ul, li { + list-style: none; } + +ul { + margin: 0; + padding: 0; } + +a { + text-decoration: none; } + +.clear { + display: block; + clear: both; } + +.light-text { + color: white; } + +.right { + float: right; } + +.left { + float: left; } + +.center { + text-align: center; } + +*, .button { + box-sizing: border-box; + font-family: "Roboto", sans-serif; + background: none; + margin: 0; + border: 0; } + +body { + font-family: "Roboto", sans-serif; } + +h1, h2, h5, p { + font-weight: 300; } + +h3, h4 { + font-weight: 400; } + +html, body { + margin: 0; + padding: 0; } + +input, button { + outline: none; } + +button { + cursor: pointer; } + +ul, li { + list-style: none; } + +ul { + margin: 0; + padding: 0; } + +a { + text-decoration: none; } + +.clear { + display: block; + clear: both; } + +.light-text { + color: white; } + +.right { + float: right; } + +.left { + float: left; } + +.center { + text-align: center; } + +h1 { + font-size: 32px; + line-height: 40px; } + +h2 { + font-size: 28px; + line-height: 60px; } + +h3 { + font-size: 24px; + line-height: 32px; } + +h4 { + font-size: 20px; + line-height: 40px; } + +h5 { + font-size: 16px; + line-height: 36px; } + +p { + font-size: 14px; + line-height: 22px; } + +section, header, #vendorStrip { + padding-left: 20px; + padding-right: 20px; } + section main, header main, #vendorStrip main { + width: 100%; + max-width: 100%; } + +header { + height: 80px; } + +.nav-buttons { + height: 80px; + line-height: 80px; } + .nav-buttons .button + * { + margin-left: 30px; } + +#hamburger { + width: 50px; + height: 50px; } + +#mainNav { + padding: 140px 0 30px; } + #mainNav h5 { + margin-bottom: 1em; } + #mainNav h3 { + margin-bottom: 0.6em; } + #mainNav .nav-box { + width: 20%; } + #mainNav .nav-box + .nav-box { + margin-left: calc(20% / 3); } + #mainNav main + main { + margin-top: 60px; } + #mainNav .left .button { + height: 50px; + line-height: 50px; + font-size: 18px; } + +.open-nav #tryKubernetes, .y-enough #tryKubernetes { + margin-left: 30px; } + +#hero { + padding-top: 80px; } + +#docs #hero h1, #docs #hero h5 { + padding-left: 20px; + padding-right: 20px; } + +#vendorStrip { + height: 88px; + line-height: 88px; + font-size: 16px; } + +body { + background-color: white; } + +section { + position: relative; + background-color: white; } + +section main, header main, footer main { + position: relative; + margin: auto; } + +p { + font-size: 14px; + font-weight: 400; } + +.button { + display: inline-block; + border-radius: 6px; + padding: 0 20px; + line-height: 40px; + color: white; + background-color: #3371e3; + text-decoration: none; } + +#cellophane { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: none; } + +header { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 8888; + background-color: transparent; + box-shadow: 0 0 0 transparent; + overflow: hidden; + transition: 0.3s; + text-align: center; } + +.logo { + position: relative; + float: left; + display: block; + width: 180px; + height: 88px; + top: 0; + left: 0; + transform: none; + background-image: url(/images/nav_logo.svg); + background-size: contain; + background-position: center center; + background-repeat: no-repeat; } + +#docs .flyout-button { + position: fixed; + top: 20px; + left: 20px; + width: 50px; + height: 50px; + background-image: url(/images/toc_icon.png); + background-position: center center; + background-repeat: no-repeat; + background-size: auto; + border-radius: 50%; + transition: 0.3s; + z-index: 99999; } + +#docs.open-nav .flyout-button { + display: none; } + +#docs .logo { + position: absolute; + top: 40px; + left: 50%; + transform: translate(-50%, -50%); + display: block; + width: 45px; + height: 44px; + background-image: url(/images/favicon.png); } + +#docs.flip-nav .flyout-button { + background-image: url(/images/toc_icon_grey.png); } + +.nav-buttons { + float: right; } + +#viewDocs, #tryKubernetes { + display: none; } + +#viewDocs { + border: 2px solid white; + background-color: transparent; + transition: 0.3s; } + #viewDocs:hover { + background-color: white; + color: #303030; } + +#tryKubernetes { + width: 0; + padding: 0 0; + border: 1px solid transparent; + background-color: transparent; + text-align: center; + white-space: nowrap; + vertical-align: middle; + overflow: hidden; + transition: 0.3s; } + +#hamburger { + display: inline-block; + position: relative; + vertical-align: middle; + padding: 0; + border: 0; + background: none; } + #hamburger div, #hamburger:before, #hamburger:after { + position: absolute; + left: 15%; + width: 70%; + height: 2px; + background-color: #3371e3; + transition: 0.3s; + content: ""; } + #hamburger div { + top: calc(50% - 1px); } + #hamburger:before { + top: 24%; } + #hamburger:after { + bottom: 24%; } + #hamburger:hover div, #hamburger:hover:before, #hamburger:hover:after { + background-color: white; } + +#mainNav h5 { + color: #3371e3; + font-weight: normal; } + +#mainNav main { + white-space: nowrap; + overflow: hidden; + clear: both; } + +#mainNav .nav-box { + float: left; + white-space: normal; } + +#mainNav h3 a { + color: #3371e3; + text-decoration: none; } + +ul.global-nav { + display: none; } + ul.global-nav li { + display: inline-block; + margin-right: 14px; } + ul.global-nav li a { + color: #fff; + font-weight: 400; + padding: 0; + position: relative; } + ul.global-nav li a.active:after { + position: absolute; + width: 100%; + height: 2px; + content: ''; + bottom: -4px; + left: 0; + background: #fff; } + ul.global-nav li a .ui-icon { + filter: brightness(0) invert(1); } + ul.global-nav li ul { + display: none; + position: fixed; + top: 40px; + text-align: left; } + ul.global-nav li ul li { + display: block; + height: 28px; } + ul.global-nav li ul li a { + background: #303030; + color: #fff; + padding: 7px; } + ul.global-nav li ul li:last-child a { + border-radius: 7px; } + ul.global-nav li:hover ul { + display: block; } + +.flip-nav ul.global-nav li a, +.open-nav ul.global-nav li a { + color: #303030; } + +.flip-nav ul.global-nav li a .ui-icon { + filter: brightness(0); } + +.flip-nav ul.global-nav li ul li a { + background: #fff; + color: #303030; } + +.flip-nav ul.global-nav li a.active:after, +.flip-nav ul.global-nav li ul li a.active:after, +.open-nav ul.global-nav li a.active:after { + background: #3371e3; } + +.flip-nav header { + background-color: white; } + +.open-nav body { + overflow: hidden; } + +.open-nav #cellophane { + display: block; + z-index: 9998; } + +.open-nav header { + background-color: #e8e8e8; + z-index: 9999; } + +.open-nav #hamburger div { + opacity: 0; } + +.open-nav #hamburger:before, .open-nav #hamburger:after { + left: 12px; + transform-origin: 0 1px; } + +.open-nav #hamburger:before { + transform: rotate(45deg); } + +.open-nav #hamburger:after { + transform: rotate(-45deg); } + +.open-nav #tryKubernetes, .y-enough #tryKubernetes { + width: 150px; + background-color: #3371e3; + border-color: #3371e3; } + +.flip-nav header, .open-nav header { + box-shadow: 0 1px 2px #4c4c4c; } + +.flip-nav #viewDocs, .open-nav #viewDocs { + border-color: #303030; + color: #303030; } + .flip-nav #viewDocs:hover, .open-nav #viewDocs:hover { + border-color: #3371e3; + background-color: #3371e3; + color: white; } + +.flip-nav #hamburger:hover div, .flip-nav #hamburger:hover:before, .flip-nav #hamburger:hover:after, .open-nav #hamburger:hover div, .open-nav #hamburger:hover:before, .open-nav #hamburger:hover:after { + background-color: #303030; } + +#hero { + background-image: url(/images/texture.png); + background-color: #303030; + text-align: center; + padding-left: 0; + padding-right: 0; + margin-bottom: 0; + position: relative; } + #hero.bot-bar:after { + display: block; + margin-bottom: -20px; + height: 8px; + width: 100%; + background-color: rgba(255, 255, 255, 0.1); + content: ''; } + #hero.no-sub h5 { + display: none; } + #hero.no-sub h1 { + margin-bottom: 20px; } + +#home #hero:after { + display: none; } + +#vendorStrip { + position: relative; + background-color: rgba(255, 255, 255, 0.1); + font-weight: 100; + white-space: nowrap; + text-align: center; } + #vendorStrip li a { + color: rgba(255, 255, 255, 0.5); } + #vendorStrip li a.YAH { + color: white; + position: relative; } + +footer { + width: 100%; + background-image: url(/images/texture.png); + background-color: #303030; } + footer main { + padding: 20px 0; } + footer nav a { + width: 100%; + text-align: center; + display: inline-block; + margin: 10px 0; + font-size: 24px; + font-weight: 300; + color: white; + text-decoration: none; } + footer .social { + margin: 20px 0; } + footer .social div { + text-align: center; + margin-bottom: 20px; } + footer .social div:last-child { + margin: 30px 0; } + footer .social span { + display: block; + margin-bottom: 8px; } + footer .social input { + text-align: center; } + +#search, #wishField { + background-color: transparent; + padding: 10px; + font-size: 16px; + font-weight: 100; + color: white; + border: 1px solid white; + transition: 0.3s; } + #search:focus, #wishField:focus { + background-color: #f7f7f7; + color: #303030; } + +.social a { + display: inline-block; + background-image: url(/images/social_sprite.png); + background-repeat: no-repeat; + background-size: auto; + width: 50px; + height: 50px; + border-radius: 5px; + margin-right: 10px; } + .social a:hover { + background-color: #fff; } + .social a span { + position: absolute; + display: block; + height: 0; + overflow: hidden; } + .social a.button { + background-image: none; + width: auto; + height: auto; } + .social a.button:hover { + color: #3371e3; } + +a.twitter { + background-position: 0 0; } + a.twitter:hover { + background-position: 0 100%; } + +a.stack-overflow { + background-position: -50px 0; } + a.stack-overflow:hover { + background-position: -50px 100%; } + +a.slack { + background-position: -100px 0; } + a.slack:hover { + background-position: -100px 100%; } + +a.github { + background-position: -150px 0; } + a.github:hover { + background-position: -150px 100%; } + +a.mailing-list { + background-position: -200px 0; } + a.mailing-list:hover { + background-position: -200px 100%; } + +a.calendar { + background-position: -250px 0; } + a.calendar:hover { + background-position: -250px 100%; } + +#viewDocs { + display: none; } + +section { + background-color: white; } + +#hero { + background-color: #303030; } + #hero h5 { + margin: 20px 0; + line-height: 28px; } + +#vendorStrip { + position: relative; } + #vendorStrip ul { + float: left; } + #vendorStrip li { + display: inline-block; + height: 100%; } + #vendorStrip a { + display: block; + height: 100%; + color: white; + font-size: 0.75em; + font-weight: bold; } + #vendorStrip li + li { + margin-left: 0; } + +#docs #vendorStrip { + line-height: 44px; } + #docs #vendorStrip ul { + float: none; } + #docs #vendorStrip #searchBox { + float: none; + display: block; + width: 80%; + margin: 0 auto; + height: 44px; + line-height: 44px; + position: relative; } + #docs #vendorStrip #searchBox:before { + position: absolute; + width: 15px; + height: 15px; + content: ''; + right: 8px; + top: 7px; + background-image: url(/images/search-icon.svg); + background-repeat: no-repeat; + background-size: 100% 100%; + z-index: 1; } + #docs #vendorStrip #search { + width: 100%; + padding: 0 10px; + height: 30px; + line-height: 30px; + font-size: 16px; + vertical-align: top; + background: #fff; + border: none; + border-radius: 4px; + position: relative; } + +#encyclopedia { + position: relative; + padding: 50px 20px 20px 20px; + overflow: hidden; + font-size: 14px; } + #encyclopedia > div { + height: 100%; } + +#docsToc { + position: fixed; + background-color: white; + top: 0; + left: 0; + width: 0; + height: 100vh; + overflow: hidden; + padding: 50px 0; + z-index: 999999; + transition: 0.3s; } + #docsToc .yah > .title { + background-color: #f7f7f7; + border-left: 3px solid #3371e3; + padding: 7.5px 10px 7.5px 18px; + margin-left: -3px; + color: #3371e3; } + +.open-toc body { + overflow: hidden; } + +.open-toc #docsToc { + padding: 50px 20px; + width: 400px; + max-width: 100vw; + overflow-y: auto; } + +.pi-accordion > .container:first-child > .item:first-child > .title:first-child { + padding-left: 0; + font-size: 1.5em; + font-weight: 700; } + +.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child { + margin-left: -20px !important; } + +.pi-accordion .item { + overflow: hidden; } + +.pi-accordion .title { + color: #303030; + position: relative; + padding: 7.5px 10px 7.5px 18px; + cursor: pointer; + transition: 0.3s; } + .pi-accordion .title:hover { + color: #3371e3; } + +.pi-accordion a.item > .title { + color: black; } + .pi-accordion a.item > .title:hover { + color: #3371e3; } + +.pi-accordion div.item > .title:before { + content: ""; + position: absolute; + top: 12px; + left: 2px; + border-style: solid; + border-width: 5px 0 5px 8px; + border-color: transparent transparent transparent #3371e3; + transform: rotate(0deg); + transition: 0.3s; } + +.pi-accordion .wrapper { + position: relative; + width: 100%; + transition: height 0.3s; } + +.pi-accordion .content { + padding-left: 20px; + opacity: 0; + transition: 0.3s; } + +.pi-accordion .item.on > .title:before { + transform: rotate(90deg); } + +.pi-accordion .item.on > .wrapper > .content { + opacity: 1; } + +dt { + margin-bottom: 8px; } + +dd { + margin-bottom: 16px; } + +.pi-pushmenu { + display: none; + position: fixed; + top: 0; + width: 100%; + height: 100%; + opacity: 0; + transition: opacity 0.3s; } + .pi-pushmenu.on { + opacity: 1; } + .pi-pushmenu .overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); } + .pi-pushmenu .sled { + position: absolute; + top: 0; + width: 0; + height: 100%; + background-color: white; + overflow: auto; + transition: 0.3s; } + .pi-pushmenu.on .sled { + width: 400px; + max-width: 100vw; } + .pi-pushmenu .top-bar { + height: 0; + line-height: 60px; + background-color: #444; } + .pi-pushmenu ul { + margin-top: 25px; } + .pi-pushmenu li { + position: relative; + display: block; + width: 100%; + min-height: 45px; + padding: 0 60px 0 20px; + border-bottom: 1px solid #cccccc; } + .pi-pushmenu a { + display: inline-block; + width: 100%; + height: 45px; + line-height: 45px; + font-family: "Roboto", sans-serif; + font-size: 20px; + color: #3371e3; } + .pi-pushmenu .button { + background: none; + padding: 0; } + .pi-pushmenu ul ul { + padding: 0 20px; } + .pi-pushmenu ul ul li { + min-height: 40px; } + .pi-pushmenu ul ul a { + height: 40px; + line-height: 40px; + font-size: 18px; + color: #555555; } + +.push-menu-close-button { + position: absolute; + top: 0; + right: 0; + width: 50px; + height: 50px; } + .push-menu-close-button:before, .push-menu-close-button:after { + content: ""; + position: absolute; + top: calc(50% - 1px); + left: 25%; + width: 50%; + height: 2px; + background-color: black; } + .push-menu-close-button:before { + transform: rotate(45deg); } + .push-menu-close-button:after { + transform: rotate(-45deg); } + +#docsContent { + position: relative; + float: right; + width: 100%; } + #docsContent * + h2, #docsContent * + h3, #docsContent * + h4, #docsContent * + h5, #docsContent * + h6 { + margin-top: 30px; } + #docsContent h1, #docsContent h2, #docsContent h3, #docsContent h4, #docsContent h5, #docsContent h6 { + line-height: normal; + font-weight: 500; + margin-bottom: 30px; + padding-bottom: 10px; } + #docsContent h1:before, #docsContent h2:before, #docsContent h3:before, #docsContent h4:before, #docsContent h5:before, #docsContent h6:before { + display: block; + content: " "; + margin-top: -100px; + height: 100px; + visibility: hidden; } + #docsContent h1, #docsContent h2 { + border-bottom: 1px solid #cccccc; } + #docsContent h1 { + font-size: 32px; + padding-right: 60px; } + #docsContent h2 { + font-size: 28px; } + #docsContent h3 { + font-size: 24px; + font-weight: 300; + margin-bottom: 5px; } + #docsContent h4 { + font-size: 20px; + margin-bottom: 0px; } + #docsContent h5, #docsContent h6 { + font-size: 16px; + font-weight: 500; } + #docsContent p { + font-size: 16px; + font-weight: 300; + line-height: 1.75em; } + #docsContent p + p { + margin-top: 10px; } + #docsContent code { + display: inline-block; + box-sizing: border-box; + background-color: #f7f7f7; + color: #303030; + font-family: "Roboto Mono", monospace; + vertical-align: baseline; + font-size: 14px; + font-weight: bold; + padding: 2px 4px; } + #docsContent a code { + color: #3371e3; + text-decoration: underline; } + #docsContent pre .pi, #docsContent pre .s { + margin: 0; + padding: 0; } + #docsContent .highlight code span, #docsContent code, #docsContent pre code { + font-family: "Roboto Mono", monospace; } + #docsContent code, #docsContent pre code { + color: #303030; } + #docsContent pre code { + padding: 0; } + #docsContent pre { + background-color: #f7f7f7; + display: block; + margin: 20px 0; + padding: 15px; + position: relative; + overflow-x: auto; } + #docsContent h1 code, #docsContent h2 code, #docsContent h3 code, #docsContent h4 code, #docsContent h5 code, #docsContent h6 code { + font-family: inherit; + font-size: inherit; + background-color: transparent; } + #docsContent .includecode { + table-layout: fixed; } + #docsContent .includecode, #docsContent .includecode th, #docsContent .includecode td { + padding: 0 !important; } + #docsContent .includecode th { + text-align: right !important; + padding: 10px !important; } + #docsContent .includecode th a, #docsContent .includecode th a code { + color: white !important; + background-color: transparent !important; } + #docsContent .includecode pre { + margin: 0 !important; } + #docsContent ul li { + list-style: disc; } + #docsContent ol li { + list-style: decimal; } + #docsContent ul, #docsContent ol { + margin: 20px 0; + padding-left: 30px; + font-weight: 300; } + #docsContent ul ul, #docsContent ol ol, #docsContent ul ol, #docsContent ol ul { + margin: 0.75em 0; } + #docsContent li { + margin-bottom: 0.75em; + font-size: 16px; + line-height: 1.75em; } + #docsContent table { + width: 100%; + border: 1px solid #ccc; + border-spacing: 0; + margin-top: 30px; + margin-bottom: 30px; } + #docsContent thead, #docsContent tr:nth-child(even) { + background-color: #f7f7f7; } + #docsContent thead { + background-color: #555; + color: white; } + #docsContent th, #docsContent td { + padding: 8px; + text-align: left; + margin: 0; } + #docsContent th { + font-weight: normal; } + #docsContent td { + font-size: 0.85em; } + #docsContent #editPageButton { + position: absolute; + top: -25px; + right: 5px; + width: 50px; + height: 50px; + line-height: 50px; + border-radius: 50%; + white-space: nowrap; + text-indent: 50px; + overflow: hidden; + background: #3371e3 url(/images/icon-pencil.svg) no-repeat; + background-position: 12px 10px; + background-size: 29px 29px; } + #docsContent #markdown-toc, #docsContent #TableOfContents { + margin-bottom: 20px; } + #docsContent #markdown-toc ul, #docsContent #markdown-toc li, #docsContent #TableOfContents ul, #docsContent #TableOfContents li { + list-style: disc; + color: #3371e3; } + #docsContent #markdown-toc ul, #docsContent #TableOfContents ul { + padding: 0 15px; + margin: 0; } + #docsContent #markdown-toc li, #docsContent #TableOfContents li { + padding: 0; + line-height: 1.5em; + margin-bottom: 0; } + #docsContent #markdown-toc a, #docsContent #TableOfContents a { + position: relative; + color: #3371e3; + font-weight: 700; } + #docsContent img { + max-width: 100%; } + #docsContent a { + text-decoration: underline; } + #docsContent #TableOfContents > ul > li { + list-style: none; } + #docsContent #TableOfContents ul, #docsContent #TableOfContents li { + list-style: disk; } + +.fixed footer { + position: fixed; + bottom: 0; } + +#miceType { + clear: both; + font-size: 11px; + line-height: 18px; + color: #aaa; } + +html.search #docsContent { + position: relative; + float: none; + width: 90%; + max-width: 850px; + margin: 0 auto; } + html.search #docsContent #editPageButton { + display: none; } + html.search #docsContent table { + border: 0; + margin-bottom: 0; } + html.search #docsContent td { + padding: 0; } + html.search #docsContent h1 { + margin-bottom: 0; + border-bottom: 0; + padding-bottom: 0; + padding-left: 8px; } + +#home.flip-nav .logo, #home.open-nav .logo { + background-image: url(/images/nav_logo2.svg); } + +#home #hero { + margin-bottom: 0; + padding-bottom: 1px; } + #home #hero main { + padding: 0 10px; + margin-bottom: 30px; } + #home #hero #vendorStrip { + display: none; } + +#oceanNodes { + padding-top: 60px; + padding-bottom: 60px; } + #oceanNodes a { + color: #3371e3; } + #oceanNodes main { + margin-bottom: 60px; + min-height: 160px; } + #oceanNodes .image-wrapper { + max-width: 75%; + margin: 0 auto 20px; + text-align: center; } + #oceanNodes .image-wrapper img { + width: 100%; + max-width: 160px; } + #oceanNodes main:first-child .image-wrapper { + max-width: 100%; } + #oceanNodes main:first-child .image-wrapper img { + max-width: 491px; } + #oceanNodes h3 { + margin-bottom: 30px; } + +#video { + height: 200px; } + +#video { + width: 100%; + position: relative; + background-image: url(/images/kub_video_banner_homepage.jpg); + background-position: center center; + background-size: cover; } + #video > .light-text { + display: none; + position: absolute; + top: 50%; + left: 75%; + width: 525px; + padding-right: 80px; + transform: translate(-50%, -50%); + color: white; } + #video h2 { + font-size: 32px; + line-height: 44px; + margin-bottom: 20px; } + #video p { + margin-bottom: 20px; } + #video #desktopKCButton { + position: relative; + font-size: 18px; + background-color: #303030; + border-radius: 8px; + color: #ffffff; + padding: 20px 10px 20px 10px; } + #video #desktopShowVideoButton { + position: relative; + font-size: 24px; + background-color: white; + border-radius: 8px; + color: #3371e3; + padding: 15px 30px 15px 80px; + margin-bottom: 15px; } + #video #desktopShowVideoButton:before { + content: ""; + position: absolute; + position: absolute; + top: 50%; + left: 40px; + transform: translate(-50%, -50%); + width: 0; + height: 0; + border-style: solid; + border-width: 10px 0 10px 20px; + border-color: transparent transparent transparent #3371e3; } + #video #mobileShowVideoButton { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80px; + height: 80px; + border-radius: 50%; + background-color: transparent; + border: 5px solid rgba(255, 255, 255, 0.2); + overflow: visible; } + #video #mobileShowVideoButton:after { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + left: 40px; + content: ""; + width: 0; + height: 0; + border-style: solid; + border-width: 20px 0 20px 30px; + border-color: transparent transparent transparent #ffffff; } + +#videoPlayer { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: rgba(0, 0, 0, 0.9); + display: none; } + #videoPlayer iframe { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80vw; + height: 45vw; + max-width: 142.22222222vh; + max-height: 80vh; } + #videoPlayer #closeButton { + position: absolute; + top: 20px; + right: 20px; + width: 50px; + height: 50px; + border: 2px solid transparent; + transition: 0.3s; } + #videoPlayer #closeButton:before, #videoPlayer #closeButton:after { + content: ""; + position: absolute; + top: calc(50% - 1px); + left: 10%; + width: 80%; + height: 2px; + background-color: white; } + #videoPlayer #closeButton:before { + transform: rotate(45deg); } + #videoPlayer #closeButton:after { + transform: rotate(-45deg); } + #videoPlayer #closeButton:hover { + border-color: white; } + +#cncf { + padding-top: 60px; + padding-bottom: 140px; + background-color: #f7f7f7; + background-image: url(/images/cncf-color.png); + background-position: center 100px; + background-repeat: no-repeat; + background-size: 300px; } + +#features { + padding-top: 140px; + background-color: #f7f7f7; + background-image: url(/images/wheel.png); + background-position: center 60px; + background-repeat: no-repeat; + background-size: auto; } + +.feature-box { + width: 100%; + overflow: hidden; + clear: both; } + .feature-box h4 { + line-height: normal; + margin-bottom: 15px; } + .feature-box > div:first-child { + float: left; } + .feature-box > div:last-child { + float: right; } + +#features h3 { + margin-bottom: 20px; } + +#features .feature-box { + margin-bottom: 0; } + #features .feature-box > div { + width: 100%; + margin-bottom: 40px; } + +#community.open-nav .logo, #community.flip-nav .logo, .gridPage.open-nav .logo, .gridPage.flip-nav .logo { + background-image: url(/images/nav_logo2.svg); } + +#community #hero, .gridPage #hero { + padding-bottom: 20px; } + +#community #mainContent, .gridPage #mainContent { + padding: 20px 0; } + #community #mainContent main, .gridPage #mainContent main { + max-width: none; } + #community #mainContent a, .gridPage #mainContent a { + color: #3371e3; } + #community #mainContent .content, .gridPage #mainContent .content { + margin-bottom: 30px; + padding: 30px 0; } + #community #mainContent .content h1, #community #mainContent .content h2, #community #mainContent .content h3, #community #mainContent .content h4, #community #mainContent .content h5, #community #mainContent .content h6, #community #mainContent .content p, .gridPage #mainContent .content h1, .gridPage #mainContent .content h2, .gridPage #mainContent .content h3, .gridPage #mainContent .content h4, .gridPage #mainContent .content h5, .gridPage #mainContent .content h6, .gridPage #mainContent .content p { + line-height: normal; + max-width: 1200px; + padding: 0 20px; + margin: 0 auto 20px; } + #community #mainContent .content:nth-child(even), .gridPage #mainContent .content:nth-child(even) { + background-color: #f7f7f7; } + #community #mainContent .company-logos, .gridPage #mainContent .company-logos { + text-align: center; + max-width: 1200px; + margin: 0 auto; } + #community #mainContent .company-logos img, .gridPage #mainContent .company-logos img { + width: auto; + margin: 10px; + background-color: #f7f7f7; } + #community #mainContent .partner-logos, .gridPage #mainContent .partner-logos { + text-align: center; + max-width: 1200px; + margin: 0 auto; } + #community #mainContent .partner-logos img, .gridPage #mainContent .partner-logos img { + width: auto; + margin: 10px; + background-color: #ffffff; + box-shadow: 0 5px 5px rgba(0, 0, 0, 0.24), 0 0 5px rgba(0, 0, 0, 0.12); } + #community #mainContent #calendarMeetings, .gridPage #mainContent #calendarMeetings { + position: relative; + width: 80vw; + height: 60vw; + max-width: 1200px; + max-height: 900px; + margin: 20px auto; } + #community #mainContent #calendarEvents, .gridPage #mainContent #calendarEvents { + position: relative; + width: 80vw; + height: 30vw; + max-width: 1200px; + max-height: 450px; + margin: 20px auto; } + #community #mainContent iframe, .gridPage #mainContent iframe { + position: absolute; + border: 0; + width: 100%; + height: 100%; } + +.ui-icon { + display: inline-block !important; } + +#feature-state-dialog-link { + text-decoration: none !important; + padding: 5px !important; } + #feature-state-dialog-link a:visited { + color: #454545 !important; } + #feature-state-dialog-link a code { + display: inline-block !important; + box-sizing: border-box !important; + background-color: #f7f7f7 !important; + color: #303030 !important; + font-family: "Roboto Mono", monospace !important; + vertical-align: baseline !important; + font-size: 14px !important; + font-weight: bold !important; + padding: 0px 4px !important; } + +#feature-state-dialog { + background: #fff !important; + border: 1px solid #ddd !important; + padding: 0.5em 1em !important; } + #feature-state-dialog ul, #feature-state-dialog li { + list-style: disc !important; + margin: 4px 12px !important; } + #feature-state-dialog p { + margin: 8px 0px !important; } + #feature-state-dialog code { + display: inline-block !important; + box-sizing: border-box !important; + background-color: #f7f7f7 !important; + color: #303030 !important; + font-family: "Roboto Mono", monospace !important; + vertical-align: baseline !important; + font-size: 14px !important; + font-weight: bold !important; + padding: 0px 4px !important; } + +.ui-dialog { + background: #f7f7f7 !important; + padding: 0.5em; } + +.ui-dialog-content { + position: relative; + float: right; + width: 100%; } + .ui-dialog-content * + h2, .ui-dialog-content * + h3, .ui-dialog-content * + h4, .ui-dialog-content * + h5, .ui-dialog-content * + h6 { + margin-top: 30px; } + .ui-dialog-content h1, .ui-dialog-content h2, .ui-dialog-content h3, .ui-dialog-content h4, .ui-dialog-content h5, .ui-dialog-content h6 { + line-height: normal; + font-weight: 500; + margin-bottom: 30px; + padding-bottom: 10px; } + .ui-dialog-content h1:before, .ui-dialog-content h2:before, .ui-dialog-content h3:before, .ui-dialog-content h4:before, .ui-dialog-content h5:before, .ui-dialog-content h6:before { + display: block; + content: " "; + margin-top: -100px; + height: 100px; + visibility: hidden; } + .ui-dialog-content h1, .ui-dialog-content h2 { + border-bottom: 1px solid #cccccc; } + .ui-dialog-content h1 { + font-size: 32px; + padding-right: 60px; } + .ui-dialog-content h2 { + font-size: 28px; } + .ui-dialog-content h3 { + font-size: 24px; + font-weight: 300; + margin-bottom: 5px; } + .ui-dialog-content h4 { + font-size: 20px; + margin-bottom: 0px; } + .ui-dialog-content h5, .ui-dialog-content h6 { + font-size: 16px; + font-weight: 500; } + .ui-dialog-content p { + font-size: 16px; + font-weight: 300; + line-height: 1.75em; } + .ui-dialog-content p + p { + margin-top: 10px; } + .ui-dialog-content code { + display: inline-block; + box-sizing: border-box; + background-color: #f7f7f7; + color: #303030; + font-family: "Roboto Mono", monospace; + vertical-align: baseline; + font-size: 14px; + font-weight: bold; + padding: 2px 4px; } + .ui-dialog-content a code { + color: #3371e3; + text-decoration: underline; } + .ui-dialog-content pre .pi, .ui-dialog-content pre .s { + margin: 0; + padding: 0; } + .ui-dialog-content .highlight code span, .ui-dialog-content code, .ui-dialog-content pre code { + font-family: "Roboto Mono", monospace; } + .ui-dialog-content code, .ui-dialog-content pre code { + color: #303030; } + .ui-dialog-content pre code { + padding: 0; } + .ui-dialog-content pre { + background-color: #f7f7f7; + display: block; + margin: 20px 0; + padding: 15px; + position: relative; + overflow-x: auto; } + .ui-dialog-content h1 code, .ui-dialog-content h2 code, .ui-dialog-content h3 code, .ui-dialog-content h4 code, .ui-dialog-content h5 code, .ui-dialog-content h6 code { + font-family: inherit; + font-size: inherit; + background-color: transparent; } + .ui-dialog-content .includecode { + table-layout: fixed; } + .ui-dialog-content .includecode, .ui-dialog-content .includecode th, .ui-dialog-content .includecode td { + padding: 0 !important; } + .ui-dialog-content .includecode th { + text-align: right !important; + padding: 10px !important; } + .ui-dialog-content .includecode th a, .ui-dialog-content .includecode th a code { + color: white !important; + background-color: transparent !important; } + .ui-dialog-content .includecode pre { + margin: 0 !important; } + .ui-dialog-content ul li { + list-style: disc; } + .ui-dialog-content ol li { + list-style: decimal; } + .ui-dialog-content ul, .ui-dialog-content ol { + margin: 20px 0; + padding-left: 30px; + font-weight: 300; } + .ui-dialog-content ul ul, .ui-dialog-content ol ol, .ui-dialog-content ul ol, .ui-dialog-content ol ul { + margin: 0.75em 0; } + .ui-dialog-content li { + margin-bottom: 0.75em; + font-size: 16px; + line-height: 1.75em; } + .ui-dialog-content table { + width: 100%; + border: 1px solid #ccc; + border-spacing: 0; + margin-top: 30px; + margin-bottom: 30px; } + .ui-dialog-content thead, .ui-dialog-content tr:nth-child(even) { + background-color: #f7f7f7; } + .ui-dialog-content thead { + background-color: #555; + color: white; } + .ui-dialog-content th, .ui-dialog-content td { + padding: 8px; + text-align: left; + margin: 0; } + .ui-dialog-content th { + font-weight: normal; } + .ui-dialog-content td { + font-size: 0.85em; } + .ui-dialog-content #editPageButton { + position: absolute; + top: -25px; + right: 5px; + width: 50px; + height: 50px; + line-height: 50px; + border-radius: 50%; + white-space: nowrap; + text-indent: 50px; + overflow: hidden; + background: #3371e3 url(/images/icon-pencil.svg) no-repeat; + background-position: 12px 10px; + background-size: 29px 29px; } + .ui-dialog-content #markdown-toc { + margin-bottom: 20px; } + .ui-dialog-content #markdown-toc ul, .ui-dialog-content #markdown-toc li { + list-style: disc; + color: #3371e3; } + .ui-dialog-content #markdown-toc ul { + padding: 0 15px; + margin: 0; } + .ui-dialog-content #markdown-toc li { + padding: 0; + line-height: 1.5em; + margin-bottom: 0; } + .ui-dialog-content #markdown-toc a { + position: relative; + color: #3371e3; + font-weight: 700; } + .ui-dialog-content img { + max-width: 100%; } + .ui-dialog-content a { + text-decoration: underline; } + +.ui-dialog-buttonpane { + background: #f7f7f7 !important; } + +.ui-widget-header { + background: transparent !important; + background-color: transparent !important; + border: 0px !important; } + +.ui-tabs ul, .ui-tabs ol, .ui-tabs li { + padding: 0px !important; + list-style: none !important; + margin-bottom: 0px !important; + margin-left: 4px !important; } + +.ui-tabs-panel ul li { + list-style: disc !important; } + +.ui-tabs-panel ol li { + list-style: decimal !important; } + +.ui-widget-content { + border: 0px !important; } + .ui-widget-content table { + margin: 0px !important; } + +.ui-tabs .ui-tabs-panel { + border: 1px solid #ccc !important; } + +.ui-tabs-anchor { + text-decoration: none !important; } + +#talkToUs h3, #talkToUs h4 { + text-align: center; } + +#talkToUs h3 { + margin-bottom: 15px; } + +#talkToUs h4 { + line-height: normal; + margin-bottom: 50px; } + #talkToUs h4 br { + display: none; } + +#talkToUs #bigSocial { + overflow: hidden; } + #talkToUs #bigSocial div { + width: 100%; + float: left; + padding: 30px; + padding-top: 110px; + background-position: center top; + background-size: auto; + background-repeat: no-repeat; } + #talkToUs #bigSocial div:nth-child(1) { + background-image: url(/images/twitter_icon.png); } + #talkToUs #bigSocial div:nth-child(2) { + background-image: url(/images/github_icon.png); } + #talkToUs #bigSocial div:nth-child(3) { + background-image: url(/images/slack_icon.png); } + #talkToUs #bigSocial div:nth-child(4) { + background-image: url(/images/stackoverflow_icon.png); } + #talkToUs #bigSocial div + div { + margin-top: 20px; + margin-left: 0; } + #talkToUs #bigSocial a { + display: inline-block; + color: #3371e3; + font-size: 24px; + font-weight: 400; + text-decoration: none; + margin-bottom: 15px; } + #talkToUs #bigSocial a, #talkToUs #bigSocial p { + text-align: center; + width: 100%; } + +#home #talkToUs main { + padding: 30px 0; } + +#home #talkToUs h5 { + font-size: 20px; } + +#home #caseStudiesWrapper { + position: relative; + text-align: center; + margin-bottom: 30px; } + #home #caseStudiesWrapper div { + position: relative; + display: inline-block; + vertical-align: top; + width: 100%; + min-height: 230px; + padding: 125px 10px 15px; + margin-bottom: 30px; + background-position: top center; + background-repeat: no-repeat; } + #home #caseStudiesWrapper div:nth-child(1) { + background-image: url(/images/community_logos/pearson_logo.png); } + #home #caseStudiesWrapper div:nth-child(2) { + background-image: url(/images/community_logos/box_logo.png); } + #home #caseStudiesWrapper div:nth-child(3) { + background-image: url(/images/community_logos/ebay_logo.png); } + #home #caseStudiesWrapper div:nth-child(4) { + background-image: url(/images/community_logos/wikimedia_foundation_logo.png); } + #home #caseStudiesWrapper p { + font-size: 20px; } + #home #caseStudiesWrapper a { + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + color: #3371e3; + font-weight: 400; } + +/* Google Search */ +.cse .gsc-control-cse, .gsc-control-cse { + padding: 0; } + +.gsc-control-cse table, .gsc-control-cse-en table { + margin: 0px !important; } + +.gsc-above-wrapper-area { + border-bottom: 0; } + +/* Bing Search */ +#bing-results-container { + margin-top: 30px; + margin-left: 20px; } + +.bing-result { + margin-bottom: 20px; } + +.bing-result-name a { + font-size: 16px; + color: #0000CC; } + +.bing-result-url { + color: #008000; + font-size: 13px; } + +.bing-result-snippet { + color: #000; + font-size: 11px; } + +#bing-pagination-container { + margin: 10px; + margin-left: 20px; } + +.bing-page-anchor { + text-decoration: none !important; + cursor: pointer; + color: #0000CC; + margin-right: 8px; } + +@media screen and (min-width: 750px) { + h1 { + font-size: 32px; + line-height: 40px; } + h2 { + font-size: 28px; + line-height: 60px; } + h3 { + font-size: 24px; + line-height: 32px; } + h4 { + font-size: 20px; + line-height: 40px; } + h5 { + font-size: 16px; + line-height: 36px; } + p { + font-size: 14px; + line-height: 22px; } + section, header, #vendorStrip { + padding-left: 20px; + padding-right: 20px; } + section main, header main, #vendorStrip main { + width: 100%; + max-width: 100%; } + header { + height: 80px; } + .nav-buttons { + height: 80px; + line-height: 80px; } + .nav-buttons .button + * { + margin-left: 30px; } + #hamburger { + width: 50px; + height: 50px; } + #mainNav { + padding: 140px 0 30px; } + #mainNav h5 { + margin-bottom: 1em; } + #mainNav h3 { + margin-bottom: 0.6em; } + #mainNav .nav-box { + width: 20%; } + #mainNav .nav-box + .nav-box { + margin-left: calc(20% / 3); } + #mainNav main + main { + margin-top: 60px; } + #mainNav .left .button { + height: 50px; + line-height: 50px; + font-size: 18px; } + .open-nav #tryKubernetes, .y-enough #tryKubernetes { + margin-left: 30px; } + #hero { + padding-top: 80px; } + #docs #hero h1, #docs #hero h5 { + padding-left: 20px; + padding-right: 20px; } + #vendorStrip { + height: 88px; + line-height: 88px; + font-size: 16px; } + p { + font-size: 16px; + line-height: 24px; + letter-spacing: 0.1px; } + h1 { + font-size: 36px; + line-height: 44px; } + h3 { + font-size: 28px; + line-height: 36px; } + h4 { + font-size: 24px; + line-height: 40px; } + #home #viewDocs, #home #tryKubernetes { + display: inline-block; } + #vendorStrip { + display: block; + text-align: center; } + #vendorStrip img { + max-height: 24px; + vertical-align: middle; + margin: 0 30px; } + #docs #vendorStrip li a { + font-size: 1em; + font-weight: normal; } + #docs #vendorStrip li li + li { + margin-left: 60px; } + #oceanNodes h3 { + text-align: left; + margin-bottom: 18px; } + #oceanNodes main { + position: relative; + clear: both; + display: table; } + #oceanNodes main .content { + display: table-cell; + position: relative; + vertical-align: middle; } + #oceanNodes main .image-wrapper { + position: absolute; + top: 50%; + max-width: 25%; + max-height: 100%; + transform: translateY(-50%); } + #oceanNodes main:nth-child(odd) { + padding-right: 210px; } + #oceanNodes main:nth-child(odd) .image-wrapper { + right: 0; } + #oceanNodes main:nth-child(even) { + padding-left: 210px; } + #oceanNodes main:nth-child(even) .image-wrapper { + left: 0; } + #oceanNodes main:nth-child(1) { + padding-right: 0; } + #oceanNodes main:nth-child(1) h3, #oceanNodes main:nth-child(1) p { + text-align: center; } + #oceanNodes main:nth-child(1) .image-wrapper { + position: relative; + display: block; + float: none; + max-width: 100%; + transform: none; } + #oceanNodes main:nth-child(1) .content { + display: block; } + #oceanNodes main img { + width: 100%; } + #video { + height: 400px; + display: block; } + #video > .light-text { + display: block; } + #mobileShowVideoButton { + display: none; } + #features { + padding-bottom: 60px; } + #features .feature-box { + margin-bottom: 30px; } + #features .feature-box:last-child { + margin-bottom: 0; } + #features h3 { + margin-bottom: 40px; } + #features .feature-box > div { + width: 45%; + margin-bottom: 0; } + #talkToUs #bigSocial div { + width: calc(50% - 15px); } + #talkToUs #bigSocial div + div { + margin-top: 0; } + #talkToUs #bigSocial div:nth-child(2) { + margin-left: 20px; } + #talkToUs #bigSocial div:nth-child(3) { + margin-top: 20px; } + #talkToUs #bigSocial div:nth-child(4) { + margin-top: 20px; + margin-left: 20px; } + #talkToUs #bigSocial a { + display: inline-block; + color: #3371e3; + font-weight: 400; + text-decoration: none; } + footer nav { + text-align: center; } + footer nav a { + width: 30%; + padding: 0 20px; } + footer .social { + text-align: center; } + footer .social div { + display: inline-block; } + footer .social div:last-child { + display: block; + margin: 0; } + footer .social span { + display: inline-block; + margin-right: 10px; } + footer .social input { + text-align: left; } + #home #caseStudiesWrapper div { + width: 48%; } } + +@media screen and (min-width: 1025px) { + #hamburger { + display: none; } + ul.global-nav { + display: inline-block; } + #docs #vendorStrip #searchBox:before { + top: 15px; } + #vendorStrip { + height: 44px; + line-height: 44px; } + #vendorStrip li a.YAH:after { + content: ""; + display: block; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 4px; + background-color: #3371e3; } + #vendorStrip #searchBox { + float: right; } + #home #hero #vendorStrip { + display: block; } + #docs #hero h1, #docs #hero h5 { + text-align: left; } + #docs #hero #vendorStrip ul { + float: left; } + #docs #hero #vendorStrip #searchBox { + float: right; + width: 250px; } + #docs #hero #vendorStrip #search { + vertical-align: middle; } + #docs .flyout-button { + display: none; } + #docs .logo { + position: relative; + float: left; + display: block; + width: 180px; + height: 88px; + top: 0; + left: 0; + transform: none; + background-image: url(../images/nav_logo.svg); } + #docs.flip-nav .logo, #docs.open-nav .logo { + background-image: url(../images/nav_logo2.svg); } + #encyclopedia { + padding: 50px 50px 100px 100px; + clear: both; } + #docsToc { + position: relative; + float: left; + padding: 0 20px; + left: 0; + width: 350px; + z-index: auto; } + #docsToc .push-menu-close-button { + display: none; } + #docsContent { + width: calc(100% - 400px); } + #docsContent #editPageButton { + right: -25px; } + section main, header main, footer main { + max-width: 1200px; } + header, #vendorStrip, #encyclopedia, #hero h1, #hero h5, #docs #hero h1, #docs #hero h5, + #community #hero h1, .gridPage #hero h1, #community #hero h5, .gridPage #hero h5 { + padding-left: 100px; + padding-right: 100px; } + #vendorStrip { + padding-right: 10px; } + #home section main, #home header main, #home footer main { + max-width: 1000px; } + #oceanNodes main { + position: relative; + max-width: 830px; } + #oceanNodes main:nth-child(1) { + max-width: 1000px; + padding-right: 475px; } + #oceanNodes main:nth-child(1) h3, #oceanNodes main:nth-child(1) p { + text-align: left; } + #oceanNodes main:nth-child(1) .image-wrapper { + position: absolute; + max-width: 48%; + transform: translateY(-50%); } + #oceanNodes main:nth-child(1) .image-wrapper img { + max-width: 425px; } + #video { + height: 550px; + position: relative; + background-image: url(../images/kub_video_banner_homepage.jpg); + background-position: center center; + background-size: cover; } + #talkToUs h4 br { + display: block; } + #talkToUs #bigSocial div { + width: calc(25% - 18px); } + #talkToUs #bigSocial div + div { + margin-left: 20px; } + footer { + width: 100%; + background-image: url(../images/texture.png); + background-color: #303030; } + footer main { + padding: 20px 0; } + footer nav { + overflow: hidden; + margin-bottom: 20px; } + footer nav a { + width: 16.65%; + float: left; + font-size: 24px; + font-weight: 300; + white-space: nowrap; } + footer .social { + padding: 0 30px; + max-width: 1200px; } + footer .social div { + float: left; } + footer .social div:last-child { + float: right; } + #search, #wishField { + background-color: transparent; + padding: 10px; + font-size: 16px; + font-weight: 100; + color: white; + border: 1px solid white; + transition: 0.3s; } + #search:focus, #wishField:focus { + background-color: #f7f7f7; + color: #303030; } + .social a { + display: inline-block; + background-image: url(../images/social_sprite.png); + background-repeat: no-repeat; + background-size: auto; + width: 50px; + height: 50px; + border-radius: 5px; + margin-right: 10px; } + .social a:hover { + background-color: #fff; } + .social a span { + position: absolute; + display: block; + height: 0; + overflow: hidden; } + a.twitter { + background-position: 0 0; } + a.twitter:hover { + background-position: 0 100%; } + a.stack-overflow { + background-position: -50px 0; } + a.stack-overflow:hover { + background-position: -50px 100%; } + a.slack { + background-position: -100px 0; } + a.slack:hover { + background-position: -100px 100%; } + a.github { + background-position: -150px 0; } + a.github:hover { + background-position: -150px 100%; } + a.mailing-list { + background-position: -200px 0; } + a.mailing-list:hover { + background-position: -200px 100%; } + a.calendar { + background-position: -250px 0; } + a.calendar:hover { + background-position: -250px 100%; } + #community #hero, .gridPage #hero { + text-align: left; } + #community #hero h1, .gridPage #hero h1 { + padding: 20px 100px; } + #community #tryKubernetes, .gridPage #tryKubernetes { + width: auto; + background-color: #3371e3; + padding: 0 20px; } + #bigSocial div { + width: calc(25% - 18px); } + #home #caseStudiesWrapper div { + width: 24%; + min-height: 260px; } } + +@media screen and (min-width: 1300px) { + #vendorStrip { + padding-right: 100px; } } + +@media screen and (min-width: 456px) { + #vendorStrip li + li { + margin-left: 20px; } } diff --git a/resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.json b/resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.json new file mode 100644 index 0000000000..081a4beb86 --- /dev/null +++ b/resources/_gen/assets/sass/sass/styles.sass_146085a92036d31fa476cb2cbb0682ce.json @@ -0,0 +1 @@ +{"Target":"css/styles.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/update-imported-docs/reference.yml b/update-imported-docs/reference.yml index 43745288bb..6410f38e4c 100644 --- a/update-imported-docs/reference.yml +++ b/update-imported-docs/reference.yml @@ -8,7 +8,7 @@ repos: cd $GOPATH git clone https://github.com/kubernetes/kubernetes.git src/k8s.io/kubernetes cd src/k8s.io/kubernetes - git checkout release-1.11 + git checkout release-1.12 make generated_files cp -L -R vendor $GOPATH/src rm -r vendor diff --git a/update-imported-docs/release.yml b/update-imported-docs/release.yml index 71cd1c25d8..0da74c95bd 100644 --- a/update-imported-docs/release.yml +++ b/update-imported-docs/release.yml @@ -4,5 +4,5 @@ repos: branch: master gen-absolute-links: true files: - - src: CHANGELOG-1.11.md + - src: CHANGELOG-1.12.md dst: content/en/docs/setup/release/notes.md From 13db0b7ab8a62e2ab832e27c0b3866bc4808b5a4 Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Thu, 27 Sep 2018 17:27:47 -0700 Subject: [PATCH 002/181] 1.12 blog post (#10402) --- ...27-kubernetes-1.12-release-announcement.md | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 content/en/blog/_posts/2018-09-27-kubernetes-1.12-release-announcement.md diff --git a/content/en/blog/_posts/2018-09-27-kubernetes-1.12-release-announcement.md b/content/en/blog/_posts/2018-09-27-kubernetes-1.12-release-announcement.md new file mode 100644 index 0000000000..d1e9508bf9 --- /dev/null +++ b/content/en/blog/_posts/2018-09-27-kubernetes-1.12-release-announcement.md @@ -0,0 +1,115 @@ +--- +layout: blog +title: 'Kubernetes 1.12: Kubelet TLS Bootstrap and Azure Virtual Machine Scale Sets (VMSS) Move to General Availability' +date: 2018-09-27 +--- + +**Author**: The 1.12 [Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.12/release_team.md) + +We’re pleased to announce the delivery of Kubernetes 1.12, our third release of 2018! + +Today’s release continues to focus on internal improvements and graduating features to stable in Kubernetes. This newest version graduates key features such as security and Azure. Notable additions in this release include two highly-anticipated features graduating to general availability: Kubelet TLS Bootstrap and Support for Azure Virtual Machine Scale Sets (VMSS). + +These new features mean increased security, availability, resiliency, and ease of use to get production applications to market faster. The release also signifies the increasing maturation and sophistication of Kubernetes on the developer side. + +Let’s dive into the key features of this release: + +## Introducing General Availability of Kubelet TLS Bootstrap + +We’re excited to announce General Availability (GA) of [Kubelet TLS Bootstrap](https://github.com/kubernetes/features/issues/43). In Kubernetes 1.4, we introduced an API for requesting certificates from a cluster-level Certificate Authority (CA). The original intent of this API is to enable provisioning of TLS client certificates for kubelets. This feature allows for a kubelet to bootstrap itself into a TLS-secured cluster. Most importantly, it automates the provision and distribution of signed certificates. + +Before, when a kubelet ran for the first time, it had to be given client credentials in an out-of-band process during cluster startup. The burden was on the operator to provision these credentials. Because this task was so onerous to manually execute and complex to automate, many operators deployed clusters with a single credential and single identity for all kubelets. These setups prevented deployment of node lockdown features like the Node authorizer and the NodeRestriction admission controller. + +To alleviate this, [SIG Auth](https://github.com/kubernetes/community/tree/master/sig-auth) introduced a way for kubelet to generate a private key and a CSR for submission to a cluster-level certificate signing process. The v1 (GA) designation indicates production hardening and readiness, and comes with the guarantee of long-term backwards compatibility. + +Alongside this, [Kubelet server certificate bootstrap and rotation](https://github.com/kubernetes/features/issues/267) is moving to beta. Currently, when a kubelet first starts, it generates a self-signed certificate/key pair that is used for accepting incoming TLS connections. This feature introduces a process for generating a key locally and then issuing a Certificate Signing Request to the cluster API server to get an associated certificate signed by the cluster’s root certificate authority. Also, as certificates approach expiration, the same mechanism will be used to request an updated certificate. + +## Support for Azure Virtual Machine Scale Sets (VMSS) and Cluster-Autoscaler is Now Stable + +Azure Virtual Machine Scale Sets (VMSS) allow you to create and manage a homogenous VM pool that can automatically increase or decrease based on demand or a set schedule. This enables you to easily manage, scale, and load balance multiple VMs to provide high availability and application resiliency, ideal for large-scale applications that can run as Kubernetes workloads. + +With this new stable feature, Kubernetes supports the [scaling of containerized applications with Azure VMSS](https://github.com/kubernetes/features/issues/514), including the ability to [integrate it with cluster-autoscaler](https://github.com/kubernetes/features/issues/513) to automatically adjust the size of the Kubernetes clusters based on the same conditions. + +## Additional Notable Feature Updates + +[`RuntimeClass`](https://github.com/kubernetes/features/issues/585) is a new cluster-scoped resource that surfaces container runtime properties to the control plane being released as an alpha feature. + +[Snapshot / restore functionality for Kubernetes and CSI](https://github.com/kubernetes/features/issues/177) is being introduced as an alpha feature. This provides standardized APIs design (CRDs) and adds PV snapshot/restore support for CSI volume drivers. + +[Topology aware dynamic provisioning](https://github.com/kubernetes/features/issues/561) is now in beta, meaning storage resources can now understand where they live. This also includes beta support to [AWS EBS](https://github.com/kubernetes/features/issues/567) and [GCE PD](https://github.com/kubernetes/features/issues/558). + +[Configurable pod process namespace sharing](https://github.com/kubernetes/features/issues/495) is moving to beta, meaning users can configure containers within a pod to share a common PID namespace by setting an option in the PodSpec. + +[Taint node by condition](https://github.com/kubernetes/features/issues/382) is now in beta, meaning users have the ability to represent node conditions that block scheduling by using taints. + +[Arbitrary / Custom Metrics](https://github.com/kubernetes/features/issues/117) in the Horizontal Pod Autoscaler is moving to a second beta to test some additional feature enhancements. This reworked Horizontal Pod Autoscaler functionality includes support for custom metrics and status conditions. + +Improvements that will allow the [Horizontal Pod Autoscaler to reach proper size faster](https://github.com/kubernetes/features/issues/591) are moving to beta. + +[Vertical Scaling of Pods](https://github.com/kubernetes/features/issues/21) is now in beta, which makes it possible to vary the resource limits on a pod over its lifetime. In particular, this is valuable for pets (i.e., pods that are very costly to destroy and re-create). + +[Encryption at rest via KMS](https://github.com/kubernetes/features/issues/460) is now in beta. This adds multiple encryption providers, including Google Cloud KMS, Azure Key Vault, AWS KMS, and Hashicorp Vault, that will encrypt data as it is stored to etcd. + +## Availability + +Kubernetes 1.12 is available for [download on GitHub](https://github.com/kubernetes/kubernetes/releases/tag/v1.12.0). To get started with Kubernetes, check out these [interactive tutorials](https://kubernetes.io/docs/tutorials/). You can also install 1.12 using [Kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/). + +## 5 Day Features Blog Series + +If you’re interested in exploring these features more in depth, check back next week for our 5 Days of Kubernetes series where we’ll highlight detailed walkthroughs of the following features: + +* Day 1 - Kubelet TLS Bootstrap +* Day 2 - Support for Azure Virtual Machine Scale Sets (VMSS) and Cluster-Autoscaler +* Day 3 - Snapshots Functionality +* Day 4 - RuntimeClass +* Day 5 - Topology Resources + +## Release team + +This release is made possible through the effort of hundreds of individuals who contributed both technical and non-technical content. Special thanks to the [release team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.12/release_team.md) led by Tim Pepper, Orchestration & Containers Lead, at VMware Open Source Technology Center. The 36 individuals on the release team coordinate many aspects of the release, from documentation to testing, validation, and feature completeness. + +As the Kubernetes community has grown, our release process represents an amazing demonstration of collaboration in open source software development. Kubernetes continues to gain new users at a rapid clip. This growth creates a positive feedback cycle where more contributors commit code creating a more vibrant ecosystem. Kubernetes has over 22,000 individual contributors to date and an active community of more than 45,000 people. + +## Project Velocity + +The CNCF has continued refining DevStats, an ambitious project to visualize the myriad contributions that go into the project. [K8s DevStats](https://devstats.k8s.io) illustrates the breakdown of contributions from major company contributors, as well as an impressive set of preconfigured reports on everything from individual contributors to pull request lifecycle times. On average, 259 different companies and over 1,400 individuals contribute to Kubernetes each month. [Check out DevStats](https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All) to learn more about the overall velocity of the Kubernetes project and community. + +## User Highlights + +Established, global organizations are using [Kubernetes in production](https://kubernetes.io/case-studies/) at massive scale. Recently published user stories from the community include: + +* **Ygrene**, a PACE (Property Assessed Clean Energy) financing company, is using cloud native to [bring security and scalability to the finance industry](https://kubernetes.io/case-studies/ygrene/), cutting deployment times down to five minutes with Kubernetes. +* **Sling TV**, a live TV streaming service, uses Kubernetes to [enable their hybrid cloud strategy](https://kubernetes.io/case-studies/slingtv/) and deliver a high-quality service for their customers. +* **ING**, a Dutch multinational banking and financial services corporation, moved to Kubernetes with the intent to eventually be able to go from [idea to production within 48 hours](https://kubernetes.io/case-studies/ing/). +* **Pinterest**, a web and mobile application company that is running on 1,000 microservices and hundreds of thousands of data jobs, moved to Kubernetes to [build on-demand scaling and simply the deployment process](https://kubernetes.io/case-studies/pinterest/). +* **Pearson**, a global education company serving 75 million learners, is using Kubernetes to [transform the way that educational content is delivered online](https://kubernetes.io/case-studies/pearson/) and has saved 15-20% in developer productivity. + +Is Kubernetes helping your team? [Share your story](https://docs.google.com/a/google.com/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform) with the community. + +## Ecosystem Updates + +* CNCF recently released the findings of their [bi-annual CNCF survey](https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/), finding that the use of cloud native technologies in production has grown over 200% within the last six months. +* CNCF expanded its certification offerings to include a Certified Kubernetes Application Developer exam. The CKAD exam certifies an individual's ability to design, build, configure, and expose cloud native applications for Kubernetes. More information can be found [here](https://www.cncf.io/blog/2018/03/16/cncf-announces-ckad-exam/). +* CNCF added a new partner category, Kubernetes Training Partners (KTP). KTPs are a tier of vetted training providers who have deep experience in cloud native technology training. View partners and learn more [here](https://www.cncf.io/certification/training/). +* CNCF also offers [online training](https://www.cncf.io/certification/training/) that teaches the skills needed to create and configure a real-world Kubernetes cluster. +* Kubernetes documentation now features [user journeys](https://k8s.io/docs/home/): specific pathways for learning based on who readers are and what readers want to do. Learning Kubernetes is easier than ever for beginners, and more experienced users can find task journeys specific to cluster admins and application developers. + +## KubeCon + +The world’s largest Kubernetes gathering, KubeCon + CloudNativeCon is coming to [Shanghai](https://events.linuxfoundation.cn/events/kubecon-cloudnativecon-china-2018/) from November 13-15, 2018 and [Seattle](https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2018/) from December 10-13, 2018. This conference will feature technical sessions, case studies, developer deep dives, salons and more! [Register today](https://www.cncf.io/community/kubecon-cloudnativecon-events/)! + +## Webinar + +Join members of the Kubernetes 1.12 release team on November 6th at 10am PDT to learn about the major features in this release. Register [here](https://zoom.us/webinar/register/WN_DYMejau3TMaTbk91oC3YkA). + +## Get Involved + +The simplest way to get involved with Kubernetes is by joining one of the many [Special Interest Groups](https://github.com/kubernetes/community/blob/master/sig-list.md) (SIGs) that align with your interests. Have something you’d like to broadcast to the Kubernetes community? Share your voice at our weekly [community meeting](https://github.com/kubernetes/community/blob/master/communication.md#weekly-meeting), and through the channels below. + +Thank you for your continued feedback and support. + +* Post questions (or answer questions) on [Stack Overflow](http://stackoverflow.com/questions/tagged/kubernetes) +* Join the community portal for advocates on [K8sPort](http://k8sport.org/) +* Follow us on Twitter [@Kubernetesio](https://twitter.com/kubernetesio) for latest updates +* Chat with the community on [Slack](http://slack.k8s.io/) +* Share your Kubernetes [story](https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform) From 754793ac062a1d33b7f7dffa9f5703ffdb31bbd7 Mon Sep 17 00:00:00 2001 From: Zach Arnold Date: Thu, 27 Sep 2018 17:35:08 -0700 Subject: [PATCH 003/181] update link location (#10403) --- content/en/docs/reference/kubernetes-api/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/reference/kubernetes-api/index.md b/content/en/docs/reference/kubernetes-api/index.md index 8c2c6fab83..bb5a42fee9 100644 --- a/content/en/docs/reference/kubernetes-api/index.md +++ b/content/en/docs/reference/kubernetes-api/index.md @@ -1,5 +1,5 @@ --- -title: v1.11 +title: v1.12 --- -[Kubernetes API v1.11](/docs/reference/generated/kubernetes-api/v1.11/) +[Kubernetes API v1.12](/docs/reference/generated/kubernetes-api/v1.12/) From 5e71c712b3cfe4797b854e2110680b096f5329f4 Mon Sep 17 00:00:00 2001 From: Zach Arnold Date: Thu, 27 Sep 2018 21:35:48 -0700 Subject: [PATCH 004/181] 1.12 ref docs (#10404) * update link location * api docs --- .../v1.12/css/bootstrap.min.css | 6 + .../v1.12/css/font-awesome.min.css | 4 + .../kubernetes-api/v1.12/css/stylesheet.css | 228 + .../v1.12/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../v1.12/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../v1.12/fonts/fontawesome-webfont.svg | 2671 + .../v1.12/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../v1.12/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../v1.12/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../generated/kubernetes-api/v1.12/index.html | 49755 ++++++++++++++++ .../v1.12/jquery.scrollTo.min.js | 7 + .../generated/kubernetes-api/v1.12/navData.js | 1 + .../generated/kubernetes-api/v1.12/scroll.js | 196 + 13 files changed, 52868 insertions(+) create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/css/bootstrap.min.css create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/css/font-awesome.min.css create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/css/stylesheet.css create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/fonts/FontAwesome.otf create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.eot create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.svg create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.ttf create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.woff create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.woff2 create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/index.html create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/jquery.scrollTo.min.js create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/navData.js create mode 100644 static/docs/reference/generated/kubernetes-api/v1.12/scroll.js diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/css/bootstrap.min.css b/static/docs/reference/generated/kubernetes-api/v1.12/css/bootstrap.min.css new file mode 100644 index 0000000000..ed3905e0e0 --- /dev/null +++ b/static/docs/reference/generated/kubernetes-api/v1.12/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/css/font-awesome.min.css b/static/docs/reference/generated/kubernetes-api/v1.12/css/font-awesome.min.css new file mode 100644 index 0000000000..540440ce89 --- /dev/null +++ b/static/docs/reference/generated/kubernetes-api/v1.12/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/css/stylesheet.css b/static/docs/reference/generated/kubernetes-api/v1.12/css/stylesheet.css new file mode 100644 index 0000000000..63a34be4b3 --- /dev/null +++ b/static/docs/reference/generated/kubernetes-api/v1.12/css/stylesheet.css @@ -0,0 +1,228 @@ +/* +Kubernetes colors + +kubernetes blue - rgb(50, 109, 230) +dark blue - rgb(51, 113, 227) +dark grey - rgb(48, 48, 48) +light grey - rgb(161, 160, 158) +*/ + +/* User agent CSS overrides */ +#sidebar-wrapper ul, #sidebar-wrapper li { + margin-left: 10px; + padding-left: 0; +} + +.body-content hr { + margin: 2em 0; + border-top: 2px solid dimgrey; + border-bottom: 2px solid antiquewhite; +} + +.body-content table { + margin-bottom: 1em; + width: 100%; + overflow: auto; +} + +.body-content table th, .body-content table td { + text-align: left; + vertical-align: top; + line-height: 1.5; +} + +.body-content table th { + padding: 15px 20px; + border-bottom: 1px solid lightsteelblue; + vertical-align: bottom; +} + +.body-content table td { + padding: 10px; +} + +.body-content table tr:last-child { + border-bottom: 1px solid lightsteelblue; +} + +.body-content table tr:nth-child(odd) > td { + background-color: WhiteSmoke; +} + +.body-content table tr:nth-child(even) > td { + background-color: Gainsboro; +} + +.body-content dt { + font-weight: bold; +} + +.body-content dd { + margin-left: 15px; +} + +.body-content p, .body-content li, .body-content dt, .body-content dd { + line-height: 1.6; + margin-top: 0; +} + +/* Brodoc CSS */ + +body > #wrapper { + display: block; + padding-bottom: 500px; +} + +#sidebar-wrapper { + display: block; + height: 100%; + width: 20%; + position: fixed; + z-index: 1; + top: 0; + left: 0; + background-color: whitesmoke; + border-right: 2px solid slategrey; + overflow-x: hidden; + padding-top: 60px; +} + +#sidebar-wrapper a { + text-decoration: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: 0 5px; +} + +#sidebar-wrapper ul { + list-style: none; +} + +#sidebar-wrapper a.selected { + font-style: bold; + color: whitesmoke; + border: 1px solid rgb(161, 160, 158); + background-color: rgb(51, 113, 227); + border-radius: 5px; +} + +#sidebar-wrapper .strong-nav { + font-family: monospace; + font-weight: bold; +} + +#sidebar-wrapper .nav-level-1.strong-nav { + margin-top: 25px; +} + +#sidebar-wrapper .copyright { + padding-left: 10px; + padding-top: 50px; + padding-bottom: 50px; + text-decoration: underline; +} + +#page-content-wrapper { + margin-left: 20%; + padding-top: 60px; +} + +.body-content h1, .body-content h2 { + clear: both; + border-bottom: 3px solid lightslategrey; + padding-top: 20px; +} + +.body-content > h3, .body-content > h4, .body-content > h5, .body-content > h6, .body-content > p, .body-content > aside, .body-content > ul > li, .body-content > ul > li { + padding-top: 20px; +} + +.body-content table tr td:not(:first-child) { + overflow-wrap: break-word; + word-wrap: break-word; +} + +.body-content table tr td a { + word-break: break-word; +} + +.body-content p code { + text-overflow: ellipsis; + color: #802060; + display: inline-block; + font-size: smaller; + word-break: break-word; +} + +.body-content blockquote { + border-left: 0; + border-radius: 5px; +} + +.body-content pre.code-block { + margin-top: 5px; + margin-bottom: 5px; +} + +.body-content blockquote p, .body-content pre { + color: black; + font-size: 13px; +} + +.body-content blockquote.code-block { + background: Wheat; +} + +.body-content pre.code-block code { + word-wrap: normal; + white-space: pre; +} + +.body-content code { + color: Brown !important; +} + +.code-block { + display: none; + width: 60%; + float: left; + clear: right; +} + +.code-block.active { + display: initial; +} + +#code-tabs-wrapper { + width: 55%; + height: 60px; + /* position: fixed; */ + top: 0; + right: 0; +} + +#code-tabs-wrapper .code-tab-list { + float: right; + margin-top: 0; + padding: 0 10px; +} + +#code-tabs-wrapper .code-tab { + color: white; + /* display: inline-block; */ + padding: 0 30px; + background: rgb(48, 48, 48); + border: 1px solid rgb(161, 160, 158); + border-radius: 5px; +} + +#code-tabs-wrapper .tab-selected { + background: rgb(51, 113, 227); + font-style: bold; + border-radius: 5px; +} + +.side-nav a { + color: black; +} diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/fonts/FontAwesome.otf b/static/docs/reference/generated/kubernetes-api/v1.12/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70 GIT binary patch literal 134808 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 literal 0 HcmV?d00001 diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.eot b/static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.ttf b/static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.woff2 b/static/docs/reference/generated/kubernetes-api/v1.12/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/index.html b/static/docs/reference/generated/kubernetes-api/v1.12/index.html new file mode 100644 index 0000000000..658036873c --- /dev/null +++ b/static/docs/reference/generated/kubernetes-api/v1.12/index.html @@ -0,0 +1,49755 @@ + + + + +Kubernetes API Reference Docs + + + + + + +

+
+
+

API OVERVIEW

+ +

Welcome to the Kubernetes API. You can use the Kubernetes API to read +and write Kubernetes resource objects via a Kubernetes API endpoint.

+ +

Resource Categories

+ +

This is a high-level overview of the basic types of resources provide by the Kubernetes API and their primary functions.

+

Workloads are objects you use to manage and run your containers on the cluster.

+

Discovery & LB resources are objects you use to "stitch" your workloads together into an externally accessible, load-balanced Service.

+

Config & Storage resources are objects you use to inject initialization data into your applications, and to persist data that is external to your container.

+

Cluster resources objects define how the cluster itself is configured; these are typically used only by cluster operators.

+

Metadata resources are objects you use to configure the behavior of other resources within the cluster, such as HorizontalPodAutoscaler for scaling workloads.

+ +
+ +

Resource Objects

+ +

Resource objects typically have 3 components:

+
    +
  • Resource ObjectMeta: This is metadata about the resource, such as its name, type, api version, annotations, and labels. This contains +fields that maybe updated both by the end user and the system (e.g. annotations).
  • +
  • ResourceSpec: This is defined by the user and describes the desired state of system. Fill this in when creating or updating an object.
  • +
  • ResourceStatus: This is filled in by the server and reports the current state of the system. In most cases, users don't need to change this.
  • +
+ +
+ +

Resource Operations

+ +

Most resources provide the following Operations:

+ +

Create

+ +

Create operations will create the resource in the storage backend. After a resource is create the system will apply +the desired state.

+ +

Update

+ +

Updates come in 2 forms: Replace and Patch: + +

    +
  • Replace: +Replacing a resource object will update the resource by replacing the existing spec with the provided one. For +read-then-write operations this is safe because an optimistic lock failure will occur if the resource was modified +between the read and write. Note: The ResourceStatus will be ignored by the system and will not be updated. +To update the status, one must invoke the specific status update operation.
    + +Note: Replacing a resource object may not result immediately in changes being propagated to downstream objects. For instance +replacing a ConfigMap or Secret resource will not result in all Pods seeing the changes unless the Pods are +restarted out of band.

  • + +
  • Patch: +Patch will apply a change to a specific field. How the change is merged is defined per field. Lists may either be +replaced or merged. Merging lists will not preserve ordering.
    + +Patches will never cause optimistic locking failures, and the last write will win. Patches are recommended +when the full state is not read before an update, or when failing on optimistic locking is undesirable. When patching +complex types, arrays and maps, how the patch is applied is defined on a per-field basis and may either replace +the field's current value, or merge the contents into the current value.
  • +
+ +

Read

+ +

Reads come in 3 forms: Get, List and Watch:

+ +

    +
  • Get: Get will retrieve a specific resource object by name.
  • +
  • List: List will retrieve all resource objects of a specific type within a namespace, and the results can be restricted to resources matching a selector query.
    +List All Namespaces: Like List but retrieves resources across all namespaces.
  • +
  • Watch: Watch will stream results for an object(s) as it is updated. Similar to a callback, watch is used to respond to resource changes.
  • +
+ +

Delete

+ +

Delete will delete a resource. Depending on the specific resource, child objects may or may not be garbage collected by the server. See +notes on specific resource objects for details.

+ +

Additional Operations

+ +

Resources may define additional operations specific to that resource type.

+ +
    +
  • Rollback: Rollback a PodTemplate to a previous version. Only available for some resource types.
  • +
  • Read / Write Scale: Read or Update the number of replicas for the given resource. Only available for some resource types.
  • +
  • Read / Write Status: Read or Update the Status for a resource object. The Status can only changed through these update operations.
  • +
+
+

Workloads APIs

+

Container v1 core

+ + +
+
+
Container Config to run nginx (must be embedded in a PodSpec to run).
+
+

+name: nginx
+# Run the nginx:1.10 image
+image: nginx:1.10
+
+
+
+
+
Container Config to run nginx (must be embedded in a PodSpec to run).
+
+

+name: nginx
+# Run the nginx:1.10 image
+image: nginx:1.10
+
+
+ + + + + +
GroupVersionKind
corev1Container
+

Warning:

Containers are only ever created within the context of a Pod. This is usually done using a Controller. See Controllers: Deployment, Job, or StatefulSet

+
Appears In: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
args
string array
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
command
string array
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
env
EnvVar array
patch strategy: merge
patch merge key: name
List of environment variables to set in the container. Cannot be updated.
envFrom
EnvFromSource array
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.
image
string
Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.
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
lifecycle
Lifecycle
Actions that the management system should take in response to container lifecycle events. Cannot be updated.
livenessProbe
Probe
Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
name
string
Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.
ports
ContainerPort array
patch strategy: merge
patch merge key: containerPort
List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated.
readinessProbe
Probe
Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
resources
ResourceRequirements
Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
securityContext
SecurityContext
Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
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
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.
tty
boolean
Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.
volumeDevices
VolumeDevice array
patch strategy: merge
patch merge key: devicePath
volumeDevices is the list of block devices to be used by the container. This is an alpha feature and may change in the future.
volumeMounts
VolumeMount array
patch strategy: merge
patch merge key: mountPath
Pod volumes to mount into the container's filesystem. Cannot be updated.
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.
+

ContainerStatus v1 core

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
containerID
string
Container's ID in the format 'docker://<container_id>'.
image
string
The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images
imageID
string
ImageID of the container's image.
lastState
ContainerState
Details about the container's last termination condition.
name
string
This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.
ready
boolean
Specifies whether the container has passed its readiness probe.
restartCount
integer
The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.
state
ContainerState
Details about the container's current condition.
+

CronJob v1beta1 batch

+ + + + + +
GroupVersionKind
batchv1beta1CronJob
+
Other API versions of this object exist: +v2alpha1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
CronJobSpec
Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
CronJobStatus
Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

CronJobSpec v1beta1 batch

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
concurrencyPolicy
string
Specifies how to treat concurrent executions of a Job. Valid values are: - "Allow" (default): allows CronJobs to run concurrently; - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - "Replace": cancels currently running job and replaces it with a new one
failedJobsHistoryLimit
integer
The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
jobTemplate
JobTemplateSpec
Specifies the job that will be created when executing a CronJob.
schedule
string
The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
startingDeadlineSeconds
integer
Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.
successfulJobsHistoryLimit
integer
The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.
suspend
boolean
This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.
+

CronJobStatus v1beta1 batch

+
Appears In: + +
+ + + + + + +
FieldDescription
active
ObjectReference array
A list of pointers to currently running jobs.
lastScheduleTime
Time
Information when was the last time the job was successfully scheduled.
+

CronJobList v1beta1 batch

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
CronJob array
items is the list of CronJobs.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a CronJob

+

HTTP Request

+POST /apis/batch/v1beta1/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CronJob
+

Response

+ + + + + + + +
CodeDescription
200
CronJob
OK
201
CronJob
Created
202
CronJob
Accepted
+

Patch

+

partially update the specified CronJob

+

HTTP Request

+PATCH /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

Replace

+

replace the specified CronJob

+

HTTP Request

+PUT /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CronJob
+

Response

+ + + + + + +
CodeDescription
200
CronJob
OK
201
CronJob
Created
+

Delete

+

delete a CronJob

+

HTTP Request

+DELETE /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of CronJob

+

HTTP Request

+DELETE /apis/batch/v1beta1/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified CronJob

+

HTTP Request

+GET /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

List

+

list or watch objects of kind CronJob

+

HTTP Request

+GET /apis/batch/v1beta1/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
CronJobList
OK
+

List All Namespaces

+

list or watch objects of kind CronJob

+

HTTP Request

+GET /apis/batch/v1beta1/cronjobs +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
CronJobList
OK
+

Watch

+

watch changes to an object of kind CronJob. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/batch/v1beta1/watch/cronjobs +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified CronJob

+

HTTP Request

+PATCH /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

Read Status

+

read status of the specified CronJob

+

HTTP Request

+GET /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

Replace Status

+

replace status of the specified CronJob

+

HTTP Request

+PUT /apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CronJob
+

Response

+ + + + + + +
CodeDescription
200
CronJob
OK
201
CronJob
Created
+

DaemonSet v1 apps

+ + +
+
+
DaemonSet Config to print the `hostname` on each Node in the cluster every 10 seconds.
+
+

+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  # Unique key of the DaemonSet instance
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      # This container is run once on each Node in the cluster
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        # This script is run through `sh -c <script>`
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+
+
+
+
DaemonSet Config to print the `hostname` on each Node in the cluster every 10 seconds.
+
+

+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  # Unique key of the DaemonSet instance
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      # This container is run once on each Node in the cluster
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        # This script is run through `sh -c <script>`
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+
+ + + + + +
GroupVersionKind
appsv1DaemonSet
+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
DaemonSetSpec
The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
DaemonSetStatus
The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

DaemonSetSpec v1 apps

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
minReadySeconds
integer
The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).
revisionHistoryLimit
integer
The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.
selector
LabelSelector
A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
updateStrategy
DaemonSetUpdateStrategy
An update strategy to replace existing DaemonSet pods with new pods.
+

DaemonSetStatus v1 apps

+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
collisionCount
integer
Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.
conditions
DaemonSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a DaemonSet's current state.
currentNumberScheduled
integer
The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
desiredNumberScheduled
integer
The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
numberAvailable
integer
The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)
numberMisscheduled
integer
The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
numberReady
integer
The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.
numberUnavailable
integer
The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)
observedGeneration
integer
The most recent generation observed by the daemon set controller.
updatedNumberScheduled
integer
The total number of nodes that are running updated daemon pod
+

DaemonSetList v1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
DaemonSet array
A list of daemon sets.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

RollingUpdateDaemonSet v1 apps

+ + + + + + +
FieldDescription
maxUnavailableThe 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. 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.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+' http://127.0.0.1:8001/apis/apps/v1/namespaces/default/daemonsets
+
+ + +
+
+
Output
+
+

+daemonset "daemonset-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "DaemonSet",
+  "apiVersion": "extensions/v1beta1",
+  "metadata": {
+    "name": "daemonset-example",
+    "namespace": "default",
+    "selfLink": "/apis/extensions/v1beta1/namespaces/default/daemonsets/daemonset-example",
+    "uid": "65552ced-b0e2-11e6-aef0-42010af00229",
+    "resourceVersion": "3558",
+    "generation": 1,
+    "creationTimestamp": "2016-11-22T18:35:09Z",
+    "labels": {
+      "app": "daemonset-example"
+    }
+  },
+  "spec": {
+    "selector": {
+      "matchLabels": {
+        "app": "daemonset-example"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "daemonset-example"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "daemonset-example",
+            "image": "ubuntu:trusty",
+            "command": [
+              "/bin/sh"
+            ],
+            "args": [
+              "-c",
+              "while [ true ]; do echo \"DaemonSet running on $(hostname)\" ; sleep 10 ; done"
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    }
+  },
+  "status": {
+    "currentNumberScheduled": 0,
+    "numberMisscheduled": 0,
+    "desiredNumberScheduled": 0
+  }
+}
+
+

create a DaemonSet

+

HTTP Request

+POST /apis/apps/v1/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
202
DaemonSet
Accepted
+

Patch

+

partially update the specified DaemonSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Replace

+

replace the specified DaemonSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + +
CodeDescription
201
DaemonSet
Created
200
DaemonSet
OK
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete daemonset daemonset-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/apps/v1/namespaces/default/daemonsets/daemonset-example'
+
+ + +
+
+
Output
+
+

+daemonset "daemonset-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a DaemonSet

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of DaemonSet

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get daemonset daemonset-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/apps/v1/namespaces/default/daemonsets/daemonset-example
+
+

read the specified DaemonSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

List

+

list or watch objects of kind DaemonSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DaemonSetList
OK
+

List All Namespaces

+

list or watch objects of kind DaemonSet

+

HTTP Request

+GET /apis/apps/v1/daemonsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DaemonSetList
OK
+

Watch

+

watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/daemonsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified DaemonSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Read Status

+

read status of the specified DaemonSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Replace Status

+

replace status of the specified DaemonSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
+

Deployment v1 apps

+ + +
+
+
Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
+
+

+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  # Unique key of the Deployment instance
+  name: deployment-example
+spec:
+  # 3 Pods should exist at all times.
+  replicas: 3
+  template:
+    metadata:
+      labels:
+        # Apply this label to pods and default
+        # the Deployment label selector to this value
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        # Run this image
+        image: nginx:1.10
+
+
+
+
+
Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
+
+

+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  # Unique key of the Deployment instance
+  name: deployment-example
+spec:
+  # 3 Pods should exist at all times.
+  replicas: 3
+  template:
+    metadata:
+      labels:
+        # Apply this label to pods and default
+        # the Deployment label selector to this value
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        # Run this image
+        image: nginx:1.10
+
+
+ + + + + +
GroupVersionKind
appsv1Deployment
+
Other API versions of this object exist: +v1beta2 +v1beta1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata.
spec
DeploymentSpec
Specification of the desired behavior of the Deployment.
status
DeploymentStatus
Most recently observed status of the Deployment.
+

DeploymentSpec v1 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
paused
boolean
Indicates that the deployment is paused.
progressDeadlineSeconds
integer
The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.
replicas
integer
Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
revisionHistoryLimit
integer
The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.
selector
LabelSelector
Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.
strategy
DeploymentStrategy
The deployment strategy to use to replace existing pods with new ones.
template
PodTemplateSpec
Template describes the pods that will be created.
+

DeploymentStatus v1 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
availableReplicas
integer
Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.
collisionCount
integer
Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.
conditions
DeploymentCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a deployment's current state.
observedGeneration
integer
The generation observed by the deployment controller.
readyReplicas
integer
Total number of ready pods targeted by this deployment.
replicas
integer
Total number of non-terminated pods targeted by this deployment (their labels match the selector).
unavailableReplicas
integer
Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.
updatedReplicas
integer
Total number of non-terminated pods targeted by this deployment that have the desired template spec.
+

DeploymentList v1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Deployment array
Items is the list of Deployments.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata.
+

DeploymentStrategy v1 apps

+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDeployment
Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.
type
string
Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
+

RollingUpdateDeployment v1 apps

+
Appears In: + +
+ + + + + + +
FieldDescription
maxSurgeThe maximum number of pods that can be scheduled above the desired number of pods. 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. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.
maxUnavailableThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2118306",
+    "generation": 1,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {}
+}
+
+

create a Deployment

+

HTTP Request

+POST /apis/apps/v1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + + +
CodeDescription
201
Deployment
Created
202
Deployment
Accepted
200
Deployment
OK
+

Patch

+ + +
+
+
kubectl command
+
+

+$ kubectl patch deployment deployment-example -p \
+	'{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}'
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' --data '
+{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}' \
+	'http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+"deployment-example" patched
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "5dc3a8e6-b0ee-11e6-aef0-42010af00229",
+    "resourceVersion": "164489",
+    "generation": 11,
+    "creationTimestamp": "2016-11-22T20:00:50Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "5"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 10,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

partially update the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' | kubectl replace -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PUT -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" replaced
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2119082",
+    "generation": 5,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

replace the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete deployment deployment-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a Deployment

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of Deployment

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

read the specified Deployment

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

List

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments'
+
+ + +
+
+
Output
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

List All Namespaces

+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/apps/v1/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

Watch

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example --watch -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/apps/v1/watch/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+
+
+
Response Body
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+

watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Read Status

+

read status of the specified Deployment

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace Status

+

replace status of the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified Deployment

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Job v1 batch

+ + +
+
+
Job Config to print pi up to 2000 digits (then exit).
+
+

+apiVersion: batch/v1
+kind: Job
+metadata:
+  # Unique key of the Job instance
+  name: example-job
+spec:
+  template:
+    metadata:
+      name: example-job
+    spec:
+      containers:
+      - name: pi
+        image: perl
+        command: ["perl"]
+        args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
+      # Do not restart containers after they exit
+      restartPolicy: Never
+
+
+
+
+
Job Config to print pi up to 2000 digits (then exit).
+
+

+apiVersion: batch/v1
+kind: Job
+metadata:
+  # Unique key of the Job instance
+  name: example-job
+spec:
+  template:
+    metadata:
+      name: example-job
+    spec:
+      containers:
+      - name: pi
+        image: perl
+        command: ["perl"]
+        args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
+      # Do not restart containers after they exit
+      restartPolicy: Never
+
+
+ + + + + +
GroupVersionKind
batchv1Job
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
JobSpec
Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
JobStatus
Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

JobSpec v1 batch

+ + + + + + + + + + + + + +
FieldDescription
activeDeadlineSeconds
integer
Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer
backoffLimit
integer
Specifies the number of retries before marking this job failed. Defaults to 6
completions
integer
Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
manualSelector
boolean
manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector
parallelism
integer
Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
selector
LabelSelector
A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
ttlSecondsAfterFinished
integer
ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.
+

JobStatus v1 batch

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
active
integer
The number of actively running pods.
completionTime
Time
Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.
conditions
JobCondition array
patch strategy: merge
patch merge key: type
The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
failed
integer
The number of pods which reached phase Failed.
startTime
Time
Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.
succeeded
integer
The number of pods which reached phase Succeeded.
+

JobList v1 batch

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Job array
items is the list of Jobs.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: batch/v1
+kind: Job
+metadata:
+  name: example-job
+spec:
+  template:
+    metadata:
+      name: example-job
+    spec:
+      containers:
+      - name: pi
+        image: perl
+        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
+      restartPolicy: Never
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: example-job
+spec:
+  template:
+    metadata:
+      name: example-job
+    spec:
+      containers:
+      - name: pi
+        image: perl
+        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
+      restartPolicy: Never
+' http://127.0.0.1:8001/apis/batch/v1/namespaces/default/jobs
+
+ + +
+
+
Output
+
+

+job "example-job" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "Job",
+  "apiVersion": "batch/v1",
+  "metadata": {
+    "name": "example-job",
+    "namespace": "default",
+    "selfLink": "/apis/batch/v1/namespaces/default/jobs/example-job",
+    "uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+    "resourceVersion": "7479",
+    "creationTimestamp": "2016-11-04T18:45:25Z"
+  },
+  "spec": {
+    "parallelism": 1,
+    "completions": 1,
+    "selector": {
+      "matchLabels": {
+        "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+      }
+    },
+    "template": {
+      "metadata": {
+        "name": "example-job",
+        "creationTimestamp": null,
+        "labels": {
+          "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+          "job-name": "example-job"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "pi",
+            "image": "perl",
+            "command": [
+              "perl",
+              "-Mbignum=bpi",
+              "-wle",
+              "print bpi(2000)"
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "Always"
+          }
+        ],
+        "restartPolicy": "Never",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    }
+  },
+  "status": {}
+}
+
+

create a Job

+

HTTP Request

+POST /apis/batch/v1/namespaces/{namespace}/jobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Job
+

Response

+ + + + + + + +
CodeDescription
202
Job
Accepted
200
Job
OK
201
Job
Created
+

Patch

+

partially update the specified Job

+

HTTP Request

+PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Job
OK
+

Replace

+

replace the specified Job

+

HTTP Request

+PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Job
+

Response

+ + + + + + +
CodeDescription
201
Job
Created
200
Job
OK
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete job example-job
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/batch/v1/namespaces/default/jobs/example-job'
+
+ + +
+
+
Output
+
+

+job "example-job" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a Job

+

HTTP Request

+DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Job

+

HTTP Request

+DELETE /apis/batch/v1/namespaces/{namespace}/jobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get job example-job -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/batch/v1/namespaces/default/jobs/example-job
+
+ + +
+
+
Output
+
+

+{
+  "kind": "Job",
+  "apiVersion": "batch/v1",
+  "metadata": {
+    "name": "example-job",
+    "namespace": "default",
+    "selfLink": "/apis/batch/v1/namespaces/default/jobs/example-job",
+    "uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+    "resourceVersion": "7482",
+    "creationTimestamp": "2016-11-04T18:45:25Z"
+  },
+  "spec": {
+    "parallelism": 1,
+    "completions": 1,
+    "selector": {
+      "matchLabels": {
+        "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+      }
+    },
+    "template": {
+      "metadata": {
+        "name": "example-job",
+        "creationTimestamp": null,
+        "labels": {
+          "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+          "job-name": "example-job"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "pi",
+            "image": "perl",
+            "command": [
+              "perl",
+              "-Mbignum=bpi",
+              "-wle",
+              "print bpi(2000)"
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "Always"
+          }
+        ],
+        "restartPolicy": "Never",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    }
+  },
+  "status": {
+    "startTime": "2016-11-04T18:45:25Z",
+    "active": 1
+  }
+}
+
+
+
+
Response Body
+
+

+{
+  "kind": "Job",
+  "apiVersion": "batch/v1",
+  "metadata": {
+    "name": "example-job",
+    "namespace": "default",
+    "selfLink": "/apis/batch/v1/namespaces/default/jobs/example-job",
+    "uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+    "resourceVersion": "7482",
+    "creationTimestamp": "2016-11-04T18:45:25Z"
+  },
+  "spec": {
+    "parallelism": 1,
+    "completions": 1,
+    "selector": {
+      "matchLabels": {
+        "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+      }
+    },
+    "template": {
+      "metadata": {
+        "name": "example-job",
+        "creationTimestamp": null,
+        "labels": {
+          "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+          "job-name": "example-job"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "pi",
+            "image": "perl",
+            "command": [
+              "perl",
+              "-Mbignum=bpi",
+              "-wle",
+              "print bpi(2000)"
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "Always"
+          }
+        ],
+        "restartPolicy": "Never",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    }
+  },
+  "status": {
+    "startTime": "2016-11-04T18:45:25Z",
+    "active": 1
+  }
+}
+
+

read the specified Job

+

HTTP Request

+GET /apis/batch/v1/namespaces/{namespace}/jobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Job
OK
+

List

+ + +
+
+
kubectl command
+
+

+$ kubectl get job -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/batch/v1/namespaces/default/jobs'
+
+ + +
+
+
Output
+
+

+{
+  "kind": "JobList",
+  "apiVersion": "batch/v1",
+  "metadata": {
+    "selfLink": "/apis/batch/v1/namespaces/default/jobs",
+    "resourceVersion": "7589"
+  },
+  "items": [
+    {
+      "metadata": {
+        "name": "",
+        "namespace": "default",
+        "selfLink": "/apis/batch/v1/namespaces/default/jobs/",
+        "uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+        "resourceVersion": "7482",
+        "creationTimestamp": "2016-11-04T18:45:25Z"
+      },
+      "spec": {
+        "parallelism": 1,
+        "completions": 1,
+        "selector": {
+          "matchLabels": {
+            "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+          }
+        },
+        "template": {
+          "metadata": {
+            "name": "",
+            "creationTimestamp": null,
+            "labels": {
+              "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+              "job-name": ""
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "pi",
+                "image": "perl",
+                "command": [
+                  "perl",
+                  "-Mbignum=bpi",
+                  "-wle",
+                  "print bpi(2000)"
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Never",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        }
+      },
+      "status": {
+        "startTime": "2016-11-04T18:45:25Z",
+        "active": 1
+      }
+    }
+  ]
+}
+
+
+
+
Response Body
+
+

+{
+  "kind": "JobList",
+  "apiVersion": "batch/v1",
+  "metadata": {
+    "selfLink": "/apis/batch/v1/namespaces/default/jobs",
+    "resourceVersion": "7589"
+  },
+  "items": [
+    {
+      "metadata": {
+        "name": "",
+        "namespace": "default",
+        "selfLink": "/apis/batch/v1/namespaces/default/jobs/",
+        "uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+        "resourceVersion": "7482",
+        "creationTimestamp": "2016-11-04T18:45:25Z"
+      },
+      "spec": {
+        "parallelism": 1,
+        "completions": 1,
+        "selector": {
+          "matchLabels": {
+            "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+          }
+        },
+        "template": {
+          "metadata": {
+            "name": "",
+            "creationTimestamp": null,
+            "labels": {
+              "controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+              "job-name": ""
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "pi",
+                "image": "perl",
+                "command": [
+                  "perl",
+                  "-Mbignum=bpi",
+                  "-wle",
+                  "print bpi(2000)"
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Never",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        }
+      },
+      "status": {
+        "startTime": "2016-11-04T18:45:25Z",
+        "active": 1
+      }
+    }
+  ]
+}
+
+

list or watch objects of kind Job

+

HTTP Request

+GET /apis/batch/v1/namespaces/{namespace}/jobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
JobList
OK
+

List All Namespaces

+

list or watch objects of kind Job

+

HTTP Request

+GET /apis/batch/v1/jobs +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
JobList
OK
+

Watch

+ + +
+
+
kubectl command
+
+

+$ kubectl get job example-job --watch -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/batch/v1/watch/namespaces/default/jobs/example-job'
+
+ + +
+
+
Output
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Job",
+		"apiVersion": "batch/v1",
+		"metadata": {
+			"name": "example-job",
+			"namespace": "default",
+			"selfLink": "/apis/batch/v1/namespaces/default/jobs/example-job",
+			"uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+			"resourceVersion": "7482",
+			"creationTimestamp": "2016-11-04T18:45:25Z"
+		},
+		"spec": {
+			"parallelism": 1,
+			"completions": 1,
+			"selector": {
+				"matchLabels": {
+					"controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+				}
+			},
+			"template": {
+				"metadata": {
+					"name": "example-job",
+					"creationTimestamp": null,
+					"labels": {
+						"controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+						"job-name": "example-job"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "pi",
+							"image": "perl",
+							"command": [
+								"perl",
+								"-Mbignum=bpi",
+								"-wle",
+								"print bpi(2000)"
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "Always"
+						}
+					],
+					"restartPolicy": "Never",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			}
+		},
+		"status": {
+			"startTime": "2016-11-04T18:45:25Z",
+			"active": 1
+		}
+	}
+}
+
+
+
+
Response Body
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Job",
+		"apiVersion": "batch/v1",
+		"metadata": {
+			"name": "example-job",
+			"namespace": "default",
+			"selfLink": "/apis/batch/v1/namespaces/default/jobs/example-job",
+			"uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+			"resourceVersion": "7482",
+			"creationTimestamp": "2016-11-04T18:45:25Z"
+		},
+		"spec": {
+			"parallelism": 1,
+			"completions": 1,
+			"selector": {
+				"matchLabels": {
+					"controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7"
+				}
+			},
+			"template": {
+				"metadata": {
+					"name": "example-job",
+					"creationTimestamp": null,
+					"labels": {
+						"controller-uid": "d93a3569-a2be-11e6-a008-fa043d458cc7",
+						"job-name": "example-job"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "pi",
+							"image": "perl",
+							"command": [
+								"perl",
+								"-Mbignum=bpi",
+								"-wle",
+								"print bpi(2000)"
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "Always"
+						}
+					],
+					"restartPolicy": "Never",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			}
+		},
+		"status": {
+			"startTime": "2016-11-04T18:45:25Z",
+			"active": 1
+		}
+	}
+}
+
+

watch changes to an object of kind Job. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/batch/v1/watch/namespaces/{namespace}/jobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/batch/v1/watch/namespaces/{namespace}/jobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Job. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/batch/v1/watch/jobs +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Job

+

HTTP Request

+PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Job
OK
+

Read Status

+

read status of the specified Job

+

HTTP Request

+GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Job
OK
+

Replace Status

+

replace status of the specified Job

+

HTTP Request

+PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Job
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Job
+

Response

+ + + + + + +
CodeDescription
200
Job
OK
201
Job
Created
+

Pod v1 core

+ + +
+
+
Pod Config to print "Hello World".
+
+

+apiVersion: v1
+kind: Pod
+metadata:
+  name: pod-example
+spec:
+  containers:
+  - name: ubuntu
+    image: ubuntu:trusty
+    command: ["echo"]
+    args: ["Hello World"]
+
+
+
+
+
Pod Config to print "Hello World".
+
+

+apiVersion: v1
+kind: Pod
+metadata:
+  name: pod-example
+spec:
+  containers:
+  - name: ubuntu
+    image: ubuntu:trusty
+    command: ["echo"]
+    args: ["Hello World"]
+
+
+ + + + + +
GroupVersionKind
corev1Pod
+

Warning:

It is recommended that users create Pods only through a Controller, and not directly. See Controllers: Deployment, Job, or StatefulSet.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
PodSpec
Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
PodStatus
Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

PodSpec v1 core

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
activeDeadlineSeconds
integer
Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.
affinity
Affinity
If specified, the pod's scheduling constraints
automountServiceAccountToken
boolean
AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.
containers
Container array
patch strategy: merge
patch merge key: name
List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.
dnsConfig
PodDNSConfig
Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.
dnsPolicy
string
Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.
hostAliases
HostAlias array
patch strategy: merge
patch merge key: ip
HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.
hostIPC
boolean
Use the host's ipc namespace. Optional: Default to false.
hostNetwork
boolean
Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.
hostPID
boolean
Use the host's pid namespace. Optional: Default to false.
hostname
string
Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.
imagePullSecrets
LocalObjectReference array
patch strategy: merge
patch merge key: name
ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
initContainers
Container array
patch strategy: merge
patch merge key: name
List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
nodeName
string
NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.
nodeSelector
object
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
priority
integer
The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.
priorityClassName
string
If specified, indicates the pod's priority. "system-node-critical" and "system-cluster-critical" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.
readinessGates
PodReadinessGate array
If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to "True" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md
restartPolicy
string
Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md This is an alpha feature and may change in the future.
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.
securityContext
PodSecurityContext
SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.
serviceAccount
string
DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.
serviceAccountName
string
ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
shareProcessNamespace
boolean
Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is beta-level and may be disabled with the PodShareProcessNamespace feature.
subdomain
string
If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>". If not specified, the pod will not have a domainname at all.
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.
tolerations
Toleration array
If specified, the pod's tolerations.
volumes
Volume array
patch strategy: merge,retainKeys
patch merge key: name
List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes
+

PodStatus v1 core

+
Appears In: + +
+ + + + + + + + + + + + + + + +
FieldDescription
conditions
PodCondition array
patch strategy: merge
patch merge key: type
Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
containerStatuses
ContainerStatus array
The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
hostIP
string
IP address of the host to which the pod is assigned. Empty if not yet scheduled.
initContainerStatuses
ContainerStatus array
The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
message
string
A human readable message indicating details about why the pod is in this condition.
nominatedNodeName
string
nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.
phase
string
The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values: Pending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
podIP
string
IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.
qosClass
string
The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
reason
string
A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'
startTime
Time
RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.
+

PodList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Pod array
List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a Pod

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/pods +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Pod
+

Response

+ + + + + + + +
CodeDescription
200
Pod
OK
201
Pod
Created
202
Pod
Accepted
+

Create Eviction

+

create eviction of a Pod

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/pods/{name}/eviction +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Eviction
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Eviction
+

Response

+ + + + + + + +
CodeDescription
201
Eviction
Created
202
Eviction
Accepted
200
Eviction
OK
+

Patch

+

partially update the specified Pod

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/pods/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Pod
OK
+

Replace

+

replace the specified Pod

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/pods/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Pod
+

Response

+ + + + + + +
CodeDescription
201
Pod
Created
200
Pod
OK
+

Delete

+

delete a Pod

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/pods/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Pod

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/pods +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Pod
OK
+

List

+

list or watch objects of kind Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodList
OK
+

List All Namespaces

+

list or watch objects of kind Pod

+

HTTP Request

+GET /api/v1/pods +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodList
OK
+

Watch

+

watch changes to an object of kind Pod. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/pods/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/pods +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Pod. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/pods +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Pod

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/pods/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Pod
OK
+

Read Status

+

read status of the specified Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Pod
OK
+

Replace Status

+

replace status of the specified Pod

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/pods/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Pod
+

Response

+ + + + + + +
CodeDescription
200
Pod
OK
201
Pod
Created
+

Proxy Operations

+

Create Connect Portforward

+

connect POST requests to portforward of Pod

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/pods/{name}/portforward +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPortForwardOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
portsList of ports to forward Required when using WebSockets
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Create Connect Proxy

+

connect POST requests to proxy of Pod

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/pods/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Create Connect Proxy Path

+

connect POST requests to proxy of Pod

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/pods/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Delete Connect Proxy

+

connect DELETE requests to proxy of Pod

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/pods/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Delete Connect Proxy Path

+

connect DELETE requests to proxy of Pod

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/pods/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Portforward

+

connect GET requests to portforward of Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods/{name}/portforward +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPortForwardOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
portsList of ports to forward Required when using WebSockets
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Proxy

+

connect GET requests to proxy of Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Proxy Path

+

connect GET requests to proxy of Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Head Connect Proxy

+

connect HEAD requests to proxy of Pod

+

HTTP Request

+HEAD /api/v1/namespaces/{namespace}/pods/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Head Connect Proxy Path

+

connect HEAD requests to proxy of Pod

+

HTTP Request

+HEAD /api/v1/namespaces/{namespace}/pods/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Replace Connect Proxy

+

connect PUT requests to proxy of Pod

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/pods/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Replace Connect Proxy Path

+

connect PUT requests to proxy of Pod

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/pods/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the PodProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to pod.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Misc Operations

+

Read Log

+

read log of the specified Pod

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/pods/{name}/log +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Pod
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + +
ParameterDescription
containerThe container for which to stream logs. Defaults to only container if there is one container in the pod.
followFollow the log stream of the pod. Defaults to false.
limitBytesIf set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.
prettyIf 'true', then the output is pretty printed.
previousReturn previous terminated container logs. Defaults to false.
sinceSecondsA relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.
tailLinesIf set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime
timestampsIf true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

ReplicaSet v1 apps

+ + +
+
+
ReplicaSet Config to run 3 nginx instances.
+
+

+apiVersion: extensions/v1beta1
+kind: ReplicaSet
+metadata:
+  # Unique key of the ReplicaSet instance
+  name: replicaset-example
+spec:
+  # 3 Pods should exist at all times.
+  replicas: 3
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      # Run the nginx image
+      - name: nginx
+        image: nginx:1.10
+
+
+
+
+
ReplicaSet Config to run 3 nginx instances.
+
+

+apiVersion: extensions/v1beta1
+kind: ReplicaSet
+metadata:
+  # Unique key of the ReplicaSet instance
+  name: replicaset-example
+spec:
+  # 3 Pods should exist at all times.
+  replicas: 3
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      # Run the nginx image
+      - name: nginx
+        image: nginx:1.10
+
+
+ + + + + +
GroupVersionKind
appsv1ReplicaSet
+

Warning:

In many cases it is recommended to create a Deployment instead of ReplicaSet.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
ReplicaSetSpec
Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
ReplicaSetStatus
Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

ReplicaSetSpec v1 apps

+
Appears In: + +
+ + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
replicas
integer
Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
selector
LabelSelector
Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
+

ReplicaSetStatus v1 apps

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
availableReplicas
integer
The number of available replicas (ready for at least minReadySeconds) for this replica set.
conditions
ReplicaSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a replica set's current state.
fullyLabeledReplicas
integer
The number of pods that have labels matching the labels of the pod template of the replicaset.
observedGeneration
integer
ObservedGeneration reflects the generation of the most recently observed ReplicaSet.
readyReplicas
integer
The number of ready replicas for this replica set.
replicas
integer
Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
+

ReplicaSetList v1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ReplicaSet array
List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ReplicaSet

+

HTTP Request

+POST /apis/apps/v1/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
202
ReplicaSet
Accepted
+

Patch

+

partially update the specified ReplicaSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Replace

+

replace the specified ReplicaSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
+

Delete

+

delete a ReplicaSet

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ReplicaSet

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ReplicaSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

List

+

list or watch objects of kind ReplicaSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSetList
OK
+

List All Namespaces

+

list or watch objects of kind ReplicaSet

+

HTTP Request

+GET /apis/apps/v1/replicasets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSetList
OK
+

Watch

+

watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/replicasets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified ReplicaSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Read Status

+

read status of the specified ReplicaSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Replace Status

+

replace status of the specified ReplicaSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified ReplicaSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified ReplicaSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified ReplicaSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

ReplicationController v1 core

+ + +
+
+
ReplicationController Config to run 3 nginx instances.
+
+

+apiVersion: v1
+kind: ReplicationController
+metadata:
+  # Unique key of the ReplicationController instance
+  name: replicationcontroller-example
+spec:
+  # 3 Pods should exist at all times.
+  replicas: 3
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      # Run the nginx image
+      - name: nginx
+        image: nginx:1.10
+
+
+
+
+
ReplicationController Config to run 3 nginx instances.
+
+

+apiVersion: v1
+kind: ReplicationController
+metadata:
+  # Unique key of the ReplicationController instance
+  name: replicationcontroller-example
+spec:
+  # 3 Pods should exist at all times.
+  replicas: 3
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      # Run the nginx image
+      - name: nginx
+        image: nginx:1.10
+
+
+ + + + + +
GroupVersionKind
corev1ReplicationController
+

Warning:

In many cases it is recommended to create a Deployment instead of a ReplicationController.

+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
ReplicationControllerSpec
Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
ReplicationControllerStatus
Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

ReplicationControllerSpec v1 core

+
Appears In: + +
+ + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
replicas
integer
Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
selector
object
Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
+

ReplicationControllerStatus v1 core

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
availableReplicas
integer
The number of available replicas (ready for at least minReadySeconds) for this replication controller.
conditions
ReplicationControllerCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a replication controller's current state.
fullyLabeledReplicas
integer
The number of pods that have labels matching the labels of the pod template of the replication controller.
observedGeneration
integer
ObservedGeneration reflects the generation of the most recently observed replication controller.
readyReplicas
integer
The number of ready replicas for this replication controller.
replicas
integer
Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
+

ReplicationControllerList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ReplicationController array
List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ReplicationController

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/replicationcontrollers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicationController
+

Response

+ + + + + + + +
CodeDescription
202
ReplicationController
Accepted
200
ReplicationController
OK
201
ReplicationController
Created
+

Patch

+

partially update the specified ReplicationController

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/replicationcontrollers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicationController
OK
+

Replace

+

replace the specified ReplicationController

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/replicationcontrollers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicationController
+

Response

+ + + + + + +
CodeDescription
200
ReplicationController
OK
201
ReplicationController
Created
+

Delete

+

delete a ReplicationController

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/replicationcontrollers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ReplicationController

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/replicationcontrollers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ReplicationController

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/replicationcontrollers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ReplicationController
OK
+

List

+

list or watch objects of kind ReplicationController

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/replicationcontrollers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicationControllerList
OK
+

List All Namespaces

+

list or watch objects of kind ReplicationController

+

HTTP Request

+GET /api/v1/replicationcontrollers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicationControllerList
OK
+

Watch

+

watch changes to an object of kind ReplicationController. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/replicationcontrollers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ReplicationController. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/replicationcontrollers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified ReplicationController

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicationController
OK
+

Read Status

+

read status of the specified ReplicationController

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ReplicationController
OK
+

Replace Status

+

replace status of the specified ReplicationController

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicationController
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicationController
+

Response

+ + + + + + +
CodeDescription
201
ReplicationController
Created
200
ReplicationController
OK
+

Misc Operations

+

Read Scale

+

read scale of the specified ReplicationController

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified ReplicationController

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified ReplicationController

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

StatefulSet v1 apps

+ + + + + +
GroupVersionKind
appsv1StatefulSet
+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
StatefulSetSpec
Spec defines the desired identities of pods in this set.
status
StatefulSetStatus
Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.
+

StatefulSetSpec v1 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
podManagementPolicy
string
podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.
replicas
integer
replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.
revisionHistoryLimit
integer
revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.
selector
LabelSelector
selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
serviceName
string
serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.
template
PodTemplateSpec
template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.
updateStrategy
StatefulSetUpdateStrategy
updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.
volumeClaimTemplates
PersistentVolumeClaim array
volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.
+

StatefulSetStatus v1 apps

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
collisionCount
integer
collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.
conditions
StatefulSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a statefulset's current state.
currentReplicas
integer
currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.
currentRevision
string
currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).
observedGeneration
integer
observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.
readyReplicas
integer
readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.
replicas
integer
replicas is the number of Pods created by the StatefulSet controller.
updateRevision
string
updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
updatedReplicas
integer
updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.
+

StatefulSetList v1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
StatefulSet array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create a StatefulSet

+

HTTP Request

+POST /apis/apps/v1/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
202
StatefulSet
Accepted
+

Patch

+

partially update the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Replace

+

replace the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
+

Delete

+

delete a StatefulSet

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of StatefulSet

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

List

+

list or watch objects of kind StatefulSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StatefulSetList
OK
+

List All Namespaces

+

list or watch objects of kind StatefulSet

+

HTTP Request

+GET /apis/apps/v1/statefulsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StatefulSetList
OK
+

Watch

+

watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/statefulsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Read Status

+

read status of the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Replace Status

+

replace status of the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
201
Scale
Created
200
Scale
OK
+

Patch Scale

+

partially update scale of the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Service APIs

+

Endpoints v1 core

+ + + + + +
GroupVersionKind
corev1Endpoints
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
subsets
EndpointSubset array
The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.
+

EndpointsList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Endpoints array
List of endpoints.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create Endpoints

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/endpoints +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Endpoints
+

Response

+ + + + + + + +
CodeDescription
200
Endpoints
OK
201
Endpoints
Created
202
Endpoints
Accepted
+

Patch

+

partially update the specified Endpoints

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/endpoints/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Endpoints
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Endpoints
OK
+

Replace

+

replace the specified Endpoints

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/endpoints/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Endpoints
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Endpoints
+

Response

+ + + + + + +
CodeDescription
200
Endpoints
OK
201
Endpoints
Created
+

Delete

+

delete Endpoints

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/endpoints/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Endpoints
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Endpoints

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/endpoints +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Endpoints

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/endpoints/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Endpoints
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Endpoints
OK
+

List

+

list or watch objects of kind Endpoints

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/endpoints +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
EndpointsList
OK
+

List All Namespaces

+

list or watch objects of kind Endpoints

+

HTTP Request

+GET /api/v1/endpoints +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
EndpointsList
OK
+

Watch

+

watch changes to an object of kind Endpoints. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/endpoints/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Endpoints
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/endpoints +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Endpoints. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/endpoints +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Ingress v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1Ingress
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
IngressSpec
Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
IngressStatus
Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

IngressSpec v1beta1 extensions

+
Appears In: + +
+ + + + + + + +
FieldDescription
backend
IngressBackend
A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.
rules
IngressRule array
A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.
tls
IngressTLS array
TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.
+

IngressStatus v1beta1 extensions

+
Appears In: + +
+ + + + + +
FieldDescription
loadBalancer
LoadBalancerStatus
LoadBalancer contains the current status of the load-balancer.
+

IngressList v1beta1 extensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Ingress array
Items is the list of Ingress.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create an Ingress

+

HTTP Request

+POST /apis/extensions/v1beta1/namespaces/{namespace}/ingresses +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Ingress
+

Response

+ + + + + + + +
CodeDescription
200
Ingress
OK
201
Ingress
Created
202
Ingress
Accepted
+

Patch

+

partially update the specified Ingress

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Ingress
OK
+

Replace

+

replace the specified Ingress

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Ingress
+

Response

+ + + + + + +
CodeDescription
200
Ingress
OK
201
Ingress
Created
+

Delete

+

delete an Ingress

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of Ingress

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Ingress

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Ingress
OK
+

List

+

list or watch objects of kind Ingress

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
IngressList
OK
+

List All Namespaces

+

list or watch objects of kind Ingress

+

HTTP Request

+GET /apis/extensions/v1beta1/ingresses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
IngressList
OK
+

Watch

+

watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/ingresses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Ingress

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Ingress
OK
+

Read Status

+

read status of the specified Ingress

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Ingress
OK
+

Replace Status

+

replace status of the specified Ingress

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Ingress
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Ingress
+

Response

+ + + + + + +
CodeDescription
200
Ingress
OK
201
Ingress
Created
+

Service v1 core

+ + +
+
+
Service Config to load balance traffic across all Pods with the app=nginx label. Receives on and sends to port 80. Exposes an externally accessible endpoint.
+
+

+kind: Service
+apiVersion: v1
+metadata:
+  # Unique key of the Service instance
+  name: service-example
+spec:
+  ports:
+    # Accept traffic sent to port 80
+    - name: http
+      port: 80
+      targetPort: 80
+  selector:
+    # Loadbalance traffic across Pods matching
+    # this label selector
+    app: nginx
+  # Create an HA proxy in the cloud provider
+  # with an External IP address - *Only supported
+  # by some cloud providers*
+  type: LoadBalancer
+
+
+
+
+
Service Config to load balance traffic across all Pods with the app=nginx label. Receives on and sends to port 80. Exposes an externally accessible endpoint.
+
+

+kind: Service
+apiVersion: v1
+metadata:
+  # Unique key of the Service instance
+  name: service-example
+spec:
+  ports:
+    # Accept traffic sent to port 80
+    - name: http
+      port: 80
+      targetPort: 80
+  selector:
+    # Loadbalance traffic across Pods matching
+    # this label selector
+    app: nginx
+  # Create an HA proxy in the cloud provider
+  # with an External IP address - *Only supported
+  # by some cloud providers*
+  type: LoadBalancer
+
+
+ + + + + +
GroupVersionKind
corev1Service
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
ServiceSpec
Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
ServiceStatus
Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

ServiceSpec v1 core

+
Appears In: + +
+ + + + + + + + + + + + + + + + + +
FieldDescription
clusterIP
string
clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are "None", empty string (""), or a valid IP address. "None" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
externalIPs
string array
externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.
externalName
string
externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.
externalTrafficPolicy
string
externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.
healthCheckNodePort
integer
healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.
loadBalancerIP
string
Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.
loadBalancerSourceRanges
string array
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/
ports
ServicePort array
patch strategy: merge
patch merge key: port
The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
publishNotReadyAddresses
boolean
publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.
selector
object
Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/
sessionAffinity
string
Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
sessionAffinityConfig
SessionAffinityConfig
sessionAffinityConfig contains the configurations of session affinity.
type
string
type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ExternalName" maps to the specified externalName. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types
+

ServiceStatus v1 core

+
Appears In: + +
+ + + + + +
FieldDescription
loadBalancer
LoadBalancerStatus
LoadBalancer contains the current status of the load-balancer, if one is present.
+

ServiceList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Service array
List of services
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'kind: Service
+apiVersion: v1
+metadata:
+  name: service-example
+spec:
+  ports:
+    - name: http
+      port: 80
+      targetPort: 80
+  selector:
+      app: nginx
+  type: LoadBalancer
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+kind: Service
+apiVersion: v1
+metadata:
+  name: service-example
+spec:
+  ports:
+    - name: http
+      port: 80
+      targetPort: 80
+  selector:
+      app: nginx
+  type: LoadBalancer
+' http://127.0.0.1:8001/api/v1/namespaces/default/services
+
+ + +
+
+
Output
+
+

+service "service-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "Service",
+  "apiVersion": "v1",
+  "metadata": {
+    "name": "service-example",
+    "namespace": "default",
+    "selfLink": "/api/v1/namespaces/default/services/service-example",
+    "uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+    "resourceVersion": "2205767",
+    "creationTimestamp": "2016-10-28T17:04:24Z"
+  },
+  "spec": {
+    "ports": [
+      {
+        "name": "http",
+        "protocol": "TCP",
+        "port": 80,
+        "targetPort": 80,
+        "nodePort": 32417
+      }
+    ],
+    "selector": {
+      "app": "nginx"
+    },
+    "clusterIP": "10.183.250.161",
+    "type": "LoadBalancer",
+    "sessionAffinity": "None"
+  },
+  "status": {
+    "loadBalancer": {}
+  }
+}
+
+

create a Service

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/services +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Service
+

Response

+ + + + + + + +
CodeDescription
202
Service
Accepted
200
Service
OK
201
Service
Created
+

Patch

+ + +
+
+
kubectl command
+
+

+$ kubectl patch service  -p \
+	'{"spec":{"ports":[{"name":"http","port":80,"targetPort":8080}]}}'
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' --data '
+{"spec":{"ports":[{"name":"http","port":80,"targetPort":8080}]}}' \
+	'http://127.0.0.1:8001/api/v1/namespaces/default/services/'
+
+ + +
+
+
Output
+
+

+"" patched
+
+
+
+
Response Body
+
+

+{
+  "kind": "Service",
+  "apiVersion": "v1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/api/v1/namespaces/default/services/deployment-example",
+    "uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+    "resourceVersion": "2205995",
+    "creationTimestamp": "2016-10-28T17:04:24Z"
+  },
+  "spec": {
+    "ports": [
+      {
+        "name": "http",
+        "protocol": "TCP",
+        "port": 80,
+        "targetPort": 8080,
+        "nodePort": 32417
+      }
+    ],
+    "selector": {
+      "app": "nginx"
+    },
+    "clusterIP": "10.183.250.161",
+    "type": "LoadBalancer",
+    "sessionAffinity": "None"
+  },
+  "status": {
+    "loadBalancer": {
+      "ingress": [
+        {
+          "ip": "104.198.186.106"
+        }
+      ]
+    }
+  }
+}
+
+

partially update the specified Service

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/services/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Service
OK
+

Replace

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: v1
+kind: Service
+metadata:
+  name: deployment-example
+  resourceVersion: "2205995"
+spec:
+  clusterIP: 10.183.250.161
+  ports:
+  - name: http
+    nodePort: 32417
+    port: 80
+    protocol: TCP
+    targetPort: 8080
+  selector:
+    app: nginx
+  sessionAffinity: None
+  type: LoadBalancer
+' | kubectl replace -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PUT -H 'Content-Type: application/yaml' --data '
+apiVersion: v1
+kind: Service
+metadata:
+  name: deployment-example
+  resourceVersion: "2205995"
+spec:
+  clusterIP: 10.183.250.161
+  ports:
+  - name: http
+    nodePort: 32417
+    port: 80
+    protocol: TCP
+    targetPort: 8080
+  selector:
+    app: nginx
+  sessionAffinity: None
+  type: LoadBalancer
+' http://127.0.0.1:8001/api/v1/namespaces/default/services/deployment-example
+
+ + +
+
+
Output
+
+

+service "deployment-example" replaced
+
+
+
+
Response Body
+
+

+{
+  "kind": "Service",
+  "apiVersion": "v1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/api/v1/namespaces/default/services/deployment-example",
+    "uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+    "resourceVersion": "2208672",
+    "creationTimestamp": "2016-10-28T17:04:24Z"
+  },
+  "spec": {
+    "ports": [
+      {
+        "name": "http",
+        "protocol": "TCP",
+        "port": 80,
+        "targetPort": 8080,
+        "nodePort": 32417
+      }
+    ],
+    "selector": {
+      "app": "nginx"
+    },
+    "clusterIP": "10.183.250.161",
+    "type": "LoadBalancer",
+    "sessionAffinity": "None"
+  },
+  "status": {
+    "loadBalancer": {
+      "ingress": [
+        {
+          "ip": "104.198.186.106"
+        }
+      ]
+    }
+  }
+}
+
+

replace the specified Service

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/services/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Service
+

Response

+ + + + + + +
CodeDescription
200
Service
OK
201
Service
Created
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete service deployment-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/api/v1/namespaces/default/services/deployment-example'
+
+ + +
+
+
Output
+
+

+service "deployment-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a Service

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/services/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get service deployment-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/api/v1/namespaces/default/services/deployment-example
+
+ + +
+
+
Output
+
+

+{
+  "kind": "Service",
+  "apiVersion": "v1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/api/v1/namespaces/default/services/deployment-example",
+    "uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+    "resourceVersion": "2205995",
+    "creationTimestamp": "2016-10-28T17:04:24Z"
+  },
+  "spec": {
+    "ports": [
+      {
+        "name": "http",
+        "protocol": "TCP",
+        "port": 80,
+        "targetPort": 8080,
+        "nodePort": 32417
+      }
+    ],
+    "selector": {
+      "app": "nginx"
+    },
+    "clusterIP": "10.183.250.161",
+    "type": "LoadBalancer",
+    "sessionAffinity": "None"
+  },
+  "status": {
+    "loadBalancer": {
+      "ingress": [
+        {
+          "ip": "104.198.186.106"
+        }
+      ]
+    }
+  }
+}
+
+
+
+
Response Body
+
+

+{
+  "kind": "Service",
+  "apiVersion": "v1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/api/v1/namespaces/default/services/deployment-example",
+    "uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+    "resourceVersion": "2205995",
+    "creationTimestamp": "2016-10-28T17:04:24Z"
+  },
+  "spec": {
+    "ports": [
+      {
+        "name": "http",
+        "protocol": "TCP",
+        "port": 80,
+        "targetPort": 8080,
+        "nodePort": 32417
+      }
+    ],
+    "selector": {
+      "app": "nginx"
+    },
+    "clusterIP": "10.183.250.161",
+    "type": "LoadBalancer",
+    "sessionAffinity": "None"
+  },
+  "status": {
+    "loadBalancer": {
+      "ingress": [
+        {
+          "ip": "104.198.186.106"
+        }
+      ]
+    }
+  }
+}
+
+

read the specified Service

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/services/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Service
OK
+

List

+ + +
+
+
kubectl command
+
+

+$ kubectl get service -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/api/v1/namespaces/default/services'
+
+

list or watch objects of kind Service

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/services +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ServiceList
OK
+

List All Namespaces

+

list or watch objects of kind Service

+

HTTP Request

+GET /api/v1/services +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ServiceList
OK
+

Watch

+ + +
+
+
kubectl command
+
+

+$ kubectl get service deployment-example --watch -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/api/v1/watch/namespaces/default/services/deployment-example'
+
+ + +
+
+
Output
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Service",
+		"apiVersion": "v1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/api/v1/namespaces/default/services/deployment-example",
+			"uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+			"resourceVersion": "2205995",
+			"creationTimestamp": "2016-10-28T17:04:24Z"
+		},
+		"spec": {
+			"ports": [
+				{
+					"name": "http",
+					"protocol": "TCP",
+					"port": 80,
+					"targetPort": 8080,
+					"nodePort": 32417
+				}
+			],
+			"selector": {
+				"app": "nginx"
+			},
+			"clusterIP": "10.183.250.161",
+			"type": "LoadBalancer",
+			"sessionAffinity": "None"
+		},
+		"status": {
+			"loadBalancer": {
+				"ingress": [
+					{
+						"ip": "104.198.186.106"
+					}
+				]
+			}
+		}
+	}
+}
+
+
+
+
Response Body
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Service",
+		"apiVersion": "v1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/api/v1/namespaces/default/services/deployment-example",
+			"uid": "93e5c731-9d30-11e6-9c54-42010a800148",
+			"resourceVersion": "2205995",
+			"creationTimestamp": "2016-10-28T17:04:24Z"
+		},
+		"spec": {
+			"ports": [
+				{
+					"name": "http",
+					"protocol": "TCP",
+					"port": 80,
+					"targetPort": 8080,
+					"nodePort": 32417
+				}
+			],
+			"selector": {
+				"app": "nginx"
+			},
+			"clusterIP": "10.183.250.161",
+			"type": "LoadBalancer",
+			"sessionAffinity": "None"
+		},
+		"status": {
+			"loadBalancer": {
+				"ingress": [
+					{
+						"ip": "104.198.186.106"
+					}
+				]
+			}
+		}
+	}
+}
+
+

watch changes to an object of kind Service. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/services/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/services +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Service. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/services +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Service

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/services/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Service
OK
+

Read Status

+

read status of the specified Service

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/services/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Service
OK
+

Replace Status

+

replace status of the specified Service

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/services/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Service
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Service
+

Response

+ + + + + + +
CodeDescription
200
Service
OK
201
Service
Created
+

Proxy Operations

+

Create Connect Proxy

+

connect POST requests to proxy of Service

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/services/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Create Connect Proxy Path

+

connect POST requests to proxy of Service

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/services/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Delete Connect Proxy

+

connect DELETE requests to proxy of Service

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/services/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Delete Connect Proxy Path

+

connect DELETE requests to proxy of Service

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/services/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Proxy

+

connect GET requests to proxy of Service

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/services/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Proxy Path

+

connect GET requests to proxy of Service

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/services/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Head Connect Proxy

+

connect HEAD requests to proxy of Service

+

HTTP Request

+HEAD /api/v1/namespaces/{namespace}/services/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Head Connect Proxy Path

+

connect HEAD requests to proxy of Service

+

HTTP Request

+HEAD /api/v1/namespaces/{namespace}/services/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Replace Connect Proxy

+

connect PUT requests to proxy of Service

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/services/{name}/proxy +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Replace Connect Proxy Path

+

connect PUT requests to proxy of Service

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/services/{name}/proxy/{path} +

Path Parameters

+ + + + + + + +
ParameterDescription
namename of the ServiceProxyOptions
namespaceobject name and auth scope, such as for teams and projects
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Config and Storage APIs

+

ConfigMap v1 core

+ + + + + +
GroupVersionKind
corev1ConfigMap
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
binaryData
object
BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.
data
object
Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

ConfigMapList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ConfigMap array
Items is the list of ConfigMaps.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a ConfigMap

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/configmaps +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ConfigMap
+

Response

+ + + + + + + +
CodeDescription
200
ConfigMap
OK
201
ConfigMap
Created
202
ConfigMap
Accepted
+

Patch

+

partially update the specified ConfigMap

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/configmaps/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ConfigMap
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ConfigMap
OK
+

Replace

+

replace the specified ConfigMap

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/configmaps/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ConfigMap
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ConfigMap
+

Response

+ + + + + + +
CodeDescription
200
ConfigMap
OK
201
ConfigMap
Created
+

Delete

+

delete a ConfigMap

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/configmaps/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ConfigMap
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ConfigMap

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/configmaps +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ConfigMap

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/configmaps/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ConfigMap
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ConfigMap
OK
+

List

+

list or watch objects of kind ConfigMap

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/configmaps +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ConfigMapList
OK
+

List All Namespaces

+

list or watch objects of kind ConfigMap

+

HTTP Request

+GET /api/v1/configmaps +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ConfigMapList
OK
+

Watch

+

watch changes to an object of kind ConfigMap. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/configmaps/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ConfigMap
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/configmaps +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/configmaps +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Secret v1 core

+ + + + + +
GroupVersionKind
corev1Secret
+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
data
object
Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
stringData
object
stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.
type
string
Used to facilitate programmatic handling of secret data.
+

SecretList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Secret array
Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a Secret

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/secrets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Secret
+

Response

+ + + + + + + +
CodeDescription
200
Secret
OK
201
Secret
Created
202
Secret
Accepted
+

Patch

+

partially update the specified Secret

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/secrets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Secret
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Secret
OK
+

Replace

+

replace the specified Secret

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/secrets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Secret
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Secret
+

Response

+ + + + + + +
CodeDescription
200
Secret
OK
201
Secret
Created
+

Delete

+

delete a Secret

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/secrets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Secret
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Secret

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/secrets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Secret

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/secrets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Secret
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Secret
OK
+

List

+

list or watch objects of kind Secret

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/secrets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
SecretList
OK
+

List All Namespaces

+

list or watch objects of kind Secret

+

HTTP Request

+GET /api/v1/secrets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
SecretList
OK
+

Watch

+

watch changes to an object of kind Secret. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/secrets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Secret
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/secrets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Secret. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/secrets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

PersistentVolumeClaim v1 core

+ + + + + +
GroupVersionKind
corev1PersistentVolumeClaim
+
A PersistentVolume must be allocated in the cluster to use this.
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
PersistentVolumeClaimSpec
Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
status
PersistentVolumeClaimStatus
Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+

PersistentVolumeClaimSpec v1 core

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
accessModes
string array
AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
dataSource
TypedLocalObjectReference
This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.
resources
ResourceRequirements
Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
selector
LabelSelector
A label query over volumes to consider for binding.
storageClassName
string
Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
volumeMode
string
volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is an alpha feature and may change in the future.
volumeName
string
VolumeName is the binding reference to the PersistentVolume backing this claim.
+

PersistentVolumeClaimStatus v1 core

+
Appears In: + +
+ + + + + + + + +
FieldDescription
accessModes
string array
AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
capacity
object
Represents the actual resources of the underlying volume.
conditions
PersistentVolumeClaimCondition array
patch strategy: merge
patch merge key: type
Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.
phase
string
Phase represents the current phase of PersistentVolumeClaim.
+

PersistentVolumeClaimList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PersistentVolumeClaim array
A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a PersistentVolumeClaim

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/persistentvolumeclaims +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PersistentVolumeClaim
+

Response

+ + + + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
201
PersistentVolumeClaim
Created
202
PersistentVolumeClaim
Accepted
+

Patch

+

partially update the specified PersistentVolumeClaim

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
+

Replace

+

replace the specified PersistentVolumeClaim

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PersistentVolumeClaim
+

Response

+ + + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
201
PersistentVolumeClaim
Created
+

Delete

+

delete a PersistentVolumeClaim

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PersistentVolumeClaim

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/persistentvolumeclaims +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PersistentVolumeClaim

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
+

List

+

list or watch objects of kind PersistentVolumeClaim

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/persistentvolumeclaims +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeClaimList
OK
+

List All Namespaces

+

list or watch objects of kind PersistentVolumeClaim

+

HTTP Request

+GET /api/v1/persistentvolumeclaims +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeClaimList
OK
+

Watch

+

watch changes to an object of kind PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/persistentvolumeclaims +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of PersistentVolumeClaim. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/persistentvolumeclaims +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified PersistentVolumeClaim

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
+

Read Status

+

read status of the specified PersistentVolumeClaim

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
+

Replace Status

+

replace status of the specified PersistentVolumeClaim

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PersistentVolumeClaim
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PersistentVolumeClaim
+

Response

+ + + + + + +
CodeDescription
200
PersistentVolumeClaim
OK
201
PersistentVolumeClaim
Created
+

StorageClass v1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1StorageClass
+
Other API versions of this object exist: +v1beta1 +
+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
allowVolumeExpansion
boolean
AllowVolumeExpansion shows whether the storage class allow volume expand
allowedTopologies
TopologySelectorTerm array
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.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
mountOptions
string array
Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. ["ro", "soft"]. Not validated - mount of the PVs will simply fail if one is invalid.
parameters
object
Parameters holds the parameters for the provisioner that should create volumes of this storage class.
provisioner
string
Provisioner indicates the type of the provisioner.
reclaimPolicy
string
Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.
volumeBindingMode
string
VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.
+

StorageClassList v1 storage

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
StorageClass array
Items is the list of StorageClasses
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a StorageClass

+

HTTP Request

+POST /apis/storage.k8s.io/v1/storageclasses +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StorageClass
+

Response

+ + + + + + + +
CodeDescription
200
StorageClass
OK
201
StorageClass
Created
202
StorageClass
Accepted
+

Patch

+

partially update the specified StorageClass

+

HTTP Request

+PATCH /apis/storage.k8s.io/v1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StorageClass
OK
+

Replace

+

replace the specified StorageClass

+

HTTP Request

+PUT /apis/storage.k8s.io/v1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StorageClass
+

Response

+ + + + + + +
CodeDescription
200
StorageClass
OK
201
StorageClass
Created
+

Delete

+

delete a StorageClass

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of StorageClass

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1/storageclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified StorageClass

+

HTTP Request

+GET /apis/storage.k8s.io/v1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
StorageClass
OK
+

List

+

list or watch objects of kind StorageClass

+

HTTP Request

+GET /apis/storage.k8s.io/v1/storageclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StorageClassList
OK
+

Watch

+

watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/storage.k8s.io/v1/watch/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/storage.k8s.io/v1/watch/storageclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Volume v1 core

+ + + + + +
GroupVersionKind
corev1Volume
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
awsElasticBlockStore
AWSElasticBlockStoreVolumeSource
AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
azureDisk
AzureDiskVolumeSource
AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
azureFile
AzureFileVolumeSource
AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
cephfs
CephFSVolumeSource
CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
cinder
CinderVolumeSource
Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
configMap
ConfigMapVolumeSource
ConfigMap represents a configMap that should populate this volume
downwardAPI
DownwardAPIVolumeSource
DownwardAPI represents downward API about the pod that should populate this volume
emptyDir
EmptyDirVolumeSource
EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
fc
FCVolumeSource
FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
flexVolume
FlexVolumeSource
FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.
flocker
FlockerVolumeSource
Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
gcePersistentDisk
GCEPersistentDiskVolumeSource
GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
gitRepo
GitRepoVolumeSource
GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.
glusterfs
GlusterfsVolumeSource
Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md
hostPath
HostPathVolumeSource
HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
iscsi
ISCSIVolumeSource
ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md
name
string
Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
nfs
NFSVolumeSource
NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
persistentVolumeClaim
PersistentVolumeClaimVolumeSource
PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
photonPersistentDisk
PhotonPersistentDiskVolumeSource
PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
portworxVolume
PortworxVolumeSource
PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
projected
ProjectedVolumeSource
Items for all in one resources secrets, configmaps, and downward API
quobyte
QuobyteVolumeSource
Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
rbd
RBDVolumeSource
RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md
scaleIO
ScaleIOVolumeSource
ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
secret
SecretVolumeSource
Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
storageos
StorageOSVolumeSource
StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
vsphereVolume
VsphereVirtualDiskVolumeSource
VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
+

VolumeAttachment v1beta1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1beta1VolumeAttachment
+
Other API versions of this object exist: +v1alpha1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
VolumeAttachmentSpec
Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.
status
VolumeAttachmentStatus
Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.
+

VolumeAttachmentSpec v1beta1 storage

+ + + + + + + + +
FieldDescription
attacher
string
Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().
nodeName
string
The node that the volume should be attached to.
source
VolumeAttachmentSource
Source represents the volume that should be attached.
+

VolumeAttachmentStatus v1beta1 storage

+ + + + + + + + + +
FieldDescription
attachError
VolumeError
The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.
attached
boolean
Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.
attachmentMetadata
object
Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.
detachError
VolumeError
The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.
+

VolumeAttachmentList v1beta1 storage

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
VolumeAttachment array
Items is the list of VolumeAttachments
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a VolumeAttachment

+

HTTP Request

+POST /apis/storage.k8s.io/v1beta1/volumeattachments +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
VolumeAttachment
+

Response

+ + + + + + + +
CodeDescription
200
VolumeAttachment
OK
201
VolumeAttachment
Created
202
VolumeAttachment
Accepted
+

Patch

+

partially update the specified VolumeAttachment

+

HTTP Request

+PATCH /apis/storage.k8s.io/v1beta1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
VolumeAttachment
OK
+

Replace

+

replace the specified VolumeAttachment

+

HTTP Request

+PUT /apis/storage.k8s.io/v1beta1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
VolumeAttachment
+

Response

+ + + + + + +
CodeDescription
200
VolumeAttachment
OK
201
VolumeAttachment
Created
+

Delete

+

delete a VolumeAttachment

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1beta1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of VolumeAttachment

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1beta1/volumeattachments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified VolumeAttachment

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
VolumeAttachment
OK
+

List

+

list or watch objects of kind VolumeAttachment

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/volumeattachments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
VolumeAttachmentList
OK
+

Watch

+

watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/watch/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/watch/volumeattachments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Metadata APIs

+

ControllerRevision v1 apps

+ + + + + +
GroupVersionKind
appsv1ControllerRevision
+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
dataData is the serialized representation of the state.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
revision
integer
Revision indicates the revision of the state represented by Data.
+

ControllerRevisionList v1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ControllerRevision array
Items is the list of ControllerRevisions
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a ControllerRevision

+

HTTP Request

+POST /apis/apps/v1/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ControllerRevision
+

Response

+ + + + + + + +
CodeDescription
200
ControllerRevision
OK
201
ControllerRevision
Created
202
ControllerRevision
Accepted
+

Patch

+

partially update the specified ControllerRevision

+

HTTP Request

+PATCH /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ControllerRevision
OK
+

Replace

+

replace the specified ControllerRevision

+

HTTP Request

+PUT /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ControllerRevision
+

Response

+ + + + + + +
CodeDescription
200
ControllerRevision
OK
201
ControllerRevision
Created
+

Delete

+

delete a ControllerRevision

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ControllerRevision

+

HTTP Request

+DELETE /apis/apps/v1/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ControllerRevision

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevision
OK
+

List

+

list or watch objects of kind ControllerRevision

+

HTTP Request

+GET /apis/apps/v1/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevisionList
OK
+

List All Namespaces

+

list or watch objects of kind ControllerRevision

+

HTTP Request

+GET /apis/apps/v1/controllerrevisions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevisionList
OK
+

Watch

+

watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1/watch/controllerrevisions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

CustomResourceDefinition v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceDefinition
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
CustomResourceDefinitionSpec
Spec describes how the user wants the resources to appear
status
CustomResourceDefinitionStatus
Status indicates the actual state of the CustomResourceDefinition
+

CustomResourceDefinitionSpec v1beta1 apiextensions

+ + + + + + + + + + + + + +
FieldDescription
additionalPrinterColumns
CustomResourceColumnDefinition array
AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column.
group
string
Group is the group this resource belongs in
names
CustomResourceDefinitionNames
Names are the names used to describe this custom resource
scope
string
Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced
subresources
CustomResourceSubresources
Subresources describes the subresources for CustomResources
validation
CustomResourceValidation
Validation describes the validation methods for CustomResources
version
string
Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.
versions
CustomResourceDefinitionVersion array
Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.
+

CustomResourceDefinitionStatus v1beta1 apiextensions

+ + + + + + + + +
FieldDescription
acceptedNames
CustomResourceDefinitionNames
AcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec.
conditions
CustomResourceDefinitionCondition array
Conditions indicate state for particular aspects of a CustomResourceDefinition
storedVersions
string array
StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.
+

CustomResourceDefinitionList v1beta1 apiextensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
CustomResourceDefinition array
Items individual CustomResourceDefinitions
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create a CustomResourceDefinition

+

HTTP Request

+POST /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CustomResourceDefinition
+

Response

+ + + + + + + +
CodeDescription
200
CustomResourceDefinition
OK
201
CustomResourceDefinition
Created
202
CustomResourceDefinition
Accepted
+

Patch

+

partially update the specified CustomResourceDefinition

+

HTTP Request

+PATCH /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CustomResourceDefinition
OK
+

Replace

+

replace the specified CustomResourceDefinition

+

HTTP Request

+PUT /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CustomResourceDefinition
+

Response

+ + + + + + +
CodeDescription
200
CustomResourceDefinition
OK
201
CustomResourceDefinition
Created
+

Delete

+

delete a CustomResourceDefinition

+

HTTP Request

+DELETE /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of CustomResourceDefinition

+

HTTP Request

+DELETE /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified CustomResourceDefinition

+

HTTP Request

+GET /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
CustomResourceDefinition
OK
+

List

+

list or watch objects of kind CustomResourceDefinition

+

HTTP Request

+GET /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
CustomResourceDefinitionList
OK
+

Watch

+

watch changes to an object of kind CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of CustomResourceDefinition. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified CustomResourceDefinition

+

HTTP Request

+PATCH /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CustomResourceDefinition
OK
+

Read Status

+

read status of the specified CustomResourceDefinition

+

HTTP Request

+GET /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
CustomResourceDefinition
OK
+

Replace Status

+

replace status of the specified CustomResourceDefinition

+

HTTP Request

+PUT /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CustomResourceDefinition
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CustomResourceDefinition
+

Response

+ + + + + + +
CodeDescription
200
CustomResourceDefinition
OK
201
CustomResourceDefinition
Created
+

Event v1 core

+ + + + + +
GroupVersionKind
corev1Event
+
Other API versions of this object exist: +v1beta1 +
+
Appears In: + +
+ + + + + + + + + + + + + + + + + + + + + +
FieldDescription
action
string
What action was taken/failed regarding to the Regarding object.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
count
integer
The number of times this event has occurred.
eventTime
MicroTime
Time when this Event was first observed.
firstTimestamp
Time
The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
involvedObject
ObjectReference
The object that this event is about.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
lastTimestamp
Time
The time at which the most recent occurrence of this event was recorded.
message
string
A human-readable description of the status of this operation.
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
reason
string
This should be a short, machine understandable string that gives the reason for the transition into the object's current status.
related
ObjectReference
Optional secondary object for more complex actions.
reportingComponent
string
Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.
reportingInstance
string
ID of the controller instance, e.g. `kubelet-xyzf`.
series
EventSeries
Data about the Event series this event represents or nil if it's a singleton Event.
source
EventSource
The component reporting this event. Should be a short machine understandable string.
type
string
Type of this event (Normal, Warning), new types could be added in the future
+

EventList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Event array
List of events
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create an Event

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Event
+

Response

+ + + + + + + +
CodeDescription
200
Event
OK
201
Event
Created
202
Event
Accepted
+

Patch

+

partially update the specified Event

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Event
OK
+

Replace

+

replace the specified Event

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Event
+

Response

+ + + + + + +
CodeDescription
201
Event
Created
200
Event
OK
+

Delete

+

delete an Event

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Event

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Event

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Event
OK
+

List

+

list or watch objects of kind Event

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
EventList
OK
+

List All Namespaces

+

list or watch objects of kind Event

+

HTTP Request

+GET /api/v1/events +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
EventList
OK
+

Watch

+

watch changes to an object of kind Event. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/events +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

LimitRange v1 core

+ + + + + +
GroupVersionKind
corev1LimitRange
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
LimitRangeSpec
Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

LimitRangeSpec v1 core

+
Appears In: + +
+ + + + + +
FieldDescription
limits
LimitRangeItem array
Limits is the list of LimitRangeItem objects that are enforced.
+

LimitRangeList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
LimitRange array
Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a LimitRange

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/limitranges +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
LimitRange
+

Response

+ + + + + + + +
CodeDescription
200
LimitRange
OK
201
LimitRange
Created
202
LimitRange
Accepted
+

Patch

+

partially update the specified LimitRange

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/limitranges/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the LimitRange
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
LimitRange
OK
+

Replace

+

replace the specified LimitRange

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/limitranges/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the LimitRange
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
LimitRange
+

Response

+ + + + + + +
CodeDescription
200
LimitRange
OK
201
LimitRange
Created
+

Delete

+

delete a LimitRange

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/limitranges/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the LimitRange
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of LimitRange

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/limitranges +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified LimitRange

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/limitranges/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the LimitRange
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
LimitRange
OK
+

List

+

list or watch objects of kind LimitRange

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/limitranges +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
LimitRangeList
OK
+

List All Namespaces

+

list or watch objects of kind LimitRange

+

HTTP Request

+GET /api/v1/limitranges +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
LimitRangeList
OK
+

Watch

+

watch changes to an object of kind LimitRange. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/limitranges/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the LimitRange
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/limitranges +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of LimitRange. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/limitranges +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

HorizontalPodAutoscaler v1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv1HorizontalPodAutoscaler
+
Other API versions of this object exist: +v2beta2 +v2beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
HorizontalPodAutoscalerSpec
behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
HorizontalPodAutoscalerStatus
current information about the autoscaler.
+

HorizontalPodAutoscalerSpec v1 autoscaling

+ + + + + + + + + +
FieldDescription
maxReplicas
integer
upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.
minReplicas
integer
lower limit for the number of pods that can be set by the autoscaler, default 1.
scaleTargetRef
CrossVersionObjectReference
reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.
targetCPUUtilizationPercentage
integer
target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.
+

HorizontalPodAutoscalerStatus v1 autoscaling

+ + + + + + + + + + +
FieldDescription
currentCPUUtilizationPercentage
integer
current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.
currentReplicas
integer
current number of replicas of pods managed by this autoscaler.
desiredReplicas
integer
desired number of replicas of pods managed by this autoscaler.
lastScaleTime
Time
last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.
observedGeneration
integer
most recent generation observed by this autoscaler.
+

HorizontalPodAutoscalerList v1 autoscaling

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
HorizontalPodAutoscaler array
list of horizontal pod autoscaler objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata.
+

Write Operations

+

Create

+

create a HorizontalPodAutoscaler

+

HTTP Request

+POST /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
202
HorizontalPodAutoscaler
Accepted
+

Patch

+

partially update the specified HorizontalPodAutoscaler

+

HTTP Request

+PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Replace

+

replace the specified HorizontalPodAutoscaler

+

HTTP Request

+PUT /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
+

Delete

+

delete a HorizontalPodAutoscaler

+

HTTP Request

+DELETE /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of HorizontalPodAutoscaler

+

HTTP Request

+DELETE /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

List

+

list or watch objects of kind HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscalerList
OK
+

List All Namespaces

+

list or watch objects of kind HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v1/horizontalpodautoscalers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscalerList
OK
+

Watch

+

watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/autoscaling/v1/watch/horizontalpodautoscalers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified HorizontalPodAutoscaler

+

HTTP Request

+PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Read Status

+

read status of the specified HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Replace Status

+

replace status of the specified HorizontalPodAutoscaler

+

HTTP Request

+PUT /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
+

InitializerConfiguration v1alpha1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1alpha1InitializerConfiguration
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
initializers
Initializer array
patch strategy: merge
patch merge key: name
Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
+

InitializerConfigurationList v1alpha1 admissionregistration

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
InitializerConfiguration array
List of InitializerConfiguration.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create an InitializerConfiguration

+

HTTP Request

+POST /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
InitializerConfiguration
+

Response

+ + + + + + + +
CodeDescription
202
InitializerConfiguration
Accepted
200
InitializerConfiguration
OK
201
InitializerConfiguration
Created
+

Patch

+

partially update the specified InitializerConfiguration

+

HTTP Request

+PATCH /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the InitializerConfiguration
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
InitializerConfiguration
OK
+

Replace

+

replace the specified InitializerConfiguration

+

HTTP Request

+PUT /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the InitializerConfiguration
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
InitializerConfiguration
+

Response

+ + + + + + +
CodeDescription
200
InitializerConfiguration
OK
201
InitializerConfiguration
Created
+

Delete

+

delete an InitializerConfiguration

+

HTTP Request

+DELETE /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the InitializerConfiguration
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of InitializerConfiguration

+

HTTP Request

+DELETE /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified InitializerConfiguration

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the InitializerConfiguration
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
InitializerConfiguration
OK
+

List

+

list or watch objects of kind InitializerConfiguration

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
InitializerConfigurationList
OK
+

Watch

+

watch changes to an object of kind InitializerConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the InitializerConfiguration
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of InitializerConfiguration. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

MutatingWebhookConfiguration v1beta1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1beta1MutatingWebhookConfiguration
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
webhooks
Webhook array
patch strategy: merge
patch merge key: name
Webhooks is a list of webhooks and the affected resources and operations.
+

MutatingWebhookConfigurationList v1beta1 admissionregistration

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
MutatingWebhookConfiguration array
List of MutatingWebhookConfiguration.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a MutatingWebhookConfiguration

+

HTTP Request

+POST /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
MutatingWebhookConfiguration
+

Response

+ + + + + + + +
CodeDescription
201
MutatingWebhookConfiguration
Created
202
MutatingWebhookConfiguration
Accepted
200
MutatingWebhookConfiguration
OK
+

Patch

+

partially update the specified MutatingWebhookConfiguration

+

HTTP Request

+PATCH /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the MutatingWebhookConfiguration
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
MutatingWebhookConfiguration
OK
+

Replace

+

replace the specified MutatingWebhookConfiguration

+

HTTP Request

+PUT /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the MutatingWebhookConfiguration
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
MutatingWebhookConfiguration
+

Response

+ + + + + + +
CodeDescription
201
MutatingWebhookConfiguration
Created
200
MutatingWebhookConfiguration
OK
+

Delete

+

delete a MutatingWebhookConfiguration

+

HTTP Request

+DELETE /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the MutatingWebhookConfiguration
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of MutatingWebhookConfiguration

+

HTTP Request

+DELETE /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified MutatingWebhookConfiguration

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the MutatingWebhookConfiguration
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
MutatingWebhookConfiguration
OK
+

List

+

list or watch objects of kind MutatingWebhookConfiguration

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
MutatingWebhookConfigurationList
OK
+

Watch

+

watch changes to an object of kind MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the MutatingWebhookConfiguration
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of MutatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ValidatingWebhookConfiguration v1beta1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1beta1ValidatingWebhookConfiguration
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
webhooks
Webhook array
patch strategy: merge
patch merge key: name
Webhooks is a list of webhooks and the affected resources and operations.
+

ValidatingWebhookConfigurationList v1beta1 admissionregistration

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ValidatingWebhookConfiguration array
List of ValidatingWebhookConfiguration.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ValidatingWebhookConfiguration

+

HTTP Request

+POST /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ValidatingWebhookConfiguration
+

Response

+ + + + + + + +
CodeDescription
202
ValidatingWebhookConfiguration
Accepted
200
ValidatingWebhookConfiguration
OK
201
ValidatingWebhookConfiguration
Created
+

Patch

+

partially update the specified ValidatingWebhookConfiguration

+

HTTP Request

+PATCH /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ValidatingWebhookConfiguration
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ValidatingWebhookConfiguration
OK
+

Replace

+

replace the specified ValidatingWebhookConfiguration

+

HTTP Request

+PUT /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ValidatingWebhookConfiguration
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ValidatingWebhookConfiguration
+

Response

+ + + + + + +
CodeDescription
200
ValidatingWebhookConfiguration
OK
201
ValidatingWebhookConfiguration
Created
+

Delete

+

delete a ValidatingWebhookConfiguration

+

HTTP Request

+DELETE /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ValidatingWebhookConfiguration
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ValidatingWebhookConfiguration

+

HTTP Request

+DELETE /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ValidatingWebhookConfiguration

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ValidatingWebhookConfiguration
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ValidatingWebhookConfiguration
OK
+

List

+

list or watch objects of kind ValidatingWebhookConfiguration

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ValidatingWebhookConfigurationList
OK
+

Watch

+

watch changes to an object of kind ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ValidatingWebhookConfiguration
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ValidatingWebhookConfiguration. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

PodTemplate v1 core

+ + + + + +
GroupVersionKind
corev1PodTemplate
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
template
PodTemplateSpec
Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

PodTemplateSpec v1 core

+ + + + + + + +
FieldDescription
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
PodSpec
Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

PodTemplateList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PodTemplate array
List of pod templates
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a PodTemplate

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/podtemplates +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodTemplate
+

Response

+ + + + + + + +
CodeDescription
202
PodTemplate
Accepted
200
PodTemplate
OK
201
PodTemplate
Created
+

Patch

+

partially update the specified PodTemplate

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/podtemplates/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodTemplate
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PodTemplate
OK
+

Replace

+

replace the specified PodTemplate

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/podtemplates/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodTemplate
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodTemplate
+

Response

+ + + + + + +
CodeDescription
200
PodTemplate
OK
201
PodTemplate
Created
+

Delete

+

delete a PodTemplate

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/podtemplates/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodTemplate
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PodTemplate

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/podtemplates +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PodTemplate

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/podtemplates/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodTemplate
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PodTemplate
OK
+

List

+

list or watch objects of kind PodTemplate

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/podtemplates +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodTemplateList
OK
+

List All Namespaces

+

list or watch objects of kind PodTemplate

+

HTTP Request

+GET /api/v1/podtemplates +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodTemplateList
OK
+

Watch

+

watch changes to an object of kind PodTemplate. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/podtemplates/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodTemplate
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/podtemplates +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of PodTemplate. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/podtemplates +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

PodDisruptionBudget v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1PodDisruptionBudget
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
PodDisruptionBudgetSpec
Specification of the desired behavior of the PodDisruptionBudget.
status
PodDisruptionBudgetStatus
Most recently observed status of the PodDisruptionBudget.
+

PodDisruptionBudgetSpec v1beta1 policy

+ + + + + + + + +
FieldDescription
maxUnavailableAn eviction is allowed if at most "maxUnavailable" pods selected by "selector" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with "minAvailable".
minAvailableAn eviction is allowed if at least "minAvailable" pods selected by "selector" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying "100%".
selector
LabelSelector
Label query over pods whose evictions are managed by the disruption budget.
+

PodDisruptionBudgetStatus v1beta1 policy

+ + + + + + + + + + + +
FieldDescription
currentHealthy
integer
current number of healthy pods
desiredHealthy
integer
minimum desired number of healthy pods
disruptedPods
object
DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.
disruptionsAllowed
integer
Number of pod disruptions that are currently allowed.
expectedPods
integer
total number of pods counted by this disruption budget
observedGeneration
integer
Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.
+

PodDisruptionBudgetList v1beta1 policy

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PodDisruptionBudget array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create a PodDisruptionBudget

+

HTTP Request

+POST /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodDisruptionBudget
+

Response

+ + + + + + + +
CodeDescription
200
PodDisruptionBudget
OK
201
PodDisruptionBudget
Created
202
PodDisruptionBudget
Accepted
+

Patch

+

partially update the specified PodDisruptionBudget

+

HTTP Request

+PATCH /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PodDisruptionBudget
OK
+

Replace

+

replace the specified PodDisruptionBudget

+

HTTP Request

+PUT /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodDisruptionBudget
+

Response

+ + + + + + +
CodeDescription
200
PodDisruptionBudget
OK
201
PodDisruptionBudget
Created
+

Delete

+

delete a PodDisruptionBudget

+

HTTP Request

+DELETE /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PodDisruptionBudget

+

HTTP Request

+DELETE /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PodDisruptionBudget

+

HTTP Request

+GET /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PodDisruptionBudget
OK
+

List

+

list or watch objects of kind PodDisruptionBudget

+

HTTP Request

+GET /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodDisruptionBudgetList
OK
+

List All Namespaces

+

list or watch objects of kind PodDisruptionBudget

+

HTTP Request

+GET /apis/policy/v1beta1/poddisruptionbudgets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodDisruptionBudgetList
OK
+

Watch

+

watch changes to an object of kind PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of PodDisruptionBudget. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/policy/v1beta1/watch/poddisruptionbudgets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified PodDisruptionBudget

+

HTTP Request

+PATCH /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PodDisruptionBudget
OK
+

Read Status

+

read status of the specified PodDisruptionBudget

+

HTTP Request

+GET /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
PodDisruptionBudget
OK
+

Replace Status

+

replace status of the specified PodDisruptionBudget

+

HTTP Request

+PUT /apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodDisruptionBudget
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodDisruptionBudget
+

Response

+ + + + + + +
CodeDescription
200
PodDisruptionBudget
OK
201
PodDisruptionBudget
Created
+

PriorityClass v1beta1 scheduling.k8s.io

+ + + + + +
GroupVersionKind
scheduling.k8s.iov1beta1PriorityClass
+
Other API versions of this object exist: +v1alpha1 +
+ + + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
description
string
description is an arbitrary string that usually provides guidelines on when this priority class should be used.
globalDefault
boolean
globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
value
integer
The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.
+

PriorityClassList v1beta1 scheduling

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PriorityClass array
items is the list of PriorityClasses
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a PriorityClass

+

HTTP Request

+POST /apis/scheduling.k8s.io/v1beta1/priorityclasses +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PriorityClass
+

Response

+ + + + + + + +
CodeDescription
202
PriorityClass
Accepted
200
PriorityClass
OK
201
PriorityClass
Created
+

Patch

+

partially update the specified PriorityClass

+

HTTP Request

+PATCH /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PriorityClass
OK
+

Replace

+

replace the specified PriorityClass

+

HTTP Request

+PUT /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PriorityClass
+

Response

+ + + + + + +
CodeDescription
200
PriorityClass
OK
201
PriorityClass
Created
+

Delete

+

delete a PriorityClass

+

HTTP Request

+DELETE /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PriorityClass

+

HTTP Request

+DELETE /apis/scheduling.k8s.io/v1beta1/priorityclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PriorityClass

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PriorityClass
OK
+

List

+

list or watch objects of kind PriorityClass

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1beta1/priorityclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PriorityClassList
OK
+

Watch

+

watch changes to an object of kind PriorityClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1beta1/watch/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1beta1/watch/priorityclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

PodPreset v1alpha1 settings.k8s.io

+ + + + + +
GroupVersionKind
settings.k8s.iov1alpha1PodPreset
+

Warning:

Alpha objects should not be used in production and may not be compatible with future versions of the resource type.

+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
PodPresetSpec
+

PodPresetSpec v1alpha1 settings

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
env
EnvVar array
Env defines the collection of EnvVar to inject into containers.
envFrom
EnvFromSource array
EnvFrom defines the collection of EnvFromSource to inject into containers.
selector
LabelSelector
Selector is a label query over a set of resources, in this case pods. Required.
volumeMounts
VolumeMount array
VolumeMounts defines the collection of VolumeMount to inject into containers.
volumes
Volume array
Volumes defines the collection of Volume to inject into the pod.
+

PodPresetList v1alpha1 settings

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PodPreset array
Items is a list of schema objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a PodPreset

+

HTTP Request

+POST /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodPreset
+

Response

+ + + + + + + +
CodeDescription
200
PodPreset
OK
201
PodPreset
Created
202
PodPreset
Accepted
+

Patch

+

partially update the specified PodPreset

+

HTTP Request

+PATCH /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPreset
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PodPreset
OK
+

Replace

+

replace the specified PodPreset

+

HTTP Request

+PUT /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPreset
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodPreset
+

Response

+ + + + + + +
CodeDescription
200
PodPreset
OK
201
PodPreset
Created
+

Delete

+

delete a PodPreset

+

HTTP Request

+DELETE /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPreset
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of PodPreset

+

HTTP Request

+DELETE /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PodPreset

+

HTTP Request

+GET /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPreset
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PodPreset
OK
+

List

+

list or watch objects of kind PodPreset

+

HTTP Request

+GET /apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodPresetList
OK
+

List All Namespaces

+

list or watch objects of kind PodPreset

+

HTTP Request

+GET /apis/settings.k8s.io/v1alpha1/podpresets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodPresetList
OK
+

Watch

+

watch changes to an object of kind PodPreset. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the PodPreset
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PodPreset. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of PodPreset. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/settings.k8s.io/v1alpha1/watch/podpresets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

PodSecurityPolicy v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1PodSecurityPolicy
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
PodSecurityPolicySpec
spec defines the policy enforced.
+

PodSecurityPolicySpec v1beta1 extensions

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
allowPrivilegeEscalation
boolean
allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.
allowedCapabilities
string array
allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.
allowedFlexVolumes
AllowedFlexVolume array
allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the "volumes" field.
allowedHostPaths
AllowedHostPath array
allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.
allowedProcMountTypes
string array
AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.
allowedUnsafeSysctls
string array
allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. Examples: e.g. "foo/*" allows "foo/bar", "foo/baz", etc. e.g. "foo.*" allows "foo.bar", "foo.baz", etc.
defaultAddCapabilities
string array
defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.
defaultAllowPrivilegeEscalation
boolean
defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.
forbiddenSysctls
string array
forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. Examples: e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.
fsGroup
FSGroupStrategyOptions
fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.
hostIPC
boolean
hostIPC determines if the policy allows the use of HostIPC in the pod spec.
hostNetwork
boolean
hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.
hostPID
boolean
hostPID determines if the policy allows the use of HostPID in the pod spec.
hostPorts
HostPortRange array
hostPorts determines which host port ranges are allowed to be exposed.
privileged
boolean
privileged determines if a pod can request to be run as privileged.
readOnlyRootFilesystem
boolean
readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.
requiredDropCapabilities
string array
requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.
runAsUser
RunAsUserStrategyOptions
runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.
seLinux
SELinuxStrategyOptions
seLinux is the strategy that will dictate the allowable labels that may be set.
supplementalGroups
SupplementalGroupsStrategyOptions
supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.
volumes
string array
volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '\*'.
+

PodSecurityPolicyList v1beta1 extensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PodSecurityPolicy array
items is a list of schema objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a PodSecurityPolicy

+

HTTP Request

+POST /apis/extensions/v1beta1/podsecuritypolicies +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodSecurityPolicy
+

Response

+ + + + + + + +
CodeDescription
202
PodSecurityPolicy
Accepted
200
PodSecurityPolicy
OK
201
PodSecurityPolicy
Created
+

Patch

+

partially update the specified PodSecurityPolicy

+

HTTP Request

+PATCH /apis/extensions/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PodSecurityPolicy
OK
+

Replace

+

replace the specified PodSecurityPolicy

+

HTTP Request

+PUT /apis/extensions/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodSecurityPolicy
+

Response

+ + + + + + +
CodeDescription
200
PodSecurityPolicy
OK
201
PodSecurityPolicy
Created
+

Delete

+

delete a PodSecurityPolicy

+

HTTP Request

+DELETE /apis/extensions/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PodSecurityPolicy

+

HTTP Request

+DELETE /apis/extensions/v1beta1/podsecuritypolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PodSecurityPolicy

+

HTTP Request

+GET /apis/extensions/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PodSecurityPolicy
OK
+

List

+

list or watch objects of kind PodSecurityPolicy

+

HTTP Request

+GET /apis/extensions/v1beta1/podsecuritypolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodSecurityPolicyList
OK
+

Watch

+

watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/podsecuritypolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Cluster APIs

+

APIService v1 apiregistration.k8s.io

+ + + + + +
GroupVersionKind
apiregistration.k8s.iov1APIService
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
APIServiceSpec
Spec contains information for locating and communicating with a server
status
APIServiceStatus
Status contains derived information about an API server
+

APIServiceSpec v1 apiregistration

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
caBundle
string
CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.
group
string
Group is the API group name this server hosts
groupPriorityMinimum
integer
GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s
insecureSkipTLSVerify
boolean
InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.
service
ServiceReference
Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.
version
string
Version is the API version this server hosts. For example, "v1"
versionPriority
integer
VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.
+

APIServiceStatus v1 apiregistration

+
Appears In: + +
+ + + + + +
FieldDescription
conditions
APIServiceCondition array
patch strategy: merge
patch merge key: type
Current service state of apiService.
+

APIServiceList v1 apiregistration

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
APIService array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create an APIService

+

HTTP Request

+POST /apis/apiregistration.k8s.io/v1/apiservices +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
APIService
+

Response

+ + + + + + + +
CodeDescription
200
APIService
OK
201
APIService
Created
202
APIService
Accepted
+

Patch

+

partially update the specified APIService

+

HTTP Request

+PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

Replace

+

replace the specified APIService

+

HTTP Request

+PUT /apis/apiregistration.k8s.io/v1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
APIService
+

Response

+ + + + + + +
CodeDescription
201
APIService
Created
200
APIService
OK
+

Delete

+

delete an APIService

+

HTTP Request

+DELETE /apis/apiregistration.k8s.io/v1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of APIService

+

HTTP Request

+DELETE /apis/apiregistration.k8s.io/v1/apiservices +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified APIService

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

List

+

list or watch objects of kind APIService

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1/apiservices +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
APIServiceList
OK
+

Watch

+

watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1/watch/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1/watch/apiservices +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified APIService

+

HTTP Request

+PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

Read Status

+

read status of the specified APIService

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1/apiservices/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

Replace Status

+

replace status of the specified APIService

+

HTTP Request

+PUT /apis/apiregistration.k8s.io/v1/apiservices/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
APIService
+

Response

+ + + + + + +
CodeDescription
200
APIService
OK
201
APIService
Created
+

Binding v1 core

+ + + + + +
GroupVersionKind
corev1Binding
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
target
ObjectReference
The target object that you want to bind to the standard object.
+

Write Operations

+

Create

+

create a Binding

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/bindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Binding
+

Response

+ + + + + + + +
CodeDescription
200
Binding
OK
201
Binding
Created
202
Binding
Accepted
+

CertificateSigningRequest v1beta1 certificates.k8s.io

+ + + + + +
GroupVersionKind
certificates.k8s.iov1beta1CertificateSigningRequest
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
CertificateSigningRequestSpec
The certificate request itself and any additional information.
status
CertificateSigningRequestStatus
Derived information about the request.
+

CertificateSigningRequestSpec v1beta1 certificates

+ + + + + + + + + + + +
FieldDescription
extra
object
Extra information about the requesting user. See user.Info interface for details.
groups
string array
Group information about the requesting user. See user.Info interface for details.
request
string
Base64-encoded PKCS#10 CSR data
uid
string
UID information about the requesting user. See user.Info interface for details.
usages
string array
allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 https://tools.ietf.org/html/rfc5280#section-4.2.1.12
username
string
Information about the requesting user. See user.Info interface for details.
+

CertificateSigningRequestStatus v1beta1 certificates

+ + + + + + + +
FieldDescription
certificate
string
If request was approved, the controller will place the issued certificate here.
conditions
CertificateSigningRequestCondition array
Conditions applied to the request, such as approval or denial.
+

CertificateSigningRequestList v1beta1 certificates

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
CertificateSigningRequest array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create a CertificateSigningRequest

+

HTTP Request

+POST /apis/certificates.k8s.io/v1beta1/certificatesigningrequests +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CertificateSigningRequest
+

Response

+ + + + + + + +
CodeDescription
202
CertificateSigningRequest
Accepted
200
CertificateSigningRequest
OK
201
CertificateSigningRequest
Created
+

Patch

+

partially update the specified CertificateSigningRequest

+

HTTP Request

+PATCH /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CertificateSigningRequest
OK
+

Replace

+

replace the specified CertificateSigningRequest

+

HTTP Request

+PUT /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CertificateSigningRequest
+

Response

+ + + + + + +
CodeDescription
200
CertificateSigningRequest
OK
201
CertificateSigningRequest
Created
+

Delete

+

delete a CertificateSigningRequest

+

HTTP Request

+DELETE /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of CertificateSigningRequest

+

HTTP Request

+DELETE /apis/certificates.k8s.io/v1beta1/certificatesigningrequests +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified CertificateSigningRequest

+

HTTP Request

+GET /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
CertificateSigningRequest
OK
+

List

+

list or watch objects of kind CertificateSigningRequest

+

HTTP Request

+GET /apis/certificates.k8s.io/v1beta1/certificatesigningrequests +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
CertificateSigningRequestList
OK
+

Watch

+

watch changes to an object of kind CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of CertificateSigningRequest. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified CertificateSigningRequest

+

HTTP Request

+PATCH /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CertificateSigningRequest
OK
+

Read Status

+

read status of the specified CertificateSigningRequest

+

HTTP Request

+GET /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
CertificateSigningRequest
OK
+

Replace Status

+

replace status of the specified CertificateSigningRequest

+

HTTP Request

+PUT /apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the CertificateSigningRequest
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CertificateSigningRequest
+

Response

+ + + + + + +
CodeDescription
200
CertificateSigningRequest
OK
201
CertificateSigningRequest
Created
+

ClusterRole v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1ClusterRole
+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
aggregationRule
AggregationRule
AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
rules
PolicyRule array
Rules holds all the PolicyRules for this ClusterRole
+

ClusterRoleList v1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ClusterRole array
Items is a list of ClusterRoles
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a ClusterRole

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1/clusterroles +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRole
+

Response

+ + + + + + + +
CodeDescription
200
ClusterRole
OK
201
ClusterRole
Created
202
ClusterRole
Accepted
+

Patch

+

partially update the specified ClusterRole

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ClusterRole
OK
+

Replace

+

replace the specified ClusterRole

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRole
+

Response

+ + + + + + +
CodeDescription
200
ClusterRole
OK
201
ClusterRole
Created
+

Delete

+

delete a ClusterRole

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of ClusterRole

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ClusterRole

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ClusterRole
OK
+

List

+

list or watch objects of kind ClusterRole

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleList
OK
+

Watch

+

watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ClusterRoleBinding v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1ClusterRoleBinding
+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
roleRef
RoleRef
RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.
subjects
Subject array
Subjects holds references to the objects the role applies to.
+

ClusterRoleBindingList v1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ClusterRoleBinding array
Items is a list of ClusterRoleBindings
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a ClusterRoleBinding

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1/clusterrolebindings +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRoleBinding
+

Response

+ + + + + + + +
CodeDescription
200
ClusterRoleBinding
OK
201
ClusterRoleBinding
Created
202
ClusterRoleBinding
Accepted
+

Patch

+

partially update the specified ClusterRoleBinding

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBinding
OK
+

Replace

+

replace the specified ClusterRoleBinding

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRoleBinding
+

Response

+ + + + + + +
CodeDescription
200
ClusterRoleBinding
OK
201
ClusterRoleBinding
Created
+

Delete

+

delete a ClusterRoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ClusterRoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ClusterRoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBinding
OK
+

List

+

list or watch objects of kind ClusterRoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBindingList
OK
+

Watch

+

watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ComponentStatus v1 core

+ + + + + +
GroupVersionKind
corev1ComponentStatus
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
conditions
ComponentCondition array
patch strategy: merge
patch merge key: type
List of component conditions observed
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

ComponentStatusList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ComponentStatus array
List of ComponentStatus objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Read Operations

+

Read

+

read the specified ComponentStatus

+

HTTP Request

+GET /api/v1/componentstatuses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ComponentStatus
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ComponentStatus
OK
+

List

+

list objects of kind ComponentStatus

+

HTTP Request

+GET /api/v1/componentstatuses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ComponentStatusList
OK
+

LocalSubjectAccessReview v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1LocalSubjectAccessReview
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SubjectAccessReviewSpec
Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.
status
SubjectAccessReviewStatus
Status is filled in by the server and indicates whether the request is allowed or not
+

Write Operations

+

Create

+

create a LocalSubjectAccessReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
LocalSubjectAccessReview
+

Response

+ + + + + + + +
CodeDescription
200
LocalSubjectAccessReview
OK
201
LocalSubjectAccessReview
Created
202
LocalSubjectAccessReview
Accepted
+

Namespace v1 core

+ + + + + +
GroupVersionKind
corev1Namespace
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
NamespaceSpec
Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
NamespaceStatus
Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

NamespaceSpec v1 core

+
Appears In: + +
+ + + + + +
FieldDescription
finalizers
string array
Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
+

NamespaceStatus v1 core

+
Appears In: + +
+ + + + + +
FieldDescription
phase
string
Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
+

NamespaceList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Namespace array
Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a Namespace

+

HTTP Request

+POST /api/v1/namespaces +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Namespace
+

Response

+ + + + + + + +
CodeDescription
202
Namespace
Accepted
200
Namespace
OK
201
Namespace
Created
+

Patch

+

partially update the specified Namespace

+

HTTP Request

+PATCH /api/v1/namespaces/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Namespace
OK
+

Replace

+

replace the specified Namespace

+

HTTP Request

+PUT /api/v1/namespaces/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Namespace
+

Response

+ + + + + + +
CodeDescription
200
Namespace
OK
201
Namespace
Created
+

Delete

+

delete a Namespace

+

HTTP Request

+DELETE /api/v1/namespaces/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Read Operations

+

Read

+

read the specified Namespace

+

HTTP Request

+GET /api/v1/namespaces/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Namespace
OK
+

List

+

list or watch objects of kind Namespace

+

HTTP Request

+GET /api/v1/namespaces +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
NamespaceList
OK
+

Watch

+

watch changes to an object of kind Namespace. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Namespace. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Namespace

+

HTTP Request

+PATCH /api/v1/namespaces/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Namespace
OK
+

Read Status

+

read status of the specified Namespace

+

HTTP Request

+GET /api/v1/namespaces/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Namespace
OK
+

Replace Status

+

replace status of the specified Namespace

+

HTTP Request

+PUT /api/v1/namespaces/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Namespace
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Namespace
+

Response

+ + + + + + +
CodeDescription
200
Namespace
OK
201
Namespace
Created
+

Node v1 core

+ + + + + +
GroupVersionKind
corev1Node
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
NodeSpec
Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
NodeStatus
Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

NodeSpec v1 core

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
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
externalID
string
Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966
podCIDR
string
PodCIDR represents the pod IP range assigned to the node.
providerID
string
ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>
taints
Taint array
If specified, the node's taints.
unschedulable
boolean
Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration
+

NodeStatus v1 core

+
Appears In: + +
+ + + + + + + + + + + + + + + +
FieldDescription
addresses
NodeAddress array
patch strategy: merge
patch merge key: type
List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses
allocatable
object
Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.
capacity
object
Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
conditions
NodeCondition array
patch strategy: merge
patch merge key: type
Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition
config
NodeConfigStatus
Status of the config assigned to the node via the dynamic Kubelet config feature.
daemonEndpoints
NodeDaemonEndpoints
Endpoints of daemons running on the Node.
images
ContainerImage array
List of container images on this node
nodeInfo
NodeSystemInfo
Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info
phase
string
NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.
volumesAttached
AttachedVolume array
List of volumes that are attached to the node.
volumesInUse
string array
List of attachable volumes in use (mounted) by the node.
+

NodeList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Node array
List of nodes
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a Node

+

HTTP Request

+POST /api/v1/nodes +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Node
+

Response

+ + + + + + + +
CodeDescription
202
Node
Accepted
200
Node
OK
201
Node
Created
+

Patch

+

partially update the specified Node

+

HTTP Request

+PATCH /api/v1/nodes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Node
OK
+

Replace

+

replace the specified Node

+

HTTP Request

+PUT /api/v1/nodes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Node
+

Response

+ + + + + + +
CodeDescription
200
Node
OK
201
Node
Created
+

Delete

+

delete a Node

+

HTTP Request

+DELETE /api/v1/nodes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of Node

+

HTTP Request

+DELETE /api/v1/nodes +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Node

+

HTTP Request

+GET /api/v1/nodes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Node
OK
+

List

+

list or watch objects of kind Node

+

HTTP Request

+GET /api/v1/nodes +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
NodeList
OK
+

Watch

+

watch changes to an object of kind Node. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/nodes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Node. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/nodes +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Node

+

HTTP Request

+PATCH /api/v1/nodes/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Node
OK
+

Read Status

+

read status of the specified Node

+

HTTP Request

+GET /api/v1/nodes/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Node
OK
+

Replace Status

+

replace status of the specified Node

+

HTTP Request

+PUT /api/v1/nodes/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the Node
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Node
+

Response

+ + + + + + +
CodeDescription
200
Node
OK
201
Node
Created
+

Proxy Operations

+

Create Connect Proxy

+

connect POST requests to proxy of Node

+

HTTP Request

+POST /api/v1/nodes/{name}/proxy +

Path Parameters

+ + + + + +
ParameterDescription
namename of the NodeProxyOptions
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Create Connect Proxy Path

+

connect POST requests to proxy of Node

+

HTTP Request

+POST /api/v1/nodes/{name}/proxy/{path} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NodeProxyOptions
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Delete Connect Proxy

+

connect DELETE requests to proxy of Node

+

HTTP Request

+DELETE /api/v1/nodes/{name}/proxy +

Path Parameters

+ + + + + +
ParameterDescription
namename of the NodeProxyOptions
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Delete Connect Proxy Path

+

connect DELETE requests to proxy of Node

+

HTTP Request

+DELETE /api/v1/nodes/{name}/proxy/{path} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NodeProxyOptions
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Proxy

+

connect GET requests to proxy of Node

+

HTTP Request

+GET /api/v1/nodes/{name}/proxy +

Path Parameters

+ + + + + +
ParameterDescription
namename of the NodeProxyOptions
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Get Connect Proxy Path

+

connect GET requests to proxy of Node

+

HTTP Request

+GET /api/v1/nodes/{name}/proxy/{path} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NodeProxyOptions
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Head Connect Proxy

+

connect HEAD requests to proxy of Node

+

HTTP Request

+HEAD /api/v1/nodes/{name}/proxy +

Path Parameters

+ + + + + +
ParameterDescription
namename of the NodeProxyOptions
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Head Connect Proxy Path

+

connect HEAD requests to proxy of Node

+

HTTP Request

+HEAD /api/v1/nodes/{name}/proxy/{path} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NodeProxyOptions
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Replace Connect Proxy

+

connect PUT requests to proxy of Node

+

HTTP Request

+PUT /api/v1/nodes/{name}/proxy +

Path Parameters

+ + + + + +
ParameterDescription
namename of the NodeProxyOptions
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

Replace Connect Proxy Path

+

connect PUT requests to proxy of Node

+

HTTP Request

+PUT /api/v1/nodes/{name}/proxy/{path} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NodeProxyOptions
pathpath to the resource
+

Query Parameters

+ + + + + +
ParameterDescription
pathPath is the URL path to use for the current proxy request to node.
+

Response

+ + + + + +
CodeDescription
200
string
OK
+

PersistentVolume v1 core

+ + + + + +
GroupVersionKind
corev1PersistentVolume
+
These are assigned to Pods using PersistentVolumeClaims.
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
PersistentVolumeSpec
Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
status
PersistentVolumeStatus
Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
+

PersistentVolumeSpec v1 core

+
Appears In: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
accessModes
string array
AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
awsElasticBlockStore
AWSElasticBlockStoreVolumeSource
AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
azureDisk
AzureDiskVolumeSource
AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
azureFile
AzureFilePersistentVolumeSource
AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
capacity
object
A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
cephfs
CephFSPersistentVolumeSource
CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
cinder
CinderPersistentVolumeSource
Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
claimRef
ObjectReference
ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
csi
CSIPersistentVolumeSource
CSI represents storage that handled by an external CSI driver (Beta feature).
fc
FCVolumeSource
FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
flexVolume
FlexPersistentVolumeSource
FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.
flocker
FlockerVolumeSource
Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running
gcePersistentDisk
GCEPersistentDiskVolumeSource
GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
glusterfs
GlusterfsVolumeSource
Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md
hostPath
HostPathVolumeSource
HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
iscsi
ISCSIPersistentVolumeSource
ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.
local
LocalVolumeSource
Local represents directly-attached storage with node affinity
mountOptions
string array
A list of mount options, e.g. ["ro", "soft"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options
nfs
NFSVolumeSource
NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
nodeAffinity
VolumeNodeAffinity
NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.
persistentVolumeReclaimPolicy
string
What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
photonPersistentDisk
PhotonPersistentDiskVolumeSource
PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
portworxVolume
PortworxVolumeSource
PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
quobyte
QuobyteVolumeSource
Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
rbd
RBDPersistentVolumeSource
RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md
scaleIO
ScaleIOPersistentVolumeSource
ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
storageClassName
string
Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.
storageos
StorageOSPersistentVolumeSource
StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md
volumeMode
string
volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is an alpha feature and may change in the future.
vsphereVolume
VsphereVirtualDiskVolumeSource
VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
+

PersistentVolumeStatus v1 core

+
Appears In: + +
+ + + + + + + +
FieldDescription
message
string
A human-readable message indicating details about why the volume is in this state.
phase
string
Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase
reason
string
Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.
+

PersistentVolumeList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PersistentVolume array
List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a PersistentVolume

+

HTTP Request

+POST /api/v1/persistentvolumes +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PersistentVolume
+

Response

+ + + + + + + +
CodeDescription
200
PersistentVolume
OK
201
PersistentVolume
Created
202
PersistentVolume
Accepted
+

Patch

+

partially update the specified PersistentVolume

+

HTTP Request

+PATCH /api/v1/persistentvolumes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PersistentVolume
OK
+

Replace

+

replace the specified PersistentVolume

+

HTTP Request

+PUT /api/v1/persistentvolumes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PersistentVolume
+

Response

+ + + + + + +
CodeDescription
200
PersistentVolume
OK
201
PersistentVolume
Created
+

Delete

+

delete a PersistentVolume

+

HTTP Request

+DELETE /api/v1/persistentvolumes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PersistentVolume

+

HTTP Request

+DELETE /api/v1/persistentvolumes +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PersistentVolume

+

HTTP Request

+GET /api/v1/persistentvolumes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolume
OK
+

List

+

list or watch objects of kind PersistentVolume

+

HTTP Request

+GET /api/v1/persistentvolumes +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolumeList
OK
+

Watch

+

watch changes to an object of kind PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/persistentvolumes/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PersistentVolume. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/persistentvolumes +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified PersistentVolume

+

HTTP Request

+PATCH /api/v1/persistentvolumes/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PersistentVolume
OK
+

Read Status

+

read status of the specified PersistentVolume

+

HTTP Request

+GET /api/v1/persistentvolumes/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
PersistentVolume
OK
+

Replace Status

+

replace status of the specified PersistentVolume

+

HTTP Request

+PUT /api/v1/persistentvolumes/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PersistentVolume
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PersistentVolume
+

Response

+ + + + + + +
CodeDescription
200
PersistentVolume
OK
201
PersistentVolume
Created
+

ResourceQuota v1 core

+ + + + + +
GroupVersionKind
corev1ResourceQuota
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
ResourceQuotaSpec
Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
ResourceQuotaStatus
Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

ResourceQuotaSpec v1 core

+
Appears In: + +
+ + + + + + + +
FieldDescription
hard
object
hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
scopeSelector
ScopeSelector
scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.
scopes
string array
A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.
+

ResourceQuotaStatus v1 core

+
Appears In: + +
+ + + + + + +
FieldDescription
hard
object
Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
used
object
Used is the current observed total usage of the resource in the namespace.
+

ResourceQuotaList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ResourceQuota array
Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ResourceQuota

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/resourcequotas +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ResourceQuota
+

Response

+ + + + + + + +
CodeDescription
202
ResourceQuota
Accepted
200
ResourceQuota
OK
201
ResourceQuota
Created
+

Patch

+

partially update the specified ResourceQuota

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/resourcequotas/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ResourceQuota
OK
+

Replace

+

replace the specified ResourceQuota

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/resourcequotas/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ResourceQuota
+

Response

+ + + + + + +
CodeDescription
200
ResourceQuota
OK
201
ResourceQuota
Created
+

Delete

+

delete a ResourceQuota

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/resourcequotas/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ResourceQuota

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/resourcequotas +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ResourceQuota

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/resourcequotas/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ResourceQuota
OK
+

List

+

list or watch objects of kind ResourceQuota

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/resourcequotas +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ResourceQuotaList
OK
+

List All Namespaces

+

list or watch objects of kind ResourceQuota

+

HTTP Request

+GET /api/v1/resourcequotas +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ResourceQuotaList
OK
+

Watch

+

watch changes to an object of kind ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/resourcequotas/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/resourcequotas +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ResourceQuota. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/resourcequotas +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified ResourceQuota

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/resourcequotas/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ResourceQuota
OK
+

Read Status

+

read status of the specified ResourceQuota

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/resourcequotas/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ResourceQuota
OK
+

Replace Status

+

replace status of the specified ResourceQuota

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/resourcequotas/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ResourceQuota
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ResourceQuota
+

Response

+ + + + + + +
CodeDescription
200
ResourceQuota
OK
201
ResourceQuota
Created
+

Role v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1Role
+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
rules
PolicyRule array
Rules holds all the PolicyRules for this Role
+

RoleList v1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Role array
Items is a list of Roles
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a Role

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Role
+

Response

+ + + + + + + +
CodeDescription
201
Role
Created
202
Role
Accepted
200
Role
OK
+

Patch

+

partially update the specified Role

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Role
OK
+

Replace

+

replace the specified Role

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Role
+

Response

+ + + + + + +
CodeDescription
200
Role
OK
201
Role
Created
+

Delete

+

delete a Role

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Role

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Role
OK
+

List

+

list or watch objects of kind Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleList
OK
+

List All Namespaces

+

list or watch objects of kind Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/roles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleList
OK
+

Watch

+

watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/roles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

RoleBinding v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1RoleBinding
+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
roleRef
RoleRef
RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.
subjects
Subject array
Subjects holds references to the objects the role applies to.
+

RoleBindingList v1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
RoleBinding array
Items is a list of RoleBindings
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a RoleBinding

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
RoleBinding
+

Response

+ + + + + + + +
CodeDescription
200
RoleBinding
OK
201
RoleBinding
Created
202
RoleBinding
Accepted
+

Patch

+

partially update the specified RoleBinding

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
RoleBinding
OK
+

Replace

+

replace the specified RoleBinding

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
RoleBinding
+

Response

+ + + + + + +
CodeDescription
200
RoleBinding
OK
201
RoleBinding
Created
+

Delete

+

delete a RoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of RoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
RoleBinding
OK
+

List

+

list or watch objects of kind RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleBindingList
OK
+

List All Namespaces

+

list or watch objects of kind RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/rolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleBindingList
OK
+

Watch

+

watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1/watch/rolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

SelfSubjectAccessReview v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1SelfSubjectAccessReview
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SelfSubjectAccessReviewSpec
Spec holds information about the request being evaluated. user and groups must be empty
status
SubjectAccessReviewStatus
Status is filled in by the server and indicates whether the request is allowed or not
+

SelfSubjectAccessReviewSpec v1 authorization

+ + + + + + + +
FieldDescription
nonResourceAttributes
NonResourceAttributes
NonResourceAttributes describes information for a non-resource access request
resourceAttributes
ResourceAttributes
ResourceAuthorizationAttributes describes information for a resource access request
+

Write Operations

+

Create

+

create a SelfSubjectAccessReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1/selfsubjectaccessreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
SelfSubjectAccessReview
+

Response

+ + + + + + + +
CodeDescription
201
SelfSubjectAccessReview
Created
202
SelfSubjectAccessReview
Accepted
200
SelfSubjectAccessReview
OK
+

SelfSubjectRulesReview v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1SelfSubjectRulesReview
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SelfSubjectRulesReviewSpec
Spec holds information about the request being evaluated.
status
SubjectRulesReviewStatus
Status is filled in by the server and indicates the set of actions a user can perform.
+

SelfSubjectRulesReviewSpec v1 authorization

+ + + + + + +
FieldDescription
namespace
string
Namespace to evaluate rules for. Required.
+

Write Operations

+

Create

+

create a SelfSubjectRulesReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1/selfsubjectrulesreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
SelfSubjectRulesReview
+

Response

+ + + + + + + +
CodeDescription
202
SelfSubjectRulesReview
Accepted
200
SelfSubjectRulesReview
OK
201
SelfSubjectRulesReview
Created
+

ServiceAccount v1 core

+ + + + + +
GroupVersionKind
corev1ServiceAccount
+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
automountServiceAccountToken
boolean
AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.
imagePullSecrets
LocalObjectReference array
ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
secrets
ObjectReference array
patch strategy: merge
patch merge key: name
Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret
+

ServiceAccountList v1 core

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ServiceAccount array
List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ServiceAccount

+

HTTP Request

+POST /api/v1/namespaces/{namespace}/serviceaccounts +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ServiceAccount
+

Response

+ + + + + + + +
CodeDescription
201
ServiceAccount
Created
202
ServiceAccount
Accepted
200
ServiceAccount
OK
+

Patch

+

partially update the specified ServiceAccount

+

HTTP Request

+PATCH /api/v1/namespaces/{namespace}/serviceaccounts/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceAccount
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ServiceAccount
OK
+

Replace

+

replace the specified ServiceAccount

+

HTTP Request

+PUT /api/v1/namespaces/{namespace}/serviceaccounts/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceAccount
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ServiceAccount
+

Response

+ + + + + + +
CodeDescription
200
ServiceAccount
OK
201
ServiceAccount
Created
+

Delete

+

delete a ServiceAccount

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/serviceaccounts/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceAccount
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ServiceAccount

+

HTTP Request

+DELETE /api/v1/namespaces/{namespace}/serviceaccounts +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ServiceAccount

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/serviceaccounts/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceAccount
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ServiceAccount
OK
+

List

+

list or watch objects of kind ServiceAccount

+

HTTP Request

+GET /api/v1/namespaces/{namespace}/serviceaccounts +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ServiceAccountList
OK
+

List All Namespaces

+

list or watch objects of kind ServiceAccount

+

HTTP Request

+GET /api/v1/serviceaccounts +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ServiceAccountList
OK
+

Watch

+

watch changes to an object of kind ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/serviceaccounts/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ServiceAccount
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/namespaces/{namespace}/serviceaccounts +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ServiceAccount. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /api/v1/watch/serviceaccounts +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

SubjectAccessReview v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1SubjectAccessReview
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SubjectAccessReviewSpec
Spec holds information about the request being evaluated
status
SubjectAccessReviewStatus
Status is filled in by the server and indicates whether the request is allowed or not
+

SubjectAccessReviewSpec v1 authorization

+ + + + + + + + + + + +
FieldDescription
extra
object
Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.
groups
string array
Groups is the groups you're testing for.
nonResourceAttributes
NonResourceAttributes
NonResourceAttributes describes information for a non-resource access request
resourceAttributes
ResourceAttributes
ResourceAuthorizationAttributes describes information for a resource access request
uid
string
UID information about the requesting user.
user
string
User is the user you're testing for. If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
+

SubjectAccessReviewStatus v1 authorization

+ + + + + + + + + +
FieldDescription
allowed
boolean
Allowed is required. True if the action would be allowed, false otherwise.
denied
boolean
Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.
evaluationError
string
EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
reason
string
Reason is optional. It indicates why a request was allowed or denied.
+

Write Operations

+

Create

+

create a SubjectAccessReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1/subjectaccessreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
SubjectAccessReview
+

Response

+ + + + + + + +
CodeDescription
200
SubjectAccessReview
OK
201
SubjectAccessReview
Created
202
SubjectAccessReview
Accepted
+

TokenReview v1 authentication.k8s.io

+ + + + + +
GroupVersionKind
authentication.k8s.iov1TokenReview
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
TokenReviewSpec
Spec holds information about the request being evaluated
status
TokenReviewStatus
Status is filled in by the server and indicates whether the request can be authenticated.
+

TokenReviewSpec v1 authentication

+
Appears In: + +
+ + + + + +
FieldDescription
token
string
Token is the opaque bearer token.
+

TokenReviewStatus v1 authentication

+
Appears In: + +
+ + + + + + + +
FieldDescription
authenticated
boolean
Authenticated indicates that the token was associated with a known user.
error
string
Error indicates that the token couldn't be checked
user
UserInfo
User is the UserInfo associated with the provided token.
+

Write Operations

+

Create

+

create a TokenReview

+

HTTP Request

+POST /apis/authentication.k8s.io/v1/tokenreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
TokenReview
+

Response

+ + + + + + + +
CodeDescription
200
TokenReview
OK
201
TokenReview
Created
202
TokenReview
Accepted
+

NetworkPolicy v1 networking.k8s.io

+ + + + + +
GroupVersionKind
networking.k8s.iov1NetworkPolicy
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
NetworkPolicySpec
Specification of the desired behavior for this NetworkPolicy.
+

NetworkPolicySpec v1 networking

+
Appears In: + +
+ + + + + + + + +
FieldDescription
egress
NetworkPolicyEgressRule array
List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8
ingress
NetworkPolicyIngressRule array
List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)
podSelector
LabelSelector
Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.
policyTypes
string array
List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ "Egress" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include "Egress" (since such a policy would not include an Egress section and would otherwise default to just [ "Ingress" ]). This field is beta-level in 1.8
+

NetworkPolicyList v1 networking

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
NetworkPolicy array
Items is a list of schema objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a NetworkPolicy

+

HTTP Request

+POST /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
NetworkPolicy
+

Response

+ + + + + + + +
CodeDescription
200
NetworkPolicy
OK
201
NetworkPolicy
Created
202
NetworkPolicy
Accepted
+

Patch

+

partially update the specified NetworkPolicy

+

HTTP Request

+PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicy
OK
+

Replace

+

replace the specified NetworkPolicy

+

HTTP Request

+PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
NetworkPolicy
+

Response

+ + + + + + +
CodeDescription
200
NetworkPolicy
OK
201
NetworkPolicy
Created
+

Delete

+

delete a NetworkPolicy

+

HTTP Request

+DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of NetworkPolicy

+

HTTP Request

+DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified NetworkPolicy

+

HTTP Request

+GET /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicy
OK
+

List

+

list or watch objects of kind NetworkPolicy

+

HTTP Request

+GET /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicyList
OK
+

List All Namespaces

+

list or watch objects of kind NetworkPolicy

+

HTTP Request

+GET /apis/networking.k8s.io/v1/networkpolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicyList
OK
+

Watch

+

watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/networking.k8s.io/v1/watch/networkpolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

DEFINITIONS

+ +

This section contains definitions for objects used in the Kubernetes APIs.

+

APIGroup v1 meta

+ + + + + +
GroupVersionKind
metav1APIGroup
+

APIGroup contains the name, the supported versions, and the preferred version of a group.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
name
string
name is the name of the group.
preferredVersion
GroupVersionForDiscovery
preferredVersion is the version preferred by the API server, which probably is the storage version.
serverAddressByClientCIDRs
ServerAddressByClientCIDR array
a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.
versions
GroupVersionForDiscovery array
versions are the versions supported in this group.
+

APIResource v1 meta

+ + + + + +
GroupVersionKind
metav1APIResource
+

APIResource specifies the name of a resource and whether it is namespaced.

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
categories
string array
categories is a list of the grouped resources this resource belongs to (e.g. 'all')
group
string
group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale".
kind
string
kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')
name
string
name is the plural name of the resource.
namespaced
boolean
namespaced indicates if a resource is namespaced or not.
shortNames
string array
shortNames is a list of suggested short names of the resource.
singularName
string
singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.
verbs
string array
verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)
version
string
version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)".
+

APIServiceCondition v1 apiregistration.k8s.io

+ + + + + +
GroupVersionKind
apiregistration.k8s.iov1APIServiceCondition
+

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
Human-readable message indicating details about last transition.
reason
string
Unique, one-word, CamelCase reason for the condition's last transition.
status
string
Status is the status of the condition. Can be True, False, Unknown.
type
string
Type is the type of the condition.
+

APIVersions v1 meta

+ + + + + +
GroupVersionKind
metav1APIVersions
+

APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
serverAddressByClientCIDRs
ServerAddressByClientCIDR array
a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.
versions
string array
versions are the api versions that are available.
+

AWSElasticBlockStoreVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1AWSElasticBlockStoreVolumeSource
+

Represents a Persistent Disk resource in AWS. + +An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.

+ + + + + + + + + +
FieldDescription
fsType
string
Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
partition
integer
The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
readOnly
boolean
Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
volumeID
string
Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+

Affinity v1 core

+ + + + + +
GroupVersionKind
corev1Affinity
+

Affinity is a group of affinity scheduling rules.

+
Appears In: + +
+ + + + + + + +
FieldDescription
nodeAffinity
NodeAffinity
Describes node affinity scheduling rules for the pod.
podAffinity
PodAffinity
Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
podAntiAffinity
PodAntiAffinity
Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
+

AggregationRule v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1AggregationRule
+

AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole

+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+
Appears In: + +
+ + + + + +
FieldDescription
clusterRoleSelectors
LabelSelector array
ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added
+

AllowedFlexVolume v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1AllowedFlexVolume
+

AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.

+ + + + + + +
FieldDescription
driver
string
driver is the name of the Flexvolume driver.
+

AllowedHostPath v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1AllowedHostPath
+

AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.

+ + + + + + + +
FieldDescription
pathPrefix
string
pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path. Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`
readOnly
boolean
when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
+

AttachedVolume v1 core

+ + + + + +
GroupVersionKind
corev1AttachedVolume
+

AttachedVolume describes a volume attached to a node

+
Appears In: + +
+ + + + + + +
FieldDescription
devicePath
string
DevicePath represents the device path where the volume should be available
name
string
Name of the attached volume
+

AzureDiskVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1AzureDiskVolumeSource
+

AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.

+ + + + + + + + + + + +
FieldDescription
cachingMode
string
Host Caching mode: None, Read Only, Read Write.
diskName
string
The Name of the data disk in the blob storage
diskURI
string
The URI the data disk in the blob storage
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
kind
string
Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+

AzureFilePersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1AzureFilePersistentVolumeSource
+

AzureFile represents an Azure File Service mount on the host and bind mount to the pod.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretName
string
the name of secret that contains Azure Storage Account Name and Key
secretNamespace
string
the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod
shareName
string
Share Name
+

AzureFileVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1AzureFileVolumeSource
+

AzureFile represents an Azure File Service mount on the host and bind mount to the pod.

+
Appears In: + +
+ + + + + + + +
FieldDescription
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretName
string
the name of secret that contains Azure Storage Account Name and Key
shareName
string
Share Name
+

CSIPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1CSIPersistentVolumeSource
+

Represents storage that is managed by an external CSI volume driver (Beta feature)

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
controllerPublishSecretRef
SecretReference
ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
driver
string
Driver is the name of the driver to use for this volume. Required.
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs".
nodePublishSecretRef
SecretReference
NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
nodeStageSecretRef
SecretReference
NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
readOnly
boolean
Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).
volumeAttributes
object
Attributes of the volume to publish.
volumeHandle
string
VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.
+

Capabilities v1 core

+ + + + + +
GroupVersionKind
corev1Capabilities
+

Adds and removes POSIX capabilities from running containers.

+
Appears In: + +
+ + + + + + +
FieldDescription
add
string array
Added capabilities
drop
string array
Removed capabilities
+

CephFSPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1CephFSPersistentVolumeSource
+

Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
monitors
string array
Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
path
string
Optional: Used as the mounted root, rather than the full Ceph tree, default is /
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
secretFile
string
Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
secretRef
SecretReference
Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
user
string
Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
+

CephFSVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1CephFSVolumeSource
+

Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
monitors
string array
Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
path
string
Optional: Used as the mounted root, rather than the full Ceph tree, default is /
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
secretFile
string
Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
secretRef
LocalObjectReference
Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
user
string
Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it
+

CertificateSigningRequestCondition v1beta1 certificates.k8s.io

+ + + + + +
GroupVersionKind
certificates.k8s.iov1beta1CertificateSigningRequestCondition
+

+ + + + + + + + + +
FieldDescription
lastUpdateTime
Time
timestamp for the last update to this condition
message
string
human readable message with details about the request state
reason
string
brief reason for the request state
type
string
request approval state, currently Approved or Denied.
+

CinderPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1CinderPersistentVolumeSource
+

Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
secretRef
SecretReference
Optional: points to a secret object containing parameters used to connect to OpenStack.
volumeID
string
volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
+

CinderVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1CinderVolumeSource
+

Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
secretRef
LocalObjectReference
Optional: points to a secret object containing parameters used to connect to OpenStack.
volumeID
string
volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
+

ClientIPConfig v1 core

+ + + + + +
GroupVersionKind
corev1ClientIPConfig
+

ClientIPConfig represents the configurations of Client IP based session affinity.

+
Appears In: + +
+ + + + + +
FieldDescription
timeoutSeconds
integer
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).
+

ComponentCondition v1 core

+ + + + + +
GroupVersionKind
corev1ComponentCondition
+

Information about the condition of a component.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
error
string
Condition error code for a component. For example, a health check error code.
message
string
Message about the condition for a component. For example, information about a health check.
status
string
Status of the condition for a component. Valid values for "Healthy": "True", "False", or "Unknown".
type
string
Type of condition for a component. Valid value: "Healthy"
+

ConfigMapEnvSource v1 core

+ + + + + +
GroupVersionKind
corev1ConfigMapEnvSource
+

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.

+
Appears In: + +
+ + + + + + +
FieldDescription
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the ConfigMap must be defined
+

ConfigMapKeySelector v1 core

+ + + + + +
GroupVersionKind
corev1ConfigMapKeySelector
+

Selects a key from a ConfigMap.

+
Appears In: + +
+ + + + + + + +
FieldDescription
key
string
The key to select.
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the ConfigMap or it's key must be defined
+

ConfigMapNodeConfigSource v1 core

+ + + + + +
GroupVersionKind
corev1ConfigMapNodeConfigSource
+

ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
kubeletConfigKey
string
KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.
name
string
Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.
namespace
string
Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.
resourceVersion
string
ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.
uid
string
UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.
+

ConfigMapProjection v1 core

+ + + + + +
GroupVersionKind
corev1ConfigMapProjection
+

Adapts a ConfigMap into a projected volume. + +The contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.

+
Appears In: + +
+ + + + + + + +
FieldDescription
items
KeyToPath array
If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the ConfigMap or it's keys must be defined
+

ConfigMapVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1ConfigMapVolumeSource
+

Adapts a ConfigMap into a volume. + +The contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
defaultMode
integer
Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
items
KeyToPath array
If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the ConfigMap or it's keys must be defined
+

ContainerImage v1 core

+ + + + + +
GroupVersionKind
corev1ContainerImage
+

Describe a container image

+
Appears In: + +
+ + + + + + +
FieldDescription
names
string array
Names by which this image is known. e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]
sizeBytes
integer
The size of the image in bytes.
+

ContainerPort v1 core

+ + + + + +
GroupVersionKind
corev1ContainerPort
+

ContainerPort represents a network port in a single container.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
containerPort
integer
Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.
hostIP
string
What host IP to bind the external port to.
hostPort
integer
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.
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.
protocol
string
Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
+

ContainerState v1 core

+ + + + + +
GroupVersionKind
corev1ContainerState
+

ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.

+
Appears In: + +
+ + + + + + + +
FieldDescription
running
ContainerStateRunning
Details about a running container
terminated
ContainerStateTerminated
Details about a terminated container
waiting
ContainerStateWaiting
Details about a waiting container
+

ContainerStateRunning v1 core

+ + + + + +
GroupVersionKind
corev1ContainerStateRunning
+

ContainerStateRunning is a running state of a container.

+
Appears In: + +
+ + + + + +
FieldDescription
startedAt
Time
Time at which the container was last (re-)started
+

ContainerStateTerminated v1 core

+ + + + + +
GroupVersionKind
corev1ContainerStateTerminated
+

ContainerStateTerminated is a terminated state of a container.

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
containerID
string
Container's ID in the format 'docker://<container_id>'
exitCode
integer
Exit status from the last termination of the container
finishedAt
Time
Time at which the container last terminated
message
string
Message regarding the last termination of the container
reason
string
(brief) reason from the last termination of the container
signal
integer
Signal from the last termination of the container
startedAt
Time
Time at which previous execution of the container started
+

ContainerStateWaiting v1 core

+ + + + + +
GroupVersionKind
corev1ContainerStateWaiting
+

ContainerStateWaiting is a waiting state of a container.

+
Appears In: + +
+ + + + + + +
FieldDescription
message
string
Message regarding why the container is not yet running.
reason
string
(brief) reason the container is not yet running.
+

CrossVersionObjectReference v1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv1CrossVersionObjectReference
+

CrossVersionObjectReference contains enough information to let you identify the referred resource.

+
Other API versions of this object exist: +v2beta2 +v2beta1 +
+ + + + + + + + +
FieldDescription
apiVersion
string
API version of the referent
kind
string
Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"
name
string
Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names
+

CustomResourceColumnDefinition v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceColumnDefinition
+

CustomResourceColumnDefinition specifies a column for server side printing.

+ + + + + + + + + + + +
FieldDescription
JSONPath
string
JSONPath is a simple JSON path, i.e. with array notation.
description
string
description is a human readable description of this column.
format
string
format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.
name
string
name is a human readable name for the column.
priority
integer
priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.
type
string
type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.
+

CustomResourceDefinitionCondition v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceDefinitionCondition
+

CustomResourceDefinitionCondition contains details for the current condition of this pod.

+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
Human-readable message indicating details about last transition.
reason
string
Unique, one-word, CamelCase reason for the condition's last transition.
status
string
Status is the status of the condition. Can be True, False, Unknown.
type
string
Type is the type of the condition.
+

CustomResourceDefinitionNames v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceDefinitionNames
+

CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition

+ + + + + + + + + + + +
FieldDescription
categories
string array
Categories is a list of grouped resources custom resources belong to (e.g. 'all')
kind
string
Kind is the serialized kind of the resource. It is normally CamelCase and singular.
listKind
string
ListKind is the serialized kind of the list for this resource. Defaults to <kind>List.
plural
string
Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.
shortNames
string array
ShortNames are short names for the resource. It must be all lowercase.
singular
string
Singular is the singular name of the resource. It must be all lowercase Defaults to lowercased <kind>
+

CustomResourceDefinitionVersion v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceDefinitionVersion
+

+ + + + + + + + +
FieldDescription
name
string
Name is the version name, e.g. “v1”, “v2beta1”, etc.
served
boolean
Served is a flag enabling/disabling this version from being served via REST APIs
storage
boolean
Storage flags the version as storage version. There must be exactly one flagged as storage version.
+

CustomResourceSubresourceScale v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceSubresourceScale
+

CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.

+ + + + + + + + +
FieldDescription
labelSelectorPath
string
LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.
specReplicasPath
string
SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.
statusReplicasPath
string
StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.
+

CustomResourceSubresourceStatus v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceSubresourceStatus
+

CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza

+ + + + + +
FieldDescription
+

CustomResourceSubresources v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceSubresources
+

CustomResourceSubresources defines the status and scale subresources for CustomResources.

+ + + + + + + +
FieldDescription
scale
CustomResourceSubresourceScale
Scale denotes the scale subresource for CustomResources
status
CustomResourceSubresourceStatus
Status denotes the status subresource for CustomResources
+

CustomResourceValidation v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1CustomResourceValidation
+

CustomResourceValidation is a list of validation methods for CustomResources.

+ + + + + + +
FieldDescription
openAPIV3Schema
JSONSchemaProps
OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.
+

DaemonEndpoint v1 core

+ + + + + +
GroupVersionKind
corev1DaemonEndpoint
+

DaemonEndpoint contains information about a single Daemon endpoint.

+
Appears In: + +
+ + + + + +
FieldDescription
Port
integer
Port number of the given endpoint.
+

DaemonSetCondition v1 apps

+ + + + + +
GroupVersionKind
appsv1DaemonSetCondition
+

DaemonSetCondition describes the state of a DaemonSet at a certain point.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of DaemonSet condition.
+

DaemonSetUpdateStrategy v1 apps

+ + + + + +
GroupVersionKind
appsv1DaemonSetUpdateStrategy
+

DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDaemonSet
Rolling update config params. Present only if type = "RollingUpdate".
type
string
Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.
+

DeleteOptions v1 meta

+ + + + + +
GroupVersionKind
metav1DeleteOptions
+

DeleteOptions may be provided when deleting an API object.

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
dryRun
string array
When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSeconds
integer
The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
orphanDependents
boolean
Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
preconditions
Preconditions
Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.
propagationPolicy
string
Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

DeploymentCondition v1 apps

+ + + + + +
GroupVersionKind
appsv1DeploymentCondition
+

DeploymentCondition describes the state of a deployment at a certain point.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
lastUpdateTime
Time
The last time this condition was updated.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of deployment condition.
+

DownwardAPIProjection v1 core

+ + + + + +
GroupVersionKind
corev1DownwardAPIProjection
+

Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.

+
Appears In: + +
+ + + + + +
FieldDescription
items
DownwardAPIVolumeFile array
Items is a list of DownwardAPIVolume file
+

DownwardAPIVolumeFile v1 core

+ + + + + +
GroupVersionKind
corev1DownwardAPIVolumeFile
+

DownwardAPIVolumeFile represents information to create the file containing the pod field

+ + + + + + + + + +
FieldDescription
fieldRef
ObjectFieldSelector
Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
mode
integer
Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
path
string
Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'
resourceFieldRef
ResourceFieldSelector
Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+

DownwardAPIVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1DownwardAPIVolumeSource
+

DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + +
FieldDescription
defaultMode
integer
Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
items
DownwardAPIVolumeFile array
Items is a list of downward API volume file
+

EmptyDirVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1EmptyDirVolumeSource
+

Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + +
FieldDescription
medium
string
What type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
sizeLimit
Quantity
Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir
+

EndpointAddress v1 core

+ + + + + +
GroupVersionKind
corev1EndpointAddress
+

EndpointAddress is a tuple that describes single IP address.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
hostname
string
The Hostname of this endpoint
ip
string
The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.
nodeName
string
Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.
targetRef
ObjectReference
Reference to object providing the endpoint.
+

EndpointPort v1 core

+ + + + + +
GroupVersionKind
corev1EndpointPort
+

EndpointPort is a tuple that describes a single port.

+
Appears In: + +
+ + + + + + + +
FieldDescription
name
string
The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.
port
integer
The port number of the endpoint.
protocol
string
The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.
+

EndpointSubset v1 core

+ + + + + +
GroupVersionKind
corev1EndpointSubset
+

EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given: + { + Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], + Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] + } +The resulting set of endpoints can be viewed as: + a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], + b: [ 10.10.1.1:309, 10.10.2.2:309 ]

+
Appears In: + +
+ + + + + + + +
FieldDescription
addresses
EndpointAddress array
IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.
notReadyAddresses
EndpointAddress array
IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.
ports
EndpointPort array
Port numbers available on the related IP addresses.
+

EnvFromSource v1 core

+ + + + + +
GroupVersionKind
corev1EnvFromSource
+

EnvFromSource represents the source of a set of ConfigMaps

+ + + + + + + + +
FieldDescription
configMapRef
ConfigMapEnvSource
The ConfigMap to select from
prefix
string
An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
secretRef
SecretEnvSource
The Secret to select from
+

EnvVar v1 core

+ + + + + +
GroupVersionKind
corev1EnvVar
+

EnvVar represents an environment variable present in a Container.

+ + + + + + + + +
FieldDescription
name
string
Name of the environment variable. Must be a C_IDENTIFIER.
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 "".
valueFrom
EnvVarSource
Source for the environment variable's value. Cannot be used if value is not empty.
+

EnvVarSource v1 core

+ + + + + +
GroupVersionKind
corev1EnvVarSource
+

EnvVarSource represents a source for the value of an EnvVar.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
configMapKeyRef
ConfigMapKeySelector
Selects a key of a ConfigMap.
fieldRef
ObjectFieldSelector
Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.
resourceFieldRef
ResourceFieldSelector
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.
secretKeyRef
SecretKeySelector
Selects a key of a secret in the pod's namespace
+

EventSeries v1 core

+ + + + + +
GroupVersionKind
corev1EventSeries
+

EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.

+
Other API versions of this object exist: +v1beta1 +
+
Appears In: + +
+ + + + + + + +
FieldDescription
count
integer
Number of occurrences in this series up to the last heartbeat time
lastObservedTime
MicroTime
Time of the last occurrence observed
state
string
State of this Series: Ongoing or Finished
+

EventSource v1 core

+ + + + + +
GroupVersionKind
corev1EventSource
+

EventSource contains information for an event.

+ + + + + + + +
FieldDescription
component
string
Component from which the event is generated.
host
string
Node name on which the event is generated.
+

Eviction v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1Eviction
+

Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods/<pod name>/evictions.

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
deleteOptions
DeleteOptions
DeleteOptions may be provided
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
ObjectMeta describes the pod that is being evicted.
+

ExecAction v1 core

+ + + + + +
GroupVersionKind
corev1ExecAction
+

ExecAction describes a "run in container" action.

+
Appears In: + +
+ + + + + +
FieldDescription
command
string array
Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+

ExternalDocumentation v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1ExternalDocumentation
+

ExternalDocumentation allows referencing an external resource for extended documentation.

+ + + + + + + +
FieldDescription
description
string
url
string
+

ExternalMetricSource v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2ExternalMetricSource
+

ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + +
FieldDescription
metric
MetricIdentifier
metric identifies the target metric by name and selector
target
MetricTarget
target specifies the target value for the given metric
+

ExternalMetricStatus v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2ExternalMetricStatus
+

ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + +
FieldDescription
current
MetricValueStatus
current contains the current value for the given metric
metric
MetricIdentifier
metric identifies the target metric by name and selector
+

FCVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1FCVolumeSource
+

Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.

+ + + + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
lun
integer
Optional: FC target lun number
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
targetWWNs
string array
Optional: FC target worldwide names (WWNs)
wwids
string array
Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
+

FSGroupStrategyOptions v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1FSGroupStrategyOptions
+

FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.

+ + + + + + + +
FieldDescription
ranges
IDRange array
ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.
rule
string
rule is the strategy that will dictate what FSGroup is used in the SecurityContext.
+

FlexPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1FlexPersistentVolumeSource
+

FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
driver
string
Driver is the name of the driver to use for this volume.
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
options
object
Optional: Extra command options if any.
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretRef
SecretReference
Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.
+

FlexVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1FlexVolumeSource
+

FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
driver
string
Driver is the name of the driver to use for this volume.
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
options
object
Optional: Extra command options if any.
readOnly
boolean
Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretRef
LocalObjectReference
Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.
+

FlockerVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1FlockerVolumeSource
+

Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.

+ + + + + + + +
FieldDescription
datasetName
string
Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated
datasetUUID
string
UUID of the dataset. This is unique identifier of a Flocker dataset
+

GCEPersistentDiskVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1GCEPersistentDiskVolumeSource
+

Represents a Persistent Disk resource in Google Compute Engine. + +A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.

+ + + + + + + + + +
FieldDescription
fsType
string
Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
partition
integer
The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
pdName
string
Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
readOnly
boolean
ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+

GitRepoVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1GitRepoVolumeSource
+

Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling. + +DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.

+
Appears In: + +
+ + + + + + + +
FieldDescription
directory
string
Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.
repository
string
Repository URL
revision
string
Commit hash for the specified revision.
+

GlusterfsVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1GlusterfsVolumeSource
+

Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.

+ + + + + + + + +
FieldDescription
endpoints
string
EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod
path
string
Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod
readOnly
boolean
ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod
+

GroupVersionForDiscovery v1 meta

+ + + + + +
GroupVersionKind
metav1GroupVersionForDiscovery
+

GroupVersion contains the "group/version" and "version" string of a version. It is made a struct to keep extensibility.

+
Appears In: + +
+ + + + + + +
FieldDescription
groupVersion
string
groupVersion specifies the API group and version in the form "group/version"
version
string
version specifies the version in the form of "version". This is to save the clients the trouble of splitting the GroupVersion.
+

HTTPGetAction v1 core

+ + + + + +
GroupVersionKind
corev1HTTPGetAction
+

HTTPGetAction describes an action based on HTTP Get requests.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
host
string
Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.
httpHeaders
HTTPHeader array
Custom headers to set in the request. HTTP allows repeated headers.
path
string
Path to access on the HTTP server.
portName or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
scheme
string
Scheme to use for connecting to the host. Defaults to HTTP.
+

HTTPHeader v1 core

+ + + + + +
GroupVersionKind
corev1HTTPHeader
+

HTTPHeader describes a custom header to be used in HTTP probes

+
Appears In: + +
+ + + + + + +
FieldDescription
name
string
The header field name
value
string
The header field value
+

HTTPIngressPath v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1HTTPIngressPath
+

HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.

+ + + + + + + +
FieldDescription
backend
IngressBackend
Backend defines the referenced service endpoint to which the traffic will be forwarded to.
path
string
Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) 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 '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.
+

HTTPIngressRuleValue v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1HTTPIngressRuleValue
+

HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.

+ + + + + + +
FieldDescription
paths
HTTPIngressPath array
A collection of paths that map requests to backends.
+

Handler v1 core

+ + + + + +
GroupVersionKind
corev1Handler
+

Handler defines a specific action that should be taken

+
Appears In: + +
+ + + + + + + +
FieldDescription
exec
ExecAction
One and only one of the following should be specified. Exec specifies the action to take.
httpGet
HTTPGetAction
HTTPGet specifies the http request to perform.
tcpSocket
TCPSocketAction
TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported
+

HorizontalPodAutoscalerCondition v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2HorizontalPodAutoscalerCondition
+

HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
lastTransitionTime is the last time the condition transitioned from one status to another
message
string
message is a human-readable explanation containing details about the transition
reason
string
reason is the reason for the condition's last transition.
status
string
status is the status of the condition (True, False, Unknown)
type
string
type describes the current condition
+

HostAlias v1 core

+ + + + + +
GroupVersionKind
corev1HostAlias
+

HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.

+
Appears In: + +
+ + + + + + +
FieldDescription
hostnames
string array
Hostnames for the above IP address.
ip
string
IP address of the host file entry.
+

HostPathVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1HostPathVolumeSource
+

Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.

+ + + + + + + +
FieldDescription
path
string
Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
type
string
Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+

HostPortRange v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1HostPortRange
+

HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.

+ + + + + + + +
FieldDescription
max
integer
max is the end of the range, inclusive.
min
integer
min is the start of the range, inclusive.
+

IDRange v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1IDRange
+

IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.

+ + + + + + + +
FieldDescription
max
integer
max is the end of the range, inclusive.
min
integer
min is the start of the range, inclusive.
+

IPBlock v1 networking.k8s.io

+ + + + + +
GroupVersionKind
networking.k8s.iov1IPBlock
+

IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
cidr
string
CIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"
except
string array
Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range
+

ISCSIPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1ISCSIPersistentVolumeSource
+

ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + + + + + + + + +
FieldDescription
chapAuthDiscovery
boolean
whether support iSCSI Discovery CHAP authentication
chapAuthSession
boolean
whether support iSCSI Session CHAP authentication
fsType
string
Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
initiatorName
string
Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.
iqn
string
Target iSCSI Qualified Name.
iscsiInterface
string
iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
lun
integer
iSCSI Target Lun number.
portals
string array
iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
readOnly
boolean
ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
secretRef
SecretReference
CHAP Secret for iSCSI target and initiator authentication
targetPortal
string
iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
+

ISCSIVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1ISCSIVolumeSource
+

Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + + + + + + + + +
FieldDescription
chapAuthDiscovery
boolean
whether support iSCSI Discovery CHAP authentication
chapAuthSession
boolean
whether support iSCSI Session CHAP authentication
fsType
string
Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
initiatorName
string
Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.
iqn
string
Target iSCSI Qualified Name.
iscsiInterface
string
iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
lun
integer
iSCSI Target Lun number.
portals
string array
iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
readOnly
boolean
ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
secretRef
LocalObjectReference
CHAP Secret for iSCSI target and initiator authentication
targetPortal
string
iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
+

IngressBackend v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1IngressBackend
+

IngressBackend describes all endpoints for a given service and port.

+ + + + + + + +
FieldDescription
serviceName
string
Specifies the name of the referenced service.
servicePortSpecifies the port of the referenced service.
+

IngressRule v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1IngressRule
+

IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.

+ + + + + + + +
FieldDescription
host
string
Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the IP in the Spec of the parent Ingress. 2. The `:` delimiter is not respected because ports are not allowed. Currently the port of an Ingress is implicitly :80 for http and :443 for https. Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.
http
HTTPIngressRuleValue
+

IngressTLS v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1IngressTLS
+

IngressTLS describes the transport layer security associated with an Ingress.

+ + + + + + + +
FieldDescription
hosts
string array
Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.
secretName
string
SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.
+

Initializer v1 meta

+ + + + + +
GroupVersionKind
metav1Initializer
+

Initializer is information about an initializer that has not yet completed.

+
Other API versions of this object exist: +v1alpha1 +
+
Appears In: + +
+ + + + + +
FieldDescription
name
string
name of the process that is responsible for initializing this object.
+

Initializers v1 meta

+ + + + + +
GroupVersionKind
metav1Initializers
+

Initializers tracks the progress of initialization.

+
Appears In: + +
+ + + + + + +
FieldDescription
pending
Initializer array
patch strategy: merge
patch merge key: name
Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.
result
Status
If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.
+

JSON v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1JSON
+

JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.

+ + + + + +
FieldDescription
+

JSONSchemaProps v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1JSONSchemaProps
+

JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
$ref
string
$schema
string
additionalItems
JSONSchemaPropsOrBool
additionalProperties
JSONSchemaPropsOrBool
allOf
JSONSchemaProps array
anyOf
JSONSchemaProps array
default
JSON
definitions
object
dependencies
object
description
string
enum
JSON array
example
JSON
exclusiveMaximum
boolean
exclusiveMinimum
boolean
externalDocs
ExternalDocumentation
format
string
id
string
items
JSONSchemaPropsOrArray
maxItems
integer
maxLength
integer
maxProperties
integer
maximum
number
minItems
integer
minLength
integer
minProperties
integer
minimum
number
multipleOf
number
not
JSONSchemaProps
oneOf
JSONSchemaProps array
pattern
string
patternProperties
object
properties
object
required
string array
title
string
type
string
uniqueItems
boolean
+

JSONSchemaPropsOrArray v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1JSONSchemaPropsOrArray
+

JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes.

+ + + + + +
FieldDescription
+

JSONSchemaPropsOrBool v1beta1 apiextensions.k8s.io

+ + + + + +
GroupVersionKind
apiextensions.k8s.iov1beta1JSONSchemaPropsOrBool
+

JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property.

+ + + + + +
FieldDescription
+

JobCondition v1 batch

+ + + + + +
GroupVersionKind
batchv1JobCondition
+

JobCondition describes current state of a job.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
lastProbeTime
Time
Last time the condition was checked.
lastTransitionTime
Time
Last time the condition transit from one status to another.
message
string
Human readable message indicating details about last transition.
reason
string
(brief) reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of job condition, Complete or Failed.
+

JobTemplateSpec v1beta1 batch

+ + + + + +
GroupVersionKind
batchv1beta1JobTemplateSpec
+

JobTemplateSpec describes the data a Job should have when created from a template

+
Other API versions of this object exist: +v2alpha1 +
+
Appears In: + +
+ + + + + + +
FieldDescription
metadata
ObjectMeta
Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
JobSpec
Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

KeyToPath v1 core

+ + + + + +
GroupVersionKind
corev1KeyToPath
+

Maps a string key to a path within a volume.

+ + + + + + + + +
FieldDescription
key
string
The key to project.
mode
integer
Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
path
string
The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.
+

LabelSelector v1 meta

+ + + + + +
GroupVersionKind
metav1LabelSelector
+

A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.

+ + + + + + + +
FieldDescription
matchExpressions
LabelSelectorRequirement array
matchExpressions is a list of label selector requirements. The requirements are ANDed.
matchLabels
object
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
+

LabelSelectorRequirement v1 meta

+ + + + + +
GroupVersionKind
metav1LabelSelectorRequirement
+

A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

+
Appears In: + +
+ + + + + + + +
FieldDescription
key
string
patch strategy: merge
patch merge key: key
key is the label key that the selector applies to.
operator
string
operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
values
string array
values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
+

Lease v1beta1 coordination.k8s.io

+ + + + + +
GroupVersionKind
coordination.k8s.iov1beta1Lease
+

Lease defines a lease concept.

+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
LeaseSpec
Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

Lifecycle v1 core

+ + + + + +
GroupVersionKind
corev1Lifecycle
+

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.

+
Appears In: + +
+ + + + + + +
FieldDescription
postStart
Handler
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
preStop
Handler
PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+

LimitRangeItem v1 core

+ + + + + +
GroupVersionKind
corev1LimitRangeItem
+

LimitRangeItem defines a min/max usage limit for any resource that matches on kind.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
default
object
Default resource requirement limit value by resource name if resource limit is omitted.
defaultRequest
object
DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.
max
object
Max usage constraints on this kind by resource name.
maxLimitRequestRatio
object
MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.
min
object
Min usage constraints on this kind by resource name.
type
string
Type of resource that this limit applies to.
+

ListMeta v1 meta

+ + + + + +
GroupVersionKind
metav1ListMeta
+

ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.

+
Appears In: + +
+ + + + + + + +
FieldDescription
continue
string
continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.
resourceVersion
string
String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
selfLink
string
selfLink is a URL representing this object. Populated by the system. Read-only.
+

LoadBalancerIngress v1 core

+ + + + + +
GroupVersionKind
corev1LoadBalancerIngress
+

LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.

+
Appears In: + +
+ + + + + + +
FieldDescription
hostname
string
Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)
ip
string
IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)
+

LoadBalancerStatus v1 core

+ + + + + +
GroupVersionKind
corev1LoadBalancerStatus
+

LoadBalancerStatus represents the status of a load-balancer.

+ + + + + + +
FieldDescription
ingress
LoadBalancerIngress array
Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.
+

LocalObjectReference v1 core

+ + + + + +
GroupVersionKind
corev1LocalObjectReference
+

LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.

+ + + + + + +
FieldDescription
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+

LocalVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1LocalVolumeSource
+

Local represents directly-attached storage with node affinity (Beta feature)

+
Appears In: + +
+ + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified.
path
string
The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).
+

MetricIdentifier v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2MetricIdentifier
+

MetricIdentifier defines the name and optionally selector for a metric

+ + + + + + + +
FieldDescription
name
string
name is the name of the given metric
selector
LabelSelector
selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.
+

MetricSpec v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2MetricSpec
+

MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + + + + +
FieldDescription
external
ExternalMetricSource
external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).
object
ObjectMetricSource
object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).
pods
PodsMetricSource
pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.
resource
ResourceMetricSource
resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.
type
string
type is the type of metric source. It should be one of "Object", "Pods" or "Resource", each mapping to a matching field in the object.
+

MetricStatus v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2MetricStatus
+

MetricStatus describes the last-read state of a single metric.

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + + + + +
FieldDescription
external
ExternalMetricStatus
external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).
object
ObjectMetricStatus
object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).
pods
PodsMetricStatus
pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.
resource
ResourceMetricStatus
resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.
type
string
type is the type of metric source. It will be one of "Object", "Pods" or "Resource", each corresponds to a matching field in the object.
+

MetricTarget v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2MetricTarget
+

MetricTarget defines the target value, average value, or average utilization of a specific metric

+ + + + + + + + + +
FieldDescription
averageUtilization
integer
averageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type
averageValue
Quantity
averageValue is the target value of the average of the metric across all relevant pods (as a quantity)
type
string
type represents whether the metric type is Utilization, Value, or AverageValue
value
Quantity
value is the target value of the metric (as a quantity).
+

MetricValueStatus v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2MetricValueStatus
+

MetricValueStatus holds the current value for a metric

+ + + + + + + + +
FieldDescription
averageUtilization
integer
currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.
averageValue
Quantity
averageValue is the current value of the average of the metric across all relevant pods (as a quantity)
value
Quantity
value is the current value of the metric (as a quantity).
+

MicroTime v1 meta

+ + + + + +
GroupVersionKind
metav1MicroTime
+

MicroTime is version of Time with microsecond level precision.

+ + + + + +
FieldDescription
+

NFSVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1NFSVolumeSource
+

Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.

+ + + + + + + + +
FieldDescription
path
string
Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
readOnly
boolean
ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
server
string
Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+

NetworkPolicyEgressRule v1 networking.k8s.io

+ + + + + +
GroupVersionKind
networking.k8s.iov1NetworkPolicyEgressRule
+

NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
ports
NetworkPolicyPort array
List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.
to
NetworkPolicyPeer array
List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.
+

NetworkPolicyIngressRule v1 networking.k8s.io

+ + + + + +
GroupVersionKind
networking.k8s.iov1NetworkPolicyIngressRule
+

NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
from
NetworkPolicyPeer array
List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.
ports
NetworkPolicyPort array
List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.
+

NetworkPolicyPeer v1 networking.k8s.io

+ + + + + +
GroupVersionKind
networking.k8s.iov1NetworkPolicyPeer
+

NetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowed

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + +
FieldDescription
ipBlock
IPBlock
IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.
namespaceSelector
LabelSelector
Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces. If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.
podSelector
LabelSelector
This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods. If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.
+

NetworkPolicyPort v1 networking.k8s.io

+ + + + + +
GroupVersionKind
networking.k8s.iov1NetworkPolicyPort
+

NetworkPolicyPort describes a port to allow traffic on

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
portThe port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.
protocol
string
The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.
+

NodeAddress v1 core

+ + + + + +
GroupVersionKind
corev1NodeAddress
+

NodeAddress contains information for the node's address.

+
Appears In: + +
+ + + + + + +
FieldDescription
address
string
The node address.
type
string
Node address type, one of Hostname, ExternalIP or InternalIP.
+

NodeAffinity v1 core

+ + + + + +
GroupVersionKind
corev1NodeAffinity
+

Node affinity is a group of node affinity scheduling rules.

+
Appears In: + +
+ + + + + + +
FieldDescription
preferredDuringSchedulingIgnoredDuringExecution
PreferredSchedulingTerm array
The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.
requiredDuringSchedulingIgnoredDuringExecution
NodeSelector
If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.
+

NodeCondition v1 core

+ + + + + +
GroupVersionKind
corev1NodeCondition
+

NodeCondition contains condition information for a node.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
lastHeartbeatTime
Time
Last time we got an update on a given condition.
lastTransitionTime
Time
Last time the condition transit from one status to another.
message
string
Human readable message indicating details about last transition.
reason
string
(brief) reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of node condition.
+

NodeConfigSource v1 core

+ + + + + +
GroupVersionKind
corev1NodeConfigSource
+

NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.

+ + + + + + +
FieldDescription
configMap
ConfigMapNodeConfigSource
ConfigMap is a reference to a Node's ConfigMap
+

NodeConfigStatus v1 core

+ + + + + +
GroupVersionKind
corev1NodeConfigStatus
+

NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
active
NodeConfigSource
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.
assigned
NodeConfigSource
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.
error
string
Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.
lastKnownGood
NodeConfigSource
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.
+

NodeDaemonEndpoints v1 core

+ + + + + +
GroupVersionKind
corev1NodeDaemonEndpoints
+

NodeDaemonEndpoints lists ports opened by daemons running on the Node.

+
Appears In: + +
+ + + + + +
FieldDescription
kubeletEndpoint
DaemonEndpoint
Endpoint on which Kubelet is listening.
+

NodeSelector v1 core

+ + + + + +
GroupVersionKind
corev1NodeSelector
+

A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.

+ + + + + + +
FieldDescription
nodeSelectorTerms
NodeSelectorTerm array
Required. A list of node selector terms. The terms are ORed.
+

NodeSelectorRequirement v1 core

+ + + + + +
GroupVersionKind
corev1NodeSelectorRequirement
+

A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

+
Appears In: + +
+ + + + + + + +
FieldDescription
key
string
The label key that the selector applies to.
operator
string
Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
values
string array
An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.
+

NodeSelectorTerm v1 core

+ + + + + +
GroupVersionKind
corev1NodeSelectorTerm
+

A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.

+ + + + + + + +
FieldDescription
matchExpressions
NodeSelectorRequirement array
A list of node selector requirements by node's labels.
matchFields
NodeSelectorRequirement array
A list of node selector requirements by node's fields.
+

NodeSystemInfo v1 core

+ + + + + +
GroupVersionKind
corev1NodeSystemInfo
+

NodeSystemInfo is a set of ids/uuids to uniquely identify the node.

+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
architecture
string
The Architecture reported by the node
bootID
string
Boot ID reported by the node.
containerRuntimeVersion
string
ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).
kernelVersion
string
Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).
kubeProxyVersion
string
KubeProxy Version reported by the node.
kubeletVersion
string
Kubelet Version reported by the node.
machineID
string
MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
operatingSystem
string
The Operating System reported by the node
osImage
string
OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).
systemUUID
string
SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html
+

NonResourceAttributes v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1NonResourceAttributes
+

NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
path
string
Path is the URL path of the request
verb
string
Verb is the standard HTTP verb
+

NonResourceRule v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1NonResourceRule
+

NonResourceRule holds information that describes a rule for the non-resource

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
nonResourceURLs
string array
NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. "*" means all.
verbs
string array
Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. "*" means all.
+

ObjectFieldSelector v1 core

+ + + + + +
GroupVersionKind
corev1ObjectFieldSelector
+

ObjectFieldSelector selects an APIVersioned field of an object.

+ + + + + + + +
FieldDescription
apiVersion
string
Version of the schema the FieldPath is written in terms of, defaults to "v1".
fieldPath
string
Path of the field to select in the specified API version.
+

ObjectMeta v1 meta

+ + + + + +
GroupVersionKind
metav1ObjectMeta
+

ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.

+
Appears In: + +
+ + + + + + + + + + + + + + + + + + + + +
FieldDescription
annotations
object
Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations
clusterName
string
The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.
creationTimestamp
Time
CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
deletionGracePeriodSeconds
integer
Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.
deletionTimestamp
Time
DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested. Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
finalizers
string array
patch strategy: merge
Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.
generateName
string
GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency
generation
integer
A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.
initializers
Initializers
An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.
labels
object
Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels
name
string
Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names
namespace
string
Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces
ownerReferences
OwnerReference array
patch strategy: merge
patch merge key: uid
List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.
resourceVersion
string
An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources. Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
selfLink
string
SelfLink is a URL representing this object. Populated by the system. Read-only.
uid
string
UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations. Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids
+

ObjectMetricSource v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2ObjectMetricSource
+

ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + + +
FieldDescription
describedObject
CrossVersionObjectReference
metric
MetricIdentifier
metric identifies the target metric by name and selector
target
MetricTarget
target specifies the target value for the given metric
+

ObjectMetricStatus v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2ObjectMetricStatus
+

ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + + +
FieldDescription
current
MetricValueStatus
current contains the current value for the given metric
describedObject
CrossVersionObjectReference
metric
MetricIdentifier
metric identifies the target metric by name and selector
+

ObjectReference v1 core

+ + + + + +
GroupVersionKind
corev1ObjectReference
+

ObjectReference contains enough information to let you inspect or modify the referred object.

+ + + + + + + + + + + + +
FieldDescription
apiVersion
string
API version of the referent.
fieldPath
string
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
kind
string
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
namespace
string
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
resourceVersion
string
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
uid
string
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+

OwnerReference v1 meta

+ + + + + +
GroupVersionKind
metav1OwnerReference
+

OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
API version of the referent.
blockOwnerDeletion
boolean
If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.
controller
boolean
If true, this reference points to the managing controller.
kind
string
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
name
string
Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names
uid
string
UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids
+

Patch v1 meta

+ + + + + +
GroupVersionKind
metav1Patch
+

Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.

+ + + + +
FieldDescription
+

PersistentVolumeClaimCondition v1 core

+ + + + + +
GroupVersionKind
corev1PersistentVolumeClaimCondition
+

PersistentVolumeClaimCondition contails details about state of pvc

+ + + + + + + + + + + +
FieldDescription
lastProbeTime
Time
Last time we probed the condition.
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
Human-readable message indicating details about last transition.
reason
string
Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized.
status
string
type
string
+

PersistentVolumeClaimVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1PersistentVolumeClaimVolumeSource
+

PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).

+
Appears In: + +
+ + + + + + +
FieldDescription
claimName
string
ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
readOnly
boolean
Will force the ReadOnly setting in VolumeMounts. Default false.
+

PhotonPersistentDiskVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1PhotonPersistentDiskVolumeSource
+

Represents a Photon Controller persistent disk resource.

+ + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
pdID
string
ID that identifies Photon Controller persistent disk
+

PodAffinity v1 core

+ + + + + +
GroupVersionKind
corev1PodAffinity
+

Pod affinity is a group of inter pod affinity scheduling rules.

+
Appears In: + +
+ + + + + + +
FieldDescription
preferredDuringSchedulingIgnoredDuringExecution
WeightedPodAffinityTerm array
The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.
requiredDuringSchedulingIgnoredDuringExecution
PodAffinityTerm array
If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.
+

PodAffinityTerm v1 core

+ + + + + +
GroupVersionKind
corev1PodAffinityTerm
+

Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running

+ + + + + + + + +
FieldDescription
labelSelector
LabelSelector
A label query over a set of resources, in this case pods.
namespaces
string array
namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace"
topologyKey
string
This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.
+

PodAntiAffinity v1 core

+ + + + + +
GroupVersionKind
corev1PodAntiAffinity
+

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

+
Appears In: + +
+ + + + + + +
FieldDescription
preferredDuringSchedulingIgnoredDuringExecution
WeightedPodAffinityTerm array
The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.
requiredDuringSchedulingIgnoredDuringExecution
PodAffinityTerm array
If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.
+

PodCondition v1 core

+ + + + + +
GroupVersionKind
corev1PodCondition
+

PodCondition contains details for the current condition of this pod.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
lastProbeTime
Time
Last time we probed the condition.
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
Human-readable message indicating details about last transition.
reason
string
Unique, one-word, CamelCase reason for the condition's last transition.
status
string
Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
type
string
Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
+

PodDNSConfig v1 core

+ + + + + +
GroupVersionKind
corev1PodDNSConfig
+

PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

+
Appears In: + +
+ + + + + + + +
FieldDescription
nameservers
string array
A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.
options
PodDNSConfigOption array
A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.
searches
string array
A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.
+

PodDNSConfigOption v1 core

+ + + + + +
GroupVersionKind
corev1PodDNSConfigOption
+

PodDNSConfigOption defines DNS resolver options of a pod.

+
Appears In: + +
+ + + + + + +
FieldDescription
name
string
Required.
value
string
+

PodReadinessGate v1 core

+ + + + + +
GroupVersionKind
corev1PodReadinessGate
+

PodReadinessGate contains the reference to a pod condition

+
Appears In: + +
+ + + + + +
FieldDescription
conditionType
string
ConditionType refers to a condition in the pod's condition list with matching type.
+

PodSecurityContext v1 core

+ + + + + +
GroupVersionKind
corev1PodSecurityContext
+

PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
fsGroup
integer
A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- If unset, the Kubelet will not modify the ownership and permissions of any volume.
runAsGroup
integer
The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.
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 SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
runAsUser
integer
The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.
seLinuxOptions
SELinuxOptions
The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.
supplementalGroups
integer array
A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.
sysctls
Sysctl array
Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.
+

PodsMetricSource v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2PodsMetricSource
+

PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + +
FieldDescription
metric
MetricIdentifier
metric identifies the target metric by name and selector
target
MetricTarget
target specifies the target value for the given metric
+

PodsMetricStatus v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2PodsMetricStatus
+

PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + +
FieldDescription
current
MetricValueStatus
current contains the current value for the given metric
metric
MetricIdentifier
metric identifies the target metric by name and selector
+

PolicyRule v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1PolicyRule
+

PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.

+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.
nonResourceURLs
string array
NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.
resourceNames
string array
ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.
resources
string array
Resources is a list of resources this rule applies to. ResourceAll represents all resources.
verbs
string array
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.
+

PortworxVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1PortworxVolumeSource
+

PortworxVolumeSource represents a Portworx volume resource.

+ + + + + + + + +
FieldDescription
fsType
string
FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
volumeID
string
VolumeID uniquely identifies a Portworx volume
+

Preconditions v1 meta

+ + + + + +
GroupVersionKind
metav1Preconditions
+

Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.

+
Appears In: + +
+ + + + + +
FieldDescription
uid
string
Specifies the target UID.
+

PreferredSchedulingTerm v1 core

+ + + + + +
GroupVersionKind
corev1PreferredSchedulingTerm
+

An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).

+
Appears In: + +
+ + + + + + +
FieldDescription
preference
NodeSelectorTerm
A node selector term, associated with the corresponding weight.
weight
integer
Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
+

Probe v1 core

+ + + + + +
GroupVersionKind
corev1Probe
+

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
exec
ExecAction
One and only one of the following should be specified. Exec specifies the action to take.
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.
httpGet
HTTPGetAction
HTTPGet specifies the http request to perform.
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.
tcpSocket
TCPSocketAction
TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+

ProjectedVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1ProjectedVolumeSource
+

Represents a projected volume source

+
Appears In: + +
+ + + + + + +
FieldDescription
defaultMode
integer
Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
sources
VolumeProjection array
list of volume projections
+

Quantity resource core

+ + + + + +
GroupVersionKind
coreresourceQuantity
+

Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors. + +The serialization format is: + +<quantity> ::= <signedNumber><suffix> + (Note that <suffix> may be empty, from the "" case in <decimalSI>.) +<digit> ::= 0 | 1 | ... | 9 <digits> ::= <digit> | <digit><digits> <number> ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign> ::= "+" | "-" <signedNumber> ::= <number> | <sign><number> <suffix> ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI> ::= Ki | Mi | Gi | Ti | Pi | Ei + (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html) +<decimalSI> ::= m | "" | k | M | G | T | P | E + (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.) +<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber> + +No matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities. + +When a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized. + +Before serializing, Quantity will be put in "canonical form". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that: + a. No precision is lost + b. No fractional digits will be emitted + c. The exponent (or suffix) is as large as possible. +The sign will be omitted unless the number is negative. + +Examples: + 1.5 will be serialized as "1500m" + 1.5Gi will be serialized as "1536Mi" + +Note that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise. + +Non-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.) + +This format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.

+ + + + + +
FieldDescription
+

QuobyteVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1QuobyteVolumeSource
+

Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.

+ + + + + + + + + + +
FieldDescription
group
string
Group to map volume access to Default is no group
readOnly
boolean
ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.
registry
string
Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes
user
string
User to map volume access to Defaults to serivceaccount user
volume
string
Volume is a string that references an already created Quobyte volume by name.
+

RBDPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1RBDPersistentVolumeSource
+

Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
fsType
string
Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
image
string
The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
keyring
string
Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
monitors
string array
A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
pool
string
The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
readOnly
boolean
ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
secretRef
SecretReference
SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
user
string
The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
+

RBDVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1RBDVolumeSource
+

Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
fsType
string
Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
image
string
The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
keyring
string
Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
monitors
string array
A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
pool
string
The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
readOnly
boolean
ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
secretRef
LocalObjectReference
SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
user
string
The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it
+

ReplicaSetCondition v1 apps

+ + + + + +
GroupVersionKind
appsv1ReplicaSetCondition
+

ReplicaSetCondition describes the state of a replica set at a certain point.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
lastTransitionTime
Time
The last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of replica set condition.
+

ReplicationControllerCondition v1 core

+ + + + + +
GroupVersionKind
corev1ReplicationControllerCondition
+

ReplicationControllerCondition describes the state of a replication controller at a certain point.

+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
The last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of replication controller condition.
+

ResourceAttributes v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1ResourceAttributes
+

ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + + + + +
FieldDescription
group
string
Group is the API Group of the Resource. "*" means all.
name
string
Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
namespace
string
Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
resource
string
Resource is one of the existing resource types. "*" means all.
subresource
string
Subresource is one of the existing resource types. "" means none.
verb
string
Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all.
version
string
Version is the API Version of the Resource. "*" means all.
+

ResourceFieldSelector v1 core

+ + + + + +
GroupVersionKind
corev1ResourceFieldSelector
+

ResourceFieldSelector represents container resources (cpu, memory) and their output format

+ + + + + + + + +
FieldDescription
containerName
string
Container name: required for volumes, optional for env vars
divisor
Quantity
Specifies the output format of the exposed resources, defaults to "1"
resource
string
Required: resource to select
+

ResourceMetricSource v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2ResourceMetricSource
+

ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. Only one "target" type should be set.

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + +
FieldDescription
name
string
name is the name of the resource in question.
target
MetricTarget
target specifies the target value for the given metric
+

ResourceMetricStatus v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2ResourceMetricStatus
+

ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.

+
Other API versions of this object exist: +v2beta1 +
+ + + + + + + +
FieldDescription
current
MetricValueStatus
current contains the current value for the given metric
name
string
Name is the name of the resource in question.
+

ResourceRequirements v1 core

+ + + + + +
GroupVersionKind
corev1ResourceRequirements
+

ResourceRequirements describes the compute resource requirements.

+ + + + + + + +
FieldDescription
limits
object
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
requests
object
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-compute-resources-container/
+

ResourceRule v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1ResourceRule
+

ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "*" means all.
resourceNames
string array
ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. "*" means all.
resources
string array
Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups.
verbs
string array
Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. "*" means all.
+

RoleRef v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1RoleRef
+

RoleRef contains information that points to the role being used

+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+ + + + + + + + +
FieldDescription
apiGroup
string
APIGroup is the group for the resource being referenced
kind
string
Kind is the type of resource being referenced
name
string
Name is the name of resource being referenced
+

RollbackConfig v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1RollbackConfig
+

DEPRECATED.

+ + + + + + +
FieldDescription
revision
integer
The revision to rollback to. If set to 0, rollback to the last revision.
+

RollingUpdateStatefulSetStrategy v1 apps

+ + + + + +
GroupVersionKind
appsv1RollingUpdateStatefulSetStrategy
+

RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+ + + + + + +
FieldDescription
partition
integer
Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.
+

Rule v1alpha1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1alpha1Rule
+

Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.

+ + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the API groups the resources belong to. '\*' is all groups. If '\*' is present, the length of the slice must be one. Required.
apiVersions
string array
APIVersions is the API versions the resources belong to. '\*' is all versions. If '\*' is present, the length of the slice must be one. Required.
resources
string array
Resources is a list of resources this rule applies to. For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '\*' means all resources, but not subresources. 'pods/\*' means all subresources of pods. '\*/scale' means all scale subresources. '\*/\*' means all resources and their subresources. If wildcard is present, the validation rule will ensure resources do not overlap with each other. Depending on the enclosing object, subresources might not be allowed. Required.
+

RuleWithOperations v1beta1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1beta1RuleWithOperations
+

RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.

+ + + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the API groups the resources belong to. '\*' is all groups. If '\*' is present, the length of the slice must be one. Required.
apiVersions
string array
APIVersions is the API versions the resources belong to. '\*' is all versions. If '\*' is present, the length of the slice must be one. Required.
operations
string array
Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '\*' is present, the length of the slice must be one. Required.
resources
string array
Resources is a list of resources this rule applies to. For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '\*' means all resources, but not subresources. 'pods/\*' means all subresources of pods. '\*/scale' means all scale subresources. '\*/\*' means all resources and their subresources. If wildcard is present, the validation rule will ensure resources do not overlap with each other. Depending on the enclosing object, subresources might not be allowed. Required.
+

RunAsUserStrategyOptions v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1RunAsUserStrategyOptions
+

RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.

+ + + + + + + +
FieldDescription
ranges
IDRange array
ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.
rule
string
rule is the strategy that will dictate the allowable RunAsUser values that may be set.
+

SELinuxOptions v1 core

+ + + + + +
GroupVersionKind
corev1SELinuxOptions
+

SELinuxOptions are the labels to be applied to the container

+ + + + + + + + + +
FieldDescription
level
string
Level is SELinux level label that applies to the container.
role
string
Role is a SELinux role label that applies to the container.
type
string
Type is a SELinux type label that applies to the container.
user
string
User is a SELinux user label that applies to the container.
+

SELinuxStrategyOptions v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1SELinuxStrategyOptions
+

SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.

+ + + + + + + +
FieldDescription
rule
string
rule is the strategy that will dictate the allowable labels that may be set.
seLinuxOptions
SELinuxOptions
seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+

Scale v1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv1Scale
+

Scale represents a scaling request for a resource.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
spec
ScaleSpec
defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
ScaleStatus
current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.
+

ScaleIOPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1ScaleIOPersistentVolumeSource
+

ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume

+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs"
gateway
string
The host address of the ScaleIO API Gateway.
protectionDomain
string
The name of the ScaleIO Protection Domain for the configured storage.
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretRef
SecretReference
SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.
sslEnabled
boolean
Flag to enable/disable SSL communication with Gateway, default false
storageMode
string
Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.
storagePool
string
The ScaleIO Storage Pool associated with the protection domain.
system
string
The name of the storage system as configured in ScaleIO.
volumeName
string
The name of a volume already created in the ScaleIO system that is associated with this volume source.
+

ScaleIOVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1ScaleIOVolumeSource
+

ScaleIOVolumeSource represents a persistent ScaleIO volume

+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs".
gateway
string
The host address of the ScaleIO API Gateway.
protectionDomain
string
The name of the ScaleIO Protection Domain for the configured storage.
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretRef
LocalObjectReference
SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.
sslEnabled
boolean
Flag to enable/disable SSL communication with Gateway, default false
storageMode
string
Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.
storagePool
string
The ScaleIO Storage Pool associated with the protection domain.
system
string
The name of the storage system as configured in ScaleIO.
volumeName
string
The name of a volume already created in the ScaleIO system that is associated with this volume source.
+

ScopeSelector v1 core

+ + + + + +
GroupVersionKind
corev1ScopeSelector
+

A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.

+
Appears In: + +
+ + + + + +
FieldDescription
matchExpressions
ScopedResourceSelectorRequirement array
A list of scope selector requirements by scope of the resources.
+

ScopedResourceSelectorRequirement v1 core

+ + + + + +
GroupVersionKind
corev1ScopedResourceSelectorRequirement
+

A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.

+
Appears In: + +
+ + + + + + + +
FieldDescription
operator
string
Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.
scopeName
string
The name of the scope that the selector applies to.
values
string array
An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
+

SecretEnvSource v1 core

+ + + + + +
GroupVersionKind
corev1SecretEnvSource
+

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.

+
Appears In: + +
+ + + + + + +
FieldDescription
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the Secret must be defined
+

SecretKeySelector v1 core

+ + + + + +
GroupVersionKind
corev1SecretKeySelector
+

SecretKeySelector selects a key of a Secret.

+
Appears In: + +
+ + + + + + + +
FieldDescription
key
string
The key of the secret to select from. Must be a valid secret key.
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the Secret or it's key must be defined
+

SecretProjection v1 core

+ + + + + +
GroupVersionKind
corev1SecretProjection
+

Adapts a secret into a projected volume. + +The contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.

+
Appears In: + +
+ + + + + + + +
FieldDescription
items
KeyToPath array
If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
name
string
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
optional
boolean
Specify whether the Secret or its key must be defined
+

SecretReference v1 core

+ + + + + +
GroupVersionKind
corev1SecretReference
+

SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace

+ + + + + + + +
FieldDescription
name
string
Name is unique within a namespace to reference a secret resource.
namespace
string
Namespace defines the space within which the secret name must be unique.
+

SecretVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1SecretVolumeSource
+

Adapts a Secret into a volume. + +The contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
defaultMode
integer
Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
items
KeyToPath array
If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
optional
boolean
Specify whether the Secret or it's keys must be defined
secretName
string
Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+

SecurityContext v1 core

+ + + + + +
GroupVersionKind
corev1SecurityContext
+

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.

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
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
capabilities
Capabilities
The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.
privileged
boolean
Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.
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.
readOnlyRootFilesystem
boolean
Whether this container has a read-only root filesystem. Default is false.
runAsGroup
integer
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.
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.
runAsUser
integer
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.
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.
+

ServerAddressByClientCIDR v1 meta

+ + + + + +
GroupVersionKind
metav1ServerAddressByClientCIDR
+

ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.

+ + + + + + + +
FieldDescription
clientCIDR
string
The CIDR with which clients can match their IP to figure out the server address that they should use.
serverAddress
string
Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.
+

ServiceAccountTokenProjection v1 core

+ + + + + +
GroupVersionKind
corev1ServiceAccountTokenProjection
+

ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).

+
Appears In: + +
+ + + + + + + +
FieldDescription
audience
string
Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.
expirationSeconds
integer
ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.
path
string
Path is the path relative to the mount point of the file to project the token into.
+

ServicePort v1 core

+ + + + + +
GroupVersionKind
corev1ServicePort
+

ServicePort contains information on service's port.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
name
string
The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.
nodePort
integer
The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
port
integer
The port that will be exposed by this service.
protocol
string
The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". Default is TCP.
targetPortNumber or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
+

ServiceReference v1 apiregistration.k8s.io

+ + + + + +
GroupVersionKind
apiregistration.k8s.iov1ServiceReference
+

ServiceReference holds a reference to Service.legacy.k8s.io

+
Other API versions of this object exist: +v1beta1 +v1beta1 +
+ + + + + + + +
FieldDescription
name
string
Name is the name of the service
namespace
string
Namespace is the namespace of the service
+

SessionAffinityConfig v1 core

+ + + + + +
GroupVersionKind
corev1SessionAffinityConfig
+

SessionAffinityConfig represents the configurations of session affinity.

+
Appears In: + +
+ + + + + +
FieldDescription
clientIP
ClientIPConfig
clientIP contains the configurations of Client IP based session affinity.
+

StatefulSetCondition v1 apps

+ + + + + +
GroupVersionKind
appsv1StatefulSetCondition
+

StatefulSetCondition describes the state of a statefulset at a certain point.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of statefulset condition.
+

StatefulSetUpdateStrategy v1 apps

+ + + + + +
GroupVersionKind
appsv1StatefulSetUpdateStrategy
+

StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.

+
Other API versions of this object exist: +v1beta2 +v1beta1 +
+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateStatefulSetStrategy
RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.
type
string
Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.
+

Status v1 meta

+ + + + + +
GroupVersionKind
metav1Status
+

Status is a return value for calls that don't return other objects.

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
code
integer
Suggested HTTP return code for this status, 0 if not set.
details
StatusDetails
Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
message
string
A human-readable description of the status of this operation.
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
reason
string
A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.
status
string
Status of the operation. One of: "Success" or "Failure". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

StatusCause v1 meta

+ + + + + +
GroupVersionKind
metav1StatusCause
+

StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.

+
Appears In: + +
+ + + + + + + +
FieldDescription
field
string
The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional. Examples: "name" - the field "name" on the current resource "items[0].name" - the field "name" on the first array entry in "items"
message
string
A human-readable description of the cause of the error. This field may be presented as-is to a reader.
reason
string
A machine-readable description of the cause of the error. If this value is empty there is no information available.
+

StatusDetails v1 meta

+ + + + + +
GroupVersionKind
metav1StatusDetails
+

StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
causes
StatusCause array
The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.
group
string
The group attribute of the resource associated with the status StatusReason.
kind
string
The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
name
string
The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).
retryAfterSeconds
integer
If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.
uid
string
UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids
+

StorageOSPersistentVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1StorageOSPersistentVolumeSource
+

Represents a StorageOS persistent volume resource.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretRef
ObjectReference
SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.
volumeName
string
VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.
volumeNamespace
string
VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.
+

StorageOSVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1StorageOSVolumeSource
+

Represents a StorageOS persistent volume resource.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
readOnly
boolean
Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
secretRef
LocalObjectReference
SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.
volumeName
string
VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.
volumeNamespace
string
VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.
+

Subject v1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1Subject
+

Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.

+
Other API versions of this object exist: +v1beta1 +v1alpha1 +
+ + + + + + + + + +
FieldDescription
apiGroup
string
APIGroup holds the API group of the referenced subject. Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User and Group subjects.
kind
string
Kind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount". If the Authorizer does not recognized the kind value, the Authorizer should report an error.
name
string
Name of the object being referenced.
namespace
string
Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.
+

SubjectRulesReviewStatus v1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1SubjectRulesReviewStatus
+

SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
evaluationError
string
EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.
incomplete
boolean
Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
nonResourceRules
NonResourceRule array
NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
resourceRules
ResourceRule array
ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
+

SupplementalGroupsStrategyOptions v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1SupplementalGroupsStrategyOptions
+

SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.

+ + + + + + + +
FieldDescription
ranges
IDRange array
ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.
rule
string
rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.
+

Sysctl v1 core

+ + + + + +
GroupVersionKind
corev1Sysctl
+

Sysctl defines a kernel parameter to be set

+
Appears In: + +
+ + + + + + +
FieldDescription
name
string
Name of a property to set
value
string
Value of a property to set
+

TCPSocketAction v1 core

+ + + + + +
GroupVersionKind
corev1TCPSocketAction
+

TCPSocketAction describes an action based on opening a socket

+
Appears In: + +
+ + + + + + +
FieldDescription
host
string
Optional: Host name to connect to, defaults to the pod IP.
portNumber or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
+

Taint v1 core

+ + + + + +
GroupVersionKind
corev1Taint
+

The node this Taint is attached to has the "effect" on any pod that does not tolerate the Taint.

+
Appears In: + +
+ + + + + + + + +
FieldDescription
effect
string
Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
key
string
Required. The taint key to be applied to a node.
timeAdded
Time
TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.
value
string
Required. The taint value corresponding to the taint key.
+

Time v1 meta

+ + + + + +
GroupVersionKind
metav1Time
+

Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.

+ + + + + +
FieldDescription
+

Toleration v1 core

+ + + + + +
GroupVersionKind
corev1Toleration
+

The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
effect
string
Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
key
string
Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
operator
string
Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
tolerationSeconds
integer
TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
value
string
Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
+

TopologySelectorLabelRequirement v1 core

+ + + + + +
GroupVersionKind
corev1TopologySelectorLabelRequirement
+

A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.

+
Appears In: + +
+ + + + + + +
FieldDescription
key
string
The label key that the selector applies to.
values
string array
An array of string values. One value must match the label to be selected. Each entry in Values is ORed.
+

TopologySelectorTerm v1 core

+ + + + + +
GroupVersionKind
corev1TopologySelectorTerm
+

A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.

+ + + + + + +
FieldDescription
matchLabelExpressions
TopologySelectorLabelRequirement array
A list of topology selector requirements by labels.
+

TypedLocalObjectReference v1 core

+ + + + + +
GroupVersionKind
corev1TypedLocalObjectReference
+

TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.

+ + + + + + + + +
FieldDescription
apiGroup
string
APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.
kind
string
Kind is the type of resource being referenced
name
string
Name is the name of resource being referenced
+

UserInfo v1 authentication.k8s.io

+ + + + + +
GroupVersionKind
authentication.k8s.iov1UserInfo
+

UserInfo holds the information about the user needed to implement the user.Info interface.

+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + +
FieldDescription
extra
object
Any additional information provided by the authenticator.
groups
string array
The names of groups this user is a part of.
uid
string
A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.
username
string
The name that uniquely identifies this user among all active users.
+

VolumeAttachmentSource v1beta1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1beta1VolumeAttachmentSource
+

VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.

+
Other API versions of this object exist: +v1alpha1 +
+ + + + + + +
FieldDescription
persistentVolumeName
string
Name of the persistent volume to attach.
+

VolumeDevice v1 core

+ + + + + +
GroupVersionKind
corev1VolumeDevice
+

volumeDevice describes a mapping of a raw block device within a container.

+
Appears In: + +
+ + + + + + +
FieldDescription
devicePath
string
devicePath is the path inside of the container that the device will be mapped to.
name
string
name must match the name of a persistentVolumeClaim in the pod
+

VolumeError v1beta1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1beta1VolumeError
+

VolumeError captures an error encountered during a volume operation.

+
Other API versions of this object exist: +v1alpha1 +
+ + + + + + + +
FieldDescription
message
string
String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.
time
Time
Time the error was encountered.
+

VolumeMount v1 core

+ + + + + +
GroupVersionKind
corev1VolumeMount
+

VolumeMount describes a mounting of a Volume within a container.

+ + + + + + + + + + +
FieldDescription
mountPath
string
Path within the container at which the volume should be mounted. Must not contain ':'.
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.
name
string
This must match the Name of a Volume.
readOnly
boolean
Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.
subPath
string
Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root).
+

VolumeNodeAffinity v1 core

+ + + + + +
GroupVersionKind
corev1VolumeNodeAffinity
+

VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.

+
Appears In: + +
+ + + + + +
FieldDescription
required
NodeSelector
Required specifies hard node constraints that must be met.
+

VolumeProjection v1 core

+ + + + + +
GroupVersionKind
corev1VolumeProjection
+

Projection that may be projected along with other supported volume types

+
Appears In: + +
+ + + + + + + + +
FieldDescription
configMap
ConfigMapProjection
information about the configMap data to project
downwardAPI
DownwardAPIProjection
information about the downwardAPI data to project
secret
SecretProjection
information about the secret data to project
serviceAccountToken
ServiceAccountTokenProjection
information about the serviceAccountToken data to project
+

VsphereVirtualDiskVolumeSource v1 core

+ + + + + +
GroupVersionKind
corev1VsphereVirtualDiskVolumeSource
+

Represents a vSphere volume resource.

+ + + + + + + + + +
FieldDescription
fsType
string
Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
storagePolicyID
string
Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
storagePolicyName
string
Storage Policy Based Management (SPBM) profile name.
volumePath
string
Path that identifies vSphere volume vmdk
+

WatchEvent v1 meta

+ + + + + +
GroupVersionKind
metav1WatchEvent
+

Event represents a single event to a watched resource.

+ + + + + + +
FieldDescription
objectObject is: * If Type is Added or Modified: the new state of the object. * If Type is Deleted: the state of the object immediately before deletion. * If Type is Error: *Status is recommended; other types may make sense depending on context.
type
string
+

Webhook v1beta1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1beta1Webhook
+

Webhook describes an admission webhook and the resources and operations it applies to.

+ + + + + + + + + + + +
FieldDescription
clientConfig
WebhookClientConfig
ClientConfig defines how to communicate with the hook. Required
failurePolicy
string
FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.
name
string
The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where "imagepolicy" is the name of the webhook, and kubernetes.io is the name of the organization. Required.
namespaceSelector
LabelSelector
NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook. For example, to run the webhook on any objects whose namespace is not associated with "runlevel" of "0" or "1"; you will set the selector as follows: "namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] } If instead you want to only run the webhook on any objects whose namespace is associated with the "environment" of "prod" or "staging"; you will set the selector as follows: "namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] } See https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors. Default to the empty LabelSelector, which matches everything.
rules
RuleWithOperations array
Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.
sideEffects
string
SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.
+

WebhookClientConfig v1beta1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1beta1WebhookClientConfig
+

WebhookClientConfig contains the information to make a TLS connection with the webhook

+ + + + + + + + +
FieldDescription
caBundle
string
`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. Required.
service
ServiceReference
`service` is a reference to the service for this webhook. Either `service` or `url` must be specified. If the webhook is running within the cluster, then you should use `service`. Port 443 will be used if it is open, otherwise it is an error.
url
string
`url` gives the location of the webhook, in standard URL form (`[scheme://]host:port/path`). Exactly one of `url` or `service` must be specified. The `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address. Please note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster. The scheme must be "https"; the URL must begin with "https://". A path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier. Attempting to use a user or basic auth e.g. "user:password@" is not allowed. Fragments ("#...") and query parameters ("?...") are not allowed, either.
+

WeightedPodAffinityTerm v1 core

+ + + + + +
GroupVersionKind
corev1WeightedPodAffinityTerm
+

The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)

+ + + + + + + +
FieldDescription
podAffinityTerm
PodAffinityTerm
Required. A pod affinity term, associated with the corresponding weight.
weight
integer
weight associated with matching the corresponding podAffinityTerm, in the range 1-100.
+

OLD API VERSIONS

+ +

This section contains older versions of resources shown above.

+

APIService v1beta1 apiregistration.k8s.io

+ + + + + +
GroupVersionKind
apiregistration.k8s.iov1beta1APIService
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
APIServiceSpec
Spec contains information for locating and communicating with a server
status
APIServiceStatus
Status contains derived information about an API server
+

APIServiceSpec v1beta1 apiregistration

+ + + + + + + + + + + + +
FieldDescription
caBundle
string
CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.
group
string
Group is the API group name this server hosts
groupPriorityMinimum
integer
GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s
insecureSkipTLSVerify
boolean
InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.
service
ServiceReference
Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.
version
string
Version is the API version this server hosts. For example, "v1"
versionPriority
integer
VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.
+

APIServiceStatus v1beta1 apiregistration

+ + + + + + +
FieldDescription
conditions
APIServiceCondition array
patch strategy: merge
patch merge key: type
Current service state of apiService.
+

APIServiceList v1beta1 apiregistration

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
APIService array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create an APIService

+

HTTP Request

+POST /apis/apiregistration.k8s.io/v1beta1/apiservices +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
APIService
+

Response

+ + + + + + + +
CodeDescription
202
APIService
Accepted
200
APIService
OK
201
APIService
Created
+

Patch

+

partially update the specified APIService

+

HTTP Request

+PATCH /apis/apiregistration.k8s.io/v1beta1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

Replace

+

replace the specified APIService

+

HTTP Request

+PUT /apis/apiregistration.k8s.io/v1beta1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
APIService
+

Response

+ + + + + + +
CodeDescription
201
APIService
Created
200
APIService
OK
+

Delete

+

delete an APIService

+

HTTP Request

+DELETE /apis/apiregistration.k8s.io/v1beta1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of APIService

+

HTTP Request

+DELETE /apis/apiregistration.k8s.io/v1beta1/apiservices +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified APIService

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1beta1/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

List

+

list or watch objects of kind APIService

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1beta1/apiservices +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
APIServiceList
OK
+

Watch

+

watch changes to an object of kind APIService. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of APIService. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1beta1/watch/apiservices +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified APIService

+

HTTP Request

+PATCH /apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

Read Status

+

read status of the specified APIService

+

HTTP Request

+GET /apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
APIService
OK
+

Replace Status

+

replace status of the specified APIService

+

HTTP Request

+PUT /apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status +

Path Parameters

+ + + + + +
ParameterDescription
namename of the APIService
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
APIService
+

Response

+ + + + + + +
CodeDescription
200
APIService
OK
201
APIService
Created
+

APIServiceCondition v1beta1 apiregistration.k8s.io

+ + + + + +
GroupVersionKind
apiregistration.k8s.iov1beta1APIServiceCondition
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
Human-readable message indicating details about last transition.
reason
string
Unique, one-word, CamelCase reason for the condition's last transition.
status
string
Status is the status of the condition. Can be True, False, Unknown.
type
string
Type is the type of the condition.
+

AggregationRule v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1AggregationRule
+
Other API versions of this object exist: +v1 +v1alpha1 +
+
Appears In: + +
+ + + + + +
FieldDescription
clusterRoleSelectors
LabelSelector array
ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added
+

AggregationRule v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1AggregationRule
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + +
FieldDescription
clusterRoleSelectors
LabelSelector array
ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added
+

AllowedFlexVolume v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1AllowedFlexVolume
+ + + + + + +
FieldDescription
driver
string
driver is the name of the Flexvolume driver.
+

AllowedHostPath v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1AllowedHostPath
+ + + + + + + +
FieldDescription
pathPrefix
string
pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path. Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`
readOnly
boolean
when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
+

ClusterRole v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1ClusterRole
+
Other API versions of this object exist: +v1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
aggregationRule
AggregationRule
AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
rules
PolicyRule array
Rules holds all the PolicyRules for this ClusterRole
+

ClusterRoleList v1beta1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ClusterRole array
Items is a list of ClusterRoles
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a ClusterRole

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1beta1/clusterroles +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRole
+

Response

+ + + + + + + +
CodeDescription
200
ClusterRole
OK
201
ClusterRole
Created
202
ClusterRole
Accepted
+

Patch

+

partially update the specified ClusterRole

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ClusterRole
OK
+

Replace

+

replace the specified ClusterRole

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRole
+

Response

+ + + + + + +
CodeDescription
201
ClusterRole
Created
200
ClusterRole
OK
+

Delete

+

delete a ClusterRole

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ClusterRole

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ClusterRole

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ClusterRole
OK
+

List

+

list or watch objects of kind ClusterRole

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleList
OK
+

Watch

+

watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ClusterRole v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1ClusterRole
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
aggregationRule
AggregationRule
AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
rules
PolicyRule array
Rules holds all the PolicyRules for this ClusterRole
+

ClusterRoleList v1alpha1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ClusterRole array
Items is a list of ClusterRoles
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a ClusterRole

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRole
+

Response

+ + + + + + + +
CodeDescription
200
ClusterRole
OK
201
ClusterRole
Created
202
ClusterRole
Accepted
+

Patch

+

partially update the specified ClusterRole

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ClusterRole
OK
+

Replace

+

replace the specified ClusterRole

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRole
+

Response

+ + + + + + +
CodeDescription
200
ClusterRole
OK
201
ClusterRole
Created
+

Delete

+

delete a ClusterRole

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ClusterRole

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ClusterRole

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ClusterRole
OK
+

List

+

list or watch objects of kind ClusterRole

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleList
OK
+

Watch

+

watch changes to an object of kind ClusterRole. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRole
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ClusterRole. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ClusterRoleBinding v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1ClusterRoleBinding
+
Other API versions of this object exist: +v1 +v1alpha1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
roleRef
RoleRef
RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.
subjects
Subject array
Subjects holds references to the objects the role applies to.
+

ClusterRoleBindingList v1beta1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ClusterRoleBinding array
Items is a list of ClusterRoleBindings
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a ClusterRoleBinding

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRoleBinding
+

Response

+ + + + + + + +
CodeDescription
200
ClusterRoleBinding
OK
201
ClusterRoleBinding
Created
202
ClusterRoleBinding
Accepted
+

Patch

+

partially update the specified ClusterRoleBinding

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBinding
OK
+

Replace

+

replace the specified ClusterRoleBinding

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRoleBinding
+

Response

+ + + + + + +
CodeDescription
200
ClusterRoleBinding
OK
201
ClusterRoleBinding
Created
+

Delete

+

delete a ClusterRoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ClusterRoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ClusterRoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBinding
OK
+

List

+

list or watch objects of kind ClusterRoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBindingList
OK
+

Watch

+

watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ClusterRoleBinding v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1ClusterRoleBinding
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
roleRef
RoleRef
RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.
subjects
Subject array
Subjects holds references to the objects the role applies to.
+

ClusterRoleBindingList v1alpha1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ClusterRoleBinding array
Items is a list of ClusterRoleBindings
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a ClusterRoleBinding

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRoleBinding
+

Response

+ + + + + + + +
CodeDescription
200
ClusterRoleBinding
OK
201
ClusterRoleBinding
Created
202
ClusterRoleBinding
Accepted
+

Patch

+

partially update the specified ClusterRoleBinding

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBinding
OK
+

Replace

+

replace the specified ClusterRoleBinding

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ClusterRoleBinding
+

Response

+ + + + + + +
CodeDescription
200
ClusterRoleBinding
OK
201
ClusterRoleBinding
Created
+

Delete

+

delete a ClusterRoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ClusterRoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ClusterRoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBinding
OK
+

List

+

list or watch objects of kind ClusterRoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ClusterRoleBindingList
OK
+

Watch

+

watch changes to an object of kind ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the ClusterRoleBinding
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ClusterRoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ControllerRevision v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2ControllerRevision
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
dataData is the serialized representation of the state.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
revision
integer
Revision indicates the revision of the state represented by Data.
+

ControllerRevisionList v1beta2 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ControllerRevision array
Items is the list of ControllerRevisions
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a ControllerRevision

+

HTTP Request

+POST /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ControllerRevision
+

Response

+ + + + + + + +
CodeDescription
200
ControllerRevision
OK
201
ControllerRevision
Created
202
ControllerRevision
Accepted
+

Patch

+

partially update the specified ControllerRevision

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ControllerRevision
OK
+

Replace

+

replace the specified ControllerRevision

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ControllerRevision
+

Response

+ + + + + + +
CodeDescription
201
ControllerRevision
Created
200
ControllerRevision
OK
+

Delete

+

delete a ControllerRevision

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ControllerRevision

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ControllerRevision

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevision
OK
+

List

+

list or watch objects of kind ControllerRevision

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevisionList
OK
+

List All Namespaces

+

list or watch objects of kind ControllerRevision

+

HTTP Request

+GET /apis/apps/v1beta2/controllerrevisions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevisionList
OK
+

Watch

+

watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/controllerrevisions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ControllerRevision v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1ControllerRevision
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
dataData is the serialized representation of the state.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
revision
integer
Revision indicates the revision of the state represented by Data.
+

ControllerRevisionList v1beta1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ControllerRevision array
Items is the list of ControllerRevisions
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a ControllerRevision

+

HTTP Request

+POST /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ControllerRevision
+

Response

+ + + + + + + +
CodeDescription
200
ControllerRevision
OK
201
ControllerRevision
Created
202
ControllerRevision
Accepted
+

Patch

+

partially update the specified ControllerRevision

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ControllerRevision
OK
+

Replace

+

replace the specified ControllerRevision

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ControllerRevision
+

Response

+ + + + + + +
CodeDescription
201
ControllerRevision
Created
200
ControllerRevision
OK
+

Delete

+

delete a ControllerRevision

+

HTTP Request

+DELETE /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ControllerRevision

+

HTTP Request

+DELETE /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ControllerRevision

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevision
OK
+

List

+

list or watch objects of kind ControllerRevision

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevisionList
OK
+

List All Namespaces

+

list or watch objects of kind ControllerRevision

+

HTTP Request

+GET /apis/apps/v1beta1/controllerrevisions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ControllerRevisionList
OK
+

Watch

+

watch changes to an object of kind ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ControllerRevision
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ControllerRevision. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/controllerrevisions +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

CronJob v2alpha1 batch

+ + + + + +
GroupVersionKind
batchv2alpha1CronJob
+
Other API versions of this object exist: +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
CronJobSpec
Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
CronJobStatus
Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

CronJobSpec v2alpha1 batch

+
Appears In: + +
+ + + + + + + + + + + +
FieldDescription
concurrencyPolicy
string
Specifies how to treat concurrent executions of a Job. Valid values are: - "Allow" (default): allows CronJobs to run concurrently; - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - "Replace": cancels currently running job and replaces it with a new one
failedJobsHistoryLimit
integer
The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.
jobTemplate
JobTemplateSpec
Specifies the job that will be created when executing a CronJob.
schedule
string
The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
startingDeadlineSeconds
integer
Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.
successfulJobsHistoryLimit
integer
The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.
suspend
boolean
This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.
+

CronJobStatus v2alpha1 batch

+
Appears In: + +
+ + + + + + +
FieldDescription
active
ObjectReference array
A list of pointers to currently running jobs.
lastScheduleTime
Time
Information when was the last time the job was successfully scheduled.
+

CronJobList v2alpha1 batch

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
CronJob array
items is the list of CronJobs.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a CronJob

+

HTTP Request

+POST /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CronJob
+

Response

+ + + + + + + +
CodeDescription
200
CronJob
OK
201
CronJob
Created
202
CronJob
Accepted
+

Patch

+

partially update the specified CronJob

+

HTTP Request

+PATCH /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

Replace

+

replace the specified CronJob

+

HTTP Request

+PUT /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CronJob
+

Response

+ + + + + + +
CodeDescription
200
CronJob
OK
201
CronJob
Created
+

Delete

+

delete a CronJob

+

HTTP Request

+DELETE /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of CronJob

+

HTTP Request

+DELETE /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified CronJob

+

HTTP Request

+GET /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

List

+

list or watch objects of kind CronJob

+

HTTP Request

+GET /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
CronJobList
OK
+

List All Namespaces

+

list or watch objects of kind CronJob

+

HTTP Request

+GET /apis/batch/v2alpha1/cronjobs +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
CronJobList
OK
+

Watch

+

watch changes to an object of kind CronJob. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of CronJob. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/batch/v2alpha1/watch/cronjobs +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified CronJob

+

HTTP Request

+PATCH /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

Read Status

+

read status of the specified CronJob

+

HTTP Request

+GET /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
CronJob
OK
+

Replace Status

+

replace status of the specified CronJob

+

HTTP Request

+PUT /apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the CronJob
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
CronJob
+

Response

+ + + + + + +
CodeDescription
201
CronJob
Created
200
CronJob
OK
+

CrossVersionObjectReference v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2CrossVersionObjectReference
+
Other API versions of this object exist: +v1 +v2beta1 +
+ + + + + + + + +
FieldDescription
apiVersion
string
API version of the referent
kind
string
Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"
name
string
Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names
+

CrossVersionObjectReference v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1CrossVersionObjectReference
+
Other API versions of this object exist: +v1 +v2beta2 +
+ + + + + + + + +
FieldDescription
apiVersion
string
API version of the referent
kind
string
Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds"
name
string
Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names
+

DaemonSet v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2DaemonSet
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
DaemonSetSpec
The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
DaemonSetStatus
The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

DaemonSetSpec v1beta2 apps

+
Appears In: + +
+ + + + + + + + + +
FieldDescription
minReadySeconds
integer
The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).
revisionHistoryLimit
integer
The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.
selector
LabelSelector
A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
updateStrategy
DaemonSetUpdateStrategy
An update strategy to replace existing DaemonSet pods with new pods.
+

DaemonSetStatus v1beta2 apps

+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
collisionCount
integer
Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.
conditions
DaemonSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a DaemonSet's current state.
currentNumberScheduled
integer
The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
desiredNumberScheduled
integer
The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
numberAvailable
integer
The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)
numberMisscheduled
integer
The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
numberReady
integer
The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.
numberUnavailable
integer
The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)
observedGeneration
integer
The most recent generation observed by the daemon set controller.
updatedNumberScheduled
integer
The total number of nodes that are running updated daemon pod
+

DaemonSetList v1beta2 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
DaemonSet array
A list of daemon sets.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

RollingUpdateDaemonSet v1beta2 apps

+ + + + + + +
FieldDescription
maxUnavailableThe 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. 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.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+' http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/daemonsets
+
+ + +
+
+
Output
+
+

+daemonset "daemonset-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "DaemonSet",
+  "apiVersion": "extensions/v1beta1",
+  "metadata": {
+    "name": "daemonset-example",
+    "namespace": "default",
+    "selfLink": "/apis/extensions/v1beta1/namespaces/default/daemonsets/daemonset-example",
+    "uid": "65552ced-b0e2-11e6-aef0-42010af00229",
+    "resourceVersion": "3558",
+    "generation": 1,
+    "creationTimestamp": "2016-11-22T18:35:09Z",
+    "labels": {
+      "app": "daemonset-example"
+    }
+  },
+  "spec": {
+    "selector": {
+      "matchLabels": {
+        "app": "daemonset-example"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "daemonset-example"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "daemonset-example",
+            "image": "ubuntu:trusty",
+            "command": [
+              "/bin/sh"
+            ],
+            "args": [
+              "-c",
+              "while [ true ]; do echo \"DaemonSet running on $(hostname)\" ; sleep 10 ; done"
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    }
+  },
+  "status": {
+    "currentNumberScheduled": 0,
+    "numberMisscheduled": 0,
+    "desiredNumberScheduled": 0
+  }
+}
+
+

create a DaemonSet

+

HTTP Request

+POST /apis/apps/v1beta2/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
202
DaemonSet
Accepted
+

Patch

+

partially update the specified DaemonSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Replace

+

replace the specified DaemonSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete daemonset daemonset-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/daemonsets/daemonset-example'
+
+ + +
+
+
Output
+
+

+daemonset "daemonset-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a DaemonSet

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of DaemonSet

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get daemonset daemonset-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/daemonsets/daemonset-example
+
+

read the specified DaemonSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

List

+

list or watch objects of kind DaemonSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DaemonSetList
OK
+

List All Namespaces

+

list or watch objects of kind DaemonSet

+

HTTP Request

+GET /apis/apps/v1beta2/daemonsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DaemonSetList
OK
+

Watch

+

watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/daemonsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified DaemonSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Read Status

+

read status of the specified DaemonSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Replace Status

+

replace status of the specified DaemonSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
+

DaemonSet v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1DaemonSet
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
DaemonSetSpec
The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
DaemonSetStatus
The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

DaemonSetSpec v1beta1 extensions

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
minReadySeconds
integer
The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).
revisionHistoryLimit
integer
The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.
selector
LabelSelector
A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
templateGeneration
integer
DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.
updateStrategy
DaemonSetUpdateStrategy
An update strategy to replace existing DaemonSet pods with new pods.
+

DaemonSetStatus v1beta1 extensions

+
Appears In: + +
+ + + + + + + + + + + + + + +
FieldDescription
collisionCount
integer
Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.
conditions
DaemonSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a DaemonSet's current state.
currentNumberScheduled
integer
The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
desiredNumberScheduled
integer
The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
numberAvailable
integer
The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)
numberMisscheduled
integer
The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
numberReady
integer
The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.
numberUnavailable
integer
The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)
observedGeneration
integer
The most recent generation observed by the daemon set controller.
updatedNumberScheduled
integer
The total number of nodes that are running updated daemon pod
+

DaemonSetList v1beta1 extensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
DaemonSet array
A list of daemon sets.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

RollingUpdateDaemonSet v1beta1 extensions

+ + + + + + +
FieldDescription
maxUnavailableThe 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. 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.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: daemonset-example
+spec:
+  template:
+    metadata:
+      labels:
+        app: daemonset-example
+    spec:
+      containers:
+      - name: daemonset-example
+        image: ubuntu:trusty
+        command:
+        - /bin/sh
+        args:
+        - -c
+        - >-
+          while [ true ]; do
+          echo "DaemonSet running on $(hostname)" ;
+          sleep 10 ;
+          done
+' http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/daemonsets
+
+ + +
+
+
Output
+
+

+daemonset "daemonset-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "DaemonSet",
+  "apiVersion": "extensions/v1beta1",
+  "metadata": {
+    "name": "daemonset-example",
+    "namespace": "default",
+    "selfLink": "/apis/extensions/v1beta1/namespaces/default/daemonsets/daemonset-example",
+    "uid": "65552ced-b0e2-11e6-aef0-42010af00229",
+    "resourceVersion": "3558",
+    "generation": 1,
+    "creationTimestamp": "2016-11-22T18:35:09Z",
+    "labels": {
+      "app": "daemonset-example"
+    }
+  },
+  "spec": {
+    "selector": {
+      "matchLabels": {
+        "app": "daemonset-example"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "daemonset-example"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "daemonset-example",
+            "image": "ubuntu:trusty",
+            "command": [
+              "/bin/sh"
+            ],
+            "args": [
+              "-c",
+              "while [ true ]; do echo \"DaemonSet running on $(hostname)\" ; sleep 10 ; done"
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    }
+  },
+  "status": {
+    "currentNumberScheduled": 0,
+    "numberMisscheduled": 0,
+    "desiredNumberScheduled": 0
+  }
+}
+
+

create a DaemonSet

+

HTTP Request

+POST /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
202
DaemonSet
Accepted
+

Patch

+

partially update the specified DaemonSet

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Replace

+

replace the specified DaemonSet

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete daemonset daemonset-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/daemonsets/daemonset-example'
+
+ + +
+
+
Output
+
+

+daemonset "daemonset-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a DaemonSet

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of DaemonSet

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get daemonset daemonset-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/daemonsets/daemonset-example
+
+

read the specified DaemonSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

List

+

list or watch objects of kind DaemonSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DaemonSetList
OK
+

List All Namespaces

+

list or watch objects of kind DaemonSet

+

HTTP Request

+GET /apis/extensions/v1beta1/daemonsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DaemonSetList
OK
+

Watch

+

watch changes to an object of kind DaemonSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of DaemonSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/daemonsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified DaemonSet

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Read Status

+

read status of the specified DaemonSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
DaemonSet
OK
+

Replace Status

+

replace status of the specified DaemonSet

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DaemonSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DaemonSet
+

Response

+ + + + + + +
CodeDescription
200
DaemonSet
OK
201
DaemonSet
Created
+

DaemonSetCondition v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2DaemonSetCondition
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of DaemonSet condition.
+

DaemonSetCondition v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1DaemonSetCondition
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of DaemonSet condition.
+

DaemonSetUpdateStrategy v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2DaemonSetUpdateStrategy
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDaemonSet
Rolling update config params. Present only if type = "RollingUpdate".
type
string
Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.
+

DaemonSetUpdateStrategy v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1DaemonSetUpdateStrategy
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDaemonSet
Rolling update config params. Present only if type = "RollingUpdate".
type
string
Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete.
+

Deployment v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2Deployment
+
Other API versions of this object exist: +v1 +v1beta1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata.
spec
DeploymentSpec
Specification of the desired behavior of the Deployment.
status
DeploymentStatus
Most recently observed status of the Deployment.
+

DeploymentSpec v1beta2 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
paused
boolean
Indicates that the deployment is paused.
progressDeadlineSeconds
integer
The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.
replicas
integer
Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
revisionHistoryLimit
integer
The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.
selector
LabelSelector
Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.
strategy
DeploymentStrategy
The deployment strategy to use to replace existing pods with new ones.
template
PodTemplateSpec
Template describes the pods that will be created.
+

DeploymentStatus v1beta2 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
availableReplicas
integer
Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.
collisionCount
integer
Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.
conditions
DeploymentCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a deployment's current state.
observedGeneration
integer
The generation observed by the deployment controller.
readyReplicas
integer
Total number of ready pods targeted by this deployment.
replicas
integer
Total number of non-terminated pods targeted by this deployment (their labels match the selector).
unavailableReplicas
integer
Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.
updatedReplicas
integer
Total number of non-terminated pods targeted by this deployment that have the desired template spec.
+

DeploymentList v1beta2 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Deployment array
Items is the list of Deployments.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata.
+

DeploymentStrategy v1beta2 apps

+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDeployment
Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.
type
string
Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
+

RollingUpdateDeployment v1beta2 apps

+ + + + + + + +
FieldDescription
maxSurgeThe maximum number of pods that can be scheduled above the desired number of pods. 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. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.
maxUnavailableThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/deployments
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2118306",
+    "generation": 1,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {}
+}
+
+

create a Deployment

+

HTTP Request

+POST /apis/apps/v1beta2/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
202
Deployment
Accepted
+

Patch

+ + +
+
+
kubectl command
+
+

+$ kubectl patch deployment deployment-example -p \
+	'{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}'
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' --data '
+{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}' \
+	'http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+"deployment-example" patched
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "5dc3a8e6-b0ee-11e6-aef0-42010af00229",
+    "resourceVersion": "164489",
+    "generation": 11,
+    "creationTimestamp": "2016-11-22T20:00:50Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "5"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 10,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

partially update the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' | kubectl replace -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PUT -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" replaced
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2119082",
+    "generation": 5,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

replace the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
201
Deployment
Created
200
Deployment
OK
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete deployment deployment-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a Deployment

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Deployment

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

read the specified Deployment

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

List

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/apps/v1beta2/namespaces/default/deployments'
+
+ + +
+
+
Output
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

List All Namespaces

+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/apps/v1beta2/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

Watch

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example --watch -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/apps/v1beta2/watch/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+
+
+
Response Body
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+

watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Read Status

+

read status of the specified Deployment

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace Status

+

replace status of the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified Deployment

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Deployment v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1Deployment
+
Other API versions of this object exist: +v1 +v1beta2 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata.
spec
DeploymentSpec
Specification of the desired behavior of the Deployment.
status
DeploymentStatus
Most recently observed status of the Deployment.
+

DeploymentSpec v1beta1 apps

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
paused
boolean
Indicates that the deployment is paused.
progressDeadlineSeconds
integer
The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.
replicas
integer
Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
revisionHistoryLimit
integer
The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.
rollbackTo
RollbackConfig
DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.
selector
LabelSelector
Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.
strategy
DeploymentStrategy
The deployment strategy to use to replace existing pods with new ones.
template
PodTemplateSpec
Template describes the pods that will be created.
+

DeploymentStatus v1beta1 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
availableReplicas
integer
Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.
collisionCount
integer
Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.
conditions
DeploymentCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a deployment's current state.
observedGeneration
integer
The generation observed by the deployment controller.
readyReplicas
integer
Total number of ready pods targeted by this deployment.
replicas
integer
Total number of non-terminated pods targeted by this deployment (their labels match the selector).
unavailableReplicas
integer
Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.
updatedReplicas
integer
Total number of non-terminated pods targeted by this deployment that have the desired template spec.
+

DeploymentList v1beta1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Deployment array
Items is the list of Deployments.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata.
+

DeploymentStrategy v1beta1 apps

+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDeployment
Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.
type
string
Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
+

DeploymentRollback v1beta1 apps

+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
name
string
Required: This must match the Name of a deployment.
rollbackTo
RollbackConfig
The config of this deployment rollback.
updatedAnnotations
object
The annotations to be updated to a deployment
+

RollingUpdateDeployment v1beta1 apps

+ + + + + + + +
FieldDescription
maxSurgeThe maximum number of pods that can be scheduled above the desired number of pods. 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. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.
maxUnavailableThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/apps/v1beta1/namespaces/default/deployments
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2118306",
+    "generation": 1,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {}
+}
+
+

create a Deployment

+

HTTP Request

+POST /apis/apps/v1beta1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + + +
CodeDescription
202
Deployment
Accepted
200
Deployment
OK
201
Deployment
Created
+

Patch

+ + +
+
+
kubectl command
+
+

+$ kubectl patch deployment deployment-example -p \
+	'{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}'
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' --data '
+{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}' \
+	'http://127.0.0.1:8001/apis/apps/v1beta1/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+"deployment-example" patched
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "5dc3a8e6-b0ee-11e6-aef0-42010af00229",
+    "resourceVersion": "164489",
+    "generation": 11,
+    "creationTimestamp": "2016-11-22T20:00:50Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "5"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 10,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

partially update the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' | kubectl replace -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PUT -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/apps/v1beta1/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" replaced
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2119082",
+    "generation": 5,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

replace the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
201
Deployment
Created
200
Deployment
OK
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete deployment deployment-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/apps/v1beta1/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a Deployment

+

HTTP Request

+DELETE /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Deployment

+

HTTP Request

+DELETE /apis/apps/v1beta1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/apps/v1beta1/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

read the specified Deployment

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

List

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/apps/v1beta1/namespaces/default/deployments'
+
+ + +
+
+
Output
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

List All Namespaces

+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/apps/v1beta1/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

Watch

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example --watch -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/apps/v1beta1/watch/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+
+
+
Response Body
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+

watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Read Status

+

read status of the specified Deployment

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace Status

+

replace status of the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified Deployment

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified Deployment

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified Deployment

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Rollback

+

create rollback of a Deployment

+

HTTP Request

+POST /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DeploymentRollback
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeploymentRollback
+

Response

+ + + + + + + +
CodeDescription
202
DeploymentStatus
Accepted
200
DeploymentStatus
OK
201
DeploymentStatus
Created
+

Deployment v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1Deployment
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata.
spec
DeploymentSpec
Specification of the desired behavior of the Deployment.
status
DeploymentStatus
Most recently observed status of the Deployment.
+

DeploymentSpec v1beta1 extensions

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
paused
boolean
Indicates that the deployment is paused and will not be processed by the deployment controller.
progressDeadlineSeconds
integer
The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means "no deadline".
replicas
integer
Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
revisionHistoryLimit
integer
The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.
rollbackTo
RollbackConfig
DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.
selector
LabelSelector
Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.
strategy
DeploymentStrategy
patch strategy: retainKeys
The deployment strategy to use to replace existing pods with new ones.
template
PodTemplateSpec
Template describes the pods that will be created.
+

DeploymentStatus v1beta1 extensions

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
availableReplicas
integer
Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.
collisionCount
integer
Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.
conditions
DeploymentCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a deployment's current state.
observedGeneration
integer
The generation observed by the deployment controller.
readyReplicas
integer
Total number of ready pods targeted by this deployment.
replicas
integer
Total number of non-terminated pods targeted by this deployment (their labels match the selector).
unavailableReplicas
integer
Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.
updatedReplicas
integer
Total number of non-terminated pods targeted by this deployment that have the desired template spec.
+

DeploymentList v1beta1 extensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Deployment array
Items is the list of Deployments.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata.
+

DeploymentStrategy v1beta1 extensions

+ + + + + + + +
FieldDescription
rollingUpdate
RollingUpdateDeployment
Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.
type
string
Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
+

DeploymentRollback v1beta1 extensions

+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
name
string
Required: This must match the Name of a deployment.
rollbackTo
RollbackConfig
The config of this deployment rollback.
updatedAnnotations
object
The annotations to be updated to a deployment
+

RollingUpdateDeployment v1beta1 extensions

+ + + + + + + +
FieldDescription
maxSurgeThe maximum number of pods that can be scheduled above the desired number of pods. 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. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.
maxUnavailableThe maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.
+

Write Operations

+

Create

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' | kubectl create -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X POST -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.10
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/deployments
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" created
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2118306",
+    "generation": 1,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {}
+}
+
+

create a Deployment

+

HTTP Request

+POST /apis/extensions/v1beta1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
202
Deployment
Accepted
+

Patch

+ + +
+
+
kubectl command
+
+

+$ kubectl patch deployment deployment-example -p \
+	'{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}'
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' --data '
+{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.11"}]}}}}' \
+	'http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+"deployment-example" patched
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "5dc3a8e6-b0ee-11e6-aef0-42010af00229",
+    "resourceVersion": "164489",
+    "generation": 11,
+    "creationTimestamp": "2016-11-22T20:00:50Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "5"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 10,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

partially update the specified Deployment

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace

+ + +
+
+
kubectl command
+
+

+$ echo 'apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' | kubectl replace -f -
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X PUT -H 'Content-Type: application/yaml' --data '
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: deployment-example
+spec:
+  replicas: 3
+  revisionHistoryLimit: 10
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: nginx
+        image: nginx:1.11
+        ports:
+        - containerPort: 80
+' http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" replaced
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "4ccca349-9cb1-11e6-9c54-42010a800148",
+    "resourceVersion": "2119082",
+    "generation": 5,
+    "creationTimestamp": "2016-10-28T01:53:19Z",
+    "labels": {
+      "app": "nginx"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.11",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    },
+    "revisionHistoryLimit": 10
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

replace the specified Deployment

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
+

Delete

+ + +
+
+
kubectl command
+
+

+$ kubectl delete deployment deployment-example
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X DELETE -H 'Content-Type: application/yaml' --data '
+gracePeriodSeconds: 0
+orphanDependents: false
+' 'http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+deployment "deployment-example" deleted
+
+
+
+
Response Body
+
+

+{
+  "kind": "Status",
+  "apiVersion": "v1",
+  "metadata": {},
+  "status": "Success",
+  "code": 200
+}
+
+
+

delete a Deployment

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Deployment

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/deployments/deployment-example
+
+ + +
+
+
Output
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "Deployment",
+  "apiVersion": "apps/v1beta1",
+  "metadata": {
+    "name": "deployment-example",
+    "namespace": "default",
+    "selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+    "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+    "resourceVersion": "2064726",
+    "generation": 4,
+    "creationTimestamp": "2016-10-27T16:33:35Z",
+    "labels": {
+      "app": "nginx"
+    },
+    "annotations": {
+      "deployment.kubernetes.io/revision": "1"
+    }
+  },
+  "spec": {
+    "replicas": 3,
+    "selector": {
+      "matchLabels": {
+        "app": "nginx"
+      }
+    },
+    "template": {
+      "metadata": {
+        "creationTimestamp": null,
+        "labels": {
+          "app": "nginx"
+        }
+      },
+      "spec": {
+        "containers": [
+          {
+            "name": "nginx",
+            "image": "nginx:1.10",
+            "ports": [
+              {
+                "containerPort": 80,
+                "protocol": "TCP"
+              }
+            ],
+            "resources": {},
+            "terminationMessagePath": "/dev/termination-log",
+            "imagePullPolicy": "IfNotPresent"
+          }
+        ],
+        "restartPolicy": "Always",
+        "terminationGracePeriodSeconds": 30,
+        "dnsPolicy": "ClusterFirst",
+        "securityContext": {}
+      }
+    },
+    "strategy": {
+      "type": "RollingUpdate",
+      "rollingUpdate": {
+        "maxUnavailable": 1,
+        "maxSurge": 1
+      }
+    }
+  },
+  "status": {
+    "observedGeneration": 4,
+    "replicas": 3,
+    "updatedReplicas": 3,
+    "availableReplicas": 3
+  }
+}
+
+
+

read the specified Deployment

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

List

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/extensions/v1beta1/namespaces/default/deployments'
+
+ + +
+
+
Output
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+
+
+
Response Body
+
+

+{
+  "kind": "List",
+  "apiVersion": "v1",
+  "metadata": {},
+  "items": [
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "docs",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/docs",
+        "uid": "ef49e1d2-915e-11e6-be81-42010a80003f",
+        "resourceVersion": "1924126",
+        "generation": 21,
+        "creationTimestamp": "2016-10-13T16:06:00Z",
+        "labels": {
+          "run": "docs"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "10",
+          "replicatingperfection.net/push-image": "true"
+        }
+      },
+      "spec": {
+        "replicas": 1,
+        "selector": {
+          "matchLabels": {
+            "run": "docs"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "auto-pushed-image-pwittrock/api-docs": "1477496453",
+              "run": "docs"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "docs",
+                "image": "pwittrock/api-docs:v9",
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "Always"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 21,
+        "replicas": 1,
+        "updatedReplicas": 1,
+        "availableReplicas": 1
+      }
+    },
+    {
+      "kind": "Deployment",
+      "apiVersion": "app/v1beta1",
+      "metadata": {
+        "name": "deployment-example",
+        "namespace": "default",
+        "selfLink": "/apis/app/v1beta1/namespaces/default/deployments/deployment-example",
+        "uid": "1b33145a-9c63-11e6-9c54-42010a800148",
+        "resourceVersion": "2064726",
+        "generation": 4,
+        "creationTimestamp": "2016-10-27T16:33:35Z",
+        "labels": {
+          "app": "nginx"
+        },
+        "annotations": {
+          "deployment.kubernetes.io/revision": "1"
+        }
+      },
+      "spec": {
+        "replicas": 3,
+        "selector": {
+          "matchLabels": {
+            "app": "nginx"
+          }
+        },
+        "template": {
+          "metadata": {
+            "creationTimestamp": null,
+            "labels": {
+              "app": "nginx"
+            }
+          },
+          "spec": {
+            "containers": [
+              {
+                "name": "nginx",
+                "image": "nginx:1.10",
+                "ports": [
+                  {
+                    "containerPort": 80,
+                    "protocol": "TCP"
+                  }
+                ],
+                "resources": {},
+                "terminationMessagePath": "/dev/termination-log",
+                "imagePullPolicy": "IfNotPresent"
+              }
+            ],
+            "restartPolicy": "Always",
+            "terminationGracePeriodSeconds": 30,
+            "dnsPolicy": "ClusterFirst",
+            "securityContext": {}
+          }
+        },
+        "strategy": {
+          "type": "RollingUpdate",
+          "rollingUpdate": {
+            "maxUnavailable": 1,
+            "maxSurge": 1
+          }
+        }
+      },
+      "status": {
+        "observedGeneration": 4,
+        "replicas": 3,
+        "updatedReplicas": 3,
+        "availableReplicas": 3
+      }
+    }
+  ]
+}
+
+
+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

List All Namespaces

+

list or watch objects of kind Deployment

+

HTTP Request

+GET /apis/extensions/v1beta1/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
DeploymentList
OK
+

Watch

+ + +
+
+
kubectl command
+
+

+$ kubectl get deployment deployment-example --watch -o json
+
+
+
+
curl command (requires kubectl proxy to be running)
+
+

+$ kubectl proxy
+$ curl -X GET 'http://127.0.0.1:8001/apis/extensions/v1beta1/watch/namespaces/default/deployments/deployment-example'
+
+ + +
+
+
Output
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+
+
+
Response Body
+
+

+{
+	"type": "ADDED",
+	"object": {
+		"kind": "Deployment",
+		"apiVersion": "apps/v1beta1",
+		"metadata": {
+			"name": "deployment-example",
+			"namespace": "default",
+			"selfLink": "/apis/apps/v1beta1/namespaces/default/deployments/deployment-example",
+			"uid": "64c12290-9cbf-11e6-9c54-42010a800148",
+			"resourceVersion": "2128095",
+			"generation": 2,
+			"creationTimestamp": "2016-10-28T03:34:12Z",
+			"labels": {
+				"app": "nginx"
+			},
+			"annotations": {
+				"deployment.kubernetes.io/revision": "3"
+			}
+		},
+		"spec": {
+			"replicas": 3,
+			"selector": {
+				"matchLabels": {
+					"app": "nginx"
+				}
+			},
+			"template": {
+				"metadata": {
+					"creationTimestamp": null,
+					"labels": {
+						"app": "nginx"
+					}
+				},
+				"spec": {
+					"containers": [
+						{
+							"name": "nginx",
+							"image": "nginx:1.10",
+							"ports": [
+								{
+									"containerPort": 80,
+									"protocol": "TCP"
+								}
+							],
+							"resources": {
+							},
+							"terminationMessagePath": "/dev/termination-log",
+							"imagePullPolicy": "IfNotPresent"
+						}
+					],
+					"restartPolicy": "Always",
+					"terminationGracePeriodSeconds": 30,
+					"dnsPolicy": "ClusterFirst",
+					"securityContext": {
+					}
+				}
+			},
+			"strategy": {
+				"type": "RollingUpdate",
+				"rollingUpdate": {
+					"maxUnavailable": 1,
+					"maxSurge": 1
+				}
+			}
+		},
+		"status": {
+			"observedGeneration": 2,
+			"replicas": 3,
+			"updatedReplicas": 3,
+			"availableReplicas": 3
+		}
+	}
+}
+
+

watch changes to an object of kind Deployment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Deployment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/deployments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified Deployment

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Read Status

+

read status of the specified Deployment

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Deployment
OK
+

Replace Status

+

replace status of the specified Deployment

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Deployment
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Deployment
+

Response

+ + + + + + +
CodeDescription
200
Deployment
OK
201
Deployment
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified Deployment

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified Deployment

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified Deployment

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Rollback

+

create rollback of a Deployment

+

HTTP Request

+POST /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the DeploymentRollback
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeploymentRollback
+

Response

+ + + + + + + +
CodeDescription
200
DeploymentStatus
OK
201
DeploymentStatus
Created
202
DeploymentStatus
Accepted
+

DeploymentCondition v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2DeploymentCondition
+
Other API versions of this object exist: +v1 +v1beta1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
lastUpdateTime
Time
The last time this condition was updated.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of deployment condition.
+

DeploymentCondition v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1DeploymentCondition
+
Other API versions of this object exist: +v1 +v1beta2 +
+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
lastUpdateTime
Time
The last time this condition was updated.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of deployment condition.
+

DeploymentCondition v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1DeploymentCondition
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
lastUpdateTime
Time
The last time this condition was updated.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of deployment condition.
+

Event v1beta1 events.k8s.io

+ + + + + +
GroupVersionKind
events.k8s.iov1beta1Event
+
Other API versions of this object exist: +v1 +
+
Appears In: + +
+ + + + + + + + + + + + + + + + + + + + + +
FieldDescription
action
string
What action was taken/failed regarding to the regarding object.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
deprecatedCount
integer
Deprecated field assuring backward compatibility with core.v1 Event type
deprecatedFirstTimestamp
Time
Deprecated field assuring backward compatibility with core.v1 Event type
deprecatedLastTimestamp
Time
Deprecated field assuring backward compatibility with core.v1 Event type
deprecatedSource
EventSource
Deprecated field assuring backward compatibility with core.v1 Event type
eventTime
MicroTime
Required. Time when this Event was first observed.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
note
string
Optional. A human-readable description of the status of this operation. Maximal length of the note is 1kB, but libraries should be prepared to handle values up to 64kB.
reason
string
Why the action was taken.
regarding
ObjectReference
The object this Event is about. In most cases it's an Object reporting controller implements. E.g. ReplicaSetController implements ReplicaSets and this event is emitted because it acts on some changes in a ReplicaSet object.
related
ObjectReference
Optional secondary object for more complex actions. E.g. when regarding object triggers a creation or deletion of related object.
reportingController
string
Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.
reportingInstance
string
ID of the controller instance, e.g. `kubelet-xyzf`.
series
EventSeries
Data about the Event series this event represents or nil if it's a singleton Event.
type
string
Type of this event (Normal, Warning), new types could be added in the future.
+

EventList v1beta1 events

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Event array
Items is a list of schema objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create an Event

+

HTTP Request

+POST /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Event
+

Response

+ + + + + + + +
CodeDescription
200
Event
OK
201
Event
Created
202
Event
Accepted
+

Patch

+

partially update the specified Event

+

HTTP Request

+PATCH /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Event
OK
+

Replace

+

replace the specified Event

+

HTTP Request

+PUT /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Event
+

Response

+ + + + + + +
CodeDescription
200
Event
OK
201
Event
Created
+

Delete

+

delete an Event

+

HTTP Request

+DELETE /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of Event

+

HTTP Request

+DELETE /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Event

+

HTTP Request

+GET /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
Event
OK
+

List

+

list or watch objects of kind Event

+

HTTP Request

+GET /apis/events.k8s.io/v1beta1/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
EventList
OK
+

List All Namespaces

+

list or watch objects of kind Event

+

HTTP Request

+GET /apis/events.k8s.io/v1beta1/events +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
EventList
OK
+

Watch

+

watch changes to an object of kind Event. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/events.k8s.io/v1beta1/watch/namespaces/{namespace}/events/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Event
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/events.k8s.io/v1beta1/watch/namespaces/{namespace}/events +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Event. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/events.k8s.io/v1beta1/watch/events +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

EventSeries v1beta1 events.k8s.io

+ + + + + +
GroupVersionKind
events.k8s.iov1beta1EventSeries
+
Other API versions of this object exist: +v1 +
+
Appears In: + +
+ + + + + + + +
FieldDescription
count
integer
Number of occurrences in this series up to the last heartbeat time
lastObservedTime
MicroTime
Time when last Event from the series was seen before last heartbeat.
state
string
Information whether this series is ongoing or finished.
+

ExternalMetricSource v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1ExternalMetricSource
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + +
FieldDescription
metricName
string
metricName is the name of the metric in question.
metricSelector
LabelSelector
metricSelector is used to identify a specific time series within a given metric.
targetAverageValue
Quantity
targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.
targetValue
Quantity
targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.
+

ExternalMetricStatus v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1ExternalMetricStatus
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + +
FieldDescription
currentAverageValue
Quantity
currentAverageValue is the current value of metric averaged over autoscaled pods.
currentValue
Quantity
currentValue is the current value of the metric (as a quantity)
metricName
string
metricName is the name of a metric used for autoscaling in metric system.
metricSelector
LabelSelector
metricSelector is used to identify a specific time series within a given metric.
+

FSGroupStrategyOptions v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1FSGroupStrategyOptions
+ + + + + + + +
FieldDescription
ranges
IDRange array
ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.
rule
string
rule is the strategy that will dictate what FSGroup is used in the SecurityContext.
+

HorizontalPodAutoscaler v2beta2 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta2HorizontalPodAutoscaler
+
Other API versions of this object exist: +v1 +v2beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
HorizontalPodAutoscalerSpec
spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
HorizontalPodAutoscalerStatus
status is the current information about the autoscaler.
+

HorizontalPodAutoscalerSpec v2beta2 autoscaling

+ + + + + + + + + +
FieldDescription
maxReplicas
integer
maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.
metrics
MetricSpec array
metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.
minReplicas
integer
minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.
scaleTargetRef
CrossVersionObjectReference
scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.
+

HorizontalPodAutoscalerStatus v2beta2 autoscaling

+ + + + + + + + + + + +
FieldDescription
conditions
HorizontalPodAutoscalerCondition array
conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.
currentMetrics
MetricStatus array
currentMetrics is the last read state of the metrics used by this autoscaler.
currentReplicas
integer
currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.
desiredReplicas
integer
desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.
lastScaleTime
Time
lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.
observedGeneration
integer
observedGeneration is the most recent generation observed by this autoscaler.
+

HorizontalPodAutoscalerList v2beta2 autoscaling

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
HorizontalPodAutoscaler array
items is the list of horizontal pod autoscaler objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
metadata is the standard list metadata.
+

Write Operations

+

Create

+

create a HorizontalPodAutoscaler

+

HTTP Request

+POST /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
202
HorizontalPodAutoscaler
Accepted
+

Patch

+

partially update the specified HorizontalPodAutoscaler

+

HTTP Request

+PATCH /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Replace

+

replace the specified HorizontalPodAutoscaler

+

HTTP Request

+PUT /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
+

Delete

+

delete a HorizontalPodAutoscaler

+

HTTP Request

+DELETE /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of HorizontalPodAutoscaler

+

HTTP Request

+DELETE /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

List

+

list or watch objects of kind HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscalerList
OK
+

List All Namespaces

+

list or watch objects of kind HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta2/horizontalpodautoscalers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscalerList
OK
+

Watch

+

watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/autoscaling/v2beta2/watch/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/autoscaling/v2beta2/watch/horizontalpodautoscalers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified HorizontalPodAutoscaler

+

HTTP Request

+PATCH /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Read Status

+

read status of the specified HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Replace Status

+

replace status of the specified HorizontalPodAutoscaler

+

HTTP Request

+PUT /apis/autoscaling/v2beta2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + +
CodeDescription
201
HorizontalPodAutoscaler
Created
200
HorizontalPodAutoscaler
OK
+

HorizontalPodAutoscaler v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1HorizontalPodAutoscaler
+
Other API versions of this object exist: +v1 +v2beta2 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
HorizontalPodAutoscalerSpec
spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
HorizontalPodAutoscalerStatus
status is the current information about the autoscaler.
+

HorizontalPodAutoscalerSpec v2beta1 autoscaling

+ + + + + + + + + +
FieldDescription
maxReplicas
integer
maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.
metrics
MetricSpec array
metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.
minReplicas
integer
minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.
scaleTargetRef
CrossVersionObjectReference
scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.
+

HorizontalPodAutoscalerStatus v2beta1 autoscaling

+ + + + + + + + + + + +
FieldDescription
conditions
HorizontalPodAutoscalerCondition array
conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.
currentMetrics
MetricStatus array
currentMetrics is the last read state of the metrics used by this autoscaler.
currentReplicas
integer
currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.
desiredReplicas
integer
desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.
lastScaleTime
Time
lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.
observedGeneration
integer
observedGeneration is the most recent generation observed by this autoscaler.
+

HorizontalPodAutoscalerList v2beta1 autoscaling

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
HorizontalPodAutoscaler array
items is the list of horizontal pod autoscaler objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
metadata is the standard list metadata.
+

Write Operations

+

Create

+

create a HorizontalPodAutoscaler

+

HTTP Request

+POST /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + + +
CodeDescription
202
HorizontalPodAutoscaler
Accepted
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
+

Patch

+

partially update the specified HorizontalPodAutoscaler

+

HTTP Request

+PATCH /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Replace

+

replace the specified HorizontalPodAutoscaler

+

HTTP Request

+PUT /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
201
HorizontalPodAutoscaler
Created
+

Delete

+

delete a HorizontalPodAutoscaler

+

HTTP Request

+DELETE /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of HorizontalPodAutoscaler

+

HTTP Request

+DELETE /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

List

+

list or watch objects of kind HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscalerList
OK
+

List All Namespaces

+

list or watch objects of kind HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta1/horizontalpodautoscalers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscalerList
OK
+

Watch

+

watch changes to an object of kind HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of HorizontalPodAutoscaler. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/autoscaling/v2beta1/watch/horizontalpodautoscalers +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified HorizontalPodAutoscaler

+

HTTP Request

+PATCH /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Read Status

+

read status of the specified HorizontalPodAutoscaler

+

HTTP Request

+GET /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
HorizontalPodAutoscaler
OK
+

Replace Status

+

replace status of the specified HorizontalPodAutoscaler

+

HTTP Request

+PUT /apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the HorizontalPodAutoscaler
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
HorizontalPodAutoscaler
+

Response

+ + + + + + +
CodeDescription
201
HorizontalPodAutoscaler
Created
200
HorizontalPodAutoscaler
OK
+

HorizontalPodAutoscalerCondition v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1HorizontalPodAutoscalerCondition
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
lastTransitionTime is the last time the condition transitioned from one status to another
message
string
message is a human-readable explanation containing details about the transition
reason
string
reason is the reason for the condition's last transition.
status
string
status is the status of the condition (True, False, Unknown)
type
string
type describes the current condition
+

HostPortRange v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1HostPortRange
+ + + + + + + +
FieldDescription
max
integer
max is the end of the range, inclusive.
min
integer
min is the start of the range, inclusive.
+

IDRange v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1IDRange
+ + + + + + + +
FieldDescription
max
integer
max is the end of the range, inclusive.
min
integer
min is the start of the range, inclusive.
+

IPBlock v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1IPBlock
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
cidr
string
CIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"
except
string array
Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range
+

Initializer v1alpha1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1alpha1Initializer
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
name
string
Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where "alwayspullimages" is the name of the webhook, and kubernetes.io is the name of the organization. Required
rules
Rule array
Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.
+

JobTemplateSpec v2alpha1 batch

+ + + + + +
GroupVersionKind
batchv2alpha1JobTemplateSpec
+
Other API versions of this object exist: +v1beta1 +
+
Appears In: + +
+ + + + + + +
FieldDescription
metadata
ObjectMeta
Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
JobSpec
Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

LocalSubjectAccessReview v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1LocalSubjectAccessReview
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SubjectAccessReviewSpec
Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.
status
SubjectAccessReviewStatus
Status is filled in by the server and indicates whether the request is allowed or not
+

Write Operations

+

Create

+

create a LocalSubjectAccessReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1beta1/namespaces/{namespace}/localsubjectaccessreviews +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
LocalSubjectAccessReview
+

Response

+ + + + + + + +
CodeDescription
200
LocalSubjectAccessReview
OK
201
LocalSubjectAccessReview
Created
202
LocalSubjectAccessReview
Accepted
+

MetricSpec v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1MetricSpec
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + + +
FieldDescription
external
ExternalMetricSource
external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).
object
ObjectMetricSource
object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).
pods
PodsMetricSource
pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.
resource
ResourceMetricSource
resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.
type
string
type is the type of metric source. It should be one of "Object", "Pods" or "Resource", each mapping to a matching field in the object.
+

MetricStatus v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1MetricStatus
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + + +
FieldDescription
external
ExternalMetricStatus
external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).
object
ObjectMetricStatus
object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).
pods
PodsMetricStatus
pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.
resource
ResourceMetricStatus
resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source.
type
string
type is the type of metric source. It will be one of "Object", "Pods" or "Resource", each corresponds to a matching field in the object.
+

NetworkPolicy v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1NetworkPolicy
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
NetworkPolicySpec
Specification of the desired behavior for this NetworkPolicy.
+

NetworkPolicySpec v1beta1 extensions

+ + + + + + + + + +
FieldDescription
egress
NetworkPolicyEgressRule array
List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8
ingress
NetworkPolicyIngressRule array
List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).
podSelector
LabelSelector
Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.
policyTypes
string array
List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ "Egress" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include "Egress" (since such a policy would not include an Egress section and would otherwise default to just [ "Ingress" ]). This field is beta-level in 1.8
+

NetworkPolicyList v1beta1 extensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
NetworkPolicy array
Items is a list of schema objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a NetworkPolicy

+

HTTP Request

+POST /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
NetworkPolicy
+

Response

+ + + + + + + +
CodeDescription
202
NetworkPolicy
Accepted
200
NetworkPolicy
OK
201
NetworkPolicy
Created
+

Patch

+

partially update the specified NetworkPolicy

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicy
OK
+

Replace

+

replace the specified NetworkPolicy

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
NetworkPolicy
+

Response

+ + + + + + +
CodeDescription
200
NetworkPolicy
OK
201
NetworkPolicy
Created
+

Delete

+

delete a NetworkPolicy

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of NetworkPolicy

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified NetworkPolicy

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicy
OK
+

List

+

list or watch objects of kind NetworkPolicy

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicyList
OK
+

List All Namespaces

+

list or watch objects of kind NetworkPolicy

+

HTTP Request

+GET /apis/extensions/v1beta1/networkpolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
NetworkPolicyList
OK
+

Watch

+

watch changes to an object of kind NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the NetworkPolicy
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of NetworkPolicy. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/networkpolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

NetworkPolicyEgressRule v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1NetworkPolicyEgressRule
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
ports
NetworkPolicyPort array
List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.
to
NetworkPolicyPeer array
List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.
+

NetworkPolicyIngressRule v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1NetworkPolicyIngressRule
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
from
NetworkPolicyPeer array
List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.
ports
NetworkPolicyPort array
List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.
+

NetworkPolicyPeer v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1NetworkPolicyPeer
+
Other API versions of this object exist: +v1 +
+ + + + + + + + +
FieldDescription
ipBlock
IPBlock
IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.
namespaceSelector
LabelSelector
Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces. If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.
podSelector
LabelSelector
This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods. If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.
+

NetworkPolicyPort v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1NetworkPolicyPort
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
portIf specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.
protocol
string
Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.
+

NonResourceAttributes v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1NonResourceAttributes
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
path
string
Path is the URL path of the request
verb
string
Verb is the standard HTTP verb
+

NonResourceRule v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1NonResourceRule
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
nonResourceURLs
string array
NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. "*" means all.
verbs
string array
Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. "*" means all.
+

ObjectMetricSource v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1ObjectMetricSource
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + + +
FieldDescription
averageValue
Quantity
averageValue is the target value of the average of the metric across all relevant pods (as a quantity)
metricName
string
metricName is the name of the metric in question.
selector
LabelSelector
selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.
target
CrossVersionObjectReference
target is the described Kubernetes object.
targetValue
Quantity
targetValue is the target value of the metric (as a quantity).
+

ObjectMetricStatus v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1ObjectMetricStatus
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + + + +
FieldDescription
averageValue
Quantity
averageValue is the current value of the average of the metric across all relevant pods (as a quantity)
currentValue
Quantity
currentValue is the current value of the metric (as a quantity).
metricName
string
metricName is the name of the metric in question.
selector
LabelSelector
selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.
target
CrossVersionObjectReference
target is the described Kubernetes object.
+

PodSecurityPolicy v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1PodSecurityPolicy
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
PodSecurityPolicySpec
spec defines the policy enforced.
+

PodSecurityPolicySpec v1beta1 policy

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
allowPrivilegeEscalation
boolean
allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.
allowedCapabilities
string array
allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.
allowedFlexVolumes
AllowedFlexVolume array
allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the "volumes" field.
allowedHostPaths
AllowedHostPath array
allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.
allowedProcMountTypes
string array
AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.
allowedUnsafeSysctls
string array
allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. Examples: e.g. "foo/*" allows "foo/bar", "foo/baz", etc. e.g. "foo.*" allows "foo.bar", "foo.baz", etc.
defaultAddCapabilities
string array
defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.
defaultAllowPrivilegeEscalation
boolean
defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.
forbiddenSysctls
string array
forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in "*" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. Examples: e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.
fsGroup
FSGroupStrategyOptions
fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.
hostIPC
boolean
hostIPC determines if the policy allows the use of HostIPC in the pod spec.
hostNetwork
boolean
hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.
hostPID
boolean
hostPID determines if the policy allows the use of HostPID in the pod spec.
hostPorts
HostPortRange array
hostPorts determines which host port ranges are allowed to be exposed.
privileged
boolean
privileged determines if a pod can request to be run as privileged.
readOnlyRootFilesystem
boolean
readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.
requiredDropCapabilities
string array
requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.
runAsUser
RunAsUserStrategyOptions
runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.
seLinux
SELinuxStrategyOptions
seLinux is the strategy that will dictate the allowable labels that may be set.
supplementalGroups
SupplementalGroupsStrategyOptions
supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.
volumes
string array
volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '\*'.
+

PodSecurityPolicyList v1beta1 policy

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PodSecurityPolicy array
items is a list of schema objects.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a PodSecurityPolicy

+

HTTP Request

+POST /apis/policy/v1beta1/podsecuritypolicies +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodSecurityPolicy
+

Response

+ + + + + + + +
CodeDescription
200
PodSecurityPolicy
OK
201
PodSecurityPolicy
Created
202
PodSecurityPolicy
Accepted
+

Patch

+

partially update the specified PodSecurityPolicy

+

HTTP Request

+PATCH /apis/policy/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PodSecurityPolicy
OK
+

Replace

+

replace the specified PodSecurityPolicy

+

HTTP Request

+PUT /apis/policy/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PodSecurityPolicy
+

Response

+ + + + + + +
CodeDescription
200
PodSecurityPolicy
OK
201
PodSecurityPolicy
Created
+

Delete

+

delete a PodSecurityPolicy

+

HTTP Request

+DELETE /apis/policy/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of PodSecurityPolicy

+

HTTP Request

+DELETE /apis/policy/v1beta1/podsecuritypolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PodSecurityPolicy

+

HTTP Request

+GET /apis/policy/v1beta1/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PodSecurityPolicy
OK
+

List

+

list or watch objects of kind PodSecurityPolicy

+

HTTP Request

+GET /apis/policy/v1beta1/podsecuritypolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PodSecurityPolicyList
OK
+

Watch

+

watch changes to an object of kind PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/policy/v1beta1/watch/podsecuritypolicies/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PodSecurityPolicy
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PodSecurityPolicy. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/policy/v1beta1/watch/podsecuritypolicies +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

PodsMetricSource v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1PodsMetricSource
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + +
FieldDescription
metricName
string
metricName is the name of the metric in question
selector
LabelSelector
selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.
targetAverageValue
Quantity
targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)
+

PodsMetricStatus v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1PodsMetricStatus
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + +
FieldDescription
currentAverageValue
Quantity
currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)
metricName
string
metricName is the name of the metric in question
selector
LabelSelector
selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.
+

PolicyRule v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1PolicyRule
+
Other API versions of this object exist: +v1 +v1alpha1 +
+ + + + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.
nonResourceURLs
string array
NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.
resourceNames
string array
ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.
resources
string array
Resources is a list of resources this rule applies to. '\*' represents all resources in the specified apiGroups. '\*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.
verbs
string array
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.
+

PolicyRule v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1PolicyRule
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.
nonResourceURLs
string array
NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.
resourceNames
string array
ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.
resources
string array
Resources is a list of resources this rule applies to. ResourceAll represents all resources.
verbs
string array
Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.
+

PriorityClass v1alpha1 scheduling.k8s.io

+ + + + + +
GroupVersionKind
scheduling.k8s.iov1alpha1PriorityClass
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
description
string
description is an arbitrary string that usually provides guidelines on when this priority class should be used.
globalDefault
boolean
globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
value
integer
The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.
+

PriorityClassList v1alpha1 scheduling

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
PriorityClass array
items is the list of PriorityClasses
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a PriorityClass

+

HTTP Request

+POST /apis/scheduling.k8s.io/v1alpha1/priorityclasses +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PriorityClass
+

Response

+ + + + + + + +
CodeDescription
200
PriorityClass
OK
201
PriorityClass
Created
202
PriorityClass
Accepted
+

Patch

+

partially update the specified PriorityClass

+

HTTP Request

+PATCH /apis/scheduling.k8s.io/v1alpha1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
PriorityClass
OK
+

Replace

+

replace the specified PriorityClass

+

HTTP Request

+PUT /apis/scheduling.k8s.io/v1alpha1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
PriorityClass
+

Response

+ + + + + + +
CodeDescription
201
PriorityClass
Created
200
PriorityClass
OK
+

Delete

+

delete a PriorityClass

+

HTTP Request

+DELETE /apis/scheduling.k8s.io/v1alpha1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of PriorityClass

+

HTTP Request

+DELETE /apis/scheduling.k8s.io/v1alpha1/priorityclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified PriorityClass

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1alpha1/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
PriorityClass
OK
+

List

+

list or watch objects of kind PriorityClass

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1alpha1/priorityclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
PriorityClassList
OK
+

Watch

+

watch changes to an object of kind PriorityClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1alpha1/watch/priorityclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the PriorityClass
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of PriorityClass. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/scheduling.k8s.io/v1alpha1/watch/priorityclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

ReplicaSet v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2ReplicaSet
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
ReplicaSetSpec
Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
ReplicaSetStatus
Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

ReplicaSetSpec v1beta2 apps

+
Appears In: + +
+ + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
replicas
integer
Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
selector
LabelSelector
Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
+

ReplicaSetStatus v1beta2 apps

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
availableReplicas
integer
The number of available replicas (ready for at least minReadySeconds) for this replica set.
conditions
ReplicaSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a replica set's current state.
fullyLabeledReplicas
integer
The number of pods that have labels matching the labels of the pod template of the replicaset.
observedGeneration
integer
ObservedGeneration reflects the generation of the most recently observed ReplicaSet.
readyReplicas
integer
The number of ready replicas for this replica set.
replicas
integer
Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
+

ReplicaSetList v1beta2 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ReplicaSet array
List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ReplicaSet

+

HTTP Request

+POST /apis/apps/v1beta2/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
202
ReplicaSet
Accepted
+

Patch

+

partially update the specified ReplicaSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Replace

+

replace the specified ReplicaSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
+

Delete

+

delete a ReplicaSet

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ReplicaSet

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ReplicaSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

List

+

list or watch objects of kind ReplicaSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSetList
OK
+

List All Namespaces

+

list or watch objects of kind ReplicaSet

+

HTTP Request

+GET /apis/apps/v1beta2/replicasets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSetList
OK
+

Watch

+

watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/replicasets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified ReplicaSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Read Status

+

read status of the specified ReplicaSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Replace Status

+

replace status of the specified ReplicaSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified ReplicaSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified ReplicaSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
201
Scale
Created
200
Scale
OK
+

Patch Scale

+

partially update scale of the specified ReplicaSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

ReplicaSet v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1ReplicaSet
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
ReplicaSetSpec
Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status
ReplicaSetStatus
Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+

ReplicaSetSpec v1beta1 extensions

+
Appears In: + +
+ + + + + + + + +
FieldDescription
minReadySeconds
integer
Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
replicas
integer
Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
selector
LabelSelector
Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template
PodTemplateSpec
Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
+

ReplicaSetStatus v1beta1 extensions

+
Appears In: + +
+ + + + + + + + + + +
FieldDescription
availableReplicas
integer
The number of available replicas (ready for at least minReadySeconds) for this replica set.
conditions
ReplicaSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a replica set's current state.
fullyLabeledReplicas
integer
The number of pods that have labels matching the labels of the pod template of the replicaset.
observedGeneration
integer
ObservedGeneration reflects the generation of the most recently observed ReplicaSet.
readyReplicas
integer
The number of ready replicas for this replica set.
replicas
integer
Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
+

ReplicaSetList v1beta1 extensions

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
ReplicaSet array
List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
+

Write Operations

+

Create

+

create a ReplicaSet

+

HTTP Request

+POST /apis/extensions/v1beta1/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
202
ReplicaSet
Accepted
+

Patch

+

partially update the specified ReplicaSet

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Replace

+

replace the specified ReplicaSet

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + +
CodeDescription
200
ReplicaSet
OK
201
ReplicaSet
Created
+

Delete

+

delete a ReplicaSet

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of ReplicaSet

+

HTTP Request

+DELETE /apis/extensions/v1beta1/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified ReplicaSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

List

+

list or watch objects of kind ReplicaSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSetList
OK
+

List All Namespaces

+

list or watch objects of kind ReplicaSet

+

HTTP Request

+GET /apis/extensions/v1beta1/replicasets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSetList
OK
+

Watch

+

watch changes to an object of kind ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of ReplicaSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/extensions/v1beta1/watch/replicasets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified ReplicaSet

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Read Status

+

read status of the specified ReplicaSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
ReplicaSet
OK
+

Replace Status

+

replace status of the specified ReplicaSet

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the ReplicaSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
ReplicaSet
+

Response

+ + + + + + +
CodeDescription
201
ReplicaSet
Created
200
ReplicaSet
OK
+

Misc Operations

+

Read Scale

+

read scale of the specified ReplicaSet

+

HTTP Request

+GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified ReplicaSet

+

HTTP Request

+PUT /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified ReplicaSet

+

HTTP Request

+PATCH /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

ReplicaSetCondition v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2ReplicaSetCondition
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
lastTransitionTime
Time
The last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of replica set condition.
+

ReplicaSetCondition v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1ReplicaSetCondition
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
The last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of replica set condition.
+

ResourceAttributes v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1ResourceAttributes
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + + + + +
FieldDescription
group
string
Group is the API Group of the Resource. "*" means all.
name
string
Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
namespace
string
Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
resource
string
Resource is one of the existing resource types. "*" means all.
subresource
string
Subresource is one of the existing resource types. "" means none.
verb
string
Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all.
version
string
Version is the API Version of the Resource. "*" means all.
+

ResourceMetricSource v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1ResourceMetricSource
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + +
FieldDescription
name
string
name is the name of the resource in question.
targetAverageUtilization
integer
targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.
targetAverageValue
Quantity
targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type.
+

ResourceMetricStatus v2beta1 autoscaling

+ + + + + +
GroupVersionKind
autoscalingv2beta1ResourceMetricStatus
+
Other API versions of this object exist: +v2beta2 +
+ + + + + + + + +
FieldDescription
currentAverageUtilization
integer
currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.
currentAverageValue
Quantity
currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. It will always be set, regardless of the corresponding metric specification.
name
string
name is the name of the resource in question.
+

ResourceRule v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1ResourceRule
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiGroups
string array
APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "*" means all.
resourceNames
string array
ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. "*" means all.
resources
string array
Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups.
verbs
string array
Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. "*" means all.
+

Role v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1Role
+
Other API versions of this object exist: +v1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
rules
PolicyRule array
Rules holds all the PolicyRules for this Role
+

RoleList v1beta1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Role array
Items is a list of Roles
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a Role

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Role
+

Response

+ + + + + + + +
CodeDescription
202
Role
Accepted
200
Role
OK
201
Role
Created
+

Patch

+

partially update the specified Role

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Role
OK
+

Replace

+

replace the specified Role

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Role
+

Response

+ + + + + + +
CodeDescription
200
Role
OK
201
Role
Created
+

Delete

+

delete a Role

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Role

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Role
OK
+

List

+

list or watch objects of kind Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleList
OK
+

List All Namespaces

+

list or watch objects of kind Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/roles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleList
OK
+

Watch

+

watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/roles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Role v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1Role
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
rules
PolicyRule array
Rules holds all the PolicyRules for this Role
+

RoleList v1alpha1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
Role array
Items is a list of Roles
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a Role

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Role
+

Response

+ + + + + + + +
CodeDescription
200
Role
OK
201
Role
Created
202
Role
Accepted
+

Patch

+

partially update the specified Role

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Role
OK
+

Replace

+

replace the specified Role

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Role
+

Response

+ + + + + + +
CodeDescription
200
Role
OK
201
Role
Created
+

Delete

+

delete a Role

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of Role

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Role
OK
+

List

+

list or watch objects of kind Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleList
OK
+

List All Namespaces

+

list or watch objects of kind Role

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/roles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleList
OK
+

Watch

+

watch changes to an object of kind Role. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Role
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of Role. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/roles +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

RoleBinding v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1RoleBinding
+
Other API versions of this object exist: +v1 +v1alpha1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
roleRef
RoleRef
RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.
subjects
Subject array
Subjects holds references to the objects the role applies to.
+

RoleBindingList v1beta1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
RoleBinding array
Items is a list of RoleBindings
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a RoleBinding

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
RoleBinding
+

Response

+ + + + + + + +
CodeDescription
201
RoleBinding
Created
202
RoleBinding
Accepted
200
RoleBinding
OK
+

Patch

+

partially update the specified RoleBinding

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
RoleBinding
OK
+

Replace

+

replace the specified RoleBinding

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
RoleBinding
+

Response

+ + + + + + +
CodeDescription
200
RoleBinding
OK
201
RoleBinding
Created
+

Delete

+

delete a RoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
202
Status
Accepted
200
Status
OK
+

Delete Collection

+

delete collection of RoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
RoleBinding
OK
+

List

+

list or watch objects of kind RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleBindingList
OK
+

List All Namespaces

+

list or watch objects of kind RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/rolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleBindingList
OK
+

Watch

+

watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

RoleBinding v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1RoleBinding
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata.
roleRef
RoleRef
RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.
subjects
Subject array
Subjects holds references to the objects the role applies to.
+

RoleBindingList v1alpha1 rbac

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
RoleBinding array
Items is a list of RoleBindings
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard object's metadata.
+

Write Operations

+

Create

+

create a RoleBinding

+

HTTP Request

+POST /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
RoleBinding
+

Response

+ + + + + + + +
CodeDescription
200
RoleBinding
OK
201
RoleBinding
Created
202
RoleBinding
Accepted
+

Patch

+

partially update the specified RoleBinding

+

HTTP Request

+PATCH /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
RoleBinding
OK
+

Replace

+

replace the specified RoleBinding

+

HTTP Request

+PUT /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
RoleBinding
+

Response

+ + + + + + +
CodeDescription
200
RoleBinding
OK
201
RoleBinding
Created
+

Delete

+

delete a RoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of RoleBinding

+

HTTP Request

+DELETE /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
RoleBinding
OK
+

List

+

list or watch objects of kind RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleBindingList
OK
+

List All Namespaces

+

list or watch objects of kind RoleBinding

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/rolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
RoleBindingList
OK
+

Watch

+

watch changes to an object of kind RoleBinding. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the RoleBinding
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of RoleBinding. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/rbac.authorization.k8s.io/v1alpha1/watch/rolebindings +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

RoleRef v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1RoleRef
+
Other API versions of this object exist: +v1 +v1alpha1 +
+ + + + + + + + +
FieldDescription
apiGroup
string
APIGroup is the group for the resource being referenced
kind
string
Kind is the type of resource being referenced
name
string
Name is the name of resource being referenced
+

RoleRef v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1RoleRef
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + + + +
FieldDescription
apiGroup
string
APIGroup is the group for the resource being referenced
kind
string
Kind is the type of resource being referenced
name
string
Name is the name of resource being referenced
+

RollbackConfig v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1RollbackConfig
+ + + + + + +
FieldDescription
revision
integer
The revision to rollback to. If set to 0, rollback to the last revision.
+

RollingUpdateStatefulSetStrategy v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2RollingUpdateStatefulSetStrategy
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + +
FieldDescription
partition
integer
Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.
+

RollingUpdateStatefulSetStrategy v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1RollingUpdateStatefulSetStrategy
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + +
FieldDescription
partition
integer
Partition indicates the ordinal at which the StatefulSet should be partitioned.
+

RunAsUserStrategyOptions v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1RunAsUserStrategyOptions
+ + + + + + + +
FieldDescription
ranges
IDRange array
ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.
rule
string
rule is the strategy that will dictate the allowable RunAsUser values that may be set.
+

SELinuxStrategyOptions v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1SELinuxStrategyOptions
+ + + + + + + +
FieldDescription
rule
string
rule is the strategy that will dictate the allowable labels that may be set.
seLinuxOptions
SELinuxOptions
seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+

Scale v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2Scale
+
Other API versions of this object exist: +v1 +v1beta1 +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
spec
ScaleSpec
defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
ScaleStatus
current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.
+

ScaleSpec v1beta2 apps

+
Appears In: + +
+ + + + + +
FieldDescription
replicas
integer
desired number of instances for the scaled object.
+

ScaleStatus v1beta2 apps

+
Appears In: + +
+ + + + + + + +
FieldDescription
replicas
integer
actual number of observed instances of the scaled object.
selector
object
label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors
targetSelector
string
label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
+

Scale v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1Scale
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
spec
ScaleSpec
defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
ScaleStatus
current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.
+

ScaleSpec v1beta1 apps

+
Appears In: + +
+ + + + + +
FieldDescription
replicas
integer
desired number of instances for the scaled object.
+

ScaleStatus v1beta1 apps

+
Appears In: + +
+ + + + + + + +
FieldDescription
replicas
integer
actual number of observed instances of the scaled object.
selector
object
label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors
targetSelector
string
label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
+

Scale v1beta1 extensions

+ + + + + +
GroupVersionKind
extensionsv1beta1Scale
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.
spec
ScaleSpec
defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
status
ScaleStatus
current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.
+

ScaleSpec v1beta1 extensions

+
Appears In: + +
+ + + + + +
FieldDescription
replicas
integer
desired number of instances for the scaled object.
+

ScaleStatus v1beta1 extensions

+
Appears In: + +
+ + + + + + + +
FieldDescription
replicas
integer
actual number of observed instances of the scaled object.
selector
object
label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors
targetSelector
string
label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
+

SelfSubjectAccessReview v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1SelfSubjectAccessReview
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SelfSubjectAccessReviewSpec
Spec holds information about the request being evaluated. user and groups must be empty
status
SubjectAccessReviewStatus
Status is filled in by the server and indicates whether the request is allowed or not
+

SelfSubjectAccessReviewSpec v1beta1 authorization

+ + + + + + + +
FieldDescription
nonResourceAttributes
NonResourceAttributes
NonResourceAttributes describes information for a non-resource access request
resourceAttributes
ResourceAttributes
ResourceAuthorizationAttributes describes information for a resource access request
+

Write Operations

+

Create

+

create a SelfSubjectAccessReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1beta1/selfsubjectaccessreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
SelfSubjectAccessReview
+

Response

+ + + + + + + +
CodeDescription
200
SelfSubjectAccessReview
OK
201
SelfSubjectAccessReview
Created
202
SelfSubjectAccessReview
Accepted
+

SelfSubjectRulesReview v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1SelfSubjectRulesReview
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SelfSubjectRulesReviewSpec
Spec holds information about the request being evaluated.
status
SubjectRulesReviewStatus
Status is filled in by the server and indicates the set of actions a user can perform.
+

SelfSubjectRulesReviewSpec v1beta1 authorization

+ + + + + + +
FieldDescription
namespace
string
Namespace to evaluate rules for. Required.
+

Write Operations

+

Create

+

create a SelfSubjectRulesReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1beta1/selfsubjectrulesreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
SelfSubjectRulesReview
+

Response

+ + + + + + + +
CodeDescription
200
SelfSubjectRulesReview
OK
201
SelfSubjectRulesReview
Created
202
SelfSubjectRulesReview
Accepted
+

ServiceReference v1beta1 admissionregistration.k8s.io

+ + + + + +
GroupVersionKind
admissionregistration.k8s.iov1beta1ServiceReference
+
Other API versions of this object exist: +v1 +
+ + + + + + + + +
FieldDescription
name
string
`name` is the name of the service. Required
namespace
string
`namespace` is the namespace of the service. Required
path
string
`path` is an optional URL path which will be sent in any request to this service.
+

ServiceReference v1beta1 apiregistration.k8s.io

+ + + + + +
GroupVersionKind
apiregistration.k8s.iov1beta1ServiceReference
+
Other API versions of this object exist: +v1 +
+ + + + + + + +
FieldDescription
name
string
Name is the name of the service
namespace
string
Namespace is the namespace of the service
+

StatefulSet v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2StatefulSet
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
StatefulSetSpec
Spec defines the desired identities of pods in this set.
status
StatefulSetStatus
Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.
+

StatefulSetSpec v1beta2 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
podManagementPolicy
string
podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.
replicas
integer
replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.
revisionHistoryLimit
integer
revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.
selector
LabelSelector
selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
serviceName
string
serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.
template
PodTemplateSpec
template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.
updateStrategy
StatefulSetUpdateStrategy
updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.
volumeClaimTemplates
PersistentVolumeClaim array
volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.
+

StatefulSetStatus v1beta2 apps

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
collisionCount
integer
collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.
conditions
StatefulSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a statefulset's current state.
currentReplicas
integer
currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.
currentRevision
string
currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).
observedGeneration
integer
observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.
readyReplicas
integer
readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.
replicas
integer
replicas is the number of Pods created by the StatefulSet controller.
updateRevision
string
updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
updatedReplicas
integer
updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.
+

StatefulSetList v1beta2 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
StatefulSet array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create a StatefulSet

+

HTTP Request

+POST /apis/apps/v1beta2/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + + +
CodeDescription
201
StatefulSet
Created
202
StatefulSet
Accepted
200
StatefulSet
OK
+

Patch

+

partially update the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Replace

+

replace the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
+

Delete

+

delete a StatefulSet

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of StatefulSet

+

HTTP Request

+DELETE /apis/apps/v1beta2/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

List

+

list or watch objects of kind StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StatefulSetList
OK
+

List All Namespaces

+

list or watch objects of kind StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta2/statefulsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StatefulSetList
OK
+

Watch

+

watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta2/watch/statefulsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Read Status

+

read status of the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Replace Status

+

replace status of the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
201
Scale
Created
200
Scale
OK
+

Patch Scale

+

partially update scale of the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

StatefulSet v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1StatefulSet
+
Other API versions of this object exist: +v1 +v1beta2 +
+
Appears In: + +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
StatefulSetSpec
Spec defines the desired identities of pods in this set.
status
StatefulSetStatus
Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.
+

StatefulSetSpec v1beta1 apps

+
Appears In: + +
+ + + + + + + + + + + + +
FieldDescription
podManagementPolicy
string
podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.
replicas
integer
replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.
revisionHistoryLimit
integer
revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.
selector
LabelSelector
selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
serviceName
string
serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller.
template
PodTemplateSpec
template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.
updateStrategy
StatefulSetUpdateStrategy
updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.
volumeClaimTemplates
PersistentVolumeClaim array
volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.
+

StatefulSetStatus v1beta1 apps

+
Appears In: + +
+ + + + + + + + + + + + + +
FieldDescription
collisionCount
integer
collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.
conditions
StatefulSetCondition array
patch strategy: merge
patch merge key: type
Represents the latest available observations of a statefulset's current state.
currentReplicas
integer
currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.
currentRevision
string
currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).
observedGeneration
integer
observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.
readyReplicas
integer
readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.
replicas
integer
replicas is the number of Pods created by the StatefulSet controller.
updateRevision
string
updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
updatedReplicas
integer
updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.
+

StatefulSetList v1beta1 apps

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
StatefulSet array
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
+

Write Operations

+

Create

+

create a StatefulSet

+

HTTP Request

+POST /apis/apps/v1beta1/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
202
StatefulSet
Accepted
+

Patch

+

partially update the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Replace

+

replace the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
+

Delete

+

delete a StatefulSet

+

HTTP Request

+DELETE /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of StatefulSet

+

HTTP Request

+DELETE /apis/apps/v1beta1/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

List

+

list or watch objects of kind StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StatefulSetList
OK
+

List All Namespaces

+

list or watch objects of kind StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta1/statefulsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StatefulSetList
OK
+

Watch

+

watch changes to an object of kind StatefulSet. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name} +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets +

Path Parameters

+ + + + + +
ParameterDescription
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List All Namespaces

+

watch individual changes to a list of StatefulSet. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/apps/v1beta1/watch/statefulsets +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Status Operations

+

Patch Status

+

partially update status of the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Read Status

+

read status of the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
StatefulSet
OK
+

Replace Status

+

replace status of the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the StatefulSet
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StatefulSet
+

Response

+ + + + + + +
CodeDescription
200
StatefulSet
OK
201
StatefulSet
Created
+

Misc Operations

+

Read Scale

+

read scale of the specified StatefulSet

+

HTTP Request

+GET /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

Replace Scale

+

replace scale of the specified StatefulSet

+

HTTP Request

+PUT /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Scale
+

Response

+ + + + + + +
CodeDescription
200
Scale
OK
201
Scale
Created
+

Patch Scale

+

partially update scale of the specified StatefulSet

+

HTTP Request

+PATCH /apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale +

Path Parameters

+ + + + + + +
ParameterDescription
namename of the Scale
namespaceobject name and auth scope, such as for teams and projects
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
Scale
OK
+

StatefulSetCondition v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2StatefulSetCondition
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of statefulset condition.
+

StatefulSetCondition v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1StatefulSetCondition
+
Other API versions of this object exist: +v1 +v1beta2 +
+ + + + + + + + + + +
FieldDescription
lastTransitionTime
Time
Last time the condition transitioned from one status to another.
message
string
A human readable message indicating details about the transition.
reason
string
The reason for the condition's last transition.
status
string
Status of the condition, one of True, False, Unknown.
type
string
Type of statefulset condition.
+

StatefulSetUpdateStrategy v1beta2 apps

+ + + + + +
GroupVersionKind
appsv1beta2StatefulSetUpdateStrategy
+
Other API versions of this object exist: +v1 +v1beta1 +
+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateStatefulSetStrategy
RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.
type
string
Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.
+

StatefulSetUpdateStrategy v1beta1 apps

+ + + + + +
GroupVersionKind
appsv1beta1StatefulSetUpdateStrategy
+
Other API versions of this object exist: +v1 +v1beta2 +
+
Appears In: + +
+ + + + + + +
FieldDescription
rollingUpdate
RollingUpdateStatefulSetStrategy
RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.
type
string
Type indicates the type of the StatefulSetUpdateStrategy.
+

StorageClass v1beta1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1beta1StorageClass
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + + + + + + + +
FieldDescription
allowVolumeExpansion
boolean
AllowVolumeExpansion shows whether the storage class allow volume expand
allowedTopologies
TopologySelectorTerm array
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.
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
mountOptions
string array
Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. ["ro", "soft"]. Not validated - mount of the PVs will simply fail if one is invalid.
parameters
object
Parameters holds the parameters for the provisioner that should create volumes of this storage class.
provisioner
string
Provisioner indicates the type of the provisioner.
reclaimPolicy
string
Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.
volumeBindingMode
string
VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.
+

StorageClassList v1beta1 storage

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
StorageClass array
Items is the list of StorageClasses
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a StorageClass

+

HTTP Request

+POST /apis/storage.k8s.io/v1beta1/storageclasses +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StorageClass
+

Response

+ + + + + + + +
CodeDescription
201
StorageClass
Created
202
StorageClass
Accepted
200
StorageClass
OK
+

Patch

+

partially update the specified StorageClass

+

HTTP Request

+PATCH /apis/storage.k8s.io/v1beta1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
StorageClass
OK
+

Replace

+

replace the specified StorageClass

+

HTTP Request

+PUT /apis/storage.k8s.io/v1beta1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
StorageClass
+

Response

+ + + + + + +
CodeDescription
200
StorageClass
OK
201
StorageClass
Created
+

Delete

+

delete a StorageClass

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1beta1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of StorageClass

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1beta1/storageclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified StorageClass

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
StorageClass
OK
+

List

+

list or watch objects of kind StorageClass

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/storageclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
StorageClassList
OK
+

Watch

+

watch changes to an object of kind StorageClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/watch/storageclasses/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the StorageClass
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of StorageClass. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/storage.k8s.io/v1beta1/watch/storageclasses +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Subject v1beta1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1beta1Subject
+
Other API versions of this object exist: +v1 +v1alpha1 +
+ + + + + + + + + +
FieldDescription
apiGroup
string
APIGroup holds the API group of the referenced subject. Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User and Group subjects.
kind
string
Kind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount". If the Authorizer does not recognized the kind value, the Authorizer should report an error.
name
string
Name of the object being referenced.
namespace
string
Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.
+

Subject v1alpha1 rbac.authorization.k8s.io

+ + + + + +
GroupVersionKind
rbac.authorization.k8s.iov1alpha1Subject
+
Other API versions of this object exist: +v1 +v1beta1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion holds the API group and version of the referenced subject. Defaults to "v1" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io/v1alpha1" for User and Group subjects.
kind
string
Kind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount". If the Authorizer does not recognized the kind value, the Authorizer should report an error.
name
string
Name of the object being referenced.
namespace
string
Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.
+

SubjectAccessReview v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1SubjectAccessReview
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
SubjectAccessReviewSpec
Spec holds information about the request being evaluated
status
SubjectAccessReviewStatus
Status is filled in by the server and indicates whether the request is allowed or not
+

SubjectAccessReviewSpec v1beta1 authorization

+ + + + + + + + + + + +
FieldDescription
extra
object
Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.
group
string array
Groups is the groups you're testing for.
nonResourceAttributes
NonResourceAttributes
NonResourceAttributes describes information for a non-resource access request
resourceAttributes
ResourceAttributes
ResourceAuthorizationAttributes describes information for a resource access request
uid
string
UID information about the requesting user.
user
string
User is the user you're testing for. If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups
+

SubjectAccessReviewStatus v1beta1 authorization

+ + + + + + + + + +
FieldDescription
allowed
boolean
Allowed is required. True if the action would be allowed, false otherwise.
denied
boolean
Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.
evaluationError
string
EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
reason
string
Reason is optional. It indicates why a request was allowed or denied.
+

Write Operations

+

Create

+

create a SubjectAccessReview

+

HTTP Request

+POST /apis/authorization.k8s.io/v1beta1/subjectaccessreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
SubjectAccessReview
+

Response

+ + + + + + + +
CodeDescription
201
SubjectAccessReview
Created
202
SubjectAccessReview
Accepted
200
SubjectAccessReview
OK
+

SubjectRulesReviewStatus v1beta1 authorization.k8s.io

+ + + + + +
GroupVersionKind
authorization.k8s.iov1beta1SubjectRulesReviewStatus
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
evaluationError
string
EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.
incomplete
boolean
Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
nonResourceRules
NonResourceRule array
NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
resourceRules
ResourceRule array
ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
+

SupplementalGroupsStrategyOptions v1beta1 policy

+ + + + + +
GroupVersionKind
policyv1beta1SupplementalGroupsStrategyOptions
+ + + + + + + +
FieldDescription
ranges
IDRange array
ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.
rule
string
rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.
+

TokenReview v1beta1 authentication.k8s.io

+ + + + + +
GroupVersionKind
authentication.k8s.iov1beta1TokenReview
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
spec
TokenReviewSpec
Spec holds information about the request being evaluated
status
TokenReviewStatus
Status is filled in by the server and indicates whether the request can be authenticated.
+

TokenReviewSpec v1beta1 authentication

+ + + + + + +
FieldDescription
token
string
Token is the opaque bearer token.
+

TokenReviewStatus v1beta1 authentication

+ + + + + + + + +
FieldDescription
authenticated
boolean
Authenticated indicates that the token was associated with a known user.
error
string
Error indicates that the token couldn't be checked
user
UserInfo
User is the UserInfo associated with the provided token.
+

Write Operations

+

Create

+

create a TokenReview

+

HTTP Request

+POST /apis/authentication.k8s.io/v1beta1/tokenreviews +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
TokenReview
+

Response

+ + + + + + + +
CodeDescription
202
TokenReview
Accepted
200
TokenReview
OK
201
TokenReview
Created
+

UserInfo v1beta1 authentication.k8s.io

+ + + + + +
GroupVersionKind
authentication.k8s.iov1beta1UserInfo
+
Other API versions of this object exist: +v1 +
+ + + + + + + + + +
FieldDescription
extra
object
Any additional information provided by the authenticator.
groups
string array
The names of groups this user is a part of.
uid
string
A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.
username
string
The name that uniquely identifies this user among all active users.
+

VolumeAttachment v1alpha1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1alpha1VolumeAttachment
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ObjectMeta
Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec
VolumeAttachmentSpec
Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.
status
VolumeAttachmentStatus
Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.
+

VolumeAttachmentSpec v1alpha1 storage

+ + + + + + + + +
FieldDescription
attacher
string
Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().
nodeName
string
The node that the volume should be attached to.
source
VolumeAttachmentSource
Source represents the volume that should be attached.
+

VolumeAttachmentStatus v1alpha1 storage

+ + + + + + + + + +
FieldDescription
attachError
VolumeError
The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.
attached
boolean
Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.
attachmentMetadata
object
Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.
detachError
VolumeError
The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.
+

VolumeAttachmentList v1alpha1 storage

+ + + + + + + + +
FieldDescription
apiVersion
string
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
items
VolumeAttachment array
Items is the list of VolumeAttachments
kind
string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata
ListMeta
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+

Write Operations

+

Create

+

create a VolumeAttachment

+

HTTP Request

+POST /apis/storage.k8s.io/v1alpha1/volumeattachments +

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
VolumeAttachment
+

Response

+ + + + + + + +
CodeDescription
200
VolumeAttachment
OK
201
VolumeAttachment
Created
202
VolumeAttachment
Accepted
+

Patch

+

partially update the specified VolumeAttachment

+

HTTP Request

+PATCH /apis/storage.k8s.io/v1alpha1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
Patch
+

Response

+ + + + + +
CodeDescription
200
VolumeAttachment
OK
+

Replace

+

replace the specified VolumeAttachment

+

HTTP Request

+PUT /apis/storage.k8s.io/v1alpha1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
+

Body Parameters

+ + + + + +
ParameterDescription
body
VolumeAttachment
+

Response

+ + + + + + +
CodeDescription
200
VolumeAttachment
OK
201
VolumeAttachment
Created
+

Delete

+

delete a VolumeAttachment

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1alpha1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
dryRunWhen present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
gracePeriodSecondsThe duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.
orphanDependentsDeprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.
propagationPolicyWhether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.
+

Body Parameters

+ + + + + +
ParameterDescription
body
DeleteOptions
+

Response

+ + + + + + +
CodeDescription
200
Status
OK
202
Status
Accepted
+

Delete Collection

+

delete collection of VolumeAttachment

+

HTTP Request

+DELETE /apis/storage.k8s.io/v1alpha1/volumeattachments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
Status
OK
+

Read Operations

+

Read

+

read the specified VolumeAttachment

+

HTTP Request

+GET /apis/storage.k8s.io/v1alpha1/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
exactShould the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.
exportShould this value be exported. Export strips fields that a user can not specify.
+

Response

+ + + + + +
CodeDescription
200
VolumeAttachment
OK
+

List

+

list or watch objects of kind VolumeAttachment

+

HTTP Request

+GET /apis/storage.k8s.io/v1alpha1/volumeattachments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
prettyIf 'true', then the output is pretty printed.
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
VolumeAttachmentList
OK
+

Watch

+

watch changes to an object of kind VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.

+

HTTP Request

+GET /apis/storage.k8s.io/v1alpha1/watch/volumeattachments/{name} +

Path Parameters

+ + + + + +
ParameterDescription
namename of the VolumeAttachment
+

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

Watch List

+

watch individual changes to a list of VolumeAttachment. deprecated: use the 'watch' parameter with a list operation instead.

+

HTTP Request

+GET /apis/storage.k8s.io/v1alpha1/watch/volumeattachments +

Query Parameters

+ + + + + + + + + + + + + +
ParameterDescription
continueThe continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the "next key". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.
fieldSelectorA selector to restrict the list of returned objects by their fields. Defaults to everything.
includeUninitializedIf true, partially initialized resources are included in the response.
labelSelectorA selector to restrict the list of returned objects by their labels. Defaults to everything.
limitlimit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.
prettyIf 'true', then the output is pretty printed.
resourceVersionWhen specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.
timeoutSecondsTimeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.
watchWatch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
+

Response

+ + + + + +
CodeDescription
200
WatchEvent
OK
+

VolumeAttachmentSource v1alpha1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1alpha1VolumeAttachmentSource
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + +
FieldDescription
persistentVolumeName
string
Name of the persistent volume to attach.
+

VolumeError v1alpha1 storage.k8s.io

+ + + + + +
GroupVersionKind
storage.k8s.iov1alpha1VolumeError
+
Other API versions of this object exist: +v1beta1 +
+ + + + + + + +
FieldDescription
message
string
String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.
time
Time
Time the error was encountered.
+
+
+ + + + + + + diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/jquery.scrollTo.min.js b/static/docs/reference/generated/kubernetes-api/v1.12/jquery.scrollTo.min.js new file mode 100644 index 0000000000..65a020d92a --- /dev/null +++ b/static/docs/reference/generated/kubernetes-api/v1.12/jquery.scrollTo.min.js @@ -0,0 +1,7 @@ +/** + * Copyright (c) 2007-2015 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1= node.offset().top) { + activeElemToken = token; + } + } + if (!prevElemToken) { + getNavElemNode(activeElemToken).addClass('selected'); + prevElemToken = activeElemToken; + return; + } + if (activeElemToken !== prevElemToken) { + getNavElemNode(prevElemToken).removeClass('selected'); + getNavElemNode(activeElemToken).addClass('selected'); + prevElemToken = activeElemToken; + } + return activeElemToken; + } + + function getHeadingNode(token) { + return $('#' + token); + } + + function getNavNode(token) { + return $('#' + token + '-nav'); + } + + function getNavElemNode(token) { + return $('#sidebar-wrapper > ul a[href="#' + token + '"]'); + } + + function checkNodePositions(nodes, flatNodeMap, scrollPosition) { + var activeNode; + for (var i = 0; i < nodes.length; i++) { + var item = nodes[i]; + var node = flatNodeMap[item.section]; + var nodeTop = node.offset().top - 50; + if (scrollPosition >= nodeTop) { + activeNode = {token: item.section, node: node}; + + if (item.subsections) { + activeNode.subsections = item.subsections; + } + break; + } + } + return activeNode; + } + + function scrollToNav(token) { + setTimeout(function() { + var scrollPosition = $(window).scrollTop(); + var activeSectionTokens = scrollActions(scrollPosition); + var activeElemToken = checkActiveElement(flatToc, scrollPosition); + var navNode = $('#sidebar-wrapper > ul a[href="#' + token + '"]'); + $('#sidebar-wrapper').scrollTo(navNode, {duration: 'fast', axis: 'y'}); + }, 200); + } + + $(window).on('hashchange', function(event) { + var scrollPosition = $(window).scrollTop(); + var activeSectionTokens = scrollActions(scrollPosition); + var activeElemToken = checkActiveElement(flatToc, scrollPosition); + var scrollToken = activeSectionTokens.L2 ? activeSectionTokens.L2 : activeSectionTokens.L1; + scrollToNav(scrollToken); + var token = location.hash.slice(1); + }); + + var scrollPosition = $(window).scrollTop(); + scrollActions(scrollPosition); + checkActiveElement(flatToc, scrollPosition); + // TODO: prevent scroll on sidebar from propogating to window + $(window).on('scroll', function(event) { + var scrollPosition = $(window).scrollTop(); + var activeSectionTokens = scrollActions(scrollPosition); + var activeElemToken = checkActiveElement(flatToc, scrollPosition); + }); +}); \ No newline at end of file From 56c011bae1ca84eecbc50e67bf8c4866894473db Mon Sep 17 00:00:00 2001 From: SataQiu <1527062125@qq.com> Date: Fri, 28 Sep 2018 16:03:16 +0800 Subject: [PATCH 005/181] fix typo (#10410) --- .../en/docs/tasks/run-application/horizontal-pod-autoscale.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md index 078d2c537f..c5b13d9bfd 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md @@ -99,7 +99,7 @@ desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricVal For example, if the current metric value is `200m`, and the desired value is `100m`, the number of replicas will be doubled, since `200.0 / 100.0 == -2.0` If the the current value is instead `50m`, we'll halve the number of +2.0` If the current value is instead `50m`, we'll halve the number of replicas, since `50.0 / 100.0 == 0.5`. We'll skip scaling if the ratio is sufficiently close to 1.0 (within a globally-configurable tolerance, from the `--horizontal-pod-autoscaler-tolerance` flag, which defaults to 0.1). From 3d27ae5a76888ea1a14739d9d163aca8ccf7e38f Mon Sep 17 00:00:00 2001 From: LiuDui <40875627+xichengliudui@users.noreply.github.com> Date: Fri, 28 Sep 2018 23:37:45 +0800 Subject: [PATCH 006/181] You remove the extra 'If' (#10414) * You remove the extra 'If' * Update 2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md --- .../2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md b/content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md index 70b2359b8d..b8747f50f3 100644 --- a/content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md +++ b/content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md @@ -205,7 +205,7 @@ This environment variable is a hint to the container initialization logic as to -The tests below assume that the psql client has been installed on the test system. If if not, the psql client has been previously installed, it can be installed as follows: +The tests below assume that the psql client has been installed on the test system. If not, the psql client has been previously installed, it can be installed as follows: From 38a4187f156f2186d4f02463b8f9fc147d5dbe2d Mon Sep 17 00:00:00 2001 From: Steve Perry Date: Sat, 29 Sep 2018 10:37:57 -0700 Subject: [PATCH 007/181] Update kubectl command ref docs for 1.12. (#10426) * Update kubectl command ref docs for 1.12. * Create diff for kubectl commands 1.11, 1.12. * Add explanation and white space to diff file. --- .../kubectl/diff-kubectl-cmds-1.11-1.12 | 383 ++++++++++ .../generated/kubectl/kubectl-commands.html | 694 +++++++++++++++--- .../reference/generated/kubectl/navData.js | 2 +- 3 files changed, 984 insertions(+), 95 deletions(-) create mode 100644 static/docs/reference/generated/kubectl/diff-kubectl-cmds-1.11-1.12 diff --git a/static/docs/reference/generated/kubectl/diff-kubectl-cmds-1.11-1.12 b/static/docs/reference/generated/kubectl/diff-kubectl-cmds-1.11-1.12 new file mode 100644 index 0000000000..4980730998 --- /dev/null +++ b/static/docs/reference/generated/kubectl/diff-kubectl-cmds-1.11-1.12 @@ -0,0 +1,383 @@ +When you run the generator for the kubectl command ref docs, +you get a set of markdown files in +kubernetes-incubator/reference-docs/gen-kubectldocs/generators/build/documents. + +This file is a diff of the build/documents directory for 1.11 +and the build/documents directory for 1.12. + + +diff -r v1_11/_generated_apply.md v1_12/_generated_apply.md +56c56 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +62a63 +> server-dry-run | | false | If true, request will be sent to server with dry-run flag, which means the modifications won't be persisted. This is an alpha feature and flag. +105a107 +> allow-missing-template-keys | | true | If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. +108c110 +< output | o | yaml | Output format. One of: yaml|json. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +110a113 +> template | | | Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +154c157 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_auth.md v1_12/_generated_auth.md +105c105 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +106a107,108 +> remove-extra-permissions | | false | If true, removes extra permissions added to roles +> remove-extra-subjects | | false | If true, removes extra subjects added to rolebindings + + +diff -r v1_11/_generated_autoscale.md v1_12/_generated_autoscale.md +41c41 +< output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_certificate.md v1_12/_generated_certificate.md +70c70 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_cluster-info.md v1_12/_generated_cluster-info.md +67c67 +< output | o | json | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | json | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath-file|jsonpath. + + +diff -r v1_11/_generated_completion.md v1_12/_generated_completion.md +24c24 +< >bdocs-tab:example Installing bash completion on Linux ## Load the kubectl completion code for bash into the current shell +--- +> >bdocs-tab:example Installing bash completion on Linux ## If bash-completion is not installed on Linux, please install the 'bash-completion' package ## via your distribution's package manager. ## Load the kubectl completion code for bash into the current shell + + +diff -r v1_11/_generated_config.md v1_12/_generated_config.md +12,13c12,13 +< 1. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place. +< 2. If $KUBECONFIG environment variable is set, then it is used a list of paths (normal path delimitting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list. +--- +> 1. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place. +> 2. If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimitting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list. +246c246 +< `$ set-context NAME [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]` +--- +> `$ set-context [NAME | --current] [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]` +249a250,256 +> ### Flags +> +> Name | Shorthand | Default | Usage +> ---- | --------- | ------- | ----- +> current | | false | Modify the current context +> +> +414c421 +< output | o | yaml | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +--- +> output | o | yaml | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_convert.md v1_12/_generated_convert.md +44,45c44,45 +< output | o | yaml | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +< output-version | | | Output the formatted object with the given group version (for ex: 'extensions/v1beta1').) +--- +> output | o | yaml | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +> output-version | | | Output the formatted object with the given group version (for ex: 'extensions/v1beta1'). + + +diff -r v1_11/_generated_create.md v1_12/_generated_create.md +111c111 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +217c217 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +251c251 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +261a262,273 +> >bdocs-tab:example Create a job +> +> ```bdocs-tab:example_shell +> kubectl create job my-job --image=busybox +> ``` +> +> >bdocs-tab:example Create a job with command +> +> ```bdocs-tab:example_shell +> kubectl create job my-job --image=busybox -- date +> ``` +> +273c285 +< `$ job NAME [--from=CRONJOB]` +--- +> `$ job NAME [--image=image --from=cronjob/name] -- [COMMAND] [args...]` +283a296 +> image | | | Image name to run. +358c371 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +373c386 +< kubectl create priorityclass default-priority --value=1000 --description="high priority" +--- +> kubectl create priorityclass high-priority --value=1000 --description="high priority" +400c413 +< output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +441c454 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +530c543 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +664c677 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +795c808 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +829c842 +< output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +864c877 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +898c911 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_edit.md v1_12/_generated_edit.md +56c56 +< output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_expose.md v1_12/_generated_expose.md +59c59 +< `$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]` +--- +> `$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]` +77c77 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_label.md v1_12/_generated_label.md +68c68 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_logs.md v1_12/_generated_logs.md +76d75 +< interactive | | false | If true, prompt the user for input when required. + + +diff -r v1_11/_generated_patch.md v1_12/_generated_patch.md +57c57 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_plugin.md v1_12/_generated_plugin.md +8c8 +< Runs a command-line plugin. +--- +> Provides utilities for interacting with plugins. +10c10 +< Plugins are subcommands that are not part of the major command-line distribution and can even be provided by third-parties. Please refer to the documentation and examples for more information about how to install and write your own plugins. +--- +> Plugins provide extended functionality that is not part of the major command-line distribution. Please refer to the documentation and examples for more information about how write your own plugins. +14c14,38 +< `$ plugin NAME` +--- +> `$ plugin [flags]` +> +> +> +> ------------ +> +> ## list +> +> +> +> List all available plugin files on a user's PATH. +> +> Available plugin files are those that are: - executable - anywhere on the user's PATH - begin with "kubectl-" +> +> ### Usage +> +> `$ list` +> +> +> +> ### Flags +> +> Name | Shorthand | Default | Usage +> ---- | --------- | ------- | ----- +> name-only | | false | If true, display only the binary name of each plugin, rather than its full path + + +diff -r v1_11/_generated_port-forward.md v1_12/_generated_port-forward.md +17a18,23 +> >bdocs-tab:example Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in a pod selected by the service +> +> ```bdocs-tab:example_shell +> kubectl port-forward service/myservice 5000 6000 +> ``` +> + + +diff -r v1_11/_generated_proxy.md v1_12/_generated_proxy.md +59a60 +> keepalive | | 0s | keepalive specifies the keep-alive period for an active network connection. Set to 0 to disable keepalive. + + +diff -r v1_11/_generated_replace.md v1_12/_generated_replace.md +54c54 +< output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_rolling-update.md v1_12/_generated_rolling-update.md +60c60 +< output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_rollout.md v1_12/_generated_rollout.md +61a62 +> allow-missing-template-keys | | true | If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. +62a64 +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +64a67 +> template | | | Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +92a96 +> allow-missing-template-keys | | true | If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. +93a98 +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +94a100 +> template | | | Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +122a129 +> allow-missing-template-keys | | true | If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. +123a131 +> output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +124a133 +> template | | | Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +155a165 +> timeout | | 0s | The length of time to wait before ending watch, zero means never. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h). +194a205 +> allow-missing-template-keys | | true | If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. +196a208 +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +197a210 +> template | | | Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + +diff -r v1_11/_generated_run-container.md v1_12/_generated_run-container.md +27c27 +< kubectl run hazelcast --image=nginx --labels="app=hazelcast,env=prod" +--- +> kubectl run hazelcast --image=hazelcast --labels="app=hazelcast,env=prod" + + +diff -r v1_11/_generated_run.md v1_12/_generated_run.md +27c27 +< kubectl run hazelcast --image=nginx --labels="app=hazelcast,env=prod" +--- +> kubectl run hazelcast --image=hazelcast --labels="app=hazelcast,env=prod" + + +diff -r v1_11/_generated_scale.md v1_12/_generated_scale.md +57c57 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_set.md v1_12/_generated_set.md +180c180 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. +241c241 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +282c282 +< output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. +329c329 +< output | o | | Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath-file|jsonpath. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + +diff -r v1_11/_generated_version.md v1_12/_generated_version.md +25c25 +< client | c | false | Client version only (no server required). +--- +> client | | false | Client version only (no server required). + + +diff -r v1_11/_generated_wait.md v1_12/_generated_wait.md +5a6 +> >bdocs-tab:example Wait for the pod "busybox1" to contain the status condition of type "Ready". +6a8,10 +> ```bdocs-tab:example_shell +> kubectl wait --for=condition=Ready pod/busybox1 +> ``` +7a12 +> >bdocs-tab:example Wait for the pod "busybox1" to be deleted, with a timeout of 60s, after having issued the "delete" command. +8a14,26 +> ```bdocs-tab:example_shell +> kubectl delete pod/busybox1 +> kubectl wait --for=delete pod/busybox1 --timeout=60s +> ``` +> +> +> Experimental: Wait for a specific condition on one or many resources. +> +> The command takes multiple resources and waits until the specified condition is seen in the Status field of every given resource. +> +> Alternatively, the command can wait for the given set of resources to be deleted by providing the "delete" keyword as the value to the --for flag. +> +> A successful message will be printed to stdout indicating when the specified condition has been met. One can use -o option to change to output destination. +24c42 +< output | o | | Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. +--- +> output | o | | Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. diff --git a/static/docs/reference/generated/kubectl/kubectl-commands.html b/static/docs/reference/generated/kubectl/kubectl-commands.html index c060bb0cef..22b58af1de 100644 --- a/static/docs/reference/generated/kubectl/kubectl-commands.html +++ b/static/docs/reference/generated/kubectl/kubectl-commands.html @@ -11,7 +11,7 @@ - +
  • example

GETTING STARTED

@@ -84,7 +84,7 @@ inspect them.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. raw @@ -120,7 +120,7 @@ inspect them.

template -Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. validate @@ -210,7 +210,7 @@ inspect them.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. resource @@ -234,7 +234,7 @@ inspect them.

template -Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. validate @@ -305,7 +305,7 @@ inspect them.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. save-config @@ -323,7 +323,7 @@ inspect them.

template -Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. validate @@ -423,7 +423,7 @@ inspect them.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. save-config @@ -435,7 +435,7 @@ inspect them.

template -Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. validate @@ -494,7 +494,7 @@ inspect them.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. save-config @@ -506,7 +506,7 @@ inspect them.

template -Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. validate @@ -519,13 +519,23 @@ inspect them.


job

+

Create a job

+
+
kubectl create job my-job --image=busybox
+
+
+

Create a job with command

+
+
kubectl create job my-job --image=busybox -- date
+
+

Create a job from a CronJob named "a-cronjob"

kubectl create job test-job --from=cronjob/a-cronjob
 

Create a job with the specified name.

Usage

-

$ job NAME [--from=CRONJOB]

+

$ job NAME [--image=image --from=cronjob/name] -- [COMMAND] [args...]

Flags

@@ -556,10 +566,16 @@ inspect them.

+ + + + + + - + @@ -571,7 +587,7 @@ inspect them.

- + @@ -624,7 +640,7 @@ inspect them.

- + @@ -636,7 +652,7 @@ inspect them.

- + @@ -706,7 +722,7 @@ inspect them.

- + @@ -724,7 +740,7 @@ inspect them.

- + @@ -739,7 +755,7 @@ inspect them.

Create a priorityclass named high-priority

-
kubectl create priorityclass default-priority --value=1000 --description="high priority"
+
kubectl create priorityclass high-priority --value=1000 --description="high priority"
 

Create a priorityclass named default-priority that considered as the global default priority

@@ -794,7 +810,7 @@ inspect them.

- + @@ -806,7 +822,7 @@ inspect them.

- + @@ -876,7 +892,7 @@ inspect them.

- + @@ -894,7 +910,7 @@ inspect them.

- + @@ -956,7 +972,7 @@ inspect them.

- + @@ -980,7 +996,7 @@ inspect them.

- + @@ -1051,7 +1067,7 @@ inspect them.

- + @@ -1075,7 +1091,7 @@ inspect them.

- + @@ -1176,7 +1192,7 @@ inspect them.

- + @@ -1188,7 +1204,7 @@ inspect them.

- + @@ -1288,7 +1304,7 @@ inspect them.

- + @@ -1300,7 +1316,7 @@ inspect them.

- + @@ -1378,7 +1394,7 @@ inspect them.

- + @@ -1390,7 +1406,7 @@ inspect them.

- + @@ -1459,7 +1475,7 @@ inspect them.

- + @@ -1477,7 +1493,7 @@ inspect them.

- + @@ -1537,7 +1553,7 @@ inspect them.

- + @@ -1555,7 +1571,7 @@ inspect them.

- + @@ -1608,7 +1624,7 @@ inspect them.

- + @@ -1626,7 +1642,7 @@ inspect them.

- + @@ -1685,7 +1701,7 @@ inspect them.

- + @@ -1703,7 +1719,7 @@ inspect them.

- + @@ -1756,7 +1772,7 @@ inspect them.

- + @@ -1768,7 +1784,7 @@ inspect them.

- + @@ -1907,7 +1923,7 @@ inspect them.

- + @@ -1961,7 +1977,7 @@ inspect them.

- + @@ -2003,7 +2019,7 @@ inspect them.

Start a single instance of hazelcast and set labels "app=hazelcast" and "env=prod" in the container.

-
kubectl run hazelcast --image=nginx --labels="app=hazelcast,env=prod"
+
kubectl run hazelcast --image=hazelcast --labels="app=hazelcast,env=prod"
 

Start a replicated instance of nginx.

@@ -2061,6 +2077,12 @@ inspect them.

+ + + + + + @@ -2160,7 +2182,7 @@ inspect them.

- + @@ -2259,6 +2281,12 @@ inspect them.

+ + + + + + @@ -2320,7 +2348,7 @@ inspect them.

Possible resources include (case insensitive):

pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)

Usage

-

$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

+

$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

Flags

The name of the resource to create a Job from (only cronjob is supported).
imageImage name to run.
output o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-config template Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validate output o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-config template Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validate output o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file.
save-config template Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validate output o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file.
resourcetemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath.
roletemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
typeoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file.
save-configtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validateoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
rawtemplate Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
use-openapi-print-columns
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
attach falseoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
overridesKeep stdin open on the container(s) in the pod, even if nothing is attached.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
timeout 0s
@@ -2333,6 +2361,12 @@ inspect them.

+ + + + + + @@ -2390,7 +2424,7 @@ inspect them.

- + @@ -2447,6 +2481,12 @@ inspect them.

+ + + + + + @@ -2643,6 +2683,12 @@ viewing your workloads in a Kubernetes cluster.

+ + + + + + @@ -2688,7 +2734,7 @@ viewing your workloads in a Kubernetes cluster.

- + @@ -2706,7 +2752,7 @@ viewing your workloads in a Kubernetes cluster.

- + @@ -2727,6 +2773,18 @@ viewing your workloads in a Kubernetes cluster.

+ + + + + + + + + + + + @@ -2777,6 +2835,12 @@ viewing your workloads in a Kubernetes cluster.

+ + + + + + @@ -2791,8 +2855,8 @@ viewing your workloads in a Kubernetes cluster.

- - + + @@ -2807,6 +2871,12 @@ viewing your workloads in a Kubernetes cluster.

+ + + + + + @@ -2846,6 +2916,12 @@ viewing your workloads in a Kubernetes cluster.

+ + + + + + @@ -2867,7 +2943,13 @@ viewing your workloads in a Kubernetes cluster.

- + + + + + + +
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
cluster-ip output o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
overridesName or number for the port on the container that the service should direct traffic to. Optional.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
type Select all resources in the namespace of the specified resource types.
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
cascade trueoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
overwriteprune-whitelist []Overwrite the default whitelist with for --prune Overwrite the default whitelist with <group/version/kind> for --prune
recordSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
server-dry-runfalseIf true, request will be sent to server with dry-run flag, which means the modifications won't be persisted. This is an alpha feature and flag.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
timeout 0s
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
filename f []
output oyamlOutput format. One of: yaml|json. Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file.
recordProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
windows-line-endings false
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
create-annotation falseoutput o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
@@ -2986,6 +3068,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources, including uninitialized ones, in the namespace of the specified resource types. +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -3019,7 +3107,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. overwrite @@ -3051,6 +3139,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -3081,6 +3175,12 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + cpu-percent -1 @@ -3126,7 +3226,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. record @@ -3146,6 +3246,12 @@ viewing your workloads in a Kubernetes cluster.

false If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -3182,6 +3288,12 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] @@ -3197,13 +3309,13 @@ viewing your workloads in a Kubernetes cluster.

output o yaml -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. output-version -Output the formatted object with the given group version (for ex: 'extensions/v1beta1').) +Output the formatted object with the given group version (for ex: 'extensions/v1beta1'). recursive @@ -3212,6 +3324,12 @@ viewing your workloads in a Kubernetes cluster.

Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + validate true @@ -3261,6 +3379,12 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] @@ -3276,7 +3400,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. output-patch @@ -3303,6 +3427,12 @@ viewing your workloads in a Kubernetes cluster.

If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future. +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + validate true @@ -3375,6 +3505,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources, including uninitialized ones, in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -3414,7 +3550,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. overwrite @@ -3446,6 +3582,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -3492,6 +3634,12 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -3513,7 +3661,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. patch @@ -3534,6 +3682,12 @@ viewing your workloads in a Kubernetes cluster.

Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + type strategic @@ -3581,6 +3735,12 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + cascade true @@ -3608,7 +3768,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. recursive @@ -3623,6 +3783,12 @@ viewing your workloads in a Kubernetes cluster.

If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future. +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + timeout 0s @@ -3690,12 +3856,24 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] Filename, directory, or URL to files identifying the resource to get from a server. +output +o + +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + recursive R false @@ -3707,6 +3885,12 @@ viewing your workloads in a Kubernetes cluster.

0 See the details, including podTemplate of the revision specified + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -3732,17 +3916,35 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] Filename, directory, or URL to files identifying the resource to get from a server. +output +o + +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. + + recursive R false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -3768,17 +3970,35 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] Filename, directory, or URL to files identifying the resource to get from a server. +output +o + +Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. + + recursive R false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -3822,6 +4042,12 @@ viewing your workloads in a Kubernetes cluster.

Pin to a specific revision for showing its status. Defaults to 0 (last revision). +timeout + +0s +The length of time to wait before ending watch, zero means never. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h). + + watch w true @@ -3861,6 +4087,12 @@ viewing your workloads in a Kubernetes cluster.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -3873,12 +4105,24 @@ viewing your workloads in a Kubernetes cluster.

Filename, directory, or URL to files identifying the resource to get from a server. +output +o + +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. + + recursive R false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + to-revision 0 @@ -3936,6 +4180,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + current-replicas -1 @@ -3951,7 +4201,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. record @@ -3984,6 +4234,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2) +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + timeout 0s @@ -4079,6 +4335,12 @@ viewing your workloads in a Kubernetes cluster.

If true, select all resources in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + containers c * @@ -4130,7 +4392,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. overwrite @@ -4162,6 +4424,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -4209,6 +4477,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources, including uninitialized ones, in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -4236,7 +4510,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. record @@ -4256,6 +4530,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2) + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -4303,6 +4583,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources, including uninitialized ones, in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + containers c * @@ -4342,7 +4628,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath-file|jsonpath. record @@ -4368,6 +4654,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on, not including uninitialized ones,supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2) + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -4400,6 +4692,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -4427,7 +4725,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. record @@ -4447,6 +4745,12 @@ viewing your workloads in a Kubernetes cluster.

If non-empty, the selectors update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -4484,6 +4788,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources, including uninitialized ones, in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -4511,7 +4821,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. record @@ -4525,6 +4835,12 @@ viewing your workloads in a Kubernetes cluster.

false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -4565,6 +4881,12 @@ viewing your workloads in a Kubernetes cluster.

Select all resources, including uninitialized ones, in the namespace of the specified resource types +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -4598,7 +4920,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. recursive @@ -4618,10 +4940,31 @@ viewing your workloads in a Kubernetes cluster.

[] Service accounts to bind to the role + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +

wait

+
+

Wait for the pod "busybox1" to contain the status condition of type "Ready".

+
+
kubectl wait --for=condition=Ready pod/busybox1
+
+
+

Wait for the pod "busybox1" to be deleted, with a timeout of 60s, after having issued the "delete" command.

+
+
kubectl delete pod/busybox1
+kubectl wait --for=delete pod/busybox1 --timeout=60s
+
+

Experimental: Wait for a specific condition on one or many resources.

+

The command takes multiple resources and waits until the specified condition is seen in the Status field of every given resource.

+

Alternatively, the command can wait for the given set of resources to be deleted by providing the "delete" keyword as the value to the --for flag.

+

A successful message will be printed to stdout indicating when the specified condition has been met. One can use -o option to change to output destination.

Usage

$ wait resource.group/name [--for=delete|--for condition=available]

Flags

@@ -4642,6 +4985,12 @@ viewing your workloads in a Kubernetes cluster.

If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace. +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] @@ -4657,7 +5006,7 @@ viewing your workloads in a Kubernetes cluster.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. recursive @@ -4672,6 +5021,12 @@ viewing your workloads in a Kubernetes cluster.

Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2) +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + timeout 30s @@ -4844,6 +5199,12 @@ applications.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + dry-run false @@ -4859,7 +5220,7 @@ applications.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|go-template-file|templatefile|template|go-template|jsonpath|jsonpath-file. recursive @@ -4867,6 +5228,24 @@ applications.

false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. + +remove-extra-permissions + +false +If true, removes extra permissions added to roles + + +remove-extra-subjects + +false +If true, removes extra subjects added to rolebindings + + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -5143,12 +5522,6 @@ applications.

Specify if the logs should be streamed. -interactive - -false -If true, prompt the user for input when required. - - limit-bytes 0 @@ -5211,6 +5584,11 @@ applications.

kubectl port-forward deployment/mydeployment 5000 6000
 
+

Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in a pod selected by the service

+
+
kubectl port-forward service/myservice 5000 6000
+
+

Listen on port 8888 locally, forwarding to 5000 in the pod

kubectl port-forward pod/mypod 8888:5000
@@ -5321,6 +5699,12 @@ applications.

If true, disable request filtering in the proxy. This is dangerous, and can leave you vulnerable to XSRF attacks, when used with an accessible port. +keepalive + +0s +keepalive specifies the keep-alive period for an active network connection. Set to 0 to disable keepalive. + + port p 8001 @@ -5541,6 +5925,12 @@ applications.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] @@ -5556,7 +5946,7 @@ applications.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. recursive @@ -5564,6 +5954,12 @@ applications.

false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -5584,6 +5980,12 @@ applications.

+allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + filename f [] @@ -5599,7 +6001,7 @@ applications.

output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. recursive @@ -5607,6 +6009,12 @@ applications.

false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory. + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -5663,12 +6071,24 @@ applications.

If true, dump all namespaces. If true, --namespaces is ignored. +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + namespaces [] A comma separated list of namespaces to dump. +output +o +json +Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath-file|jsonpath. + + output-directory @@ -5680,6 +6100,12 @@ applications.

20s The length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running + +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +
@@ -5730,7 +6156,7 @@ applications.

$ kubectl drain foo --grace-period=900
 

Drain node in preparation for maintenance.

-

The given node will be marked unschedulable to prevent new pods from arriving. 'drain' evicts the pods if the APIServer supports eviction (http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use normal DELETE to delete the pods. The 'drain' evicts or deletes all pods except mirror pods (which cannot be deleted through the API server). If there are DaemonSet-managed pods, drain will not proceed without --ignore-daemonsets, and regardless it will not delete any DaemonSet-managed pods, because those pods would be immediately replaced by the DaemonSet controller, which ignores unschedulable markings. If there are any pods that are neither mirror pods nor managed by ReplicationController, ReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete any pods unless you use --force. --force will also allow deletion to proceed if the managing resource of one or more pods is missing.

+

The given node will be marked unschedulable to prevent new pods from arriving. 'drain' evicts the pods if the APIServer supports eviction (http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use normal DELETE to delete the pods. The 'drain' evicts or deletes all pods except mirror pods (which cannot be deleted through the API server). If there are DaemonSet-managed pods, drain will not proceed without --ignore-daemonsets, and regardless it will not delete any DaemonSet-managed pods, because those pods would be immediately replaced by the DaemonSet controller, which ignores unschedulable markings. If there are any pods that are neither mirror pods nor managed by ReplicationController, ReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete any pods unless you use --force. --force will also allow deletion to proceed if the managing resource of one or more pods is missing.

'drain' waits for graceful termination. You should not operate on the machine until the command completes.

When you are ready to put the node back into service, use kubectl uncordon, which will make the node schedulable again.

! http://kubernetes.io/images/docs/kubectl_drain.svg

@@ -5848,10 +6274,16 @@ applications.

Select all nodes in the cluster +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|template|go-template|go-template-file|templatefile|jsonpath|jsonpath-file. overwrite @@ -5866,6 +6298,12 @@ applications.

Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2) +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + validate true @@ -6059,7 +6497,7 @@ applications.

kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl
 
-

Installing bash completion on Linux ## Load the kubectl completion code for bash into the current shell

+

Installing bash completion on Linux ## If bash-completion is not installed on Linux, please install the 'bash-completion' package ## via your distribution's package manager. ## Load the kubectl completion code for bash into the current shell

source <(kubectl completion bash)
 
@@ -6096,8 +6534,8 @@ source $HOME/.bash_profile

Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

The loading order follows these rules:

    -
  1. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place.
  2. -
  3. If $KUBECONFIG environment variable is set, then it is used a list of paths (normal path delimitting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list.
  4. +
  5. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place.
  6. +
  7. If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimitting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list.
  8. Otherwise, ${HOME}/.kube/config is used and no merging takes place.

Usage

@@ -6271,7 +6709,26 @@ source $HOME/.bash_profile

Sets a context entry in kubeconfig

Specifying a name that already exists will merge new fields on top of existing values for those fields.

Usage

-

$ set-context NAME [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]

+

$ set-context [NAME | --current] [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]

+

Flags

+ + + + + + + + + + + + + + + + + +
NameShorthandDefaultUsage
currentfalseModify the current context

set-credentials

@@ -6444,7 +6901,7 @@ source $HOME/.bash_profile output o yaml -Output format. One of: json|yaml|name|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. raw @@ -6456,7 +6913,7 @@ source $HOME/.bash_profile template -Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. @@ -6516,10 +6973,35 @@ source $HOME/.bash_profile

$ options


plugin

-

Runs a command-line plugin.

-

Plugins are subcommands that are not part of the major command-line distribution and can even be provided by third-parties. Please refer to the documentation and examples for more information about how to install and write your own plugins.

+

Provides utilities for interacting with plugins.

+

Plugins provide extended functionality that is not part of the major command-line distribution. Please refer to the documentation and examples for more information about how write your own plugins.

Usage

-

$ plugin NAME

+

$ plugin [flags]

+
+

list

+

List all available plugin files on a user's PATH.

+

Available plugin files are those that are: - executable - anywhere on the user's PATH - begin with "kubectl-"

+

Usage

+

$ list

+

Flags

+ + + + + + + + + + + + + + + + + +
NameShorthandDefaultUsage
name-onlyfalseIf true, display only the binary name of each plugin, rather than its full path

version

@@ -6543,7 +7025,7 @@ source $HOME/.bash_profile client -c + false Client version only (no server required). @@ -6606,6 +7088,12 @@ source $HOME/.bash_profile +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + container @@ -6645,7 +7133,7 @@ source $HOME/.bash_profile output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|go-template|go-template-file|templatefile|template|jsonpath|jsonpath-file. poll-interval @@ -6660,6 +7148,12 @@ source $HOME/.bash_profile If true, this is a request to abort an existing rollout that is partially rolled out. It effectively reverses current and next and runs a rollout +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + timeout 5m0s @@ -6699,7 +7193,7 @@ source $HOME/.bash_profile

Start a single instance of hazelcast and set labels "app=hazelcast" and "env=prod" in the container.

-
kubectl run hazelcast --image=nginx --labels="app=hazelcast,env=prod"
+
kubectl run hazelcast --image=hazelcast --labels="app=hazelcast,env=prod"
 

Start a replicated instance of nginx.

@@ -6757,6 +7251,12 @@ source $HOME/.bash_profile +allow-missing-template-keys + +true +If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. + + attach false @@ -6856,7 +7356,7 @@ source $HOME/.bash_profile output o -Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath]. +Output format. One of: json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath|jsonpath-file. overrides @@ -6955,6 +7455,12 @@ source $HOME/.bash_profile Keep stdin open on the container(s) in the pod, even if nothing is attached. +template + + +Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]. + + timeout 0s diff --git a/static/docs/reference/generated/kubectl/navData.js b/static/docs/reference/generated/kubectl/navData.js index 4df43b4b82..075b2ca9ec 100644 --- a/static/docs/reference/generated/kubectl/navData.js +++ b/static/docs/reference/generated/kubectl/navData.js @@ -1 +1 @@ -(function(){navData = {"toc":[{"section":"run-container","subsections":[]},{"section":"rolling-update","subsections":[]},{"section":"-strong-deprecated-commands-strong-","subsections":[]},{"section":"version","subsections":[]},{"section":"plugin","subsections":[]},{"section":"options","subsections":[]},{"section":"explain","subsections":[]},{"section":"config","subsections":[{"section":"-em-view-em-"},{"section":"-em-use-context-em-"},{"section":"-em-unset-em-"},{"section":"-em-set-credentials-em-"},{"section":"-em-set-context-em-"},{"section":"-em-set-cluster-em-"},{"section":"-em-set-em-"},{"section":"-em-rename-context-em-"},{"section":"-em-get-contexts-em-"},{"section":"-em-get-clusters-em-"},{"section":"-em-delete-context-em-"},{"section":"-em-delete-cluster-em-"},{"section":"-em-current-context-em-"}]},{"section":"completion","subsections":[]},{"section":"api-resources","subsections":[]},{"section":"alpha","subsections":[{"section":"-em-diff-em-"}]},{"section":"-strong-kubectl-settings-and-usage-strong-","subsections":[]},{"section":"uncordon","subsections":[]},{"section":"taint","subsections":[]},{"section":"drain","subsections":[]},{"section":"cordon","subsections":[]},{"section":"cluster-info","subsections":[{"section":"-em-dump-em-"}]},{"section":"certificate","subsections":[{"section":"-em-deny-em-"},{"section":"-em-approve-em-"}]},{"section":"api-versions","subsections":[]},{"section":"-strong-cluster-management-strong-","subsections":[]},{"section":"top","subsections":[{"section":"-em-pod-em-"},{"section":"-em-node-em-"}]},{"section":"proxy","subsections":[]},{"section":"port-forward","subsections":[]},{"section":"logs","subsections":[]},{"section":"exec","subsections":[]},{"section":"describe","subsections":[]},{"section":"cp","subsections":[]},{"section":"auth","subsections":[{"section":"-em-reconcile-em-"},{"section":"-em-can-i-em-"}]},{"section":"attach","subsections":[]},{"section":"-strong-working-with-apps-strong-","subsections":[]},{"section":"wait","subsections":[]},{"section":"set","subsections":[{"section":"-em-subject-em-"},{"section":"-em-serviceaccount-em--1"},{"section":"-em-selector-em-"},{"section":"-em-resources-em-"},{"section":"-em-image-em-"},{"section":"-em-env-em-"}]},{"section":"scale","subsections":[]},{"section":"rollout","subsections":[{"section":"-em-undo-em-"},{"section":"-em-status-em-"},{"section":"-em-resume-em-"},{"section":"-em-pause-em-"},{"section":"-em-history-em-"}]},{"section":"replace","subsections":[]},{"section":"patch","subsections":[]},{"section":"label","subsections":[]},{"section":"edit","subsections":[]},{"section":"convert","subsections":[]},{"section":"autoscale","subsections":[]},{"section":"annotate","subsections":[]},{"section":"apply","subsections":[{"section":"-em-view-last-applied-em-"},{"section":"-em-set-last-applied-em-"},{"section":"-em-edit-last-applied-em-"}]},{"section":"-strong-app-management-strong-","subsections":[]},{"section":"delete","subsections":[]},{"section":"expose","subsections":[]},{"section":"run","subsections":[]},{"section":"get","subsections":[]},{"section":"create","subsections":[{"section":"-em-serviceaccount-em-"},{"section":"-em-service-nodeport-em-"},{"section":"-em-service-loadbalancer-em-"},{"section":"-em-service-externalname-em-"},{"section":"-em-service-clusterip-em-"},{"section":"-em-service-em-"},{"section":"-em-secret-tls-em-"},{"section":"-em-secret-generic-em-"},{"section":"-em-secret-docker-registry-em-"},{"section":"-em-secret-em-"},{"section":"-em-rolebinding-em-"},{"section":"-em-role-em-"},{"section":"-em-quota-em-"},{"section":"-em-priorityclass-em-"},{"section":"-em-poddisruptionbudget-em-"},{"section":"-em-namespace-em-"},{"section":"-em-job-em-"},{"section":"-em-deployment-em-"},{"section":"-em-configmap-em-"},{"section":"-em-clusterrolebinding-em-"},{"section":"-em-clusterrole-em-"}]},{"section":"-strong-getting-started-strong-","subsections":[]}],"flatToc":["run-container","rolling-update","-strong-deprecated-commands-strong-","version","plugin","options","explain","-em-view-em-","-em-use-context-em-","-em-unset-em-","-em-set-credentials-em-","-em-set-context-em-","-em-set-cluster-em-","-em-set-em-","-em-rename-context-em-","-em-get-contexts-em-","-em-get-clusters-em-","-em-delete-context-em-","-em-delete-cluster-em-","-em-current-context-em-","config","completion","api-resources","-em-diff-em-","alpha","-strong-kubectl-settings-and-usage-strong-","uncordon","taint","drain","cordon","-em-dump-em-","cluster-info","-em-deny-em-","-em-approve-em-","certificate","api-versions","-strong-cluster-management-strong-","-em-pod-em-","-em-node-em-","top","proxy","port-forward","logs","exec","describe","cp","-em-reconcile-em-","-em-can-i-em-","auth","attach","-strong-working-with-apps-strong-","wait","-em-subject-em-","-em-serviceaccount-em--1","-em-selector-em-","-em-resources-em-","-em-image-em-","-em-env-em-","set","scale","-em-undo-em-","-em-status-em-","-em-resume-em-","-em-pause-em-","-em-history-em-","rollout","replace","patch","label","edit","convert","autoscale","annotate","-em-view-last-applied-em-","-em-set-last-applied-em-","-em-edit-last-applied-em-","apply","-strong-app-management-strong-","delete","expose","run","get","-em-serviceaccount-em-","-em-service-nodeport-em-","-em-service-loadbalancer-em-","-em-service-externalname-em-","-em-service-clusterip-em-","-em-service-em-","-em-secret-tls-em-","-em-secret-generic-em-","-em-secret-docker-registry-em-","-em-secret-em-","-em-rolebinding-em-","-em-role-em-","-em-quota-em-","-em-priorityclass-em-","-em-poddisruptionbudget-em-","-em-namespace-em-","-em-job-em-","-em-deployment-em-","-em-configmap-em-","-em-clusterrolebinding-em-","-em-clusterrole-em-","create","-strong-getting-started-strong-"]};})(); \ No newline at end of file +(function(){navData = {"toc":[{"section":"run-container","subsections":[]},{"section":"rolling-update","subsections":[]},{"section":"-strong-deprecated-commands-strong-","subsections":[]},{"section":"version","subsections":[]},{"section":"plugin","subsections":[{"section":"-em-list-em-"}]},{"section":"options","subsections":[]},{"section":"explain","subsections":[]},{"section":"config","subsections":[{"section":"-em-view-em-"},{"section":"-em-use-context-em-"},{"section":"-em-unset-em-"},{"section":"-em-set-credentials-em-"},{"section":"-em-set-context-em-"},{"section":"-em-set-cluster-em-"},{"section":"-em-set-em-"},{"section":"-em-rename-context-em-"},{"section":"-em-get-contexts-em-"},{"section":"-em-get-clusters-em-"},{"section":"-em-delete-context-em-"},{"section":"-em-delete-cluster-em-"},{"section":"-em-current-context-em-"}]},{"section":"completion","subsections":[]},{"section":"api-resources","subsections":[]},{"section":"alpha","subsections":[{"section":"-em-diff-em-"}]},{"section":"-strong-kubectl-settings-and-usage-strong-","subsections":[]},{"section":"uncordon","subsections":[]},{"section":"taint","subsections":[]},{"section":"drain","subsections":[]},{"section":"cordon","subsections":[]},{"section":"cluster-info","subsections":[{"section":"-em-dump-em-"}]},{"section":"certificate","subsections":[{"section":"-em-deny-em-"},{"section":"-em-approve-em-"}]},{"section":"api-versions","subsections":[]},{"section":"-strong-cluster-management-strong-","subsections":[]},{"section":"top","subsections":[{"section":"-em-pod-em-"},{"section":"-em-node-em-"}]},{"section":"proxy","subsections":[]},{"section":"port-forward","subsections":[]},{"section":"logs","subsections":[]},{"section":"exec","subsections":[]},{"section":"describe","subsections":[]},{"section":"cp","subsections":[]},{"section":"auth","subsections":[{"section":"-em-reconcile-em-"},{"section":"-em-can-i-em-"}]},{"section":"attach","subsections":[]},{"section":"-strong-working-with-apps-strong-","subsections":[]},{"section":"wait","subsections":[]},{"section":"set","subsections":[{"section":"-em-subject-em-"},{"section":"-em-serviceaccount-em--1"},{"section":"-em-selector-em-"},{"section":"-em-resources-em-"},{"section":"-em-image-em-"},{"section":"-em-env-em-"}]},{"section":"scale","subsections":[]},{"section":"rollout","subsections":[{"section":"-em-undo-em-"},{"section":"-em-status-em-"},{"section":"-em-resume-em-"},{"section":"-em-pause-em-"},{"section":"-em-history-em-"}]},{"section":"replace","subsections":[]},{"section":"patch","subsections":[]},{"section":"label","subsections":[]},{"section":"edit","subsections":[]},{"section":"convert","subsections":[]},{"section":"autoscale","subsections":[]},{"section":"annotate","subsections":[]},{"section":"apply","subsections":[{"section":"-em-view-last-applied-em-"},{"section":"-em-set-last-applied-em-"},{"section":"-em-edit-last-applied-em-"}]},{"section":"-strong-app-management-strong-","subsections":[]},{"section":"delete","subsections":[]},{"section":"expose","subsections":[]},{"section":"run","subsections":[]},{"section":"get","subsections":[]},{"section":"create","subsections":[{"section":"-em-serviceaccount-em-"},{"section":"-em-service-nodeport-em-"},{"section":"-em-service-loadbalancer-em-"},{"section":"-em-service-externalname-em-"},{"section":"-em-service-clusterip-em-"},{"section":"-em-service-em-"},{"section":"-em-secret-tls-em-"},{"section":"-em-secret-generic-em-"},{"section":"-em-secret-docker-registry-em-"},{"section":"-em-secret-em-"},{"section":"-em-rolebinding-em-"},{"section":"-em-role-em-"},{"section":"-em-quota-em-"},{"section":"-em-priorityclass-em-"},{"section":"-em-poddisruptionbudget-em-"},{"section":"-em-namespace-em-"},{"section":"-em-job-em-"},{"section":"-em-deployment-em-"},{"section":"-em-configmap-em-"},{"section":"-em-clusterrolebinding-em-"},{"section":"-em-clusterrole-em-"}]},{"section":"-strong-getting-started-strong-","subsections":[]}],"flatToc":["run-container","rolling-update","-strong-deprecated-commands-strong-","version","-em-list-em-","plugin","options","explain","-em-view-em-","-em-use-context-em-","-em-unset-em-","-em-set-credentials-em-","-em-set-context-em-","-em-set-cluster-em-","-em-set-em-","-em-rename-context-em-","-em-get-contexts-em-","-em-get-clusters-em-","-em-delete-context-em-","-em-delete-cluster-em-","-em-current-context-em-","config","completion","api-resources","-em-diff-em-","alpha","-strong-kubectl-settings-and-usage-strong-","uncordon","taint","drain","cordon","-em-dump-em-","cluster-info","-em-deny-em-","-em-approve-em-","certificate","api-versions","-strong-cluster-management-strong-","-em-pod-em-","-em-node-em-","top","proxy","port-forward","logs","exec","describe","cp","-em-reconcile-em-","-em-can-i-em-","auth","attach","-strong-working-with-apps-strong-","wait","-em-subject-em-","-em-serviceaccount-em--1","-em-selector-em-","-em-resources-em-","-em-image-em-","-em-env-em-","set","scale","-em-undo-em-","-em-status-em-","-em-resume-em-","-em-pause-em-","-em-history-em-","rollout","replace","patch","label","edit","convert","autoscale","annotate","-em-view-last-applied-em-","-em-set-last-applied-em-","-em-edit-last-applied-em-","apply","-strong-app-management-strong-","delete","expose","run","get","-em-serviceaccount-em-","-em-service-nodeport-em-","-em-service-loadbalancer-em-","-em-service-externalname-em-","-em-service-clusterip-em-","-em-service-em-","-em-secret-tls-em-","-em-secret-generic-em-","-em-secret-docker-registry-em-","-em-secret-em-","-em-rolebinding-em-","-em-role-em-","-em-quota-em-","-em-priorityclass-em-","-em-poddisruptionbudget-em-","-em-namespace-em-","-em-job-em-","-em-deployment-em-","-em-configmap-em-","-em-clusterrolebinding-em-","-em-clusterrole-em-","create","-strong-getting-started-strong-"]};})(); \ No newline at end of file From 48382f44be4be127004f0472ea73ebf8e3cd8402 Mon Sep 17 00:00:00 2001 From: Tim Fogarty Date: Sat, 29 Sep 2018 10:39:13 -0700 Subject: [PATCH 008/181] Add link to 1.12 API docs in reference index (#10405) --- content/en/docs/reference/_index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/en/docs/reference/_index.md b/content/en/docs/reference/_index.md index 654ab4356c..56dfb08920 100644 --- a/content/en/docs/reference/_index.md +++ b/content/en/docs/reference/_index.md @@ -20,6 +20,7 @@ This section of the Kubernetes documentation contains references. * [Kubernetes API Overview](/docs/reference/using-api/api-overview/) - Overview of the API for Kubernetes. * Kubernetes API Versions + * [1.12](/docs/reference/generated/kubernetes-api/v1.12/) * [1.11](/docs/reference/generated/kubernetes-api/v1.11/) * [1.10](https://v1-10.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/) * [1.9](https://v1-9.docs.kubernetes.io/docs/api-reference/v1.9/) @@ -39,7 +40,7 @@ client libraries: * [kubectl](/docs/user-guide/kubectl-overview) - Main CLI tool for running commands and managing Kubernetes clusters. * [JSONPath](/docs/user-guide/jsonpath/) - Syntax guide for using [JSONPath expressions](http://goessner.net/articles/JsonPath/) with kubectl. -* [kubeadm](/docs/admin/kubeadm/) - CLI tool to easily provision a secure Kubernetes cluster. +* [kubeadm](/docs/admin/kubeadm/) - CLI tool to easily provision a secure Kubernetes cluster. * [kubefed](/docs/admin/kubefed/) - CLI tool to help you administrate your federated clusters. ## Config Reference From 54ba69b5fba9830511a5dd5963e904b6045503ec Mon Sep 17 00:00:00 2001 From: LiuDui <40875627+xichengliudui@users.noreply.github.com> Date: Sun, 30 Sep 2018 20:22:43 +0800 Subject: [PATCH 009/181] Remove excess 'and' (#10446) --- content/en/docs/tasks/debug-application-cluster/crictl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/debug-application-cluster/crictl.md b/content/en/docs/tasks/debug-application-cluster/crictl.md index 413cf6a24c..71ccab81aa 100644 --- a/content/en/docs/tasks/debug-application-cluster/crictl.md +++ b/content/en/docs/tasks/debug-application-cluster/crictl.md @@ -65,7 +65,7 @@ debug: true ## Example crictl commands -The following examples show some `crictl` commands and and example output. +The following examples show some `crictl` commands and example output. {{< warning >}} **Warning:** If you use `crictl` to create pod sandboxes or containers on a running From b0de40f874dee401972d6d4f62d373c46a9ba411 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Mon, 1 Oct 2018 09:33:49 -0700 Subject: [PATCH 010/181] blog: health-checking-grpc (#10393) * blog: health-checking-grpc date in the markdown and file/dir names will be updated later Signed-off-by: Ahmet Alp Balkan * Update 2018-09-30-health-checking-grpc.md * Update and rename 2018-09-30-health-checking-grpc.md to 2018-10-01-health-checking-grpc.md * Update 2018-10-01-health-checking-grpc.md * Update 2018-10-01-health-checking-grpc.md --- .../_posts/2018-10-01-health-checking-grpc.md | 97 ++++++++++++++++++ .../grpc_health_probe.png | Bin 0 -> 95308 bytes .../options.png | Bin 0 -> 152463 bytes 3 files changed, 97 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-01-health-checking-grpc.md create mode 100644 static/images/blog/2019-09-30-health-checking-grpc/grpc_health_probe.png create mode 100644 static/images/blog/2019-09-30-health-checking-grpc/options.png diff --git a/content/en/blog/_posts/2018-10-01-health-checking-grpc.md b/content/en/blog/_posts/2018-10-01-health-checking-grpc.md new file mode 100644 index 0000000000..b1f3cd6ed0 --- /dev/null +++ b/content/en/blog/_posts/2018-10-01-health-checking-grpc.md @@ -0,0 +1,97 @@ +--- +layout: blog +title: 'Health checking gRPC servers on Kubernetes' +date: 2018-10-01 +--- + +**Author**: [Ahmet Alp Balkan](https://twitter.com/ahmetb) (Google) + +[gRPC](https://grpc.io) is on its way to becoming the lingua franca for +communication between cloud-native microservices. If you are deploying gRPC +applications to Kubernetes today, you may be wondering about the best way to +configure health checks. In this article, we will talk about +[grpc-health-probe](https://github.com/grpc-ecosystem/grpc-health-probe/), a +Kubernetes-native way to health check gRPC apps. + +If you're unfamiliar, Kubernetes [health +checks](/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/) +(liveness and readiness probes) is what's keeping your applications available +while you're sleeping. They detect unresponsive pods, mark them unhealthy, and +cause these pods to be restarted or rescheduled. + +Kubernetes [does not +support](https://github.com/kubernetes/kubernetes/issues/21493) gRPC health +checks natively. This leaves the gRPC developers with the following three +approaches when they deploy to Kubernetes: + +[![options for health checking grpc on kubernetes today](/images/blog/2019-09-30-health-checking-grpc/options.png)](/images/blog/2019-09-30-health-checking-grpc/options.png) + + +1. **httpGet probe:** Cannot be natively used with gRPC. You need to refactor + your app to serve both gRPC and HTTP/1.1 protocols (on different port + numbers). +2. **tcpSocket probe:** Opening a socket to gRPC server is not meaningful, + since it cannot read the response body. +3. **exec probe:** This invokes a program in a container's ecosystem + periodically. In the case of gRPC, this means you implement a health RPC + yourself, then write and ship a client tool with your container. + +Can we do better? Absolutely. + +## Introducing “grpc-health-probe” + +To standardize the "exec probe" approach mentioned above, we need: + +- a **standard** health check "protocol" that can be implemented in any gRPC + server easily. +- a **standard** health check "tool" that can query the health protocol easily. + +Thankfully, gRPC has a [standard health checking +protocol](https://github.com/grpc/grpc/blob/v1.15.0/doc/health-checking.md). It +can be used easily from any language. Generated code and the utilities for +setting the health status are shipped in nearly all language implementations of +gRPC. + +If you +[implement](https://github.com/grpc/grpc/blob/v1.15.0/src/proto/grpc/health/v1/health.proto) +this health check protocol in your gRPC apps, you can then use a standard/common +tool to invoke this `Check()` method to determine server status. + +The next thing you need is the "standard tool", and it's the +[**grpc-health-probe**](https://github.com/grpc-ecosystem/grpc-health-probe/). + + + + + +With this tool, you can use the same health check configuration in all your gRPC +applications. This approach requires you to: + +1. Find the gRPC "health" module in your favorite language and start using it + (example [Go library](https://godoc.org/github.com/grpc/grpc-go/health)). +2. Ship the + [grpc_health_probe](https://github.com/grpc-ecosystem/grpc-health-probe/) + binary in your container. +3. [Configure](https://github.com/grpc-ecosystem/grpc-health-probe/tree/1329d682b4232c102600b5e7886df8ffdcaf9e26#example-grpc-health-checking-on-kubernetes) + Kubernetes "exec" probe to invoke the "grpc_health_probe" tool in the + container. + +In this case, executing "grpc_health_probe" will call your gRPC server over +`localhost`, since they are in the same pod. + +## What's next + +**grpc-health-probe** project is still in its early days and it needs your +feedback. It supports a variety of features like communicating with TLS servers +and configurable connection/RPC timeouts. + +If you are running a gRPC server on Kubernetes today, try using the gRPC Health +Protocol and try the grpc-health-probe in your deployments, and [give +feedback](https://github.com/grpc-ecosystem/grpc-health-probe/). + +## Further reading + +- Protocol: [GRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/v1.15.0/doc/health-checking.md) ([health.proto](https://github.com/grpc/grpc/blob/v1.15.0/src/proto/grpc/health/v1/health.proto)) +- Documentation: [Kubernetes liveness and readiness probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/) +- Article: [Advanced Kubernetes Health Check Patterns](https://ahmet.im/blog/advanced-kubernetes-health-checks/) diff --git a/static/images/blog/2019-09-30-health-checking-grpc/grpc_health_probe.png b/static/images/blog/2019-09-30-health-checking-grpc/grpc_health_probe.png new file mode 100644 index 0000000000000000000000000000000000000000..d781088b9337319fda230c2609ca29c63a5a6bbf GIT binary patch literal 95308 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

Wpc~yGKnu; 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 KO&^=MME(a>gK#?l literal 0 HcmV?d00001 diff --git a/static/images/blog/2019-09-30-health-checking-grpc/options.png b/static/images/blog/2019-09-30-health-checking-grpc/options.png new file mode 100644 index 0000000000000000000000000000000000000000..21f609b7e0a9332d4f7fb53315be8f9720099fbf GIT binary patch literal 152463 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 z�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 z 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%0AZzjGQzFq9jSI-U=!anBxx=qdX z6{nvj@4ZMQv*~$7ZkO^b2VYlfchy@&?KP0vQD=%XX%I%ulAlYBd;vtU53cVA62=Wq1BLJ zoLbk5QcFI)RQ~?VfTY&j_+C=p_<^a9B}?HImg<4`B4AC(M#FKr+_Df&~GvPFGm#(?`Sg~QJ+ z*6gS6(SNgB`pucOTd-U3k&DE63JL@*pYATm%*lFfrFW^SG3v{;i<9MkEGe7`MXgv! z#Y-Bse_t4`O)5AGV^1Fr-nuD^&iLH_In5v>>KdT z(L0mKx+4EAGLxwZ+ZfrAodC8I8!TG;8wQMSEc8bLzBcVnMJ|Jg>yb=WHKuUB@I+WU z-s8p6412}+*4Nc(W<8l^HP2GpJs(xhINX>onkSd5?pYdUFe7Dd;-Ue}N&&(iW7JIS z5;|9NMO{gF_?Wvm%~nPGR0oKssp%BWI0*NelCOM(n4j>xL>ZQEJMp+;_Jt{}09t&a z4U_)GQlZ56?-E%{9Z`cS<31O6a8s78O8O#={wlsp7td8bSVw)) zcPIZ*A{3URxfglrC!FtCRG@?54aG$PwCyCw^RU>>SN)96 zJMAUe!{P&Ek-nrio~)Nk*znGQaU3dwQre!cH?FPgI`gi5pjU$FeHea(ojc4Av-aEzV;o{gkEwN-gZ@T1h z>zIR9?_fhg61IbZ%JNRH#gdE`!;6{@!^j@ais zLHl6A<~!p&T%Pk*ZNIYC?Og0#g|slG_q$w^kG?k;JgLuHCGvQmdnmu+`(1wtsDf8s zExqHY=X?syNLlcve$fy7A*uYN29LepmAAon3vA!8@k(+?k^jFhsX}S|)3PNLtX z7(T8EowcWH4pV1Gy3-AT47%DI#uI%o$`rFg>^ zl2J`1L3ZwKy{5`zqQr8C+3APYH}F%}l@Kq$fjbp=Ssmt%qn3wb^4^9yv#hn`v#jC~ zC6J~_Ck9t{UDw20xrScBv7c%-&wiB-@tC6%Unni+RO2WHw--GN@b!&=+4!D@IpeOo zWGVi6-5o_kM@lqiv^uMWIZqiT1``DA57I~R&+9$=q3hvfhG1Z$I(d z%DH{S4BJGEjct0?n(vU=)7z`tvKPO00x0;_MG(9GEmEe?M%?m&7{8l%zK9au2qM(J zFSYdC2waU|hPkFU8rQRRIl**j6l8L!FG~8Km#>3MFO3V26c;;-lz{GNVKB2pih8}G zV}G%x)rt8|%Z8A|=T|~PE~_L>?7L^XTp0R)U&}r$TF$NU#qv~6@ky4ov`r+wkZdc< z&#`b{gY3MjCAXcfjZChfh@XvOrc92npgV(77b?~)WKKk?iY&qGv8m-ew_pnxT8Y;A zX)3e8uoZ1Gagxl*%G5c}v}0SZtfkE>kTkd-Z}!1E6u02WJBhH#<%=;E)t6Z|lY(p2 z_Ym6sw9*QYRkGMX)^ReQ@7xG+a3C|yC|eh-mcAvo`b*V=%iCBfQiD39*aW~UkcD@_?|`_}8MXpyp$C_+>de`#EjapqS5?_%HJD7KHf+`PUjMOusA$fZ>y^~|U4Oo) zm`e3sc@AGR;Cfi&@_WlEAqn|RmE+ux&&nDT$^#s>HcDM>bL-Q z!(lRM90W{@Pzs^|+8#>hzRs`XxF!~#nbY05p2#vN_7Vv{cO-N$M&LKa6T~dOoVXZE z^=HgqVU3KiUa~goS=X<;&Eu4q(Vn~c6iGyZkdHm_H>uNBYVb)FyF0afT&uLl0$P++ z11_eon6*W?61t;>#k+)i4ue{10Tavcl?UK_S&gY?=SB$6fs*&{MV`QYHh6Gal+S7K z37!zC!7KHKODHssxh*ZeeX>R9yZ)iDA-v&U)+4{9-sTZy&i^d##3pi!*BUA*i1J~3 zmo<%V++z4(CuQsY7mO5XcJoyZEELRpC@wwqbT51I6k-tVaB_Ahd&`YV@n}1I2gQ6n z-Nay^5Uzztq}?vWa`HMgF0sXNqvCkP{3zCE`=Gvc?A0B>h8W?;W|G3&<+QkZ7RY3T2vt9zf~v2V2!w(74_u-)8mS+cOJGH+%mv#rVjP)s!4% z2Z5TAxgV`(R`zHMvdukcUs^X>V$5ohVX`Z>Ff5_I57yES%87W|m*WY0k)dboK7yHtZjJ z@7L~UYK4>#H7NFrUe~+Itv8IIVaO(lm*Ik1*U*4J1#3J@Hfn-ga;Uy zrk>j{nlG^1q-|H~MqENIigePs6LiWC%jEhsvUGt#%-G6%v@oG5yOC3=5?HLi+S|e; zmZ^0}FV*-_;UYl^cbZ|wNDoUMQvJS;lQTttL6=OG;3B_Q*%c)GR$ySMO=@V0HWjNX zRVf5fd2JP45rY#cZsO{Rn<(_12x>;Arf8I_T;?Z)IX0^w??u0Ad?BMUCTIJP992$m zi6)e`_`?CtSws6Lg$T&>WH8J8Ceb~M zm+#~DxF64Nlx~i#Kg0+dTj;YqX5Wj-vhaMia#U58Ka7evSr*a zK7MqTqLEN<7K!BUgsHBu^+8rw6t3Gu5L6pD8)Gl_9o^ zJ3fex`DDPXyP0^D)JY)g_o&>sQ8gMQ$6yLYJy|{F%HWmYuQ(kwDnCnyMB%DJT#{&< z`MsLIOTNgXD^De|E|g+(GkzH`-z~^oZzEIPBUAJX)vT4P3LrhZ2-A>iSKy+~Q2rKO ztoWnEam1X}b$|?@fv9{_?HV4rx^{2LEyzEdLd|2sl~%_vi#I8YP%Fx`L;T;ZmbtSc zfJQxNm7)b1e{{DwWc;aSt6f*R?;IQUdXuQb&zw~D_7)l&E@TbwC1gEekD?n>v{H(S zid03G(b%?o70#S8`sJ0M*p{q4;>g(^cA_WOoS89tvgi=Zx7Y6-$Z$^=(9GKf8_(}B z6#n!2beo3&=)#37wn$u1S;;7ModwQZvmr>+7p3&hjd7gdOy)X+W4YMR#8Ne21#2h@ zd0@kXKZ>411cF%%Ha2}1KCz?rL7`p$~_kK9egVMr{KeumxEx3-2 znb+BD$6{{gr9|RMUo!LH6rK5^E_d%&Hg$9BYH*vn6Gf**_uk=lud!HS#mW3}p{>2$ z`kP)rF&?e3Yf6`ZH2J^qJwCfe9>0UZApZ4C7wXOO%$!);Q05f2%_fJ*QjK?Q0)u02 z`L17w3aI%e2RC7lthmkXVb5ITk?*LxE8#14*Bkd-$MJS5GV`kG307IHS6fv!#gF3= zrs<$|xGTFJ9DDr=k?-MseI^(ce(!R?0)?%Q5gsS<1x>#0GyVGNC?VfUyf)$XuC;0* zF|7Ca{HldG0YyKGt&JEj7*A0u)q7Psz0*Uw>57cCLb!ewrrpTa;v8Wap;(1n=kWL0 z>7{0^c|U#^dm;z!&yP*ElNBS3QLoHn8nJA98QaI^*-J2~O8kX0mO29A!6#R{EcD2K zuaU?0WuZNnH`1%z$(6ENz$MWj?1lEpLk(Y!v2Fa5hugV6nT$I3^V>MGX3d&(gX--h zso`>+*8*?SJ?Q9xgikHsJ{=zTtqz0Y{VlmFpfy#%PIJZOYB0EPE<@$2+DV?gqZQZ8#ELb;gj&sVCCMi?6)U5hN=Qu`mIpN~-7(=?4i3s{=;V zZ4pYl2#^UqWx%R+HOdT@lz<_!YDLP|$l@J>|l zgVOr+DM8_&AAdSAr>Kjo#Ant>x3{&?(iY?#eRV>X`RD|-;?sGK03WMs7m63bw4b_c z68ER8W0UzpkKDX*ZpfL_gBDe#&lKK48D|xCx-CV!&|3P*5%#is_C>ll7gsQj*GlfQ zjkc-dSVFsTw6bI9CLO(M;u3s*g69Q!B&lF^0erq@SmyVQ53G6d% z5+b8SwHX~l7H4L}x^;{bBxa9ILFA^0zBfY5I-k$EUE~tZ_M>(KZ7Wsoj7#fE8Rp8* z=O0G2PWvd6>vZE|t~|r*Ij?1h;)9pt=2>S%UWo3S4YgF#-;i&hA z_lT}=-+c9G`APYig;oO0qF?3wxt?E_(RTh=E$uWoU8-4Kq@gURnspEfTWh(k!4!J* z)J8rpMPnms*?arIgiVdt?@4DAr(1%c7}?X{pD@Fe;GXWVDKGWewUo{=zpag~IV`o)ZVt7nimZ{s#3aV_ z{LUmb%?Rjn>(|I9DUS7JbGgqK-!Lc_K0lGSWkMx;$VS3mY&$lLXMAL9VS%@){OesI zeo}pp_bn~beD$dObb{BS-tgrIxgwYnNzp8nkaFhjeC-|L6Pk%#8e2^9Wl1LS2ER^U z{-RAFp z%v?j?F;96Q?mB;@? zrl{zIIA->$z0$tbxBTb|`ku0~G8jwN5hUZm7W>mgZ`OgdM+m*zaJ1-dy{EWkkv)5X z9t+1$NiLnNM`vaHL!K}od#AlxV1EnKnVvBN7_TE9wTVW zdY;1W!3gbfbaXBNb69)ik`oX_htSP=8q>arl_pKtSI>6_w`8Pf0rof;d5i<&QhmeG_YovQl!S0u6MAz#O5tB##80g7|*6v&Es-C&W75W(cQs)X0}0=d|?PN z3;hpnJ8nKmO;I;5xCAEyjEIAZ(9QY{g)W6D0dShEN9}Lbs9{T{jiLve=CZn$8VYwq=CEl&?!dr4`N=-ykQ#f6_%0BRgJmXCSKq#7hVthuy=lDckh^wKfr zHy1a1{<``0oXl}sM@K}0Kj(8iEZqL^OXAqknT3#ZYeU@sCMg#tD2a%^r+v|F*3cO= z3w_^?hA+JV{N4eZwS1GyKi5H8Cxkhaz9(7k`a#TtVLoK0wzP1Yalv=qMy;0uAK4e$ z&*4bd>Mw0HbF*g_wwB%$T)w^Ph5`V!tL8=sZcznW?c&HLQ)L zFWqXn^1+9v+7es&RS>Ocll z45h6XX0jUrovl0udoDy3-fDWaulP%TD(tFX#0uUj=W8giv ztF&5((D(D>6rBeiqpn{)enyBh4N0Z+=R?SnAi8XXPs&+e2$Jl74P1i%4^M+^?+uhq z=v9v=8VD#;3>uR)UN`f5kj-@^qrt=eudo;+YHPkFItB^r1pso21Hcgf`ouP`wcoBk zY#mMPobM)%<565)D8w5NtJL6nev3NWCI`v797gYaH$L*;w4wx+gaiRw&!sb3S>jJF*Qh+G+ZP@5Dy4pNpBL^J#X#a3?Aj(f|C>>QST# z*eIXSve4nhtE%(M5Ehmwvd~MZDw5PF)@5l3VJ%iBdJ^t8b?)o-T+M9OZ8<@4sshv; z56h{*P9LGAR+6}Mv-NxJ>RbXP@4r}Vzcb-Q-OZGF;-`cLPqpS!sxqy(#+GKTbR9U= zw~%f!_qhp2h9dn)&%U%y`}`aFMyFah6;f+fvk0<)bnoZ1rGj1_0qOB!jEkV*&1@Q|piRq0V6@?6n zc;^^u9zDte1S7{!#8603uv(}Pq-~PR&^=WVR@%r!(PDc+XRC!e-d9!u@S0j&(9V*2 zvX2lGbaS*ppCCdQUR|;u)Gyrc1$hb>=P*LaIwG)nY8zmvIp+X!S?2XFS2MQ68UqW3 zTLt3NW=MZ^T26#lVnOg;|MQ}yVi|Z7jL(hWZUQ$yhelaX>k<1Sfah;7%*Oc|+-csN z;dNDkBDe-`_U`s~Rgo36T7td(^Ac|YxJH_;KMP=|3=e+sD{X&hy~e>0Qtn-(fcrwJ zsyw`TCB(>wwHbDqI2q;|^cxg?rSHHK6%XDiNws>L z0dxsH4L-Y2k|KT_QdjbC(6r(M49vf5L9+u030z#pq5pkHJUr`&%S*+YLItSHYG=SP z69vvF!tsV{E${U#YFIhT8q;K$QERb@=JD4GFwYZr(ZK0On8YY|hUnfmnU+SNuZ^h2ciY`tI99s%!KJ&RPcbyXt2 z(=GNZpm{^Ga37cY!cF7jqbk0 z;Egvdj1uY=Q}VyKW*u_6cl)DM4Dk*6=S3HV@*v+XwspT@8Wc+~3K}bq!aR*g#E>(- z$vHTla?vP#JIl*a1z ze>06zW1)p08bT#*4Pk{9T2K>%=hHU=lmF*?xN4RM3qewF=I!f@sA|F4h?-cDOKG?i znVL^LXVXl+y#|y(iBQJ4vTeuj?-CG@*AEUJ?Hl$5GebM@U&}!@8M^p(k(R9vbgb#N z6!F_e49(whsm_?mm?gy3iT)Qo{@1U6T zdaw2+vMvyu+Z_p26?t>EFRt}k5dZGo1mncn5U#Psp--@uo*|oZK@WxC?`tH{f$mY_ zMMXN@J5?YygFQ{`km_-KtvHl8EFY?4UcMyXsmg5k?%l9!68_?#J@A>JFr&Y(kyC|R z^=|u^A1B`aIf_19A`XHuuP3j$<%QFC=#275ODa@3<6Bc)D#^8;1W@3CCScUL@o2Tf zzz&x3{BqJ~H}Dtp8N&=iOryI|bN#(W3+YCVWTyK6zMN_x`2dnZLj!zlR_xofM1;3^ zrfy{DO{14EUfML8QTg2F6B6`=Z{7$)SOWE(EUCIJpIbZEpVY7DYgU>dAkWm>Tl4*U z0ey7i_W5yX*tS@&;;C+^ukWUJ*B%X+Hf#KG{i9i??Zh)+2y&rE;xGxzX}FAM>gN-A zVx%B*!QMUxy`#BPY1@xs_VIa5%}}o0JUpjRwMTcf>iJs1fJ)BJiLQe6gKk=Z^g|4m zmAVTZc8FeNsd>wWXqWzZ(GAD>FDJsuW%TX$z~~<|_!f{Ouz~T@P)WJb;PHo5LkGR{ z9Cpj3;^Bf9S}kPYbo!0n9C07RSr22`+RRpacP-ADOW6K5td+hmONiHIK{qdwTQ92FqF-PU;a+_^f8&a=XAK0e~^tcQuZ(c_V5 zIj>wRpit(m0{%=Yr3fvr|GdI0VOEmJVSNf6>&|aq#Z)qEBgicZTi_g!br*7cS(OQuAei#S9M*lM(UdFN(w>;A#hXHzw|yNG(*{gXH4g zy?fYpD}wj(;#XyP`S}~*TbYiI&6SzsW6kC&moGo(-Q!UCt2O`S7vhp+_Gp)Hm2N+H zwr-!UMog$dITLLMJtJB$4k*JZ-TW8BhtTKIwtC64^FlZEBOY8 zZYuVQEYC}6ionjF)@ zF-V5ou-Br&5XO&v2Xu3Ca+(xpU%{V@m~mvAVj>p?4b(R_29J%%GwJe}fO`=eNsu`) z)ILXC_sWGyXaFBk%ds-dtq6n!I>fs*TqOOlh=@potXoiXzw*V47ZZb5DVmujhk{^l zciN{TBr_!C@O#XkT4$bK4fBm~T!n5yLiV=}YK+A%_uSt3DAZtPYo7$pUZRctPb>WU zoiA)opf_{sLY~!VKwHkVV##G28=J2S@?mt7-C~9+aF-XC}kafqRJ$wUv5dP<@kbo#bRW+~$%Q z#O-y19iBYlk%yY%3T)bBu~ z%|abmizawu(m$$4Hri)}4@8jH@v0PB5{@BfBvTujLHyd5r7o8_)9^8c2Xp5vworW6zuTpS}`^5xk81f%k2DoRS2O1tjW050#G-+tS^uP^Eo zRMdBROaY5KkMCyKdWTiwYx39@NEup6du(#iD9q=bB)+{x?o`wFO;%%eeoYlgwcSs} zZZpL&Lu{3aU*3$RntuZK3{^y$TzjSp_NJOT{7ht#MR7{jtHIa+@ zE*n=g_pq1z*Yniv%O#VWWUI*5f^JpI8#mUmvBkW*v$z+!p^MlTHUoK9&iUm4Z7^S4 z%$hl8!IpDikBY<;Ei&4WxvfBhKOkRAh8eJiN5iJH^%%@98coL)c^JFj#sIw(uMR3I70<>OEyf86f7ddGUjo` zCnxj&b+f6t^E7N35#xEW53=ksb8+mtt>#Ob*rFBNXs)55@o^;Q+Ls`=P^Z6Hx-$2C?YEJs30Pc|!!0#PJRkmf(He>0 z9^n=tb}T38N}9G!1`)Cj7LFU&L$5#Jv<{A!@K>NilPZ=po4-RzQ7ywHFj_t=IX<4Z zb_V~D#Zw34oc>|=$hkmj+AMi=FuhUpfNTneaP>IlAy0#>i+ zuMEUq@xwwr4G!K!&xYkE`+;ko#PU;1i}O_;3VuY`PoFa`{E40N2P z-_Y-xr9OOF{_*DgCa+AiE&cC{HV)ld!c51f#}6aPaa_Kk`G*tqsBo3dh>r3~-8?Lz zmj5D)h8f}W;*AHsrXD9&K%`+7B~4HeyKIQ4(jXdH1Jc{^`3Gek_N=$LKhjkh9G#Lk ze5RH@+)*xDiU(!$s04DF%_~pkHjV%Kz`CicDU$4nP2wVzIO%}QFEcg zS4mwx0Zm3|!)5QicI}#teGLs34!ZUN6Jd>rMY@*|gzqokxcZ8F%wsFJapq{^Z z&iL&Sdo+5HySuv@47J6cusPVLi(|Ilna6wh`08t3p7rWRrbaM&T#*uvr+|!()Y2^n zWHUu3YusHHRx3nG2Sz(3NLFnT4HbFlUqx0#5dQ{9x1ytJVYCc4+~Q|)a&pRexXDbA?%J5MzHqTj1O^5R zoRjr)&l_AX*(*=tJ;(aK>585L?4*R>x0pf1%>ic+qjmuF>u z`u8$c&E`FfBu=GhO4u}#!fAaxX3&^4wL$$80aLy8iT;e@imy0;;)b8_bZOh9Y*GkYS%y#{Yw^{d;JF0K!9 zr|H#|9p;xC0Mb)rP8?OdBbX8uRg_kN@$;V3q_h93f)*JAhd7NB7A?SMoTj>CG%PQJ z)Y|WRl5j@Gjr`@KmwcCd$!a=s!4PXvUH9#g zQq$*u3)NfQ;DvxLFST0z%KG=;zfJwR*|;J=^Ri;NaOK{{1C>lgIEC`{O`*7b%H>qt zaPY(p`J|;;&a?LI4A4Axl#S9LyGk?giDNfB#3T3okJBae(V2_Ob!eUHT#|t7w1#n@%r55 z#FUgqJlf~#^_=)L^Rmjl`(HfRvVTB8Eo~Rgf}4lOxbzXnRNtG*r%#_oZGtuE#j!yL zO-?6z_2VvUbX`T?=&};^!_#dwd*1Z(r%(Ii$5AMae`T)wfoGY0T(Yn#KJJEnmjxyD zceS3>2Ao_pKcJ3$P9^~ZrT9RERER~M*#LvL zM@CL@Nw0t65Ierp${vHH<#CtE80-72ocwWoKPqgq%_Cy#l(XyN-HptLkT?WJKUlG8 zz2z*PL=qml-u2sTS`x{S@oeqlRjn~l8A;j)-`=Rlz4zJY6^LV4rD2oEwmSC@KS1Kf zS9hWl{E)$WKs(AG8%NM->UFoebuZilgl6BR1+s5=H@)F4_isfL<-}jV-sPD6cYGM_ ziP}Zw5~mtHRZh-obLTfcg}2}0`0FT{n|oF7lolSM==jGkxX@5JKG5R-A$gi-#ECK4 zrD5}&ql22UnA34zd?}3Hzn?ZqYwqXe;}hl{wSVFW{zFLb(^?qRR=nPBsFFL@WSnd5 zf^m*Q8ZaIh6V$H^6&?taa8g6T;onOfkbl}F=k&yzi8my-sqa?uJ;=yAHqPHS^(jqC z3zF4;J*`p;;40ZW=46Jh8v?b%&j)taAJ=d=B%D8PrVi3V!Nw+|<24TZ!21!{TitbF z;EPVkK0l<;-QCT8(Bv6n&u04M5Y-&+8hSd0@>Nw;+Ch(mt~B(%sgyV%D}YhaDjL>) z{sLNN@g=ZUxOPMm2N>_}-3rj52IQB_?s2rqY%lc=j*b*hc|rHPTXlVl6I}sFzf!R% zAiQ0p{pPFw^_3|hZ`+4rfxJKKFU*RSG7i0ztRKpZGs}&<@!-?Im)CFJ_yq?WXPXRs z&u+@Hi1dki795-a8`%@-v)Ii@M9%o4>Pv=D&4x#4YNY_9j3=yUs?ItAhq*D@iAk6X zbr{HYy;_Dt5S;feI7WbW@)Wf=v>MHf#B#27zHU6UY%ek3^RHa|;_i>pR^dvkvN z&!0b6DiuB#cgV1CK>^m^`iNQ88N#=FcbQO2QxkhVpXxl!+Pa97gdiYLHK2}2NJ~>h zz$+2OHVfK!TS0$rxV?1Rl{f+799nNQURxulo&y zp}cpqzEFc&o)9qW_kL=OV2&Jz*QZpXyiD!{Yk7aln>7njyghyLME4xkg*mGcdVS+( z&>Ei8ptYnsY7F3=z*1^KET&LbH<$vPKU$ov(<-#gM#Q_ z=B>+8v8k%Fn23C~WfI%#1IwysWz^Jy45#3ZUy>sul|p=${`I=j*Oc+HJVPAGo=goS zJ;dU?hUzkU#!2_*E}0s@#o^w2^30tR<-C;(nl+$_QN{poK>`_>T7*18#<+n4pR$ctB)8#HY_E5r{m_0;|4=3h1#8Mny zjPWoAce*}yBg7_?c!NVQ7eCW+1~#avBnyTpB^s?}+n$_sSVMi0m1(jh_v-B8A;pl|;cu^rCr&EclsqeF>s9|9bDSdg!3R7K)NkcT|0gFAqK7ofs zHB^9lr7g_9C+>0cFDS{8H`~B9U35K;Xq?z2<$v{R-_@5F9(-7}ukNOh=_5tN4ht6? zV@I2R+T{8L1jN951I9Vs-Yzq`4=UaSn5Q@U`uf_0G%`N-+XT1H_Z4Dv!s&ExxXSO4 z$kw~?a9j3FgfuZh9Ed1I#1wE&PeQh@gbod#Kc)a-@w#MRASP)PP4$d7cXwK4t`8!hUOUaog-}b{!Jg^hMkM)^N$bF(o7AdNHyq1TDCwTP^*h>&} zM_6cq{An8)X5(_*Jv_YZKte1P(lX3WkPpy9I~wg!ZS| zkfZ%WXsM;a6qz;GVY%^mq=>NaZrJJLvV#s;L?Dh}2dl{Vk_>h<4;2Ui&o%Yu#|jX5 zWv4YUXe^M-d9UdNDd;gKVoZP{XMlAj*D^0Os$5Y$I#aq6HiNxjRqjDs_DddEHTUc;~ zH~#kyyJaKxFoFZ)EBI0P)SoWGgR%7VU1UBr&>Ngv5*bqV<9aL<(^Ku3^)-?T18H~bwaxPDk0d&rsxVgxg84VB?Gr%S$}B&{nzk4&QvV8*^ke^-4iLtl7Mq?f z-0)>d8Jh9I9g+lN#fmTx8IT$Ee@%`2@bIyZDol@XSG~Gnd{fwbe`+iM$LAaU%AotP ztZ>#jMQX%QaR*VyN7z|L#>O9#^)s85;NA~1{O#5 z>=Ef#A(b}1LA<50@WUA?v7+=bx;ZL0y7u43w!+ajEG>2Rn}G11Di(0Q62!nv1`f1! zP+aAFkqX31SoYNIE|=Ryp`CTJfWH4rFmF{;lTi)?6B{z;)QtaMk)SH4X5q-XV5|BL zuqo1tU>pc;;yO`L$egoXUg97ZQ=2t-{m@nK{f3BP<#=RjLGFhba{fJr`ht4RRTULm zx;Q7N%S6he1MR94seR`ECPt(CuHwIWY9||Wwa_CRrR+&B6TiP?>q!s3K#I|2Nr68sDbXcyo z>Avx9Y>17y#@3eCp9a7!jp_4D!=* z3THY5yrzM$rkaVmZlOU7WFZGE--$B z{gEvQadC->pP$*nU8FRpn_?ecc-hl>8AguX{Wq)TsyX1{udK0!ldbofDrp=-Qtk(% zn$N-euG}WBLaTO28%+HA0V@hT8&6Ulfhe~~>^XZpp$gRDVzso_vt@li$K01%OOo3G8PqC^St( z5P~=%yJ@DrNhZuz`tPg_?Owx?H^)c=a5PREoYT53iI4kia!H03dCEIJJzdEKZ%;bL z(DBKKbRJbfs@ZneEjvk#B+kvJ1Y=v0MRNb1McTg@T)#dr8u?w?)iQ8udw6Yf#T#TP zRd)`DRJhv7A4$J(Fqm%+kN@vKL_rNh%vPZk+`IknmQw5^dwPs&=}-g&S=*YS|Awv> zr8Zy66T782X9?{D05mMByY+!8mZYR4w5#DRDY^zX`8T8AC zDnoUt+lo@p8gqw0DN{sE;4&25-TkI(F4H6~P5-=HHT#OaI`76Kz@mI8Ayn8lAbw;R ziJeGP>jtQt^Vx}`#Xqn7ukcLaQ+;Y4gjuaze|Mir<#LExeH0Q06$SYf;q(%I2kNWJ zXTz=T8Ro>r?cVwg7ySf@WKi^t^+z@!nB|A^k=Z)W(2@aYT&i$28yj2iPJH6lMGycF z{7uqZATJ=efp$sYfQ=d;jTL zG_PL*mQaM;|G!vNDNaGCcEHH`S`DPs{8i{-?SXcg0#TX~5fAcu%nNbbhK`(nUQ^+P zX{WW)(n@kRQmXiq3*8Zlp8VJ9p9+~aPE@B*s;6g;A$Sh1v_kp$+ndBLOEP_^La9=} zY+_m;!=}@+G~E1m*gl+fntt1g;jxUQi|p*^?b=M)hX|y2<;n{j9$azV0;y)Js%-!3 zqaT18mE(3Xbwh?J?80!|v3nUs=S#O0JPhRl8ME)d>ef2_Ywhvs`5JD&2QG;oSm%S_ z>@YI(=OXKNk4=-P&7`nF*X%sEk34=tlm1J%(*N&2HG2Hv1zOZ$#0HBs)M;n{3lGah z0$W#CcQq&zLm$4GWRM&G=D#AwhxJVDhww*;wgaBXv3b2GT`z z!{0Fz`V}O3y_th6pM@bp;}1%5>?l)#IXR+0+*^cTZo8Hkx{}Wu`LEAwC-(E$NGu~U z0P2yx7n47IC~VxY3lO=sv!3+|EKLhBMf~UG>Z}cu=JKd&;Of58ELPbBQJ0jI)MgL` z+|TPpId)QozmxM)lB;+P>pCpw-hLP6Jdi;ulaQ7e!^M&aWJF@ymr>l70RLU^9Guak z4O)CZ!6Dh?&dsqQ;VtGg79J>?k6;MU29kt838DwU!Gf97o9xm3N>g08r2FB}R`Nxy zgw1Pc(0OedK_aEws=qjV5Sf!Q2CWHh&WGuov53jeOKWM@6rp!1DuP|55bO^LD*}=v z)$9>QgL#c1aPc*K@!WmVlP?l3<_RY_ zt;4}Ed8)!HOig{IlP*-w0BHWYcpJ+9wv%|WcWDu2-S1of1ypHdUJeq20s|kCUaV%y zvHyt}6wN}@m=O**T_D=T=;O%C>c9EYT})$pE_}wLp1?yY)r#y~5>DIS^(F z)e(Af$&Xy$UCUK8?$b%2Q(gQSmZ|m6y2vSXf|BnE(o>e%p_Aau)bD;zWu!mGS6fL! zt&~}&`rlE1JB`qRuKcfU2Q~4NZm{{OW^+=B1@*k$eOfOo3k;wLsz&|(AIXQ5z+X5> zQUA>)`s}lP9?BuJ33aP`OIRMy5!+HVWlwl?=O!Pasd#LV$~hNlDN;oelOCrI3_g#y zZEeCRHg@b{xjo8>k3&AWQuc!8B9sY^1>dNMi0$GG`kSd`fe}*P$H-|Ce*gY`oJ8b$ zr;eCEm}?cMFY=bS?%ir2i< zYyRRinD61jNFfNSni-XrCIpvsG7!Eia04ljat) zOzin+9R2xFr$b3AQfv+h1(M;-fE)m;^gstdio|LbV%?1aM@}Qb)HKht`CSd08qb&t zJ`>sELBCAaT*`LOWMP8!uMnp>sXm$L1~h_nrdLWb9X~P-Q=G!UrvrxpPMJ(p&igUk z1j@AmRgqP$oa7u3Zz6OPmm2Kw;tL8|Rc&Bar+W$1_(#_|;LW{fmIg0?Z>8K^Gy_s9 z^Y`|wLDimw&kN_UZ#~h7QruOKBo6y$P$u;cY(V#w{f~QWPs74EUnSyg4{4#$1{q^3 z#S=Gpc*rzNVD1cZEg+}CfdjSA_))a!EM}_mUVa~I{yamc*!^)T#vdv`I2M?~zbSLx@-dYmhJP{JcsRYQG`wbpI9OlkSpZDj-}K>yhv z7%^kv+mN53G@s9%oyCoBZn+u=ujqTyNvsN(0pFS}V(}3X?@tGvgS-T+2e%A!GK^_x zwGsoZ_Fz|G{^63?KYK8+5i*dA4+tGrZ4*$gXF^q9QpX#3U^PQ;7CEf-hZQ35ks|dm zx@`!XcnV z5a~Gf7!{y$q-;0De-ap^E%PPNO-V_~t0gJQIK4rH8U=NEy_^{b2N?~F+PJqNsbm+c zjEoHNKa3AkORtyfB9F4`7IK(E0fR>BNVu7OR5Vr0v09~ZN}z6jmBU{3402nJ2Iymo z6x4V1yLXt*qdDdsz^?LT27LY!EV5WpJ-a79LDbX*lxu+nHTdc!b@ff>)6)_LmlZBn?3DGfu%)#db1e%uHgUnt`HeazerZZV${5Gi>A^VKZm) z9vY{*6z(poZ@$#iye-$PMKpOHS*0l!=uhCty2H8bKL|&!RVV8-DN+q{qN7XpKO%U; zIkr+%Pz$*{?N3?%dY$vJs^6yf-C|Cmwh$2I;xoTKD6j?`LcUU)=8{O096pZtf+zM` z+F^7J5cSi7Mxf*wd+f;gIf@QsHim%Zf}V?C#Jq!-nEtp#HRix{KZS1c;Q?#r^Ff?S zGmF<74zcw)z0e_Qmx!p<$%7OmV zwrY!VgDe5>ir(n-M40oM6%i8J#m*{De{4aGf1>1zjcfh$<0>RnGC5Cwk|-7K0)u88 zPr}?DYQ<~$0}^V-?5603wN@Z*IwW8>v^(%M$;LH@^UqiEUQ#qlXaaXZppFeA0HY#| zZfIzP?AAlX(iu>?zqLf zRPo&bRh%r!FW)2_nfU9@(e@1wK3usxv2$U`*@7j32nb|+s5PqPP2;n=S=T{?9By|8 zLHDsI3jZvb#ePF2Vf`(eKuoTxu!l;-jN5crE0G+Hkeyw6wSyIzJ*+OK^~DX!wNt=B zfP{9}6o^woJ|JWOSca~irM$qv(7{_o>s2>N83F8)X_@eauZQF24u!QeZjuAiHxRiD zkB806+qZ8&*1CpH6vLpgekpOg;V279;Iw@O(dPnnzEiU-bc;-nT>s0}LK18Z60x6C zfDTHWm`3sB(x(DWKRKD(go(o(mf3^%%nL%?u@+V@H0|x}KlUHmyi(U{u?!%|>qVyY zmHGlQ7(aONqcyqzE9oh*bIF9$7kExJDcGJMV;`T{G9u_hVK1W#(?0bZp55%!pWcWN zo&wI&`13PCawa3?(>uoQI)GFr{n{6HuZ;(!iIfR-zhRnuW{i@oi=k4jR#R)cFX_7> z$aVWpD;F0D*GJpZH&Lo~Ac$R5s=V%}p5tq-v|$f}BQDH^k!?X0@u}^w47{(9X4zJ> zq`koWfxgfp)-9WDBpKh$Y`=2N{FH7b}-g^f%-FDr=Sh0ZEPy_*Q zDL~j|UqRF#KI%%#J984Pwlcg^zuIYPr;qUff7{yJK!d=*!=_GegXz%Lt-mf}15VYrH|KR>N2>62Dzy*gmiX$r0Zz!k zz7z~#LJ`+jR>|_~flO6L*hL?nUt)o8K5d}+W-iI1@y?g zOFL9?ZR+Y{xKB+4urd4By2CF0vN9To-magUY?K9lw!3|~O4%R~pfSOH<8$x@fMiyh zN?p2i$-$Rdw1d=|*&*-n{3Q^CBdw0?V@Wd?6cFhCmykCTzzkU0ZJ}3Ka+%}i9&z4@ zL?N;Xtw|~pvUt6fAvY~OB17kyc`d4d1y)R3s6uK}ryz%+;1~bo5?(6*+R0&roxPnP zhpGh(nrIuNjJjnuEkFv}N9ttTRP2SFR|zw$0#+a9&H(8uMBkMu1HWi^B5jaLFl8Pv zt(bn?4RxE24Z4fj`(`(_B#ia=7|ZfqJ=W$Gxt%H?rBrWY?5(}a={*mOkDJ}k z!=snz1P|i4!@AzER-*2{N>IPplIw>hBqBXpyB2TP~b4sWZEh4h{tOslA z(D(ev`Pn)2TUd&L6NUR@qzDxO38*{e3GP{P`Lp^ygJm3Q7d8+e19tWXZ$Lc@&CwsS ze5XMf40?Y+w{o5ps1KyqN(&|3;|&T84OIwy76$whv00hpVZuZv4eN2^DF~#&-#Y3v zFO>9iuRsu(4Mz_sxp{gJ7(-0I78o|H zY!yTgA}`LJ$m@8@?B7;nwEyUCsZ4s4y*d9|E?<8>>IZlx2&}Bc1{b;d8efb}=C~{$ zx0v#sNN@WxT{*F@)LBbyoVZX?5j12_*cmf7cEx%)ptwGK^>>$JcsbG=Znr)yz(Egw z_kqQkxYf@q?BvYgS6i0+di+yBfIZ`f9%m9BpC0A7e&IWtM86saGL0 zZJBVYl9|3tvJjCjFAI|=(zq>QiPZu7<%jf`W0f9P!cM_?aivQvSm&NOWV3%ED3zE1Cv7wy!L zb^9$xhElKf)`%23ry^cDnWQ3iH5SSHq!SHFs7bJN*~3+@+N(`Fej%H>blzX1M-7gM zj3maK^RLi>E`Yu<>)sf!&*N@Qzb=0h61D5$?F!%4|DV1 z!Bz%Q`++$uP?VWlrLjaa_7L97dj&B0F@IRLpu0%R9&vaZRCd7;yZ2=NTvE% zqT}cxfPnV#N;By;mwuMKG#dbv5AKfjqbtV;>wU^EeY^?z7u3{L4q?8n5kw~krkI`5EpA1A1KKA{>7#cf#FJo2gj$q()Y1}8>jm$Y zjCb!83{72>zNu!K`8@dt4#l!$HA-&-4@L3WI{8i0&^f8?W?nykFQv6H{pXl|ghRy& zhOFV|n!~ih?M&VcEuuN>d+|SC_BTLJfq!Ce;j%lg88(LR#mILWO{H8QEwdfxs+GTz z;BU)<;@E^iD;rid*a5WAGiLdoW27z9iAm=%9@R!38?vk8(b`oOUtV)E`ONSAAcKpF zI{2U#nl>*zmp*ms6W*l;(uuUz8~{)t$ZDzu4&g51>NM2anM8xr?Q%=qH>II`*e$Zc zjOPzNg3|OhX-i;m0ZHTZ`La#}<`p)W|2ryt)&k5*$bwl<%g~#y0Nbl9#0026rO7Hx zLkTYus><@Xp`oF5?JwsKPj_TbKq6Rwe!v4xP$8O0md|4{>+FJ2g~BRqlQ2*v!U_N! zWyakVwm2cezbqi~OH*O$#tDC0R|EKVa-%Z^vhuTG^(&Bn&W*n;LDn|ulG zB}7mO(jNIeTN0p_$ZV{@4M~jHECJXGKfjgQ*@&7e&A3bJ16{k~Dr_EU8TwJSBxdef zP!J8AW!y{%{ZFvh?OO=l8xD&ACsTnh+^4V{cn~}*pe_KiYXP8mw_|_s%t@xdYG5YU zfQ{^Lh6I!eAYW$I=e8=V{sI{|vwsJZP>6@zE(=Hlr;PNXn4L8AIYWWG1uRf*957s^ zz9j3I6y5~@0dN?eMZSRb`NxuL;fG6MW}cc|7zQtkKR@n&cq_8~@IaWI-PNZiCgKlr zQ9bMO#(+w58!EN*uZE53Ap2(LyLJ~cFs5fbofa9p&TJYEQ2+>r3(R`^eI1SfIkb5_Q9`Hub z1Q2gXsNg6}MKX9VaZ9`B=6%%yBIQKHl5V#8B@JsUD?3PG;14!A@@VEIAooFk(^`Q} znU8^Jz>IM2umAvG7@n^6XDMc>sHlkP&9T47zr3tW4}owx9ZGMyG(x@YINu9&bfGG3 zNC;H9lVSU1T8}WJOoFLfC`5#XF!~?(0PFGc<#hBF9nfww=?#NCUi7BdfZ8f20;_DR zvPZow1hcLjm*YvmgGlrqAz%=Q8%-4}W80tI`b4KlLT$CyU>PvPod}@EZ zzHoA6DpxxLaDHd^aR3MsgKoST3`#d|KzejL3L)yhRj`YY!tOe+Jw4;1e4m+>`7S$L z=j5NeLqjli(M3g=<7DkW%vIQ{Ju%FqUZ1m)`1mP7!al?n8d4r3{bug;daZHLBOHPo zNwe)XoXvOwft9y%c=XY9OXR67mn`7+M%K^h!>x(`d~7!~Z~>}UoG{zcY_q&UduwYC z$if4i>=!3H{^>gPXV3ubn)P2krY!Vw7#ukFfYqv>?$XTm1Gk~6gicGC5)4oHA}$<| z+_vxrK}kd!MX!Lh`*fb;OB$@-Ju08w!3q8KMZh<+o7eVv$wMqW<}%{RC+)5hxRbqC zLuxqFWvpq3M*Y$hcwoQ+!bB#eU4A^{=HZdJ|9KY>q=pu*_&v8T@AD7imoEm*0~y`{ z)CY(o_WJsxV4movqL$-fA~O3ZK;#E5`4x*sv%GYQ@BZmv|M_6^xNIzg>fBs=8=h1q z)_-pA5z5{9rfrCgOE0CAVa3&QhiigG@PdpC@i4*rf!KLb&%H-jpnv$oeGgMAH@kyXU;hpn`}i0y$Z= zS-p2pHNcr;o8>kjjL+tY7_FdaLY0bO?hi04H9u5`m#`2RH6{JZq9Okf+nCq*-#?FYKY#ghOp4?Kk;T+JqkVF*HsEi4=Ci|sJ)hr*3r5|6d%&)8 zlA8MWMZZ0%abg}V39$)MxS-2Hu6d314+!~Rhq%sCkpG}@QRN^w;Cbz0x=H$M{!J@= z8P^xF6zf###LL36E9=zm^wY7+{(qfich@u3-@6P@?byrlSGDnVA&Lj#aNL_+E`njp z=6}7F<#zw4Zj+)1F^_IM1*}ardehpg+R`t3#q6)Qb%!e@9_Rik$7H{Bi|qhj0oJv; zZ%l=cYVz0RrKRqbI_+5fZu%Iwl|D`hw)_6;?;75A&V0dRf4*fAGbMJ-l%~C;`S+2u zjLro9=8&3`>DoNP&(Hq|5}GBU$kVS}x2SCXT~XS#U+9Ur=?|dXP8+Su7o57yr$qXj zE*+5>vHR4AD8;d{u}~g(n@?es(ixZ1Tk@Z)z+3UZf9@U3-x?p#o9p~T;PyE<+_h0b zaB-7--T3^kqSw8W{L9=z+IU}Z3ua-~NtUjIN3h!asY<9P%$YAa{(T``tA>a78tUT( zUEJS4-eT9_eX0Ki3?)C)-{TI~({necYV;R!`@FU-`9mF$h2>ros}S>y+-2{JFn`+w zheF4zZIibzPqOml_a}Py0|^y{ht_1hU60OH-wK&-zV zton=M_}IT)@W5wzm(x+?bZGS5{bez=jY>xqa_nY#>|gZ7O(9_Q(;SUJO6>*PMfF$d zJ*R`y=idEAW8QU7UmtIxU4g;$Rr}cbP5&VlyWv-S8}v+Xey~p8R|^KZG2V4P z-PqWq4?^?hyK^LP)Qhb=cRp=lhGf-5e*@`!%~R8gQ3elasIGiDFFfmvliQsNes-KI zRl$;AaCcb#-eZSt4&0(A5a0;M4UWtXaxqHa6J<<2iaNx+-~at{;>6WVIGxL-pXDv^ zi2`J75$rUu>S?=NJjzMvO|R~MTZz4R(azDNBjhS)qugXVrM zjC{UB!WvXPicuc>s3)UD`g^nLR{~M&FL7WKgH;LA;I~^>-ETWZAD{4{j zd90mQjP_<`kIKPYjObfE@_$L5ughCW2sP-(^xV6hzCm2ze>xIy1xfm6rh!22Ir6{<^pm3 z-65v!)7b#}xo11oPJ}+Zi(EqeHCi ze-yZ#jsgk8e~%^>miOOHEb)mIGl|!Jq;3~%y-P|IC$IgsiB`IO7;sXr z4?)>08|?bF;=OAy&pt%y_f-9L_gJmvX@i-hM+)XJNS; zY-NL-b1zZse$>YGv~lxqYNX0*VOxA#{!<(A*7S{)KW8j*@-`Q3gIz)oby})`YK+-} zV*UGM_Y2yJf2(~Ll*FO0{YDYWpM^WrzAtI*r#0~3-kP^5c>~4<$6p^gAwbI1CXH(s zeD1x|r&uHi<7)pI7btp~8=Z03sm4Xyw2u+B^B|F(OHdikf1hF8@3Vn)O;)x0rK-ni z$^5ONOQVyp379K_k3a*z@GHEXQSRDw-Cx@P%a;0Ar#4#C8dn&HGzOyuRG-2k{ciP~ zo3gPBp6pyredql5uDN|8RY0)yjgXzbkN7vyxzc;JAHviEv zUH!NzkD!&|Cy9a zc*}Ehc8Tx8PcyCW-hMRfaaQqMbySMc>D{-H28Ud~I2l66%KP4{k z$LlZtJ}kVH1|0Q2xc>iqwtIBfU%n#nm+41;of7lC?pL-d|2sqaua8O}|LeM$FY|^y z{!cCnyz+S8t^apg%v1$a!t@L{6?)U1;wA~Hs0)qmbJUvCl%z^?nP%YL)L-}O(MvSUbeqa8}m!HR6 zW`O766?Ia_^c~GH^_o+5~cdQ*IZJbz@({L2Dgf-cG z>}k|u>GDqwq#5pf7(}{f+}30=unP?0Nmb6~b}@!V?v-%G}U znnOah(2($aY#UW`&yklpc@K9SVO{mwWUREkfB*QnoZnp_i)0!UtU8^Vu9b2c64NzD4Q)LYe(fY2Hwpx2&3ihTI-i5HT4xFs%K`bWxnkwl#{t?n`0CmEq!cz1*w*3=v-9&V2M$1?KN6U# zswX2OAca@a($Y%9$^$Fs=Wv}=w`aSfWx3H+sLX!8|IEU|>GyB}TzS$}H)X}?DFxYL zJ-EVNKqVi-Q#$$ap3r10;D2o(-aQRsUj-;0Ov;K?vvq)U>9XTt@o|7RV_j>6YD|ms z9`~qb-H-WjzqI8#>_Lm)K$P&XD@B&7xl9`@=JmNhTsuDI;WK!iI z7JOvSj;%@u66g`7(IAQ*_-a&R`j$xpDjO&SRYtcLqxGQrw@O8c=`Oz zn>SOYJTb;G)+s(sd$#tiG_!RlCMCTA12ollcS`)_0Sxh5pKo5MBQe63#V4PU8p!=c zCQFO&Ibmaf>jMSHVDk3&Jjnm?!Ri;%<9xZ zeXDxrg1|@xu;2!2JqpG?y~P-7Abouu71HwbRAH!7I=6_aIN!g2!yi;|#sOk-a>7uY z`mx2neQ$JhG#qiV6l?DVx6@0>*hcIk)!lT@!$g$SKrK?0gfC2D+}U&IAsfbysL`V-p_A z@mLZz0DJMSyN!(sWDnCm`(PBe{{9WN{JSZep&=nHFceJ|4&Ax*LfzPV%fyXM~RfohBAw&K4-Zjssj5 z1N2fAq5j_!IvRB~vXL@c>hZRli>aGJP?v~c9v&vkHVsxpp58cgI(22xJyw5@g%^1^ z4A<&|nBj=vFz}T?Vs^%`*tB%(`Bd*8yN!Ssu(Y)FTkb>FECqC9!f@kVXL`@f%+19D z2dM2qxa^Tyg}man3XrM$fW;7x+}S=meUOBnJ9)q0mrTs=sxj}4b)Om}4c5#;V~i?1 z;0adw-%lI{EAsMO(=T_$a>%dW5sZ0F+w}GIHA_Xh=?KO=bagFzH)gj{^s)tb0hwsD z7A$bbWs!P~8+7{v2Uba&YXQWahu7BDwoN=qAWg3Rj3I$iG>U)Y*NZY>3>g9G%VDUx z^bGG|7*maO@`d<>geY)=FhM&q$C|zLaM&==@d_8ezmQ*l2WvTH$Q{WZ5>Eoh?y3zE zko~sBXy|6?L~6;cD$1?@x_K2CIu74T{&A0=*DW%bfR0fmogLoSgc%G*8AygMIBF8? zQSwSdZGEK=noskE6FUthNbMeRmY?cppPxVaXV|8u-?CY6W!jJ`p)mN%gew-0ZKJ$-^DRyh`TVJL3hya zRaK#1pkL#+TIL68xCI))++<1-zW*A?iz;g?P2}S6T^3&(jYhz5%9ep;E{cHnD}HVm z&Nk<7Zf-u4tjSs{Cz%fC1{AAt3L0D4skF%X0{Wfb$fUYP%1nKM`%zfw1K(L_jveWL zYtW^Svf|0vNPG2aw+|3}iv0AgvwC7Bh~{?YeYGBx8?<0=XnjJR+saZAYsjBulB`wq zB6uk81#M}mYtqDyQg7jvts z41sBAXA(Pblt(<=eKIb@I7eb_mO*ZEq6+1#d)jyHmts)ebKHhqL}(QZq+IS&!p#0u>gZBlHc>o|BTFtn;IqbFsuG=OwLPB2=`&GD zwHmzMF-@UFE1tC2QCh&**+GU?LaEcj0zb*$4Zy<9Am)U0VDu{D9?p@Wi6eO+~-WES&8F zPtSfA-Wm5nW8v7gV>ld6`DElHGsBaSqVQe3ge+l0p(7|2bnr~Z;uC{%kFUnIj5{Tx*?I$cLv4c)y*1NujX_-n0@1kT@;CJlZY{&^lbQ= z9WPIoaCUbWcdv0B?9vm|uX4%>@V9(qW!1EDMTVDO=s0$hG3U6+l4hhZ+w)5CBaIK= zf+C_j4=AB-J7=_ab|U*fG%WWN2p3J7OD0Nyp9%_BOyJk^4{)yB*5{{{gVTuFf*rHm z;Nj-Bvtfi*XtRA1RlapgmSW{ZRq*hIuM}n5M3xXP?Y?hib@q-N9peT*GJcdm1)`Ng z?|46=mr|j*R7UQ0n{LjsVmYB%6pp!#cTMqRkGqeAPYg$n zeW*{UmyGh4`=!EN_y>n8Nf%U7wcg#a`8^o68YsDsMT*{Vle5zNVsz`>0G@HaT>H$h znSS$QnZ=e|L6^kE59cDTh>4B;UeR>iiLMM9Y+U$y3hV3MjSMy9&q}yu<=cr)&LS-a z;wQLA4PWfmjomGn+O^i7m_)`|kX@Z7BwjE3d>fn5d$Ct1`{|zEjXt8IKUEj&hp&>6 zkumW~+2KfnSw-CFbgu6cB{vr>QIt#XvWYv*c#P~kucc}E(H5KW^+K{a&p^8x+LiO+ z@hj7fbqrMZ{ZFZg~ixo9^A+p`3a#F^{jodh|L#e?6Lfq3_ZaK z?`_W6_cOAghTc-S0skMz(faUmH+|`KSfenya}&mMv*WpgyH6!+67;znxPNITi_N&# z&fcA|<T>1jsWQvhz`tsi06*}VRGvm3DkEg{Y$B^e;>VN^wV zV|c20#!vHXbfo!W4}vXw>&qyd?8m~ytBgrKtzWgyb$z29YbnvWWHlI?L*!HhjUDZa zC8F+ruF)N_?G}nuxl6m)pgH33qQK$`$JIsV8<8L;q``DJjv=&z9IjMgdEKe zADp&ikUjAaM%~Rkd0ygilOA3F*tq*=gl>DU(fwFEr%@}1j*v@5*9BA$2YP7tUt*Ar zoj$lbp=uSLnsy*V%=tL?Jg=2Z#x?X6g>mWoYHHj(8(rG>>S<;9)1_N4CM1ns>zd&T zLXRnTS4Qe4=L|gVF*vT3vs`21V@R;9WKX}6GPywC_Q=UmFUK>~$k0oA)@e+IUb+W~ zxT=lgd$@1_b9`pT{^8GNH2>MJk9({Zznoa~K>ZkYDT3TLIPlzQ4K zIeh8vj-WaxzAAc@f1$!Y>0*BUWwts0d#L01f{;3z`3!+=aZ|!=gxqW-%l~nC@%yae zdx6JqdwI?wZ+X7ElUrxBBl+s5q<6|$hB`@3>zeGAsC!*AuL_l|^L9lo-!HveC7Z*8 zLCm}4JIrV;)ad8Zs53Dn;11OWrRe&TV{CHvgqnOZ$}tE@TGr6g&EVamz$2s(_Nvht z@u3mHT+Vo|(sB8k%{R5mQ^FO(3;3SdOjfNf>6P9Uhrd!_7|-8XRF%(Ja#IqC))d<# zLErucr>?0P_*IiPLUS$GoRY+?2e(GzN+6q@OqN-yk}Yf_T)e!Ptb+J^yRi)2u5C0f z-yNaeF$JQ{DyggZnc6h|TPV*bzz4X#!qFbU9JHztYn8gPA8e1jKCvQ}V{|*|>ErZ# zks9{F+?8%9hF^C)N%MknYr=4cm79y3yKJ~CdBFs0D8nvX$NotCV_tFwp@3F(sv6Vq zbl0GA&!V3E+2=RjIo;E`s218^`V>zK9M8}_*2|A{ldeSGyBASu6v48s0b$dh(LjFg z@8Q{STpGg;UDNU($aL(R@iMdV4BCZWG}16UOlVG9qRupb^3w&8$^8flme?+XXl_~u z)@e~?II=x(iT5gID!KD0ihpUblTDAqwZ6x{!iA-J_aV{z5vg|HU|lnV2Iu&d+54r_ zzND9BVKat=Udktbj^EX^fx4`Lq|qLca9FOa`L6b%o`$qe(-2s>hgE)YDJjJTQsRUB zyl)z1QH5O&59k=i(}jY?E1~lFG_=(=<-m$A+SrVg8#Z1FxrWO_%~lm#g&(ZXlDzW_JY@mQq&z~>|;8E)?<;N}@w0v(Yc!@G8(l(T4`YKS2E>5|*_P>=4p z=L$b$6Kbs1%uFWLYMR#n4Bj4|J%|`dS`c66=mclWm{eB1`E%tgj?)r1wCV`#=0!GF zs2K@b2(8KKZB9tb)9ukZ$O#16A#atsJf38Mk7aE*n8m7&l(1>Prg1i!eaFI1+mh|a zzPS^tlm$)gCb|m>^Eh>K(yC5`E}m%a%fq!gW}icAo`^w=_6KGMzP*i^@3nbctotI( zBp#Q#6W8{Xp!*78>$S(h;q*QHg-6mY6q)tu<_^crq|W&h3a1nhdnfvija4|J4TXHn za+aEe%0q;&F-PTV6-!mUCLj zKZ@)dpk1DO+kZkVf?FBY{TSyXPuP;7ZN?wi3r}I~!<`Ep(X)1JwPR^UMhL9)P3gm~K&&o2c*=IXu#B!h|Gm&8w)B&WZv)BXqqCH%p>AbmE z_OsL8(KsKR`up4wjYuUr;4#mLf0|_vh)-R@O+{v&gh2a1e%YZpQ&JsDsFWF8ZXsuR9bx6Nm*p(XxJFQ z)(-FKUm-DOy$%L{IZnVqCeAdbr7^&0u#(|FJ9L%eb~*kHaIR{z^8iDLYRw!Yy?$8_ z%-jAcIDSp`dA@Kp!5G)!PA05F!a@#Duzd02#TQYw)rB?@ka}MHASS=vL;ldKXH%X_ zC|}^C+;E`3gNl84@!#g-TO!rRO@>4ulsZUPb^0Q}5i+YMlrn}*-=@~XPn0leY` zbrNhDjwac6h0eySH_@4WW(gj-Sj)@DOa}4S)N*hsmO8T5d!IiA2Gz4pXEWIQy|2yw zHZe4erP65tSq%Ccc8Q>A)3y)?HxhDAFmW})*btFuzlIQuxq&v9b%J2YWAn#+b&=5a zQG?>7pOBoo5$$~BATy$_fD8{u|LKuD2&l=+q4R+=?#3Gw?8XIm|1B&>gtDBE<2DUx`dr9!;*^ zgJNKkpbxopQ*(3C9D=HV9^-6+rb2+$sLG|r_Vj22n&N4yiGDFntrpnfnBnf_r6!%s zM8x1c01g_h?G*J8YA`$Y84xr(RHOS$6y8pP;CRf7&mnen)WU>!9$fSKr{Du96snjQ z+&osfTreW(3(6vgH9pIRM}S6EI+L7GT~mu;wncq*uG8KBP}Y3s8m5qJ_ez}mrm=UnBvjlWVsimzAH}Wj|5+qmKI#~8^JKTakvL-AV1J3GKl{0L4i_7pnVoP zWpNx>`@hOI7eqFH&=V7iU27cdr!>^nRccI^HLT$QJuEk(NJH_}0WgQKm2Sn8+AC(* zoCG{_ltv+-s;2at_2y(P$ZgiZoqbf#oX1r!9#jQPqDaKirjaQehWQX&- zD34_7^sVrw{_u2J%t|NS@ z5(HO)la-zwfXG^-WFu9)!_Ke0`f|Sv?h0JGhcd6)o#uR{pNz{0N9#x#)UNE@CjX~4 zl4!-BC?gT}h=V zNbqf#Nq~2?02pq4bF^`7wp?z_gY4^J{Bp>aC4ZYD@{?&6YtanoSRL2+l(N7ER-zc2 z7nq40L%F*4zGd}SFzAw7E2J4YyQj(rjL-}BvD9f_=q1BaQ1l~1@@3NWhkC(=XiG5L ziQK+bQgv7hV=<%b_*v?*O5xiXz=hL?U$nnQL!d_!Z}`V2Pu_Kh|49)3$;m^zQ;ZMkEY_{r8NX5+m{2AD}@ z!oo+V)BX5$bSZ2IYM0e>+YB}ij<#5H|MQ zaz${EUk%lC<^}4JQEI%umWh*~e=4FpGmO~Aa&Oel{>AhP54y1fpqp>>!v3zL-?Yel zYP_h2I;J>THOp@e+s9b;t=1~4%3oSe<1We3J-5B5SsQI7!WZ?3y_S@y~89A>(U!Q<0R zu}2P%*#E@Mc%d7kH#Yo9i^T9jE52jLT!vCM-pBb11y=Gak%_EDKY3nWMlZ2c0ft#C zToCTOzrbELK8UgR;IwR*|Ec8YUT1`{i_x!HhX(JHwMpjNl(CTkE5lwI z6Hm;~1sPgu42LrzTK0~^HaZt>Zc+jmA|#JI&hs%N?-vRb*VxZ8H>xoQm>p3aRudpy zc?0V|E1&7BL4XqdVzp)3xqWn2z!fwKkT8k%uM=gEbPizbV*xNkFwH|qO_4}bKr@e# ztLYx?K08$7wDe-yETP^7xVFAmVV{v^68BlV2aiB#-e_wMk1eJP-X8hn$&+rM;@;H5 zguG@#!Ko%^*^|qZP9S*WlJyV@?~w5|sI^Mx?qJP}JWhnII1c|`fp;kTqK{xb3a|jd zwZH_LUf&9G`;k1XU7sLng7&0DHS345vp(gpML>92V`jfI1KPUv9uG3~{SNXG4~C6E?x1(7^y~yUcYXSn{GPtf z-MajorG&kGFB+DX?Z4F)BtlVX?-5>JUK*Q&UZ8LXmg90YZgz{sfweU4h{j`#L7gIl z#C?3ZdV&UZ<$de)6HE&{GiydC2RdHKU13%hssklEW&76N8o%{s*#})c_FRWRpMI_z+G^Ucu6-+fu@TNTxvo@AZ$+A1|{)via$f`^>yJjhf? zU%i8blAASu0fK~u4SRZHR2jl2xPP8z-y=zE7>noU6SaGqAH%jm@6IN~JthU-)UNDG z%&M|qAM}_Ms-LX!rVdIF%DBEyIOQszKBfs1e2nJ5bXOr?zuup2>Np6b*AoL2=&QIAh}W+%CIYHwD^p8Bi-_leiH6vcUmF+U;%w2D4aFZJ_5{iM5B9 zS<)7F_=HBsTJc}j1+bo3ptePwS7Eg}oQ|AuiC6*@Tyov+=J2myB~*zqD*m-3hIG#* zLgA7K>;tY~%4w2@9_fTVsFy^VGuF~yF<}>ebZE%}EkG_dL?bX%6F_xQ5{b9@MLCF- z&g1`-GB=y^{)iE9EJJ5 z!CLmJuv6qGmxhSx^Uq0^jSUZ&z&lLOc{!v^gz(U5W>% zwC@ll6o_k19I`X(P5(Saj)h7UZbUQt6bRqbva5T3l5`st~<>wLsIlUzVf#!?9U=bceoM*2~ zF_6_C6ts|0Y~X%cZ?}a-)O@DA^2G!#!sy!*UAM~K)jQ_KDj&C7)xdrSThI63%a5T< zz|&IaKGR#D@Z^3Y03wk9nG-xazkg3-+qaKd0|(D6Wl4ccN0l!LW;r;PSgkotk};9~A3IO{q*(!%Vep+ks=s4|(!shg zXxjLG;oKWMYp)>TXd2Fr&IJGwWKznbED8NitrYrB69&g%>TdkF1FC z2P*02y-B*}a~V&nX4kYXHyS8?aI4O%6^a$NKw&-3lr>Cz<@{4+{ru`sWmpgd>de{? zc)SJJ-e%S7HhfTRD;^;M&mPX^A!KjB6#?~vTqLvJWUvnmtvQqOc3S1zhAmX@L~$0Z zA~_hCC9;s2CR(ot3kY@4p5D;(Xc33U=$gVtY6&Hta_)U1YEb;^K**6^TrX7NgSk%+ zs@zH?@a+ERc_q=~_n(KGzAJ@J2w)fzPgp_n28Og(CMVv%f1gyrqnoFP+g3nLuX1Ci zhg0D9Xg}pZYBc*(Z<#Y;i;|6vjoSG{oxH=yx2R-k-3e1%^WewIu1j8!bwCEw+^Pw^jqhE|(Qz3QXWrJ7+;FOUHHohZ4ckWZ)I=#D(g?ftQBX8qkbM zLtn2iECx!g;`PD}KQbDZM{a+!9ez+62j%?R=H{tDrMRP-6?F|dU>e+c2rLTFy;eNj znUIEVvdMzvls!KM?5aDHu0AN}W^x&zp`#-&t3*e~ae{IKv<^0);|aY5gr`gi-0a-a zzVf+%%{8}_WjoB^9VNtOqB23uklSYv&$j)@eCmPR7%juKhOLSy)WegJC2|zYJToyM zCmjhZ5v!X?Ks~SeTEEiqg5K+QAhYqn7nUI77rfluQ6TTB7M6j^G)#%$YxgQ5rA~=M zw;3jLhmDP`1tc&OgoHmNq$bzXxCMB|^{wn0?j-lgIlxBcCno|KZ5dSQ?N2N~RQPsg z#FYxQp-kPDGKN~EFr{ED9Om@^e#jIZLmcM#+#;0RGy>VysfCl6R2lZv!+6d+W zvS^Anz50#xK%mMR`Ek+UEXZIi*8HLI(c9$@l4~b)#g^pA0qe~H&<>(hAMdHrZS<&5 zs<@-C01sVAM!7`k{U**vZC7@LkheTjD7Gh$pYPZ{lt-C)SbA3-SOeBOBA_bh1BN=> zPJ1O1k6`9TnG*l$@A{E4j^6-BX@$!Bw>v}{Xnrc>*1i}hUiEofJkY4EuP3&XlK!Ecn47$B49w97V*peEIut~vj+>h>(_Ks( z2X4PY?Z-g z$+{uWec?rRuutoWvj&A+7ftCJVn4+s-h0vq;(hHaE%tq$?*mOkHA@n=Z z4a^q@iq_faFiU+7!PK_Pcp;jp!#JHw(&jqHwY$)qno?Gji(TVQWUA#GH6rh!jGY3h z)%V?B{Y2IUxe6Hdi!%Is`qSnR6jHQI*?sJwj(&tTm{ zHzO$i98*EQPd2uyFWy3r8#G<4t5lXfOB^0{~r-s<@XKsV(@U6hyzsJf?w#-SVOUzdlenAxHhds&{OqU9~{4I$?*+dt89*ROLo=PT{N&jwN z)GNBeEd7P0L&`{5OmuFXsVjn@!#3j+dNfBaFPq<7g6dDn>$9s|PZB|2TS}MPP4U%0nAV_CY0sz zj&X3*f!T+VRaEp}Ba)0$nV9AKICHbnjBvR!ISTcOCn0t+LHbHYYEX-FbL0;iwjGZ}Af8oQX!^XeOGAb0#fS;j?Q@%T4$ zKJH7?+5`nd%*AzZF<5ibEh;D5A|P|44N&~>l;{3by+|2LPjByUg6Ij?fq98Mqz}`i zc&=70tGC`eO<(pXPmNrV z=i4)*VBofzy_eSEh25Z`9ck+Xgl`9J4*z%=U|vEBv6~c@rj_zeu6>$ja2UN2X3!m; zK@bY{od;(0i=KiBq0h=3lRw5uK`1bXEn+W!}-5Ncvk-%`d zfB&RjK&&~j#JFg%e+rTzDXU`n-vh59%U={!mw#-2y(+=k-=}!Rd@J=jb0_W2nef`X zbScNma7Ug4Qop@V`S!`kUxoPTHebhc(XG!?kaDU3ZdAU`#}zc_gS8P8NN58(ng|&1 zRx$cXBqp2Mw^K7)@QJ?h5% zKol7`uFW%{{_J6U*^@Lv4)k)b5te}!LPR=}Nmitk6H4R3?R&=lG3Z1`k*J<71&NN6 z%ZAX+(&ZzKYi0|7z1&uoSo8}@w5(q^;JW_ z%P+?LGQ`qj##}MRMYC1Py@ebnYj=Es5lHFt%+5vdPPzNh%6!1?sTo@YSBH!@TpNej zv)DruC5z;}&>}bF)+Gy94`di*f3)*(?S%A|Qm}8Ml$#UPoxNtk0Ajh0&H%1fv2CyQ zc~@WEr@{~&IQuX1Q0j06$LeZp9mH~f!rR2S+`YZ;LS8Ezu(=W-0z}ruA^(UEJbXjWzB$_v&HWuS$x0b9InvMhL2J6Swh(*)KR za4(3gnp!ulbu{*zv16M^E5dHbBKZK+baV$g#uN*_SJEzRa%bVl;&t z_sFf_+UMC$9tj>GCqr+i*Axh}5-y600Y%7v?YbD=B@W_sB4xUvi3Kmd7Rt!A6pdH! zZwNC@ZfUkZ{zXJo!jA6Zx7Z4QNpx$^YB8XG8*-)aEdK~nk*J(4_#?Nf`5ZPSzk2TrAS5iZ7dSfOHf-_YNCi$~{${e2I0_tKd6HPA=$@5Ug(hJOaz7!Pq zOnWAgcheiB6FUYMO5q;)d~;w7Cyi zf@(qjfaJ+KfRybhO3sK4Xz0wT>Pr6VAF;vmDHnZ|$tUxN{0;f`-H8e5=vMC(9=Mwx zK4b1?-E9rJ*k>beohs&lxkVbg$JGNB+3u>C)`t$Za3!V7@{uavzB&lT*a>hfxn{1o z0NcrALc2@EEN&w$je$VMKaxJWWPevO5i?=(?#{1^8FBJ9V=RxxJW_Y#SaXV-DgJ5w zPu435>by8~aTcjSEIwo`?zxKv1?ODTAuf#l8aaU`!viiQ6R3WbkT?`#_^@)Jxr?gUeE`K0{eyta zB3)_26*Tud2e%=GWc*4u?`j{5XqyPR@$Mds2QIi-K_`uJY*6ZJA0o*9B#(lEGeK-$hbl(jhEb>S#_!pTon8DaJj3hzai!lKfqx|fzJ z#{6rOV>^xqpf>TE@rox$k#aQ>jkNa`9RW0O6i7&CZqI^5HhvXBE zq3u(MEH%VSu648BHpX#W>O1zI$&oHL%GrbDaOHmAOWC8jauU5}beNW<%$k|B)4gGq zp}o(qrmusx<|~=Vju|d#HrKid94E?M$yj!x>H3w4P$;Pu z4gc(WH>Djx8}J$q_)p?c$VgbdZS%cK17bPphwYO(EDnO5NH=W;+cc5 zg2<CYumL`(pI=b{daZq@1FIOlKPAZ-NI%Bqm6G{EljXve%SaV_`&&aOCA}&Ca zBQR*Vn7Eorvi{U$Fg;Ni|Lye&!nG=w(cG=d8SNK7iJCU=p*6Ci@3MY+)W|PAocJ_} zq5ztZp-!rD)r-y>%y7w-$Kg@F(3RnmcAmuA6jR|T>Gy{+ai$HUiCUZ6H6ENw-^V4v zw(`B`1h24k&KAy`olnen5Q;v&lWJl}pG%VV9TL3UvE99fcSSVjJS`O$-EL8{gXIci zk#fy;xmpsJ>-LqH#-5pGnKtlPE{Cxw)9F7IZLi`+naYJ1g@$dmK>bziv5?_6>ML zytFb*MWm>lF03>;45Sc_`&W4{RJlJd@~y!vCXvJa9jS^Z57;RCezIv)r}tR*&8wCh z$~4<6vo^5L5e#rmco|PooRk_*sK?mlL_`Qk&e-Rp&1W`_Dt*2?rcPly85N_o$kM=Z=i>S*HC5-3P zU0f0&GBi$XZN0gyAldV+3G!p5^*Z^59Zz2#6=y^2a27hPPE_H{6h2xJ`h#}e1mBFi zC=0|AiCA`5Ib_zm_==rbT`F995iUCpY!1jV1_LGogY0DGekLLk4rH>AuXLM=JqQju z@bhA{TVDzg%jT&^d(mRr>WT;T9hBZUsyDPt95Oke|K8>e@SQ%;U+sB*Bkl5REMfAY zruLFK9fm?Li~^wU9yu0dv5TeR4#);b(9z@a)vJ)fD?#K3Hbgp}KfnFM44Ex+va`n_ z;$7h1oaZkCpT(K~MckLiL%sk1>L}XPX(!83hfW)1-zjNFC9*49_QE8?pma*5)De=k zBhne|o@AvEV++Kr&QGgpZ zNJvCua@@_Z17O@QU7ClA)|=bBBNnb5_!bW1JpnVkhuEQ;pubLS@426dpMsNV<;uHf za<|~E!Si$@SIc{H#8D0X4@?b&)ggbz34L27%o_XjAOA!*tzuBXctf(XawS-bT#Pq; z>(eS%_I;0MM~TZ|u%<)|j16%rUeQE7+;gd67cn=w3vW%T=qETi%$wEa;?U@wx$s&L zu8(dsg!k}E($b)Ln@0$Nf{WtlD=P-j2^eKsL1w$Px?HhP-lq@$ha>Q-+g#<*zJKNB zEgzBq%;_ID91GM$W=-G>kLk@DI7ujY4y9&$_eZ0yxQL_TzOX69JOir5nm)+9k9F1h zuewT(7n__yflq`cz$-&wR31?WY4)qHvS(u}CIJ)OL%07Pe{M%8)m`wV7LF|u{t{M& z-up1W(J6I`Fr#Q9bM#WPz0Hz@4^A!iDH1nvt`8z=>x92^&qqX2Zv(y?33tt@?p%%Ht|WScg;pf*r4o?`dkzvv;s@hBiR_EC=OiAg{>`tfOP`1;TuQ&RFz2 z`PyW^NbvX2!6~Dlk;n_Oi*$wMx$Q(u=E*cN+CvBE36N0J**d<^TW6|Ma&8MmMpo%l zv4yt{xQCr6`}7^)%Q)J!q;x>^nCJe~4hD|f%B+HzO+@7{JB~#sW1<)#QOx}FLR&y#W!k|ZM_Vy#C zr60+s?|W;(5rqHU?3cFt;gh`{d&9zD7*aZ?hE$+Pcz5bp5jZnfJg>#}699R;xx`BGj;p=ui6<2mQ3oob zvB7=j6-(Jy>$uWR2``}eYWC_ME6^L=a&|7$OrpOr;5n=LRH1jOCQ?HaI}cFLI%kkb zchB*Rqby<+Cl2a&A&xftaGLt^=U^;3lyCnuD-(&R!>aczJFa9@73MS8B+aG^?kN=~ z+D-4+cPcx%NLbQFk8S3kUn-0CiIDNYRtOGuV`x)hKD#Jp;0SVH^L78AI1dLNYwh#EYhX#bFz@QPU-ly-W;c+upTxY@Vu|`ty>~>edC2b^}H#nGe;46YGJzlFZYMXxQ*4-OGS*7be9$V3rauN zICyTQqgVqzWy8Rvs)mM`%hMeppHxTTx%>1X@X;6)0wd7Lk!x8F+N7=C&O)c*E(amK z<|i-TJ=G(maLPpA0aW*(p?b&y_%sf{ya?MUN2MH{;d?#=XzZcKFvkj<%LPrr^^uAE z?Uc#NC(9gaZ)}x*1_1hktoRZl1!`YcZQ+5ZTk5pqDa23ng6D?kqF`gRf>n4c)aJRx{Q4~=Qm?QKTf`YM74H_;#XV$rua8?>&#UJU3^Rk%t z5KtO{7gjg|6PzCMgF*AJd5ALr75x_nK3w`G30@v7Lc12umwFCBoe--nyHB=ugYl=` zy#ntg!0Lq`n*Pb)gmPT!(9l1C<@56|jSsbN19?ueQcf^bIK5C5Bm5jMUVPF1UOhJGNYYIEd4{7e)S9~WfT zz5JyK_$xYIp!(J^2W29`XSsXX6JJAKr?AvX-0zBuAdywq{(gagzTMr^>kW!m%@YU$ z)Xw97hiFrYH@^ikrM43P6Z*v77E2Nm*pvQq?PS;X@06zsFtt#THUi>AT{zf(F8q ziAVdQX2(#w;EH)a(;$533!NZRA$)&jsS<}PAmv(uc&Y#K`u`9)vF?YV_r4MC#B2uQ zcO&twqe-D73@0*#hDrd-abB5-h)99P z!G}2EYUHu>>E7VkG)&Vl(EsAmHu=~7gdmDk1OjUI_!iu{rFcfW`(q$gt~O0`pi5E3 z?O_4Ma?o@8Dw*?r5gY13!aEmK^4_WZgWb1oWgVfg>69YA2o`*vmJ`mo7+`$zN3RFg*1BOBVX|7;siSmI|ND?b@^ zt60q|Wb(=e$bDD;%#t5vM96i7u>`WWp}z2lOYKS_S&1?2<*Hd>)e5A_7ZFHeM>ml^FMgxo^to| z{-qeCE_LP}qZblrr|Yp5xa1BWAMMjzzewQJx$1zHz}T9n4ec1#>J!az)w&2(>0k%x zB@>f7q%%%n_VZ3iat0#wE-v8(x-d^^)@>ygf|r`(H7cC>7M@6Z+R+cs`*UqC(A`55 zKjj_`@e4d*JOA+o7cW>@sKEV0F9k=uZA|+5Qa|y_^Nv>@TTuUrH@tL zl6?SFHh5KfH&S>6>JBY6PCiNZY-bH^epz899E@b1s6(msLz~-9Lf8Be9{o{MaGL%1 z*Qhgpn)j=Bb$kgm{Cg>O{b*b*LY{zmqLDZc=s4Eg?Md302^bTFPgq!`popdvE)5vY z?>m4!zsKIv_4%4);%M4^xQeaH0?mH_^^m;@ayCS2&wjV(kZg)CP%{*P@J|k8(Yng# zrpg_$e_wJwpV{Qv++gzF;n~n|^#<4fBYxre^F3fjsEk6Z+sqLVgjf4X(FWXbr&5Kp z?L>!@JD@?$dDHBwgoyyrunEDv?A6DopU@6#i`}It5mB(c-BsfHfrkF&4^R~Hq6jSp zVY5AjbdJ7Gs|*w5K3H-WJ{Us7RN%|0o+-xr4CkI;uO`GIeY;&f(^^MUn>^}*zh4W! z1I>1UW3L^EJfTEU7p{<&jbEq}d&bG!bzJ?d4WTdHG1ogcE$RRL^R-QC+Q;Sxr~50e zV;&X|(AURY+{ml5hBP^uU$6Vya$NR3;E@YBT7j;vTgQ~g)JaB05p8(?9W=RgQltUv z!M20-(Y-ZdPs+@%)apohv#WHb z-{>d?4w^9R@1A9JJ2^i&IkjGNa87>ofWD~q{&hFf`Qc-vtNjeO3)>~`$6&UkwCVP> zw~olzhlO>P15xhsRwFFAB=LcftEUOf?H!B(caO-3Gh-ONS`CUC8g7J^W(@yGG2YVX zQE+Oz^7A>qI?$h6?#kTz<3RTTPBOcbEIVT7Af@BZrcXH@kE!YQ#``5sssW=bP6A}j zM?|*e1b}D-s7O8L#wa(B=brMdW|(@2yqq5W7qET3W$n!zUKYNW!|n|n^)zgw+DU%d z_8DCC+vjHjl$PP0?gQ$zgi$uXNj8-5fKlK4u?#^Lgpv5@R9&6%C-rHdYP+|{c8BtVMA1I!~ zHy{Nk9oURHQf~PXjohpL@uAPPnkWk!Y%aKl3e}`Y#pj54cJJ!*cNy1sVQmD5buw@L zRlincW;e;`eATA%AOTYAQ~$2Uoc#pGQTNB|F~_Wu0lp!x!Kns#XzZ0o&oET#xZy#4 zJ(DBvc9q5+kuer8XjQyMl~Zq;6MOGfuAW~=O(wZ&(c)R+Hl#=?k4swyyvSOa##>sN z*U`nfvIi2#xY!p;P;;H6iCD%gCm*Sv@fA~9Y>}qST-mhin|d$dE1r^X`*5d-6GR%= za@%dSqpg;V9(QnHGX7BNK+ps?=Bq}JUezO;L|}rQ=XX_nFUhgwe@}`8hgOt`+rc5P z_3FFe(A(`rQP-c^zx8xESG?}Z`;_ErH+S`f91SK`m^U-hdW>&Ulx&-cMQKwRmccQW z{$9^#f7w1?-w?NG6r)#gnX13i;-x8N&(=E_|4luk4m+{=CFQxJMn=LpkIBcFa54uL zP(_~9?t9sXTXtA^S~OuGBxS?7tlr|BsCg;4m2Y=voMa2i&!KTiKIU5bZaC>gX@&f( z?2GM{>W!}?5^TJDEYfV!7T0gcZaxTve6S#y=a{#*#pB!wqm;7RbU_2&B~4l|U;Ela ziO7#1KR)5s+k{#elE|gE#hgN<-L-qY3yVITDY#&8hn~a~Naxu3-WmPUt$~iw=FexEG;KLon*Lel)j;;a@@8t)arGQU)DR43AuPvrE6`>l<|p}X>AMH61hpi`;@#}u0;)^y zZkCI94bR|m6N7lx^BSRWgC^(46Nl%&-%AOGvr2Z8_b&n~@TkTX9fH4KVey}r@fZ$% zH+jhZ6xOkR*IXRneK-_VEw8b^93rQB!zF#_1Y~`p(qz^nAb3m{W%|vxkMN`p)aNX> zW7O7)!h)W&$77a4ctxF@!l6qnx^!{${R=q$v!t@tSorw+L_@VS{9q@o)xFU%w6^8P z(N_rSI@<%t+%$IW>h9R^UFzztHFwn1)h$#`b(&0k6#iCSlx5EJ7VYvGs52=@ojtlW zYB$n`npS2sznymKt>gBSD{@b?H)dC8Xq9wF3zM~M2Q@*oU2@*EYjQz&X1^(WF_B&X z0KIC|K=^L^K)sU$Vh$>ncS#9u?IBnDW(}??por9)o>fe0QogGu_~?X&;Y@Ikwrc*z zHuc)}+I4x={T`|XuQrw|pH+^#mA!1B(Z<^~^y;GZN;;4rBr!B<*ADpB_B+0fU(~w& zu#>h7M5U}6z3usf84|1VtuyF1-#m}$-EF6cPOPHUeHel$W=KH$moM(tYP)EmZ_j)@ ze~z)^qMqdR$*Er&?f>!f@UGgFC#hSmqbg2I_FsL{cA*8l{2_)bpUAQ02Lu(XgTBC@ zp5^(3^X5V9$)n}hpm)sL(W}_`=!CqXiOcOrW$R_ic`tYSw7qn*su;wxq5h{?`{pD@ zadTAsi24V9T-j|Wc5cx0fVHa@h68Znp+C3uZNWr$j3hXba_0);|&XJyUb>A(6F8oDTaZmO3%KplCQ) z-;8fqP?)65N?J$93bXmg3X@{?SG(v4dGDL+HflZrEMqT$zBPwSKX*3YA(0=+-GBxB z#xu(xwPhhf2P2re@eR9emMN5`yxpn*=HC^pxR% zO|&N>7BS5YT@$VcXyz-XS!(1Ul~td*mA@v}J1;m^bu%%I9AM;3&Q#N z=S!VVU9gB@lZlLlEyD8D6pwndb=f&6Kb`w0Z zBA4f_Wmj{PweushbKSi!7mmE4Q$pSM>u^f>meVX_y^;N#MCM~P&&!FShBLByBj%hr zgV8P3EmXtyM7G+K7_Pj+ZvjzRrsKIq-3et!%V$fTdX3NP*(NP3AaHkss3`GpD+OE^ zEB&Wi<$J%<`fju9OBC+p=-gf1v^2#tw4VHD;YYns2EQ1Tit3T~N1o_57vH?>#4Z`T z)w*8TydsW-ec8R8Kz9 zu6|ZrdkgJVoV=h0YKi7A^N!6ACpV>*3i*xM538_4Z3WCs{HcB;#ZhV$wSvG2x8A<$L_oNI%X_w&|9toO~2xTi|m@WNCBN-jWNh4bO{!JpW1J{%;$EMwS#Jn!L zXsm&ordN>KeC^Q@pA_D{a=Q&Qa?rMSr0L5&B_jvLvs_3sJI-oIZT0kDt$3~go2d{B>B=z2s`fSGfzNY2JM;kM4vvcsxc4rMG*^HM;2$}YatjnzUFuY7roziR_ zWoF(On$%vqjS>wMl#yjE*~NEwkeEpC_^ZBhvg5$ZbmpmC&aOp~`}w(Ek7--Z+J*-0 zFr`U?;-sfUG=Um#bzX#Rg|9JBKuS7b{L5X~ktVseb6b%Omdf=897Z25@ZyYHc|o2I za)e2O@}4^dOx2^@$k5Oti4dtV2FE5Q_9x0he3$w6nOzl}G0O1RM|JL2c9A3l~Rg{;ceA zTj3HksLuShfpmNyf{7R=lIz7|Am!Vwt?fzSlm-+G7J${Jz@8gC6dPS35l~I24FO-i z*a=&X75D40Q$T-s{z%?gE~)*c=nJ70x3klQ#9TAtsIjYdUt=c;W*4@XD+SVk#-?Ht zAy?)3pF1bdKjQn@wA>cCd4p4ENyTFtB8odYG?3iJ^G7sbVnr8-pl8}KRoz9S`#eII zi-;8G?Dq;a%{s}@gpTCbhzjvw!oRBA2hu~dvU@HUWD}D^MDLk<$t9}!yyK(r(;Pjv z<8Xp2!o_mRXJ9O(YiBVvSKfu8?O>r5y)27)K-Sfg?BMV?XZtch7ch>jzxo?gusK|! zFS2fE+zNJK>An5k-sX@x$3KROS$5N=P0h~b+5x3Id1x=Mu+W(1H5ru-90hDcc(UOt z%{}$JX`N+k5A0pVvrn4WmBS}(Jmo2h%)s|AZcEYvkB_D|@l>>Q+FA3cioh-ibfK(w z)W4t0jT`ly9!t|9%}^1{2%j~N0w)z8?Vo$ad)mxHx*9}0T2pI%2MWhwHuk57Hu|Jl z?JORjsLm%Whdh=11ZvC-xUJUl{aQkqAVp3k@yf0teT^N>bB(ys!Z@KcTnhT6B_|7h zU0#WL@N9{PrA=>=jZjnW;TirIQqzhPxo~t4kOinAp9^JxTG{#81D$QK=eVmz;I^XD zzQRlVuz?TQ$}*{;|G8Tc&9Xsi##@2Moh^2_XgJ^xaIrhonU4J3K!AzA9t zJiQG{s*LLrTY8o1fG`vp`>&6dc<(uz6E^W4oMbE#-{i1z1Pq6;{3ldhBr=pkmODC7SCUu z5p4JLt|FsX;5G26)^|Mhm@!@9@_Bn_)HgVtD{g`cQcRe}O_jmZw~y zgdoOfR%o2aiVJ>zmJ`jUPg-emoWb96OkHGXB%4c5ZFrwdn>jt|I{Sv^+gx3=b_O^m^B0_#qQywB*gV?lT9S8Hpq- zL&^(dFLtJfE6q-~Ayh>B?9`B7_G=-XtV{l2L&s~1f8+=>=^pY4K7#u_5sFp+2Aff_ zr161G$44uNXQj^s-+y*jcv0g^yK=WP00CenKH%r)=kTh)RnqOwqMMh;H~iVph|9XB ze(8c+kOdsK08oCU+=WAS2(-Y=~LD4rB_ltJ_4uj2)IX)cV=8#j*KfG)4HeZ`#*W^Dl76UOWwKlNJp)zx;v#{7SJE(N z8tb;_!62m%!w>aza6X&G4s-<1QPeJeO&*-EpgINYy)Gf2S*tDDMNX50y~c{sj>OcT zX3HH6SB-wCBL5=%K0f}m*-J1@y@%sE+gk}il|%xZzVvT+(`T?|6GpSmUWtpgRSUiX z?^BSl*Hr=#VCGI^p5}DA=t4^jw>ro8uC)3s`_-hr?%66BXB%&~h(a=PML-QqV zY;l8rKV6Nj3VkZ!royi?9~~GDTt~0A29@gh^_!y)g$VSJOb8 z4VR4GMv`hld$Ewf%geqn^VS9D!Fa;WGn?8PW-#!HdL)l2s9yxYQK^JOO+OLf;v{`5 zo$Hke$jr}hoI?x)W0xgq_~m4bu){Gbbss(FX$3MNch|kS%P(AeL1R>}@dSi1D}Z@m5I^7<7o;;!uQnVV+Jxlb92t*$vv%e$^GJ?5SYfx?`} z)NG36Oy$~_5cYKSeN2%)Q{G_<%yy?PzGv8Ur_QW>U-=|sZrZ4R`)6ls6^#5V89E&^ zX_a=nXjVBXJR+j%TW1A(t)ghumZ`NSKhAqit!~?L!-RY}C^Vg)Y}`ijY$oH^$y3A#=Vk*GkB9vH~e4PK8Vvi{~YgYAOeeWS*O?IW5u z>LyKC#xJVIa~Vf<*(oN2 z!=U0RAkskz!`siG&#WS;zu~imiLpREipL+q$M!02IS;zB`OB~1CJ8=GF@u&eJUmRB zvZNS0UA%a)wq86RSCp_uBEQ9gcDY$t2ot={7lKwUIh!(nLwddQ<@+N2o>!Red7y<| z1_Fl^g|LQeZV;F7{&7^}?lhr|(7Hd);MyT$!rBMg+Aa(;*=K3vzYuIw zQ{|Ci*V0YyPb(3a>%nOU)7yTyt27u!A7A z7?zrgtxf~ON3Vj`>VUjk*tT`W+s?+&@8X<3UK{)C@=$&yf!djeF#vk0uJvJF= zgX~+MZ3`)&sR(uaMe8P-!rZvm+}eYMDohV;JFA~brgz|VYZ-Aqcg`4t&AzBDan(q- ze@31R!VtfKj=#jwQ+9}yD+k1vt38&7Z@j3$kOEbAO#PoHa9;rc0T#2~MWA zJ5rAgxaS?aFcx#@clHF~UQJ!bs&t!vwBm_oHSf*c0iJW&3E}dwSm)P7F~?Jb=N3LF zE8(YN{-i;xGsepW>UNUFW!<%QR&Q(DH}pKMao3eU@APZ|5ypN|i-E1XhcE9#U>t|# z;p^MD*!2WEB2L-khC|6AidJEg6mJ4uhh;$i(;$kW{deVY? z*Ul?;(UgT}X**T8HS5OPM?{J+;lzqMWIi|dtwPeTbY~_-88Vw4?`b(XJ5lBmu`BP1 z0Js9|Fa^J}!~c2^Lll>jZB28G_*hf(R?^Z}G%fUe+S^_-vQ?gMsySA8@!KQfN?okoj2W>X>Asndvdi=1 zM9&ffud}=!BIFy+$4=GT+MB3mb}lU!?%3WLm>MqkqKq&0^*s40siUV@j8*MQnFZ18zIt&>J`_xpgLPagt;<&KFa1Jr^NCcoxCHF z*66LXj&hqY_TZ+bECN^8taaYqeLJR-y0zKth|!fL<}}p(>Uk?1J0Dh^q&(mBTh8V0 z&aVzVOC5uDVRC1R_UHb$S)Wr?dYYJ~>Egc(J~${0x_v7s?PoY%!jsbV{aa^Zl_#5C zGj1)u+C(taCU}O#SdJP*hM<@+YrG0E)0-6}$H&G_49##fgBwCwY5@@zS0RQOmU^Jx5{aPI zm{Mdju*bJ;C)rN3uIe#jU=3xE`q=$fF6|=;oC^$W8`U(X3D+1iQjxsVNKz}mrqsKN zbV1^-h9D22P&bHY6pdkT2tRnXH@IllbZgXrkW5_cg6M)&Y>8V7%G~qI`j`eErwS1w zAg(SBt>GiyWY_!1oGRE~Hf-E@@9te9ls%WnWRM<+eO5VPh0vqy6NF(tKGK)(a&m^+ zj+Tnpzn_&wU}u7^?^kR-z`4AW z=zVPcyVo!rYsR~vaT>WsaDQ)uDS)Q0y`_Sr9!?mMOVv&##+!tZh^w7TH#fG_Vq zkdfw2Q(fsYh>__j8MwbczquwJqY?Q1Ye}$UqU9#bK`B*?qfCDHew3jz+#-q7M0MA6&0Ax+ov|7B&CBCUIjmk56CTkCO4Vva0HqKlkWCO2ci< z$gb^>IztP^7~+@8KCh7sZmsc0#6~q~7#fL8D^#qJ&aBsskxgUbTI9yeg2|ea^yRt; zJb%$lAq+kLS}CE)p;ko{j+G8mjEG@_SZ8uV&pshMGs)4+a5ZW(5_q`Z$H_Ix9opv? zXPXH7BN8f~K4^AopzOYfV!^26-0V#AfTG_;luldunQ^Oi`Em;{EhjZtiwzsbOKyc5NNzg2Hv3jzbT*0Pe6tX^I zx^~JM#y_3Osa>I@s@iu^^9hukF@QdX+PrSRfq~W3 z7*vazbJL^E6AvFgylRuyff_TQG><)wG2wQUX6Md$uA<88KfW4xNfzGX5+UO`hOM9`P_j`IU4I;rZ+9=PG$`{4N(XFjSlDmU;BV!jN<9X8 zI#An-2r)xSwHy9qKZEae3u5*7)g1l5!4N014Pibe{&v)F+NI0S538l~{=V6kM6*8~F$E(^|L#-gr`5(b$~Fm0d-)qUB;$T8?>tB zr`cOD-XdpbU!%dIL&Nqe+%%j3Q`(rT^S-E_E!>-A4JBAZ-Yo~2Db8)g|I0O`GIicG zX7t+6)X3F%Rw*@fEPJL^PQMdmRnuu7t&q30-?5&1KfPPmD`kLt-pz-cAm}8fb;JHq zfoxMyeDdJIG;gQG2|h2qwUd=eE(~hlJ*PI9^&w*iRbn(yTQc2N`hW$TY91AB8Mg1T z#2s&U@}u-hjgVN}lCy|^@!WlF1zA3?!sUx{rnXR;=I$xQ*ImcflQ~hXOuIx|LncSw z@r|69#m5TPml?&%Q<_if>ZSw*!on>(^=Y~r3}!xEwQ&i5Cas0gYUaYax!9G-%^0NN>Al~un)Kg z%1HZ4BkMh+>ZwC(k+bdkMB<<4l6pdF1obNAxLej@1!0#%~Qnp=T+5vxBPNrMvc0o0%>51Db^UE0Lni%ko7 z<%@idj3qyp@8%paTTNM_H?pO2eas|-%l~AScKe?f^h}!^N!wA@uUE7s2K=fMYLk*( znrM5$YkO{(xui}D_S8%KbI)&I)u%r^lPnlXli;ND*NeVS*~0I-@%Bvepc*eySxnw_ z{l|&i+P5>SPo2H^yOw~|ZbZN#Xvr>4lymRE=FKrx?|*87vkb9T3^r|`BEGW=*xsEZ zGM)Ex0GeS#BpezR`I+slXBFh-?E)5Dhv;x8uFS&`Z&b=ath3Eb)1hwZ`T;-Z&CH=+ z0%Xj*h1z+$31DFD@1F$UcYELFojL))1YSZyW4w9oO|_kPLn*vdBJKHZZX(&b>R<~~ ztrUYB=)+KX)Nz*q5k?z)1mDemrVgq1RI*PoVp#|T3ZKT9#-mCkp~3bsD%~#a_o2;p zc4QrlkvXLACR=|eHuEp7ofaL4y_3cYG}w`Fb=lIT2Xar1X$Hj}F~E6h&)VIjiAC%7 z)dSVToPzEva^ zOSatkub*B$sZB!S3%7W^q-0EIMFcyVcwaPlQ{$1iC@^5$>>P#~ml&YJp!{0cAV)~5 zs-7i5gsMuvY5B(y30wrl(ozstgonj2O>4>u2t~_ZT(>*gDe{!;8dnFXwuTA6&~uHI zNXj5aiojpftlJ1=zhR-5La1DGuv<*vHUEv|tliXXWYYBG z_JhAX6^P|!5cU|t;!;{#DqY_qsBn7V@6lW4&dLqi9Le>N2ol0U=sUefdyWza34zh+ zb@`)Y0o+V{5c8ba?*}YTmo-#bwb-xg34}9$#At5JXtc~-pU7~~nrO49B*n&Fe;g0S zjnG7Ee*YA@B-2COX$}FK#aC&er)SGdwkicCDA9s%JzhB~>9J8Dp_(ekzD4#*xJfQE zXZnA-BrMv|VU^Z;_|CL4ca2`XCbLsrPth`XG!HElItbs5_Acx4wEU;WJDTf_At*roH(hOE{|#+f@Z?(8ljU4V4#qigaXd zXf7_+%44L8Q;bG4B9z=`7Tl*1Gxk31{Im|BY(mH@6Tlc`^y&20{pHC0Av`>~ghcng zWaG7`V0O5cE3hoA{l(^>2>v8qO9(Fm>N}#*BLuGA5ZyB!nF>3>i9TM{y&E?Np|>TX@($~)c+5&i>2hfWNb|^L<_E490~oQ!1e>07eP#@FQPpb z#`zj8C`Z$F@W;pNC&PI5uQ)#nYc8Dc{2g}>96;0*$|pGAJpGRUJE5>z@Ftvetb~Qc zFP?2iTBI<0B5Ary_NU%kKrtLsDu`E@sKWm_dy)97{||!>|Mw{lnMC7ao&FO<`vXi9u+!rjLFq)|nJOv~3*OouK^e6R1 zgjd?oIsuLU$JEEsgny;p#Jh()f%uc_1Djj>Fx)Vh8{~+!t)9tb4t4!;MZ^S}efn!1SiLvP%CvLr!~VAPD*YW@Xq(us zG-6Bt@d|l)W>+FHTuop_$Bz>*U+Pyp2WSI|BR}3bo&oQTfblfM*Y1A5o?9pVKSp*w zM@AB+_X+6#gC%y*aL*eYDe?X0jIfC9d002(@M-7Y#3Mw!URpo;H`esuHIF+dXGz~a z=0<}MI`G@ub>3)y2%j5SqaOYNohWYFM$J> zmJIriZDI{!J;fKOf=3C?Lt5FM_BLBB@gL*&B2mv1w*W3U+u~jSnlCuph6(D9gL7C! z&<88yHRo&myQ2Wj*O${*IqQ=CZPzdzUuU?jHD7=(tdammU3 zURNJTI~sZfm!hV49oRolXavq$2~pQr)$hvN+z~gJ(yRsFWpS z30yg~|I3_eh#R--&viC;pe0Z%+wiw$FMgxx9II)JTTvZBuGPq&sCnj(G%sv5&-n`_ zg1(<7=BW+mn$Z%1Dq8v_)fWrd1Lds2)~FGyYhml5jV_x~f*|{GL;uz0 zlv!*1oRt%l$kATt*Y77Jcuahre{Nke3`;qf*;GV^y4xeYBdvKIk;Ra3NFSonvr};p zCvwOM=92iAZ*A+!eIfIBBR{|`+^Vz#9d~8#D2cnMxLu0ZCdF2ogAiz&9AX-^3i?es zxBhDQ#&gq9jrueBflKH5tEX3Eq*S?CRT~k%pg#6YVzbd0<$z3NnM6vQ?jvG|V#na-s|+G|mI4vI}gGrRNDed0i2(%a!5 zB@&;oxKxnv?OP5Nytj%lX9mtr_IfBZOch=jd@v1Ecg*UYOEFr#oZH*H(}L8MmDipv zChSQbluSgBf(-u)i9c1FW>l|-f$wZrVpzCfZz4HXXwrMi4V)P6^jqNL9U7h-rI#CR z{*}~yw97Eo?d=gSRA$87Gd4F2gew&5MHiYseX>j5-RbnxT;(?C%C!@)AzS{@v{ zc}f*zJ&<^G5Sq%$P8t!fZTza0+d4`EsB^uIo=VQ9%K{AHtZj}`P>_U(2mh)*YmL*G zmPr2KDx7xwkBZSrg1>Q}doYz+kWw=^z%?(v;L%6nBm(WfZ}x)tq-Ww!>DW9=%!!orB4%^VW_d~ZKMKc6;3l%0ex zv^iH^jkkXpKInvzR(ISu^588%*_}yk&oDZq-$m4eIN1~tZ?E|lne8jHh+A*P0w>Nq zftRt`H^a5F^e{^(?)QC3xAX#?-0@T^p;`1W_|su`|9uHc^9qXTlC;>=F-5U=3Fb!| zTSLaoF(S=rz{$PNdBe8{m-Lfpj=KgmpjGo~uED2Qax`gH7B8cp^<;(}CLLR|(ueYn+5=LC(O z@lYGT9|!i;=TH*aipRU(`;ct-BHwamer!#>i;$j=@}7pVG2iwhw+xv&rPbWL)p3Ki zBu<-C>N15@X<}MhHVX9v3P-XO{;I95ZH_vc)|u(W_@jN)|LQT`i&+2EiHCg?DhiVE zIr|KmS*C5}p>2B;I$l4Dp`?vg?}&g0XGg@?$ipW`OK;CF4CLZ0Wj#-@jqgp~|APJUq4qgsq|6N|*-?cz z^fej=(wKi|g$nV>B|`Tad8@WBP8Nsb`@WmuD=|-!l$N|gWtM6CFYRN4>I)7R?qDAf zKqwIMqt2#>94psdPN8_xqMAo*T+}GVo|laHS&i+N-;8Oxq!up3c$Zr+BZ$4Qek381 zrs*kTXVNZ0GrJq7cLxTshXOjKZT{4~M^B`@x?;%uwP0q6Pdi)&xv54X4;pO)hUgMA z{KhX?{h>nPw=~rff>=q!ukQ?OGupf5j*6E6fFqQ zhzc$!8B@PzNt(OxK};#6Axq9c$F@oLbebXz-4&Yk47W7Wg7=$d5Tu@-qb*3SXdthjUO$4*1J9`2 z=P^SJ+VKc(|8Os?GK*G*X)4h8Y@T{xm}bpbWQ|ETr9&`OzDKk*br?%d(clD;YDo7e zqNXA57dsg?AXKs=H7XqaXGuYXh=9*V@kV8!x}#3b*v@v_LMr+JSQA8(zkSWG878rA z0n(z|Kcw?W&b9Hm+QY2;s&O^~FI^~Du?w7w0{{#)!@jc}zVfs0%kuXG2bXthor8Cj zG{+c}NH2TTHry6IGE04M|NhhV{RD8weD-5VL~{w||0Z$?t-{991HnoZD32iusUW5E zLJ8e3okNtrmbF!G#9w3A^2d-PFi+gw{7rDKF?g_ zB?f1ctoLtU3sg%?RgMVcPk0KsEZC`3=w*m88HGDZT75ci>B!?1k`9hVWWx@z*|r(OYtW1qC%Uvd=d&#%6dQ@&M#8_#01} z`y-|F7r7}ycso0b*cgi>p73gHO@bZ@h|0ztU`EjTzz_q3GWNgUc6Pi%XEvAD`bYY9 zRQl*M3B8umsoFM`lXrw=#8QRA!KSKuLUP@Dy9)Wh9_3k6d;~<3J!x54Rn7Z9`OU-| zHBO~&h3xbf>851k1W}VOex3&YbEfSj{tX1vrbYXmtZranpc!+L;Sm)y%wrY&;1RQh zKWA|W9XW?`GDZ!mkltrDj%GTx$a5K{Un*ST7PN-g3GwPFM!<>wGYQhm#)Ik!7sMAD z3y(oP`h|Ur5Lj4-uKO`GxLjMlYu$X&Mzn!M$-+-$^e$QpK*VoHIhjL%Oc$+fE*&4( zyDvhUpFUjF7@|y)(bfui=Vh>$)N@pa@17Wh7LzEP%r_-CiTLJ0%Bef~Y0asDdvwE$ zPJ^a*Fi{hcK&YWCtS$F?T+{bJOY;muA?_3sHh|_n+=W5C$jw~FM|6nu;l<594Cz6Mb{L2k7K=ow{HQ(21vtBJDY?>3JHd6)(|;u9W9`UbzIfcJr;E%p(GKL%rEiM-{0z9B!6y=9oQm3J}6B7bZBr~NeH zO9-JNwY6XN+E+4+@I9v7;DA)S7SdbYo(H)wPs45r^W zm{u#1dfd6&!GB4s&q?TQ7twM^jG`lBooue3{6bMECV})y1bD`xR(vUo+04X$whoicM9^`lQ zt>In275+4ZpJ=a+r#62O=q6O}etr|yyW9|({4?|ai+cegz2CU9%SS$JBVoEEw~ru? z*Qnoqq;O&VY1%ryVUBAeMuL2=6%}>TuyHXRrG2zB%P%_z zQk@;=IDJv8@AJB)%d5=@+0Kub_yDmS7f054V@&uB2Q9wTH^hM85n(%RM^grkAH}$G zXhR|KLs`%Tvo(+3jO`ui>#YR@j@4Yb>;e=hlmlj&g>{IR>VT1!~DS#=7lFUu72- zsGn$I7ETcWiL^NbVOX0EH zXQ6j&-<9m)?w;MPa0fc^DkQKF6BYg&;*V_Ff(3sN^V+fKJ~rNRW%-vPB2@mAV$`Ac z5DAJ`?P<*GGN|#8`S_kSn(CJ~$t@$@mpQ?Fx9Y`-XFYpZIYtrq z2M&ABi^fI?%eH1RYth$EHYCk%#?ntWzw)pAko-9BAN=0-`N;hJyrBZNkzeHEAh3J+ z0;t7g^GaliWi!x5eV!?X%Gkj_wd{gF2GtX!P?7t6zQ4(<+=R_HlxrtPd#Mam8UzN* zbc7Fpt;UAqTLy*<;C-^h9`z$6x88LWkg%n$jWK}`@eo^1Otuj0uGy1pBL^a&Dl~xo z5NKPCCilWE(vozKR6;o=6kf(_wrt*wgdy@*C?7{kXKf3;-||av_OCW%=cKJt@|hcd z)H}Inaib|s1OnPq#xBAZpMQu5f1VcVH_WrQNHR)L?=E!5vv)jWGayMM2~;)Uam~Lv zXFA+MGufJ06*twL-}W(OKb1F&aG5-t1o%=g3XHjb<5BO-+r= ze9nvWZ&a*<5mJqfRyTY$B*ONSiOIaZh>loW&BOU_gg2Y#uB5uwPygdPVxi!*diA^k z*;C+Q+xhKcd)6He5-94p$DG$u`cq>xV@fgYojq>$cX>kJ8hvWntJiX0fvTNyOfk*M zCne3K&ntseQ9(-QLu_Q|&nex1Nc*uE=t~Ld>8BDTn6EEMXWSOutZTDF66fOSjMEdn zzk`zM5T(FY`*{6zTX{`cgjA#EL~%g@8_+M5qPtsax%|Lb$2C&_K{or00h|5Y|Cbv} zs(I@ZX}++q;F+>vc0bs#8h{6~sOc+d9)+pq2}cKrzbZ8G*!~@ngig+SuFQgJp&(1&lVL*e6^xL#U{eXNoS#;RVx_W) zt8uC)0;$LNDLqWX5{#4QnJ1mTINDRw?5wn<|c5nGq_(d*w zvWour8{t~eMiE&~7f<^)E8G4%Y-21RG1nEDVU^DutK7@8L?ru|j!i%wo1!&u{Kff_ zd3uNg9sZ?)te#06?r`V^r@Gm|{Ug_y2&e9RcZ(#>8%S<|Ui2SU zYw)L+^N694OQ$X9s3c)ld{#ExUL3O_QK0${uOoKM|o!MAQ@aL$2Y`6p79K`-3$?Eu}~Z zqh6w1;@f|G^OWd2oE|PI4aL?k?|7}pRXkV@3vQvrEVem3#;pY98h40Dmv61tJm!38 zBc_s-=D-xjTrkbAX&F#i@#hV<;z*W1T(YEJNbUD#U0$lO=onNKN}eTo=CCs zmyLhwCRv|kW={D*qBO|wU-xOI@q`f(gVPOd7v?a2ruW2>6L!Q@CF6s75wVKCG=&g}M(%;5l#NG@WYw z+iLbd_Y{G?v-tECE7|41dN==iy=YDcIRO(B1B6D*#}W^=Pb=uhP0&AisG#VbH9eXZ zx96d8fe2Rc^D~CrV+Al*ZY&@YN7z@*2vBzIGa{ZqCxcXpBPQ}w$fnv!6V@@Hw>NBx zI8T#<>zzhwcIPw0-a@g`YX4MoThpUi{zu|RUhmNIoE(Tw>hWI}9W--J zz2b6Wis59k&;M%gN`soZqHtU)wzBAG5k!mzr8+>3K#2qqS{8LEg4PN_)(R*vAcZgp zB4Dj0MFpu-5r!~|h*TkAUj=FzS%i%2K^8$-WeJw06*Z*aC4yz9{oVfHO=bcw@4dWt z@6EmEobPFS`~@i*z5fscKvP37j8$(5O96JrT&Q$CeXHFk1E>w~GEV?uVw z7DruH;rFQYZyFRvJkK!{$1C@V4fYob;N%L|-SNt34AK(@L5)Hvlb_YY7DtYEByza{ zhSc*3M#i^@_|fb(=nG3DN07YP??i=yf5q|`104$p)gZEK;o2S$EOvl1Lhv-7l*E{r zm?B{X>TQrz8hc?ERN9a@ribse=be#rLUAqoXd+XJ%7%$rT?y_t@dbmrU2A z{)cTIKLT{X|G>u-SrQ>HAIO{=;vmxn$?ZBq<_~(YfcvR(&Ieb{}~s7NF~8A!a*+ts73M5Da4?Jcmtfa&Bv)&STcZP{DDk9s*o zGSGlPkzv@WDe)U}fY5p(KFR4kp0j*_)r2e`d+?S;!3d5!+6d{7e=+A3x-=$t)r1#j zRMBN`b^a*rP)c1e6mFr0w00Vtt-hXUqig6B;7q`s)Uf9ARG$rn*P?RR9w#9b$Xw*q zA%z+&zZ$d(5(cm@3w0o3QqbW#4S`1u_+N6m1zY_Fay=P79arF;5x*QRF?nQ!S|00u ze_$B2xDdqJS_1hfxContNb$9?*R1hZdXi=m3R1Ek2-Pgq2O&sg7OXX4uuHC8Zb@5+ zv-9R7On|@X%x^Hzz|MLE=z^@;=ayN)LGCCDu)wEg$)%+XJw0{gy612@KCCFljgF3$ zH+^gg8x9(&EP}D7Gd%!|kD!e7H5(~vNu!>fjNx$7Y%_nmdqSp@7iUEabYzVxzFOOB zOQv|Nn>&!Ng%q9Cp41wV`@UiH3L<_Sewp_Wd16oOtj9)PFQK0 zq$;F0cc>_#;b|&ZNY$9v(WD~T31d$f`B-gcp~}j%{Cpc!)T9ySJ-`Y;Lw$sRI9zy zrl1NP3bdRoHa9)%bFp<;fkwmlni>sT7LRIS@5V3QI{G@69%MEn)xNLprU`A_C|l#H zKvX6P-4R<8BiOKNdEYvEVEMQDLKI`VyGD5Sn#p4X66d2|V7k9GUsk~=g{ z6SDo6>bI@8b2zsAgs#lv5gbkkI%JkHpxBD|kLdO0YOJD&S%(7U&NtXmK z-Cdp_V43!U!QPU4)D&7U{<2G)6OXwn{ZKD5egEW?wmU!or2>WlN~|u0owypJmhD{E zZeHHWdfKpmrtQ{N-zCUHy9SS5C=SbKaqI24ev%dRz!_dA^aAF$%^$&F)7H^Z!?GO! z#r!S6ml3;o0i8|?b17OY!f_5Oo6ZLD*niG3k%(%ln3%372m~-*AW_w_< z6Qu)jamY*CVeywJZHL8qOWF?qk6FGzLbd;TcYd_fr|Gz@ZEQ1JwyO))rJZY(&#`;@DPd(gk1pcK6Uylx8RfZ0J)-WSf_ F{RJ6BkE;Lx literal 0 HcmV?d00001 From 4b77af746699bca78fa630b101cf0c3dbc87af18 Mon Sep 17 00:00:00 2001 From: Zach Corleissen Date: Mon, 1 Oct 2018 12:17:30 -0700 Subject: [PATCH 011/181] Move sass OWNERS to source instead of output (#10215) --- assets/sass/OWNERS | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 assets/sass/OWNERS diff --git a/assets/sass/OWNERS b/assets/sass/OWNERS new file mode 100644 index 0000000000..87ee22388b --- /dev/null +++ b/assets/sass/OWNERS @@ -0,0 +1,8 @@ +# Allow CSS/SASS updates from blog and case studies owners +options: + no_parent_owners: false +reviewers: + - alexcontini +approvers: + - alexcontini + \ No newline at end of file From 32014f94b31876ee99f5e5b99cea4f43a0720dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 1 Oct 2018 22:38:37 +0300 Subject: [PATCH 012/181] Merge missing translations (#10355) * Merge missing translations * Disable Norwegian --- Makefile | 2 +- config.toml | 4 +- content/no/blog/_index.md | 4 + ...ring-committee-election-cycle-kicks-off.md | 6 + content/no/case-studies/_index.md | 4 + content/no/case-studies/adform/index.html | 115 + content/no/docs/_index.md | 3 + content/no/docs/contribute/_index.md | 29 + content/no/docs/home/_index.md | 19 + content/no/docs/reference/_index.md | 14 + .../no/docs/reference/glossary/container.md | 19 + content/no/docs/reference/glossary/index.md | 4 + content/no/docs/setup/_index.md | 8 + content/no/docs/setup/pick-right-solution.md | 6 + .../tutorials/kubernetes-basics/_index.md | 5 + i18n/en.toml | 15 + i18n/no.toml | 4 + layouts/blog/list.html | 11 +- layouts/case-studies/list.html | 24 +- layouts/docs/docsportal_home.html | 12 +- layouts/docs/glossary.html | 7 +- layouts/partials/blog/archive.html | 14 +- layouts/partials/docs/browse.html | 32 +- layouts/partials/docs/glossary-terms.html | 13 + layouts/partials/tree.html | 34 +- layouts/shortcodes/glossary_tooltip.html | 12 +- netlify.toml | 2 +- ...s_a6e533854c4de092afe9278041939937.content | 1925 +++++++++++++++++ ...sass_a6e533854c4de092afe9278041939937.json | 1 + 29 files changed, 2303 insertions(+), 45 deletions(-) create mode 100644 content/no/blog/_index.md create mode 100644 content/no/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md create mode 100644 content/no/case-studies/adform/index.html create mode 100644 content/no/docs/_index.md create mode 100755 content/no/docs/contribute/_index.md create mode 100644 content/no/docs/home/_index.md create mode 100644 content/no/docs/reference/_index.md create mode 100755 content/no/docs/reference/glossary/container.md create mode 100644 content/no/docs/reference/glossary/index.md create mode 100644 content/no/docs/setup/_index.md create mode 100644 content/no/docs/setup/pick-right-solution.md create mode 100644 content/no/docs/tutorials/kubernetes-basics/_index.md create mode 100644 layouts/partials/docs/glossary-terms.html create mode 100644 resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content create mode 100644 resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.json diff --git a/Makefile b/Makefile index 747dfd091f..fd269ee4e2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ DOCKER = docker -HUGO_VERSION = 0.47.1 +HUGO_VERSION = 0.49 DOCKER_IMAGE = kubernetes-hugo DOCKER_RUN = $(DOCKER) run --rm --interactive --tty --volume $(PWD):/src diff --git a/config.toml b/config.toml index 9a4e71fbef..91aedeb2c4 100644 --- a/config.toml +++ b/config.toml @@ -22,7 +22,7 @@ pygmentsStyle = "emacs" # Enable Git variables like commit, lastmod enableGitInfo = true -# This is currently used for testing. +# Norwegian ("no") is sometimes but not currently used for testing. disableLanguages = ["no"] [blackfriday] @@ -143,6 +143,8 @@ description = "Production-Grade Container Orchestration" languageName ="Norsk" weight = 3 contentDir = "content/no" +[languages.no.params] +time_format_blog = "02.01.2006" # A list of language codes to look for untranslated content, ordered from left to right. language_alternatives = ["en"] diff --git a/content/no/blog/_index.md b/content/no/blog/_index.md new file mode 100644 index 0000000000..c475a33fd9 --- /dev/null +++ b/content/no/blog/_index.md @@ -0,0 +1,4 @@ +--- +title: Kubernetes Blogg +linkTitle: Blogg +--- diff --git a/content/no/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md b/content/no/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md new file mode 100644 index 0000000000..46f450a0a5 --- /dev/null +++ b/content/no/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md @@ -0,0 +1,6 @@ +--- +title: '2018 Norsk oversettelse' +date: 2018-09-06 +--- + +Norsk oversettelse. diff --git a/content/no/case-studies/_index.md b/content/no/case-studies/_index.md index b6380168c4..ffe4845a34 100644 --- a/content/no/case-studies/_index.md +++ b/content/no/case-studies/_index.md @@ -1,4 +1,8 @@ --- title: Eksempler på Kubernetes-bruk +linkTitle: Kubernetes-brukere +class: gridPage +cid: caseStudies + --- \ No newline at end of file diff --git a/content/no/case-studies/adform/index.html b/content/no/case-studies/adform/index.html new file mode 100644 index 0000000000..7bef6dea4f --- /dev/null +++ b/content/no/case-studies/adform/index.html @@ -0,0 +1,115 @@ +--- +title: Adform bruker-historie +linkTitle: Adform +case_study_styles: true +cid: caseStudies +css: /css/style_case_studies.css +featured: true +weight: 47 +quote: Her er en norsk oversettelse. +--- + +

+ +
+ Company  AdForm     Location  Copenhagen, Denmark     Industry  Adtech +
+ +
+
+
+
+

Challenge

+
Adform’s mission is to provide a secure and transparent full stack of advertising technology to enable digital ads across devices. The company has a large infrastructure: OpenStack-based private clouds running on 1,100 physical servers in 7 data centers around the world, 3 of which were opened in the past year. With the company’s growth, the infrastructure team felt that "our private cloud was not really flexible enough," says IT System Engineer Edgaras Apšega. "The biggest pain point is that our developers need to maintain their virtual machines, so rolling out technology and new software takes time. We were really struggling with our releases, and we didn’t have self-healing infrastructure." + + +
+ +

Solution

+ The team, which had already been using Prometheus for monitoring, embraced Kubernetes and cloud native practices in 2017. "To start our Kubernetes journey, we had to adapt all our software, so we had to choose newer frameworks," says Apšega. "We also adopted the microservices way, so observability is much better because you can inspect the bug or the services separately." + + +
+ +
+ +

Impact

+ "Kubernetes helps our business a lot because our features are coming to market faster," says Apšega. The release process went from several hours to several minutes. Autoscaling has been at least 6 times faster than the semi-manual VM bootstrapping and application deployment required before. The team estimates that the company has experienced cost savings of 4-5x due to less hardware and fewer man hours needed to set up the hardware and virtual machines, metrics, and logging. Utilization of the hardware resources has been reduced as well, with containers notching 2-3 times more efficiency over virtual machines. "The deployments are very easy because developers just push the code and it automatically appears on Kubernetes," says Apšega. Prometheus has also had a positive impact: "It provides high availability for metrics and alerting. We monitor everything starting from hardware to applications. Having all the metrics in Grafana dashboards provides great insight on your systems." + + +
+ +
+
+
+
+"Kubernetes enabled the self-healing and immutable infrastructure. We can do faster releases, so our developers are really happy. They can ship our features faster than before, and that makes our clients happier."

— Edgaras Apšega, IT Systems Engineer, Adform
+ +
+
+ + +
+
+

Adform made headlines last year when it detected the HyphBot ad fraud network that was costing some businesses hundreds of thousands of dollars a day.

With its mission to provide a secure and transparent full stack of advertising technology to enable an open internet, Adform published a white paper revealing what it did—and others could too—to limit customers’ exposure to the scam.

+In that same spirit, Adform is sharing its cloud native journey. "When you see that everyone shares their best practices, it inspires you to contribute back to the project," says IT Systems Engineer Edgaras Apšega.

+The company has a large infrastructure: OpenStack-based private clouds running on 1,100 physical servers in their own seven data centers around the world, three of which were opened in the past year. With the company’s growth, the infrastructure team felt that "our private cloud was not really flexible enough," says Apšega. "The biggest pain point is that our developers need to maintain their virtual machines, so rolling out technology and new software really takes time. We were really struggling with our releases, and we didn’t have self-healing infrastructure." + + +
+
+
+
+ "The fact that Cloud Native Computing Foundation incubated Kubernetes was a really big point for us because it was vendor neutral. And we can see that a community really gathers around it. Everyone shares their experiences, their knowledge, and the fact that it’s open source, you can contribute."

— Edgaras Apšega, IT Systems Engineer, Adform
+
+
+
+
+ +The team, which had already been using Prometheus for monitoring, embraced Kubernetes, microservices, and cloud native practices. "The fact that Cloud Native Computing Foundation incubated Kubernetes was a really big point for us because it was vendor neutral," says Apšega. "And we can see that a community really gathers around it."

+A proof of concept project was started, with a Kubernetes cluster running on bare metal in the data center. When developers saw how quickly containers could be spun up compared to the virtual machine process, "they wanted to ship their containers in production right away, and we were still doing proof of concept," says IT Systems Engineer Andrius Cibulskis. +Of course, a lot of work still had to be done. "First of all, we had to learn Kubernetes, see all of the moving parts, how they glue together," says Apšega. "Second of all, the whole CI/CD part had to be redone, and our DevOps team had to invest more man hours to implement it. And third is that developers had to rewrite the code, and they’re still doing it." +

+The first production cluster was launched in the spring of 2018, and is now up to 20 physical machines dedicated for pods throughout three data centers, with plans for separate clusters in the other four data centers. The user-facing Adform application platform, data distribution platform, and back ends are now all running on Kubernetes. "Many APIs for critical applications are being developed for Kubernetes," says Apšega. "Teams are rewriting their applications to .NET core, because it supports containers, and preparing to move to Kubernetes. And new applications, by default, go in containers." + + +
+
+
+
+"Releases are really nice for them, because they just push their code to Git and that’s it. They don’t have to worry about their virtual machines anymore."

— Andrius Cibulskis, IT Systems Engineer, Adform
+
+
+ +
+
+This big push has been driven by the real impact that these new practices have had. "Kubernetes helps our business a lot because our features are coming to market faster," says Apšega. "The deployments are very easy because developers just push the code and it automatically appears on Kubernetes." The release process went from several hours to several minutes. Autoscaling is at least six times faster than the semi-manual VM bootstrapping and application deployment required before.

+The team estimates that the company has experienced cost savings of 4-5x due to less hardware and fewer man hours needed to set up the hardware and virtual machines, metrics, and logging. Utilization of the hardware resources has been reduced as well, with containers notching two to three times more efficiency over virtual machines.

+Prometheus has also had a positive impact: "It provides high availability for metrics and alerting," says Apšega. "We monitor everything starting from hardware to applications. Having all the metrics in Grafana dashboards provides great insight on our systems." + + + +
+ +
+
+ "I think that our company just started our cloud native journey. It seems like a huge road ahead, but we’re really happy that we joined it."

— Edgaras Apšega, IT Systems Engineer, Adform
+
+
+ +
+All of these benefits have trickled down to individual team members, whose working lives have been changed for the better. "They used to have to get up at night to re-start some services, and now Kubernetes handles all of that," says Apšega. Adds Cibulskis: "Releases are really nice for them, because they just push their code to Git and that’s it. They don’t have to worry about their virtual machines anymore." Even the security teams have been impacted. "Security teams are always not happy," says Apšega, "and now they’re happy because they can easily inspect the containers." +The company plans to remain in the data centers for now, "mostly because we want to keep all the data, to not share it in any way," says Cibulskis, "and it’s cheaper at our scale." But, Apšega says, the possibility of using a hybrid cloud for computing is intriguing: "One of the projects we’re interested in is the Virtual Kubelet that lets you spin up the working nodes on different clouds to do some computing." +

+Apšega, Cibulskis and their colleagues are keeping tabs on how the cloud native ecosystem develops, and are excited to contribute where they can. "I think that our company just started our cloud native journey," says Apšega. "It seems like a huge road ahead, but we’re really happy that we joined it." + + + +
+ +
diff --git a/content/no/docs/_index.md b/content/no/docs/_index.md new file mode 100644 index 0000000000..df6139e123 --- /dev/null +++ b/content/no/docs/_index.md @@ -0,0 +1,3 @@ +--- +title: Dokumentasjon +--- diff --git a/content/no/docs/contribute/_index.md b/content/no/docs/contribute/_index.md new file mode 100755 index 0000000000..684274748f --- /dev/null +++ b/content/no/docs/contribute/_index.md @@ -0,0 +1,29 @@ +--- +title: "Hjelp til med Kubernetes-dokumentasjonen" +weight: 80 +--- + +## Quamquam conversa + +Tooltip: {{< glossary_tooltip text="Pod" term_id="pod" >}}. Tooltip 2 (translated): {{< glossary_tooltip term_id="container" >}}. + +Capere mirabile gaudet vetitorum proturbat sponte amplexus videamus +*exsultantemque* maenala partibus radice seris [submersum at +vitta](http://flamine.org/nostrae) transcurrere nitidum lumina septem. +Recentibus superas discedens duobus fessusque Stygias ubera et terrarumque +monstri conprensus amantis Martius orbes. Ad secreta Medusae diurnis movit +aspicite, patruo, nunc referre, abit prior ab, Est! Et esse **et** flexi +periuria, venturis mihi finis nunc premis, citharae. + +> Exit relinquant testataque habet varios et Mermeros longaque incidit vestes +> unda quae daulida. Temeraria fugant patriorum plures, stabat, in illam; +> vilisque labori virosque; ad, nomine, vires. Hiatu occulte vindice, bracchia +> ille sustulit adspicit data? Tibi recto flammas sine non, partes esset, +> tendens omnes. + +## Ante dos Caucason stetit eadem errabat ipsa + +Quid videbatur nimium sonus, in tibi, contingere viriles erit! Se vitat oculi +viginti, posse, pectus veteres. Citharae *carmina* subdidit, corruit pulcherrime +mortalia turaque nostri aequora tempora credas repugnat loqui! Parnasi seu ument +ea fulgore, teres **ut adamanta longis** dant spatium est *ille* prosilit iacto? diff --git a/content/no/docs/home/_index.md b/content/no/docs/home/_index.md new file mode 100644 index 0000000000..72bbaff103 --- /dev/null +++ b/content/no/docs/home/_index.md @@ -0,0 +1,19 @@ +--- +title: Kubernetes-dokumentasjon +layout: docsportal_home +noedit: true +cid: userJourneys +css: /css/style_user_journeys.css +display_browse_numbers: true +linkTitle: "Dokumentasjon" +main_menu: true +weight: 5 +menu: + main: + title: "Dokumentasjon" + weight: 20 + post: > +

Lær å bruke Kubernetes gjenom eksempler of referansedokumentasjon. Du kan også hjelpe!

+--- + + diff --git a/content/no/docs/reference/_index.md b/content/no/docs/reference/_index.md new file mode 100644 index 0000000000..d73e13d1ec --- /dev/null +++ b/content/no/docs/reference/_index.md @@ -0,0 +1,14 @@ +--- +title: Referanse +weight: 70 +main_menu: true +--- + +## Referanse 1 + + +## Referanse 2 + +## Referanse 3 + +## Referanse 4 \ No newline at end of file diff --git a/content/no/docs/reference/glossary/container.md b/content/no/docs/reference/glossary/container.md new file mode 100755 index 0000000000..15514157d4 --- /dev/null +++ b/content/no/docs/reference/glossary/container.md @@ -0,0 +1,19 @@ +--- +title: "Kontainer" +id: container +date: 2018-04-12 +full_link: /docs/concepts/overview/what-is-kubernetes/#why-containers +short_description: > + En lett-vekts kontainer med alle avhengigheter. + +aka: +tags: +- fundamental +- workload +--- + En lett-vekts kontainer med alle avhengigheter. + + + +Mer tekst her. + diff --git a/content/no/docs/reference/glossary/index.md b/content/no/docs/reference/glossary/index.md new file mode 100644 index 0000000000..d1c3f6b80a --- /dev/null +++ b/content/no/docs/reference/glossary/index.md @@ -0,0 +1,4 @@ +--- +title: "Ordliste" +layout: glossary +--- diff --git a/content/no/docs/setup/_index.md b/content/no/docs/setup/_index.md new file mode 100644 index 0000000000..d0f8474b05 --- /dev/null +++ b/content/no/docs/setup/_index.md @@ -0,0 +1,8 @@ +--- +no_issue: true +weight: 30 +title: Oppsett +main_menu: true +--- + +Dette er en midlertidig norsk oversettelse. \ No newline at end of file diff --git a/content/no/docs/setup/pick-right-solution.md b/content/no/docs/setup/pick-right-solution.md new file mode 100644 index 0000000000..7d314ad9cc --- /dev/null +++ b/content/no/docs/setup/pick-right-solution.md @@ -0,0 +1,6 @@ +--- +title: Å velge den rette løsningen +weight: 10 +--- + +Dette er en midlertidig norsk oversettelse. diff --git a/content/no/docs/tutorials/kubernetes-basics/_index.md b/content/no/docs/tutorials/kubernetes-basics/_index.md new file mode 100644 index 0000000000..3b29499f74 --- /dev/null +++ b/content/no/docs/tutorials/kubernetes-basics/_index.md @@ -0,0 +1,5 @@ +--- +title: Grunnleggende Kubernetes +linkTitle: Prøv Kubernetes +weight: 10 +--- diff --git a/i18n/en.toml b/i18n/en.toml index c5bd8c93eb..f8c445e55c 100644 --- a/i18n/en.toml +++ b/i18n/en.toml @@ -45,6 +45,21 @@ other = """The Kubernetes Authors | Documentation Distributed under Trademark Usage page""" +# Labels for the docs portal home page. +[docs_label_browse] +other = "Browse Docs" + +[docs_label_contributors] +other = "Contributors" + +[docs_label_users] +other = "Users" + +[docs_label_i_am] +other = "I AM..." + + + # Community links [community_twitter_name] other = "Twitter" diff --git a/i18n/no.toml b/i18n/no.toml index 437a590fda..afb7591736 100644 --- a/i18n/no.toml +++ b/i18n/no.toml @@ -45,6 +45,10 @@ other = """Kubernetes-forfatterene | Dokumentasjonen er utgitt med Bruk av varemerker""" +# Labels for the docs portal home page. +[docs_label_browse] +other = "All dokumentasjon" + # Community links [community_twitter_name] other = "Twitter" diff --git a/layouts/blog/list.html b/layouts/blog/list.html index ad099ed461..2f199a6443 100644 --- a/layouts/blog/list.html +++ b/layouts/blog/list.html @@ -1,5 +1,14 @@ {{ define "main" }} - {{ range (.Paginator 1).Pages }} + {{ $pages := ($.Paginator 1).Pages }} + {{ with $.Site.Params.language_alternatives }} + {{ range . }} + {{ with (where $.Translations ".Lang" . ) }} + {{ $p := index . 0 }} + {{ $pages = $pages | lang.Merge ($p.Paginator 1).Pages }} + {{ end }} + {{ end }} + {{ end }} + {{ range $pages }} {{ .Render "post" }} {{ end }}
- And on the opex side, Gasser says, the savings are high. "We run dozens of services, we have scores of pods, many daemon sets, and since we’re data-driven, we take advantage of EBS-backed volume claims for all of our stateful services. If we had to do all of this without Kubernetes, on underlying cloud services, I could easily see our costs triple, quadruple what they are now for the amount of pure AWS expense. That doesn’t account for personnel to deploy and maintain all the additional infrastructure."

+ And on the opex side, Gasser says, the savings are high. "We run dozens of services, we have scores of pods, many daemon sets, and since we’re data-driven, we take advantage of EBS-backed volume claims for all of our stateful services. If we had to do all of this without Kubernetes, on underlying cloud services, I could easily see our costs triple, quadruple what they are now for the amount of pure AWS expense. That doesn’t account for personnel to deploy and maintain all the additional infrastructure."

The team is confident that the benefits will continue to multiply—without a steep learning curve for the engineers being exposed to the new technology. "As we onboard additional tenants in this ecosystem, I think the need for folks to understand Kubernetes may not necessarily go up. In fact, I think it goes down, and that’s good," says Gasser. "Because that really demonstrates the scalability of the technology. You start to reap the benefits, and they can concentrate on all the features they need to build for great decisioning in the business— fraud decisions, credit decisions—and not have to worry about, ‘Is my AWS server broken? Is my pod not running?’"
diff --git a/content/en/case-studies/peardeck/index.html b/content/en/case-studies/peardeck/index.html index 615c17376b..688754a620 100644 --- a/content/en/case-studies/peardeck/index.html +++ b/content/en/case-studies/peardeck/index.html @@ -21,7 +21,7 @@ css: /css/style_peardeck.css

Challenge

- The three-year-old startup provides a web app for teachers to interact with their students in the classroom. The JavaScript app was built on Google’s web app development platform Firebase, using Heroku. As the user base steadily grew, so did the development team. "We outgrew Heroku when we started wanting to have multiple services, and the deploying story got pretty horrendous. We were frustrated that we couldn’t have the developers quickly stage a version," says CEO Riley Eynon-Lynch. "Tracing and monitoring became basically impossible." On top of that, many of Pear Deck’s customers are behind government firewalls and connect through Firebase, not Pear Deck’s servers, making troubleshooting even more difficult. + The three-year-old startup provides a web app for teachers to interact with their students in the classroom. The JavaScript app was built on Google’s web app development platform Firebase, using Heroku. As the user base steadily grew, so did the development team. "We outgrew Heroku when we started wanting to have multiple services, and the deploying story got pretty horrendous. We were frustrated that we couldn’t have the developers quickly stage a version," says CEO Riley Eynon-Lynch. "Tracing and monitoring became basically impossible." On top of that, many of Pear Deck’s customers are behind government firewalls and connect through Firebase, not Pear Deck’s servers, making troubleshooting even more difficult.
diff --git a/content/en/case-studies/wink/index.html b/content/en/case-studies/wink/index.html index 124f1511f8..3f47f8c779 100644 --- a/content/en/case-studies/wink/index.html +++ b/content/en/case-studies/wink/index.html @@ -41,7 +41,7 @@ css: /css/style_wink.css
- "It’s not proprietary, it’s totally open, it’s really portable. You can run all the workloads across different cloud providers. You can easily run a hybrid AWS or even bring in your own data center. That’s the benefit of having everything unified on one open source Kubernetes-Docker-CoreOS Container Linux stack. There are massive security benefits if you only have one Linux distro/machine image to validate. The benefits are enormous because you save money, and you save time.”

- KIT KLEIN, HEAD OF ENGINEERING, WINK + "It’s not proprietary, it’s totally open, it’s really portable. You can run all the workloads across different cloud providers. You can easily run a hybrid AWS or even bring in your own data center. That’s the benefit of having everything unified on one open source Kubernetes-Docker-CoreOS Container Linux stack. There are massive security benefits if you only have one Linux distro/machine image to validate. The benefits are enormous because you save money, and you save time.”

- KIT KLEIN, HEAD OF ENGINEERING, WINK
From bf9e3f771328b7799e755bd7e8bc81eed575a917 Mon Sep 17 00:00:00 2001 From: Zach Corleissen Date: Fri, 5 Oct 2018 09:46:48 -0700 Subject: [PATCH 095/181] Add jaredbhatti as an approver (#10497) --- OWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/OWNERS b/OWNERS index f98d699709..a00ba29cc0 100644 --- a/OWNERS +++ b/OWNERS @@ -13,6 +13,7 @@ approvers: - bradamant3 - bradtopol - chenopis +- jaredbhatti - kbarnard10 - mistyhacks - ryanmcginnis From 5f34b71022cf29e8ca317b3f331da1147dcecac9 Mon Sep 17 00:00:00 2001 From: Bily Zhang Date: Sat, 6 Oct 2018 06:11:37 +0800 Subject: [PATCH 096/181] Fix doc issues (#10513) Signed-off-by: mooncake --- .../reference/federation/extensions/v1beta1/definitions.html | 2 +- content/en/docs/reference/federation/v1/definitions.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/reference/federation/extensions/v1beta1/definitions.html b/content/en/docs/reference/federation/extensions/v1beta1/definitions.html index f3bafaf149..85ce8eefde 100755 --- a/content/en/docs/reference/federation/extensions/v1beta1/definitions.html +++ b/content/en/docs/reference/federation/extensions/v1beta1/definitions.html @@ -1451,7 +1451,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

v1beta1.HTTPIngressRuleValue

-

HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> → backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last / and before the first ? or #.

+

HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> → backend where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last / and before the first ? or #.

diff --git a/content/en/docs/reference/federation/v1/definitions.html b/content/en/docs/reference/federation/v1/definitions.html index 05b55bda6f..9cfb9cf1d3 100755 --- a/content/en/docs/reference/federation/v1/definitions.html +++ b/content/en/docs/reference/federation/v1/definitions.html @@ -2350,7 +2350,7 @@ When an object is created, the system will populate this list with the current s - + From 58aa2d5c30003f3d8c1b0703cee54d7ea5995d21 Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Fri, 5 Oct 2018 15:13:03 -0700 Subject: [PATCH 097/181] Fix edit page button at bottom of pages. (#10517) --- layouts/docs/baseof.html | 2 +- layouts/partials/docs/content_page.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/docs/baseof.html b/layouts/docs/baseof.html index 9d2e232181..1d353c7f7b 100644 --- a/layouts/docs/baseof.html +++ b/layouts/docs/baseof.html @@ -37,7 +37,7 @@ {{ end }} {{ end }} {{ if not .Params.noedit }} - {{ T "main_edit_this_page" }} + {{ T "main_edit_this_page" }} {{ end }} {{ if not .Params.showcommit }} diff --git a/layouts/partials/docs/content_page.html b/layouts/partials/docs/content_page.html index 1919b95232..533c5c3d3a 100644 --- a/layouts/partials/docs/content_page.html +++ b/layouts/partials/docs/content_page.html @@ -1,4 +1,4 @@ -

Edit This Page

+

Edit This Page

{{ if not .page.Params.notitle }}

{{ .page.Title }}

{{ end }} From cdd25ae6ef43f2b46e4a5327a1991c808dca8431 Mon Sep 17 00:00:00 2001 From: CaoShuFeng Date: Sat, 6 Oct 2018 06:20:55 +0800 Subject: [PATCH 098/181] update description about cron jobs (#10183) * update description about cron jobs Fixes: https://github.com/kubernetes/website/issues/10177 * grammar edits --- .../docs/tasks/job/automated-tasks-with-cron-jobs.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md b/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md index f961bbf34c..015f209ff6 100644 --- a/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md +++ b/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md @@ -146,7 +146,15 @@ After the deadline, the cron job does not start the job. Jobs that do not meet their deadline in this way count as failed jobs. If this field is not specified, the jobs have no deadline. -It is important to note that if the `.spec.startingDeadlineSeconds` field is set (not nil), the CronJob controller counts how many missed jobs occurred from the value of `.spec.startingDeadlineSeconds` until now. For example, if it is set to `200`, it counts how many missed schedules occurred in the last 200 seconds. If there were more than 100 missed schedules, the cronjob would not be scheduled. +The CronJob controller counts how many missed schedules happen for a cron job. If there are more than 100 missed +schedules, the cron job is no longer scheduled. When `.spec.startingDeadlineSeconds` is not set, the CronJob +controller counts missed schedules from `status.lastScheduleTime` until now. For example, one cron job is +supposed to run every minute, the `status.lastScheduleTime` of the cronjob is 5:00am, but now it's 7:00am. +That means 120 schedules were missed, so the cron job is no longer scheduled. If the `.spec.startingDeadlineSeconds` +field is set (not null), the CronJob controller counts how many missed jobs occurred from the value of +`.spec.startingDeadlineSeconds` until now. For example, if it is set to `200`, it counts how many missed +schedules occurred in the last 200 seconds. In that case, if there were more than 100 missed schedules in the +last 200 seconds, the cron job is no longer scheduled. ### Concurrency Policy From 6d8830309a9278babd4fc63cc3892e6c698713f9 Mon Sep 17 00:00:00 2001 From: PONOUBA Date: Sun, 7 Oct 2018 11:06:40 +0800 Subject: [PATCH 099/181] add Jaguar project description (#10433) * add Jaguar project description [Jaguar](https://gitlab.com/sdnlab/jaguar) is an open source solution for Kubernetes's network based on OpenDaylight. Jaguar provides overlay network using vxlan and Jaguar CNIPlugin provides one IP address per pod. * Minor newline tweak --- content/en/docs/concepts/cluster-administration/networking.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/en/docs/concepts/cluster-administration/networking.md b/content/en/docs/concepts/cluster-administration/networking.md index cee17720fd..5368ed2f1a 100644 --- a/content/en/docs/concepts/cluster-administration/networking.md +++ b/content/en/docs/concepts/cluster-administration/networking.md @@ -201,6 +201,10 @@ sysctl net.ipv4.ip_forward=1 The result of all this is that all `Pods` can reach each other and can egress traffic to the internet. +### Jaguar + +[Jaguar](https://gitlab.com/sdnlab/jaguar) is an open source solution for Kubernetes's network based on OpenDaylight. Jaguar provides overlay network using vxlan and Jaguar CNIPlugin provides one IP address per pod. + ### Knitter [Knitter](https://github.com/ZTE/Knitter/) is a network solution which supports multiple networking in Kubernetes. It provides the ability of tenant management and network management. Knitter includes a set of end-to-end NFV container networking solutions besides multiple network planes, such as keeping IP address for applications, IP address migration, etc. From ae0f2b6a95d9fa01e657686d12deb1c4870db2d6 Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Mon, 8 Oct 2018 10:32:19 -0700 Subject: [PATCH 100/181] blog post for azure vmss (#10538) --- .../2018-10-08-support-for-azure-vmss.md | 338 ++++++++++++++++++ .../ca-functionality.png | Bin 0 -> 193936 bytes .../cloud-provider-components.png | Bin 0 -> 136664 bytes .../cluster-autoscaler.png | Bin 0 -> 93318 bytes .../sample-azure-cluster.png | Bin 0 -> 149438 bytes 5 files changed, 338 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md create mode 100644 static/images/blog/2018-10-08-support-for-azure-vmss/ca-functionality.png create mode 100644 static/images/blog/2018-10-08-support-for-azure-vmss/cloud-provider-components.png create mode 100644 static/images/blog/2018-10-08-support-for-azure-vmss/cluster-autoscaler.png create mode 100644 static/images/blog/2018-10-08-support-for-azure-vmss/sample-azure-cluster.png diff --git a/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md b/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md new file mode 100644 index 0000000000..6f1fba6409 --- /dev/null +++ b/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md @@ -0,0 +1,338 @@ +--- +layout: blog +title: 'Support for Azure VMSS, Cluster-Autoscaler and User Assigned Identity' +date: 2018-10-08 +--- + +**Author**: [Krishnakumar R (KK)](https://twitter.com/kkwriting) (Microsoft), [Pengfei Ni](https://twitter.com/feisky) (Microsoft) + +## Introduction + +With Kubernetes v1.12, Azure virtual machine scale sets (VMSS) and cluster-autoscaler have reached their General Availability (GA) and User Assigned Identity is available as a preview feature. + +_Azure VMSS allow you to create and manage identical, load balanced VMs that automatically increase or decrease based on demand or a set schedule. This enables you to easily manage and scale multiple VMs to provide high availability and application resiliency, ideal for large-scale applications like container workloads [[1]](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/overview)._ + +Cluster autoscaler allows you to adjust the size of the Kubernetes clusters based on the load conditions automatically. + +Another exciting feature which v1.12 brings to the table is the the ability to use User Assigned Identities with Kubernetes clusters [[12]](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview). + +In this article, we will do a brief overview of VMSS, cluster autoscaler and user assigned identity features on Azure. + +## VMSS + +Azure’s Virtual Machine Scale sets (VMSS) feature offers users an ability to automatically create VMs from a single central configuration, provide load balancing via L4 and L7 load balancing, provide a path to use availability zones for high availability, provides large-scale VM instances et. al. + +VMSS consists of a group of virtual machines, which are identical and can be managed and configured at a group level. More details of this feature in Azure itself can be found at the following link [[1]](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/overview). + +With Kubernetes v1.12 customers can create k8s cluster out of VMSS instances and utilize VMSS features. + +## Cluster components on Azure + +Generally, standalone Kubernetes cluster in Azure consists of the following parts + +* Compute - the VM itself and its properties. +* Networking - this includes the IPs and load balancers. +* Storage - the disks which are associated with the VMs. + +## Compute + +Compute in cloud k8s cluster consists of the VMs. These VMs are created by provisioning tools such as acs-engine or AKS (in case of managed service). Eventually, they run various system daemons such as kubelet, kube-api server etc. either as a process (in some versions) or as a docker container. + +![](/images/blog/2018-10-08-support-for-azure-vmss/sample-azure-cluster.png) + +## Networking + +In Azure Kubernetes cluster various networking components are brought together to provide features required for users. Typically they consist of the network interfaces, network security groups, public IP resource, VNET (virtual networks), load balancers etc. + +## Storage + +Kubernetes clusters are built on top of disks created in Azure. In a typical configuration, we have managed disks which are used to hold the regular OS images and a separate disk is used for etcd. + +## Cloud provider components + +![](/images/blog/2018-10-08-support-for-azure-vmss/cloud-provider-components.png) + +Kubernetes cloud provider interface provides interactions with clouds for managing cloud-specific resources, e.g. public IPs and routes. A good overview of these components is given in [[2]](https://kubernetes.io/docs/concepts/architecture/cloud-controller/). In case of Azure Kubernetes cluster, the Kubernetes interactions go through the Azure cloud provider layer and contact the various services running in the cloud. + +The cloud provider implementation of K8s can be largely divided into the following component interfaces which we need to implement: + +1. Load Balancer +1. Instances +1. Zones +1. Routes + +In addition to the above interfaces, the storage services from the cloud provider is linked via the volume plugin layer. + +## Azure cloud provider implementation and VMSS + +In the Azure cloud provider, for every type of cluster we implement, there is a VMType option which we specify. In case of VMSS, the VM type is “vmss”. The provisioning software (acs-engine, in future AKS etc.) would setup these values in /etc/kubernetes/azure.json file. Based on this type, various implementations would get instantiated [[3]](https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/azure/azure_vmss.go) + +The load balancer interface provides access to the underlying cloud provider load balancer service. The information about the load balancers and the control operations on them are required for Kubernetes to handle the services which gets hosted on the Kubernetes cluster. For VMSS support the changes ensure that the VMSS instances are part of the load balancer pool as required. + +The instances interfaces help the cloud controller to get various details about a node from the cloud provider layer. For example, the details of a node like the IP address, the instance id etc, is obtained by the controller by means of the instances interfaces which the cloud provider layer registers with it. In case of VMSS support, we talk to VMSS service to gather information regarding the instances. + +The zones interfaces help the cloud controller to get zone information for each node. Scheduler could spread pods to different availability zones with such information. It is also required for supporting topology aware dynamic provisioning features, e.g. AzureDisk. Each VMSS instances will be labeled with its current zone and region. + +The routes interfaces help the cloud controller to setup advanced routes for Pod network. For example, a route with prefix node’s podCIDR and next hop node’s internal IP will be set for each node. In case of VMSS support, the next hops are VMSS virtual machines’ internal IP address. + +The Azure volume plugin interfaces have been modified for VMSS to work properly. For example, the attach/detach to the AzureDisk have been modified to perform these operations at VMSS instance level. + +## Setting up a VMSS cluster on Azure + +The following link [[4]](https://github.com/Azure/acs-engine/blob/master/docs/kubernetes/deploy.md) provides an example of acs-engine to create a Kubernetes cluster. + +``` +acs-engine deploy --subscription-id \ + --dns-prefix --location \ + --api-model examples/kubernetes.json +``` + +API model file provides various configurations which acs-engine uses to create a cluster. The API model here [[5]](https://github.com/Azure/acs-engine/blob/master/examples/kubernetes-vmss/kubernetes.json) gives a good starting configuration to setup the VMSS cluster. + +Once a VMSS cluster is created, here are some of the steps you can run to understand more about the cluster setup. Here is the output of kubectl get nodes from a cluster created using the above command: + +``` +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +k8s-agentpool1-92998111-vmss000000 Ready agent 1h v1.12.0-rc.2 +k8s-agentpool1-92998111-vmss000001 Ready agent 1h v1.12.0-rc.2 +k8s-master-92998111-0 Ready master 1h v1.12.0-rc.2 +``` + +This cluster consists of two worker nodes and one master. Now how do we check which node is which in Azure parlance? In VMSS listing, we can see a single VMSS: + +``` +$ az vmss list -o table -g k8sblogkk1 +Name ResourceGroup Location Zones Capacity Overprovision UpgradePolicy +---------------------------- --------------- ---------- ------- ---------- --------------- --------------- +k8s-agentpool1-92998111-vmss k8sblogkk1 westus2 2 False Manual +``` + +The nodes which we see as agents (in the kubectl get nodes command) are part of this vmss. We can use the following command to list the instances which are part of the VM scale set: + +``` +$ az vmss list-instances -g k8sblogkk1 -n k8s-agentpool1-92998111-vmss -o table + InstanceId LatestModelApplied Location Name ProvisioningState ResourceGroup VmId +------------ -------------------- ---------- ------------------------------ ------------------- --------------- ------------------------------------ + 0 True westus2 k8s-agentpool1-92998111-vmss_0 Succeeded K8SBLOGKK1 21c57d6c-9c8f-4a62-970f-63ed0fcba53f + 1 True westus2 k8s-agentpool1-92998111-vmss_1 Succeeded K8SBLOGKK1 840743b9-0076-4a2e-920e-5ba9da296665 +``` + +The node name does not match the name in the vm scale set, but if we run the following command to list the providerID we can find the matching node which resembles the instance name: + +``` +$ kubectl describe nodes k8s-agentpool1-92998111-vmss000000| grep ProviderID +ProviderID: azure:///subscriptions//resourceGroups/k8sblogkk1/providers/Microsoft.Compute/virtualMachineScaleSets/k8s-agentpool1-92998111-vmss/virtualMachines/0 +``` + +## Current Status and Future + +Currently the following is supported: + +1. VMSS master nodes and worker nodes +1. VMSS on worker nodes and Availability set on master nodes combination. +1. Per vm disk attach +1. Azure Disk & Azure File support +1. Availability zones (Alpha) + +In future there will be support for the following: + +1. AKS with VMSS support +1. Per VM instance public IP + +## Cluster Autoscaler + +A Kubernetes cluster consists of nodes. These nodes can be virtual machines, bare metal servers or could be even virtual node (virtual kubelet). To avoid getting lost in permutations and combinations of Kubernetes ecosystem ;-), let's consider that the cluster we are discussing consists of virtual machines, which are hosted in a cloud (eg: Azure, Google or AWS). What this effectively means is that you have access to virtual machines which run Kubernetes agents and a master node which runs k8s services like API server. A detailed version of k8s architecture can be found here [[11]](https://kubernetes.io/docs/concepts/architecture/). + +The number of nodes which are required on a cluster depends on the workload on the cluster. When the load goes up there is a need to increase the nodes and when it subsides, there is a need to reduce the nodes and clean up the resources which are no longer in use. One way this can be taken care of is to manually scale up the nodes which are part of the Kubernetes cluster and manually scale down when the demand reduces. But shouldn’t this be done automatically ? Answer to this question is the Cluster Autoscaler (CA). + +The cluster autoscaler itself runs as a pod within the kubernetes cluster. The following figure illustrates the high level view of the setup with respect to the k8s cluster: + +![](/images/blog/2018-10-08-support-for-azure-vmss/cluster-autoscaler.png) + +Since Cluster Autoscaler is a pod within the k8s cluster, it can use the in-cluster config and the Kubernetes go client [[10]](https://github.com/kubernetes/client-go) to contact the API server. + +## Internals + +The API server is the central service which manages the state of the k8s cluster utilizing a backing store (an etcd database), runs on the management node or runs within the cloud (in case of managed service such as AKS). For any component within the Kubernetes cluster to figure out the state of the cluster, like for example the nodes registered in the cluster, contacting the API server is the way to go. + +In order to simplify our discussion let’s divide the CA functionality into 3 parts as given below: + +![](/images/blog/2018-10-08-support-for-azure-vmss/ca-functionality.png) + +The main portion of the CA is a control loop which keeps running at every scan interval. This loop is responsible for updating the autoscaler metrics and health probes. Before this loop is entered auto scaler performs various operations such as claiming the leader state after performing a Kubernetes leader election. The main loop initializes static autoscaler component. This component initializes the underlying cloud provider based on the parameters passed onto the CA. + +Various operations performed by the CA to manage the state of the cluster is passed onto the cloud provider component. Some examples like - increase target size, decrease target size etc, results in the cloud provider component talking to the cloud services internally and performing operations such as adding a node or deleting a node. These operations are performed on group of nodes in the cluster. The static autoscaler also keeps tab on the state of the system by querying the API server - operations such as list pods and list nodes are used to get hold of such information. + +The decision to make a scale up is based on pods which remain unscheduled and a variety of checks and balances. The nodes which are free to be scaled down are deleted from the cluster and deleted from the cloud itself. The cluster autoscaler applies checks and balances before scaling up and scaling down - for example the nodes which have been recently added are given special consideration. During the deletion the nodes are drained to ensure that no disruption happens to the running pods. + +## Setting up CA on Azure: + +Cluster Autoscaler is available as an add-on with acs-engine. The following link [[15]](https://github.com/Azure/acs-engine/tree/master/examples/addons/cluster-autoscaler) has an example configuration file used to deploy autoscaler with acs-engine. The following link [[8]](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/azure/README.md) provides details on manual step by step way to do the same. + +In acs-engine case we use the the regular command line to deploy: + +``` +acs-engine deploy --subscription-id \ + --dns-prefix --location \ + --api-model examples/kubernetes.json +``` + +The main difference are the following lines in the config file at [[15]](https://github.com/Azure/acs-engine/tree/master/examples/addons/cluster-autoscaler) makes sure that CA is deployed as an addon: + +``` +"addons": [ + { + "name": "cluster-autoscaler", + "enabled": true, + "config": { + "minNodes": "1", + "maxNodes": "5" + } + } + ] +``` + +The config section in the json above can be used to provide the configuration to the cluster autoscaler pod, eg: min and max nodes as above. + +Once the setup completes we can see that the cluster-autoscaler pod is deployed in the system namespace: + +``` +$kubectl get pods -n kube-system | grep autoscaler +cluster-autoscaler-7bdc74d54c-qvbjs 1/1 Running 1 6m +``` + +Here is the output from the CA configmap and events from a sample cluster: + +``` +$kubectl -n kube-system describe configmap cluster-autoscaler-status +Name: cluster-autoscaler-status +Namespace: kube-system +Labels: +Annotations: cluster-autoscaler.kubernetes.io/last-updated=2018-10-02 01:21:17.850010508 +0000 UTC + +Data +==== +status: +---- +Cluster-autoscaler status at 2018-10-02 01:21:17.850010508 +0000 UTC: +Cluster-wide: + Health: Healthy (ready=3 unready=0 notStarted=0 longNotStarted=0 registered=3 longUnregistered=0) + LastProbeTime: 2018-10-02 01:21:17.772229859 +0000 UTC m=+3161.412682204 + LastTransitionTime: 2018-10-02 00:28:49.944222739 +0000 UTC m=+13.584675084 + ScaleUp: NoActivity (ready=3 registered=3) + LastProbeTime: 2018-10-02 01:21:17.772229859 +0000 UTC m=+3161.412682204 + LastTransitionTime: 2018-10-02 00:28:49.944222739 +0000 UTC m=+13.584675084 + ScaleDown: NoCandidates (candidates=0) + LastProbeTime: 2018-10-02 01:21:17.772229859 +0000 UTC m=+3161.412682204 + LastTransitionTime: 2018-10-02 00:39:50.493307405 +0000 UTC m=+674.133759650 + +NodeGroups: + Name: k8s-agentpool1-92998111-vmss + Health: Healthy (ready=2 unready=0 notStarted=0 longNotStarted=0 registered=2 longUnregistered=0 cloudProviderTarget=2 (minSize=1, maxSize=5)) + LastProbeTime: 2018-10-02 01:21:17.772229859 +0000 UTC m=+3161.412682204 + LastTransitionTime: 2018-10-02 00:28:49.944222739 +0000 UTC m=+13.584675084 + ScaleUp: NoActivity (ready=2 cloudProviderTarget=2) + LastProbeTime: 2018-10-02 01:21:17.772229859 +0000 UTC m=+3161.412682204 + LastTransitionTime: 2018-10-02 00:28:49.944222739 +0000 UTC m=+13.584675084 + ScaleDown: NoCandidates (candidates=0) + LastProbeTime: 2018-10-02 01:21:17.772229859 +0000 UTC m=+3161.412682204 + LastTransitionTime: 2018-10-02 00:39:50.493307405 +0000 UTC m=+674.133759650 + + +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal ScaleDownEmpty 42m cluster-autoscaler Scale-down: removing empty node k8s-agentpool1-92998111-vmss000002 +``` + +As can be seen the events, the cluster autoscaler scaled down and deleted a node as there was no load on this cluster. The rest of the configmap in this case indicates that there are no further actions which the autoscaler is taking at this moment. + +## Current status and future: + +Cluster Autoscaler currently supports four VM types: standard (VMAS), VMSS, ACS and AKS. In the future, Cluster Autoscaler will be integrated within AKS product, so that users can enable it by one-click. + +## User Assigned Identity + +Inorder for the Kubernetes cluster components to securely talk to the cloud services, it needs to authenticate with the cloud provider. In Azure Kubernetes clusters, up until now this was done using two ways - Service Principals or Managed Identities. In case of service principal the credentials are stored within the cluster and there are password rotation and other challenges which user needs to incur to accommodate this model. Managed service identities takes out this burden from the user and manages the service instances directly [[12]](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview). + +There are two kinds of managed identities possible - one is system assigned and another is user assigned. In case of system assigned identity each vm in the Kubernetes cluster is assigned a managed identity during creation. This identity is used by various Kubernetes components needing access to Azure resources. Examples to these operations are getting/updating load balancer configuration, getting/updating vm information etc. With the system assigned managed identity, user has no control over the identity which is assigned to the underlying vm. The system automatically assigns it and this reduces the flexibility for the user. + +With v1.12 we bring user assigned managed identity support for Kubernetes. With this support user does not have to manage any passwords but at the same time has the flexibility to manage the identity which is used by the cluster. For example if the user needs to allow access to a cluster for a specific storage account or a Azure key vault, the user assigned identity can be created in advance and key vault access provided. + +## Internals + +To understand the internals, we will focus on a cluster created using acs-engine. This can be configured in other ways, but the basic interactions are of the same pattern. + +The acs-engine sets up the cluster with the required configuration. The /etc/kubernetes/azure.json file provides a way for the cluster components (eg: kube-apiserver) to gather configuration on how to access the cloud resources. In a user managed identity cluster there is a value filled with the key as `UserAssignedIdentityID`. This value is filled with the client id of the user assigned identity created by acs-engine or provided by the user, however the case may be. The code which does the authentication for Kubernetes on azure can be found here [[14]](https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/azure/auth/azure_auth.go). This code uses Azure adal packages to get authenticated to access various resources in the cloud. In case of user assigned identity the following API call is made to get new token: + +``` +adal.NewServicePrincipalTokenFromMSIWithUserAssignedID(msiEndpoint, +env.ServiceManagementEndpoint, +config.UserAssignedIdentityID) +``` + +This calls hits either the instance metadata service or the vm extension [[12]](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview) to gather the token which is then used to access various resources. + +## Setting up a cluster with user assigned identity + +With the upstream support for user assigned identity in v1.12, it is now supported in the acs-engine to create a cluster with the user assigned identity. The json config files present here [[13]](https://github.com/Azure/acs-engine/tree/master/examples/kubernetes-msi-userassigned) can be used to create a cluster with user assigned identity. The same step used to create a vmss cluster can be used to create a cluster which has user assigned identity assigned. + +``` +acs-engine deploy --subscription-id \ + --dns-prefix --location \ + --api-model examples/kubernetes-msi-userassigned/kube-vmss.json +``` + +The main config values here are the following: + +``` +"useManagedIdentity": true +"userAssignedID": "acsenginetestid" +``` + +The first one `useManagedIdentity` indicates to acs-engine that we are going to use the managed identity extension. This sets up the necessary packages and extensions required for the managed identities to work. The next one `userAssignedID` provides the information on the user identity which is to be used with the cluster. + +## Current status and future + +Currently we support the user assigned identity creation with the cluster using deploy of the acs-engine. In future this will become part of AKS. + +## Get involved + +For azure specific discussions - please checkout the Azure SIG page at [[6]](https://github.com/kubernetes/community/tree/master/sig-azure) and come and join the [#sig-azure](https://kubernetes.slack.com/messages/sig-azure) slack channel for more. + +For CA, please checkout the Autoscaler project here [[7]](http://www.github.com/kubernetes/autoscaler) and join the [#sig-autoscaling](https://kubernetes.slack.com/messages/sig-autoscaling) Slack for more discussions. + +For the acs-engine (the unmanaged variety) on Azure docs can be found here: [[9]](https://github.com/Azure/acs-engine). More details about the managed service from Azure Kubernetes Service (AKS) here [[5]](https://docs.microsoft.com/en-us/azure/aks/). + +## References + +1) https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/overview + +2) https://kubernetes.io/docs/concepts/architecture/cloud-controller/ + +3) https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/azure/azure_vmss.go + +4) https://github.com/Azure/acs-engine/blob/master/docs/kubernetes/deploy.md + +5) https://docs.microsoft.com/en-us/azure/aks/ + +6) https://github.com/kubernetes/community/tree/master/sig-azure + +7) https://github.com/kubernetes/autoscaler + +8) https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/azure/README.md + +9) https://github.com/Azure/acs-engine + +10) https://github.com/kubernetes/client-go + +11) https://kubernetes.io/docs/concepts/architecture/ + +12) https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview + +13) https://github.com/Azure/acs-engine/tree/master/examples/kubernetes-msi-userassigned + +14) https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/azure/auth/azure_auth.go + +15) https://github.com/Azure/acs-engine/tree/master/examples/addons/cluster-autoscaler diff --git a/static/images/blog/2018-10-08-support-for-azure-vmss/ca-functionality.png b/static/images/blog/2018-10-08-support-for-azure-vmss/ca-functionality.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e8a205c15fe4f23cae93a3635a1bae9350d64b GIT binary patch literal 193936 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

oSRJ0T*M*Ors) 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℞F`>*{}N{7^QWc8A?X30T2IrQ3$5@ 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

    UC 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 z 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≪Y`W@HO%BiXFEEaXVI5 zRj!lxg=I^IPo|q>apGFCht<*EIk?F5#P-V(nh<69pRI|HO!uVaC=@;C%UV?%IdWn_ zgZcmud1-~_fQy`T{?KX`TTDSiH@deFVJ_jiaHNQSb=7X`+ zhW$n1R9G;M2Y!zSk$&s!JsXhC6d$nNf$FcQjFqU`v~w;fTE)&VeSi#!j%AQ;a{^W z|L11lI4i}2hK_M{G7_u&y1X&q5CEcv_K|4ZZZ2$FAeQP#yW+VJo48L z&PMzVh3#)1+KR$!xw!(r%;xRW1^&GqT!`Dz#m^;&DjxxEN5yY@yI@dzD3dJbFxf*x zLl^gg7`D}E9~VR8Cv)@36~r(4ufxmgsKq4*OJ2iqJE&=MSCvgN>j-5lVt-Tqky%T0 z_#pEvj+fR2fO@A^S>)snLL1z^(OQ+E=~a{1EcqFr0J*B6r<32%)RcLzJ`q<#BlZqt zfDH0-Rb~jv%T2cR!KK;;68XTMGfx=%)uuAW z*LJ4L=W|uw38Cpac=V#>Y=d3a{!&C?EN>d?o8z@cFv8!ZJ?Uf@cOB#LZYW(Sy_FV8 z8F}3d$ziz26YVd@FdPd|ybddIKyb?rA|TbD*JEi!lXiM_mJT7R4W(|NSCvCnBH`gH zS|wLWNa|oj)2yCeC5qdY6+6c*KWvnxrV*BjiItGYVhvMsH@tY`qc1h_qq0JB<3~An znnV=4jl;^Os||m~VE%!UODGU%uEk9&O~jGYN+lIhK$8Z)?j5Bc!`O2+Y6RLzbWXFf zvpWHvT7!#(8NYQWr%Rjl`7cfw3xOF+!UvF$xqt-6IvC0ETqBVsMH=){Evd<2Hh%NT#5zu?fjsT~e^#;O z0pKa-a4^_FvL+7vRLE(az^QqT1lwgO-cm!I5CPe$#66+Q-|g^{+M^E*7=EJ^p9Hy` z=hS*Pv!aE!YONWK)$ft~UkB;l{rf_pmw=)=?xoA9$yyJiOaE%Rr--WF6_CV*TwPF zf4G&E|8Of6Z&V95`d4p5>K;L`fXUVC0|dy`3V=_m`d}}5?~$^lI4l_ib(u+bz45CPM3fGa}iA#Rj_CjA4}Z(sK5;%d)_ObnVZ z;n#o5T(BR2<6@D{q3J6+jR=}9Xv~ny(V7Rh;nhGdcHK}*mEo*BN_W((Co1?8Uw2XkKw|X^SQGVbI8u_X;1K7qwApNMa znXv%6C_)Y&+S@z%zq(o4AJfxs$-E9fIJ>y$fcEYz`gNn@#fE#IweFc3Z!st?g3Ru5 z>wPlUuWDh&Ah!!*5*^(VBeC%4)TP_y06ZsxQ1ob+Bt|9#E6q%mm?onX*JAedeMf0t z9;3(a*87EEIQ&P;bvx7n5+puiA8;V*%IyI+2DdIK1nnl4my_%1Erb6;HAg@|SYv&1 zltKMM3~Zm1E=N}iI^^Zcmjxg@iA5%CjZjTomVhQugLB-u?804l{D>baCtVNuTssam zc^pq!3dv{e)DwSLett_P4yOTwR98&C64Js9mN*5aM~~74!fM!Ly)}s+v~A@-By!V$ zfyu|mmjHu3uIJ;*Jf!)wjtz?Py_>JkCz_AfvA3e~EdD!_6os%FHF*PQ$TA2akJ+bG zRw~qQBVS0tD6cX^aQRY7Y8Tw566fu4gnArsI_8l3w8^B1+VmYjWVrx|@&(W+T#LU+3;(rK>K#q-WqVfu(0s^K|4SRJ4N;IeGlhpx(&#`WIYP7CfSRh*{M;# z5P=7)=|1d=Q-rM6O@ROh)Ps1Stszhauz4jQ{LLPDMqo97mMZ8rj39cpcXywMRRMjO zhM}SDBlQVDqg$E?d;ud*Hz{zMVxlHBr7`^4(l2uYKE7UWZ_tg{C>l zkZqSWUDN?IB-nA@SwLBPJk@azRrDm_BnlcDX3^2n*UjYh@cxD)1JA(2l4%FdC~)qA zOTnS_B8S})6ySC>KmgGXMEoUSHtz)@E3+2o$W70R3Fz1t+R#@}ndbpNu5#JE=JKbe zrb_((9EV$40)^7QVs(??Yc}zzaASwucbvo)NkL^5+p?`7} zB=GE+84$I7O8f%ktJ=oKOFIt&nZy?Pk%2aBe0X@7rco-I^oX-pip*;ir0~7x(mnsR zUCWZ>=O?x4K8IOkG|y_?mdK7Z-&Jg2`sRMqm3xq7HBLZu{~cXta^U?_Yi z`(JW)K%MdeTxl6{K82T$YV4N$pY!k-dh|R+2=E>jW&DJ8&MFv~B$56Ufv9u44GEo` zvOS{-hQ-GZ%q`Y%{?)A{foaIi0d}F^k*!&g{G1T}zTQV{6oJPA9*Y+FiCr z8Q2n2MSPkNLQ^@nv0oG*^TF+CPWku7EWQMH{oRWo#6pVzTK$-g_w*j}2<4CQ@%3Z{ z_jDfHbcXWHf4J(46ZiKIKqg&OUy){zaRd$+$#OXS-B5+q>(_Qrf@Bvi$@G6kC2zr# zRcs^)upufjz(k?5qD#o?BKN%o12>$YQIIgeIjeFJ!4#JVWM<42QvCX}zkzz#5JbS% zS-Lw@J%bRswVQ!iTGInTe*fw^HW5}1ODHNxG#C+I#ROS=EEgBWdK!j{OKsqNX0Dnr zB7rUB^gWHrFY-TcTWbu+&(bWZ=;@6NA9!|MAC_vjYV9L?`awLm!P^5VnupM=Rz5Zs z#E}*QSCOHH9+SZa?Zw>H=i%OR%b_|hYllsP30>oeZng7S#&6Z=kTDhU%SV-*NCfKo~N(&#w#Ir0ZpDT<5x*rXN1!zv!DAEc~1 z!yo5F#W7}>1&EfRMn*>i3g!cq)Xvd_VfD|SuMk;N>+c_*=ZFG^y_fR4+wEPJ#s?p^ zS*F54Yzf#-ufv~GE_G`aiC7Gai7d`&@&m-BOK$jHz9^cqEEnj6T)Fi+7NFojLq*5r zsDI0*f1(Nzlc~DZ5DIX^6t)tP8PgDELm?Zq+l;5tFffRUNiKzU4ai@D6hAG`XUL?G z$8pV_{}8yqvCG#Qqn2>BrB+pwt3 zXEBAM=^6T{{a|O`l`%S@6lEk^KRL;=pIBpZ1r$H!XSJ%*(j#CnT0|KhZi_zo-W}KJ)ZuXq=krrPJwe3Xi31`~ql6f0ebaWkiCy zWk*9YHN+x7bSBsF_>X``VcECo>+`d{sbFVf%at-c({M=q+B0@`BZRx2F!1<3v=4Nz zi0dS%DNj>kjg!QP1Y2V)S3Q{!*lSo>`>=36UVV8z+$fp5s@Cg3a%jAIrmZKT-HJxuTLbAB^sdtbG5jpF-_(G3!BFPib^IHg(5lJ8+&8n=d zc0fsQw*`@y;$`4i3;JYKB~QI(U0`)>8jLP$ffB3OIMS`||?un)bWLKr_C)7PraA^->5Q zqDGq=73)B{^-4$QEwz}dk3WY!MR~%`e3{QtWXJxWnDRV zdut7Qx?Pi3JfeK=2&zC;vjyB_HXGISB;+5UYk_?@&3jitrDxpS77hWqFI1u=_^@G* za^A(Fj~LcDy%D4vEV#X_zAZK&zN}X;+DRt?*S2@5N1NP^3jE^v97|d(gQuFD;*hb5 zH&bpI&9EUO-i3h9pb%_MXp@8ZCD2C4i$Q@*3>xy3*RCbasLp4!(g{e@HPqCe;kPe; zytPxJ+%I8ylGnU+APAp62p7z^2CqV_QS-F1q1|amfC_yE7(BEL@59y zb$4koT;&I|x-c2*Z9q;C3Vo=djayxfE6(#aOPjsq~eSoX@!OQ?O{Nl z^&0am$RuJIekd==$>~Z93N>~tVb}XxSQL-&!DVuf_WUS9J3YLT=VlRMy6$yvo%<@D z0EjFbug|w#mfBF*Qh@ApU(s(%JWQ2YyJF--&>Wk+;JH{H$r36v`l;p+ zD3;=B7x0k;BOg9aWm{5H6i3U|t+GCggMUF(0Ql8ByS;78%{&t*uR%9b4TSKX)7Q^)Q3Onp`>0z@-Z*jn_uMhbsa8fkSVUorbSdjr8k}L(n_x zqxdL~&Gag3DNtqPfBRMf+#iY9AH8d<@>pJ=1bGWI&n}>Km4YI=@-$q#EF?Yb@AmpWT`v@qU z!C)CEiolMP4~I6ssVVyRcVE}n}O zZ~cej6Rr%b|0P`Xxk?O9-tSBE{)AfgmySWF1w350!bhWZ1d0?iEdpg?Bab`o-48Cv z&ziY+|K4t2;zq^^-2~b~(9Oo$n$9bk%*T%ny;g(wEFJ0v?fF(OBWFOxx1}7gtA0os6_#JPptmas9TCRXp z;fx9`aSgBh#eaAVPVKcW8B8l%+Y`muEyk&Zg}pgyAYSl>-WygkPIwa3e|rdUn84PT z>I@zx4>+Nej(jgXhVR|H{u-UZ;r03l7+{9mdb#~OsHr%~@ZFJuT%otysV@QP8q8c1 znv^Lb6)Yhmx8NJWm&l3*)Z6JSIx40#=AB$lowa=P%XA!C{OP$3Cy~`tf9>}wHT4u!Y9oi(ljg&U?( zU{jHY@|er6vQ{8lPv^Uo;>?f55_L70u6feJ6DxSA1p$@Xjo^YYmmJ_ImW&$9~{>19FYS`-e(Y6AXXsSkU$;i;*%m1>{% zf7m9R@VNm@+Qr$qc4luSTBHgL8~`EG?^Jg4_TI-ip1if47F&q|gea-Kw{Rk+6nGU* zm(2~Aa_f^LaH zO`knUC@%x{_P#kx-vBM!mBNu3)rt{`88iAf1J`Q&12@{FvNBNgF~HR-?pn#s_l4Ez z=rrUNU-lr>pd@&uP$<;e$MP@WipORJZj|= zj8J`}9X7-v67Ot~p7i^G0bf4FG7}{@J?KfQOP>i73tOpw%nA)h>Dr5w#*;3o@tHYG z+>Wh8w#qJ;vv*U37k+UR6YrmfFHEUYE7~P?O_uL_C3ysS@w5U{EA8gkseKwhDbHdQ z@P;Nb!sI(Bs@zx5@kv8iANce-cksPH7W1wt>NBHBVBCK1$_jK=a(WlDcm({DG)$DoWRbysjRM|Vxcp)JjIv9FA< z{pd2YS>Yho{hK23E#MH9gNL0u!`JHopv9rw+-sIh;8 zp&PbNKk;$$TZjEv-CBA+Erm2PY>oP!SYAiJlBe+uqaSb_I-Z( zPg9!BF6s&kw#g)C{mT4%Rszy_D05`~gv2q;o#Wtx(5ZmvIjhdhz{A%yiXQ#i+Zg^| z*0~-!#DvR*3t1@)q-acd82M28YpK#pscY!YY&yF9K49CqtbK=HL4Elq9e0U)u6D3i zb_W-VmSCwXaAW3)Au%`;5WTQ{5VM#F|4iUN`TlylH+3SOiJO=A*Sk_gn64}DGi4RW zPHQY_4h5`K@?Dw-7K{|~$QD52jbY;8Tc}?@PUJ5jFRrzUuFCW3|6}*S9lYm1^J_k& zdU~JybI;ggn0y}+ZRWNb>fFt*IVJr__vNV&{UjpvcMNFs7bhg>t-t5eg=mq?OelFf z{3E0{v{jmWxaVuT%GytG?N(`36}7*AKJ&(^ZLN4J;MC@FxsT1-BzS%pK)U5aB_{9x zHw|Gf2@)MfM6-S7YtyUManMj23EGZ`J4sU1A@2HS?Xb;|ZJY>buH>M}5OPUM{ zE!2$2Eh`4HyYjW;{V*Vqy^}Kj%$2=iR&{sD(?f)Rk+tmN+9V$uBItHlVQHQlU+nV7 zKi_}sGT$Gz-{yT4r#ZKKl(^tAJLHoUE0Zgd;Z-4ms(K~1!-&07Sh2Ne5WDD7x)Sb|@bx^UU6NZ)=%D9YW^8jC zQx-K3bKl(|rjA7O1q%ZIF>+KEN*9**>vB zUp6(iTdxdq81nA6;}Vm%+Mg#AcKDjAXJEou#UGveM&EcqN0o0D?qimp*!;G!PQc^Z z%#$eOh1_#7X(%+wcL}Hdr;kwbi4I;>F(zXe^DF#54E!Q~F`7`D`G%=Z4itF*hYoI! z|0Id5C|dUs9T|$%`xtq&K&veVQNy)D#t)-I6}*?$ABF1vVjCn>&*uPg7h80Ya*2{_ z`)gU@XeNx_Pn58;X4rU3S@V81GS;y`#LN-~@iQF@rq!)2`l%7T&(D|V0sxq^^eI}l z4{jK^f8$RemavX5rXh;cdxq})l39hBqpxbUcf|x_OK7VUr&`?NaPpHskpItvuyXt9+g!C%U8#V!m(BG{T(78tc2eFLoBZM#h8SVduXedEMC` z?o&>1bKT?c;4}ODra(#f1fO-QM?WW(i)|NkqYnd%fv*?K^Ejx!Si@Fp35y>_B`f$S zfbE#9T+?uNvn@H*(V^Mv*cfNW{ag>Yop+3A8o1rmjA^IKYB+~jfx}(mGuHzWaN4O# z$Ld72@Q_)}kNL6;V^@ykp`H%#!l{b3x2sVYRu1&2c8uzyM>NwmjXvcp=*E{0VYNT- zWfeN#DBzsq4HomgW~rQ$$4S8#rj}h)A>3Rq-1d*D+4)FLtGUo?%5pqKcA~3IFX6R* zp%jQa+0R3g5m>?-FUw!>`@X-{3xCUpp`1r*!nM#ngQ4tLoGd#pG&Wo#>W*(r*?s%e zEsN5!*Ns#Yg+ydM4|7thudlsTd6Wy~fW^IW5FKoM%%p)xfPl()*XO1(!mkEV|0XbV z0MBLZe#z?|4vD1+?X9hVTjlF(y|Sw>Yof+Hx^MZj!A*PqN_k4-DAP=FIcZjWui@CQ zK7>e<<-mczkq$pj_*oT1bNHgw{tLM~Y>L6oz@&dI=HU5LF?r*Q=F=Mktib{--O`+& zc@mr14sFz~n-a0In9ZnDy13!#H_c7v#Bi-`ICCv>#d|MpWJa-_F?^Rg*Mort!KKeI zJ&V5nx+m9UQLloh_6)seP}*z--7*TXJ{xJfZ9f0`dvfW~u{+K+wPG*d*V13JrkV0m zgY0N}xSjhL2dR>dI32?7meGld!p8$Vv(7F|V%EIzA=jO%GkPU)+q>e4A0K$aiyHD4 z7h^+fDN*Bb>pJwKg!o1)($|bxp3#NH;9ggNEgQKIx$-e|D8jv7T~rM~wpaH~u3;RJ zSFGE+Sr~GcDS*^(cWY|l6~D7VHSwPL-A#>rz9(-Y52Q}cP-x12-l(67N#qM4<>&(1 z=2aT^K71x-%=eO$u`fjxg*XzahD#hN{|3HxsvxT3k!&aC zk^#4HvU8EX?jlp5v7@Bq8+$yr!Q&3KbDkd}1hV^i4G>%H5!|6oe#f%8dDpe4P;(h4 zou<6`PTVl_X&s5G(Gc4``=yu5YKnGgxhYxv$_8wqn|IeU$tfH0APLG3-Q+@&0+W4i zCJd*hl!0ynY~d@Vxao?fnGgJvwNL8h2vb%9^wX3#zt5`_-6_ z8zZV>{-tZsP5;xczTV~zx$y_p&8LkK3JadsukdrI-5ID9X8yF(T?q!<4WPjEiHnf# zqg5riGV4z4pb3k_?Qq$>oUB*P%m3QPZc7uYzi?Ha)i`pJ_`_A*PIbheW?ocuU1n%c|Pv?qVf)$-4TuuU@!Na+pY+0kJ7B6wO%dqEX zcLxPwGI^fm9A?du-_cf6XAYKxhnQ4(l=xQgP>cS&u1_YXWyK|`Opg|BWQh;v)-%mn zNwtC&7pKXJK3u6;4RKl`JbRA4~J=gTv3O!lPLe6dEMvvmupdWx$hVU^S>w)`<~Hwz7IZ-#_^zv)b$^ch+ZHT z4t*S0loHZ-*PPNniA3EYwD%89F#1qpPj*9P;`Nn!Mt!Q86;H7fN1i}@q&E>~-?Oe+ zyMnUG__(T1Rm0unmh;_v-cLTF9D3l(p?xs<%x495DW~>&f5G5SrR%Rh7vdVT4z||h zVhZ2y#t)6-JN#TFRXb6%7XyPGeA-f}UjjWu+t4RvZiep3Ca;SE(0pi>K($B-nkgXnEnEf;weCvKDj)Su6BWvE@#F!^+(BnUs%F)%*6`tU>HRpyENl^#xk zyT3F|=Gr#Jte4oXC)DUUneduE2F(i@`r(Vd>ezB=eT=o&u_ZY;=T#$?b73?TG8aM@ z0k*;LNOhOr2O)cY*HokA`MiI;pZC9)KYXsw-1mL%>zs34=Q`JYzUN%X{@4gD zo{$|p6R+6&X2sNkR6Y__r6CH-U%9@tqpe*8&QI8L%xgG4-yg+B&))kKHuYdOA5p>0 z$XpomepSMEnBCX$n|cMw<=XQpP9|Pm3xZ*ST$OB#+l`*o*uA-ZuLozAU$&UdPn>3} zODRO7=JlWQtM_@ac)zPZ=5IFsF#FRJ|LLZ_dR; zc`T$DR0W(El}1_Q(>qzHy`6JAZ!2-WUYD zcTP9SBWnXcD?t3>w0QQ1dV^vR*ZKgw;<`~jQS_n*mKy>d$~wraX=^@**Q;|_X0Lw#tLqFX6I1XnIEvw#F! zBFwLMXebP4C19Dm_*~$cIr(gwi0|J@Ou9Cf&Z7(b+q9R_iV-;)9|LLU9}&0DYa(x zpS->^Vm$+SMaydzIU{zf2OdumNc!GP%*A=ECy#}xEBCJSYaLuF#OMYegQ%Qp)MHFf zg+{^$$p;J$=Vjtlolu8m)osmikFUPH8M1R>@}_rw0AaV#c*SzYa9VC5I{8*Q$+`Uf zn()-i0^oF1Cyva7FyBEXFb>5IT!wDao6tF4^t#13aVE{4TYTx3Hd_JcZH>ac?Bf1)-g{?!= zH+AbO$JHs6E|w7tyZ1IC5YNcFvvN_c zxh6zDOx0Dez5sxfkfcL6Se<45|@juZqnuHb~`~yq92E( zP-rXv9!&6Yh(8E>mKm_cbmE=F*4+&nya4#783&bOjupX=?XrMI4VHv+I5&93y>m*( z;supDk};nd-s6Vj1EO&7JpvXhLiEJvCdi zX02{y9g@&xf1U?}+eE+&ijvy@o+Yj#E?%B^a`c-gkKcKml2^f`JAWIAp?0;Y7mu8e zZGHtUGau&&I(;~=@R74J;p&c1^hjwA*rYpsLr`YMcV>tIc9^X@^{8BqT4SJ|3F*vS5MCk#pIF{traEmd2 zz&`4lhyLheDTpiQBP{`h=k0eYJ$C0=Czn>eAd#F=g-=hen&*e85Yh{~B-E!{4dFi7 z$;;%A*Vj{LPh`M`hKC_g5udTu{kkkvZ9{BziJGIab(=BJ4E~zuaKV@ zcPrrn%{j6&)|AQCePID6%ANdaM_x63OYG;}df6 z{DjNw3+k$;uk6QktPGur2+$tUx5@TB?tgEn_CY3co9ujg=upN3m=)R6qahRG(7oqiGHMSffHYP2XR{zLh%x0sd_*(p zH)zP$DWxQvMd)GE(*W-6ABK+ZSm*mK(!_2;!7mVG48TW7MYy2mwIP^utPu~>T3u22 zzf=;=nel7B*u{O2Z^U8jBh(#?A#)vdb)r7oj%^xm&+wZ@)}-VGHs-ZY%Z7ZZ)wkdm z#f*T5r*8U7L(AcUnss2nvB)k>r8(L_G)g}hSqI>fvh`16i&h*(;=!TT5XoD~bUGt# zTrLjWIpJCm8IP{g{KUH~GAqfeu2{%b+3EyWuOQRzuo6TqdZx3=GFjhgsy(T^Ao5ju zx5On=^?_GAW&F{&Ld|`h3-G)l-*ycYS%SH=s!nI<&Ifu0EVtMk&vo}Jor|`fQ1avI zVPx^UpsrKFCo8?@L_b*=$iM@o1NkB=Y*&_Qg!$q)=`}vJXNYP|Rd97_^2P+~T(^=q zeIaqGtog<(9yel6^EKCmbEV^zs{b6UzQVbNhuwP?5JgbwZlPZ#h4I7rB9#Xa%$maC z&X{~nE?vKhL(uS9XEh6;ArI99#yV~WyRb8FLg5bCN7Bk18X*}_4f#$<-8hmNbWLCC z{^inYIIWs>s;w+5>gnvGsY?ni`KF=AsNcMRdo%0{V$dY>krWW+gMkfpFC_u~WzQ7$ z3xg-o5str72>xL#bOvMFk8S5|h^CY9SNEvuQJLi9J+8SB<--oSzO%Nm-dPv9W(sI`=pkS>PFVJzZ(MNQGXQHR3ZGxJmDXRGQ&iTH7&hA|JpyZVo4 zh#vRl(yF=)UA;;>e_;!0=-Lwj#AGS|qH!|_4TpNuYF zNgTZ)Kd}e(idP3a(pr=hxbS0^IS2UF(V58aovaiF8|F(q%>LUN_MV~{{xg7B`R#OHtRdL?=RM)WGz^` zaLI538Xd_E1(bvXfZv$;VEW7d_qtclD+S&##{wcRA#NhEJd^;WRdNh+0|Upcfw=V48t@$y9=JWY z81d%;@8yz*`>2qTpFlbv*faU#e1OO>ogDj1R`A$?!d48(O!#f@wVnpIj^V6%0C;~F z%QCr9TY$xZL(zL_Mf@rk2(BhqiqFO!w7+?^o)ma1Kp7THS0?B2>3P*&13du0^ZqLL z#NqRj3^oF_Zlr$5>$lfYs&!OOeaz2Y9CQ-O7cN?PS}{fnw&bC~YtlVyK-!PC`$-L*wJEOG`_i z*c(;8bDo!f;xg9$KX4guIt+kx5s@0UfvsPT8QIQH*c zZ8813B7PX6ElqD6e?Tf*!+YI5qAnXhk(OI?nreu^pxH8HzpANF7lQv^*83}4&M*zl zt^`e0CHcP+nU=a4rx$BG-dR#B3y>glF!WVR82~#pCQY^i}Y4j;{CujoQFNw<+ZghIVcE@%z>1baVwT$otms zq&5`&eP9MS4ZDqWC|9j$35LT~fBho<^N}P~MOGnHn&cm^23N(lf%+w4r+(|tk4Mh% z!u*I_?VNx1b{lOBaFS6myuY*X{Sp2>taVzVq&5_hz}dxSZ0@ZVkVv?S@vTh^!uA4(mQQbUZxKKuWS$2~n;6_u$DbP9QpctV zwKY5bn1fr!ifW_QP0*IHS{KF7#@5>Lr)g#Vzg)`u6L%DJj7c!x{oCE!d(HD6htcNs zFiE5TW_8Hh&r)VB6LXwbzfR1*Ps~S#Gz`4{>}Fa0KBTy~IA3ig_)pC#`qX&ucR!gp zFzp`L4Ng;1egEYu>+-?^N6sr-a140M<=Jkg&FeVpf)aktL;lIz&+hUqBhIsl)w?a) z-ro7cbWkP^1}yB_ZpRbRo0j8;z)3hiJaToj_do_~KACyg8M4Vb-vb_1(@KT*CSu2d zk0RAm>nXBnvep2LZXc6ayqOphco0ar=oZ8#-5G*TADx+z+Dr_%Td%El&XjI;JDNbJ st#9@rHxY{le8zn;KN+=2^yV=&ho5CunGHJfB5A;%<|(Xdp0YXNztg7BhyVZp literal 0 HcmV?d00001 diff --git a/static/images/blog/2018-10-08-support-for-azure-vmss/cluster-autoscaler.png b/static/images/blog/2018-10-08-support-for-azure-vmss/cluster-autoscaler.png new file mode 100644 index 0000000000000000000000000000000000000000..db47b3fa31abb9aa616d9c1885fa819649316982 GIT binary patch literal 93318 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 literal 0 HcmV?d00001 diff --git a/static/images/blog/2018-10-08-support-for-azure-vmss/sample-azure-cluster.png b/static/images/blog/2018-10-08-support-for-azure-vmss/sample-azure-cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..1579589d050a37a4ebab01eb3d05dc85a55f0bff GIT binary patch literal 149438 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 z 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%0D^d;=!XS_iVAxFcEHmFZ> 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 o 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±I(Nuzct7S5VUS|%ZXUMS`R zg6(%;H-k^oH??gsWkz+wAMnm7xXYlfa>?em&HD0_;lt^L{H6&RJ9gi$rr_JX#C-XH zMSxjC~fi;`f2u&+a; zO(+9cUnLQrD><9POpfzJY3bLbkv z$hgEK39lDqcq~5kE%H;F(e{t)KVjW-N#O|5STGxxyn>#wV0B z+{+vEd8d1T{E)xxJlOd}n`($!)U|!82LrZkIRJs*ZKp3L&;!g7?%vLrAts{dg0JmF zaZ}o33yTbR=x6M_#vcGy0|S=1KhFj(utbM|M449LdujdlUJNSWgG zkq;1lCix1O59VB9VbeO?)L;Cu`u0PrBUxDmRX;EPtxxIXN%Y0Uw0?cYlNeDvgnz|D z86)!TTfY|k@d!6pT-!wl34F2DR|7qVlu#bAq!v&wrdkQT|2LtLE764j?vl|6aWSe2 zo;jQ`jQ(~H`>4AXH5*_CBw19qr8cMUnbq9>U^wrty~|-Iw(I!p(q3|A?4KFz;pwj} zC2Cydy6O4b5o#>VB5u8u0Vl7(sY0_lHTse@^T(x`76C{sxZLeQv|!vsbZjX*d}>l% z4CXDKr+U55lghL{U3_$S-F8cb;n+Lmk?pJJzQ3^Q&;HeBP3XR7m-@EWQVz&gVRCOi zBBX&=G4#d`ml43k*hFsfBTF00HB9~YD_^LaBwsl$vMV-xIG1M4#Uo-2-U+jKfAw^^ z8sB=myIVp{e9~EFGZJ8Lt#vyCeaKV#xKN%*9ZwRr7>EsBCO7;o2*kLl`b+`P^^$C` z$Etx@s!evS^Z3|ocvzF8!coE}X~Ti~d!{7y5%M5!Z@WDy*A|mLi3k~4%=uZ(vu4@y zO&>u3+;3T0cX;*h%!)lL(z?p{LiC3a9vvYd8F2;dTM0(mS$=uhdQ!{ZKU#)IGeE=@ z;p2p*p~JuT-18_iBO{L7h7THf7C}Zy!9V7+S%KIbHHj$EJahR1gjb2`nd2`q_eebw zVhU(Fz+?pOri1&Ndbs@-qn}Uj^^oJD=hNQazO`Jby@bw*lHk3#SfuVBPEImfdV9V% zM5z+Ep&@Y6RB;KLu!zV+ajc}xjPjt+C}`t{o{#$1qpiv`QA3hl-*K0(gwJYE{z;jLf0%=ygJ4~GSC^dfqGv}dr|)mp zobjGM!5@SSyb?dYK2Racy1t&?;xAwJ z!|@)lf4{b8nDE}1v6&@{2(aM~Y)dJmUjdvO>P0iqOoLkT+7y4A9dtYs50Xu|PGv#S zq4iw*GfQue8jtxSt3;9d+5u3t^Jgpbc8Ur3$5)C-3xGqb6c&=`vQ*y0!Ywmzw>S&v z^IDX~n+GCMe_>zSCB3~sb0NdX!)}&D>v$yzrSn9hPf7S<>KKs)@20vZyFBbL_!vAy zUgbbA!jwpE|22tY?M=@1D8($ay#Vsx;c`zOBJ$fQDAUyM3SISTOvZCdtr52u>I-Xtv3%1Pt#R%@QFH3KU}~{A0+S z;3x>$;m0f|jCD=sr$$mSP&%~J)(?#g!jO?U_W$c?ZzzWn9WiBs00rH4aJ49kAQOnX ze5T_3i4;^Uu${)8-_@oBN3Q=!Kl@1bqR`KjmD99XY2%?z>C-jbHS%^uoK1jJ2tE;k z7i_%CbZID1U}G^R2oFc7I~PA%4Tg%e2PJt~*Dl>xR{y@a37GzwiSJuWzB`O2V}OOd zKe^L6-J4-{-um`kBy63Ng1t zo?1WW6E&@iR|Erce)%4U>i>G(VVbBp=e5To2RDOZ^QX8+cp z=hl|ipTOrRf*NOzZY}}H%ld(l?I~KS0c(z?%iNunn#Z!D8r4pATrCEFz7YFe!^IKh?u0OpPlY z7FH=20yL3mvwyO(vZ`7ZSdn2lkbAo$=>Dv57}@}fPXM%7iJLlP#sp(s??gAf_ZC3k`c~OqRBf9B5YJIxOZxU&sP>XnJME2fh4Z9X zC~V%3y?Cjbc$eMcdKJ0axPShTf9UGf%B#nU+HqyV)mBDH?=HrFIcMNvy3L247W>*h z%yCpW^!NfM`1bZ8MBwjnkJ1l90?Yu5^Nv~yqa-+Cfln-4n~YPd*)@43)5Sl#hA!lD z_eo5X@#vn9GGugbICVy7vF3N`MaKTV$L$~p*t=8feYayUB$V`zDJhb&Q{}^8>|KNw zUxjJg#^A0eJA>bJsJzCDmmlhXchtF)^cnJ;K?ZK`&RWi{W#zuTBglFKFrM~Z4LjGWy#LIOmy11|XOweB4ML$JMi&}9%Wh2pgSDYCS3 zmfx(F3QAb`{uhY4_I4=Q?39nExh%pCrAsqRiR<{c+Lu-qtZ`l$OXqn5b3Q zNw)u?>J+@Z;^7sK%VW8dEfVRu&Ys=_C7!csiXew<--G=9QrXF$tIVbS`xz9iEf#EBz$!Qs3v+mZ_;K zX|@%gv$%_L0SgNmI!OLpUw=-|Qccsb`#sN)UKw%nu}Q>MRYAwY$L}LoO-Oy68yXn! zPgzr4VDgqRgilOOT!nVINc4T4{Pv+Z8f0J!pA6lJ#mLUQn{GKs_jf5S7Cie5hAmCo zdy{s=5<%b9EL`QCF1Z4vJ&*4$lfP!3h81+al1G+0&GKc7+`kNWU628&6TOHXlUXUC zi0oj^KsdJTD*PHy)Y1gi^GNFdq!$5EqAIXCPT;fWbSh){> zIk$5vT&H+{k;k}S9v@7$?jz-MfDKqVNGRyPM0EA_B$Cv#rmYC?307w!bYr|4W0 zCJHx0zLk^?k~zfXm3Eqw^1-}vAc7&WwvgY{q0~bzvr2w6e8%~8^xi^U!a55&*JL3U z8jh>Jd~Bnk3oL$+)ITGJRX|rE*m9f>;)R-XE$&?_04j5eBX(u)znSrqe zz1n?ux0AFHx0m?(cDUBSA-N=pHe?&8?EoYQH7F@tbPUVh-d)CJr~ZesPo(_HXiV7Y z`}z59J_ZKdyV!5prw(L*t_vrFGIzT;_${f~0+{-2xfZy+7>tMRRt`7H&pMP61f1#CHvzDRinv!o_a1DE_=8`fpS}@nlT7oOk zQHM64Fw(cS^39z2vVBuM>J^}}VPGL2DKPT)?{kt-m92p;G7ItJ<4XGPNfB?YKCzr+ zo9Tc1n00g;V%}l8D0rR-J5S80Jp#T~v*Mpg025{ly?-=>6kls2>;XBnca<50>LW>W zHFcwR=)>=?tz;}k+#PuEB~B{&m67~ZG+U61*TBZHyR>ccqr&zcLYw)vw$pd79U8d& zFMqbVMrVjG)AysudWg5a$fSHPhB;UWG;ex5WH)&EGFr--FW8+{5%o_^QbSnL3^0eS zdaXyc9P*Uq6rVBrRWj}v+paRlZYE|X|8|l6dB%1I!F(SpoqcVo>W!1L^I3)pK#g8) z2Jzo;B)RP=()PrS9@J3D9i0u2WlJI+lq1gS*2%0A21C8Pe4kSu#t7C<%Lqro4nM`t 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 C(G9i$ literal 0 HcmV?d00001 From 797db720dcf3ff922c98d4879fde43edaa3c341d Mon Sep 17 00:00:00 2001 From: Stephan Fabel <1530330+sfabel@users.noreply.github.com> Date: Mon, 8 Oct 2018 16:34:34 -0700 Subject: [PATCH 101/181] Add microk8s to pick-right-solution.md (#10542) * Add microk8s to pick-right-solution.md Microk8s is a single-command installation of upstream Kubernetes on any Linux and should be included in the list of local-machine solutions. * capitalized Istio --- content/en/docs/setup/pick-right-solution.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/setup/pick-right-solution.md b/content/en/docs/setup/pick-right-solution.md index 00217bbc52..d14af36bae 100644 --- a/content/en/docs/setup/pick-right-solution.md +++ b/content/en/docs/setup/pick-right-solution.md @@ -34,6 +34,8 @@ a Kubernetes cluster from scratch. * [Minikube](/docs/setup/minikube/) is the recommended method for creating a local, single-node Kubernetes cluster for development and testing. Setup is completely automated and doesn't require a cloud provider account. +* [microk8s](https://microk8s.io/) provides a single command installation of the latest Kubernetes release on a local machine for development and testing. Setup is quick, fast (~30 sec) and supports many plugins including Istio with a single command. + * [IBM Cloud Private-CE (Community Edition)](https://github.com/IBM/deploy-ibm-cloud-private) can use VirtualBox on your machine to deploy Kubernetes to one or more VMs for development and test scenarios. Scales to full multi-node cluster. * [IBM Cloud Private-CE (Community Edition) on Linux Containers](https://github.com/HSBawa/icp-ce-on-linux-containers) is a Terraform/Packer/BASH based Infrastructure as Code (IaC) scripts to create a seven node (1 Boot, 1 Master, 1 Management, 1 Proxy and 3 Workers) LXD cluster on Linux Host. From 0478f4e565f85c0a3cc7c7fd690be761b1b73333 Mon Sep 17 00:00:00 2001 From: Stephan Fabel <1530330+sfabel@users.noreply.github.com> Date: Mon, 8 Oct 2018 18:06:58 -0700 Subject: [PATCH 102/181] Add microk8s to foundational.md (#10543) * Add microk8s to foundational.md Adding microk8s as credible and stable alternative to get started with Kubernetes on a local machine. This is especially attractive for those not wanting to incur the overhead of running a VM for a local cluster. * Update foundational.md Thank you for your suggestions! LMK if this works now? * Rewrote first paragraph And included a bullet list of features of microk8s * Copyedit --- .../application-developer/foundational.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/content/en/docs/user-journeys/users/application-developer/foundational.md b/content/en/docs/user-journeys/users/application-developer/foundational.md index e9a84a849e..d5e72dd3b6 100644 --- a/content/en/docs/user-journeys/users/application-developer/foundational.md +++ b/content/en/docs/user-journeys/users/application-developer/foundational.md @@ -53,6 +53,33 @@ Minikube can be installed locally, and runs a simple, single-node Kubernetes clu You can get basic information about your cluster with the commands `kubectl cluster-info` and `kubectl get nodes`. However, to get a good idea of what's really going on, you need to deploy an application to your cluster. This is covered in the next section. +#### microk8s + +On Linux, *microk8s* is a good alternative to Minikube for a local +install of Kubernetes: + +* Runs on the native OS, so there is no overhead from running a virtual machine. +* Always provides the latest stable version of Kubernetes, using built-in auto-upgrade functionality. +* Installs in less than a minute. + +* {{< link text="Install microk8s" url="https://microk8s.io/" >}}. + +After you install microk8s, you can use its tab-completion +functionality. All microk8s commands start with `microk8s.`. Type +`microk8s.` (with the period) and then use the tab key to see a list +of available commands. + +It also includes commands to enable Kubernetes subsystems. For example: + +* the Kubernetes Dashboard +* the DNS service +* GPU passthrough (for NVIDIA) +* Ingress +* Istio +* Metrics server +* Registry +* Storage + ## Deploy an application #### Basic workloads From fac3b102a7dc09129195c9c39db8b44dec10d345 Mon Sep 17 00:00:00 2001 From: fqsghostcloud Date: Tue, 9 Oct 2018 15:20:48 +0800 Subject: [PATCH 103/181] fix typo (#10545) --- .../docs/reference/access-authn-authz/admission-controllers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/access-authn-authz/admission-controllers.md b/content/en/docs/reference/access-authn-authz/admission-controllers.md index 1dabb38254..9eee5a89e8 100644 --- a/content/en/docs/reference/access-authn-authz/admission-controllers.md +++ b/content/en/docs/reference/access-authn-authz/admission-controllers.md @@ -62,7 +62,7 @@ For example, the following command line enables the `NamespaceLifecycle` and the admission control plugins: ```shell -kube-apiserver --enable-admission-plugins=NamespaceLifecyle,LimitRanger ... +kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ... ``` {{< note >}} From dbf12eb6728057130deef7124993ea4d9fae257d Mon Sep 17 00:00:00 2001 From: William Zhang Date: Tue, 9 Oct 2018 16:07:18 +0800 Subject: [PATCH 104/181] Fix the kubectl subcommands links. (#10550) Signed-off-by: William Zhang --- content/en/docs/reference/kubectl/kubectl.md | 84 ++++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/content/en/docs/reference/kubectl/kubectl.md b/content/en/docs/reference/kubectl/kubectl.md index c32a7cad88..3d6f5808c2 100755 --- a/content/en/docs/reference/kubectl/kubectl.md +++ b/content/en/docs/reference/kubectl/kubectl.md @@ -9,7 +9,7 @@ kubectl controls the Kubernetes cluster manager ### Synopsis -kubectl controls the Kubernetes cluster manager. +kubectl controls the Kubernetes cluster manager. Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/ @@ -249,45 +249,45 @@ kubectl [flags] ### SEE ALSO -* [kubectl alpha](kubectl_alpha.md) - Commands for features in alpha -* [kubectl annotate](kubectl_annotate.md) - Update the annotations on a resource -* [kubectl api-resources](kubectl_api-resources.md) - Print the supported API resources on the server -* [kubectl api-versions](kubectl_api-versions.md) - Print the supported API versions on the server, in the form of "group/version" -* [kubectl apply](kubectl_apply.md) - Apply a configuration to a resource by filename or stdin -* [kubectl attach](kubectl_attach.md) - Attach to a running container -* [kubectl auth](kubectl_auth.md) - Inspect authorization -* [kubectl autoscale](kubectl_autoscale.md) - Auto-scale a Deployment, ReplicaSet, or ReplicationController -* [kubectl certificate](kubectl_certificate.md) - Modify certificate resources. -* [kubectl cluster-info](kubectl_cluster-info.md) - Display cluster info -* [kubectl completion](kubectl_completion.md) - Output shell completion code for the specified shell (bash or zsh) -* [kubectl config](kubectl_config.md) - Modify kubeconfig files -* [kubectl convert](kubectl_convert.md) - Convert config files between different API versions -* [kubectl cordon](kubectl_cordon.md) - Mark node as unschedulable -* [kubectl cp](kubectl_cp.md) - Copy files and directories to and from containers. -* [kubectl create](kubectl_create.md) - Create a resource from a file or from stdin. -* [kubectl delete](kubectl_delete.md) - Delete resources by filenames, stdin, resources and names, or by resources and label selector -* [kubectl describe](kubectl_describe.md) - Show details of a specific resource or group of resources -* [kubectl drain](kubectl_drain.md) - Drain node in preparation for maintenance -* [kubectl edit](kubectl_edit.md) - Edit a resource on the server -* [kubectl exec](kubectl_exec.md) - Execute a command in a container -* [kubectl explain](kubectl_explain.md) - Documentation of resources -* [kubectl expose](kubectl_expose.md) - Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service -* [kubectl get](kubectl_get.md) - Display one or many resources -* [kubectl label](kubectl_label.md) - Update the labels on a resource -* [kubectl logs](kubectl_logs.md) - Print the logs for a container in a pod -* [kubectl options](kubectl_options.md) - Print the list of flags inherited by all commands -* [kubectl patch](kubectl_patch.md) - Update field(s) of a resource using strategic merge patch -* [kubectl plugin](kubectl_plugin.md) - Provides utilities for interacting with plugins. -* [kubectl port-forward](kubectl_port-forward.md) - Forward one or more local ports to a pod -* [kubectl proxy](kubectl_proxy.md) - Run a proxy to the Kubernetes API server -* [kubectl replace](kubectl_replace.md) - Replace a resource by filename or stdin -* [kubectl rollout](kubectl_rollout.md) - Manage the rollout of a resource -* [kubectl run](kubectl_run.md) - Run a particular image on the cluster -* [kubectl scale](kubectl_scale.md) - Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job -* [kubectl set](kubectl_set.md) - Set specific features on objects -* [kubectl taint](kubectl_taint.md) - Update the taints on one or more nodes -* [kubectl top](kubectl_top.md) - Display Resource (CPU/Memory/Storage) usage. -* [kubectl uncordon](kubectl_uncordon.md) - Mark node as schedulable -* [kubectl version](kubectl_version.md) - Print the client and server version information -* [kubectl wait](kubectl_wait.md) - Experimental: Wait for a specific condition on one or many resources. +* [kubectl alpha](/docs/reference/generated/kubectl/kubectl-commands#alpha) - Commands for features in alpha +* [kubectl annotate](/docs/reference/generated/kubectl/kubectl-commands#annotate) - Update the annotations on a resource +* [kubectl api-resources](/docs/reference/generated/kubectl/kubectl-commands#api-resources) - Print the supported API resources on the server +* [kubectl api-versions](/docs/reference/generated/kubectl/kubectl-commands#api-versions) - Print the supported API versions on the server, in the form of "group/version" +* [kubectl apply](/docs/reference/generated/kubectl/kubectl-commands#apply) - Apply a configuration to a resource by filename or stdin +* [kubectl attach](/docs/reference/generated/kubectl/kubectl-commands#attach) - Attach to a running container +* [kubectl auth](/docs/reference/generated/kubectl/kubectl-commands#auth) - Inspect authorization +* [kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands#autoscale) - Auto-scale a Deployment, ReplicaSet, or ReplicationController +* [kubectl certificate](/docs/reference/generated/kubectl/kubectl-commands#certificate) - Modify certificate resources. +* [kubectl cluster-info](/docs/reference/generated/kubectl/kubectl-commands#cluster-info) - Display cluster info +* [kubectl completion](/docs/reference/generated/kubectl/kubectl-commands#completion) - Output shell completion code for the specified shell (bash or zsh) +* [kubectl config](/docs/reference/generated/kubectl/kubectl-commands#config) - Modify kubeconfig files +* [kubectl convert](/docs/reference/generated/kubectl/kubectl-commands#convert) - Convert config files between different API versions +* [kubectl cordon](/docs/reference/generated/kubectl/kubectl-commands#cordon) - Mark node as unschedulable +* [kubectl cp](/docs/reference/generated/kubectl/kubectl-commands#cp) - Copy files and directories to and from containers. +* [kubectl create](/docs/reference/generated/kubectl/kubectl-commands#create) - Create a resource from a file or from stdin. +* [kubectl delete](/docs/reference/generated/kubectl/kubectl-commands#delete) - Delete resources by filenames, stdin, resources and names, or by resources and label selector +* [kubectl describe](/docs/reference/generated/kubectl/kubectl-commands#describe) - Show details of a specific resource or group of resources +* [kubectl drain](/docs/reference/generated/kubectl/kubectl-commands#drain) - Drain node in preparation for maintenance +* [kubectl edit](/docs/reference/generated/kubectl/kubectl-commands#edit) - Edit a resource on the server +* [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands#exec) - Execute a command in a container +* [kubectl explain](/docs/reference/generated/kubectl/kubectl-commands#explain) - Documentation of resources +* [kubectl expose](/docs/reference/generated/kubectl/kubectl-commands#expose) - Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service +* [kubectl get](/docs/reference/generated/kubectl/kubectl-commands#get) - Display one or many resources +* [kubectl label](/docs/reference/generated/kubectl/kubectl-commands#label) - Update the labels on a resource +* [kubectl logs](/docs/reference/generated/kubectl/kubectl-commands#logs) - Print the logs for a container in a pod +* [kubectl options](/docs/reference/generated/kubectl/kubectl-commands#options) - Print the list of flags inherited by all commands +* [kubectl patch](/docs/reference/generated/kubectl/kubectl-commands#patch) - Update field(s) of a resource using strategic merge patch +* [kubectl plugin](/docs/reference/generated/kubectl/kubectl-commands#plugin) - Provides utilities for interacting with plugins. +* [kubectl port-forward](/docs/reference/generated/kubectl/kubectl-commands#port-forward) - Forward one or more local ports to a pod +* [kubectl proxy](/docs/reference/generated/kubectl/kubectl-commands#proxy) - Run a proxy to the Kubernetes API server +* [kubectl replace](/docs/reference/generated/kubectl/kubectl-commands#replace) - Replace a resource by filename or stdin +* [kubectl rollout](/docs/reference/generated/kubectl/kubectl-commands#rollout) - Manage the rollout of a resource +* [kubectl run](/docs/reference/generated/kubectl/kubectl-commands#run) - Run a particular image on the cluster +* [kubectl scale](/docs/reference/generated/kubectl/kubectl-commands#scale) - Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job +* [kubectl set](/docs/reference/generated/kubectl/kubectl-commands#set) - Set specific features on objects +* [kubectl taint](/docs/reference/generated/kubectl/kubectl-commands#taint) - Update the taints on one or more nodes +* [kubectl top](/docs/reference/generated/kubectl/kubectl-commands#top) - Display Resource (CPU/Memory/Storage) usage. +* [kubectl uncordon](/docs/reference/generated/kubectl/kubectl-commands#uncordon) - Mark node as schedulable +* [kubectl version](/docs/reference/generated/kubectl/kubectl-commands#version) - Print the client and server version information +* [kubectl wait](/docs/reference/generated/kubectl/kubectl-commands#wait) - Experimental: Wait for a specific condition on one or many resources. From c02a7fb9f9d19872d9227814b3e9ffaaa28d85f0 Mon Sep 17 00:00:00 2001 From: Bily Zhang Date: Tue, 9 Oct 2018 16:09:54 +0800 Subject: [PATCH 105/181] Fix command issue (#10515) Signed-off-by: mooncake --- .../docs/tasks/administer-cluster/apply-resource-quota-limit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md b/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md index 3f94a633ad..b35804bf7a 100644 --- a/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md +++ b/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md @@ -208,7 +208,7 @@ Kubernetes API server 拒绝了 replica set 创建一个 pod 的请求,因为 ```shell $ kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/rq-limits.yaml --namespace=quota-example limitrange "limits" created -$ kubectl describe limits limits --namespace=quota-example +$ kubectl describe limits --namespace=quota-example Name: limits Namespace: quota-example Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio From 1b7fe798da2710422c9a3b43d9f7de304437c1c9 Mon Sep 17 00:00:00 2001 From: Jennifer Rondeau Date: Tue, 9 Oct 2018 04:12:31 -0400 Subject: [PATCH 106/181] remove imported community files per issue 10184 (#10501) --- content/en/docs/community/_index.md | 12 - content/en/docs/community/devel.md | 80 ----- content/en/docs/community/guide.md | 248 --------------- content/en/docs/community/keps.md | 419 ------------------------- content/en/docs/community/mentoring.md | 49 --- 5 files changed, 808 deletions(-) delete mode 100644 content/en/docs/community/_index.md delete mode 100644 content/en/docs/community/devel.md delete mode 100644 content/en/docs/community/guide.md delete mode 100644 content/en/docs/community/keps.md delete mode 100644 content/en/docs/community/mentoring.md diff --git a/content/en/docs/community/_index.md b/content/en/docs/community/_index.md deleted file mode 100644 index c5031a0a48..0000000000 --- a/content/en/docs/community/_index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Community" -weight: 80 -menu: - main: - title: "Community" - weight: 30 - post: > -

    If you need help, you can connect with other Kubernetes users and the Kubernetes authors, attend community events, and watch video presentations from around the web.

    ---- - -This section of the Kubernetes documentation surfaces key topics imported from the [kubernetes/community](https://github.com/kubernetes/community) repo. It is the starting point for becoming a contributor -- improving docs, improving code, giving talks etc. diff --git a/content/en/docs/community/devel.md b/content/en/docs/community/devel.md deleted file mode 100644 index cdf8ee6385..0000000000 --- a/content/en/docs/community/devel.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Kubernetes Developer Guide ---- - -The developer guide is for anyone wanting to either write code which directly accesses the -Kubernetes API, or to contribute directly to the Kubernetes project. -It assumes some familiarity with concepts in the [User Guide](http://kubernetes.io/docs/user-guide/) and the [Cluster Admin -Guide](http://kubernetes.io/docs/admin/). - - -## The process of developing and contributing code to the Kubernetes project - -* **Contributor Guide** - ([Please start here](https://github.com/kubernetes/community/tree/master/contributors/guide/README.md)) to learn about how to contribute to Kubernetes - -* **GitHub Issues** ([issues-triage.md](https://github.com/kubernetes/community/blob/master/contributors/guide/issue-triage.md)): How incoming issues are triaged. - -* **Pull Request Process** ([/contributors/guide/pull-requests.md](https://github.com/kubernetes/community/tree/master/contributors/guide/pull-requests.md)): When and why pull requests are closed. - -* **Getting Recent Builds** ([getting-builds.md](https://github.com/kubernetes/community/tree/master/contributors/devel/getting-builds.md)): How to get recent builds including the latest builds that pass CI. - -* **Automated Tools** ([automation.md](https://github.com/kubernetes/community/tree/master/contributors/devel/automation.md)): Descriptions of the automation that is running on our github repository. - - -## Setting up your dev environment, coding, and debugging - -* **Development Guide** ([development.md](https://github.com/kubernetes/community/tree/master/contributors/devel/development.md)): Setting up your development environment. - -* **Testing** ([testing.md](https://github.com/kubernetes/community/tree/master/contributors/devel/testing.md)): How to run unit, integration, and end-to-end tests in your development sandbox. - -* **Hunting flaky tests** ([flaky-tests.md](https://github.com/kubernetes/community/tree/master/contributors/devel/flaky-tests.md)): We have a goal of 99.9% flake free tests. - Here's how to run your tests many times. - -* **Logging Conventions** ([logging.md](https://github.com/kubernetes/community/tree/master/contributors/devel/logging.md)): Glog levels. - -* **Profiling Kubernetes** ([profiling.md](https://github.com/kubernetes/community/tree/master/contributors/devel/profiling.md)): How to plug in go pprof profiler to Kubernetes. - -* **Instrumenting Kubernetes with a new metric** - ([instrumentation.md](https://github.com/kubernetes/community/tree/master/contributors/devel/instrumentation.md)): How to add a new metrics to the - Kubernetes code base. - -* **Coding Conventions** ([coding-conventions.md](https://github.com/kubernetes/community/tree/master/contributors/devel/../guide/coding-conventions.md)): - Coding style advice for contributors. - -* **Document Conventions** ([how-to-doc.md](https://github.com/kubernetes/community/tree/master/contributors/devel/how-to-doc.md)) - Document style advice for contributors. - -* **Running a cluster locally** ([running-locally.md](https://github.com/kubernetes/community/tree/master/contributors/devel/running-locally.md)): - A fast and lightweight local cluster deployment for development. - -## Developing against the Kubernetes API - -* The [REST API documentation](http://kubernetes.io/docs/reference/) explains the REST - API exposed by apiserver. - -* **Annotations** ([Annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)): are for attaching arbitrary non-identifying metadata to objects. - Programs that automate Kubernetes objects may use annotations to store small amounts of their state. - -* **API Conventions** ([api-conventions.md](https://github.com/kubernetes/community/tree/master/contributors/devel/api-conventions.md)): - Defining the verbs and resources used in the Kubernetes API. - -* **API Client Libraries** ([client-libraries](/docs/reference/using-api/client-libraries/)): - A list of existing client libraries, both supported and user-contributed. - - -## Writing plugins - -* **Authentication** ([Authentication](http://kubernetes.io/docs/reference/access-authn-authz/authentication/)): - The current and planned states of authentication tokens. - -* **Authorization Plugins** ([Authorization](http://kubernetes.io/docs/reference/access-authn-authz/authorization/)): - Authorization applies to all HTTP requests on the main apiserver port. - This doc explains the available authorization implementations. - -* **Admission Control Plugins** ([admission_control](https://github.com/kubernetes/community/tree/master/contributors/design-proposals/api-machinery/admission_control.md)) - - -## Building releases - -See the [kubernetes/release](https://github.com/kubernetes/release) repository for details on creating releases and related tools and helper scripts. diff --git a/content/en/docs/community/guide.md b/content/en/docs/community/guide.md deleted file mode 100644 index be6bba58ae..0000000000 --- a/content/en/docs/community/guide.md +++ /dev/null @@ -1,248 +0,0 @@ ---- -title: Kubernetes Contributor Guide -owner: sig-contributor-experience -notitle: true ---- - -# Kubernetes Contributor Guide - -## Disclaimer - -Hello! This is the starting point for our brand new contributor guide, currently underway as per [issue#6102](https://github.com/kubernetes/website/issues/6102) and is in need of help. -Please be patient, or fix a section below that needs improvement, and submit a pull request! Feel free to browse the [open issues](https://github.com/kubernetes/community/issues?q=is%3Aissue+is%3Aopen+label%3Aarea%2Fcontributor-guide) and file new ones, all feedback welcome! - - -# Welcome - -Welcome to Kubernetes! This document is the single source of truth for how to contribute to the code base. Please leave comments / suggestions if you find something is missing or incorrect. - -- [Before you get started](#before-you-get-started) - - [Sign the CLA](#sign-the-cla) - - [Code of Conduct](#code-of-conduct) - - [Setting up your development - environment](#setting-up-your-development-environment) - - [Community Expectations and Roles](#community-expectations-and-roles) - - [Thanks](#thanks) -- [Your First Contribution](#your-first-contribution) - - [Find something to work on](#find-something-to-work-on) - - [Find a good first topic](#find-a-good-first-topic) - - [Learn about SIGs](#learn-about-sigs) - - [File an Issue](#file-an-issue) -- [Contributing](#contributing) - - [Communication](#communication) - - [GitHub workflow](#github-workflow) - - [Open a Pull Request](#open-a-pull-request) - - [Code Review](#code-review) - - [Testing](#testing) - - [Security](#security) - - [Documentation](#documentation) - - [Issues Management or Triage](#issues-management-or-triage) -- [Community](#community) - - [Communication](#communication-1) - - [Events](#events) - - [Meetups](#meetups) - - [Mentorship](#mentorship) - -# Before you get started - -## Sign the CLA - -Before you can contribute, you will need to sign the [Contributor License Agreement](https://github.com/kubernetes/community/tree/master/CLA.md). - -## Code of Conduct - -Please make sure to read and observe our [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). - -## Setting up your development environment - -If you haven’t set up your environment, please find resources [here](https://github.com/kubernetes/community/tree/master/contributors/devel). - -## Community Expectations and Roles - -Kubernetes is a community project. Consequently, it is wholly dependent on its community to provide a productive, friendly and collaborative environment. - -- Read and review the [Community Expectations](https://github.com/kubernetes/community/tree/master/contributors/guide/community-expectations.md) for an understand of code and review expectations. -- See [Community Membership](https://github.com/kubernetes/community/tree/master/community-membership.md) for a list the various responsibilities of contributor roles. You are encouraged to move up this contributor ladder as you gain experience. - -# Your First Contribution - -Have you ever wanted to contribute to the coolest cloud technology? We will help you understand the organization of the Kubernetes project and direct you to the best places to get started. You'll be able to pick up issues, write code to fix them, and get your work reviewed and merged. - -Please be aware that due to the large number of issues our triage team deals with, we cannot offer technical support in GitHub issues. If you have questions about the development process, feel free to jump into our [Slack Channel](http://slack.k8s.io/) or join our [mailing list](https://groups.google.com/forum/#!forum/kubernetes-dev). You can also ask questions on [ServerFault](https://serverfault.com/questions/tagged/kubernetes) or [Stack Overflow](https://stackoverflow.com/questions/tagged/kubernetes). The Kubernetes team scans Stack Overflow on a regular basis and will try to ensure your questions don't go unanswered. - -## Find something to work on - -Help is always welcome! For example, documentation (like the text you are reading now) can always use improvement. There's always code that can be clarified and variables or functions that can be renamed or commented. There's always a need for more test coverage. -You get the idea - if you ever see something you think should be fixed, you should own it. Here is how you get started. - -### Find a good first topic - -There are multiple repositories within the Kubernetes community and a full list of repositories can be found [here](https://github.com/kubernetes/). -Each repository in the Kubernetes organization has beginner-friendly issues that provide a good first issue. For example, [kubernetes/kubernetes](https://git.k8s.io/kubernetes) has [help wanted issues](https://go.k8s.io/help-wanted) that should not need deep knowledge of the system. -Another good strategy is to find a documentation improvement, such as a missing/broken link, which will give you exposure to the code submission/review process without the added complication of technical depth. Please see [Contributing](#contributing) below for the workflow. - -### Learn about SIGs - -#### Sig structure - -You may have noticed that some repositories in the Kubernetes Organization are owned by Special Interest Groups, or SIGs. We organize the Kubernetes community into SIGs in order to improve our workflow and more easily manage what is a very large community project. The developers within each SIG have autonomy and ownership over that SIG's part of Kubernetes. - -Some SIGs also have their own `CONTRIBUTING.md` files, which may contain extra information or guidelines in addition to these general ones. These are located in the SIG-specific community directories. For example: the contributor's guide for SIG CLI is located in the *kubernetes/community* repo, as [`/sig-cli/CONTRIBUTING.md`](https://github.com/kubernetes/community/tree/master/sig-cli/CONTRIBUTING.md). - -Like everything else in Kubernetes, a SIG is an open, community, effort. Anybody is welcome to jump into a SIG and begin fixing issues, critiquing design proposals and reviewing code. SIGs have regular [video meetings](https://kubernetes.io/community/) which everyone is welcome to. Each SIG has a kubernetes slack channel that you can join as well. - -There is an entire SIG ([sig-contributor-experience](https://github.com/kubernetes/community/tree/master/sig-contributor-experience/README.md)) devoted to improving your experience as a contributor. -Contributing to Kubernetes should be easy. If you find a rough edge, let us know! Better yet, help us fix it by joining the SIG; just -show up to one of the [bi-weekly meetings](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/edit). - -#### Find a SIG that is related to your contribution - -Finding the appropriate SIG for your contribution and adding a SIG label will help you ask questions in the correct place and give your contribution higher visibility and a faster community response. - -For Pull Requests, the automatically assigned reviewer will add a SIG label if you haven't done so. See [Open A Pull Request](#open-a-pull-request) below. - -For Issues, we are still working on a more automated workflow. Since SIGs do not directly map onto Kubernetes subrepositories, it may be difficult to find which SIG your contribution belongs in. Here is the [list of SIGs](https://github.com/kubernetes/community/tree/master/sig-list.md). Determine which is most likely related to your contribution. - -*Example:* if you are filing a cni issue, you should choose the [Network SIG](http://git.k8s.io/community/sig-network). Add the SIG label in a comment like so: -``` -/sig network -``` - -Follow the link in the SIG name column to reach each SIGs README. Most SIGs will have a set of GitHub Teams with tags that can be mentioned in a comment on issues and pull requests for higher visibility. If you are not sure about the correct SIG for an issue, you can try SIG-contributor-experience [here](https://github.com/kubernetes/community/tree/master/sig-contributor-experience#github-teams), or [ask in Slack](http://slack.k8s.io/). - -### File an Issue - -Not ready to contribute code, but see something that needs work? While the community encourages everyone to contribute code, it is also appreciated when someone reports an issue (aka problem). Issues should be filed under the appropriate Kubernetes subrepository. -Check the [issue triage guide](https://github.com/kubernetes/community/tree/master/contributors/guide/./issue-triage.md) for more information. - -*Example:* a documentation issue should be opened to [kubernetes/website](https://github.com/kubernetes/website/issues). - -Make sure to adhere to the prompted submission guidelines while opening an issue. - -# Contributing - -Kubernetes is open source, but many of the people working on it do so as their day job. In order to avoid forcing people to be "at work" effectively 24/7, we want to establish some semi-formal protocols around development. Hopefully, these rules make things go more smoothly. If you find that this is not the case, please complain loudly. - -As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and holidays. Please do not ever hesitate to ask a question or send a pull request. - -Our community guiding principles on how to create great code as a big group are found [here](https://github.com/kubernetes/community/tree/master/contributors/devel/collab.md). - -Beginner focused information can be found below in [Open a Pull Request](#open-a-pull-request) and [Code Review](#code-review). - -For quick reference on contributor resources, we have a handy [contributor cheatsheet](https://github.com/kubernetes/community/tree/master/contributors/guide/./contributor-cheatsheet.md) - -### Communication - -It is best to contact your [SIG](#learn-about-sigs) for issues related to the SIG's topic. Your SIG will be able to help you much more quickly than a general question would. - -For general questions and troubleshooting, use the [kubernetes standard lines of communication](https://github.com/kubernetes/community/tree/master/communication.md) and work through the [kubernetes troubleshooting guide](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/). - -## GitHub workflow - -To check out code to work on, please refer to [this guide](https://github.com/kubernetes/community/tree/master/contributors/guide/./github-workflow.md). - -## Open a Pull Request - -Pull requests are often called simply "PR". Kubernetes generally follows the standard [github pull request](https://help.github.com/articles/about-pull-requests/) process, but there is a layer of additional kubernetes specific (and sometimes SIG specific) differences: - -- [Kubernetes-specific github workflow](https://github.com/kubernetes/community/tree/master/contributors/guide/pull-requests.md#the-testing-and-merge-workflow). - -The first difference you'll see is that a bot will begin applying structured labels to your PR. - -The bot may also make some helpful suggestions for commands to run in your PR to facilitate review. These `/command` options can be entered in comments to trigger auto-labeling and notifications. The command reference is [here](https://go.k8s.io/bot-commands). - -Common new contributor PR issues are: - -* not having correctly signed the CLA ahead of your first PR (see [Sign the CLA](#sign-the-cla) section) -* finding the right SIG or reviewer(s) for the PR (see [Code Review](#code-review) section) and following any SIG specific contributing guidelines -* dealing with test cases which fail on your PR, unrelated to the changes you introduce (see [Test Flakes](http://velodrome.k8s.io/dashboard/db/bigquery-metrics?orgId=1)) -* Not following [scalability good practices](https://github.com/kubernetes/community/tree/master/contributors/guide/scalability-good-practices.md) - -## Code Review - -For a brief description of the importance of code review, please read [On Code Review](https://github.com/kubernetes/community/tree/master/contributors/guide/community-expectations.md#code-review). There are two aspects of code review: giving and receiving. - -To make it easier for your PR to receive reviews, consider the reviewers will need you to: - -* follow the project [coding conventions](https://github.com/kubernetes/community/tree/master/contributors/guide/coding-conventions.md) -* write [good commit messages](https://chris.beams.io/posts/git-commit/) -* break large changes into a logical series of smaller patches which individually make easily understandable changes, and in aggregate solve a broader issue -* label PRs with appropriate SIGs and reviewers: to do this read the messages the bot sends you to guide you through the PR process - -Reviewers, the people giving the review, are highly encouraged to revisit the [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) and must go above and beyond to promote a collaborative, respectful Kubernetes community. When reviewing PRs from others [The Gentle Art of Patch Review](http://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) suggests an iterative series of focuses which is designed to lead new contributors to positive collaboration without inundating them initially with nuances: - -* Is the idea behind the contribution sound? -* Is the contribution architected correctly? -* Is the contribution polished? - -## Testing - -Testing is the responsibility of all contributors and is in part owned by all sigs, but is also coordinated by [sig-testing](https://github.com/kubernetes/community/tree/master/sig-testing). - -The main testing overview document is [here](https://github.com/kubernetes/community/tree/master/contributors/devel/testing.md). - -There are three types of test in kubernetes. The location of the test code varies with type, as does the specifics of the environment needed to successfully run the test: - -* Unit: These confirm that a particular function behaves as intended. Golang includes a native ability for unit testing via the [testing](https://golang.org/pkg/testing/) package. Unit test source code can be found adjacent to the corresponding source code within a given package. For example: functions defined in [kubernetes/cmd/kubeadm/app/util/version.go](https://git.k8s.io/kubernetes/cmd/kubeadm/app/util/version.go) will have unit tests in [kubernetes/cmd/kubeadm/app/util/version_test.go](https://git.k8s.io/kubernetes/cmd/kubeadm/app/util/version_test.go). These are easily run locally by any developer on any OS. -* Integration: These tests cover interactions of package components or interactions between kubernetes components and some other non-kubernetes system resource (eg: etcd). An example would be testing whether a piece of code can correctly store data to or retrieve data from etcd. Integration tests are stored in [kubernetes/test/integration/](https://git.k8s.io/kubernetes/test/integration). Running these can require the developer set up additional functionality on their development system. -* End-to-end ("e2e"): These are broad tests of overall kubernetes system behavior and coherence. These are more complicated as they require a functional kubernetes cluster built from the sources to be tested. A separate document [here](https://github.com/kubernetes/community/tree/master/contributors/devel/e2e-tests.md) details e2e testing and test cases themselves can be found in [kubernetes/test/e2e/](https://git.k8s.io/kubernetes/test/e2e). - -Continuous integration will run these tests either as pre-submits on PRs, post-submits against master/release branches, or both. The results appear on [testgrid](https://testgrid.k8s.io). - -sig-testing is responsible for that official infrastructure and CI. The associated automation is tracked in the [test-infra repo](https://git.k8s.io/test-infra). If you're looking to run e2e tests on your own infrastructure, [kubetest](https://git.k8s.io/test-infra/kubetest) is the mechanism. - -## Security - - -* Please help write this section. - -## Documentation - -- [Contributing to Documentation](https://kubernetes.io/editdocs/) - -## Issues Management or Triage - -Have you ever noticed the total number of [open issues](https://issues.k8s.io)? This number at any given time is typically high. Helping to manage or triage these open issues can be a great contribution to the Kubernetes project. This is also a great opportunity to learn about the various areas of the project. Refer to the [Kubernetes Issue Triage Guidelines](https://github.com/kubernetes/community/tree/master/contributors/devel/issues.md) for more information. - -# Community - -If you haven't noticed by now, we have a large, lively, and friendly open-source community. We depend on new people becoming members and regular code contributors, so we would like you to come join us. To find out more about our community structure, different levels of membership and code contributors, please [explore here](https://github.com/kubernetes/community/tree/master/community-membership.md). - -## Communication - -- [General Information](https://github.com/kubernetes/community/tree/master/communication) - -## Events - -Kubernetes is the main focus of CloudNativeCon/KubeCon, held twice per year in EMEA and in North America. Information about these and other community events is available on the CNCF [events](https://www.cncf.io/events/) pages. - -### Meetups - -We follow the general [Cloud Native Computing Foundation guidelines](https://github.com/cncf/meetups) for Meetups. You may also contact Paris Pittman via direct message on Kubernetes Slack (@paris) or by email (parispittman@google.com) - -## Mentorship - -Please learn about our mentoring initiatives [here](http://git.k8s.io/community/mentoring/README.md). - -# Advanced Topics - -This section includes things that need to be documented, but typical contributors do not need to interact with regularly. - -- [OWNERS files](https://github.com/kubernetes/community/tree/master/contributors/guide/owners.md) - The Kubernetes organizations are managed with OWNERS files, which outline which parts of the code are owned by what groups. -EMEA and in North America. Information about these and other community events is available on the CNCF [events](https://www.cncf.io/events/) pages. - -### Meetups - -_Improvements needed_ -* include link to meetups -* information on CNCF support for founding a Meetup - -### KubeCon - -_Improvements needed_ -* write friendly blurb about KubeCon, and include links - -## Mentorship - -_Improvements needed_ -* Link and mini description for Kubernetes Pilots should go here. diff --git a/content/en/docs/community/keps.md b/content/en/docs/community/keps.md deleted file mode 100644 index 2c277645d3..0000000000 --- a/content/en/docs/community/keps.md +++ /dev/null @@ -1,419 +0,0 @@ ---- -title: Kubernetes Enhancement Proposal Process ---- ---- -kep-number: 1 -title: Kubernetes Enhancement Proposal Process -authors: - - "@calebamiles" - - "@jbeda" -owning-sig: sig-architecture -participating-sigs: - - kubernetes-wide -reviewers: - - name: "@timothysc" -approvers: - - name: "@bgrant0607" -editor: - name: "@jbeda" -creation-date: 2017-08-22 -status: implementable ---- - -# Kubernetes Enhancement Proposal Process - -## Table of Contents - -* [Kubernetes Enhancement Proposal Process](#kubernetes-enhancement-proposal-process) - * [Metadata](#metadata) - * [Table of Contents](#table-of-contents) - * [Summary](#summary) - * [Motivation](#motivation) - * [Reference-level explanation](#reference-level-explanation) - * [What type of work should be tracked by a KEP](#what-type-of-work-should-be-tracked-by-a-kep) - * [KEP Template](#kep-template) - * [KEP Metadata](#kep-metadata) - * [KEP Workflow](#kep-workflow) - * [Git and GitHub Implementation](#git-and-github-implementation) - * [KEP Editor Role](#kep-editor-role) - * [Important Metrics](#important-metrics) - * [Prior Art](#prior-art) - * [Graduation Criteria](#graduation-criteria) - * [Drawbacks](#drawbacks) - * [Alternatives](#alternatives) - * [Unresolved Questions](#unresolved-questions) - * [Mentors](#mentors) - -## Summary - -A standardized development process for Kubernetes is proposed in order to - -- provide a common structure for proposing changes to Kubernetes -- ensure that the motivation for a change is clear -- allow for the enumeration stability milestones and stability graduation - criteria -- persist project information in a Version Control System (VCS) for future - Kubernauts -- support the creation of _high value user facing_ information such as: - - an overall project development roadmap - - motivation for impactful user facing changes -- reserve GitHub issues for tracking work in flight rather than creating "umbrella" - issues -- ensure community participants are successfully able to drive changes to - completion across one or more releases while stakeholders are adequately - represented throughout the process - -This process is supported by a unit of work called a Kubernetes Enhancement Proposal or KEP. -A KEP attempts to combine aspects of a - -- feature, and effort tracking document -- a product requirements document -- design document - -into one file which is created incrementally in collaboration with one or more -Special Interest Groups (SIGs). - -## Motivation - -For cross project SIGs such as SIG PM and SIG Release an abstraction beyond a -single GitHub Issue or Pull request seems to be required in order to understand -and communicate upcoming changes to Kubernetes. In a blog post describing the -[road to Go 2][], Russ Cox explains - -> that it is difficult but essential to describe the significance of a problem -> in a way that someone working in a different environment can understand - -as a project it is vital to be able to track the chain of custody for a proposed -enhancement from conception through implementation. - -Without a standardized mechanism for describing important enhancements our -talented technical writers and product managers struggle to weave a coherent -narrative explaining why a particular release is important. Additionally for -critical infrastructure such as Kubernetes adopters need a forward looking road -map in order to plan their adoption strategy. - -The purpose of the KEP process is to reduce the amount of "tribal knowledge" in -our community. By moving decisions from a smattering of mailing lists, video -calls and hallway conversations into a well tracked artifact this process aims -to enhance communication and discoverability. - -A KEP is broken into sections which can be merged into source control -incrementally in order to support an iterative development process. An important -goal of the KEP process is ensuring that the process for submitting the content -contained in [design proposals][] is both clear and efficient. The KEP process -is intended to create high quality uniform design and implementation documents -for SIGs to deliberate. - -[road to Go 2]: https://blog.golang.org/toward-go2 -[design proposals]: /contributors/design-proposals - - -## Reference-level explanation - -### What type of work should be tracked by a KEP - -The definition of what constitutes an "enhancement" is a foundational concern -for the Kubernetes project. Roughly any Kubernetes user or operator facing -enhancement should follow the KEP process: if an enhancement would be described -in either written or verbal communication to anyone besides the KEP author or -developer then consider creating a KEP. - -Similarly, any technical effort (refactoring, major architectural change) that -will impact a large section of the development community should also be -communicated widely. The KEP process is suited for this even if it will have -zero impact on the typical user or operator. - -As the local bodies of governance, SIGs should have broad latitude in describing -what constitutes an enhancement which should be tracked through the KEP process. -SIGs may find that helpful to enumerate what _does not_ require a KEP rather -than what does. SIGs also have the freedom to customize the KEP template -according to their SIG specific concerns. For example the KEP template used to -track API changes will likely have different subsections than the template for -proposing governance changes. However, as changes start impacting other SIGs or -the larger developer community outside of a SIG, the KEP process should be used -to coordinate and communicate. - -Enhancements that have major impacts on multiple SIGs should use the KEP process. -A single SIG will own the KEP but it is expected that the set of approvers will span the impacted SIGs. -The KEP process is the way that SIGs can negotiate and communicate changes that cross boundaries. - -KEPs will also be used to drive large changes that will cut across all parts of the project. -These KEPs will be owned by SIG-architecture and should be seen as a way to communicate the most fundamental aspects of what Kubernetes is. - -### KEP Template - -The template for a KEP is precisely defined [here](https://github.com/kubernetes/community/tree/master/keps/0000-kep-template.md) - -### KEP Metadata - -There is a place in each KEP for a YAML document that has standard metadata. -This will be used to support tooling around filtering and display. It is also -critical to clearly communicate the status of a KEP. - -Metadata items: -* **kep-number** Required - * Each proposal has a number. This is to make all references to proposals as - clear as possible. This is especially important as we create a network - cross references between proposals. - * Before having the `Approved` status, the number for the KEP will be in the - form of `draft-YYYYMMDD`. The `YYYYMMDD` is replaced with the current date - when first creating the KEP. The goal is to enable fast parallel merges of - pre-acceptance KEPs. - * On acceptance a sequential dense number will be assigned. This will be done - by the editor and will be done in such a way as to minimize the chances of - conflicts. The final number for a KEP will have no prefix. -* **title** Required - * The title of the KEP in plain language. The title will also be used in the - KEP filename. See the template for instructions and details. -* **status** Required - * The current state of the KEP. - * Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejected`, `withdrawn`, or `replaced`. -* **authors** Required - * A list of authors for the KEP. - This is simply the github ID. - In the future we may enhance this to include other types of identification. -* **owning-sig** Required - * The SIG that is most closely associated with this KEP. If there is code or - other artifacts that will result from this KEP, then it is expected that - this SIG will take responsibility for the bulk of those artifacts. - * Sigs are listed as `sig-abc-def` where the name matches up with the - directory in the `kubernetes/community` repo. -* **participating-sigs** Optional - * A list of SIGs that are involved or impacted by this KEP. - * A special value of `kubernetes-wide` will indicate that this KEP has impact - across the entire project. -* **reviewers** Required - * Reviewer(s) chosen after triage according to proposal process - * If not yet chosen replace with `TBD` - * Same name/contact scheme as `authors` - * Reviewers should be a distinct set from authors. -* **approvers** Required - * Approver(s) chosen after triage according to proposal process - * Approver(s) are drawn from the impacted SIGs. - It is up to the individual SIGs to determine how they pick approvers for KEPs impacting them. - The approvers are speaking for the SIG in the process of approving this KEP. - The SIGs in question can modify this list as necessary. - * The approvers are the individuals that make the call to move this KEP to the `approved` state. - * Approvers should be a distinct set from authors. - * If not yet chosen replace with `TBD` - * Same name/contact scheme as `authors` -* **editor** Required - * Someone to keep things moving forward. - * If not yet chosen replace with `TBD` - * Same name/contact scheme as `authors` -* **creation-date** Required - * The date that the KEP was first submitted in a PR. - * In the form `yyyy-mm-dd` - * While this info will also be in source control, it is helpful to have the set of KEP files stand on their own. -* **last-updated** Optional - * The date that the KEP was last changed significantly. - * In the form `yyyy-mm-dd` -* **see-also** Optional - * A list of other KEPs that are relevant to this KEP. - * In the form `KEP-123` -* **replaces** Optional - * A list of KEPs that this KEP replaces. Those KEPs should list this KEP in - their `superseded-by`. - * In the form `KEP-123` -* **superseded-by** - * A list of KEPs that supersede this KEP. Use of this should be paired with - this KEP moving into the `Replaced` status. - * In the form `KEP-123` - - -### KEP Workflow - -A KEP has the following states - -- `provisional`: The KEP has been proposed and is actively being defined. - This is the starting state while the KEP is being fleshed out and actively defined and discussed. - The owning SIG has accepted that this is work that needs to be done. -- `implementable`: The approvers have approved this KEP for implementation. -- `implemented`: The KEP has been implemented and is no longer actively changed. -- `deferred`: The KEP is proposed but not actively being worked on. -- `rejected`: The approvers and authors have decided that this KEP is not moving forward. - The KEP is kept around as a historical document. -- `withdrawn`: The KEP has been withdrawn by the authors. -- `replaced`: The KEP has been replaced by a new KEP. - The `superseded-by` metadata value should point to the new KEP. - -### Git and GitHub Implementation - -KEPs are checked into the community repo under the `/kep` directory. -In the future, as needed we can add SIG specific subdirectories. -KEPs in SIG specific subdirectories have limited impact outside of the SIG and can leverage SIG specific OWNERS files. - -New KEPs can be checked in with a file name in the form of `draft-YYYYMMDD-my-title.md`. -As significant work is done on the KEP the authors can assign a KEP number. -This is done by taking the next number in the NEXT_KEP_NUMBER file, incrementing that number, and renaming the KEP. -No other changes should be put in that PR so that it can be approved quickly and minimize merge conflicts. -The KEP number can also be done as part of the initial submission if the PR is likely to be uncontested and merged quickly. - -### KEP Editor Role - -Taking a cue from the [Python PEP process][], we define the role of a KEP editor. -The job of an KEP editor is likely very similar to the [PEP editor responsibilities][] and will hopefully provide another opportunity for people who do not write code daily to contribute to Kubernetes. - -In keeping with the PEP editors which - -> Read the PEP to check if it is ready: sound and complete. The ideas must make -> technical sense, even if they don't seem likely to be accepted. -> The title should accurately describe the content. -> Edit the PEP for language (spelling, grammar, sentence structure, etc.), markup -> (for reST PEPs), code style (examples should match PEP 8 & 7). - -KEP editors should generally not pass judgement on a KEP beyond editorial corrections. -KEP editors can also help inform authors about the process and otherwise help things move smoothly. - -[Python PEP process]: https://www.python.org/dev/peps/pep-0001/ -[PEP editor responsibilities]: https://www.python.org/dev/peps/pep-0001/#pep-editor-responsibilities-workflow - -### Important Metrics - -It is proposed that the primary metrics which would signal the success or -failure of the KEP process are - -- how many "enhancements" are tracked with a KEP -- distribution of time a KEP spends in each state -- KEP rejection rate -- PRs referencing a KEP merged per week -- number of issued open which reference a KEP -- number of contributors who authored a KEP -- number of contributors who authored a KEP for the first time -- number of orphaned KEPs -- number of retired KEPs -- number of superseded KEPs - -### Prior Art - -The KEP process as proposed was essentially stolen from the [Rust RFC process][] which -itself seems to be very similar to the [Python PEP process][] - -[Rust RFC process]: https://github.com/rust-lang/rfcs - -## Drawbacks - -Any additional process has the potential to engender resentment within the -community. There is also a risk that the KEP process as designed will not -sufficiently address the scaling challenges we face today. PR review bandwidth is -already at a premium and we may find that the KEP process introduces an unreasonable -bottleneck on our development velocity. - -It certainly can be argued that the lack of a dedicated issue/defect tracker -beyond GitHub issues contributes to our challenges in managing a project as large -as Kubernetes, however, given that other large organizations, including GitHub -itself, make effective use of GitHub issues perhaps the argument is overblown. - -The centrality of Git and GitHub within the KEP process also may place too high -a barrier to potential contributors, however, given that both Git and GitHub are -required to contribute code changes to Kubernetes today perhaps it would be reasonable -to invest in providing support to those unfamiliar with this tooling. - -Expanding the proposal template beyond the single sentence description currently -required in the [features issue template][] may be a heavy burden for non native -English speakers and here the role of the KEP editor combined with kindness and -empathy will be crucial to making the process successful. - -[features issue template]: https://git.k8s.io/features/ISSUE_TEMPLATE.md - -## Alternatives - -This KEP process is related to -- the generation of a [architectural roadmap][] -- the fact that the [what constitutes a feature][] is still undefined -- [issue management][] -- the difference between an [accepted design and a proposal][] -- [the organization of design proposals][] - -this proposal attempts to place these concerns within a general framework. - -[architectural roadmap]: https://github.com/kubernetes/community/issues/952 -[what constitutes a feature]: https://github.com/kubernetes/community/issues/531 -[issue management]: https://github.com/kubernetes/community/issues/580 -[accepted design and a proposal]: https://github.com/kubernetes/community/issues/914 -[the organization of design proposals]: https://github.com/kubernetes/community/issues/918 - -### Github issues vs. KEPs - -The use of GitHub issues when proposing changes does not provide SIGs good -facilities for signaling approval or rejection of a proposed change to Kubernetes -since anyone can open a GitHub issue at any time. Additionally managing a proposed -change across multiple releases is somewhat cumbersome as labels and milestones -need to be updated for every release that a change spans. These long lived GitHub -issues lead to an ever increasing number of issues open against -`kubernetes/features` which itself has become a management problem. - -In addition to the challenge of managing issues over time, searching for text -within an issue can be challenging. The flat hierarchy of issues can also make -navigation and categorization tricky. While not all community members might -not be comfortable using Git directly, it is imperative that as a community we -work to educate people on a standard set of tools so they can take their -experience to other projects they may decide to work on in the future. While -git is a fantastic version control system (VCS), it is not a project management -tool nor a cogent way of managing an architectural catalog or backlog; this -proposal is limited to motivating the creation of a standardized definition of -work in order to facilitate project management. This primitive for describing -a unit of work may also allow contributors to create their own personalized -view of the state of the project while relying on Git and GitHub for consistency -and durable storage. - -## Unresolved Questions - -- How reviewers and approvers are assigned to a KEP -- Example schedule, deadline, and time frame for each stage of a KEP -- Communication/notification mechanisms -- Review meetings and escalation procedure - roadmap][] -- the fact that the [what constitutes a feature][] is still undefined -- [issue management][] -- the difference between an [accepted design and a proposal][] -- [the organization of design proposals][] - -this proposal attempts to place these concerns within a general framework. - -[architectural roadmap]: https://github.com/kubernetes/community/issues/952 -[what constitutes a feature]: https://github.com/kubernetes/community/issues/531 -[issue management]: https://github.com/kubernetes/community/issues/580 -[accepted design and a proposal]: https://github.com/kubernetes/community/issues/914 -[the organization of design proposals]: https://github.com/kubernetes/community/issues/918 - -### Github issues vs. KEPs - -The use of GitHub issues when proposing changes does not provide SIGs good -facilities for signaling approval or rejection of a proposed change to Kubernetes -since anyone can open a GitHub issue at any time. Additionally managing a proposed -change across multiple releases is somewhat cumbersome as labels and milestones -need to be updated for every release that a change spans. These long lived GitHub -issues lead to an ever increasing number of issues open against -`kubernetes/features` which itself has become a management problem. - -In addition to the challenge of managing issues over time, searching for text -within an issue can be challenging. The flat hierarchy of issues can also make -navigation and categorization tricky. While not all community members might -not be comfortable using Git directly, it is imperative that as a community we -work to educate people on a standard set of tools so they can take their -experience to other projects they may decide to work on in the future. While -git is a fantastic version control system (VCS), it is not a project management -tool nor a cogent way of managing an architectural catalog or backlog; this -proposal is limited to motivating the creation of a standardized definition of -work in order to facilitate project management. This primitive for describing -a unit of work may also allow contributors to create their own personalized -view of the state of the project while relying on Git and GitHub for consistency -and durable storage. - -## Unresolved Questions - -- How reviewers and approvers are assigned to a KEP -- Approval decision process for a KEP -- Example schedule, deadline, and time frame for each stage of a KEP -- Communication/notification mechanisms -- Review meetings and escalation procedure -- Decision on where development should occur - -## Mentors - -- caleb miles - - github: [calebamiles](https://github.com/calebamiles/) - - slack: [calebamiles](https://coreos.slack.com/team/caleb.miles) - - email: [caleb.miles@coreos.com](mailto:caleb.miles@coreos.com) - - pronoun: "he" diff --git a/content/en/docs/community/mentoring.md b/content/en/docs/community/mentoring.md deleted file mode 100644 index a156146db4..0000000000 --- a/content/en/docs/community/mentoring.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Kubernetes Mentoring Initiatives -notitle: true ---- - -# Kubernetes Mentoring Initiatives - -This folder will be used for all mentoring initiatives for Kubernetes. - ---- -## Kubernetes Pilots - -We understand that everyone has different learning styles and we want to support as many of those as possible. Mentoring is vital to the growth of an individual and organization of every kind. For Kubernetes, the larger the project becomes, it's necessary to keep a continuous pipeline of quality contributors. - -*What's a Pilot?* -A pilot is a Kubernetes mentor helping new and current members navigate the seas of our repos. - -## Current mentoring activities: -All are currently in an incubation phase. Please reach out to Paris Pittman (parispittman@google.com or Paris on Kubernetes slack channel) for more information on how to get involved. - -Mentors On Demand -* [Meet Our Contributors](https://github.com/kubernetes/community/tree/master/mentoring/meet-our-contributors.md) - -Long Term Contributor Ladder Growth -* [Group Mentoring Cohorts](https://github.com/kubernetes/community/tree/master/mentoring/group-mentoring.md) - -Students -* [Outreachy](https://github.com/kubernetes/community/tree/master/sig-cli/outreachy.md) -* [Google Summer of Code](https://github.com/kubernetes/community/tree/master/mentoring/google-summer-of-code.md) - -#### Inspiration and Thanks -This is not an out of the box program but was largely inspired by the following: -* [Ada Developer Academy](https://adadevelopersacademy.org/) -* [Apache Mentoring Programme](https://community.apache.org/mentoringprogramme.html) -* [exercism.io](https://github.com/OperationCode/exercism-io-mentoring) -* [Google Summer of Code](https://developers.google.com/open-source/gsoc/) -* [Outreachy](https://www.outreachy.org/) -* [OpenStack Mentoring](https://wiki.openstack.org/wiki/Mentoring) - -Thanks to: -* the many contributors who reviewed and participated in brainstorming, -* founding mentees for their willingness to try this out, -* founding Pilots (@chrislovecnm, @luxas, @kow3ns) - -We welcome PRs, suggestions, and help! - try this out, -* founding Pilots (@chrislovecnm, @luxas, @kow3ns) - -We welcome PRs, suggestions, and help! From cd5393ce91a89c1538321ac0e7806d3c9993412e Mon Sep 17 00:00:00 2001 From: Gianpaolo Macario Date: Tue, 9 Oct 2018 10:13:52 +0200 Subject: [PATCH 107/181] networking.md: Markdown fix (#10498) --- content/en/docs/concepts/cluster-administration/networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/cluster-administration/networking.md b/content/en/docs/concepts/cluster-administration/networking.md index 5368ed2f1a..924b72fd76 100644 --- a/content/en/docs/concepts/cluster-administration/networking.md +++ b/content/en/docs/concepts/cluster-administration/networking.md @@ -277,7 +277,7 @@ Weave Net runs as a [CNI plug-in](https://www.weave.works/docs/net/latest/cni-pl or stand-alone. In either version, it doesn't require any configuration or extra code to run, and in both cases, the network provides one IP address per pod - as is standard for Kubernetes. -###Jaguar +### Jaguar [Jaguar](https://gitlab.com/sdnlab/jaguar) is an open source solution for Kubernetes's network based on OpenDaylight. Jaguar provides overlay network using vxlan and Jaguar CNIPlugin provides one IP address per pod. From 9c8a1883858774a3533a12caa33d774e91d99751 Mon Sep 17 00:00:00 2001 From: Karen Bradshaw Date: Tue, 9 Oct 2018 04:15:13 -0400 Subject: [PATCH 108/181] Fix front matter, federation command-line tools (#10500) --- .../command-line-tools-reference/federation-apiserver.md | 5 +++++ .../federation-controller-manager.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md b/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md index 09a672d78e..9a3e7137b2 100644 --- a/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md +++ b/content/en/docs/reference/command-line-tools-reference/federation-apiserver.md @@ -1,3 +1,8 @@ +--- +title: federation-apiserver +notitle: true +--- + ## federation-apiserver diff --git a/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md b/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md index a6527d97f6..e7d0460e55 100644 --- a/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md +++ b/content/en/docs/reference/command-line-tools-reference/federation-controller-manager.md @@ -1,3 +1,8 @@ +--- +title: federation-controller-manager +notitle: true +--- + ## federation-controller-manager From 60a2be00f21d41f1d37e54ad139d142b1dcd5a1e Mon Sep 17 00:00:00 2001 From: Karen Bradshaw Date: Tue, 9 Oct 2018 04:39:27 -0400 Subject: [PATCH 109/181] Clean up glossary entry (#10399) --- .../docs/reference/glossary/container-env-variables.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/content/en/docs/reference/glossary/container-env-variables.md b/content/en/docs/reference/glossary/container-env-variables.md index 1fe95d0973..b0eda8ab80 100755 --- a/content/en/docs/reference/glossary/container-env-variables.md +++ b/content/en/docs/reference/glossary/container-env-variables.md @@ -4,15 +4,14 @@ id: container-env-variables date: 2018-04-12 full_link: /docs/concepts/containers/container-environment-variables.md short_description: > - Container environment variables are name/value pairs that provide useful information into containers running in a Pod. + Container environment variables are name=value pairs that provide useful information into containers running in a Pod. aka: tags: - fundamental --- - Container environment variables are name/value pairs that provide useful information into containers running in a Pod. + Container environment variables are name=value pairs that provide useful information into containers running in a Pod. - - -Container environment variables provide information that is required by the running containerized applications along with information about important resources to the [Containers] {{< glossary_tooltip text="Containers" term_id="container" >}}. For example, file system, information about the container itself and other cluster resources such as service endpoints, etc. + +Container environment variables provide information that is required by the running containerized applications along with information about important resources to the {{< glossary_tooltip text="Containers" term_id="container" >}}. For example, file system details, information about the container itself, and other cluster resources such as service endpoints. \ No newline at end of file From 0d3104940a3e7fc8b3795828456ea58bea419036 Mon Sep 17 00:00:00 2001 From: 123tap Date: Tue, 9 Oct 2018 02:40:12 -0700 Subject: [PATCH 110/181] update slack link (#10536) --- content/en/blog/_posts/2018-10-03-kubedirector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2018-10-03-kubedirector.md b/content/en/blog/_posts/2018-10-03-kubedirector.md index 4fa8909cb0..105440ae04 100644 --- a/content/en/blog/_posts/2018-10-03-kubedirector.md +++ b/content/en/blog/_posts/2018-10-03-kubedirector.md @@ -187,5 +187,5 @@ KubeDirector is a fully open source, Apache v2 licensed, project – the first o The pre-alpha code for KubeDirector has just been released and we would love for you to join the growing community of developers, contributors, and adopters. Follow [@BlueK8s](https://twitter.com/BlueK8s/) on Twitter and get involved through these channels: -* KubeDirector [chat room on Slack](https://bluek8s.slack.com/messages/DBRGSB59T//) +* KubeDirector [chat room on Slack](https://join.slack.com/t/bluek8s/shared_invite/enQtNDUwMzkwODY5OTM4LTRhYmRmZmE4YzY3OGUzMjA1NDg0MDVhNDQ2MGNkYjRhM2RlMDNjMTI1NDQyMjAzZGVlMDFkNThkNGFjZGZjMGY/) * KubeDirector [GitHub repo](https://github.com/bluek8s/kubedirector/) From 8f6c9e6f8115e159ed3b78f0eabdd960fdb3796d Mon Sep 17 00:00:00 2001 From: Patrick Nordahl Date: Tue, 9 Oct 2018 06:40:44 -0500 Subject: [PATCH 111/181] typo in StatefulSet docs (#10558) --- content/en/docs/concepts/workloads/controllers/statefulset.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/workloads/controllers/statefulset.md b/content/en/docs/concepts/workloads/controllers/statefulset.md index de07bba449..480988cb09 100644 --- a/content/en/docs/concepts/workloads/controllers/statefulset.md +++ b/content/en/docs/concepts/workloads/controllers/statefulset.md @@ -47,7 +47,7 @@ provides a set of stateless replicas. Controllers such as * The storage for a given Pod must either be provisioned by a [PersistentVolume Provisioner](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/README.md) based on the requested `storage class`, or pre-provisioned by an admin. * Deleting and/or scaling a StatefulSet down will *not* delete the volumes associated with the StatefulSet. This is done to ensure data safety, which is generally more valuable than an automatic purge of all related StatefulSet resources. * StatefulSets currently require a [Headless Service](/docs/concepts/services-networking/service/#headless-services) to be responsible for the network identity of the Pods. You are responsible for creating this Service. -* StatefulSets do not provide any guarantees on the termination of pods when a StatfulSet is deleted. To achieve ordered and graceful termination of the pods in the StatefulSet, it is possible to scale the StatefulSet down to 0 prior to deletion. +* StatefulSets do not provide any guarantees on the termination of pods when a StatefulSet is deleted. To achieve ordered and graceful termination of the pods in the StatefulSet, it is possible to scale the StatefulSet down to 0 prior to deletion. ## Components The example below demonstrates the components of a StatefulSet. From cf73622b61f7c0ade2439361b3402713223ade16 Mon Sep 17 00:00:00 2001 From: CaoShuFeng Date: Tue, 9 Oct 2018 19:42:09 +0800 Subject: [PATCH 112/181] fix discription about horizontal pod autoscale (#10557) --- .../docs/tasks/run-application/horizontal-pod-autoscale.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md index 8e6d0db00a..d2cc4003db 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md @@ -122,7 +122,7 @@ became ready, that pod is set aside as well. Due to technical constraints, the HorizontalPodAutoscaler controller cannot exactly determine the first time a pod becomes ready when -determinining whether to set aside certain CPU metrics. Instead, it +determining whether to set aside certain CPU metrics. Instead, it considers a Pod "not yet ready" if it's unready and transitioned to unready within a short, configurable window of time since it started. This value is configured with the `--horizontal-pod-autoscaler-initial-readiness-delay` flag, and its default is 30 @@ -139,7 +139,7 @@ conservatively, assuming those pods were consuming 100% of the desired value in case of a scale down, and 0% in case of a scale up. This dampens the magnitude of any potential scale. -Futhermore, if any not-yet-ready pods were present, and we would have +Furthermore, if any not-yet-ready pods were present, and we would have scaled up without factoring in missing metrics or not-yet-ready pods, we conservatively assume the non-yet-ready pods are consuming 0% of the desired metric, further dampening the magnitude of a scale up. @@ -161,7 +161,7 @@ into a desired replica count (e.g. due to an error fetching the metrics from the metrics APIs), scaling is skipped. Finally, just before HPA scales the target, the scale reccomendation is recorded. The -controller considers all reccomendations within a configurable window choosing the +controller considers all recommendations within a configurable window choosing the highest recommendation from within that window. This value can be configured using the `--horizontal-pod-autoscaler-downscale-stabilization-window` flag, which defaults to 5 minutes. This means that scaledowns will occur gradually, smothing out the impact of rapidly fluctuating metric values. From 1f8d278456d24fd4eea602a41c3c2d3f9beb3385 Mon Sep 17 00:00:00 2001 From: LiuDui <40875627+xichengliudui@users.noreply.github.com> Date: Tue, 9 Oct 2018 19:48:45 +0800 Subject: [PATCH 113/181] Remove redundant symbols (#10556) --- static/css/blog.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/css/blog.css b/static/css/blog.css index 1c824d19cd..4f906fd81c 100644 --- a/static/css/blog.css +++ b/static/css/blog.css @@ -179,7 +179,7 @@ div.header-try a { div.widget > h2, div.widget h2.title { margin: 0 0 1em 0; - font: normal bold 11px 'Roboto',,sans-serif; + font: normal bold 11px 'Roboto',sans-serif; color: #000000; } From 83fc9324e1b080b2491a06a5efc3c9e8b933c2a4 Mon Sep 17 00:00:00 2001 From: William Zhang Date: Tue, 9 Oct 2018 19:50:06 +0800 Subject: [PATCH 114/181] Fix issue #10520 (#10554) Signed-off-by: William Zhang --- content/en/docs/tasks/administer-cluster/cluster-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/administer-cluster/cluster-management.md b/content/en/docs/tasks/administer-cluster/cluster-management.md index 8059db0f31..42920e1ec9 100644 --- a/content/en/docs/tasks/administer-cluster/cluster-management.md +++ b/content/en/docs/tasks/administer-cluster/cluster-management.md @@ -214,4 +214,4 @@ You can use `kubectl convert` command to convert config files between different kubectl convert -f pod.yaml --output-version v1 ``` -For more options, please refer to the usage of [kubectl convert](/docs/user-guide/kubectl/{{page.version}}/#convert) command. +For more options, please refer to the usage of [kubectl convert](/docs/reference/generated/kubectl/kubectl-commands#convert) command. From 20dc612859de3d7eb466cd5a82df5efa8769208f Mon Sep 17 00:00:00 2001 From: KevinTHU Date: Tue, 9 Oct 2018 19:51:27 +0800 Subject: [PATCH 115/181] Update api-concepts.md (#10534) --- content/en/docs/reference/using-api/api-concepts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/reference/using-api/api-concepts.md b/content/en/docs/reference/using-api/api-concepts.md index 623e2b9937..1ac0712f47 100644 --- a/content/en/docs/reference/using-api/api-concepts.md +++ b/content/en/docs/reference/using-api/api-concepts.md @@ -164,7 +164,7 @@ For example: 1. List all of the pods on a cluster in the Table format. GET /api/v1/pods - Accept: application/json;as=Table;v=meta.k8s.io;g=v1beta1 + Accept: application/json;as=Table;g=meta.k8s.io;v=v1beta1 --- 200 OK Content-Type: application/json @@ -205,7 +205,7 @@ For API resource types that do not have a custom Table definition on the server, Table responses are available beginning in version 1.10 of the kube-apiserver. As such, not all API resource types will support a Table response, specifically when using a client against older clusters. Clients that must work against all resource types, or can potentially deal with older clusters, should specify multiple content types in their `Accept` header to support fallback to non-Tabular JSON: ``` -Accept: application/json;as=Table;v=meta.k8s.io;g=v1beta1, application/json +Accept: application/json;as=Table;g=meta.k8s.io;v=v1beta1, application/json ``` From 92a99d834b354309c8256168aceaa03c6cf9f7b8 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 116/181] Revert "Update api-concepts.md (#10534)" This reverts commit 20dc612859de3d7eb466cd5a82df5efa8769208f. From 59002df02c53ee9190d5ab3121c1d11d3791e123 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 117/181] Revert "Fix issue #10520 (#10554)" This reverts commit 83fc9324e1b080b2491a06a5efc3c9e8b933c2a4. From d9a58bc5bcae1b23202fb42fae91ce73661805a5 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 118/181] Revert "Remove redundant symbols (#10556)" This reverts commit 1f8d278456d24fd4eea602a41c3c2d3f9beb3385. From 35b43c314a4f21118bddbf8ebfc52209025ed6f9 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 119/181] Revert "fix discription about horizontal pod autoscale (#10557)" This reverts commit cf73622b61f7c0ade2439361b3402713223ade16. From 5fe491dc73bc6b395d4e08cffc28818346f1ef60 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 120/181] Revert "typo in StatefulSet docs (#10558)" This reverts commit 8f6c9e6f8115e159ed3b78f0eabdd960fdb3796d. From 34bc402b4e86cece4e834fe4147b21dc012d3659 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 121/181] Revert "update slack link (#10536)" This reverts commit 0d3104940a3e7fc8b3795828456ea58bea419036. From 5f7553668ffbde2335da42f42635113d649e0800 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 122/181] Revert "Clean up glossary entry (#10399)" This reverts commit 60a2be00f21d41f1d37e54ad139d142b1dcd5a1e. From 4e1ec8f07ccaa60cd2e709025ff4137a29906e8b Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 123/181] Revert "Fix front matter, federation command-line tools (#10500)" This reverts commit 9c8a1883858774a3533a12caa33d774e91d99751. From 2b6f8888040a398dc2661294246b0947b346840f Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 124/181] Revert "networking.md: Markdown fix (#10498)" This reverts commit cd5393ce91a89c1538321ac0e7806d3c9993412e. From aa5cba0b4e8dcb7104928e7c8aff38fea8dffd14 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 125/181] Revert "remove imported community files per issue 10184 (#10501)" This reverts commit 1b7fe798da2710422c9a3b43d9f7de304437c1c9. From 66b5e5c45721877db0594b2e9703cf5de92d135d Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 9 Oct 2018 20:07:16 +0800 Subject: [PATCH 126/181] Revert "Fix command issue (#10515)" This reverts commit c02a7fb9f9d19872d9227814b3e9ffaaa28d85f0. --- .../docs/tasks/administer-cluster/apply-resource-quota-limit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md b/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md index b35804bf7a..3f94a633ad 100644 --- a/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md +++ b/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md @@ -208,7 +208,7 @@ Kubernetes API server 拒绝了 replica set 创建一个 pod 的请求,因为 ```shell $ kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/rq-limits.yaml --namespace=quota-example limitrange "limits" created -$ kubectl describe limits --namespace=quota-example +$ kubectl describe limits limits --namespace=quota-example Name: limits Namespace: quota-example Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio From 27202920f34b6897f5c7fb39676688d3f3727a5b Mon Sep 17 00:00:00 2001 From: erganzi <41982810+erganzi@users.noreply.github.com> Date: Tue, 9 Oct 2018 20:15:31 +0800 Subject: [PATCH 127/181] Update memory-constraint-namespace.md (#10530) update memory request to 100MiB corresponding the yaml content --- .../manage-resources/memory-constraint-namespace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md b/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md index 80480ee00f..aca790e87a 100644 --- a/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md +++ b/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md @@ -146,7 +146,7 @@ pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container i ## Attempt to create a Pod that does not meet the minimum memory request Here's the configuration file for a Pod that has one Container. The Container specifies a -memory request of 200 MiB and a memory limit of 800 MiB. +memory request of 100 MiB and a memory limit of 800 MiB. {{< codenew file="admin/resource/memory-constraints-pod-3.yaml" >}} From 48c6f5445b293fee98c42bf6b10f84efcfd54598 Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Tue, 9 Oct 2018 11:05:19 -0700 Subject: [PATCH 128/181] Blog: Introducing Volume Snapshot Alpha for Kubernetes (#10562) * blog post for azure vmss * snapshot blog post --- .../2018-10-09-volume-snapshot-alpha.md | 292 ++++++++++++++++++ .../snapshot.png | Bin 0 -> 144175 bytes 2 files changed, 292 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md create mode 100644 static/images/blog/2018-10-09-volume-snapshot-alpha/snapshot.png diff --git a/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md b/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md new file mode 100644 index 0000000000..e8d4181ae0 --- /dev/null +++ b/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md @@ -0,0 +1,292 @@ +--- +layout: blog +title: 'Introducing Volume Snapshot Alpha for Kubernetes' +date: 2018-10-09 +--- + +**Author**: Jing Xu (Google) Xing Yang (Huawei), Saad Ali (Google) + +Kubernetes v1.12 introduces alpha support for volume snapshotting. This feature allows creating/deleting volume snapshots, and the ability to create new volumes from a snapshot natively using the Kubernetes API. + +## What is a Snapshot? + +Many storage systems (like Google Cloud Persistent Disks, Amazon Elastic Block Storage, and many on-premise storage systems) provide the ability to create a "snapshot" of a persistent volume. A snapshot represents a point-in-time copy of a volume. A snapshot can be used either to provision a new volume (pre-populated with the snapshot data) or to restore the existing volume to a previous state (represented by the snapshot). + +## Why add Snapshots to Kubernetes? + +The Kubernetes volume plugin system already provides a powerful abstraction that automates the provisioning, attaching, and mounting of block and file storage. + +Underpinning all these features is the Kubernetes goal of workload portability: Kubernetes aims to create an abstraction layer between distributed systems applications and underlying clusters so that applications can be agnostic to the specifics of the cluster they run on and application deployment requires no “cluster specific” knowledge. + +The [Kubernetes Storage SIG](https://github.com/kubernetes/community/tree/master/sig-storage) identified snapshot operations as critical functionality for many stateful workloads. For example, a database administrator may want to snapshot a database volume before starting a database operation. + +By providing a standard way to trigger snapshot operations in the Kubernetes API, Kubernetes users can now handle use cases like this without having to go around the Kubernetes API (and manually executing storage system specific operations). + +Instead, Kubernetes users are now empowered to incorporate snapshot operations in a cluster agnostic way into their tooling and policy with the comfort of knowing that it will work against arbitrary Kubernetes clusters regardless of the underlying storage. + +Additionally these Kubernetes snapshot primitives act as basic building blocks that unlock the ability to develop advanced, enterprise grade, storage administration features for Kubernetes: such as data protection, data replication, and data migration. + +## Which volume plugins support Kubernetes Snapshots? + +Kubernetes supports three types of volume plugins: in-tree, Flex, and CSI. See [Kubernetes Volume Plugin FAQ](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md) for details. + +Snapshots are only supported for CSI drivers (not for in-tree or Flex). To use the Kubernetes snapshots feature, ensure that a CSI Driver that implements snapshots is deployed on your cluster. + +As of the publishing of this blog, the following CSI drivers support snapshots: + +* [GCE Persistent Disk CSI Driver](https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver) +* [OpenSDS CSI Driver](https://github.com/opensds/nbp/tree/master/csi/server) +* [Ceph RBD CSI Driver](https://github.com/ceph/ceph-csi/tree/master/pkg/rbd) +* [Portworx CSI Driver](https://github.com/libopenstorage/openstorage/tree/master/csi) + +Snapshot support for other [drivers](https://kubernetes-csi.github.io/docs/Drivers.html) is pending, and should be available soon. Read the “[Container Storage Interface (CSI) for Kubernetes Goes Beta](https://kubernetes.io/blog/2018/04/10/container-storage-interface-beta/)” blog post to learn more about CSI and how to deploy CSI drivers. + +## Kubernetes Snapshots API + +Similar to the API for managing Kubernetes Persistent Volumes, Kubernetes Volume Snapshots introduce three new API objects for managing snapshots: + +* `VolumeSnapshot` + * Created by a Kubernetes user to request creation of a snapshot for a specified volume. It contains information about the snapshot operation such as the timestamp when the snapshot was taken and whether the snapshot is ready to use. + * Similar to the `PersistentVolumeClaim` object, the creation and deletion of this object represents a user desire to create or delete a cluster resource (a snapshot). +* `VolumeSnapshotContent` + * Created by the CSI volume driver once a snapshot has been successfully created. It contains information about the snapshot including snapshot ID. + * Similar to the `PersistentVolume` object, this object represents a provisioned resource on the cluster (a snapshot). + * Like `PersistentVolumeClaim` and `PersistentVolume` objects, once a snapshot is created, the `VolumeSnapshotContent` object binds to the VolumeSnapshot for which it was created (with a one-to-one mapping). +* `VolumeSnapshotClass` + * Created by cluster administrators to describe how snapshots should be created. including the driver information, the secrets to access the snapshot, etc. + +It is important to note that unlike the core Kubernetes Persistent Volume objects, these Snapshot objects are defined as [CustomResourceDefinitions (CRDs)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions). The Kubernetes project is moving away from having resource types pre-defined in the API server, and is moving towards a model where the API server is independent of the API objects. This allows the API server to be reused for projects other than Kubernetes, and consumers (like Kubernetes) can simply install the resource types they require as CRDs. + +[CSI Drivers](https://kubernetes-csi.github.io/docs/Drivers.html) that support snapshots will automatically install the required CRDs. Kubernetes end users only need to verify that a CSI driver that supports snapshots is deployed on their Kubernetes cluster. + +In addition to these new objects, a new, DataSource field has been added to the `PersistentVolumeClaim` object: + +``` +type PersistentVolumeClaimSpec struct { + AccessModes []PersistentVolumeAccessMode + Selector *metav1.LabelSelector + Resources ResourceRequirements + VolumeName string + StorageClassName *string + VolumeMode *PersistentVolumeMode + DataSource *TypedLocalObjectReference +} +``` + +This new alpha field enables a new volume to be created and automatically pre-populated with data from an existing snapshot. + +## Kubernetes Snapshots Requirements + +Before using Kubernetes Volume Snapshotting, you must: + +* Ensure a CSI driver implementing snapshots is deployed and running on your Kubernetes cluster. +* Enable the Kubernetes Volume Snapshotting feature via new Kubernetes feature gate (disabled by default for alpha): + * Set the following flag on the API server binary: `--feature-gates=VolumeSnapshotDataSource=true` + +Before creating a snapshot, you also need to specify CSI driver information for snapshots by creating a `VolumeSnapshotClass` object and setting the `snapshotter` field to point to your CSI driver. In the example of `VolumeSnapshotClass` below, the CSI driver is `com.example.csi-driver`. You need at least one `VolumeSnapshotClass` object per snapshot provisioner. You can also set a default `VolumeSnapshotClass` for each individual CSI driver by putting an annotation `snapshot.storage.kubernetes.io/is-default-class: "true"` in the class definition. + +``` +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotClass +metadata: + name: default-snapclass + annotations: + snapshot.storage.kubernetes.io/is-default-class: "true" +snapshotter: com.example.csi-driver + + +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotClass +metadata: + name: csi-snapclass +snapshotter: com.example.csi-driver +parameters: + fakeSnapshotOption: foo + csiSnapshotterSecretName: csi-secret + csiSnapshotterSecretNamespace: csi-namespace +``` + +You must set any required opaque parameters based on the documentation for your CSI driver. As the example above shows, the parameter `fakeSnapshotOption: foo` and any referenced secret(s) will be passed to CSI driver during snapshot creation and deletion. The [default CSI external-snapshotter](https://github.com/kubernetes-csi/external-snapshotter) reserves the parameter keys `csiSnapshotterSecretName` and `csiSnapshotterSecretNamespace`. If specified, it fetches the secret and passes it to the CSI driver when creating and deleting a snapshot. + +And finally, before creating a snapshot, you must provision a volume using your CSI driver and populate it with some data that you want to snapshot (see the [CSI blog post](https://kubernetes.io/blog/2018/04/10/container-storage-interface-beta/) on how to create and use CSI volumes). + +## Creating a new Snapshot with Kubernetes + +Once a `VolumeSnapshotClass` object is defined and you have a volume you want to snapshot, you may create a new snapshot by creating a `VolumeSnapshot` object. + +The source of the snapshot specifies the volume to create a snapshot from. It has two parameters: + +* `kind` - must be `PersistentVolumeClaim` +* `name` - the PVC API object name + +The namespace of the volume to snapshot is assumed to be the same as the namespace of the `VolumeSnapshot` object. + +``` +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshot +metadata: + name: new-snapshot-demo + namespace: demo-namespace +spec: + snapshotClassName: csi-snapclass + source: + name: mypvc + kind: PersistentVolumeClaim +``` + +In the `VolumeSnapshot` spec, user can specify the `VolumeSnapshotClass` which has the information about which CSI driver should be used for creating the snapshot . When the `VolumeSnapshot` object is created, the parameter `fakeSnapshotOption: foo` and any referenced secret(s) from the `VolumeSnapshotClass` are passed to the CSI plugin `com.example.csi-driver` via a `CreateSnapshot` call. + +In response, the CSI driver triggers a snapshot of the volume and then automatically creates a `VolumeSnapshotContent` object to represent the new snapshot, and binds the new `VolumeSnapshotContent` object to the `VolumeSnapshot`, making it ready to use. If the CSI driver fails to create the snapshot and returns error, the snapshot controller reports the error in the status of `VolumeSnapshot` object and does not retry (this is different from other controllers in Kubernetes, and is to prevent snapshots from being taken at an unexpected time). + +If a snapshot class is not specified, the external snapshotter will try to find and set a default snapshot class for the snapshot. The `CSI driver` specified by `snapshotter` in the default snapshot class must match the `CSI driver` specified by the `provisioner` in the storage class of the PVC. + +Please note that the alpha release of Kubernetes Snapshot does not provide any consistency guarantees. You have to prepare your application (pause application, freeze filesystem etc.) before taking the snapshot for data consistency. + +You can verify that the `VolumeSnapshot` object is created and bound with `VolumeSnapshotContent` by running `kubectl describe volumesnapshot`: + +* `Ready` should be set to true under `Status` to indicate this volume snapshot is ready for use. +* `Creation Time` field indicates when the snapshot is actually created (cut). +* `Restore Size` field indicates the minimum volume size when restoring a volume from the snapshot. +* `Snapshot Content Name` field in the `spec` points to the `VolumeSnapshotContent` object created for this snapshot. + +## Importing an existing snapshot with Kubernetes + +You can always import an existing snapshot to Kubernetes by manually creating a `VolumeSnapshotContent` object to represent the existing snapshot. Because `VolumeSnapshotContent` is a non-namespace API object, only a system admin may have the permission to create it. Once a `VolumeSnapshotContent` object is created, the user can create a `VolumeSnapshot` object pointing to the `VolumeSnapshotContent` object. The external-snapshotter controller will mark snapshot as ready after verifying the snapshot exists and the binding between `VolumeSnapshot` and `VolumeSnapshotContent` objects is correct. Once bound, the snapshot is ready to use in Kubernetes. + +A `VolumeSnapshotContent` object should be created with the following fields to represent a pre-provisioned snapshot: + +* `csiVolumeSnapshotSource` - Snapshot identifying information. + * `snapshotHandle` - name/identifier of the snapshot. This field is required. + * `driver` - CSI driver used to handle this volume. This field is required. It must match the snapshotter name in the snapshot controller. + * `creationTime` and `restoreSize` - these fields are not required for pre-provisioned volumes. The external-snapshotter controller will automatically update them after creation. +* `volumeSnapshotRef` - Pointer to the `VolumeSnapshot` object this object should bind to. + * `name` and `namespace` - It specifies the name and namespace of the `VolumeSnapshot` object which the content is bound to. + * `UID` - these fields are not required for pre-provisioned volumes.The external-snapshotter controller will update the field automatically after binding. If user specifies UID field, he/she must make sure that it matches with the binding snapshot’s UID. If the specified UID does not match the binding snapshot’s UID, the content is considered an orphan object and the controller will delete it and its associated snapshot. +* `snapshotClassName` - This field is optional. The external-snapshotter controller will update the field automatically after binding. + +``` +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotContent +metadata: + name: static-snapshot-content +spec: + csiVolumeSnapshotSource: + driver: com.example.csi-driver + snapshotHandle: snapshotcontent-example-id + volumeSnapshotRef: + kind: VolumeSnapshot + name: static-snapshot-demo + namespace: demo-namespace +``` + +A `VolumeSnapshot` object should be created to allow a user to use the snapshot: + +* `snapshotClassName` - name of the volume snapshot class. This field is optional. If set, the snapshotter field in the snapshot class must match the snapshotter name of the snapshot controller. If not set, the snapshot controller will try to find a default snapshot class. +* `snapshotContentName` - name of the volume snapshot content. This field is required for pre-provisioned volumes. + +``` +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshot +metadata: + name: static-snapshot-demo + namespace: demo-namespace +spec: + snapshotClassName: csi-snapclass + snapshotContentName: static-snapshot-content +``` + +Once these objects are created, the snapshot controller will bind them together, and set the field Ready (under `Status`) to True to indicate the snapshot is ready to use. + +## Provision a new volume from a snapshot with Kubernetes + +To provision a new volume pre-populated with data from a snapshot object, use the new dataSource field in the `PersistentVolumeClaim`. It has three parameters: + +* name - name of the `VolumeSnapshot` object representing the snapshot to use as source +* kind - must be `VolumeSnapshot` +* apiGroup - must be `snapshot.storage.k8s.io` + +The namespace of the source `VolumeSnapshot` object is assumed to be the same as the namespace of the `PersistentVolumeClaim` object. + +``` +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-restore + Namespace: demo-namespace +spec: + storageClassName: csi-storageclass + dataSource: + name: new-snapshot-demo + kind: VolumeSnapshot + apiGroup: snapshot.storage.k8s.io + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi +``` + +When the `PersistentVolumeClaim` object is created, it will trigger provisioning of a new volume that is pre-populated with data from the specified snapshot. + +## As a storage vendor, how do I add support for snapshots to my CSI driver? + +To implement the snapshot feature, a CSI driver MUST add support for additional controller capabilities `CREATE_DELETE_SNAPSHOT` and `LIST_SNAPSHOTS`, and implement additional controller RPCs: `CreateSnapshot`, `DeleteSnapshot`, and `ListSnapshots`. For details, see [the CSI spec](https://github.com/container-storage-interface/spec/blob/master/spec.md). + +Although Kubernetes is as [minimally prescriptive](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md#third-party-csi-volume-drivers) on the packaging and deployment of a CSI Volume Driver as possible, it provides a [suggested mechanism](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md#recommended-mechanism-for-deploying-csi-drivers-on-kubernetes) for deploying an arbitrary containerized CSI driver on Kubernetes to simplify deployment of containerized CSI compatible volume drivers. + +As part of this recommended deployment process, the Kubernetes team provides a number of sidecar (helper) containers, including a new [external-snapshotter](https://github.com/kubernetes-csi/external-snapshotter) sidecar container. + +The external-snapshotter watches the Kubernetes API server for `VolumeSnapshot` and `VolumeSnapshotContent` objects and triggers CreateSnapshot and DeleteSnapshot operations against a CSI endpoint. The CSI [external-provisioner](https://github.com/kubernetes-csi/external-provisioner) sidecar container has also been updated to support restoring volume from snapshot using the new `dataSource` PVC field. + +In order to support snapshot feature, it is recommended that storage vendors deploy the external-snapshotter sidecar containers in addition to the external provisioner the external attacher, along with their CSI driver in a statefulset as shown in the following diagram. + +![](/images/blog/2018-10-09-volume-snapshot-alpha/snapshot.png) + +In this [example deployment yaml](https://github.com/kubernetes-csi/external-snapshotter/blob/e011fe31df548813d2eb6dacb278c0ca58533b34/deploy/kubernetes/setup-csi-snapshotter.yaml) file, two sidecar containers, the external provisioner and the external snapshotter, and CSI drivers are deployed together with the hostpath CSI plugin in the statefulset pod. Hostpath CSI plugin is a sample plugin, not for production. + +## What are the limitations of alpha? + +The alpha implementation of snapshots for Kubernetes has the following limitations: + +* Does not support reverting an existing volume to an earlier state represented by a snapshot (alpha only supports provisioning a new volume from a snapshot). +* Does not support “in-place restore” of an existing PersistentVolumeClaim from a snapshot: i.e. provisioning a new volume from a snapshot, but updating an existing PersistentVolumeClaim to point to the new volume and effectively making the PVC appear to revert to an earlier state (alpha only supports using a new volume provisioned from a snapshot via a new PV/PVC). +* No snapshot consistency guarantees beyond any guarantees provided by storage system (e.g. crash consistency). + +## What’s next? +Depending on feedback and adoption, the Kubernetes team plans to push the CSI Snapshot implementation to beta in either 1.13 or 1.14. + +## How can I learn more? + +Check out additional documentation on the snapshot feature here: http://k8s.io/docs/concepts/storage/volume-snapshots and https://kubernetes-csi.github.io/docs/ + +## How do I get involved? + +This project, like all of Kubernetes, is the result of hard work by many contributors from diverse backgrounds working together. + +In addition to the contributors who have been working on the Snapshot feature: + +* Xing Yang ([xing-yang](https://github.com/xing-yang)) +* Jing Xu ([jingxu97](https://github.com/jingxu97)) +* Huamin Chen ([rootfs](https://github.com/rootfs)) +* Tomas Smetana ([tsmetana](https://github.com/tsmetana)) +* Shiwei Xu ([wackxu](https://github.com/wackxu)) + +We offer a huge thank you to all the contributors in Kubernetes Storage SIG and CSI community who helped review the design and implementation of the project, including but not limited to the following: + +* Saad Ali ([saadali](https://github.com/saadali)) +* Tim Hockin ([thockin](https://github.com/thockin)) +* Jan Šafránek ([jsafrane](https://github.com/jsafrane)) +* Luis Pabon ([lpabon](https://github.com/lpabon)) +* Jordan Liggitt ([liggitt](https://github.com/liggitt)) +* David Zhu ([davidz627](https://github.com/davidz627)) +* Garth Bushell ([garthy](https://github.com/garthy)) +* Ardalan Kangarlou ([kangarlou](https://github.com/kangarlou)) +* Seungcheol Ko ([sngchlko](https://github.com/sngchlko)) +* Michelle Au ([msau42](https://github.com/msau42)) +* Humble Devassy Chirammal ([humblec](https://github.com/humblec)) +* Vladimir Vivien ([vladimirvivien](https://github.com/vladimirvivien)) +* John Griffith ([j-griffith](https://github.com/j-griffith)) +* Bradley Childs ([childsb](https://github.com/childsb)) +* Ben Swartzlander ([bswartz](https://github.com/bswartz)) + +If you’re interested in getting involved with the design and development of CSI or any part of the Kubernetes Storage system, join the [Kubernetes Storage Special Interest Group](https://github.com/kubernetes/community/tree/master/sig-storage) (SIG). We’re rapidly growing and always welcome new contributors. diff --git a/static/images/blog/2018-10-09-volume-snapshot-alpha/snapshot.png b/static/images/blog/2018-10-09-volume-snapshot-alpha/snapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..78eb0d73ee64790a975723e045b1a0eec61db30c GIT binary patch literal 144175 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
      Kcf=N@Xe2y(hT*+ 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
      VokL4zOygpMtS{} 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

      RwZ&JD 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 literal 0 HcmV?d00001 From 170c412377cbf76d941cc11bf9574e38839b47fd Mon Sep 17 00:00:00 2001 From: Zach Corleissen Date: Tue, 9 Oct 2018 14:41:33 -0700 Subject: [PATCH 129/181] Update OWNERS* files to set permissions by alias (#10566) Add tfogo --- OWNERS | 18 ++---------------- OWNERS_ALIASES | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/OWNERS b/OWNERS index a00ba29cc0..da9dee9771 100644 --- a/OWNERS +++ b/OWNERS @@ -1,24 +1,10 @@ # Reviewers can /lgtm /approve but not sufficient for auto-merge without an # approver reviewers: -- Rajakavitha1 -- stewart-yu -- xiangpengzhao -- zhangxiaoyu-zidif +- sig-docs-en-reviews # Approvers have all the ability of reviewers but their /approve makes # auto-merge happen if a /lgtm exists, or vice versa, or they can do both # No need for approvers to also be listed as reviewers approvers: -- bradamant3 -- bradtopol -- chenopis -- jaredbhatti -- kbarnard10 -- mistyhacks -- ryanmcginnis -- steveperry-53 -- tengqm -- tfogo -- zacharysarah -- zparnold +- sig-docs-en-owners diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 598aeb4767..0507fef846 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -97,21 +97,39 @@ aliases: - apelisse - grodrigues3 - spxtr - sig-docs: #Team: documentation; GH: sig-docs-pr-reviews + sig-docs: #Team: documentation; GH: sig-docs-maintainers - bradamant3 - bradtopol - chenopis + - jaredbhatti - kbarnard10 - mistyhacks - - rajakavitha1 - ryanmcginnis - steveperry-53 - - stewart-yu - tengqm + - tfogo - xiangpengzhao - zacharysarah - zhangxiaoyu-zidif - zparnold + sig-docs-en-owners: #Team: Documentation; GH: sig-docs-en-owners + - bradamant3 + - bradtopol + - chenopis + - jaredbhatti + - kbarnard10 + - mistyhacks + - ryanmcginnis + - steveperry-53 + - tengqm + - tfogo + - zacharysarah + - zparnold + sig-docs-en-reviews: #Team: Documentation; GH: sig-docs-pr-reviews + - rajakavitha1 + - stewart-yu + - xiangpengzhao + - zhangxiaoyu sig-federation: #Team: Federation; e.g. Federated Clusters - csbell sig-gcp: #Google Cloud Platform; GH: sig-gcp-pr-reviews From a7e41d80dbf46e2c0e2567cc26cc4ae1c71cb6ab Mon Sep 17 00:00:00 2001 From: Scott Brenner Date: Tue, 9 Oct 2018 14:52:03 -0700 Subject: [PATCH 130/181] Minor typo fix (#10567) Not sure what's supposed to be here, proposing removing it. --- .../debug-application-cluster/resource-usage-monitoring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md b/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md index 868a12c74b..609adc498c 100644 --- a/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md +++ b/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md @@ -95,7 +95,7 @@ With the [Kubernetes Job Monitor](https://github.com/pietervogelaar/kubernetes-j ### New Relic Kubernetes monitoring integration -[New Relic Kubernetes](https://docs.newrelic.com/docs/integrations/host-integrations/host-integrations-list/kubernetes-monitoring-integration) integration provides increased visibility into the performance of your Kubernetes environment in. New Relic's Kubernetes integration instruments the container orchestration layer by reporting metrics from Kubernetes objects. The integration gives you insight into your Kubernetes nodes, namespaces, deployments, replica sets, pods, and containers. +[New Relic Kubernetes](https://docs.newrelic.com/docs/integrations/host-integrations/host-integrations-list/kubernetes-monitoring-integration) integration provides increased visibility into the performance of your Kubernetes environment. New Relic's Kubernetes integration instruments the container orchestration layer by reporting metrics from Kubernetes objects. The integration gives you insight into your Kubernetes nodes, namespaces, deployments, replica sets, pods, and containers. Marquee capabilities: View your data in pre-built dashboards for immediate insight into your Kubernetes environment. From 69632fc481136d2aef21ce99532fa5e4d8c6be40 Mon Sep 17 00:00:00 2001 From: Brian-Williams Date: Tue, 9 Oct 2018 21:04:03 -0400 Subject: [PATCH 131/181] Remove unneeded move page (#10563) As is this links you to a page, which simply links to the resources current location. Better to simply link to the resources current location. --- content/en/docs/concepts/extend-kubernetes/extend-cluster.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/extend-kubernetes/extend-cluster.md b/content/en/docs/concepts/extend-kubernetes/extend-cluster.md index e5ffb64d18..8b04771a07 100644 --- a/content/en/docs/concepts/extend-kubernetes/extend-cluster.md +++ b/content/en/docs/concepts/extend-kubernetes/extend-cluster.md @@ -207,7 +207,7 @@ the nodes chosen for a pod. * [Device Plugins](/docs/concepts/cluster-administration/device-plugins/) * Learn about [kubectl plugins](/docs/tasks/extend-kubectl/kubectl-plugins/) * See examples of Automation - * [List of Operators](https://github.com/coreos/awesome-kubernetes-extensions) + * [List of Operators](https://github.com/operator-framework/awesome-operators) {{% /capture %}} From 462b8ed2a25e83b30692af00b632288720c0b083 Mon Sep 17 00:00:00 2001 From: Luc Perkins Date: Tue, 9 Oct 2018 18:08:28 -0700 Subject: [PATCH 132/181] Update README instructions and Docker image (#10537) --- Dockerfile | 7 ++++--- README.md | 42 ++++++++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3dade4f6c4..0e3f6d1099 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,10 +20,11 @@ ARG HUGO_VERSION RUN mkdir -p /usr/local/src && \ cd /usr/local/src && \ - curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz && \ + #curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz && \ + curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz && \ mv hugo /usr/local/bin/hugo && \ - curl -L https://bin.equinox.io/c/dhgbqpS8Bvy/minify-stable-linux-amd64.tgz | tar -xz && \ - mv minify /usr/local/bin && \ + #curl -L https://bin.equinox.io/c/dhgbqpS8Bvy/minify-stable-linux-amd64.tgz | tar -xz && \ + #mv minify /usr/local/bin && \ addgroup -Sg 1000 hugo && \ adduser -Sg hugo -u 1000 -h /src hugo diff --git a/README.md b/README.md index 20de961d16..b92d82f7aa 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,29 @@ For more information about contributing to the Kubernetes documentation, see: * [Using Page Templates](http://kubernetes.io/docs/contribute/style/page-templates/) * [Documentation Style Guide](http://kubernetes.io/docs/contribute/style/style-guide/) +## Running the site locally using Docker + +The recommended way to run the Kubernetes website locally is to run a specialized [Docker](https://docker.com) image that includes the [Hugo](https://gohugo.io) static site generator. + +> If you'd prefer to run the website locally without Docker, see [Running the site locally using Hugo](#running-the-site-locally-using-hugo) below. + +If you have Docker [up and running](https://www.docker.com/get-started), build the `kubernetes-hugo` Docker image locally: + +```bash +make docker-image +``` + +Once the image has been built, you can run the site locally: + +```bash +make docker-serve +``` + +Open up your browser to http://localhost:1313 to view the site. As you make changes to the source files, Hugo updates the site and forces a browser refresh. + ## Running the site locally using Hugo -The Kubernetes documentation is built using the [Hugo](https://gohugo.io) static site generator. See the [official Hugo documentation](https://gohugo.io/getting-started/installing/) for Hugo installation instructions. - -> Building and running the site requires the Hugo version specified by the `HUGO_VERSION` environment variable in the [`netlify.toml`](netlify.toml#L9) file. +See the [official Hugo documentation](https://gohugo.io/getting-started/installing/) for Hugo installation instructions. Make sure to install the Hugo version specified by the `HUGO_VERSION` environment variable in the [`netlify.toml`](netlify.toml#L9) file. To run the site locally when you have Hugo installed: @@ -27,23 +45,7 @@ To run the site locally when you have Hugo installed: make serve ``` -This will start the local Hugo server on port 1313. Open up your browser to http://localhost:1313 to view the site. As you make changes to the source files, Hugo updates immediately and forces a browser refresh. - -## Building the site using Docker - -You can build the Kubernetes docs using [Docker](https://docker.com). To get started, make sure that you have Docker running and build the image locally: - -```bash -make docker-image -``` - -Once the `kubernetes-hugo` image has been built locally, you can run the site locally: - -```bash -make docker-serve -``` - -Open up your browser to http://localhost:1313 to view the site. +This will start the local Hugo server on port 1313. Open up your browser to http://localhost:1313 to view the site. As you make changes to the source files, Hugo updates the site and forces a browser refresh. ## Thank you! From 275c8c6721e01ab9cb08b3b750c2677e8b701421 Mon Sep 17 00:00:00 2001 From: Juan Vallejo Date: Tue, 9 Oct 2018 21:10:03 -0400 Subject: [PATCH 133/181] address additional comments from pr #10259 (#10539) --- content/en/docs/tasks/extend-kubectl/kubectl-plugins.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md b/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md index d4e3b256d3..72e358bb62 100644 --- a/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md +++ b/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md @@ -158,8 +158,8 @@ As you can see, our plugin was found based on the `kubectl` command specified by #### Names with dashes and underscores -Although the `kubectl` plugin mechanism uses the dashes (`-`) in plugin filenames to determine the sequence of sub-commands that should invoke them, it is still possible to create a plugin -command containing dashes in its commandline invocation by using underscores `_` in its filename. +Although the `kubectl` plugin mechanism uses the dash (`-`) in plugin filenames to separate the sequence of sub-commands processed by the plugin, it is still possible to create a plugin +command containing dashes in its commandline invocation by using underscores (`_`) in its filename. Example: @@ -191,7 +191,7 @@ I am a plugin with a dash in my name #### Name conflicts and overshadowing -It can be possible to have multiple pluins with the same filename in different locations throughout your PATH. +It is possible to have multiple plugins with the same filename in different locations throughout your PATH. For example, given a PATH with the following value: `PATH=/usr/local/bin/plugins:/usr/local/bin/moreplugins`, a copy of plugin `kubectl-foo` could exist in `/usr/local/bin/plugins` and `/usr/local/bin/moreplugins`, such that the output of the `kubectl plugin list` command is: @@ -206,7 +206,7 @@ The following kubectl-compatible plugins are available: error: one plugin warning was found ``` -In the above scenario, the warning under `/usr/local/bin/moreplugins/kubectl-foo` tells us that this plugin will never be executed. Instead, the executable that appears first in our PATH, `/usr/local/bin/plugins/kubectl-foo`, willalways be found and executed first by the `kubectl` plugin mechanism. +In the above scenario, the warning under `/usr/local/bin/moreplugins/kubectl-foo` tells us that this plugin will never be executed. Instead, the executable that appears first in our PATH, `/usr/local/bin/plugins/kubectl-foo`, will always be found and executed first by the `kubectl` plugin mechanism. A way to resolve this issue is to ensure that the location of the plugin that you wish to use with `kubectl` always comes first in your PATH. For example, if we wanted to always use `/usr/local/bin/moreplugins/kubectl-foo` anytime that the `kubectl` command `kubectl foo` was invoked, we would simply change the value of our PATH to be `PATH=/usr/local/bin/moreplugins:/usr/local/bin/plugins`. From fac57805535d2761a08fbf89ca539f00ee2a686c Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Tue, 9 Oct 2018 20:38:46 -0700 Subject: [PATCH 134/181] security: use security@kubernetes.io alias (#10516) See https://github.com/kubernetes/sig-release/issues/326 for context on the change. --- content/en/docs/reference/issues-security/security.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/issues-security/security.md b/content/en/docs/reference/issues-security/security.md index 9613a6bc7c..a2795d3b93 100644 --- a/content/en/docs/reference/issues-security/security.md +++ b/content/en/docs/reference/issues-security/security.md @@ -23,7 +23,7 @@ Join the [kubernetes-announce](https://groups.google.com/forum/#!forum/kubernete We’re extremely grateful for security researchers and users that report vulnerabilities to the Kubernetes Open Source Community. All reports are thoroughly investigated by a set of community volunteers. -To make a report, please email the private [kubernetes-security@googlegroups.com](mailto:kubernetes-security@googlegroups.com) list with the security details and the details expected for [all Kubernetes bug reports](https://git.k8s.io/kubernetes/.github/ISSUE_TEMPLATE.md). +To make a report, please email the private [security@kubernetes.io](mailto:security@kubernetes.io) list with the security details and the details expected for [all Kubernetes bug reports](https://git.k8s.io/kubernetes/.github/ISSUE_TEMPLATE.md). You may encrypt your email to this list using the GPG keys of the [Product Security Team members](https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md#product-security-team-pst). Encryption using GPG is NOT required to make a disclosure. From e949373d68226d4b6a8627d9c6a40c6e52c69440 Mon Sep 17 00:00:00 2001 From: John Roach <691729+johnroach@users.noreply.github.com> Date: Wed, 10 Oct 2018 02:08:19 -0400 Subject: [PATCH 135/181] Removed duplication of spec: (#10568) Removed duplicate of `spec:` in example. --- .../concepts/workloads/controllers/jobs-run-to-completion.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md b/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md index 14a949ff09..6c387861e5 100644 --- a/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md +++ b/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md @@ -278,7 +278,6 @@ apiVersion: batch/v1 kind: Job metadata: name: pi-with-ttl -spec: spec: ttlSecondsAfterFinished: 100 template: From b96ee7d8c4033409f6f739c853103dd6b9246771 Mon Sep 17 00:00:00 2001 From: Chazzledazzle1 Date: Wed, 10 Oct 2018 08:15:04 -0500 Subject: [PATCH 136/181] Additional Documentation (#10480) * [Kubernetes the Hard Way (LinuxAcademy.com)](https://linuxacademy.com/linux/training/course/name/kubernetes-the-hard-way) --- content/en/docs/tutorials/online-training/overview.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/tutorials/online-training/overview.md b/content/en/docs/tutorials/online-training/overview.md index ed316d842b..e82722fbd2 100644 --- a/content/en/docs/tutorials/online-training/overview.md +++ b/content/en/docs/tutorials/online-training/overview.md @@ -23,6 +23,8 @@ Here are some of the sites that offer online training for Kubernetes: * [Certified Kubernetes Administrator Preparation Course (LinuxAcademy.com)](https://linuxacademy.com/linux/training/course/name/certified-kubernetes-administrator-preparation-course) +* [Kubernetes the Hard Way (LinuxAcademy.com)](https://linuxacademy.com/linux/training/course/name/kubernetes-the-hard-way) + {{% /capture %}} From 9e4ff3de823b38309ab33560d54168e56890cdd1 Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Wed, 10 Oct 2018 08:56:28 -0700 Subject: [PATCH 137/181] Blog Post: RuntimeClass (#10576) * blog post for azure vmss * blog post --- .../en/blog/_posts/2018-10-10-runtimeclass.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-10-runtimeclass.md diff --git a/content/en/blog/_posts/2018-10-10-runtimeclass.md b/content/en/blog/_posts/2018-10-10-runtimeclass.md new file mode 100644 index 0000000000..9899884299 --- /dev/null +++ b/content/en/blog/_posts/2018-10-10-runtimeclass.md @@ -0,0 +1,47 @@ +--- +layout: blog +title: 'Kubernetes v1.12: Introducing RuntimeClass' +date: 2018-10-10 +--- + +**Author**: Tim Allclair (Google) + +Kubernetes originally launched with support for Docker containers running native applications on a Linux host. Starting with [rkt](https://kubernetes.io/blog/2016/07/rktnetes-brings-rkt-container-engine-to-kubernetes/) in Kubernetes 1.3 more runtimes were coming, which lead to the development of the [Container Runtime Interface](https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) (CRI). Since then, the set of alternative runtimes has only expanded: projects like [Kata Containers](https://katacontainers.io/) and [gVisor](https://github.com/google/gvisor) were announced for stronger workload isolation, and Kubernetes' Windows support has been [steadily progressing](https://kubernetes.io/blog/2018/01/kubernetes-v19-beta-windows-support/). + +With runtimes targeting so many different use cases, a clear need for mixed runtimes in a cluster arose. But all these different ways of running containers have brought a new set of problems to deal with: + +- How do users know which runtimes are available, and select the runtime for their workloads? +- How do we ensure pods are scheduled to the nodes that support the desired runtime? +- Which runtimes support which features, and how can we surface incompatibilities to the user? +- How do we account for the varying resource overheads of the runtimes? + +**RuntimeClass** aims to solve these issues. + +## RuntimeClass in Kubernetes 1.12 + +RuntimeClass was recently introduced as an alpha feature in Kubernetes 1.12. The initial implementation focuses on providing a runtime selection API, and paves the way to address the other open problems. + +The RuntimeClass resource represents a container runtime supported in a Kubernetes cluster. The cluster provisioner sets up, configures, and defines the concrete runtimes backing the RuntimeClass. In its current form, a RuntimeClassSpec holds a single field, the **RuntimeHandler**. The RuntimeHandler is interpreted by the CRI implementation running on a node, and mapped to the actual runtime configuration. Meanwhile the PodSpec has been expanded with a new field, **RuntimeClassName**, which names the RuntimeClass that should be used to run the pod. + +Why is RuntimeClass a pod level concept? The Kubernetes resource model expects certain resources to be shareable between containers in the pod. If the pod is made up of different containers with potentially different resource models, supporting the necessary level of resource sharing becomes very challenging. For example, it is extremely difficult to support a loopback (localhost) interface across a VM boundary, but this is a common model for communication between two containers in a pod. + +## What's next? + +The RuntimeClass resource is an important foundation for surfacing runtime properties to the control plane. For example, to implement scheduler support for clusters with heterogeneous nodes supporting different runtimes, we might add [NodeAffinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) terms to the RuntimeClass definition. Another area to address is managing the variable resource requirements to run pods of different runtimes. The [Pod Overhead proposal](https://docs.google.com/document/d/1EJKT4gyl58-kzt2bnwkv08MIUZ6lkDpXcxkHqCvvAp4/preview) was an early take on this that aligns nicely with the RuntimeClass design, and may be pursued further. + +Many other RuntimeClass extensions have also been proposed, and will be revisited as the feature continues to develop and mature. A few more extensions that are being considered include: + + - Surfacing optional features supported by runtimes, and better visibility into errors caused by incompatible features. +- Automatic runtime or feature discovery, to support scheduling decisions without manual configuration. +- Standardized or conformant RuntimeClass names that define a set of properties that should be supported across clusters with RuntimeClasses of the same name. +- Dynamic registration of additional runtimes, so users can install new runtimes on existing clusters with no downtime. +- "Fitting" a RuntimeClass to a pod's requirements. For instance, specifying runtime properties and letting the system match an appropriate RuntimeClass, rather than explicitly assigning a RuntimeClass by name. + +RuntimeClass will be under active development at least through 2019, and we’re excited to see the feature take shape, starting with the RuntimeClass alpha in Kubernetes 1.12. + +## Learn More + +- Take it for a spin! As an alpha feature, there are some additional setup steps to use RuntimeClass. Refer to the [RuntimeClass documentation](https://kubernetes.io/docs/concepts/containers/runtime-class/#runtime-class) for how to get it running. +- Check out the [RuntimeClass Kubernetes Enhancement Proposal](https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md) for more nitty-gritty design details. +- The [Sandbox Isolation Level Decision](https://docs.google.com/document/d/1fe7lQUjYKR0cijRmSbH_y0_l3CYPkwtQa5ViywuNo8Q/preview) documents the thought process that initially went into making RuntimeClass a pod-level choice. +- Join the discussions and help shape the future of RuntimeClass with the [SIG-Node community](https://github.com/kubernetes/community/tree/master/sig-node) From 8e38104f87d503476cf551a004a19a6d42c3bb7f Mon Sep 17 00:00:00 2001 From: ahawtho Date: Wed, 10 Oct 2018 20:59:37 -0400 Subject: [PATCH 138/181] Fixes typo in resource-quotas.md (#10575) --- content/en/docs/concepts/policy/resource-quotas.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/policy/resource-quotas.md b/content/en/docs/concepts/policy/resource-quotas.md index 55c9a68800..9ee1c54ddb 100644 --- a/content/en/docs/concepts/policy/resource-quotas.md +++ b/content/en/docs/concepts/policy/resource-quotas.md @@ -568,7 +568,7 @@ For example: values: ["cluster-services"] ``` -See [LimitedResources](https://github.com/kubernetes/kubernetes/pull/36765) and [Quota supoport for priority class design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/pod-priority-resourcequota.md) for more information. +See [LimitedResources](https://github.com/kubernetes/kubernetes/pull/36765) and [Quota support for priority class design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/pod-priority-resourcequota.md) for more information. ## Example From 54861ba19cbfe9117f4fd05898adb12e220e72ba Mon Sep 17 00:00:00 2001 From: atoato88 Date: Thu, 11 Oct 2018 10:04:52 +0900 Subject: [PATCH 139/181] Update Flannel manifest URL (#10571) Current manifest of flannel is old for Kubernetes v1.12 . Deployment cluster is failed at installing pod network add-on. This PR update flannel manifest URL. --- .../en/docs/setup/independent/create-cluster-kubeadm.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/content/en/docs/setup/independent/create-cluster-kubeadm.md b/content/en/docs/setup/independent/create-cluster-kubeadm.md index 35b54a5102..e37bea2a1c 100644 --- a/content/en/docs/setup/independent/create-cluster-kubeadm.md +++ b/content/en/docs/setup/independent/create-cluster-kubeadm.md @@ -317,14 +317,10 @@ Set `/proc/sys/net/bridge/bridge-nf-call-iptables` to `1` by running `sysctl net to pass bridged IPv4 traffic to iptables' chains. This is a requirement for some CNI plugins to work, for more information please see [here](https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements). -```shell -kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml -``` -Note that `flannel` works on `amd64`, `arm`, `arm64` and `ppc64le`, but until `flannel v0.11.0` is released -you need to use the following manifest that supports all the architectures: +Note that `flannel` works on `amd64`, `arm`, `arm64` and `ppc64le`. ```shell -kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/c5d10c8/Documentation/kube-flannel.yml +kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml ``` For more information about `flannel`, see [the CoreOS flannel repository on GitHub From ec82aed8cf96887ed86b21bb76dbeccab18f05ff Mon Sep 17 00:00:00 2001 From: Eamon Bauman Date: Wed, 10 Oct 2018 22:12:40 -0500 Subject: [PATCH 140/181] Remove links for older versions of kubernetes (#10523) * Fix broken links for older versions of kubernetes Upgrade paths listed on this page (1.7, etc) had broken links. Referred those links to the last working copy, which was in v1.11 docs. * Removed older links --- .../docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md index 3fb5856448..480580aa81 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md @@ -19,14 +19,10 @@ cluster if necessary. Every upgrade process might be a bit different, so we've documented each minor upgrade process individually. For more version-specific upgrade guidance, see the following resources: - * [1.7.x to 1.7.y upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8/) - * [1.7 to 1.8 upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8/) - * [1.8.x to 1.8.y upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-8/) - * [1.8.x to 1.9.x upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9/) - * [1.9.x to 1.9.y upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9/) - * [1.9.x to 1.9.y HA cluster upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha/) * [1.10 to 1.11 upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-11/) * [1.11 to 1.12 upgrades](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-12/) + +_For older versions, please refer to older documentation sets on the Kubernetes website._ In Kubernetes v1.11.0 and later, you can use `kubeadm upgrade diff` to see the changes that would be applied to static pod manifests. From 36a9a9aeee7565673a8b01d44cf5af190d35f9da Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Thu, 11 Oct 2018 10:41:10 -0700 Subject: [PATCH 141/181] Blog Post: Topology Aware Volume Provisioning (#10586) * blog post for azure vmss * blog post * blog post --- ...0-11-topology-aware-volume-provisioning.md | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md diff --git a/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md b/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md new file mode 100644 index 0000000000..6daecd1c5f --- /dev/null +++ b/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md @@ -0,0 +1,158 @@ +--- +layout: blog +title: 'Topology-Aware Volume Provisioning in Kubernetes' +date: 2018-10-11 +--- + +**Author**: Michelle Au (Google) + +The multi-zone cluster experience with persistent volumes is improving in Kubernetes 1.12 with the topology-aware dynamic provisioning beta feature. This feature allows Kubernetes to make intelligent decisions when dynamically provisioning volumes by getting scheduler input on the best place to provision a volume for a pod. In multi-zone clusters, this means that volumes will get provisioned in an appropriate zone that can run your pod, allowing you to easily deploy and scale your stateful workloads across failure domains to provide high availability and fault tolerance. + +## Previous challenges + +Before this feature, running stateful workloads with zonal persistent disks (such as AWS ElasticBlockStore, Azure Disk, GCE PersistentDisk) in multi-zone clusters had many challenges. Dynamic provisioning was handled independently from pod scheduling, which meant that as soon as you created a PersistentVolumeClaim (PVC), a volume would get provisioned. This meant that the provisioner had no knowledge of what pods were using the volume, and any pod constraints it had that could impact scheduling. + +This resulted in unschedulable pods because volumes were provisioned in zones that: + +* did not have enough CPU or memory resources to run the pod +* conflicted with node selectors, pod affinity or anti-affinity policies +* could not run the pod due to taints + +Another common issue was that a non-StatefulSet pod using multiple persistent volumes could have each volume provisioned in a different zone, again resulting in an unschedulable pod. + +Suboptimal workarounds included overprovisioning of nodes, or manual creation of volumes in the correct zones, making it difficult to dynamically deploy and scale stateful workloads. + +The topology-aware dynamic provisioning feature addresses all of the above issues. + +## Supported Volume Types + +In 1.12, the following drivers support topology-aware dynamic provisioning: + +* AWS EBS +* Azure Disk +* GCE PD (including Regional PD) +* CSI (alpha) - currently only the GCE PD CSI driver has implemented topology support + +## Design Principles + +While the initial set of supported plugins are all zonal-based, we designed this feature to adhere to the Kubernetes principle of portability across environments. Topology specification is generalized and uses a similar label-based specification like in Pod nodeSelectors and nodeAffinity. This mechanism allows you to define your own topology boundaries, such as racks in on-premise clusters, without requiring modifications to the scheduler to understand these custom topologies. + +In addition, the topology information is abstracted away from the pod specification, so a pod does not need knowledge of the underlying storage system’s topology characteristics. This means that you can use the same pod specification across multiple clusters, environments, and storage systems. + +## Getting Started + +To enable this feature, all you need to do is to create a StorageClass with `volumeBindingMode` set to `WaitForFirstConsumer`: + +``` +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: topology-aware-standard +provisioner: kubernetes.io/gce-pd +volumeBindingMode: WaitForFirstConsumer +parameters: + type: pd-standard +``` + +This new setting instructs the volume provisioner to not create a volume immediately, and instead, wait for a pod using an associated PVC to run through scheduling. Note that previous StorageClass `zone` and `zones` parameters do not need to be specified anymore, as pod policies now drive the decision of which zone to provision a volume in. + +Next, create a pod and PVC with this StorageClass. This sequence is the same as before, but with a different StorageClass specified in the PVC. The following is a hypothetical example, demonstrating the capabilities of the new feature by specifying many pod constraints and scheduling policies: + +* multiple PVCs in a pod +* nodeAffinity across a subset of zones +* pod anti-affinity on zones + +``` +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: web +spec: + serviceName: "nginx" + replicas: 2 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: failure-domain.beta.kubernetes.io/zone + operator: In + values: + - us-central1-a + - us-central1-f + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - nginx + topologyKey: failure-domain.beta.kubernetes.io/zone + containers: + - name: nginx + image: gcr.io/google_containers/nginx-slim:0.8 + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: www + mountPath: /usr/share/nginx/html + - name: logs + mountPath: /logs + volumeClaimTemplates: + - metadata: + name: www + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: topology-aware-standard + resources: + requests: + storage: 10Gi + - metadata: + name: logs + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: topology-aware-standard + resources: + requests: + storage: 1Gi +``` + +Afterwards, you can see that the volumes were provisioned in zones according to the policies set by the pod: + +``` +$ kubectl get pv -o=jsonpath='{range .items[*]}{.spec.claimRef.name}{"\t"}{.metadata.labels.failure\-domain\.beta\.kubernetes\.io/zone}{"\n"}{end}' +www-web-0 us-central1-f +logs-web-0 us-central1-f +www-web-1 us-central1-a +logs-web-1 us-central1-a +``` + +## How can I learn more? + +Official documentation on the topology-aware dynamic provisioning feature is available here: +https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode + +Documentation for CSI drivers is available at https://kubernetes-csi.github.io/docs/ + +## What’s next? + +We are actively working on improving this feature to support: + +* more volume types, including dynamic provisioning for local volumes +* dynamic volume attachable count and capacity limits per node + +## How do I get involved? + +If you have feedback for this feature or are interested in getting involved with the design and development, join the [Kubernetes Storage Special-Interest-Group](https://github.com/kubernetes/community/tree/master/sig-storage) (SIG). We’re rapidly growing and always welcome new contributors. + +Special thanks to all the contributors that helped bring this feature to beta, including Cheng Xing ([verult](https://github.com/verult)), Chuqiang Li ([lichuqiang](https://github.com/lichuqiang)), David Zhu ([davidz627](https://github.com/davidz627)), Deep Debroy ([ddebroy](https://github.com/ddebroy)), Jan Šafránek ([jsafrane](https://github.com/jsafrane)), Jordan Liggitt ([liggitt](https://github.com/liggitt)), Michelle Au ([msau42](https://github.com/msau42)), Pengfei Ni ([feiskyer](https://github.com/feiskyer)), Saad Ali ([saad-ali](https://github.com/saad-ali)), Tim Hockin ([thockin](https://github.com/thockin)), and Yecheng Fu ([cofyc](https://github.com/cofyc)). From 6ac500f2ad0730d28c040270abc019e658083610 Mon Sep 17 00:00:00 2001 From: Jim Angel Date: Thu, 11 Oct 2018 13:17:24 -0500 Subject: [PATCH 142/181] adding jimangel as reviewer (#10587) * adding jimangel as reviewer * Alphabetize new entry --- OWNERS_ALIASES | 1 + 1 file changed, 1 insertion(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 0507fef846..2b65c6aecd 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -126,6 +126,7 @@ aliases: - zacharysarah - zparnold sig-docs-en-reviews: #Team: Documentation; GH: sig-docs-pr-reviews + - jimangel - rajakavitha1 - stewart-yu - xiangpengzhao From e6611e31007fd9feba8e2cafd10b7010a8f6aa93 Mon Sep 17 00:00:00 2001 From: chenDT Date: Thu, 11 Oct 2018 21:21:04 +0000 Subject: [PATCH 143/181] Fix some "capture prerequisites" errors in docs/tasks. (#10270) Multiple "capture prerequisites" can only display the last one, so we need to merge multiple "capture prerequisites". --- .../configure-access-multiple-clusters.md | 8 ------- .../setup-extension-api-server.md | 9 ++------ .../declare-network-policy.md | 21 ++++++++----------- .../dns-horizontal-autoscaling.md | 6 ------ .../tasks/administer-cluster/encrypt-data.md | 10 --------- 5 files changed, 11 insertions(+), 43 deletions(-) diff --git a/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md index cdebb3015c..236e91bc8d 100644 --- a/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md +++ b/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md @@ -22,14 +22,6 @@ It does not mean that there is a file named `kubeconfig`. {{% capture prerequisites %}} -You need to have the [`kubectl`](/docs/tasks/tools/install-kubectl/) command-line tool installed. - -{{% /capture %}} - -{{< toc >}} - -{{% capture prerequisites %}} - {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} {{% /capture %}} diff --git a/content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md b/content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md index f1fdc298d6..71c6059eec 100644 --- a/content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md +++ b/content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md @@ -16,15 +16,10 @@ Setting up an extension API server to work the aggregation layer allows the Kube {{% capture prerequisites %}} -* You need to have a Kubernetes cluster running. -* You must [configure the aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) and enable the apiserver flags. - -{{% /capture %}} - -{{% capture prerequisites %}} - {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +* You must [configure the aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) and enable the apiserver flags. + {{% /capture %}} {{% capture steps %}} diff --git a/content/en/docs/tasks/administer-cluster/declare-network-policy.md b/content/en/docs/tasks/administer-cluster/declare-network-policy.md index 60f2a276fe..db27d97ce5 100644 --- a/content/en/docs/tasks/administer-cluster/declare-network-policy.md +++ b/content/en/docs/tasks/administer-cluster/declare-network-policy.md @@ -9,22 +9,19 @@ content_template: templates/task This document helps you get started using the Kubernetes [NetworkPolicy API](/docs/concepts/services-networking/network-policies/) to declare network policies that govern how pods communicate with each other. {{% /capture %}} -{{% capture prerequisites %}} -You'll need to have a Kubernetes cluster in place, with network policy support. There are a number of network providers that support NetworkPolicy, including: - -* [Calico](/docs/tasks/configure-pod-container/calico-network-policy/) -* [Cilium](/docs/tasks/administer-cluster/cilium-network-policy/) -* [Kube-router](/docs/tasks/administer-cluster/kube-router-network-policy/) -* [Romana](/docs/tasks/configure-pod-container/romana-network-policy/) -* [Weave Net](/docs/tasks/administer-cluster/weave-network-policy/) - -**Note**: The above list is sorted alphabetically by product name, not by recommendation or preference. This example is valid for a Kubernetes cluster using any of these providers. -{{% /capture %}} - {{% capture prerequisites %}} {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +Make sure you've configured a network provider with network policy support. There are a number of network providers that support NetworkPolicy, including: + +* [Calico](/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy/) +* [Cilium](/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/) +* [Kube-router](/docs/tasks/administer-cluster/network-policy-provider/kube-router-network-policy/) +* [Romana](/docs/tasks/administer-cluster/network-policy-provider/romana-network-policy/) +* [Weave Net](/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy/) + +**Note**: The above list is sorted alphabetically by product name, not by recommendation or preference. This example is valid for a Kubernetes cluster using any of these providers. {{% /capture %}} {{% capture steps %}} diff --git a/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md b/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md index c28f4c1001..eaded41813 100644 --- a/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md +++ b/content/en/docs/tasks/administer-cluster/dns-horizontal-autoscaling.md @@ -18,12 +18,6 @@ Kubernetes cluster. {{% /capture %}} -{{% capture prerequisites %}} - -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} - -{{% /capture %}} - {{% capture steps %}} ## Determining whether DNS horizontal autoscaling is already enabled diff --git a/content/en/docs/tasks/administer-cluster/encrypt-data.md b/content/en/docs/tasks/administer-cluster/encrypt-data.md index 75f5e19e28..b7b5eec380 100644 --- a/content/en/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/en/docs/tasks/administer-cluster/encrypt-data.md @@ -17,16 +17,6 @@ This page shows how to enable and configure encryption of secret data at rest. * etcd v3 or later is required -* Encryption at rest is alpha in 1.7.0 which means it may change without notice. Users may be required to decrypt their data prior to upgrading to 1.8.0. - -{{% /capture %}} - -{{< toc >}} - -{{% capture prerequisites %}} - -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} - {{% /capture %}} {{% capture steps %}} From aa3c5e89f634884e8d1f35235010790fedac1368 Mon Sep 17 00:00:00 2001 From: Quan Tian Date: Fri, 12 Oct 2018 10:44:51 +0800 Subject: [PATCH 144/181] Fix ingress class annotation example links (#10580) --- content/en/docs/concepts/services-networking/ingress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/services-networking/ingress.md b/content/en/docs/concepts/services-networking/ingress.md index ab53f30934..b61141909c 100644 --- a/content/en/docs/concepts/services-networking/ingress.md +++ b/content/en/docs/concepts/services-networking/ingress.md @@ -48,7 +48,7 @@ It can be configured to give services externally-reachable URLs, load balance tr Before you start using the Ingress resource, there are a few things you should understand. The Ingress is a beta resource, not available in any Kubernetes release prior to 1.1. You need an Ingress controller to satisfy an Ingress, simply creating the resource will have no effect. -GCE/Google Kubernetes Engine deploys an ingress controller on the master. You can deploy any number of custom ingress controllers in a pod. You must annotate each ingress with the appropriate class, as indicated [here](https://git.k8s.io/ingress#running-multiple-ingress-controllers) and [here](https://git.k8s.io/ingress-gce/BETA_LIMITATIONS.md#disabling-glbc). +GCE/Google Kubernetes Engine deploys an ingress controller on the master. You can deploy any number of custom ingress controllers in a pod. You must annotate each ingress with the appropriate class, as indicated [here](https://git.k8s.io/ingress-nginx/docs/user-guide/multiple-ingress.md#multiple-ingress-controllers) and [here](https://git.k8s.io/ingress-gce/examples/PREREQUISITES.md#ingress-class). Make sure you review the [beta limitations](https://github.com/kubernetes/ingress-gce/blob/master/BETA_LIMITATIONS.md#glbc-beta-limitations) of this controller. In environments other than GCE/Google Kubernetes Engine, you need to [deploy a controller](https://git.k8s.io/ingress-nginx/README.md) as a pod. From 9936ea65524e5610abf8dbf7e68e18430eddcc63 Mon Sep 17 00:00:00 2001 From: Yang Li Date: Fri, 12 Oct 2018 11:58:03 +0800 Subject: [PATCH 145/181] Fix a typo in OWNERS_ALIASES (#10593) --- OWNERS_ALIASES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 2b65c6aecd..d2968dbe7c 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -130,7 +130,7 @@ aliases: - rajakavitha1 - stewart-yu - xiangpengzhao - - zhangxiaoyu + - zhangxiaoyu-zidif sig-federation: #Team: Federation; e.g. Federated Clusters - csbell sig-gcp: #Google Cloud Platform; GH: sig-gcp-pr-reviews From 753f57f0e68640c2a73010ed76e4b83a248d2837 Mon Sep 17 00:00:00 2001 From: nownabe Date: Fri, 12 Oct 2018 22:21:18 +0900 Subject: [PATCH 146/181] Tweak Horizontal Pod Autoscaler documentation (#10596) * Use consistent terms * Fix typo --- .../en/docs/tasks/run-application/horizontal-pod-autoscale.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md index d2cc4003db..1c1cbd0a5e 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md @@ -141,7 +141,7 @@ the magnitude of any potential scale. Furthermore, if any not-yet-ready pods were present, and we would have scaled up without factoring in missing metrics or not-yet-ready pods, we -conservatively assume the non-yet-ready pods are consuming 0% of the +conservatively assume the not-yet-ready pods are consuming 0% of the desired metric, further dampening the magnitude of a scale up. After factoring in the not-yet-ready pods and missing metrics, we @@ -163,7 +163,7 @@ from the metrics APIs), scaling is skipped. Finally, just before HPA scales the target, the scale reccomendation is recorded. The controller considers all recommendations within a configurable window choosing the highest recommendation from within that window. This value can be configured using the `--horizontal-pod-autoscaler-downscale-stabilization-window` flag, which defaults to 5 minutes. -This means that scaledowns will occur gradually, smothing out the impact of rapidly +This means that scaledowns will occur gradually, smoothing out the impact of rapidly fluctuating metric values. ## API Object From abcee2dccd17c94376595b34cc05e56345a7f06c Mon Sep 17 00:00:00 2001 From: Zach Corleissen Date: Fri, 12 Oct 2018 14:25:01 -0700 Subject: [PATCH 147/181] Update localization guidelines (#10485) * Update localization guidelines for language labels Continuing work Continuing work Continuing work More work in progress Add local OWNERS folders Add an OWNERS file to Chinese Remove shortcode for repos Add Japanese Alphabetize languages, change weights accordingly More updates Add Korean in Korean Add English to languageName Feedback from gochist Move Chinese content from cn/ to zh/ Move OWNERS from cn/ to zh/ Resolve merge conflicts by updating from master Add files back in to prep for resolution After rebase on upstream/master, remove files Review and update localization guidelines Feedback from gochist, tnir, cstoku Add a trailing newline to content/ja/OWNERS Add a trailing newline to content/zh/OWNERS Drop requirement for GH repo project Clarify language about forks/branches Edits and typos Remove a shortcode specific to a multi-repo language setup Update aliases and owners Add explicit OWNERS for content/en Migrate content from Chinese repo, update regex in config.toml Remove untranslated strings Add trailing newline to content/en/OWNERS Add trailing newlines to OWNERS files add Jaguar project description (#10433) * add Jaguar project description [Jaguar](https://gitlab.com/sdnlab/jaguar) is an open source solution for Kubernetes's network based on OpenDaylight. Jaguar provides overlay network using vxlan and Jaguar CNIPlugin provides one IP address per pod. * Minor newline tweak blog post for azure vmss (#10538) Add microk8s to pick-right-solution.md (#10542) * Add microk8s to pick-right-solution.md Microk8s is a single-command installation of upstream Kubernetes on any Linux and should be included in the list of local-machine solutions. * capitalized Istio Add microk8s to foundational.md (#10543) * Add microk8s to foundational.md Adding microk8s as credible and stable alternative to get started with Kubernetes on a local machine. This is especially attractive for those not wanting to incur the overhead of running a VM for a local cluster. * Update foundational.md Thank you for your suggestions! LMK if this works now? * Rewrote first paragraph And included a bullet list of features of microk8s * Copyedit fix typo (#10545) Fix the kubectl subcommands links. (#10550) Signed-off-by: William Zhang Fix command issue (#10515) Signed-off-by: mooncake remove imported community files per issue 10184 (#10501) networking.md: Markdown fix (#10498) Fix front matter, federation command-line tools (#10500) Clean up glossary entry (#10399) update slack link (#10536) typo in StatefulSet docs (#10558) fix discription about horizontal pod autoscale (#10557) Remove redundant symbols (#10556) Fix issue #10520 (#10554) Signed-off-by: William Zhang Update api-concepts.md (#10534) Revert "Fix command issue (#10515)" This reverts commit c02a7fb9f9d19872d9227814b3e9ffaaa28d85f0. Update memory-constraint-namespace.md (#10530) update memory request to 100MiB corresponding the yaml content Blog: Introducing Volume Snapshot Alpha for Kubernetes (#10562) * blog post for azure vmss * snapshot blog post Resolve merge conflicts in OWNERS* Minor typo fix (#10567) Not sure what's supposed to be here, proposing removing it. * Feedback from gochist Tweaks to feedback * Feedback from ClaudiaJKang --- OWNERS_ALIASES | 30 + config.toml | 26 +- .../includes/default-storage-class-prereqs.md | 6 - .../federated-task-tutorial-prereqs.md | 8 - .../cn/includes/federation-content-moved.md | 2 - .../cn/includes/federation-current-state.md | 7 - content/cn/includes/index.md | 3 - content/cn/includes/task-tutorial-prereqs.md | 8 - .../cn/includes/user-guide-content-moved.md | 3 - .../includes/user-guide-migration-notice.md | 12 - content/en/OWNERS | 11 + content/en/docs/contribute/localization.md | 183 +++-- content/ja/OWNERS | 11 + content/ko/OWNERS | 11 + content/zh/OWNERS | 11 + content/{cn => zh}/_index.html | 0 ...16-04-00-Kubernetes-Network-Policy-APIs.md | 182 +++++ .../_posts/2016-04-00-Kubernetes-On-Aws_15.md | 129 ++++ ...3-00-Principles-Of-Container-App-Design.md | 81 +++ .../2018-06-28-Airflow-Kubernetes-Operator.md | 676 ++++++++++++++++++ ...18-07-09-IPVS-In-Cluster-Load-Balancing.md | 401 +++++++++++ content/{cn => zh}/docs/.gitkeep | 0 content/{cn => zh}/docs/_index.md | 0 .../docs/admin/accessing-the-api.md | 0 .../docs/admin/authorization/_index.md | 0 .../docs/admin/authorization/abac.md | 0 .../docs/admin/authorization/webhook.md | 0 .../{cn => zh}/docs/admin/bootstrap-tokens.md | 0 .../{cn => zh}/docs/admin/cluster-large.md | 0 content/{cn => zh}/docs/admin/daemon.yaml | 0 .../docs/admin/high-availability/_index.md | 0 .../{cn => zh}/docs/admin/kube-apiserver.md | 0 .../kubelet-authentication-authorization.md | 0 .../docs/admin/kubelet-tls-bootstrapping.md | 0 .../{cn => zh}/docs/admin/multiple-zones.md | 0 .../{cn => zh}/docs/admin/node-conformance.md | 0 .../{cn => zh}/docs/admin/ovs-networking.md | 0 .../docs/admin/service-accounts-admin.md | 0 .../concepts/architecture/cloud-controller.md | 0 .../architecture/master-node-communication.md | 0 .../docs/concepts/architecture/nodes.md | 0 .../concepts/cluster-administration/addons.md | 0 .../cluster-administration/certificates.md | 0 .../cluster-administration/cloud-providers.md | 0 .../cluster-administration-overview.md | 0 .../cluster-administration/device-plugins.md | 0 .../cluster-administration/federation.md | 0 .../cluster-administration/proxies.md | 0 .../cluster-administration/sysctl-cluster.md | 0 .../docs/concepts/configuration/commands.yaml | 0 .../manage-compute-resources-container.md | 0 .../configuration/pod-with-node-affinity.yaml | 0 .../configuration/pod-with-pod-affinity.yaml | 0 .../docs/concepts/configuration/pod.yaml | 0 .../docs/concepts/configuration/secret.md | 2 +- .../configuration/taint-and-toleration.md | 464 ++++++++++++ .../container-environment-variables.md | 0 .../docs/concepts/containers/images.md | 2 +- .../docs/concepts/example-concept-template.md | 0 .../docs/concepts/overview/components.md | 0 .../docs/concepts/overview/kubernetes-api.md | 0 .../concepts/overview/what-is-kubernetes.md | 0 .../kubernetes-objects.md | 0 .../nginx-deployment.yaml | 0 .../concepts/policy/pod-security-policy.md | 0 .../{cn => zh}/docs/concepts/policy/psp.yaml | 0 .../docs/concepts/policy/resource-quotas.md | 0 ...ries-to-pod-etc-hosts-with-host-aliases.md | 0 .../connect-applications-service.md | 0 .../concepts/services-networking/curlpod.yaml | 0 .../services-networking/dns-pod-service.md | 0 .../services-networking/hostaliases-pod.yaml | 0 .../concepts/services-networking/ingress.yaml | 0 .../services-networking/network-policies.md | 0 .../services-networking/nginx-secure-app.yaml | 0 .../services-networking/nginx-svc.yaml | 0 .../services-networking/run-my-nginx.yaml | 0 .../concepts/services-networking/service.md | 0 .../workloads/controllers/cron-jobs.md | 0 .../workloads/controllers/daemonset.md | 0 .../workloads/controllers/daemonset.yaml | 0 .../workloads/controllers/deployment.md | 0 .../workloads/controllers/frontend.yaml | 0 .../controllers/garbage-collection.md | 0 .../workloads/controllers/hpa-rs.yaml | 0 .../concepts/workloads/controllers/job.yaml | 0 .../workloads/controllers/my-repset.yaml | 0 .../controllers/nginx-deployment.yaml | 0 .../workloads/controllers/replication.yaml | 0 .../workloads/pods/init-containers.md | 0 .../concepts/workloads/pods/pod-lifecycle.md | 0 .../docs/concepts/workloads/pods/podpreset.md | 0 .../getting-started-guides/ubuntu/security.md | 68 ++ .../admission-controllers.md | 563 +++++++++++++++ .../access-authn-authz/authorization.md | 304 ++++++++ .../kube-proxy.md | 491 +++++++++++++ .../kube-scheduler.md | 380 ++++++++++ .../command-line-tools-reference/kubelet.md | 112 +++ content/zh/docs/reference/kubectl/kubectl.md | 178 +++++ .../reference/labels-annotations-taints.md | 0 content/zh/docs/reference/tools.md | 112 +++ content/zh/docs/setup/salt.md | 244 +++++++ .../access-cluster.md | 573 +++++++++++++++ ...icate-containers-same-pod-shared-volume.md | 0 .../configure-access-multiple-clusters.md | 0 .../configure-cloud-provider-firewall.md | 0 .../configure-dns-cluster.md | 26 + .../connecting-frontend-backend.md | 2 +- .../create-external-load-balancer.md | 322 +++++++++ .../access-application-cluster/frontend.yaml | 0 .../frontend/frontend.conf | 0 .../hello-service.yaml | 0 .../access-application-cluster/hello.yaml | 0 .../list-all-running-container-images.md | 193 +++++ ...load-balance-access-application-cluster.md | 190 +++++ ...port-forward-access-application-cluster.md | 222 ++++++ .../redis-master.yaml | 0 .../service-access-application-cluster.md | 225 ++++++ .../two-container-pod.yaml | 0 .../setup-extension-api-server.md | 112 +++ .../access-cluster-services.md | 0 .../apply-resource-quota-limit.md | 0 .../calico-network-policy.md | 0 .../change-default-storage-class.md | 0 .../change-pv-reclaim-policy.md | 0 .../administer-cluster/cluster-management.md | 0 .../cpu-constraints-pod-2.yaml | 0 .../cpu-constraints-pod-3.yaml | 0 .../cpu-constraints-pod-4.yaml | 0 .../cpu-constraints-pod.yaml | 0 .../administer-cluster/cpu-constraints.yaml | 0 .../cpu-defaults-pod-2.yaml | 0 .../cpu-defaults-pod-3.yaml | 0 .../administer-cluster/cpu-defaults-pod.yaml | 0 .../administer-cluster/cpu-defaults.yaml | 0 .../cpu-management-policies.md | 0 .../administer-cluster/cpu-memory-limit.md | 2 +- .../declare-network-policy.md | 0 .../dns-custom-nameservers.md | 0 .../dns-horizontal-autoscaler.yaml | 0 .../tasks/administer-cluster/encrypt-data.md | 323 +++++++++ ...aranteed-scheduling-critical-addon-pods.md | 0 .../kubeadm/kubeadm-upgrade-1-9.md | 453 ++++++++++++ .../administer-cluster/kubelet-config-file.md | 0 .../memory-constraints-pod-2.yaml | 0 .../memory-constraints-pod-3.yaml | 0 .../memory-constraints-pod-4.yaml | 0 .../memory-constraints-pod.yaml | 0 .../memory-constraints.yaml | 0 .../memory-defaults-pod-2.yaml | 2 +- .../memory-defaults-pod-3.yaml | 0 .../memory-defaults-pod.yaml | 0 .../administer-cluster/memory-defaults.yaml | 0 .../administer-cluster/my-scheduler.yaml | 0 .../calico-network-policy.md | 86 +++ .../cilium-network-policy.md | 133 ++++ .../kube-router-network-policy.md | 31 + .../romana-network-policy.md | 57 ++ .../weave-network-policy.md | 78 ++ .../docs/tasks/administer-cluster/pod1.yaml | 0 .../docs/tasks/administer-cluster/pod2.yaml | 0 .../docs/tasks/administer-cluster/pod3.yaml | 0 .../quota-mem-cpu-pod-2.yaml | 0 .../administer-cluster/quota-mem-cpu-pod.yaml | 0 .../administer-cluster/quota-mem-cpu.yaml | 0 .../quota-objects-pvc-2.yaml | 0 .../administer-cluster/quota-objects-pvc.yaml | 0 .../administer-cluster/quota-objects.yaml | 0 .../quota-pod-deployment.yaml | 0 .../administer-cluster/quota-pod-namespace.md | 0 .../tasks/administer-cluster/quota-pod.yaml | 0 .../tasks/administer-cluster/quota-pvc-2.yaml | 0 .../romana-network-policy.md | 0 .../tasks/administer-cluster/static-pod.md | 0 .../administer-cluster/sysctl-cluster.md | 329 +++++++++ .../weave-network-policy.md | 0 .../assign-pods-nodes.md | 135 ++++ .../cpu-request-limit-2.yaml | 0 .../cpu-request-limit.yaml | 0 .../exec-liveness.yaml | 0 .../http-liveness.yaml | 0 .../init-containers.yaml | 0 .../lifecycle-events.yaml | 0 .../mem-limit-range.yaml | 0 .../memory-request-limit-2.yaml | 0 .../memory-request-limit-3.yaml | 0 .../memory-request-limit.yaml | 0 .../configure-pod-container/oir-pod-2.yaml | 0 .../configure-pod-container/oir-pod.yaml | 0 .../opaque-integer-resource.md | 0 .../configure-pod-container/pod-redis.yaml | 0 .../tasks/configure-pod-container/pod.yaml | 0 .../private-reg-pod.yaml | 0 .../projected-volume.yaml | 0 .../configure-pod-container/qos-pod-2.yaml | 0 .../configure-pod-container/qos-pod-3.yaml | 0 .../configure-pod-container/qos-pod-4.yaml | 0 .../configure-pod-container/qos-pod.yaml | 0 .../rq-compute-resources.yaml | 0 .../security-context-2.yaml | 0 .../security-context-3.yaml | 0 .../security-context-4.yaml | 0 .../security-context.yaml | 0 .../task-pv-claim.yaml | 0 .../configure-pod-container/task-pv-pod.yaml | 0 .../task-pv-volume.yaml | 0 .../tcp-liveness-readiness.yaml | 0 .../tasks/debug-application-cluster/audit.md | 612 ++++++++++++++++ .../debug-application.md | 0 .../debug-cluster.md | 0 .../debug-pod-replication-controller.md | 0 .../debug-stateful-set.md | 0 .../inject-data-application/commands.yaml | 0 .../dapi-envars-container.yaml | 0 .../dapi-envars-pod.yaml | 0 .../dapi-volume-resources.yaml | 0 .../inject-data-application/dapi-volume.yaml | 0 .../define-command-argument-container.md | 0 .../define-environment-variable-container.md | 2 +- .../distribute-credentials-secure.md | 0 ...nward-api-volume-expose-pod-information.md | 2 +- .../tasks/inject-data-application/envars.yaml | 0 ...ronment-variable-expose-pod-information.md | 0 .../podpreset-allow-db-merged.yaml | 0 .../podpreset-allow-db.yaml | 0 .../podpreset-configmap.yaml | 0 .../podpreset-conflict-pod.yaml | 0 .../podpreset-conflict-preset.yaml | 0 .../podpreset-merged.yaml | 0 .../podpreset-multi-merged.yaml | 0 .../podpreset-pod.yaml | 0 .../podpreset-preset.yaml | 0 .../podpreset-proxy.yaml | 0 .../podpreset-replicaset-merged.yaml | 0 .../podpreset-replicaset.yaml | 0 .../inject-data-application/podpreset.md | 0 .../secret-envars-pod.yaml | 0 .../inject-data-application/secret-pod.yaml | 0 .../tasks/inject-data-application/secret.yaml | 0 .../fine-parallel-processing-work-queue.md | 380 ++++++++++ .../manage-daemon/rollback-daemon-set.md | 0 .../docs/tasks/manage-gpus/scheduling-gpus.md | 0 .../manage-hugepages/scheduling-hugepages.md | 0 .../deployment-patch-demo.yaml | 0 .../run-application/deployment-scale.yaml | 0 .../run-application/deployment-update.yaml | 0 .../tasks/run-application/deployment.yaml | 0 .../tasks/run-application/gce-volume.yaml | 0 .../run-application/mysql-configmap.yaml | 0 .../run-application/mysql-deployment.yaml | 0 .../tasks/run-application/mysql-services.yaml | 0 .../run-application/mysql-statefulset.yaml | 0 .../rolling-update-replication-controller.md | 0 ...un-single-instance-stateful-application.md | 0 .../run-stateless-application-deployment.md | 0 .../run-application/scale-stateful-set.md | 0 .../docs/tasks/tls/certificate-rotation.md | 0 content/{cn => zh}/docs/templates/index.md | 0 .../configure-redis-using-configmap.md | 0 .../tutorials/kubernetes-basics/_index.html | 0 .../cluster-interactive.html | 0 .../kubernetes-basics/cluster-intro.html | 0 .../kubernetes-basics/deploy-interactive.html | 0 .../kubernetes-basics/deploy-intro.html | 0 .../explore-interactive.html | 0 .../kubernetes-basics/explore-intro.html | 0 .../kubernetes-basics/expose-interactive.html | 0 .../kubernetes-basics/expose-intro.html | 0 .../kubernetes-basics/scale-interactive.html | 0 .../kubernetes-basics/scale-intro.html | 0 .../kubernetes-basics/scale/scale-intro.html | 136 ++++ .../kubernetes-basics/update-interactive.html | 0 .../kubernetes-basics/update-intro.html | 0 .../imperative-object-management-command.md | 0 .../object-management.md | 0 .../docs/tutorials/services/source-ip.md | 4 +- .../tutorials/stateful-application/Dockerfile | 0 .../tutorials/stateful-application/FETCH_HEAD | 0 .../basic-stateful-set.md | 3 +- .../cassandra-service.yaml | 0 .../cassandra-statefulset.yaml | 0 .../stateful-application/cassandra.md | 0 .../docs/tutorials/stateful-application/dev | 0 .../mysql-wordpress-persistent-volume.md | 4 +- .../local-volumes.yaml | 0 .../mysql-deployment.yaml | 0 .../wordpress-deployment.yaml | 0 .../tutorials/stateful-application/web.yaml | 0 .../tutorials/stateful-application/webp.yaml | 0 .../stateful-application/zookeeper.md | 0 .../stateful-application/zookeeper.yaml | 0 .../docs/user-guide/bad-nginx-deployment.yaml | 0 .../{cn => zh}/docs/user-guide/curlpod.yaml | 0 .../docs/user-guide/deployment.yaml | 0 .../docs/user-guide/docker-cli-to-kubectl.md | 0 .../{cn => zh}/docs/user-guide/ingress.yaml | 0 content/{cn => zh}/docs/user-guide/job.yaml | 0 .../{cn => zh}/docs/user-guide/jsonpath.md | 0 .../docs/user-guide/kubectl-overview.md | 0 .../{cn => zh}/docs/user-guide/multi-pod.yaml | 0 .../docs/user-guide/new-nginx-deployment.yaml | 0 .../{cn => zh}/docs/user-guide/nginx-app.yaml | 0 .../docs/user-guide/nginx-deployment.yaml | 0 .../user-guide/nginx-init-containers.yaml | 0 .../nginx-lifecycle-deployment.yaml | 0 .../user-guide/nginx-probe-deployment.yaml | 0 .../docs/user-guide/nginx-secure-app.yaml | 0 .../{cn => zh}/docs/user-guide/nginx-svc.yaml | 0 .../docs/user-guide/pod-w-message.yaml | 0 content/{cn => zh}/docs/user-guide/pod.yaml | 0 .../docs/user-guide/redis-deployment.yaml | 0 .../user-guide/redis-resource-deployment.yaml | 0 .../user-guide/redis-secret-deployment.yaml | 0 .../docs/user-guide/run-my-nginx.yaml | 0 content/{cn => zh}/docs/whatisk8s.md | 0 layouts/shortcodes/language-repos-list.html | 38 - 316 files changed, 9227 insertions(+), 169 deletions(-) delete mode 100644 content/cn/includes/default-storage-class-prereqs.md delete mode 100644 content/cn/includes/federated-task-tutorial-prereqs.md delete mode 100644 content/cn/includes/federation-content-moved.md delete mode 100644 content/cn/includes/federation-current-state.md delete mode 100644 content/cn/includes/index.md delete mode 100644 content/cn/includes/task-tutorial-prereqs.md delete mode 100644 content/cn/includes/user-guide-content-moved.md delete mode 100644 content/cn/includes/user-guide-migration-notice.md create mode 100644 content/en/OWNERS create mode 100644 content/ja/OWNERS create mode 100644 content/ko/OWNERS create mode 100644 content/zh/OWNERS rename content/{cn => zh}/_index.html (100%) create mode 100644 content/zh/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md create mode 100644 content/zh/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md create mode 100644 content/zh/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md create mode 100644 content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md create mode 100644 content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md rename content/{cn => zh}/docs/.gitkeep (100%) rename content/{cn => zh}/docs/_index.md (100%) rename content/{cn => zh}/docs/admin/accessing-the-api.md (100%) rename content/{cn => zh}/docs/admin/authorization/_index.md (100%) rename content/{cn => zh}/docs/admin/authorization/abac.md (100%) rename content/{cn => zh}/docs/admin/authorization/webhook.md (100%) rename content/{cn => zh}/docs/admin/bootstrap-tokens.md (100%) rename content/{cn => zh}/docs/admin/cluster-large.md (100%) rename content/{cn => zh}/docs/admin/daemon.yaml (100%) rename content/{cn => zh}/docs/admin/high-availability/_index.md (100%) rename content/{cn => zh}/docs/admin/kube-apiserver.md (100%) rename content/{cn => zh}/docs/admin/kubelet-authentication-authorization.md (100%) rename content/{cn => zh}/docs/admin/kubelet-tls-bootstrapping.md (100%) rename content/{cn => zh}/docs/admin/multiple-zones.md (100%) rename content/{cn => zh}/docs/admin/node-conformance.md (100%) rename content/{cn => zh}/docs/admin/ovs-networking.md (100%) rename content/{cn => zh}/docs/admin/service-accounts-admin.md (100%) rename content/{cn => zh}/docs/concepts/architecture/cloud-controller.md (100%) rename content/{cn => zh}/docs/concepts/architecture/master-node-communication.md (100%) rename content/{cn => zh}/docs/concepts/architecture/nodes.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/addons.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/certificates.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/cloud-providers.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/cluster-administration-overview.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/device-plugins.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/federation.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/proxies.md (100%) rename content/{cn => zh}/docs/concepts/cluster-administration/sysctl-cluster.md (100%) rename content/{cn => zh}/docs/concepts/configuration/commands.yaml (100%) rename content/{cn => zh}/docs/concepts/configuration/manage-compute-resources-container.md (100%) rename content/{cn => zh}/docs/concepts/configuration/pod-with-node-affinity.yaml (100%) rename content/{cn => zh}/docs/concepts/configuration/pod-with-pod-affinity.yaml (100%) rename content/{cn => zh}/docs/concepts/configuration/pod.yaml (100%) rename content/{cn => zh}/docs/concepts/configuration/secret.md (98%) create mode 100755 content/zh/docs/concepts/configuration/taint-and-toleration.md rename content/{cn => zh}/docs/concepts/containers/container-environment-variables.md (100%) rename content/{cn => zh}/docs/concepts/containers/images.md (99%) rename content/{cn => zh}/docs/concepts/example-concept-template.md (100%) rename content/{cn => zh}/docs/concepts/overview/components.md (100%) rename content/{cn => zh}/docs/concepts/overview/kubernetes-api.md (100%) rename content/{cn => zh}/docs/concepts/overview/what-is-kubernetes.md (100%) rename content/{cn => zh}/docs/concepts/overview/working-with-objects/kubernetes-objects.md (100%) rename content/{cn => zh}/docs/concepts/overview/working-with-objects/nginx-deployment.yaml (100%) rename content/{cn => zh}/docs/concepts/policy/pod-security-policy.md (100%) rename content/{cn => zh}/docs/concepts/policy/psp.yaml (100%) rename content/{cn => zh}/docs/concepts/policy/resource-quotas.md (100%) rename content/{cn => zh}/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md (100%) rename content/{cn => zh}/docs/concepts/services-networking/connect-applications-service.md (100%) rename content/{cn => zh}/docs/concepts/services-networking/curlpod.yaml (100%) rename content/{cn => zh}/docs/concepts/services-networking/dns-pod-service.md (100%) rename content/{cn => zh}/docs/concepts/services-networking/hostaliases-pod.yaml (100%) rename content/{cn => zh}/docs/concepts/services-networking/ingress.yaml (100%) rename content/{cn => zh}/docs/concepts/services-networking/network-policies.md (100%) rename content/{cn => zh}/docs/concepts/services-networking/nginx-secure-app.yaml (100%) rename content/{cn => zh}/docs/concepts/services-networking/nginx-svc.yaml (100%) rename content/{cn => zh}/docs/concepts/services-networking/run-my-nginx.yaml (100%) rename content/{cn => zh}/docs/concepts/services-networking/service.md (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/cron-jobs.md (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/daemonset.md (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/daemonset.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/deployment.md (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/frontend.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/garbage-collection.md (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/hpa-rs.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/job.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/my-repset.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/nginx-deployment.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/controllers/replication.yaml (100%) rename content/{cn => zh}/docs/concepts/workloads/pods/init-containers.md (100%) rename content/{cn => zh}/docs/concepts/workloads/pods/pod-lifecycle.md (100%) rename content/{cn => zh}/docs/concepts/workloads/pods/podpreset.md (100%) create mode 100644 content/zh/docs/getting-started-guides/ubuntu/security.md create mode 100755 content/zh/docs/reference/access-authn-authz/admission-controllers.md create mode 100644 content/zh/docs/reference/access-authn-authz/authorization.md create mode 100644 content/zh/docs/reference/command-line-tools-reference/kube-proxy.md create mode 100644 content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md create mode 100644 content/zh/docs/reference/command-line-tools-reference/kubelet.md create mode 100644 content/zh/docs/reference/kubectl/kubectl.md rename content/{cn => zh}/docs/reference/labels-annotations-taints.md (100%) create mode 100644 content/zh/docs/reference/tools.md create mode 100755 content/zh/docs/setup/salt.md create mode 100644 content/zh/docs/tasks/access-application-cluster/access-cluster.md rename content/{cn => zh}/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md (100%) rename content/{cn => zh}/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md (100%) rename content/{cn => zh}/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md (100%) create mode 100644 content/zh/docs/tasks/access-application-cluster/configure-dns-cluster.md rename content/{cn => zh}/docs/tasks/access-application-cluster/connecting-frontend-backend.md (98%) create mode 100644 content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md rename content/{cn => zh}/docs/tasks/access-application-cluster/frontend.yaml (100%) rename content/{cn => zh}/docs/tasks/access-application-cluster/frontend/frontend.conf (100%) rename content/{cn => zh}/docs/tasks/access-application-cluster/hello-service.yaml (100%) rename content/{cn => zh}/docs/tasks/access-application-cluster/hello.yaml (100%) create mode 100644 content/zh/docs/tasks/access-application-cluster/list-all-running-container-images.md create mode 100644 content/zh/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md create mode 100644 content/zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md rename content/{cn => zh}/docs/tasks/access-application-cluster/redis-master.yaml (100%) create mode 100644 content/zh/docs/tasks/access-application-cluster/service-access-application-cluster.md rename content/{cn => zh}/docs/tasks/access-application-cluster/two-container-pod.yaml (100%) create mode 100644 content/zh/docs/tasks/access-kubernetes-api/setup-extension-api-server.md rename content/{cn => zh}/docs/tasks/administer-cluster/access-cluster-services.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/apply-resource-quota-limit.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/calico-network-policy.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/change-default-storage-class.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/change-pv-reclaim-policy.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cluster-management.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-constraints-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-constraints.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-defaults-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-defaults.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-management-policies.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/cpu-memory-limit.md (99%) rename content/{cn => zh}/docs/tasks/administer-cluster/declare-network-policy.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/dns-custom-nameservers.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml (100%) create mode 100644 content/zh/docs/tasks/administer-cluster/encrypt-data.md rename content/{cn => zh}/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md (100%) create mode 100644 content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md rename content/{cn => zh}/docs/tasks/administer-cluster/kubelet-config-file.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-constraints-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-constraints.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml (81%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-defaults-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/memory-defaults.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/my-scheduler.yaml (100%) create mode 100644 content/zh/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy.md create mode 100644 content/zh/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy.md create mode 100644 content/zh/docs/tasks/administer-cluster/network-policy-provider/kube-router-network-policy.md create mode 100644 content/zh/docs/tasks/administer-cluster/network-policy-provider/romana-network-policy.md create mode 100644 content/zh/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy.md rename content/{cn => zh}/docs/tasks/administer-cluster/pod1.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/pod2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/pod3.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-mem-cpu.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-objects-pvc.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-objects.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-pod-deployment.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-pod-namespace.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/quota-pvc-2.yaml (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/romana-network-policy.md (100%) rename content/{cn => zh}/docs/tasks/administer-cluster/static-pod.md (100%) create mode 100644 content/zh/docs/tasks/administer-cluster/sysctl-cluster.md rename content/{cn => zh}/docs/tasks/administer-cluster/weave-network-policy.md (100%) create mode 100644 content/zh/docs/tasks/configure-pod-container/assign-pods-nodes.md rename content/{cn => zh}/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/cpu-request-limit.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/exec-liveness.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/http-liveness.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/init-containers.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/lifecycle-events.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/mem-limit-range.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/memory-request-limit-2.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/memory-request-limit-3.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/memory-request-limit.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/oir-pod-2.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/oir-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/opaque-integer-resource.md (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/pod-redis.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/pod.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/private-reg-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/projected-volume.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/qos-pod-2.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/qos-pod-3.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/qos-pod-4.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/qos-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/rq-compute-resources.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/security-context-2.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/security-context-3.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/security-context-4.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/security-context.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/task-pv-claim.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/task-pv-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/task-pv-volume.yaml (100%) rename content/{cn => zh}/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml (100%) create mode 100644 content/zh/docs/tasks/debug-application-cluster/audit.md rename content/{cn => zh}/docs/tasks/debug-application-cluster/debug-application.md (100%) rename content/{cn => zh}/docs/tasks/debug-application-cluster/debug-cluster.md (100%) rename content/{cn => zh}/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md (100%) rename content/{cn => zh}/docs/tasks/debug-application-cluster/debug-stateful-set.md (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/commands.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/dapi-envars-container.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/dapi-envars-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/dapi-volume-resources.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/dapi-volume.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/define-command-argument-container.md (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/define-environment-variable-container.md (96%) rename content/{cn => zh}/docs/tasks/inject-data-application/distribute-credentials-secure.md (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md (98%) rename content/{cn => zh}/docs/tasks/inject-data-application/envars.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-allow-db.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-configmap.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-merged.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-multi-merged.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-preset.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-proxy.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset-replicaset.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/podpreset.md (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/secret-envars-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/secret-pod.yaml (100%) rename content/{cn => zh}/docs/tasks/inject-data-application/secret.yaml (100%) create mode 100755 content/zh/docs/tasks/job/fine-parallel-processing-work-queue.md rename content/{cn => zh}/docs/tasks/manage-daemon/rollback-daemon-set.md (100%) rename content/{cn => zh}/docs/tasks/manage-gpus/scheduling-gpus.md (100%) rename content/{cn => zh}/docs/tasks/manage-hugepages/scheduling-hugepages.md (100%) rename content/{cn => zh}/docs/tasks/run-application/deployment-patch-demo.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/deployment-scale.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/deployment-update.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/deployment.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/gce-volume.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/mysql-configmap.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/mysql-deployment.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/mysql-services.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/mysql-statefulset.yaml (100%) rename content/{cn => zh}/docs/tasks/run-application/rolling-update-replication-controller.md (100%) rename content/{cn => zh}/docs/tasks/run-application/run-single-instance-stateful-application.md (100%) rename content/{cn => zh}/docs/tasks/run-application/run-stateless-application-deployment.md (100%) rename content/{cn => zh}/docs/tasks/run-application/scale-stateful-set.md (100%) rename content/{cn => zh}/docs/tasks/tls/certificate-rotation.md (100%) rename content/{cn => zh}/docs/templates/index.md (100%) rename content/{cn => zh}/docs/tutorials/configuration/configure-redis-using-configmap.md (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/_index.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/cluster-interactive.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/cluster-intro.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/deploy-interactive.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/deploy-intro.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/explore-interactive.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/explore-intro.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/expose-interactive.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/expose-intro.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/scale-interactive.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/scale-intro.html (100%) create mode 100644 content/zh/docs/tutorials/kubernetes-basics/scale/scale-intro.html rename content/{cn => zh}/docs/tutorials/kubernetes-basics/update-interactive.html (100%) rename content/{cn => zh}/docs/tutorials/kubernetes-basics/update-intro.html (100%) rename content/{cn => zh}/docs/tutorials/object-management-kubectl/imperative-object-management-command.md (100%) rename content/{cn => zh}/docs/tutorials/object-management-kubectl/object-management.md (100%) rename content/{cn => zh}/docs/tutorials/services/source-ip.md (95%) rename content/{cn => zh}/docs/tutorials/stateful-application/Dockerfile (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/FETCH_HEAD (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/basic-stateful-set.md (99%) rename content/{cn => zh}/docs/tutorials/stateful-application/cassandra-service.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/cassandra-statefulset.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/cassandra.md (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/dev (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md (98%) rename content/{cn => zh}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/web.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/webp.yaml (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/zookeeper.md (100%) rename content/{cn => zh}/docs/tutorials/stateful-application/zookeeper.yaml (100%) rename content/{cn => zh}/docs/user-guide/bad-nginx-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/curlpod.yaml (100%) rename content/{cn => zh}/docs/user-guide/deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/docker-cli-to-kubectl.md (100%) rename content/{cn => zh}/docs/user-guide/ingress.yaml (100%) rename content/{cn => zh}/docs/user-guide/job.yaml (100%) rename content/{cn => zh}/docs/user-guide/jsonpath.md (100%) rename content/{cn => zh}/docs/user-guide/kubectl-overview.md (100%) rename content/{cn => zh}/docs/user-guide/multi-pod.yaml (100%) rename content/{cn => zh}/docs/user-guide/new-nginx-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-app.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-init-containers.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-lifecycle-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-probe-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-secure-app.yaml (100%) rename content/{cn => zh}/docs/user-guide/nginx-svc.yaml (100%) rename content/{cn => zh}/docs/user-guide/pod-w-message.yaml (100%) rename content/{cn => zh}/docs/user-guide/pod.yaml (100%) rename content/{cn => zh}/docs/user-guide/redis-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/redis-resource-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/redis-secret-deployment.yaml (100%) rename content/{cn => zh}/docs/user-guide/run-my-nginx.yaml (100%) rename content/{cn => zh}/docs/whatisk8s.md (100%) delete mode 100644 layouts/shortcodes/language-repos-list.html diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index d2968dbe7c..22150b331b 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -130,6 +130,36 @@ aliases: - rajakavitha1 - stewart-yu - xiangpengzhao + - zhangxiaoyu + sig-docs-ja-owners: #Team: Japanese docs localization; GH: sig-docs-ja-owners + - cstoku + - nasa9084 + - tnir + sig-docs-ja-reviews: #Team: Japanese docs PR reviews; GH:sig-docs-ja-reviews + - cstoku + - makocchi-git + - MasayaAoyama + - nasa9084 + - tnir + sig-docs-ko-owners: #Team Korean docs localization; GH: sig-docs-ko-owners + - ClaudiaJKang + - gochist + sig-docs-ko-reviews: #Team Korean docs reviews; GH: sig-docs-ko-reviews + - ClaudiaJKang + - gochist + - ianychoi + sig-docs-zh-owners: #Team Chinese docs localization; GH: sig-docs-zh-owners + - dchen1107 + - haibinxie + - hanjiayao + - lichuqiang + - tengqm + - xiangpengzhao + - zhangxiaoyu-zidif + sig-docs-zh-reviews: #Team Chinese docs reviews; GH: sig-docs-zh-reviews + - tengqm + - xiangpengzhao + - zhangxiaoyu-zidif sig-federation: #Team: Federation; e.g. Federated Clusters - csbell diff --git a/config.toml b/config.toml index 00a0844910..6d780612c1 100644 --- a/config.toml +++ b/config.toml @@ -7,7 +7,7 @@ enableRobotsTXT = true disableKinds = ["taxonomy", "taxonomyTerm"] -ignoreFiles = [ "^OWNERS$", "README.md", "^node_modules$", "content/en/docs/doc-contributor-tools" ] +ignoreFiles = [ "^OWNERS$", "README[-]+[a-z]*\.md", "^node_modules$", "content/en/docs/doc-contributor-tools" ] contentDir = "content/en" @@ -131,25 +131,29 @@ description = "Production-Grade Container Orchestration" languageName ="English" # Weight used for sorting. weight = 1 -[languages.cn] + +[languages.zh] title = "Kubernetes" description = "Production-Grade Container Orchestration" -languageName = "Chinese" +languageName = "中文 Chinese" weight = 2 -contentDir = "content/cn" +contentDir = "content/zh" + +[languages.ko] +title = "Kubernetes" +description = "Production-Grade Container Orchestration" +languageName = "한국어 Korean" +weight = 3 +contentDir = "content/ko" + [languages.no] title = "Kubernetes" description = "Production-Grade Container Orchestration" languageName ="Norsk" -weight = 3 +weight = 4 contentDir = "content/no" + [languages.no.params] time_format_blog = "02.01.2006" # A list of language codes to look for untranslated content, ordered from left to right. language_alternatives = ["en"] -[languages.ko] -title = "Kubernetes" -description = "Production-Grade Container Orchestration" -languageName = "Korean" -weight = 4 -contentDir = "content/ko" diff --git a/content/cn/includes/default-storage-class-prereqs.md b/content/cn/includes/default-storage-class-prereqs.md deleted file mode 100644 index ef4823318d..0000000000 --- a/content/cn/includes/default-storage-class-prereqs.md +++ /dev/null @@ -1,6 +0,0 @@ -You need to either have a dynamic PersistentVolume provisioner with a default -[StorageClass](/docs/concepts/storage/storage-classes/), -or [statically provision PersistentVolumes](/docs/user-guide/persistent-volumes/#provisioning) -yourself to satisfy the [PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims) -used here. - diff --git a/content/cn/includes/federated-task-tutorial-prereqs.md b/content/cn/includes/federated-task-tutorial-prereqs.md deleted file mode 100644 index c5ec939c07..0000000000 --- a/content/cn/includes/federated-task-tutorial-prereqs.md +++ /dev/null @@ -1,8 +0,0 @@ -This guide assumes that you have a running Kubernetes Cluster -Federation installation. If not, then head over to the -[federation admin guide](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) to learn how to -bring up a cluster federation (or have your cluster administrator do -this for you). -Other tutorials, such as Kelsey Hightower's -[Federated Kubernetes Tutorial](https://github.com/kelseyhightower/kubernetes-cluster-federation), -might also help you create a Federated Kubernetes cluster. \ No newline at end of file diff --git a/content/cn/includes/federation-content-moved.md b/content/cn/includes/federation-content-moved.md deleted file mode 100644 index 87a10e7199..0000000000 --- a/content/cn/includes/federation-content-moved.md +++ /dev/null @@ -1,2 +0,0 @@ -The topics in the [Federation API](/docs/federation/api-reference/) section of the Kubernetes docs -are being moved to the [Reference](/docs/reference/) section. The content in this topic has moved to: diff --git a/content/cn/includes/federation-current-state.md b/content/cn/includes/federation-current-state.md deleted file mode 100644 index 56e4decdf3..0000000000 --- a/content/cn/includes/federation-current-state.md +++ /dev/null @@ -1,7 +0,0 @@ -**Note:** `Federation V1`, the current Kubernetes federation API which reuses the Kubernetes API -resources 'as is', is currently considered alpha for many of its features, and there is no clear -path to evolve the API to GA. However, there is a `Federation V2` effort in progress to implement -a dedicated federation API apart from the Kubernetes API. The details can be found at -[sig-multicluster community page](https://github.com/kubernetes/community/tree/master/sig-multicluster). -{: .note} - diff --git a/content/cn/includes/index.md b/content/cn/includes/index.md deleted file mode 100644 index ca03031f1e..0000000000 --- a/content/cn/includes/index.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -headless: true ---- diff --git a/content/cn/includes/task-tutorial-prereqs.md b/content/cn/includes/task-tutorial-prereqs.md deleted file mode 100644 index 6f1407fe45..0000000000 --- a/content/cn/includes/task-tutorial-prereqs.md +++ /dev/null @@ -1,8 +0,0 @@ -You need to have a Kubernetes cluster, and the kubectl command-line tool must -be configured to communicate with your cluster. If you do not already have a -cluster, you can create one by using -[Minikube](/docs/getting-started-guides/minikube), -or you can use one of these Kubernetes playgrounds: - -* [Katacoda](https://www.katacoda.com/courses/kubernetes/playground) -* [Play with Kubernetes](http://labs.play-with-k8s.com/) diff --git a/content/cn/includes/user-guide-content-moved.md b/content/cn/includes/user-guide-content-moved.md deleted file mode 100644 index 8b93e29f12..0000000000 --- a/content/cn/includes/user-guide-content-moved.md +++ /dev/null @@ -1,3 +0,0 @@ -The topics in the [User Guide](/docs/user-guide/) section of the Kubernetes docs -are being moved to the [Tasks](/docs/tasks/), [Tutorials](/docs/tutorials/), and -[Concepts](/docs/concepts) sections. The content in this topic has moved to: diff --git a/content/cn/includes/user-guide-migration-notice.md b/content/cn/includes/user-guide-migration-notice.md deleted file mode 100644 index 366a05907c..0000000000 --- a/content/cn/includes/user-guide-migration-notice.md +++ /dev/null @@ -1,12 +0,0 @@ - - -

loadBalancerIP

Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.

Only applies to Service Type: LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.

false

string

- - - -
-

NOTICE

-

As of March 14, 2017, the Kubernetes SIG-Docs-Maintainers group have begun migration of the User Guide content as announced previously to the SIG Docs community through the kubernetes-sig-docs group and kubernetes.slack.com #sig-docs channel.

-

The user guides within this section are being refactored into topics within Tutorials, Tasks, and Concepts. Anything that has been moved will have a notice placed in its previous location as well as a link to its new location. The reorganization implements a new table of contents and should improve the documentation's findability and readability for a wider range of audiences.

-

For any questions, please contact: kubernetes-sig-docs@googlegroups.com

-
diff --git a/content/en/OWNERS b/content/en/OWNERS new file mode 100644 index 0000000000..52f02277d4 --- /dev/null +++ b/content/en/OWNERS @@ -0,0 +1,11 @@ +# This is the directory for English source content. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-en-reviews + +approvers: +- sig-docs-en-owners + +labels: +- language/en diff --git a/content/en/docs/contribute/localization.md b/content/en/docs/contribute/localization.md index 2f8c870d0d..90d3c51ccf 100644 --- a/content/en/docs/contribute/localization.md +++ b/content/en/docs/contribute/localization.md @@ -4,17 +4,19 @@ content_template: templates/concept approvers: - chenopis - zacharysarah +- zparnold --- {{% capture overview %}} -The Kubernetes documentation is currently available in [multiple languages](#supported-languages) and we encourage you to add new localizations ([l10n](https://blog.mozilla.org/l10n/2011/12/14/i18n-vs-l10n-whats-the-diff/))! +Documentation for Kubernetes is available in multiple languages: -Currently available languages: +- English +- Chinese +- Japanese +- Korean -{{< language-repos-list >}} - -In order for localizations to be accepted, however, they must fulfill some requirements related to workflow (*how* to localize) and output (*what* to localize). +We encourage you to add new [localizations](https://blog.mozilla.org/l10n/2011/12/14/i18n-vs-l10n-whats-the-diff/)! {{% /capture %}} @@ -22,42 +24,51 @@ In order for localizations to be accepted, however, they must fulfill some requi {{% capture body %}} -## Workflow - -The Kubernetes documentation for all languages is built from the [kubernetes/website](https://github.com/kubernetes/website) repository on GitHub. Most day-to-work work on translations, however, happens in separate translation repositories. Changes to those repositories are then [periodically](#upstream-contributions) synced to the main kubernetes/website repository via [pull request](../create-pull-request). - -Work on the Chinese translation, for example, happens in the [kubernetes/kubernetes-docs-zh](https://github.com/kubernetes/kubernetes-docs-zh) repository. - -{{< note >}} -**Note**: For an example localization-related [pull request](../create-pull-request), see [this pull request](https://github.com/kubernetes/website/pull/8636) to the [Kubernetes website repo](https://github.com/kubernetes/website) adding Korean localization to the Kubernetes docs. -{{< /note >}} - -## Source Files - -Localizations must use English files from the most recent major release as sources. To find the most recent release's documentation source files: - -1. Navigate to the Kubernetes website repository at https://github.com/kubernetes/website. -2. Select the `release-1.X` branch for the most recent version, which is currently **{{< latest-version >}}**, making the most recent release branch [`{{< release-branch >}}`](https://github.com/kubernetes/website/tree/{{< release-branch >}}). - ## Getting started -In order to add a new localization of the Kubernetes documentation, you'll need to make a few modifications to the site's [configuration](#configuration) and [directory structure](#new-directory), and then you can get to work [translating documents](#translating-documents)! +Localizations must meet some requirements for workflow (*how* to localize) and output (*what* to localize). -To get started, clone the website repo and `cd` into it: +To add a new localization of the Kubernetes documentation, you'll need to update the website by modifying the [site configuration](#modify-the-site-configuration) and [directory structure](#add-a-new-localization-directory). Then you can start [translating documents](#translating-documents)! + +Let Kubernetes SIG Docs know you're interested in creating a localization! Join the [SIG Docs Slack channel](https://kubernetes.slack.com/messages/C1J0BPD2M/). We're happy to help you get started and answer any questions you have. + +All localization teams must be self-sustaining with their own resources. We're happy to host your work, but we can't translate it for you. + +### Fork and clone the repo + +First, [create your own fork](https://help.github.com/articles/fork-a-repo/) of the [kubernetes/website](https://github.com/kubernetes/website). + +Then, clone the website repo and `cd` into it: ```shell git clone https://github.com/kubernetes/website cd website -git checkout {{< release-branch >}} ``` -## Configuration +{{< note >}} +Contributors to `k/website` must [create a fork](https://kubernetes.io/docs/contribute/start/#improve-existing-content) from which to open pull requests. For localizations, we ask additionally that: -We'll walk you through the configuration process using the German language (language code `de`) as an example. +1. Team approvers open development branches directly from https://github.com/kubernetes/website. +2. Localization contributors work from forks, with branches based on the current development branch. -There's currently no translation for German, but you're welcome to create one using the instructions here. +This is because localization projects are collaborative efforts on long-running branches, similar to the development branches for the Kubernetes release cycle. For information about localization pull requests, see ["branching strategy"](#branching-strategy). +{{< /note >}} -The Kubernetes website's configuration is in the [`config.toml`](https://github.com/kubernetes/website/tree/master/config.toml) file. You need to add a configuration block for the new language to that file, under the existing `[languages]` block. The German block, for example, looks like this: +### Find your two-letter language code + +Consult the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) for your localization's two-letter country code. For example, the two-letter code for German is `de`. + +{{< note >}} +These instructions use the [ISO 639-1](https://www.loc.gov/standards/iso639-2/php/code_list.php) language code for German (`de`) as an example. + +There's currently no Kubernetes localization for German, but you're welcome to create one! +{{< /note >}} + +### Modify the site configuration + +The Kubernetes website uses Hugo as its web framework. The website's Hugo configuration resides in the [`config.toml`](https://github.com/kubernetes/website/tree/master/config.toml) file. To support a new localization, you'll need to modify `config.toml`. + +Add a configuration block for the new language to `config.toml`, under the existing `[languages]` block. The German block, for example, looks like: ```toml [languages.de] @@ -68,74 +79,128 @@ contentDir = "content/de" weight = 3 ``` -When assigning a `weight` parameter, see which of the current languages has the highest weight and add 1 to that value. +When assigning a `weight` parameter for your block, find the language block with the highest weight and add 1 to that value. -Now add a language-specific subdirectory to the [`content`](https://github.com/kubernetes/website/tree/master/content) folder. The two-letter code for German is `de`, so add a `content/de` directory: +For more information about Hugo's multilingual support, see "[Multilingual Mode](https://gohugo.io/content-management/multilingual/)". + +### Add a new localization directory + +Add a language-specific subdirectory to the [`content`](https://github.com/kubernetes/website/tree/master/content) folder in the repository. For example, the two-letter code for German is `de`: ```shell mkdir content/de ``` +### Add a localized README + +To guide other localization contributors, add a new [`README-**.md`](https://help.github.com/articles/about-readmes/) to the top level of k/website, where `**` is the two-letter language code. For example, a German README file would be `README-de.md`. + +Provide guidance to localization contributors in the localized `README-**.md` file. Include the same information contained in `README.md` as well as: + +- A point of contact for the localization project +- Any information specific to the localization + +After you create the localized README, add a link to the file from the main English file, [`README.md`] and include contact information in English. You can provide a GitHub ID, email address, [Slack channel](https://slack.com/), or other method of contact. + ## Translating documents -We understand that localizing *all* of the Kubernetes documentation would be an enormous task. We're okay with localizations smarting small and expanding over time. +Localizing *all* of the Kubernetes documentation is an enormous task. It's okay to start small and expand over time. -As an initial requirement, all localizations must include the following documentation at a minimum: +At a minimum, all localizations must include: Description | URLs -----|----- Home | [All heading and subheading URLs](https://kubernetes.io/docs/home/) Setup | [All heading and subheading URLs](https://kubernetes.io/docs/setup/) Tutorials | [Kubernetes Basics](https://kubernetes.io/docs/tutorials/kubernetes-basics/), [Hello Minikube](https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/) +Site strings | [All site strings in a new localized TOML file](https://github.com/kubernetes/website/tree/master/i18n) -Translated documents should have the same URL endpoint as the English docs (substituting the subdirectory of the `content` folder). To translate the [Kubernetes Basics](https://kubernetes.io/docs/tutorials/kubernetes-basics/) doc into German, for example, create the proper subfolder under the `content/de` folder and copy the English doc: +Translated documents must reside in their own `content/**/` subdirectory, but otherwise follow the same URL path as the English source. For example, to prepare the [Kubernetes Basics](https://kubernetes.io/docs/tutorials/kubernetes-basics/) tutorial for translation into German, create a subfolder under the `content/de/` folder and copy the English source: ```shell mkdir -p content/de/docs/tutorials cp content/en/docs/tutorials/kubernetes-basics.md content/de/docs/tutorials/kubernetes-basics.md ``` +For an example of a localization-related [pull request](../create-pull-request), [this pull request](https://github.com/kubernetes/website/pull/10471) to the [Kubernetes website repo](https://github.com/kubernetes/website) added Korean localization to the Kubernetes docs. + +### Source Files + +Localizations must use English files from the most recent release as their source. The most recent version is **{{< latest-version >}}**. + +To find source files for the most recent release: + +1. Navigate to the Kubernetes website repository at https://github.com/kubernetes/website. +2. Select the `release-1.X` branch for the most recent version. + +The latest version is **{{< latest-version >}}**, so the most recent release branch is [`{{< release-branch >}}`](https://github.com/kubernetes/website/tree/{{< release-branch >}}). + +### Site strings in i18n/ + +Localizations must include the contents of [`i18n/en.toml`](https://github.com/kubernetes/website/blob/master/i18n/en.toml) in a new language-specific file. Using German as an example: `i18n/de.toml`. + +Add a new localization file to `i18n/`. For example, with German (`de`): + +```shell +cp i18n/en.toml i18n/de.toml +``` + +Then translate the value of each string: + +```TOML +[docs_label_i_am] +other = "ICH BIN..." +``` + +Localizing site strings lets you customize site-wide text and features: for example, the legal copyright text in the footer on each page. + ## Project logistics -### Contact with project chairs +### Contact the SIG Docs chairs -When starting a new localization effort, you should get in touch with one of the chairs of the Kubernetes [SIG Docs](https://github.com/kubernetes/community/tree/master/sig-docs) organization. The current chairs are listed [here](https://github.com/kubernetes/community/tree/master/sig-docs#chairs). - -### Project information - -Teams working on localization efforts must provide a single point of contact, including the name and contact information of a person who can respond to or redirect questions or concerns, listed in the translation repository's main [`README`](https://help.github.com/articles/about-readmes/). You can provide an email address, email list, [Slack channel](https://slack.com/), or some other method of contact. +Contact one of the chairs of the Kubernetes [SIG Docs](https://github.com/kubernetes/community/tree/master/sig-docs#chairs) chairs when you start a new localization. ### Maintainers -Each localization repository must select its own maintainers. Maintainers can be from a single organization or multiple organizations. +Each localization repository must provide its own maintainers. Maintainers can be from a single organization or multiple organizations. Whenever possible, localization pull requests should be approved by a reviewer from a different organization than the translator. -In addition, all l10n work must be self-sustaining with the team's own resources. +A localization must provide a minimum of two maintainers. (It's not possible to review and approve one's own work.) -Wherever possible, every localized page must be approved by a reviewer from a different company than the translator. +### Branching strategy -### GitHub project +Because localization projects are highly collaborative efforts, we encourage teams to work from a shared development branch. -Each Kubernetes localization repository must track its overall progress with a [GitHub project](https://help.github.com/articles/creating-a-project-board/). +To collaborate on a development branch: -Projects must include at least these columns: +1. A team member opens a development branch, usually by opening a new pull request against a source branch on https://github.com/kubernetes/website. -- To Do -- In Progress -- Done + We recommend the following branch naming scheme: -{{< note >}} -**Note**: For an example GitHub project, see the [Chinese localization project](https://github.com/kubernetes/kubernetes-docs-zh/projects/1). -{{< /note >}} + `dev--.` -### Repository structure + For example, an approver on a German localization team opens the development branch `dev-1.12-de.1` directly against the k/website repository, based on the source branch for Kubernetes v1.12. -Each l10n repository must have branches for the different Kubernetes documentation release versions, matching the branches in the main [kubernetes/website](https://github.com/kubernetes/website) documentation repository. For example, the kubernetes/website `release-1.10` branch (https://github.com/kubernetes/website/tree/release-1.10) has a corresponding branch in the kubernetes/kubernetes-docs-zh repository (https://github.com/kubernetes/kubernetes-docs-zh/tree/release-1.10). These version branches keep track of the differences in the documentation between Kubernetes versions. +2. Individual contributors open feature branches based on the development branch. + + For example, a German contributor opens a pull request with changes to `kubernetes:dev-1.12-de.1` from `username:local-branch-name`. + +3. Approvers review and merge feature branches into the development branch. + +4. Periodically, an approver merges the development branch to its source branch. + +Repeat steps 1-4 as needed until the localization is complete. For example, subsequent German development branches would be: `dev-1.12-de.2`, `dev-1.12-de.3`, etc. + +Teams must merge localized content into the same release branch from which the content was sourced. For example, a development branch sourced from {{< release-branch >}} must be based on {{< release-branch >}}. + +An approver must maintain a development branch by keeping it current with its source branch and resolving merge conflicts. The longer a development branch stays open, the more maintenance it typically requires. Consider periodically merging development branches and opening new ones, rather than maintaining one extremely long-running development branch. + +While only approvers can merge pull requests, anyone can open a pull request for a new development branch. No special permissions are required. + +For more information about working from forks or directly from the repository, see ["fork and clone the repo"](#fork-and-clone-the-repo). ### Upstream contributions -Upstream contributions are welcome and encouraged! - -For the sake of efficiency, limit upstream contributions to a single pull request per week, containing a single [squashed commit](https://github.com/todotxt/todo.txt-android/wiki/Squash-All-Commits-Related-to-a-Single-Issue-into-a-Single-Commit). +SIG Docs welcomes upstream contributions and corrections to the English source! Open a [pull request](https://kubernetes.io/docs/contribute/start/#improve-existing-content) (from a fork) with any updates. {{% /capture %}} @@ -143,7 +208,7 @@ For the sake of efficiency, limit upstream contributions to a single pull reques Once a l10n meets requirements for workflow and minimum output, SIG docs will: -- Work with the localization team to implement language selection on the website. -- Publicize availability through [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) channels. +- Enable language selection on the website +- Publicize the localization's availability through [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) channels, including the [Kubernetes blog](https://kubernetes.io/blog/). {{% /capture %}} diff --git a/content/ja/OWNERS b/content/ja/OWNERS new file mode 100644 index 0000000000..91ea772f74 --- /dev/null +++ b/content/ja/OWNERS @@ -0,0 +1,11 @@ +# This is the localization project for Japanese. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-ja-reviews + +approvers: +- sig-docs-ja-owners + +labels: +- language/ja diff --git a/content/ko/OWNERS b/content/ko/OWNERS new file mode 100644 index 0000000000..45a4bc5870 --- /dev/null +++ b/content/ko/OWNERS @@ -0,0 +1,11 @@ +# This is the localization project for Korean. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-ko-reviews + +approvers: +- sig-docs-ko-owners + +labels: +- language/ko diff --git a/content/zh/OWNERS b/content/zh/OWNERS new file mode 100644 index 0000000000..7eec09c28c --- /dev/null +++ b/content/zh/OWNERS @@ -0,0 +1,11 @@ +# This is the localization project for Chinese. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-zh-reviews + +approvers: +- sig-docs-zh-owners + +labels: +- language/zh diff --git a/content/cn/_index.html b/content/zh/_index.html similarity index 100% rename from content/cn/_index.html rename to content/zh/_index.html diff --git a/content/zh/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md b/content/zh/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md new file mode 100644 index 0000000000..072ec679f3 --- /dev/null +++ b/content/zh/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md @@ -0,0 +1,182 @@ + + +--- +title: "SIG-Networking: Kubernetes Network Policy APIs Coming in 1.3 " +date: 2016-04-18 +slug: kubernetes-network-policy-apis +url: /blog/2016/04/Kubernetes-Network-Policy-APIs +--- + + + +编者按:这一周,我们的封面主题是 [Kubernetes 特别兴趣小组](https://github.com/kubernetes/kubernetes/wiki/Special-Interest-Groups-(SIGs));今天的文章由网络兴趣小组撰写,来谈谈 1.3 版本中即将出现的网络策略 API - 针对安全,隔离和多租户的策略。 + + + +自去年下半年起,[Kubernetes 网络特别兴趣小组](https://kubernetes.slack.com/messages/sig-network/)经常定期开会,讨论如何将网络策略带入到 Kubernetes 之中,现在,我们也将慢慢看到这些工作的成果。 + + + +很多用户经常会碰到的一个问题是, Kubernetes 的开放访问网络策略并不能很好地满足那些需要对 pod 或服务( service )访问进行更为精确控制的场景。今天,这个场景可以是在多层应用中,只允许临近层的访问。然而,随着组合微服务构建原生应用程序潮流的发展,如何控制流量在不同服务之间的流动会别的越发的重要。 + + + +在大多数的(公共的或私有的) IaaS 环境中,这种网络控制通常是将 VM 和“安全组”结合,其中安全组中成员的通信都是通过一个网络策略或者访问控制表( Access Control List, ACL )来定义,以及借助于网络包过滤器来实现。 + + + +“网络特别兴趣小组”刚开始的工作是确定 [特定的使用场景](https://docs.google.com/document/d/1blfqiH4L_fpn33ZrnQ11v7LcYP0lmpiJ_RaapAPBbNU/edit?pref=2&pli=1#) ,这些用例需要基本的网络隔离来提升安全性。 +让这些API恰如其分地满足简单、共通的用例尤其重要,因为它们将为那些服务于 Kubernetes 内多租户,更为复杂的网络策略奠定基础。 + + + +根据这些应用场景,我们考虑了集中不同的方法,然后定义了一个最简[策略规范](https://docs.google.com/document/d/1qAm-_oSap-f1d6a-xRTj6xaH1sYQBfK36VyjB5XOZug/edit)。 +基本的想法是,如果是根据命名空间的不同来进行隔离,那么就会根据所被允许的流量类型的不同,来选择特定的 pods 。 + + + +快速支持这个实验性 API 的办法是往 API 服务器上加入一个 `ThirdPartyResource` 扩展,这在 Kubernetes 1.2 就能办到。 + + + +如果你还不是很熟悉这其中的细节, Kubernetes API 是可以通过定义 `ThirdPartyResources` 扩展在特定的 URL 上创建一个新的 API 端点。 + +#### third-party-res-def.yaml + +``` +kind: ThirdPartyResource +apiVersion: extensions/v1beta1 +metadata: + - name: network-policy.net.alpha.kubernetes.io +description: "Network policy specification" +versions: + - name: v1alpha1 +``` + +``` +$kubectl create -f third-party-res-def.yaml +``` + + +这条命令会创建一个 API 端点(每个命名空间各一个): + +``` +/net.alpha.kubernetes.io/v1alpha1/namespace/default/networkpolicys/ +``` + + + + +第三方网络控制器可以监听这些端点,根据资源的创建,修改或者删除作出必要的响应。 +_注意:在接下来的 Kubernetes 1.3 发布中, Network Policy API 会以 beta API 的形式出现,这也就不需要像上面那样,创建一个 `ThirdPartyResource` API 端点了。_ + + + +网络隔离默认是关闭的,因而,所有的 pods 之间可以自由地通信。 +然而,很重要的一点是,一旦开通了网络隔离,所有命名空间下的所有 pods 之间的通信都会被阻断,换句话说,开通隔离会改变 pods 的行为。 + + + +网络隔离可以通过定义命名空间, `net.alpha.kubernetes.io` 里的 `network-isolation` 注释来开通关闭: + +``` +net.alpha.kubernetes.io/network-isolation: [on | off] +``` + + + +一旦开通了网络隔离,**一定需要使用** 显示的网络策略来允许 pod 间的通信。 + + + +一个策略规范可以被用到一个命名空间中,来定义策略的细节(如下所示): + +``` +POST /apis/net.alpha.kubernetes.io/v1alpha1/namespaces/tenant-a/networkpolicys/ +{ + "kind": "NetworkPolicy", + "metadata": { + "name": "pol1" + }, + "spec": { + "allowIncoming": { + "from": [ + { + "pods": { + "segment": "frontend" + } + } + ], + "toPorts": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "podSelector": { + "segment": "backend" + } + } +} +``` + + + +在这个例子中,**tenant-a** 空间将会使用 **pol1** 策略。 +具体而言,带有 **segment** 标签为 **backend** 的 pods 会允许 **segment** 标签为 **frontend** 的 pods 访问其端口 80 。 + + + + + +今天,[Romana](http://romana.io/), [OpenShift](https://www.openshift.com/), [OpenContrail](http://www.opencontrail.org/) 以及 [Calico](http://projectcalico.org/) 都已经支持在命名空间和pods中使用网络策略。 +而 Cisco 和 VMware 也在努力实现支持之中。 +Romana 和 Calico 已经在最近的 KubeCon 中展示了如何在 Kubernetes 1.2 下使用这些功能。 +你可以在这里看到他们的演讲: +[Romana](https://www.youtube.com/watch?v=f-dLKtK6qCs) ([幻灯片](http://www.slideshare.net/RomanaProject/kubecon-london-2016-ronana-cloud-native-sdn)), +[Calico](https://www.youtube.com/watch?v=p1zfh4N4SX0) ([幻灯片](http://www.slideshare.net/kubecon/kubecon-eu-2016-secure-cloudnative-networking-with-project-calico)). + + + +**这是如何工作的** + + + +每套解决方案都有自己不同的具体实现。尽管今天,他们都借助于每种主机上( on-host )的实现机制,但未来的实现可以通过将策略使用在 hypervisor 上,亦或是直接使用到网络本身上来达到同样的目的。 + + + +外部策略控制软件(不同实现各有不同)可以监听 pods 创建以及新加载策略的 API 端点。 +当产生一个需要策略配置的事件之后,监听器会确认这个请求,相应的,控制器会配置接口,使用该策略。 +下面的图例展示了 API 监视器和策略控制器是如何通过主机代理在本地应用网络策略的。 +这些 pods 的网络接口是使用过主机上的 CNI 插件来进行配置的(并未在图中注明)。 + + ![controller.jpg](https://lh5.googleusercontent.com/zMEpLMYmask-B-rYWnbMyGb0M7YusPQFPS6EfpNOSLbkf-cM49V7rTDBpA6k9-Zdh2soMul39rz9rHFJfL-jnEn_mHbpg0E1WlM-wjU-qvQu9KDTQqQ9uBmdaeWynDDNhcT3UjX5) + + + + +如果你一直受网络隔离或安全考虑的困扰,而犹豫要不要使用 Kubernetes 来开发应用程序,这些新的网络策略将会极大地解决你这方面的需求。并不需要等到 Kubernetes 1.3 ,现在就可以通过 `ThirdPartyResource` 的方式来使用这个实现性 API 。 + + + + +如果你对 Kubernetes 和网络感兴趣,可以通过下面的方式参与、加入其中: + +- 我们的[网络 slack channel](https://kubernetes.slack.com/messages/sig-network/) +- 我们的[Kubernetes 特别网络兴趣小组](https://groups.google.com/forum/#!forum/kubernetes-sig-network) 邮件列表 + + + +网络“特别兴趣小组”每两周下午三点(太平洋时间)开会,地址是[SIG-Networking hangout](https://zoom.us/j/5806599998). + +_--Chris Marino, Co-Founder, Pani Networks_ diff --git a/content/zh/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md b/content/zh/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md new file mode 100644 index 0000000000..c5de9e6a12 --- /dev/null +++ b/content/zh/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md @@ -0,0 +1,129 @@ + + +--- +title: " 如何在AWS上部署安全,可审计,可复现的k8s集群 " +date: 2016-04-15 +slug: kubernetes-on-aws_15 +url: /blog/2016/04/Kubernetes-On-Aws_15 +--- + + + +_今天的客座文章是由Colin Hom撰写,[CoreOS](https://coreos.com/)的基础架构工程师。CoreOS致力于推广谷歌的基础架构模式(Google’s Infrastructure for Everyone Else, #GIFEE),让全世界的容器都能在CoreOS Linux, Tectonic 和 Quay上安全运行。_ + +_加入到我们的[柏林CoreOS盛宴](https://coreos.com/fest/),这是一个开源分布式系统主题的会议,在这里可以了解到更多关于CoreOS和Kubernetes的信息。_ + + + +在CoreOS, 我们一直都是在生产环境中大规模部署Kubernetes。今天我们非常兴奋地想分享一款工具,它能让你的Kubernetes生产环境大规模部署更加的轻松。Kube-aws这个工具可以用来在AWS上部署可审计,可复现的k8s集群,而CoreOS本身就在生产环境中使用它。 + + + +也许今天,你更多的可能是用手工的方式来拼接Kubernetes组件。但有了这个工具之后,Kubernetes可以流水化地打包、交付,节省时间,减少了相互间的依赖,更加快捷地实现生产环境的部署。 + + + +借助于一个简单的模板系统,来生成集群配置,这么做是因为一套声明式的配置模板可以版本控制,审计以及重复部署。而且,由于整个创建过程只用到了[AWS CloudFormation](https://aws.amazon.com/cloudformation/) 和 cloud-init,你也就不需要额外用到其它的配置管理工具。开箱即用! + + + +如果要跳过演讲,直接了解这个项目,可以看看[kube-aws的最新发布](https://github.com/coreos/coreos-kubernetes/releases),支持Kubernetes 1.2.x。如果要部署集群,可以参考[文档]](https://coreos.com/kubernetes/docs/latest/kubernetes-on-aws.html). + + +**为什么是kube-aws?安全,可审计,可复现** + + +Kube-aws设计初衷有三个目标。 + + + +**安全** : TLS 资源在嵌入到CloudFormation JSON之前,通过[AWS 秘钥管理服务](https://aws.amazon.com/kms/)加密。通过单独管理KMS密钥的[IAM 策略](http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html),可以将CloudFormation栈的访问与TLS秘钥的访问分离开。 + + + +**可审计** : kube-aws是围绕集群资产的概念来创建。这些配置和账户资产是对集群的完全描述。由于KMS被用来加密TLS资产,因而可以无所顾忌地将未加密的CloudFormation栈 JSON签入到版本控制服务中。 + + + +**可重复** : _--export_ 选项将参数化的集群定义打包成一整个JSON文件,对应一个CloudFormation栈。这个文件可以版本控制,然后,如果需要的话,通过现有的部署工具直接提交给CloudFormation API。 + + +**如何开始用kube-aws** + + +在此基础之上,kube-aws也实现了一些功能,使得在AWS上部署Kubernetes集群更加容易,灵活。下面是一些例子。 + + +**Route53集成** : Kube-aws 可以管理你的集群DNS记录,作为配置过程的一部分。 + +cluster.yaml +``` +externalDNSName: my-cluster.kubernetes.coreos.com + +createRecordSet: true + +hostedZone: kubernetes.coreos.com + +recordSetTTL: 300 +``` + + +**现有VPC支持** : 将集群部署到现有的VPC上。 + +cluster.yaml +``` +vpcId: vpc-xxxxx + +routeTableId: rtb-xxxxx +``` + + +**验证** : kube-aws 支持验证 cloud-init 和 CloudFormation定义,以及集群栈会集成用到的外部资源。例如,下面就是一个cloud-config,外带一个拼写错误的参数: + +userdata/cloud-config-worker +``` +#cloud-config + +coreos: + + flannel: + interrface: $private\_ipv4 + etcd\_endpoints: {{ .ETCDEndpoints }} +``` + +$ kube-aws validate + + \> Validating UserData... + Error: cloud-config validation errors: + UserDataWorker: line 4: warning: unrecognized key "interrface" + + +考虑如何起步?看看[kube-aws 文档](https://coreos.com/kubernetes/docs/latest/kubernetes-on-aws.html)! + + +**未来的工作** + + +一如既往,kube-aws的目标是让生产环境部署更加的简单。尽管我们现在在AWS下使用kube-aws进行生产环境部署,但是这个项目还是pre-1.0,所以还有很多的地方,kube-aws需要考虑、扩展。 + + +**容错** : CoreOS坚信 Kubernetes on AWS是强健的平台,适于容错、自恢复部署。在接下来的几个星期,kube-aws将会迎接新的考验:混世猴子([Chaos Monkey](https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey))测试 - 控制平面以及全部! + + +**零停机更新** : 更新CoreOS节点和Kubernetes组件不需要停机,也不需要考虑实例更新策略(instance replacement strategy)的影响。 + + +有一个[github issue](https://github.com/coreos/coreos-kubernetes/issues/340)来追踪这些工作进展。我们期待你的参与,提交issue,或是直接贡献。 + + +_想要更多地了解Kubernetes,来[柏林CoreOS盛宴](https://coreos.com/fest/)看看,- 五月 9-10, 2016_ + + +_– Colin Hom, 基础架构工程师, CoreOS_ diff --git a/content/zh/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md b/content/zh/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md new file mode 100644 index 0000000000..4797bb7986 --- /dev/null +++ b/content/zh/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md @@ -0,0 +1,81 @@ +--- +title: "Principles of Container-based Application Design" +date: 2018-03-15 +slug: principles-of-container-app-design +url: /blog/2018/03/Principles-Of-Container-App-Design +--- + + + +现如今,几乎所有的的应用程序都可以在容器中运行。但创建云原生应用,通过诸如 Kubernetes 的云原生平台更有效地自动化运行、管理容器化的应用却需要额外的工作。 +云原生应用需要考虑故障;即使是在底层架构发生故障时也需要可靠地运行。 +为了提供这样的功能,像 Kubernetes 这样的云原生平台需要向运行的应用程序强加一些契约和约束。 +这些契约确保应用可以在符合某些约束的条件下运行,从而使得平台可以自动化应用管理。 + + + +我已经为容器化应用如何之为云原生应用概括出了[七项原则][1]。 + +| ----- | +| ![][2] | +| Container Design Principles | + + + + +这里所述的七项原则涉及到构建时和运行时,两类关注点。 + + +#### 构建时 + + + +* **单一关注点:** 每个容器只解决一个关注点,并且完成的很好。 +* **自包含:** 一个容器只依赖Linux内核。额外的库要求可以在构建容器时加入。 +* **镜像不变性:** 容器化的应用意味着不变性,一旦构建完成,不需要根据环境的不同而重新构建。 + + +#### 运行时 + + + +* **高可观测性:** 每个容器必须实现所有必要的 API 来帮助平台以最好的方式来观测、管理应用。 +* **生命周期一致性:** 一个容器必须要能从平台中获取事件信息,并作出相应的反应。 +* **进程易处理性:** 容器化应用的寿命一定要尽可能的短暂,这样,可以随时被另一个容器所替换。 +* **运行时限制:** 每个容器都必须要声明自己的资源需求,并将资源使用限制在所需要的范围之内。 + + + +编译时原则保证了容器拥有合适的粒度,一致性以及结构。运行时原则明确了容器化必须要实现那些功能才能成为云原生函数。遵循这些原则可以帮助你的应用适应 Kubernetes 上的自动化。 + + + +白皮书可以免费下载: + + + +想要了解更多关于如何面向 Kubernetes 设计云原生应用,可以看看我的 [Kubernetes 模式][3] 一书。 + + + +— [Bilgin Ibryam][4], 首席架构师, Red Hat + +Twitter: 
 +Blog: [http://www.ofbizian.com][5] +Linkedin: + + + +Bilgin Ibryam (@bibryam) 是 Red Hat 的一名首席架构师, ASF 的开源贡献者,博主,作者以及演讲者。 +他是 Camel 设计模式、 Kubernetes 模式的作者。在他的日常生活中,他非常享受指导、培训以及帮助各个团队更加成功地使用分布式系统、微服务、容器,以及云原生应用。 + +[1]: https://www.redhat.com/en/resources/cloud-native-container-design-whitepaper +[2]: https://lh5.googleusercontent.com/1XqojkVC0CET1yKCJqZ3-0VWxJ3W8Q74zPLlqnn6eHSJsjHOiBTB7EGUX5o_BOKumgfkxVdgBeLyoyMfMIXwVm9p2QXkq_RRy2mDJG1qEExJDculYL5PciYcWfPAKxF2-DGIdiLw +[3]: http://leanpub.com/k8spatterns/ +[4]: http://twitter.com/bibryam +[5]: http://www.ofbizian.com/ diff --git a/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md b/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md new file mode 100644 index 0000000000..6ff8dc79c8 --- /dev/null +++ b/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md @@ -0,0 +1,676 @@ +--- + +layout: blog + +title: 'Airflow on Kubernetes (Part 1): A Different Kind of Operator' + +date: 2018-06-28 + +title: 'Airflow在Kubernetes中的使用(第一部分):一种不同的操作器' + +cn-approvers: + +- congfairy + +--- + + + + + + +作者: Daniel Imberman (Bloomberg LP) + + + + + + + +## 介绍 + + + +作为Bloomberg [继续致力于开发Kubernetes生态系统]的一部分(https://www.techatbloomberg.com/blog/bloomberg-awarded-first-cncf-end-user-award-contributions-kubernetes/),我们很高兴能够宣布Kubernetes Airflow Operator的发布; [Apache Airflow](https://airflow.apache.org/)的机制,一种流行的工作流程编排框架,使用Kubernetes API可以在本机启动任意的Kubernetes Pod。 + + + + + + + +## 什么是Airflow? + + + +Apache Airflow是DevOps“Configuration As Code”理念的一种实现。 Airflow允许用户使用简单的Python对象DAG(有向无环图)启动多步骤流水线。 您可以在易于阅读的UI中定义依赖关系,以编程方式构建复杂的工作流,并监视调度的作业。 + + + + + + + + + + + + + +## 为什么在Kubernetes上使用Airflow? + + + +自成立以来,Airflow的最大优势在于其灵活性。 Airflow提供广泛的服务集成,包括Spark和HBase,以及各种云提供商的服务。 Airflow还通过其插件框架提供轻松的可扩展性。但是,该项目的一个限制是Airflow用户仅限于执行时Airflow站点上存在的框架和客户端。单个组织可以拥有各种Airflow工作流程,范围从数据科学流到应用程序部署。用例中的这种差异会在依赖关系管理中产生问题,因为两个团队可能会在其工作流程使用截然不同的库。 + + + +为了解决这个问题,我们使Kubernetes允许用户启动任意Kubernetes pod和配置。 Airflow用户现在可以在其运行时环境,资源和机密上拥有全部权限,基本上将Airflow转变为“您想要的任何工作”工作流程协调器。 + + + + + + + +## Kubernetes运营商 + + + +在进一步讨论之前,我们应该澄清Airflow中的[Operator](https://airflow.apache.org/concepts.html#operators)是一个任务定义。 当用户创建DAG时,他们将使用像“SparkSubmitOperator”或“PythonOperator”这样的operator分别提交/监视Spark作业或Python函数。 Airflow附带了Apache Spark,BigQuery,Hive和EMR等框架的内置运算符。 它还提供了一个插件入口点,允许DevOps工程师开发自己的连接器。 + + + +Airflow用户一直在寻找更易于管理部署和ETL流的方法。 在增加监控的同时,任何解耦流程的机会都可以减少未来的停机等问题。 以下是Airflow Kubernetes Operator提供的好处: + + + + + + + +* 提高部署灵活性: + +Airflow的插件API一直为希望在其DAG中测试新功能的工程师提供了重要的福利。 不利的一面是,每当开发人员想要创建一个新的operator时,他们就必须开发一个全新的插件。 现在,任何可以在Docker容器中运行的任务都可以通过完全相同的运算符访问,而无需维护额外的Airflow代码。 + + + + + + + +* 配置和依赖的灵活性: + +对于在静态Airflow工作程序中运行的operator,依赖关系管理可能变得非常困难。 如果开发人员想要运行一个需要[SciPy](https://www.scipy.org) 的任务和另一个需要[NumPy](http://www.numpy.org) 的任务,开发人员必须维护所有Airflow节点中的依赖关系或将任务卸载到其他计算机(如果外部计算机以未跟踪的方式更改,则可能导致错误)。 自定义Docker镜像允许用户确保任务环境,配置和依赖关系完全是幂等的。 + + + + + + + +* 使用kubernetes Secret以增加安全性: + +处理敏感数据是任何开发工程师的核心职责。 Airflow用户总有机会在严格条款的基础上隔离任何API密钥,数据库密码和登录凭据。 使用Kubernetes运算符,用户可以利用Kubernetes Vault技术存储所有敏感数据。 这意味着Airflow工作人员将永远无法访问此信息,并且可以容易地请求仅使用他们需要的密码信息构建pod。 + + + + + + + +#架构 + + + + + + + +Kubernetes Operator使用[Kubernetes Python客户端](https://github.com/kubernetes-client/Python)生成由APIServer处理的请求(1)。 然后,Kubernetes将使用您定义的需求启动您的pod(2)。映像文件中将加载环境变量,Secret和依赖项,执行单个命令。 一旦启动作业,operator只需要监视跟踪日志的状况(3)。 用户可以选择将日志本地收集到调度程序或当前位于其Kubernetes集群中的任何分布式日志记录服务。 + + + + + + + +#使用Kubernetes Operator + + + +##一个基本的例子 + + + +以下DAG可能是我们可以编写的最简单的示例,以显示Kubernetes Operator的工作原理。 这个DAG在Kubernetes上创建了两个pod:一个带有Python的Linux发行版和一个没有它的基本Ubuntu发行版。 Python pod将正确运行Python请求,而没有Python的那个将向用户报告失败。 如果Operator正常工作,则应该完成“passing-task”pod,而“falling-task”pod则向Airflow网络服务器返回失败。 + + + + + +```Python + +from airflow import DAG + +from datetime import datetime, timedelta + +from airflow.contrib.operators.kubernetes_pod_operator import KubernetesPodOperator + +from airflow.operators.dummy_operator import DummyOperator + + +default_args = { + + 'owner': 'airflow', + + 'depends_on_past': False, + + 'start_date': datetime.utcnow(), + + 'email': ['airflow@example.com'], + + 'email_on_failure': False, + + 'email_on_retry': False, + + 'retries': 1, + + 'retry_delay': timedelta(minutes=5) + +} + + + +dag = DAG( + + 'kubernetes_sample', default_args=default_args, schedule_interval=timedelta(minutes=10)) + +start = DummyOperator(task_id='run_this_first', dag=dag) +passing = KubernetesPodOperator(namespace='default', + + image="Python:3.6", + + cmds=["Python","-c"], + + arguments=["print('hello world')"], + + labels={"foo": "bar"}, + + name="passing-test", + + task_id="passing-task", + + get_logs=True, + + dag=dag + + ) + + failing = KubernetesPodOperator(namespace='default', + + image="ubuntu:1604", + + cmds=["Python","-c"], + + arguments=["print('hello world')"], + + labels={"foo": "bar"}, + + name="fail", + + task_id="failing-task", + + get_logs=True, + + dag=dag + + ) + +passing.set_upstream(start) + +failing.set_upstream(start) + +``` + + + +##但这与我的工作流程有什么关系? + + + +虽然这个例子只使用基本映像,但Docker的神奇之处在于,这个相同的DAG可以用于您想要的任何图像/命令配对。 以下是推荐的CI / CD管道,用于在Airflow DAG上运行生产就绪代码。 + + + +### 1:github中的PR + +使用Travis或Jenkins运行单元和集成测试,请您的朋友PR您的代码,并合并到主分支以触发自动CI构建。 + + + +### 2:CI / CD构建Jenkins - > Docker Image + + + +[在Jenkins构建中生成Docker镜像和缓冲版本](https://getintodevops.com/blog/building-your-first-Docker-image-with-jenkins-2-guide-for-developers)。 + + + +### 3:Airflow启动任务 + + + +最后,更新您的DAG以反映新版本,您应该准备好了! + + + +```Python + +production_task = KubernetesPodOperator(namespace='default', + + # image="my-production-job:release-1.0.1", <-- old release + + image="my-production-job:release-1.0.2", + + cmds=["Python","-c"], + + arguments=["print('hello world')"], + + name="fail", + + task_id="failing-task", + + get_logs=True, + + dag=dag + + ) + +``` + + + + + +#启动测试部署 + + + +由于Kubernetes运营商尚未发布,我们尚未发布官方[helm](https://helm.sh/) 图表或operator(但两者目前都在进行中)。 但是,我们在下面列出了基本部署的说明,并且正在积极寻找测试人员来尝试这一新功能。 要试用此系统,请按以下步骤操作: + + + +##步骤1:将kubeconfig设置为指向kubernetes集群 + + + +##步骤2:clone Airflow 仓库: + + + +运行git clone https:// github.com / apache / incubator-airflow.git来clone官方Airflow仓库。 + + + +##步骤3:运行 + + + +为了运行这个基本Deployment,我们正在选择我们目前用于Kubernetes Executor的集成测试脚本(将在本系列的下一篇文章中对此进行解释)。 要启动此部署,请运行以下三个命令: + + + +``` + +sed -ie "s/KubernetesExecutor/LocalExecutor/g" scripts/ci/kubernetes/kube/configmaps.yaml + +./scripts/ci/kubernetes/Docker/build.sh + +./scripts/ci/kubernetes/kube/deploy.sh + +``` + + + + + +在我们继续之前,让我们讨论这些命令正在做什么: + + + +### sed -ie“s / KubernetesExecutor / LocalExecutor / g”scripts / ci / kubernetes / kube / configmaps.yaml + + + +Kubernetes Executor是另一种Airflow功能,允许动态分配任务已解决幂等pod的问题。我们将其切换到LocalExecutor的原因只是一次引入一个功能。如果您想尝试Kubernetes Executor,欢迎您跳过此步骤,但我们将在以后的文章中详细介绍。 + + + +### ./scripts/ci/kubernetes/Docker/build.sh + + + +此脚本将对Airflow主分支代码进行打包,以根据Airflow的发行文件构建Docker容器 + + + +### ./scripts/ci/kubernetes/kube/deploy.sh + + + +最后,我们在您的群集上创建完整的Airflow部署。这包括Airflow配置,postgres后端,webserver +调度程序以及之间的所有必要服务。需要注意的一点是,提供的角色绑定是集群管理员,因此如果您没有该集群的权限级别,可以在scripts / ci / kubernetes / kube / airflow.yaml中进行修改。 + + + +##步骤4:登录您的网络服务器 + + + +现在您的Airflow实例正在运行,让我们来看看UI!用户界面位于Airflow pod的8080端口,因此只需运行即可 + + + +``` + +WEB=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep "airflow" | head -1) + +kubectl port-forward $WEB 8080:8080 + + ``` + + + + + +现在,Airflow UI将存在于http://localhost:8080上。 要登录,只需输入airflow /airflow,您就可以完全访问Airflow Web UI。 + + + +##步骤5:上传测试文档 + + + +要修改/添加自己的DAG,可以使用kubectl cp将本地文件上传到Airflow调度程序的DAG文件夹中。 然后,Airflow将读取新的DAG并自动将其上传到其系统。 以下命令将任何本地文件上载到正确的目录中: + + + +kubectl cp /:/root/airflow/dags -c scheduler + + + + + + + +##步骤6:使用它! + + + +#那么我什么时候可以使用它? + + + + 虽然此功能仍处于早期阶段,但我们希望在未来几个月内发布该功能以进行广泛发布。 + + + +#参与其中 + + + +此功能只是将Apache Airflow集成到Kubernetes中的多项主要工作的开始。 Kubernetes Operator已合并到[Airflow的1.10发布分支](https://github.com/apache/incubator-airflow/tree/v1-10-test)(实验模式中的执行模块),以及完整的k8s本地调度程序称为Kubernetes Executor(即将发布文章)。这些功能仍处于早期采用者/贡献者可能对这些功能的未来产生巨大影响的阶段。 + + + +对于有兴趣加入这些工作的人,我建议按照以下步骤: + + + + *加入airflow-dev邮件列表dev@airflow.apache.org。 + + *在[Apache Airflow JIRA]中提出问题(https://issues.apache.org/jira/projects/AIRFLOW/issues/) + + *周三上午10点太平洋标准时间加入我们的SIG-BigData会议。 + + *在kubernetes.slack.com上的#sig-big-data找到我们。 + + + +特别感谢Apache Airflow和Kubernetes社区,特别是Grant Nicholas,Ben Goldberg,Anirudh Ramanathan,Fokko Dreisprong和Bolke de Bruin,感谢您对这些功能的巨大帮助以及我们未来的努力。 diff --git a/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md b/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md new file mode 100644 index 0000000000..560fe618bc --- /dev/null +++ b/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md @@ -0,0 +1,401 @@ +--- +title: 基于IPVS的集群内部负载均衡 +cn-approvers: +- congfairy +layout: blog +title: 'IPVS-Based In-Cluster Load Balancing Deep Dive' +date: 2018-07-09 +--- + + + +作者: Jun Du(华为), Haibin Xie(华为), Wei Liang(华为) + +注意: 这篇文章出自 系列深度文章 介绍 Kubernetes 1.11 的新特性 + + + +介绍 + +根据 Kubernetes 1.11 发布的博客文章, 我们宣布基于 IPVS 的集群内部服务负载均衡已达到一般可用性。 在这篇博客中,我们将带您深入了解该功能。 + + + +什么是 IPVS ? + +IPVS (IP Virtual Server)是在 Netfilter 上层构建的,并作为 Linux 内核的一部分,实现传输层负载均衡。 + +IPVS 集成在 LVS(Linux Virtual Server,Linux 虚拟服务器)中,它在主机上运行,并在物理服务器集群前作为负载均衡器。IPVS 可以将基于 TCP 和 UDP 服务的请求定向到真实服务器,并使真实服务器的服务在单个IP地址上显示为虚拟服务。 因此,IPVS 自然支持 Kubernetes 服务。 + + + +为什么为 Kubernetes 选择 IPVS ? + +随着 Kubernetes 的使用增长,其资源的可扩展性变得越来越重要。特别是,服务的可扩展性对于运行大型工作负载的开发人员/公司采用 Kubernetes 至关重要。 + +Kube-proxy 是服务路由的构建块,它依赖于经过强化攻击的 iptables 来实现支持核心的服务类型,如 ClusterIP 和 NodePort。 但是,iptables 难以扩展到成千上万的服务,因为它纯粹是为防火墙而设计的,并且基于内核规则列表。 + +尽管 Kubernetes 在版本v1.6中已经支持5000个节点,但使用 iptables 的 kube-proxy 实际上是将集群扩展到5000个节点的瓶颈。 一个例子是,在5000节点集群中使用 NodePort 服务,如果我们有2000个服务并且每个服务有10个 pod,这将在每个工作节点上至少产生20000个 iptable 记录,这可能使内核非常繁忙。 + +另一方面,使用基于 IPVS 的集群内服务负载均衡可以为这种情况提供很多帮助。 IPVS 专门用于负载均衡,并使用更高效的数据结构(哈希表),允许几乎无限的规模扩张。 + + + +基于 IPVS 的 Kube-proxy + +参数更改 + +参数: --proxy-mode 除了现有的用户空间和 iptables 模式,IPVS 模式通过--proxy-mode = ipvs 进行配置。 它隐式使用 IPVS NAT 模式进行服务端口映射。 + + + +参数: --ipvs-scheduler + +添加了一个新的 kube-proxy 参数来指定 IPVS 负载均衡算法,参数为 --ipvs-scheduler。 如果未配置,则默认为 round-robin 算法(rr)。 + +- rr: round-robin +- lc: least connection +- dh: destination hashing +- sh: source hashing +- sed: shortest expected delay +- nq: never queue + +将来,我们可以实现特定于服务的调度程序(可能通过注释),该调度程序具有更高的优先级并覆盖该值。 + + + +参数: --cleanup-ipvs 类似于 --cleanup-iptables 参数,如果为 true,则清除在 IPVS 模式下创建的 IPVS 配置和 IPTables 规则。 + +参数: --ipvs-sync-period 刷新 IPVS 规则的最大间隔时间(例如'5s','1m')。 必须大于0。 + +参数: --ipvs-min-sync-period 刷新 IPVS 规则的最小间隔时间间隔(例如'5s','1m')。 必须大于0。 + + + +参数: --ipvs-exclude-cidrs 清除 IPVS 规则时 IPVS 代理不应触及的 CIDR 的逗号分隔列表,因为 IPVS 代理无法区分 kube-proxy 创建的 IPVS 规则和用户原始规则 IPVS 规则。 如果您在环境中使用 IPVS proxier 和您自己的 IPVS 规则,则应指定此参数,否则将清除原始规则。 + + + +设计注意事项 + +IPVS 服务网络拓扑 + +创建 ClusterIP 类型服务时,IPVS proxier 将执行以下三项操作: + +- 确保节点中存在虚拟接口,默认为 kube-ipvs0 +- 将服务 IP 地址绑定到虚拟接口 +- 分别为每个服务 IP 地址创建 IPVS 虚拟服务器 + + + +这是一个例子: + + # kubectl describe svc nginx-service + Name: nginx-service + ... + Type: ClusterIP + IP: 10.102.128.4 + Port: http 3080/TCP + Endpoints: 10.244.0.235:8080,10.244.1.237:8080 + Session Affinity: None + + # ip addr + ... + 73: kube-ipvs0: mtu 1500 qdisc noop state DOWN qlen 1000 + link/ether 1a:ce:f5:5f:c1:4d brd ff:ff:ff:ff:ff:ff + inet 10.102.128.4/32 scope global kube-ipvs0 + valid_lft forever preferred_lft forever + + # ipvsadm -ln + IP Virtual Server version 1.2.1 (size=4096) + Prot LocalAddress:Port Scheduler Flags + -> RemoteAddress:Port Forward Weight ActiveConn InActConn + TCP 10.102.128.4:3080 rr + -> 10.244.0.235:8080 Masq 1 0 0 + -> 10.244.1.237:8080 Masq 1 0 0 + + + +请注意,Kubernetes 服务和 IPVS 虚拟服务器之间的关系是“1:N”。 例如,考虑具有多个 IP 地址的 Kubernetes 服务。 外部 IP 类型服务有两个 IP 地址 - 集群IP和外部 IP。 然后,IPVS 代理将创建2个 IPVS 虚拟服务器 - 一个用于集群 IP,另一个用于外部 IP。 Kubernetes 的 endpoint(每个IP +端口对)与 IPVS 虚拟服务器之间的关系是“1:1”。 + +删除 Kubernetes 服务将触发删除相应的 IPVS 虚拟服务器,IPVS 物理服务器及其绑定到虚拟接口的 IP 地址。 + +端口映射 + +IPVS 中有三种代理模式:NAT(masq),IPIP 和 DR。 只有 NAT 模式支持端口映射。 Kube-proxy 利用 NAT 模式进行端口映射。 以下示例显示 IPVS 服务端口3080到Pod端口8080的映射。 + + TCP 10.102.128.4:3080 rr + -> 10.244.0.235:8080 Masq 1 0 0 + -> 10.244.1.237:8080 Masq 1 0 + + + +会话关系 + +IPVS 支持客户端 IP 会话关联(持久连接)。 当服务指定会话关系时,IPVS 代理将在 IPVS 虚拟服务器中设置超时值(默认为180分钟= 10800秒)。 例如: + + # kubectl describe svc nginx-service + Name: nginx-service + ... + IP: 10.102.128.4 + Port: http 3080/TCP + Session Affinity: ClientIP + + # ipvsadm -ln + IP Virtual Server version 1.2.1 (size=4096) + Prot LocalAddress:Port Scheduler Flags + -> RemoteAddress:Port Forward Weight ActiveConn InActConn + TCP 10.102.128.4:3080 rr persistent 10800 + + + +IPVS 代理中的 Iptables 和 Ipset + +IPVS 用于负载均衡,它无法处理 kube-proxy 中的其他问题,例如 包过滤,数据包欺骗,SNAT 等 + +IPVS proxier 在上述场景中利用 iptables。 具体来说,ipvs proxier 将在以下4种情况下依赖于 iptables: + +- kube-proxy 以 --masquerade-all = true 开头 +- 在 kube-proxy 启动中指定集群 CIDR +- 支持 Loadbalancer 类型服务 +- 支持 NodePort 类型的服务 + +但是,我们不想创建太多的 iptables 规则。 所以我们采用 ipset 来减少 iptables 规则。 以下是 IPVS proxier 维护的 ipset 集表: + + + + 设置名称 成员 用法 + KUBE-CLUSTER-IP 所有服务 IP + 端口 masquerade-all=true 或 clusterCIDR 指定的情况下进行伪装 + KUBE-LOOP-BACK 所有服务 IP +端口+ IP 解决数据包欺骗问题 + KUBE-EXTERNAL-IP 服务外部 IP +端口 将数据包伪装成外部 IP + KUBE-LOAD-BALANCER 负载均衡器入口 IP +端口 将数据包伪装成 Load Balancer 类型的服务 + KUBE-LOAD-BALANCER-LOCAL 负载均衡器入口 IP +端口 以及 externalTrafficPolicy=local 接受数据包到 Load Balancer externalTrafficPolicy=local + KUBE-LOAD-BALANCER-FW 负载均衡器入口 IP +端口 以及 loadBalancerSourceRanges 使用指定的 loadBalancerSourceRanges 丢弃 Load Balancer类型Service的数据包 + KUBE-LOAD-BALANCER-SOURCE-CIDR 负载均衡器入口 IP +端口 + 源 CIDR 接受 Load Balancer 类型 Service 的数据包,并指定loadBalancerSourceRanges + KUBE-NODE-PORT-TCP NodePort 类型服务 TCP 将数据包伪装成 NodePort(TCP) + KUBE-NODE-PORT-LOCAL-TCP NodePort 类型服务 TCP 端口,带有 externalTrafficPolicy=local 接受数据包到 NodePort 服务 使用 externalTrafficPolicy=local + KUBE-NODE-PORT-UDP NodePort 类型服务 UDP 端口 将数据包伪装成 NodePort(UDP) + KUBE-NODE-PORT-LOCAL-UDP NodePort 类型服务 UDP 端口 使用 externalTrafficPolicy=local 接受数据包到NodePort服务 使用 externalTrafficPolicy=local + + + +通常,对于 IPVS proxier,无论我们有多少 Service/ Pod,iptables 规则的数量都是静态的。 + + + +在 IPVS 模式下运行 kube-proxy + +目前,本地脚本,GCE 脚本和 kubeadm 支持通过导出环境变量(KUBE_PROXY_MODE=ipvs)或指定标志(--proxy-mode=ipvs)来切换 IPVS 代理模式。 在运行IPVS 代理之前,请确保已安装 IPVS 所需的内核模块。 + + ip_vs + ip_vs_rr + ip_vs_wrr + ip_vs_sh + nf_conntrack_ipv4 + +最后,对于 Kubernetes v1.10,“SupportIPVSProxyMode” 默认设置为 “true”。 对于 Kubernetes v1.11 ,该选项已完全删除。 但是,您需要在v1.10之前为Kubernetes 明确启用 --feature-gates = SupportIPVSProxyMode = true。 + + + +参与其中 + +参与 Kubernetes 的最简单方法是加入众多[特别兴趣小组](https://github.com/kubernetes/community/blob/master/sig-list.md) (SIG)中与您的兴趣一致的小组。 你有什么想要向 Kubernetes 社区广播的吗? 在我们的每周[社区会议](https://github.com/kubernetes/community/blob/master/communication.md#weekly-meeting)或通过以下渠道分享您的声音。 + +感谢您的持续反馈和支持。 +在[Stack Overflow](http://stackoverflow.com/questions/tagged/kubernetes)上发布问题(或回答问题) + +加入[K8sPort](http://k8sport.org/)的倡导者社区门户网站 + +在 Twitter 上关注我们 [@Kubernetesio](https://twitter.com/kubernetesio )获取最新更新 + +在[Slack](http://slack.k8s.io/)上与社区聊天 + +分享您的 Kubernetes [故事](https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform) diff --git a/content/cn/docs/.gitkeep b/content/zh/docs/.gitkeep similarity index 100% rename from content/cn/docs/.gitkeep rename to content/zh/docs/.gitkeep diff --git a/content/cn/docs/_index.md b/content/zh/docs/_index.md similarity index 100% rename from content/cn/docs/_index.md rename to content/zh/docs/_index.md diff --git a/content/cn/docs/admin/accessing-the-api.md b/content/zh/docs/admin/accessing-the-api.md similarity index 100% rename from content/cn/docs/admin/accessing-the-api.md rename to content/zh/docs/admin/accessing-the-api.md diff --git a/content/cn/docs/admin/authorization/_index.md b/content/zh/docs/admin/authorization/_index.md similarity index 100% rename from content/cn/docs/admin/authorization/_index.md rename to content/zh/docs/admin/authorization/_index.md diff --git a/content/cn/docs/admin/authorization/abac.md b/content/zh/docs/admin/authorization/abac.md similarity index 100% rename from content/cn/docs/admin/authorization/abac.md rename to content/zh/docs/admin/authorization/abac.md diff --git a/content/cn/docs/admin/authorization/webhook.md b/content/zh/docs/admin/authorization/webhook.md similarity index 100% rename from content/cn/docs/admin/authorization/webhook.md rename to content/zh/docs/admin/authorization/webhook.md diff --git a/content/cn/docs/admin/bootstrap-tokens.md b/content/zh/docs/admin/bootstrap-tokens.md similarity index 100% rename from content/cn/docs/admin/bootstrap-tokens.md rename to content/zh/docs/admin/bootstrap-tokens.md diff --git a/content/cn/docs/admin/cluster-large.md b/content/zh/docs/admin/cluster-large.md similarity index 100% rename from content/cn/docs/admin/cluster-large.md rename to content/zh/docs/admin/cluster-large.md diff --git a/content/cn/docs/admin/daemon.yaml b/content/zh/docs/admin/daemon.yaml similarity index 100% rename from content/cn/docs/admin/daemon.yaml rename to content/zh/docs/admin/daemon.yaml diff --git a/content/cn/docs/admin/high-availability/_index.md b/content/zh/docs/admin/high-availability/_index.md similarity index 100% rename from content/cn/docs/admin/high-availability/_index.md rename to content/zh/docs/admin/high-availability/_index.md diff --git a/content/cn/docs/admin/kube-apiserver.md b/content/zh/docs/admin/kube-apiserver.md similarity index 100% rename from content/cn/docs/admin/kube-apiserver.md rename to content/zh/docs/admin/kube-apiserver.md diff --git a/content/cn/docs/admin/kubelet-authentication-authorization.md b/content/zh/docs/admin/kubelet-authentication-authorization.md similarity index 100% rename from content/cn/docs/admin/kubelet-authentication-authorization.md rename to content/zh/docs/admin/kubelet-authentication-authorization.md diff --git a/content/cn/docs/admin/kubelet-tls-bootstrapping.md b/content/zh/docs/admin/kubelet-tls-bootstrapping.md similarity index 100% rename from content/cn/docs/admin/kubelet-tls-bootstrapping.md rename to content/zh/docs/admin/kubelet-tls-bootstrapping.md diff --git a/content/cn/docs/admin/multiple-zones.md b/content/zh/docs/admin/multiple-zones.md similarity index 100% rename from content/cn/docs/admin/multiple-zones.md rename to content/zh/docs/admin/multiple-zones.md diff --git a/content/cn/docs/admin/node-conformance.md b/content/zh/docs/admin/node-conformance.md similarity index 100% rename from content/cn/docs/admin/node-conformance.md rename to content/zh/docs/admin/node-conformance.md diff --git a/content/cn/docs/admin/ovs-networking.md b/content/zh/docs/admin/ovs-networking.md similarity index 100% rename from content/cn/docs/admin/ovs-networking.md rename to content/zh/docs/admin/ovs-networking.md diff --git a/content/cn/docs/admin/service-accounts-admin.md b/content/zh/docs/admin/service-accounts-admin.md similarity index 100% rename from content/cn/docs/admin/service-accounts-admin.md rename to content/zh/docs/admin/service-accounts-admin.md diff --git a/content/cn/docs/concepts/architecture/cloud-controller.md b/content/zh/docs/concepts/architecture/cloud-controller.md similarity index 100% rename from content/cn/docs/concepts/architecture/cloud-controller.md rename to content/zh/docs/concepts/architecture/cloud-controller.md diff --git a/content/cn/docs/concepts/architecture/master-node-communication.md b/content/zh/docs/concepts/architecture/master-node-communication.md similarity index 100% rename from content/cn/docs/concepts/architecture/master-node-communication.md rename to content/zh/docs/concepts/architecture/master-node-communication.md diff --git a/content/cn/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md similarity index 100% rename from content/cn/docs/concepts/architecture/nodes.md rename to content/zh/docs/concepts/architecture/nodes.md diff --git a/content/cn/docs/concepts/cluster-administration/addons.md b/content/zh/docs/concepts/cluster-administration/addons.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/addons.md rename to content/zh/docs/concepts/cluster-administration/addons.md diff --git a/content/cn/docs/concepts/cluster-administration/certificates.md b/content/zh/docs/concepts/cluster-administration/certificates.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/certificates.md rename to content/zh/docs/concepts/cluster-administration/certificates.md diff --git a/content/cn/docs/concepts/cluster-administration/cloud-providers.md b/content/zh/docs/concepts/cluster-administration/cloud-providers.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/cloud-providers.md rename to content/zh/docs/concepts/cluster-administration/cloud-providers.md diff --git a/content/cn/docs/concepts/cluster-administration/cluster-administration-overview.md b/content/zh/docs/concepts/cluster-administration/cluster-administration-overview.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/cluster-administration-overview.md rename to content/zh/docs/concepts/cluster-administration/cluster-administration-overview.md diff --git a/content/cn/docs/concepts/cluster-administration/device-plugins.md b/content/zh/docs/concepts/cluster-administration/device-plugins.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/device-plugins.md rename to content/zh/docs/concepts/cluster-administration/device-plugins.md diff --git a/content/cn/docs/concepts/cluster-administration/federation.md b/content/zh/docs/concepts/cluster-administration/federation.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/federation.md rename to content/zh/docs/concepts/cluster-administration/federation.md diff --git a/content/cn/docs/concepts/cluster-administration/proxies.md b/content/zh/docs/concepts/cluster-administration/proxies.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/proxies.md rename to content/zh/docs/concepts/cluster-administration/proxies.md diff --git a/content/cn/docs/concepts/cluster-administration/sysctl-cluster.md b/content/zh/docs/concepts/cluster-administration/sysctl-cluster.md similarity index 100% rename from content/cn/docs/concepts/cluster-administration/sysctl-cluster.md rename to content/zh/docs/concepts/cluster-administration/sysctl-cluster.md diff --git a/content/cn/docs/concepts/configuration/commands.yaml b/content/zh/docs/concepts/configuration/commands.yaml similarity index 100% rename from content/cn/docs/concepts/configuration/commands.yaml rename to content/zh/docs/concepts/configuration/commands.yaml diff --git a/content/cn/docs/concepts/configuration/manage-compute-resources-container.md b/content/zh/docs/concepts/configuration/manage-compute-resources-container.md similarity index 100% rename from content/cn/docs/concepts/configuration/manage-compute-resources-container.md rename to content/zh/docs/concepts/configuration/manage-compute-resources-container.md diff --git a/content/cn/docs/concepts/configuration/pod-with-node-affinity.yaml b/content/zh/docs/concepts/configuration/pod-with-node-affinity.yaml similarity index 100% rename from content/cn/docs/concepts/configuration/pod-with-node-affinity.yaml rename to content/zh/docs/concepts/configuration/pod-with-node-affinity.yaml diff --git a/content/cn/docs/concepts/configuration/pod-with-pod-affinity.yaml b/content/zh/docs/concepts/configuration/pod-with-pod-affinity.yaml similarity index 100% rename from content/cn/docs/concepts/configuration/pod-with-pod-affinity.yaml rename to content/zh/docs/concepts/configuration/pod-with-pod-affinity.yaml diff --git a/content/cn/docs/concepts/configuration/pod.yaml b/content/zh/docs/concepts/configuration/pod.yaml similarity index 100% rename from content/cn/docs/concepts/configuration/pod.yaml rename to content/zh/docs/concepts/configuration/pod.yaml diff --git a/content/cn/docs/concepts/configuration/secret.md b/content/zh/docs/concepts/configuration/secret.md similarity index 98% rename from content/cn/docs/concepts/configuration/secret.md rename to content/zh/docs/concepts/configuration/secret.md index 5d59573aa7..fd1a9d0377 100644 --- a/content/cn/docs/concepts/configuration/secret.md +++ b/content/zh/docs/concepts/configuration/secret.md @@ -104,7 +104,7 @@ $ kubectl create -f ./secret.yaml secret "mysecret" created ``` -**编码注意:** secret 数据的序列化 JSON 和 YAML 值使用 base64 编码成字符串。换行符在这些字符串中无效,必须省略。当在 Darwin/macOS 上使用 `base64` 实用程序时,用户应避免使用 `-b` 选项来拆分长行。另外,对于 Linux 用户如果 `-w` 选项不可用的话,应该添加选项 `-w 0` 到 `base64` 命令或管道 `base64 | tr -d '\n' ` 。 +**编码注意:** secret 数据的序列化 JSON 和 YAML 值使用 base64 编码成字符串。换行符在这些字符串中无效,必须省略。当在 Darwin/OS X 上使用 `base64` 实用程序时,用户应避免使用 `-b` 选项来拆分长行。另外,对于 Linux 用户如果 `-w` 选项不可用的话,应该添加选项 `-w 0` 到 `base64` 命令或管道 `base64 | tr -d '\n' ` 。 #### 解码 Secret diff --git a/content/zh/docs/concepts/configuration/taint-and-toleration.md b/content/zh/docs/concepts/configuration/taint-and-toleration.md new file mode 100755 index 0000000000..a3c0eda8dd --- /dev/null +++ b/content/zh/docs/concepts/configuration/taint-and-toleration.md @@ -0,0 +1,464 @@ +--- +approvers: +- davidopp +- kevin-wangzefeng +- bsalamat +cn-approvers: +- linyouchong +title: Taint 和 Toleration +content_template: templates/concept +weight: 40 +--- + + + +{{< toc >}} + +{{% capture overview %}} + +节点亲和性(详见[这里](/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature)),是 *pod* 的一种属性(偏好或硬性要求),它使 *pod* 被吸引到一类特定的节点。Taint 则相反,它使 *节点* 能够 *排斥* 一类特定的 pod。 + + +Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有匹配 taint 的节点上。 + +{{% /capture %}} + +{{% capture body %}} + + + +## 概念 + + +您可以使用命令 [kubectl taint](/docs/reference/generated/kubectl/kubectl-commands#taint) 给节点增加一个 taint。比如, + +```shell +kubectl taint nodes node1 key=value:NoSchedule +``` + + +给节点 `node1` 增加一个 taint,它的 key 是 `key`,value 是 `value`,effect 是 `NoSchedule`。这表示只有拥有和这个 taint 相匹配的 toleration 的 pod 才能够被分配到 `node1` 这个节点。您可以在 PodSpec 中定义 pod 的 toleration。下面两个 toleration 均与上面例子中使用 `kubectl taint` 命令创建的 taint 相匹配,因此如果一个 pod 拥有其中的任何一个 toleration 都能够被分配到 `node1` : + + +想删除上述命令添加的 taint ,您可以运行: +```shell +kubectl taint nodes kube11 key:NoSchedule- +``` + +```yaml +tolerations: +- key: "key" + operator: "Equal" + value: "value" + effect: "NoSchedule" +``` + +```yaml +tolerations: +- key: "key" + operator: "Exists" + effect: "NoSchedule" +``` + + +一个 toleration 和一个 taint 相“匹配”是指它们有一样的 key 和 effect ,并且: + +* 如果 `operator` 是 `Exists` (此时 toleration 不能指定 `value`),或者 +* 如果 `operator` 是 `Equal` ,则它们的 `value` 应该相等 + +{{< note >}} + + +**注意:** 存在两种特殊情况: + +* 如果一个 toleration 的 `key` 为空且 operator 为 `Exists` ,表示这个 toleration 与任意的 key 、 value 和 effect 都匹配,即这个 toleration 能容忍任意 taint。 + +```yaml +tolerations: +- operator: "Exists" +``` + + +* 如果一个 toleration 的 `effect` 为空,则 `key` 值与之相同的相匹配 taint 的 `effect` 可以是任意值。 + +```yaml +tolerations: +- key: "key" + operator: "Exists" +``` +{{< /note >}} + + +上述例子使用到的 `effect` 的一个值 `NoSchedule`,您也可以使用另外一个值 `PreferNoSchedule`。这是“优化”或“软”版本的 `NoSchedule` ——系统会*尽量*避免将 pod 调度到存在其不能容忍 taint 的节点上,但这不是强制的。`effect` 的值还可以设置为 `NoExecute` ,下文会详细描述这个值。 + + +您可以给一个节点添加多个 taint ,也可以给一个 pod 添加多个 toleration。Kubernetes 处理多个 taint 和 toleration 的过程就像一个过滤器:从一个节点的所有 taint 开始遍历,过滤掉那些 pod 中存在与之相匹配的 toleration 的 taint。余下未被过滤的 taint 的 effect 值决定了 pod 是否会被分配到该节点,特别是以下情况: + + +* 如果未被过滤的 taint 中存在一个以上 effect 值为 `NoSchedule` 的 taint,则 Kubernetes 不会将 pod 分配到该节点。 +* 如果未被过滤的 taint 中不存在 effect 值为 `NoSchedule` 的 taint,但是存在 effect 值为 `PreferNoSchedule` 的 taint,则 Kubernetes 会*尝试*将 pod 分配到该节点。 +* 如果未被过滤的 taint 中存在一个以上 effect 值为 `NoExecute` 的 taint,则 Kubernetes 不会将 pod 分配到该节点(如果 pod 还未在节点上运行),或者将 pod 从该节点驱逐(如果 pod 已经在节点上运行)。 + + +例如,假设您给一个节点添加了如下的 taint + +```shell +kubectl taint nodes node1 key1=value1:NoSchedule +kubectl taint nodes node1 key1=value1:NoExecute +kubectl taint nodes node1 key2=value2:NoSchedule +``` + + +然后存在一个 pod,它有两个 toleration + +```yaml +tolerations: +- key: "key1" + operator: "Equal" + value: "value1" + effect: "NoSchedule" +- key: "key1" + operator: "Equal" + value: "value1" + effect: "NoExecute" +``` + + +在这个例子中,上述 pod 不会被分配到上述节点,因为其没有 toleration 和第三个 taint 相匹配。但是如果在给节点添加 上述 taint 之前,该 pod 已经在上述节点运行,那么它还可以继续运行在该节点上,因为第三个 taint 是三个 taint 中唯一不能被这个 pod 容忍的。 + + +通常情况下,如果给一个节点添加了一个 effect 值为 `NoExecute` 的 taint,则任何不能忍受这个 taint 的 pod 都会马上被驱逐,任何可以忍受这个 taint 的 pod 都不会被驱逐。但是,如果 pod 存在一个 effect 值为 `NoExecute` 的 toleration 指定了可选属性 `tolerationSeconds` 的值,则表示在给节点添加了上述 taint 之后,pod 还能继续在节点上运行的时间。例如, + +```yaml +tolerations: +- key: "key1" + operator: "Equal" + value: "value1" + effect: "NoExecute" + tolerationSeconds: 3600 +``` + + +这表示如果这个 pod 正在运行,然后一个匹配的 taint 被添加到其所在的节点,那么 pod 还将继续在节点上运行 3600 秒,然后被驱逐。如果在此之前上述 taint 被删除了,则 pod 不会被驱逐。 + + + +## 使用例子 + + +通过 taint 和 toleration ,可以灵活地让 pod *避开*某些节点或者将 pod 从某些节点驱逐。下面是几个使用例子: + + +* **专用节点**:如果您想将某些节点专门分配给特定的一组用户使用,您可以给这些节点添加一个 taint(即, + `kubectl taint nodes nodename dedicated=groupName:NoSchedule`),然后给这组用户的 pod 添加一个相对应的 toleration(通过编写一个自定义的[admission controller](/docs/admin/admission-controllers/),很容易就能做到)。拥有上述 toleration 的 pod 就能够被分配到上述专用节点,同时也能够被分配到集群中的其它节点。如果您希望这些 pod 只能被分配到上述专用节点,那么您还需要给这些专用节点另外添加一个和上述 taint 类似的 label (例如:`dedicated=groupName`),同时 还要在上述 admission controller 中给 pod 增加节点亲和性要求上述 pod 只能被分配到添加了 `dedicated=groupName` 标签的节点上。 + + +* **配备了特殊硬件的节点**:在部分节点配备了特殊硬件(比如 GPU)的集群中,我们希望不需要这类硬件的 pod 不要被分配到这些特殊节点,以便为后继需要这类硬件的 pod 保留资源。要达到这个目的,可以先给配备了特殊硬件的节点添加 taint(例如 `kubectl taint nodes nodename special=true:NoSchedule` or `kubectl taint nodes nodename special=true:PreferNoSchedule`),然后给使用了这类特殊硬件的 pod 添加一个相匹配的 toleration。和专用节点的例子类似,添加这个 toleration 的最简单的方法是使用自定义 [admission controller](/docs/reference/access-authn-authz/admission-controllers/)。比如,我们推荐使用 [Extended Resources](/docs/concepts/configuration/manage-compute-resources-container/#extended-resources) 来表示特殊硬件,给配置了特殊硬件的节点添加 taint 时包含 extended resource 名称,然后运行一个 [ExtendedResourceToleration](/docs/reference/access-authn-authz/admission-controllers/#extendedresourcetoleration) admission controller。此时,因为节点已经被 taint 了,没有对应 toleration 的 Pod 会被调度到这些节点。但当你创建一个使用了 extended resource 的 Pod 时,`ExtendedResourceToleration` admission controller 会自动给 Pod 加上正确的 toleration ,这样 Pod 就会被自动调度到这些配置了特殊硬件件的节点上。这样就能够确保这些配置了特殊硬件的节点专门用于运行 需要使用这些硬件的 Pod,并且您无需手动给这些 Pod 添加 toleration。 + + +* **基于 taint 的驱逐 (alpha 特性)**: 这是在每个 pod 中配置的在节点出现问题时的驱逐行为,接下来的章节会描述这个特性 + + + +## 基于 taint 的驱逐 + + + 前文我们提到过 taint 的 effect 值 `NoExecute` ,它会影响已经在节点上运行的 pod + * 如果 pod 不能忍受effect 值为 `NoExecute` 的 taint,那么 pod 将马上被驱逐 + * 如果 pod 能够忍受effect 值为 `NoExecute` 的 taint,但是在 toleration 定义中没有指定 `tolerationSeconds`,则 pod 还会一直在这个节点上运行。 + * 如果 pod 能够忍受effect 值为 `NoExecute` 的 taint,而且指定了 `tolerationSeconds`,则 pod 还能在这个节点上继续运行这个指定的时间长度。 + + + 此外,Kubernetes 1.6 已经支持(alpha阶段)节点问题的表示。换句话说,当某种条件为真时,node controller会自动给节点添加一个 taint。当前内置的 taint 包括: + * `node.kubernetes.io/not-ready`:节点未准备好。这相当于节点状态 `Ready` 的值为 "`False`"。 + * `node.kubernetes.io/unreachable`:node controller 访问不到节点. 这相当于节点状态 `Ready` 的值为 "`Unknown`"。 + * `node.kubernetes.io/out-of-disk`:节点磁盘耗尽。 + * `node.kubernetes.io/memory-pressure`:节点存在内存压力。 + * `node.kubernetes.io/disk-pressure`:节点存在磁盘压力。 + * `node.kubernetes.io/network-unavailable`:节点网络不可用。 + * `node.kubernetes.io/unschedulable`: 节点不可调度。 + * `node.cloudprovider.kubernetes.io/uninitialized`:如果 kubelet 启动时指定了一个 "外部" cloud provider,它将给当前节点添加一个 taint 将其标志为不可用。在 cloud-controller-manager 的一个 controller 初始化这个节点后,kubelet 将删除这个 taint。 + + +在启用了 `TaintBasedEvictions` 这个 alpha 功能特性后(在 Kubernetes controller manager 的 `--feature-gates` 参数中包含`TaintBasedEvictions=true` 开启这个功能特性,例如:`--feature-gates=FooBar=true,TaintBasedEvictions=true`),NodeController (或 kubelet)会自动给节点添加这类 taint,上述基于节点状态 Ready 对 pod 进行驱逐的逻辑会被禁用。 + +{{< note >}} + +注意:为了保证由于节点问题引起的 pod 驱逐[rate limiting](/docs/concepts/architecture/nodes/)行为正常,系统实际上会以 rate-limited 的方式添加 taint。在像 master 和 node 通讯中断等场景下,这避免了 pod 被大量驱逐。 +{{< /note >}} + + +使用这个 alpha 功能特性,结合 `tolerationSeconds` ,pod 就可以指定当节点出现一个或全部上述问题时还将在这个节点上运行多长的时间。 + + +比如,一个使用了很多本地状态的应用程序在网络断开时,仍然希望停留在当前节点上运行一段较长的时间,愿意等待网络恢复以避免被驱逐。在这种情况下,pod 的 toleration 可能是下面这样的: + +```yaml +tolerations: +- key: "node.alpha.kubernetes.io/unreachable" + operator: "Exists" + effect: "NoExecute" + tolerationSeconds: 6000 +``` + + +注意,Kubernetes 会自动给 pod 添加一个 key 为 `node.kubernetes.io/not-ready` 的 toleration 并配置 `tolerationSeconds=300`,除非用户提供的 pod 配置中已经已存在了 key 为 `node.kubernetes.io/not-ready` 的 toleration。同样,Kubernetes 会给 pod 添加一个 key 为 `node.kubernetes.io/unreachable` 的 toleration 并配置 `tolerationSeconds=300`,除非用户提供的 pod 配置中已经已存在了 key 为 `node.kubernetes.io/unreachable` 的 toleration。 + + +这种自动添加 toleration 机制保证了在其中一种问题被检测到时 pod 默认能够继续停留在当前节点运行 5 分钟。这两个默认 toleration 是由 [DefaultTolerationSeconds +admission controller](https://git.k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds)添加的。 + + +[DaemonSet](/docs/concepts/workloads/controllers/daemonset/) 中的 pod 被创建时,针对以下 taint 自动添加的 `NoExecute` 的 toleration 将不会指定 `tolerationSeconds`: + + * `node.alpha.kubernetes.io/unreachable` + * `node.kubernetes.io/not-ready` + +这保证了出现上述问题时 DaemonSet 中的 pod 永远不会被驱逐,这和 `TaintBasedEvictions` 这个特性被禁用后的行为是一样的。 + + + +## 基于节点状态添加 taint + + +1.8 版本引入了一个 alpha 特性,让 node controller 根据节点的状态创建 taint。当开启了这个特性时(通过给 scheduler 的 `--feature-gates` 添加 `TaintNodesByCondition=true` 参数,例如:`--feature-gates=FooBar=true,TaintNodesByCondition=true`),scheduler不会去检查节点的状态,而是检查节点的 taint。这确保了节点的状态不影响应该调度哪些 Pod 到节点上。用户可以通过给 Pod 添加 toleration 来选择忽略节点的一些问题(节点状态的形式表示)。 +从 Kubernetes 1.8 开始,DaemonSet controller 会自动添加如下 `NoSchedule` toleration,以防止 DaemonSet 中断。 + * `node.kubernetes.io/memory-pressure` + * `node.kubernetes.io/disk-pressure` + * `node.kubernetes.io/out-of-disk` (*只适合 critical pod*) + * `node.kubernetes.io/unschedulable` (1.10 或更高版本) + * `node.kubernetes.io/network-unavailable` (*只适合 host network*) + + +添加上述 toleration 确保了向后兼容,您也可以选择自由的向 DaemonSet 添加 toleration。 diff --git a/content/cn/docs/concepts/containers/container-environment-variables.md b/content/zh/docs/concepts/containers/container-environment-variables.md similarity index 100% rename from content/cn/docs/concepts/containers/container-environment-variables.md rename to content/zh/docs/concepts/containers/container-environment-variables.md diff --git a/content/cn/docs/concepts/containers/images.md b/content/zh/docs/concepts/containers/images.md similarity index 99% rename from content/cn/docs/concepts/containers/images.md rename to content/zh/docs/concepts/containers/images.md index 11f9024448..cc123251be 100644 --- a/content/cn/docs/concepts/containers/images.md +++ b/content/zh/docs/concepts/containers/images.md @@ -87,7 +87,7 @@ Kubelet会获取并且定期刷新ECR的凭证。它需要以下权限 - 验证是否满足以上要求 - 获取工作站的$REGION (例如 `us-west-2`)凭证,使用凭证SSH到主机手动运行docker,检查是否运行 -- 验证kublet是否使用参数`--cloud-provider=aws`运行 +- 验证kubelet是否使用参数`--cloud-provider=aws`运行 - 检查kubelet日志(例如 `journalctl -u kubelet`),是否有类似的行 - `plugins.go:56] Registering credential provider: aws-ecr-key` - `provider.go:91] Refreshing cache for provider: *aws_credentials.ecrProvider` diff --git a/content/cn/docs/concepts/example-concept-template.md b/content/zh/docs/concepts/example-concept-template.md similarity index 100% rename from content/cn/docs/concepts/example-concept-template.md rename to content/zh/docs/concepts/example-concept-template.md diff --git a/content/cn/docs/concepts/overview/components.md b/content/zh/docs/concepts/overview/components.md similarity index 100% rename from content/cn/docs/concepts/overview/components.md rename to content/zh/docs/concepts/overview/components.md diff --git a/content/cn/docs/concepts/overview/kubernetes-api.md b/content/zh/docs/concepts/overview/kubernetes-api.md similarity index 100% rename from content/cn/docs/concepts/overview/kubernetes-api.md rename to content/zh/docs/concepts/overview/kubernetes-api.md diff --git a/content/cn/docs/concepts/overview/what-is-kubernetes.md b/content/zh/docs/concepts/overview/what-is-kubernetes.md similarity index 100% rename from content/cn/docs/concepts/overview/what-is-kubernetes.md rename to content/zh/docs/concepts/overview/what-is-kubernetes.md diff --git a/content/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md b/content/zh/docs/concepts/overview/working-with-objects/kubernetes-objects.md similarity index 100% rename from content/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md rename to content/zh/docs/concepts/overview/working-with-objects/kubernetes-objects.md diff --git a/content/cn/docs/concepts/overview/working-with-objects/nginx-deployment.yaml b/content/zh/docs/concepts/overview/working-with-objects/nginx-deployment.yaml similarity index 100% rename from content/cn/docs/concepts/overview/working-with-objects/nginx-deployment.yaml rename to content/zh/docs/concepts/overview/working-with-objects/nginx-deployment.yaml diff --git a/content/cn/docs/concepts/policy/pod-security-policy.md b/content/zh/docs/concepts/policy/pod-security-policy.md similarity index 100% rename from content/cn/docs/concepts/policy/pod-security-policy.md rename to content/zh/docs/concepts/policy/pod-security-policy.md diff --git a/content/cn/docs/concepts/policy/psp.yaml b/content/zh/docs/concepts/policy/psp.yaml similarity index 100% rename from content/cn/docs/concepts/policy/psp.yaml rename to content/zh/docs/concepts/policy/psp.yaml diff --git a/content/cn/docs/concepts/policy/resource-quotas.md b/content/zh/docs/concepts/policy/resource-quotas.md similarity index 100% rename from content/cn/docs/concepts/policy/resource-quotas.md rename to content/zh/docs/concepts/policy/resource-quotas.md diff --git a/content/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md b/content/zh/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md similarity index 100% rename from content/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md rename to content/zh/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md diff --git a/content/cn/docs/concepts/services-networking/connect-applications-service.md b/content/zh/docs/concepts/services-networking/connect-applications-service.md similarity index 100% rename from content/cn/docs/concepts/services-networking/connect-applications-service.md rename to content/zh/docs/concepts/services-networking/connect-applications-service.md diff --git a/content/cn/docs/concepts/services-networking/curlpod.yaml b/content/zh/docs/concepts/services-networking/curlpod.yaml similarity index 100% rename from content/cn/docs/concepts/services-networking/curlpod.yaml rename to content/zh/docs/concepts/services-networking/curlpod.yaml diff --git a/content/cn/docs/concepts/services-networking/dns-pod-service.md b/content/zh/docs/concepts/services-networking/dns-pod-service.md similarity index 100% rename from content/cn/docs/concepts/services-networking/dns-pod-service.md rename to content/zh/docs/concepts/services-networking/dns-pod-service.md diff --git a/content/cn/docs/concepts/services-networking/hostaliases-pod.yaml b/content/zh/docs/concepts/services-networking/hostaliases-pod.yaml similarity index 100% rename from content/cn/docs/concepts/services-networking/hostaliases-pod.yaml rename to content/zh/docs/concepts/services-networking/hostaliases-pod.yaml diff --git a/content/cn/docs/concepts/services-networking/ingress.yaml b/content/zh/docs/concepts/services-networking/ingress.yaml similarity index 100% rename from content/cn/docs/concepts/services-networking/ingress.yaml rename to content/zh/docs/concepts/services-networking/ingress.yaml diff --git a/content/cn/docs/concepts/services-networking/network-policies.md b/content/zh/docs/concepts/services-networking/network-policies.md similarity index 100% rename from content/cn/docs/concepts/services-networking/network-policies.md rename to content/zh/docs/concepts/services-networking/network-policies.md diff --git a/content/cn/docs/concepts/services-networking/nginx-secure-app.yaml b/content/zh/docs/concepts/services-networking/nginx-secure-app.yaml similarity index 100% rename from content/cn/docs/concepts/services-networking/nginx-secure-app.yaml rename to content/zh/docs/concepts/services-networking/nginx-secure-app.yaml diff --git a/content/cn/docs/concepts/services-networking/nginx-svc.yaml b/content/zh/docs/concepts/services-networking/nginx-svc.yaml similarity index 100% rename from content/cn/docs/concepts/services-networking/nginx-svc.yaml rename to content/zh/docs/concepts/services-networking/nginx-svc.yaml diff --git a/content/cn/docs/concepts/services-networking/run-my-nginx.yaml b/content/zh/docs/concepts/services-networking/run-my-nginx.yaml similarity index 100% rename from content/cn/docs/concepts/services-networking/run-my-nginx.yaml rename to content/zh/docs/concepts/services-networking/run-my-nginx.yaml diff --git a/content/cn/docs/concepts/services-networking/service.md b/content/zh/docs/concepts/services-networking/service.md similarity index 100% rename from content/cn/docs/concepts/services-networking/service.md rename to content/zh/docs/concepts/services-networking/service.md diff --git a/content/cn/docs/concepts/workloads/controllers/cron-jobs.md b/content/zh/docs/concepts/workloads/controllers/cron-jobs.md similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/cron-jobs.md rename to content/zh/docs/concepts/workloads/controllers/cron-jobs.md diff --git a/content/cn/docs/concepts/workloads/controllers/daemonset.md b/content/zh/docs/concepts/workloads/controllers/daemonset.md similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/daemonset.md rename to content/zh/docs/concepts/workloads/controllers/daemonset.md diff --git a/content/cn/docs/concepts/workloads/controllers/daemonset.yaml b/content/zh/docs/concepts/workloads/controllers/daemonset.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/daemonset.yaml rename to content/zh/docs/concepts/workloads/controllers/daemonset.yaml diff --git a/content/cn/docs/concepts/workloads/controllers/deployment.md b/content/zh/docs/concepts/workloads/controllers/deployment.md similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/deployment.md rename to content/zh/docs/concepts/workloads/controllers/deployment.md diff --git a/content/cn/docs/concepts/workloads/controllers/frontend.yaml b/content/zh/docs/concepts/workloads/controllers/frontend.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/frontend.yaml rename to content/zh/docs/concepts/workloads/controllers/frontend.yaml diff --git a/content/cn/docs/concepts/workloads/controllers/garbage-collection.md b/content/zh/docs/concepts/workloads/controllers/garbage-collection.md similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/garbage-collection.md rename to content/zh/docs/concepts/workloads/controllers/garbage-collection.md diff --git a/content/cn/docs/concepts/workloads/controllers/hpa-rs.yaml b/content/zh/docs/concepts/workloads/controllers/hpa-rs.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/hpa-rs.yaml rename to content/zh/docs/concepts/workloads/controllers/hpa-rs.yaml diff --git a/content/cn/docs/concepts/workloads/controllers/job.yaml b/content/zh/docs/concepts/workloads/controllers/job.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/job.yaml rename to content/zh/docs/concepts/workloads/controllers/job.yaml diff --git a/content/cn/docs/concepts/workloads/controllers/my-repset.yaml b/content/zh/docs/concepts/workloads/controllers/my-repset.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/my-repset.yaml rename to content/zh/docs/concepts/workloads/controllers/my-repset.yaml diff --git a/content/cn/docs/concepts/workloads/controllers/nginx-deployment.yaml b/content/zh/docs/concepts/workloads/controllers/nginx-deployment.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/nginx-deployment.yaml rename to content/zh/docs/concepts/workloads/controllers/nginx-deployment.yaml diff --git a/content/cn/docs/concepts/workloads/controllers/replication.yaml b/content/zh/docs/concepts/workloads/controllers/replication.yaml similarity index 100% rename from content/cn/docs/concepts/workloads/controllers/replication.yaml rename to content/zh/docs/concepts/workloads/controllers/replication.yaml diff --git a/content/cn/docs/concepts/workloads/pods/init-containers.md b/content/zh/docs/concepts/workloads/pods/init-containers.md similarity index 100% rename from content/cn/docs/concepts/workloads/pods/init-containers.md rename to content/zh/docs/concepts/workloads/pods/init-containers.md diff --git a/content/cn/docs/concepts/workloads/pods/pod-lifecycle.md b/content/zh/docs/concepts/workloads/pods/pod-lifecycle.md similarity index 100% rename from content/cn/docs/concepts/workloads/pods/pod-lifecycle.md rename to content/zh/docs/concepts/workloads/pods/pod-lifecycle.md diff --git a/content/cn/docs/concepts/workloads/pods/podpreset.md b/content/zh/docs/concepts/workloads/pods/podpreset.md similarity index 100% rename from content/cn/docs/concepts/workloads/pods/podpreset.md rename to content/zh/docs/concepts/workloads/pods/podpreset.md diff --git a/content/zh/docs/getting-started-guides/ubuntu/security.md b/content/zh/docs/getting-started-guides/ubuntu/security.md new file mode 100644 index 0000000000..49839858b2 --- /dev/null +++ b/content/zh/docs/getting-started-guides/ubuntu/security.md @@ -0,0 +1,68 @@ +--- +title: 安全考虑 +content_template: templates/task +--- + + +{{% capture overview %}} + +默认情况下,所有提供的节点之间的所有连接(包括 etcd 集群)都通过 easyrsa 的 TLS 进行保护。 + +本文介绍已部署集群的安全注意事项和生产环境建议。 +{{% /capture %}} +{{% capture prerequisites %}} + +本文假定您拥有一个使用 Juju 部署的正在运行的集群。 +{{% /capture %}} + + +{{% capture steps %}} + +## 实现 + +TLS 和 easyrsa 的实现使用以下 [layers](https://jujucharms.com/docs/2.2/developer-layers)。 + +[layer-tls-client](https://github.com/juju-solutions/layer-tls-client) +[layer-easyrsa](https://github.com/juju-solutions/layer-easyrsa) + + +## 限制 ssh 访问 + +默认情况下,管理员可以 ssh 到集群中的任意已部署节点。您可以通过以下命令来批量禁用集群节点的 ssh 访问权限。 + + juju model-config proxy-ssh=true + +注意:Juju 控制器节点在您的云中仍然有开放的 ssh 访问权限,并且在这种情况下将被用作跳板机。 + +有关如何管理 ssh 密钥的说明,请参阅 Juju 文档中的 [模型管理](https://jujucharms.com/docs/2.2/models) 页面。 +{{% /capture %}} + + diff --git a/content/zh/docs/reference/access-authn-authz/admission-controllers.md b/content/zh/docs/reference/access-authn-authz/admission-controllers.md new file mode 100755 index 0000000000..d855803396 --- /dev/null +++ b/content/zh/docs/reference/access-authn-authz/admission-controllers.md @@ -0,0 +1,563 @@ +--- +assignees: +- bprashanth +- davidopp +- derekwaynecarr +- erictune +- janetkuo +- thockin +cn-approvers: +- linyouchong +title: 使用准入控制插件 +--- + + +* TOC +{:toc} + + +## 什么是准入控制插件? + + +一个准入控制插件是一段代码,它会在请求通过认证和授权之后、对象被持久化之前拦截到达 API server 的请求。插件代码运行在 API server 进程中,必须将其编译为二进制文件,以便在此时使用。 + + +在每个请求被集群接受之前,准入控制插件依次执行。如果插件序列中任何一个拒绝了该请求,则整个请求将立即被拒绝并且返回一个错误给终端用户。 + + +准入控制插件可能会在某些情况下改变传入的对象,从而应用系统配置的默认值。另外,作为请求处理的一部分,准入控制插件可能会对相关的资源进行变更,以实现类似增加配额使用量这样的功能。 + + +## 为什么需要准入控制插件? + + +Kubernetes 的许多高级功能都要求启用一个准入控制插件,以便正确地支持该特性。因此,一个没有正确配置准入控制插件的 Kubernetes API server 是不完整的,它不会支持您所期望的所有特性。 + + +## 如何启用一个准入控制插件? + + +Kubernetes API server 支持一个标志参数 `admission-control` ,它指定了一个用于在集群修改对象之前调用的以逗号分隔的准入控制插件顺序列表。 + + +## 每个插件的功能是什么? + +### AlwaysAdmit + + +使用这个插件自行通过所有的请求。 + +### AlwaysPullImages + + +这个插件修改每一个新创建的 Pod 的镜像拉取策略为 Always 。这在多租户集群中是有用的,这样用户就可以放心,他们的私有镜像只能被那些有凭证的人使用。没有这个插件,一旦镜像被拉取到节点上,任何用户的 pod 都可以通过已了解到的镜像的名称(假设 pod 被调度到正确的节点上)来使用它,而不需要对镜像进行任何授权检查。当启用这个插件时,总是在启动容器之前拉取镜像,这意味着需要有效的凭证。 + +### AlwaysDeny + + +拒绝所有的请求。用于测试。 + + +### DenyExecOnPrivileged (已废弃) + + +如果一个 pod 拥有一个特权容器,这个插件将拦截所有在该 pod 中执行 exec 命令的请求。 + + +如果集群支持特权容器,并且希望限制最终用户在这些容器中执行 exec 命令的能力,我们强烈建议启用这个插件。 + + +此功能已合并到 [DenyEscalatingExec](#denyescalatingexec)。 + +### DenyEscalatingExec + + +这个插件将拒绝在拥有衍生特权而具备访问宿主机能力的 pod 中执行 exec 和 attach 命令。这包括在特权模式运行的 pod ,可以访问主机 IPC 命名空间的 pod ,和访问主机 PID 命名空间的 pod 。 + + +如果集群支持使用以衍生特权运行的容器,并且希望限制最终用户在这些容器中执行 exec 命令的能力,我们强烈建议启用这个插件。 + +### ImagePolicyWebhook + + +ImagePolicyWebhook 插件允许使用一个后端的 webhook 做出准入决策。您可以按照如下配置 admission-control 选项来启用这个插件: + +```shell +--admission-control=ImagePolicyWebhook +``` + + +#### 配置文件格式 + +ImagePolicyWebhook 插件使用了admission config 文件 `--admission-control-config-file` 来为后端行为设置配置选项。该文件可以是 json 或 yaml ,并具有以下格式: + +```javascript +{ + "imagePolicy": { + "kubeConfigFile": "path/to/kubeconfig/for/backend", + "allowTTL": 50, // time in s to cache approval + "denyTTL": 50, // time in s to cache denial + "retryBackoff": 500, // time in ms to wait between retries + "defaultAllow": true // determines behavior if the webhook backend fails + } +} +``` + + +这个配置文件必须引用一个 [kubeconfig](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) 格式的文件,并在其中配置指向后端的连接。且需要在 TLS 上与后端进行通信。 + + +kubeconfig 文件的 cluster 字段需要指向远端服务,user 字段需要包含已返回的授权者。 + +```yaml +# clusters refers to the remote service. +clusters: +- name: name-of-remote-imagepolicy-service + cluster: + certificate-authority: /path/to/ca.pem # CA for verifying the remote service. + server: https://images.example.com/policy # URL of remote service to query. Must use 'https'. + +# users refers to the API server's webhook configuration. +users: +- name: name-of-api-server + user: + client-certificate: /path/to/cert.pem # cert for the webhook plugin to use + client-key: /path/to/key.pem # key matching the cert +``` + +对于更多的 HTTP 配置,请参阅 [kubeconfig](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) 文档。 + + +#### 请求载荷 + + +当面对一个准入决策时,API server 发送一个描述操作的 JSON 序列化的 api.imagepolicy.v1alpha1.ImageReview 对象。该对象包含描述被审核容器的字段,以及所有匹配 `*.image-policy.k8s.io/*` 的 pod 注释。 + + +注意,webhook API 对象与其他 Kubernetes API 对象一样受制于相同的版本控制兼容性规则。实现者应该知道对 alpha 对象的更宽松的兼容性,并检查请求的 "apiVersion" 字段,以确保正确的反序列化。此外,API server 必须启用 imagepolicy.k8s.io/v1alpha1 API 扩展组 (`--runtime-config=imagepolicy.k8s.io/v1alpha1=true`)。 + + +请求载荷例子: + +``` +{ + "apiVersion":"imagepolicy.k8s.io/v1alpha1", + "kind":"ImageReview", + "spec":{ + "containers":[ + { + "image":"myrepo/myimage:v1" + }, + { + "image":"myrepo/myimage@sha256:beb6bd6a68f114c1dc2ea4b28db81bdf91de202a9014972bec5e4d9171d90ed" + } + ], + "annotations":[ + "mycluster.image-policy.k8s.io/ticket-1234": "break-glass" + ], + "namespace":"mynamespace" + } +} +``` + + +远程服务将填充请求的 ImageReviewStatus 字段,并返回允许或不允许访问。响应主体的 "spec" 字段会被忽略,并且可以省略。一个允许访问应答会返回: + +``` +{ + "apiVersion": "imagepolicy.k8s.io/v1alpha1", + "kind": "ImageReview", + "status": { + "allowed": true + } +} +``` + + +不允许访问,服务将返回: + +``` +{ + "apiVersion": "imagepolicy.k8s.io/v1alpha1", + "kind": "ImageReview", + "status": { + "allowed": false, + "reason": "image currently blacklisted" + } +} +``` + + +更多的文档,请参阅 `imagepolicy.v1alpha1` API 对象 和 `plugin/pkg/admission/imagepolicy/admission.go`。 + + +使用注解进行扩展 + + +一个 pod 中匹配 `*.image-policy.k8s.io/*` 的注解都会被发送给 webhook。这允许了解镜像策略后端的用户向它发送额外的信息,并为不同的后端实现接收不同的信息。 + + +您可以在这里输入的信息有: + + + * 在紧急情况下,请求 "break glass" 覆盖一个策略。 + + * 从一个记录了 break-glass 的请求的票证系统得到的一个票证编号 + + * 向策略服务器提供一个提示,用于提供镜像的 imageID,以方便它进行查找 + + +在任何情况下,注解都是由用户提供的,并不会被 Kubernetes 以任何方式进行验证。在将来,如果一个注解确定将被广泛使用,它可能会被提升为 ImageReviewSpec 的一个命名字段。 + +### ServiceAccount + + +这个插件实现了 [serviceAccounts](/docs/user-guide/service-accounts) 的自动化。 +如果您打算使用 Kubernetes 的 ServiceAccount 对象,我们强烈建议您使用这个插件。 + +### SecurityContextDeny + + +该插件将拒绝任何试图设置特定扩展 [SecurityContext](/docs/user-guide/security-context) 字段的 pod。如果集群没有使用 [ pod 安全策略](/docs/user-guide/pod-security-policy) 来限制安全上下文所能获取的值集,那么应该启用这个功能。 + +### ResourceQuota + + +此插件将观察传入的请求,并确保它不违反任何一个 `Namespace` 中的 `ResourceQuota` 对象中枚举出来的约束。如果您在 Kubernetes 部署中使用了 `ResourceQuota` +,您必须使用这个插件来强制执行配额限制。 + + +请查看 [resourceQuota 设计文档](https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md) 和 [Resource Quota 例子](/docs/concepts/policy/resource-quotas/) 了解更多细节。 + + +强烈建议将这个插件配置在准入控制插件序列的末尾。这样配额就不会过早地增加,只会在稍后的准入控制中被拒绝。 + +### LimitRanger + + +这个插件将观察传入的请求,并确保它不会违反 `Namespace` 中 `LimitRange` 对象枚举的任何约束。如果您在 Kubernetes 部署中使用了 `LimitRange` 对象,则必须使用此插件来执行这些约束。LimitRanger 插件还可以用于将默认资源请求应用到没有指定任何内容的 Pod ;当前,默认的 LimitRanger 对 `default` 命名空间中的所有 pod 应用了0.1 CPU 的需求。 + + +请查看 [limitRange 设计文档](https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md) 和 [Limit Range 例子](/docs/tasks/configure-pod-container/limit-range/) 了解更多细节。 + + +### InitialResources (试验) + + +此插件观察 pod 创建请求。如果容器忽略了 requests 和 limits 计算资源,那么插件就会根据运行相同镜像的容器的历史使用记录来自动填充计算资源请求。如果没有足够的数据进行决策,则请求将保持不变。当插件设置了一个计算资源请求时,它会用它自动填充的计算资源对 pod 进行注解。 + + +请查看 [InitialResouces 建议书](https://git.k8s.io/community/contributors/design-proposals/initial-resources.md) 了解更多细节。 + +### NamespaceLifecycle + + +这个插件强制不能在一个正在被终止的 `Namespace` 中创建新对象,和确保使用不存在 `Namespace` 的请求被拒绝。 + + +删除 `Namespace` 触发了在该命名空间中删除所有对象( pod 、 services 等)的一系列操作。为了确保这个过程的完整性,我们强烈建议启用这个插件。 + +### DefaultStorageClass + + +这个插件观察不指定 storage class 字段的 `PersistentVolumeClaim` 对象的创建,并自动向它们添加默认的 storage class 。这样,不指定 storage class 字段的用户根本无需关心它们,它们将得到默认的 storage class 。 + + +当没有配置默认 storage class 时,这个插件不会执行任何操作。当一个以上的 storage class 被标记为默认时,它拒绝 `PersistentVolumeClaim` 创建并返回一个错误,管理员必须重新检查 `StorageClass` 对象,并且只标记一个作为默认值。这个插件忽略了任何 `PersistentVolumeClaim` 更新,它只对创建起作用。 + + +查看 [persistent volume](/docs/user-guide/persistent-volumes) 文档了解 persistent volume claims 和 storage classes 并了解如何将一个 storage classes 标志为默认。 + +### DefaultTolerationSeconds + + +这个插件设置了 pod 默认的宽恕容忍时间,对于那些没有设置宽恕容忍时间的 pod ,可以容忍 `notready:NoExecute` 和 `unreachable:NoExecute` 这些 taint 5分钟。 + +### PodNodeSelector + + +通过读取命名空间注释和全局配置,这个插件默认并限制了在一个命名空间中使用什么节点选择器。 + + +#### 配置文件格式 + +PodNodeSelector 插件使用准入配置文件 `--admission-control-config-file` 来设置后端行为的配置选项。 + + +请注意,配置文件格式将在未来版本中移至版本化文件。 + + +这个文件可能是 json 或 yaml ,格式如下: + +```yaml +podNodeSelectorPluginConfig: + clusterDefaultNodeSelector: + namespace1: + namespace2: +``` + + +#### 配置注解格式 + +PodNodeSelector 插件使用键为 `scheduler.alpha.kubernetes.io/node-selector` 的注解将节点选择器分配给 namespace 。 + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + annotations: + scheduler.alpha.kubernetes.io/node-selector: + name: namespace3 +``` + +### PodSecurityPolicy + + +此插件负责在创建和修改 pod 时根据请求的安全上下文和可用的 pod 安全策略确定是否应该通过 pod。 + + +对于 Kubernetes < 1.6.0 的版本,API Server 必须启用 extensions/v1beta1/podsecuritypolicy API 扩展组 (`--runtime-config=extensions/v1beta1/podsecuritypolicy=true`)。 + + +查看 [Pod 安全策略文档](/docs/concepts/policy/pod-security-policy/) 了解更多细节。 + +### NodeRestriction + + +这个插件限制了 kubelet 可以修改的 `Node` 和 `Pod` 对象。 为了受到这个入场插件的限制,kubelet 必须在 `system:nodes` 组中使用凭证,并使用 `system:node:` 形式的用户名。这样的 kubelet 只允许修改自己的 `Node` API 对象,只能修改绑定到节点本身的 `Pod` 对象。 + +未来的版本可能会添加额外的限制,以确保 kubelet 具有正确操作所需的最小权限集。 + + +## 是否有推荐的一组插件可供使用? + + +有。 +对于 Kubernetes >= 1.6.0 版本,我们强烈建议运行以下一系列准入控制插件(顺序也很重要) + +```shell +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds +``` + + +对于 Kubernetes >= 1.4.0 版本,我们强烈建议运行以下一系列准入控制插件(顺序也很重要) + +```shell +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota +``` + + +对于 Kubernetes >= 1.2.0 版本,我们强烈建议运行以下一系列准入控制插件(顺序也很重要) + +```shell +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota +``` + + +对于 Kubernetes >= 1.0.0 版本,我们强烈建议运行以下一系列准入控制插件(顺序也很重要) + +```shell +--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,PersistentVolumeLabel,ResourceQuota +``` diff --git a/content/zh/docs/reference/access-authn-authz/authorization.md b/content/zh/docs/reference/access-authn-authz/authorization.md new file mode 100644 index 0000000000..e8d8d8043e --- /dev/null +++ b/content/zh/docs/reference/access-authn-authz/authorization.md @@ -0,0 +1,304 @@ +--- +reviewers: +- erictune +- lavalamp +- deads2k +- liggitt +cnapprove: +- fatalc + +title: 授权概述 +content_template: templates/concept +weight: 60 +--- + +{{% capture overview %}} + +了解有关 Kubernetes 授权的更多信息,包括使用支持的授权模块创建策略的详细信息。 +{{% /capture %}} + +{{% capture body %}} + + +在Kubernetes中,您必须在授权(授予访问权限)之前进行身份验证(登录),有关身份验证的信息, +请参阅 [访问控制概述](/docs/reference/access-authn-authz/controlling-access/). + +Kubernetes期望REST API请求中常见的属性。 +这意味着Kubernetes授权适用于现有的组织范围或云提供商范围的访问控制系统, +除了Kubernetes API之外,它还可以处理其他API。 + + + +## 确定是允许还是拒绝请求 +Kubernetes 使用 API ​​服务器授权 API 请求。它根据所有策略评估所有请求属性来决定允许或拒绝请求。 +一个API请求的所有部分必须被某些策略允许才能继续。这意味着默认情况下拒绝权限。 + +(尽管 Kubernetes 使用 API ​​服务器,但是依赖于特定种类对象的特定字段的访问控制和策略由准入控制器处理。) + +配置多个授权模块时,将按顺序检查每个模块。 +如果任何授权模块批准或拒绝请求,则立即返回该决定,并且不会与其他授权模块协商。 +如果所有模块对请求没有意见,则拒绝该请求。一个拒绝响应返回 HTTP 状态代码 403 。 + + + +## 审查您的请求属性 +Kubernetes仅审查以下API请求属性: + + * **user** - 身份验证期间提供的`user`字符串。 + * **group** - 经过身份验证的用户所属的组名列表。 + * **extra** - 由身份验证层提供的任意字符串键到字符串值的映射。 + * **API** - 指示请求是否针对 API 资源。 + * **Request path** - 各种非资源端点的路径,如`/api`或`/healthz`。 + * **API request verb** - API 动词`get`,`list`,`create`,`update`,`patch`,`watch`,`proxy`,`redirect`,`delete`和`deletecollection`用于资源请求。要确定资源API端点的请求动词,请参阅[确定请求动词](/docs/reference/access-authn-authz/authorization/#determine-whether-a-request-is-allowed-or-denied)。 + * **HTTP request verb** - HTTP 动词`get`,`post`,`put`和`delete`用于非资源请求。 + * **Resource** - 正在访问的资源的 ID 或名称(仅限资源请求) - 对于使用`get`,`update`,`patch`和`delete`动词的资源请求,您必须提供资源名称。 + * **Subresource** - 正在访问的子资源(仅限资源请求)。 + * **Namespace** - 正在访问的对象的名称空间(仅适用于命名空间资源请求)。 + * **API group** - 正在访问的 API 组(仅限资源请求)。空字符串表示[核心API组](/docs/concepts/overview/kubernetes-api/)。 + + + +## 确定请求动词 + +要确定资源API端点的请求谓词,请检查所使用的 HTTP 动词以及请求是否对单个资源或资源集合起作用: + +HTTP 动词 | request 动词 +----------|--------------- +POST | create +GET, HEAD | get (单个资源), list (资源集合) +PUT | update +PATCH | patch +DELETE | delete (单个资源), deletecollection (资源集合) + +Kubernetes有时使用专门的动词检查授权以获得额外的权限。例如: + +* [Pod安全策略](/docs/concepts/policy/pod-security-policy/) 检查`policy` API组中`podsecuritypolicies`资源的`use`动词的授权。 +* [RBAC](/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping) 检查`rbac.authorization.k8s.io` API 组中`roles`和`clusterroles`资源的`bind`动词的授权。 +* [认证](/docs/reference/access-authn-authz/authentication/) layer检查核心API组中`users`,`groups`和`serviceaccounts`的`impersonate`动词的授权,以及`authentication.k8s.io` API组中的`userextras`。 + + + +## 授权模块 + * **Node** - 一个专用授权程序,根据计划运行的 pod 为 kubelet 授予权限。了解有关使用节点授权模式的更多信息,请参阅[节点授权](/docs/reference/access-authn-authz/node/). + * **ABAC** - 基于属性的访问控制(ABAC) 定义了一种访问控制范例,通过使用将属性组合在一起的策略,将访问权限授予用户。策略可以使用任何类型的属性(用户属性,资源属性,对象,环境属性等)。要了解有关使用 ABAC 模式的更多信息,请参阅[ABAC 模式](/docs/reference/access-authn-authz/abac/)。 + * **RBAC** - 基于角色的访问控制(RBAC)是一种基于企业内个人用户的角色来管理对计算机或网络资源的访问的方法。在此上下文中,权限是单个用户执行特定任务的能力,例如查看,创建或修改文件。要了解有关使用 RBAC 模式的更多信息,请参阅[RBAC 模式](/docs/reference/access-authn-authz/rbac/)。 + * 当指定的RBAC(基于角色的访问控制)使用`rbac.authorization.k8s.io` API 组来驱动授权决策时,允许管理员通过 Kubernetes API 动态配置权限策略。 + * 要启用RBAC,请使用`--authorization-mode = RBAC`启动 apiserver 。 + * **Webhook** - WebHook 是一个 HTTP 回调: 发生某些事情时调用的 HTTP POST;通过 HTTP POST 进行简单的事件通知。实现 WebHooks 的 Web 应用程序会在发生某些事情时将消息发布到URL。要了解有关使用 Webhook 模式的更多信息,请参阅[Webhook 模式](/docs/reference/access-authn-authz/webhook/)。 + + + +#### 检查API访问 + +`kubectl`提供`auth can-i`子命令,用于快速查询 API 授权层。 +该命令使用`SelfSubjectAccessReview` API来确定当前用户是否可以执行给定操作,并且无论使用何种授权模式都可以工作。 + +```bash +$ kubectl auth can-i create deployments --namespace dev +yes +$ kubectl auth can-i create deployments --namespace prod +no +``` + +管理员可以将此与[用户模拟](/docs/reference/access-authn-authz/authentication/#user-impersonation)结合使用,以确定其他用户可以执行的操作。 + +```bash +$ kubectl auth can-i list secrets --namespace dev --as dave +no +``` + + +`SelfSubjectAccessReview`是`authorization.k8s.io` API组的一部分,它将 API 服务器授权公开给外部服务。 +该组中的其他资源包括: + +* `SubjectAccessReview` - 访问任何用户的 Review ,而不仅仅是当前用户。用于将授权决策委派给API服务器。例如,kubelet 和扩展 API 服务器使用它来确定用户对自己的API的访问权限。 +* `LocalSubjectAccessReview` - 与`SubjectAccessReview`类似,但仅限于特定的命名空间。 +* `SelfSubjectRulesReview` - 返回用户可在命名空间内执行的操作集的审阅。用户可以快速汇总自己的访问权限,或者用于隐藏/显示操作的UI。 + +可以通过创建普通 Kubernetes 资源来查询这些 API ,其中返回对象的响应“status”字段是查询的结果。 + +```bash +$ kubectl create -f - -o yaml << EOF +apiVersion: authorization.k8s.io/v1 +kind: SelfSubjectAccessReview +spec: + resourceAttributes: + group: apps + name: deployments + verb: create + namespace: dev +EOF + +apiVersion: authorization.k8s.io/v1 +kind: SelfSubjectAccessReview +metadata: + creationTimestamp: null +spec: + resourceAttributes: + group: apps + name: deployments + namespace: dev + verb: create +status: + allowed: true + denied: false +``` + + + +## 为您的授权模块使用标志 + +您必须在策略中包含一个标志,以指明您的策略包含哪个授权模块: + +可以使用以下标志: + + * `--authorization-mode=ABAC` 基于属性的访问控制(ABAC)模式允许您使用本地文件配置策略。 + * `--authorization-mode=RBAC` 基于角色的访问控制(RBAC)模式允许您使用 Kubernetes API 创建和存储策略。 + * `--authorization-mode=Webhook` WebHook 是一种 HTTP 回调模式,允许您使用远程REST端点管理授权。 + * `--authorization-mode=Node` 节点授权是一种特殊用途的授权模式,专门授权由 kubelet 发出的API请求。 + * `--authorization-mode=AlwaysDeny` 该标志阻止所有请求。仅将此标志用于测试。 + * `--authorization-mode=AlwaysAllow` 此标志允许所有请求。仅在您不需要 API 请求的授权时才使用此标志。 + +您可以选择多个授权模块。按顺序检查模块,以便较早的模块具有更高的优先级来允许或拒绝请求。 + + +## 通过pod创建权限升级 + +能够在命名空间中创建 pod 的用户可能会升级其在该命名空间内的权限。 +他们可以创建在该命名空间内访问其权限的 pod 。 +他们可以创建用户无法自己读取 secret 的 pod ,或者在具有不同/更高权限的服务帐户下运行的 pod 。 + +{{< caution >}} + +**注意:** 系统管理员在授予对 pod 创建的访问权限时要小心。 +授予在命名空间中创建 pod(或创建pod的控制器)的权限的用户可以: +读取命名空间中的所有秘密;读取命名空间中的所有配置映射; +并模拟命名空间中的任何服务帐户并执行帐户可以执行的任何操作。 +无论采用何种授权方式,这都适用。 +{{< /caution >}} +{{% /capture %}} + +{{% capture whatsnext %}} + +* 要了解有关身份验证的更多信息,请参阅 **身份验证** [控制对Kubernetes API的访问](/docs/reference/access-authn-authz/controlling-access/). +* 要了解有关准入控制的更多信息,请参阅 [使用准入控制器](/docs/reference/access-authn-authz/admission-controllers/). +{{% /capture %}} \ No newline at end of file diff --git a/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md b/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md new file mode 100644 index 0000000000..80acad7403 --- /dev/null +++ b/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md @@ -0,0 +1,491 @@ +--- +title: kube-proxy +notitle: true +--- +## kube-proxy + + + +### 概要 + +Kubernetes 在每个节点上运行网络代理。这反映每个节点上 Kubernetes API 中定义的服务,并且可以做简单的 +TCP 和 UDP 流转发或在一组后端中轮询,进行 TCP 和 UDP 转发。目前服务集群 IP 和端口通过由服务代理打开的端口 +的 Docker-links-compatible 环境变量找到。有一个可选的为这些集群 IP 提供集群 DNS 的插件。用户必须 +通过 apiserver API 创建服务去配置代理。 + +``` +kube-proxy [flags] +``` + + +### 选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--bind-address 0.0.0.0     默认: 0.0.0.0
要服务的代理服务器的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)
--cleanup
如果为 true,清理 iptables 和 ipvs 规则并退出。
--cleanup-ipvs     默认: true
如果为 true,则使 kube-proxy 在运行之前清理 ipvs 规则。 默认为 true
--cluster-cidr string
集群中的 CIDR 范围。 配置后,从该范围之外发送到服务集群 IP 的流量将被伪装,从 pod 发送到外部 LoadBalancer IP 的流量将被定向到相应的集群 IP
--config string
配置文件的路径。
--config-sync-period duration     默认: 15m0s
来自 apiserver 的配置的刷新频率。必须大于 0。
--conntrack-max-per-core int32     默认: 32768
每个 CPU 核跟踪的最大 NAT 连接数(0 表示保留原样限制并忽略 conntrack-min)。
--conntrack-min int32     默认: 131072
要分配的最小 conntrack 条目数,不管 conntrack-max-per-core(设置 conntrack-max-per-core = 0 保留原样限制)。
--conntrack-tcp-timeout-close-wait duration     默认: 1h0m0s
处于 CLOSE_WAIT 状态的 TCP 连接的 NAT 超时
--conntrack-tcp-timeout-established duration     默认: 24h0m0s
已建立的 TCP 连接的空闲超时(0 保持原样)
--feature-gates mapStringBool
一组 key=value 对,用于描述 alpha/experimental 特征的特征门。选项包括:
APIListChunking=true|false (BETA - 默认=true)
APIResponseCompression=true|false (ALPHA - 默认=false)
AdvancedAuditing=true|false (BETA - 默认=true)
AllAlpha=true|false (ALPHA - 默认=false)
AppArmor=true|false (BETA - 默认=true)
AttachVolumeLimit=true|false (ALPHA - 默认=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认=false)
BlockVolume=true|false (ALPHA - 默认=false)
CPUManager=true|false (BETA - 默认=true)
CRIContainerLogRotation=true|false (BETA - 默认=true)
CSIBlockVolume=true|false (ALPHA - 默认=false)
CSIPersistentVolume=true|false (BETA - 默认=true)
CustomPodDNS=true|false (BETA - 默认=true)
CustomResourceSubresources=true|false (BETA - 默认=true)
CustomResourceValidation=true|false (BETA - 默认=true)
DebugContainers=true|false (ALPHA - 默认=false)
DevicePlugins=true|false (BETA - 默认=true)
DynamicKubeletConfig=true|false (BETA - 默认=true)
DynamicProvisioningScheduling=true|false (ALPHA - 默认=false)
EnableEquivalenceClassCache=true|false (ALPHA - 默认=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - 默认=false)
ExpandPersistentVolumes=true|false (BETA - 默认=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - 默认=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认=false)
GCERegionalPersistentDisk=true|false (BETA - 默认=true)
HugePages=true|false (BETA - 默认=true)
HyperVContainer=true|false (ALPHA - 默认=false)
Initializers=true|false (ALPHA - 默认=false)
KubeletPluginsWatcher=true|false (ALPHA - 默认=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - 默认=false)
MountPropagation=true|false (BETA - 默认=true)
PersistentLocalVolumes=true|false (BETA - 默认=true)
PodPriority=true|false (BETA - 默认=true)
PodReadinessGates=true|false (BETA - 默认=false)
PodShareProcessNamespace=true|false (ALPHA - 默认=false)
QOSReserved=true|false (ALPHA - 默认=false)
ReadOnlyAPIDataVolumes=true|false (弃用 - 默认=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - 默认=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - 默认=false)
RotateKubeletClientCertificate=true|false (BETA - 默认=true)
RotateKubeletServerCertificate=true|false (ALPHA - 默认=false)
RunAsGroup=true|false (ALPHA - 默认=false)
ScheduleDaemonSetPods=true|false (ALPHA - 默认=false)
ServiceNodeExclusion=true|false (ALPHA - 默认=false)
ServiceProxyAllowExternalIPs=true|false (弃用 - 默认=false)
StorageObjectInUseProtection=true|false (default=true)
StreamingProxyRedirects=true|false (BETA - 默认=true)
SupportIPVSProxyMode=true|false (默认=true)
SupportPodPidsLimit=true|false (ALPHA - 默认=false)
Sysctls=true|false (BETA - 默认=true)
TaintBasedEvictions=true|false (ALPHA - 默认=false)
TaintNodesByCondition=true|false (ALPHA - 默认=false)
TokenRequest=true|false (ALPHA - 默认=false)
TokenRequestProjection=true|false (ALPHA - 默认=false)
VolumeScheduling=true|false (BETA - 默认=true)
VolumeSubpath=true|false (默认=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - 默认=false)
--healthz-bind-address 0.0.0.0     默认: 0.0.0.0:10256
服务健康检查的 IP 地址和端口(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)
--healthz-port int32     默认: 10256
绑定健康检查服务的端口。使用 0 禁用。
-h, --help
kube-proxy 帮助信息
--hostname-override string
如果非空,将使用此字符串作为标识而不是实际的主机名。
--iptables-masquerade-bit int32     默认: 14
如果使用纯 iptables 代理,则 fwmark 空间的位用于标记需要 SNAT 的数据包。 必须在 [0,31] 范围内。
--iptables-min-sync-period duration
当端点和服务发生变化时,iptables 规则的刷新的最小间隔(例如 '5s','1m','2h22m')。
--iptables-sync-period duration     默认: 30s
iptables 规则刷新的最大时间间隔(例如 '5s','1m','2h22m')。必须大于 0。
--ipvs-exclude-cidrs stringSlice
以逗号分隔的 CIDR 列表,在清理 IPVS 规则时,不应该触及 ipvs proxier。
--ipvs-min-sync-period duration
当端点和服务发生变化时,ipvs 规则的刷新的最小间隔(例如 '5s','1m','2h22m')。
--ipvs-scheduler string
代理模式为 ipvs 时的 ipvs 调度器类型
--ipvs-sync-period duration     默认: 30s
ipvs 规则刷新的最大时间间隔(例如 '5s','1m','2h22m')。必须大于 0。
--kube-api-burst int32     默认: 10
每秒与 kubernetes apiserver 交互的数量
--kube-api-content-type string     默认: "application/vnd.kubernetes.protobuf"
发送到 apiserver 的请求的内容类型。
--kube-api-qps float32     默认: 5
与 kubernetes apiserver 交互时使用的 QPS
--kubeconfig string
包含授权信息的 kubeconfig 文件的路径(master 位置由 master 标志设置)。
--log-flush-frequency duration     默认: 5s
日志刷新最大间隔
--masquerade-all
如果使用纯 iptables 代理,SNAT 所有通过服务句群 IP 发送的流量(这通常不需要)
--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)
--metrics-bind-address 0.0.0.0     默认: 127.0.0.1:10249
要服务的度量服务器的 IP 地址和端口(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)
--nodeport-addresses stringSlice
一个字符串值,指定用于 NodePorts 的地址。 值可以是有效的 IP 块(例如 1.2.3.0/24, 1.2.3.4/32)。 默认的空字符串切片([])表示使用所有本地地址。
--oom-score-adj int32     默认: -999
kube-proxy 进程的 oom-score-adj 值。 值必须在 [-1000,1000] 范围内
--profiling
如果为 true,则通过 Web 接口 /debug/pprof 启用性能分析。
--proxy-mode ProxyMode
使用哪种代理模式:'userspace'(较旧)或 'iptables'(较快)或 'ipvs'(实验)。 如果为空,使用最佳可用代理(当前为 iptables)。 如果选择了 iptables 代理,无论如何,但系统的内核或 iptables 版本不足,这总是会回退到用户空间代理。
--proxy-port-range port-range
主机端口的范围(beginPort-endPort,单端口或 beginPort + offset,包括),可以被代理服务流量消耗。 如果(未指定,0 或 0-0)则随机选择端口。
--udp-timeout duration     默认: 250ms
空闲 UDP 连接将保持打开的时长(例如 '250ms','2s')。 必须大于 0。仅适用于 proxy-mode=userspace
--version version[=true]
打印版本信息并退出
--write-config-to string
如果设置,将配置值写入此文件并退出。
diff --git a/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md b/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md new file mode 100644 index 0000000000..4180967d69 --- /dev/null +++ b/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md @@ -0,0 +1,380 @@ +--- +title: kube-scheduler +notitle: true +--- +## kube-scheduler + + + + +### 概要 + + +Kubernetes 调度器是一个策略丰富、拓扑感知、工作负载特定的功能,显著影响可用性、性能和容量。调度器需要考虑个人和集体 +的资源要求、服务质量要求、硬件/软件/政策约束、亲和力和反亲和力规范、数据局部性、负载间干扰、完成期限等。 +工作负载特定的要求必要时将通过 API 暴露。 + +``` +kube-scheduler [flags] +``` + + +### 选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--address string     默认: "0.0.0.0"
弃用: 要监听 --port 端口的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)。 请参阅 --bind-address。
--algorithm-provider string
弃用: 要使用的调度算法,可选值:ClusterAutoscalerProvider |DefaultProvider
--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--config string
配置文件的路径。标志会覆盖此文件中的值。
--contention-profiling
弃用: 如果启用了性能分析,则启用锁竞争分析
--feature-gates mapStringBool
一组 key=value 对,用于描述 alpha/experimental 特征的特征门。选项包括:
APIListChunking=true|false (BETA - 默认=true)
APIResponseCompression=true|false (ALPHA - 默认=false)
AdvancedAuditing=true|false (BETA - 默认=true)
AllAlpha=true|false (ALPHA - 默认=false)
AppArmor=true|false (BETA - 默认=true)
AttachVolumeLimit=true|false (ALPHA - 默认=false)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认=false)
BlockVolume=true|false (ALPHA - 默认=false)
CPUManager=true|false (BETA - 默认=true)
CRIContainerLogRotation=true|false (BETA - 默认=true)
CSIBlockVolume=true|false (ALPHA - 默认=false)
CSIPersistentVolume=true|false (BETA - 默认=true)
CustomPodDNS=true|false (BETA - 默认=true)
CustomResourceSubresources=true|false (BETA - 默认=true)
CustomResourceValidation=true|false (BETA - 默认=true)
DebugContainers=true|false (ALPHA - 默认=false)
DevicePlugins=true|false (BETA - 默认=true)
DynamicKubeletConfig=true|false (BETA - 默认=true)
DynamicProvisioningScheduling=true|false (ALPHA - 默认=false)
EnableEquivalenceClassCache=true|false (ALPHA - 默认=false)
ExpandInUsePersistentVolumes=true|false (ALPHA - 默认=false)
ExpandPersistentVolumes=true|false (BETA - 默认=true)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - 默认=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认=false)
GCERegionalPersistentDisk=true|false (BETA - 默认=true)
HugePages=true|false (BETA - 默认=true)
HyperVContainer=true|false (ALPHA - 默认=false)
Initializers=true|false (ALPHA - 默认=false)
KubeletPluginsWatcher=true|false (ALPHA - 默认=false)
LocalStorageCapacityIsolation=true|false (BETA - 默认=true)
MountContainers=true|false (ALPHA - 默认=false)
MountPropagation=true|false (BETA - 默认=true)
PersistentLocalVolumes=true|false (BETA - 默认=true)
PodPriority=true|false (BETA - 默认=true)
PodReadinessGates=true|false (BETA - 默认=false)
PodShareProcessNamespace=true|false (ALPHA - 默认=false)
QOSReserved=true|false (ALPHA - 默认=false)
ReadOnlyAPIDataVolumes=true|false (弃用 - 默认=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - 默认=false)
ResourceQuotaScopeSelectors=true|false (ALPHA - 默认=false)
RotateKubeletClientCertificate=true|false (BETA - 默认=true)
RotateKubeletServerCertificate=true|false (ALPHA - 默认=false)
RunAsGroup=true|false (ALPHA - 默认=false)
ScheduleDaemonSetPods=true|false (ALPHA - 默认=false)
ServiceNodeExclusion=true|false (ALPHA - 默认=false)
ServiceProxyAllowExternalIPs=true|false (弃用 - 默认=false)
StorageObjectInUseProtection=true|false (默认=true)
StreamingProxyRedirects=true|false (BETA - 默认=true)
SupportIPVSProxyMode=true|false (默认=true)
SupportPodPidsLimit=true|false (ALPHA - 默认=false)
Sysctls=true|false (BETA - 默认=true)
TaintBasedEvictions=true|false (ALPHA - 默认=false)
TaintNodesByCondition=true|false (ALPHA - 默认=false)
TokenRequest=true|false (ALPHA - 默认=false)
TokenRequestProjection=true|false (ALPHA - 默认=false)
VolumeScheduling=true|false (BETA - 默认=true)
VolumeSubpath=true|false (默认=true)
VolumeSubpathEnvExpansion=true|false (ALPHA - 默认=false)
-h, --help
kube-scheduler 帮助信息
--kube-api-burst int32     默认: 100
弃用: 每秒与 kubernetes apiserver 交互的数量
--kube-api-content-type string     默认: "application/vnd.kubernetes.protobuf"
弃用: 发送到 apiserver 的请求的内容类型
--kube-api-qps float32     默认: 50
弃用: 与 kubernetes apiserver 交互时使用的 QPS
--kubeconfig string
弃用: 包含授权和 master 位置信息的 kubeconfig 文件的路径。
--leader-elect     默认: true
在执行主循环之前,启动 leader 选举客户端并获得领导能力。在运行复制组件以实现高可用性时启用此选项。
--leader-elect-lease-duration duration     默认: 15s
非 leader 候选人在观察领导层续约之后将等待的时间,直到试图获得领导但尚未更新的 leader 位置。这实际上是 leader 在被另一个候选人替换之前可以停止的最长持续时间。这仅适用于启用 leader 选举的情况。
--leader-elect-renew-deadline duration     默认: 10s
代理 master 在停止领导之前更新领导位置的时间间隔。这必须小于或等于租约期限。这仅适用于启用 leader 选举的情况
--leader-elect-resource-lock endpoints     默认: "endpoints"
在 leader 选举期间用于锁定的资源对象的类型。支持的选项是 endpoints (默认) 和 `configmaps`。
--leader-elect-retry-period duration     默认: 2s
客户端在尝试获取和更新领导之间应该等待的持续时间。这仅适用于启用leader选举的情况。
--lock-object-name string     默认: "kube-scheduler"
弃用: 定义锁对象的名称。
--lock-object-namespace string     默认: "kube-system"
弃用: 定义锁对象的命名空间。
--log-flush-frequency duration     默认: 5s
日志刷新最大间隔
--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)
--policy-config-file string
弃用: 包含调度器策略配置的文件。如果未提供策略 ConfigMap 或 --use-legacy-policy-config==true,则使用此文件
--policy-configmap string
弃用: 包含调度器策略配置的 ConfigMap 对象的名称。如果 --use-legacy-policy-config==false,它必须在调度器初始化之前存在于系统命名空间中。配置必须作为 'Data' 映射中元素的值提供,其中 key='policy.cfg'
--policy-configmap-namespace string     默认: "kube-system"
弃用: 策略 ConfigMap 所在的命名空间。 如果未提供此命名空间或为空,则将使用系统命名空间。
--port int     默认: 10251
弃用: 不安全地提供没有身份验证和授权的 HTTP 端口。 如果为0,则根本不提供 HTTPS。 请参阅 --secure-port。
--profiling
弃用: 通过 web 接口 host:port/debug/pprof/ 启动性能分析
--scheduler-name string     默认: "default-scheduler"
弃用: 调度器名称,用于根据 pod 的 "spec.SchedulerName" 选择哪些 pod 将被此调度器处理。
--use-legacy-policy-config
弃用: 当设置为 true 时,调度器将忽略策略 ConfigMap 并使用策略配置文件
--version version[=true]
打印版本信息并退出
--write-config-to string
如果设置,将配置值写入此文件并退出。
diff --git a/content/zh/docs/reference/command-line-tools-reference/kubelet.md b/content/zh/docs/reference/command-line-tools-reference/kubelet.md new file mode 100644 index 0000000000..0413ade7d9 --- /dev/null +++ b/content/zh/docs/reference/command-line-tools-reference/kubelet.md @@ -0,0 +1,112 @@ +--- +title: kubelet +notitle: true +--- +## kubelet + + + + +### 概要 + + + +kubelet 是在每个节点上运行的主要 "节点代理"。kubelet 以 PodSpec 为单位来运行任务,PodSpec 是一个描述 pod 的 YAML 或 JSON 对象。 +kubelet 运行多种机制(主要通过 apiserver)提供的一组 PodSpec,并确保这些 PodSpecs 中描述的容器健康运行。 +不是 Kubernetes 创建的容器将不在 kubelet 的管理范围。 + + +除了来自 apiserver 的 PodSpec 之外,还有三种方法可以将容器清单提供给 Kubelet。 + +文件:通过命令行传入的文件路径。kubelet 将定期监听该路径下的文件以获得更新。监视周期默认为 20 秒,可通过参数进行配置。 + +HTTP 端点:HTTP 端点以命令行参数传入。每 20 秒检查一次该端点(该时间间隔也是可以通过命令行配置的)。 + +HTTP 服务:kubelet 还可以监听 HTTP 并响应简单的 API(当前未指定)以提交新的清单。 + +``` +kubelet [flags] +``` + + +### 选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--azure-container-registry-config string
包含 Azure 容器注册配置信息的文件路径
-h, --help
kubelet 的帮助信息
--log-flush-frequency 间隔     默认: 5s
日志刷新间隔的最大秒数
--version version[=true]
打印版本信息并退出
+ + + diff --git a/content/zh/docs/reference/kubectl/kubectl.md b/content/zh/docs/reference/kubectl/kubectl.md new file mode 100644 index 0000000000..052ce700a6 --- /dev/null +++ b/content/zh/docs/reference/kubectl/kubectl.md @@ -0,0 +1,178 @@ +--- +title: kubectl +notitle: true +--- + +## kubectl + +kubectl Բٿ Kubernetes Ⱥ + + +### + +kubectl Բٿ Kubernetes Ⱥ + +ȡϢʣhttps://kubernetes.io/docs/reference/kubectl/overview/ + +``` +kubectl [flags] +``` + +### ѡ +``` + --alsologtostderr ͬʱ־׼̨ļ + --as string ָûִв + --as-group stringArray ģ飬ʹʶָ顣 + --cache-dir string Ĭ HTTP Ŀ¼Ĭֵ "/home/username/.kube/http-cache" + --certificate-authority string ڽ֤Ȩ .cert ļ· + --client-certificate string TLS ʹõĿͻ֤· + --client-key string TLS ʹõĿͻԿļ· + --cluster string ָҪʹõ kubeconfig ļмȺ + --context string ָҪʹõ kubeconfig ļ + -h, --help kubectl + --insecure-skip-tls-verify ֵΪ true򲻻֤Чԡ ⽫ʹHTTPSӲȫ + --kubeconfig string CLI ʹõ kubeconfig ļ· + --log-backtrace-at traceLocation ־ȳ涨ʱԶջϢĬֵ0 + --log-dir string Ϊգ־ļдĿ¼ + --logtostderr ־׼̨ļ + --match-server-version Ҫͻ˰汾ͷ˰汾ƥ + -n, --namespace string ڣCLI ʹôռ + --request-timeout string һ򵥷ǰĵȴʱ䣬ֵҪӦʱ䵥λ(磺1s, 2m, 3h)ֵΪʱ (Ĭֵ "0") + -s, --server string Kubernetes API server ĵַͶ˿ + --stderrthreshold severity ڻڴֵ־׼̨Ĭֵ2 + --token string API server ֤ij + --user string ָʹõ kubeconfig ļеû + -v, --v Level ָ־־ + --vmodule moduleSpec ָ־ģ飬ʽ£pattern=Nʹöŷָ +``` + +### + +* [kubectl alpha](kubectl_alpha.md) - alpha +* [kubectl annotate](kubectl_annotate.md) - Դע +* [kubectl api-resources](kubectl_api-resources.md) - ڷϴӡֵ֧ API Դ +* [kubectl api-versions](kubectl_api-versions.md) - "group/version" ʽڷϴӡֵ֧ API 汾 +* [kubectl apply](kubectl_apply.md) - ͨļ׼뽫ӸԴ +* [kubectl attach](kubectl_attach.md) - ӵе +* [kubectl auth](kubectl_auth.md) - Ȩ +* [kubectl autoscale](kubectl_autoscale.md) - Զչ Deployment, ReplicaSet ReplicationController +* [kubectl certificate](kubectl_certificate.md) - ޸֤Դ +* [kubectl cluster-info](kubectl_cluster-info.md) - չʾȺϢ +* [kubectl completion](kubectl_completion.md) - Ϊ shell ɴ루 bash zsh +* [kubectl config](kubectl_config.md) - ޸ kubeconfig ļ +* [kubectl convert](kubectl_convert.md) - ڲͬ API 汾֮תļ +* [kubectl cordon](kubectl_cordon.md) - node ڵΪɵ +* [kubectl cp](kubectl_cp.md) - ļĿ¼ҲɽļĿ¼Ƶ +* [kubectl create](kubectl_create.md) - ͨļ׼봴Դ +* [kubectl delete](kubectl_delete.md) - ͨļ׼룬ԴƻԴͱǩѡɾԴ +* [kubectl describe](kubectl_describe.md) - ʾضԴԴϸϢ +* [kubectl drain](kubectl_drain.md) - ΪάҪǰnodeڵ +* [kubectl edit](kubectl_edit.md) - ڷ༭Դ +* [kubectl exec](kubectl_exec.md) - ˳ +* [kubectl explain](kubectl_explain.md) - Դĵ +* [kubectl expose](kubectl_expose.md) - ȡ replication controller, service, deployment pod ԴΪµ Kubernetes ¶ +* [kubectl get](kubectl_get.md) - չʾһԴ +* [kubectl label](kubectl_label.md) - Դǩ +* [kubectl logs](kubectl_logs.md) - Ϊ pod еӡ־ +* [kubectl options](kubectl_options.md) - ӡ̳еıʶб +* [kubectl patch](kubectl_patch.md) - ʹսԺϲԴֶ +* [kubectl plugin](kubectl_plugin.md) - в +* [kubectl port-forward](kubectl_port-forward.md) - pod һض˿ +* [kubectl proxy](kubectl_proxy.md) - Ϊ Kubernetes API server д +* [kubectl replace](kubectl_replace.md) - ͨļ׼滻Դ +* [kubectl rollout](kubectl_rollout.md) - Դչʾ +* [kubectl run](kubectl_run.md) - ڼȺָ +* [kubectl scale](kubectl_scale.md) - Deployment, ReplicaSet, Replication Controller Job ¸ģ +* [kubectl set](kubectl_set.md) - ض +* [kubectl taint](kubectl_taint.md) - һ node ڵ۵Ϣ +* [kubectl top](kubectl_top.md) - չʾԴ (CPU/Memory/Storage) ʹϢ +* [kubectl uncordon](kubectl_uncordon.md) - node ڵΪɵ +* [kubectl version](kubectl_version.md) - ӡͻ˺ͷ˰汾Ϣ +* [kubectl wait](kubectl_wait.md) - : һԴϵȴ + + +######2018616գͨspf13/cobraԶ + diff --git a/content/cn/docs/reference/labels-annotations-taints.md b/content/zh/docs/reference/labels-annotations-taints.md similarity index 100% rename from content/cn/docs/reference/labels-annotations-taints.md rename to content/zh/docs/reference/labels-annotations-taints.md diff --git a/content/zh/docs/reference/tools.md b/content/zh/docs/reference/tools.md new file mode 100644 index 0000000000..565d94b2fe --- /dev/null +++ b/content/zh/docs/reference/tools.md @@ -0,0 +1,112 @@ + +--- +reviewers: +- janetkuo +title: +content_template: templates/concept +--- + + +{{% capture overview %}} +Kubernetes һЩùߣ԰ûõʹ Kubernetes ϵͳ +{{% /capture %}} + +{{% capture body %}} +## Kubectl + + +[`kubectl`](/docs/tasks/tools/install-kubectl/) Kubernetes йߣٿ Kubernetes Ⱥ + +## Kubeadm + + +[`kubeadm`](/docs/tasks/tools/install-kubeadm/) һйߣƷĿǰ alpha ׶Σɲһȫɿ Kubernetes Ⱥ + +## Kubefed + + +[`kubefed`](/docs/tasks/federation/set-up-cluster-federation-kubefed/) һйߣûȺ + + +## Minikube + + +[`minikube`](/docs/tasks/tools/install-minikube/) һԷû乤վ㱾زһڵ Kubernetes ȺĹߣڿͲԡ + + +## Dashboard + + +[`Dashboard`](/docs/tasks/access-application-cluster/web-ui-dashboard/), Kubernetes Web û棬ûӦõ Kubernetes ȺйŲԼȺͼȺԴ + +## Helm + + +[`Kubernetes Helm`](https://github.com/kubernetes/helm) һԤ Kubernetes ԴĹߣԴ Helm Ҳ Kubernetes charts + + +ʹ Helm + +*ҲʹѾΪ Kubernetes charts +*ԼӦΪ Kubernetes charts +*Ϊ Kubernetes ӦôظִеĹ +*Ϊ Kubernetes 嵥ļṩܻĹ +* Helm ķ + +## Kompose + + +[`Kompose`](https://github.com/kubernetes-incubator/kompose) һתߣ Docker Compose ûǨ Kubernetes + + +ʹ Kompose: + +* һ Docker Compose ļͳ Kubernetes +* Docker תͨ Kubernetes +* ת v1 v2 Docker Compose `yaml` ļ [ֲʽӦó](https://docs.docker.com/compose/bundles/) +{{% /capture %}} \ No newline at end of file diff --git a/content/zh/docs/setup/salt.md b/content/zh/docs/setup/salt.md new file mode 100755 index 0000000000..aa5ef2a87d --- /dev/null +++ b/content/zh/docs/setup/salt.md @@ -0,0 +1,244 @@ +--- +cn-approvers: +- linyouchong +reviewers: +- davidopp +title: 使用 Salt 配置 Kubernetes 集群 +weight: 70 +content_template: templates/concept +--- + + +{{% capture overview %}} + + +Kubernetes 集群可以使用 Salt 进行配置 + + +这些 Salt 脚本可以跨多个托管提供商共享,这取决于您在何处托管 Kubernetes 集群,您可能正在使用多种不同的操作系统和多种不同的网络配置。因此,在做修改 Salt 配置之前了解一些背景信息是很重要的,以便在使用其他主机托管提供商时降低集群配置失败的可能。 + +{{% /capture %}} + +{{% capture body %}} + + +## 创建 Salt 集群 + + +**salt-master** 服务运行在 kubernetes-master 节点 [(除了在默认的 GCE 环境和 OpenStack-Heat 环境)](#standalone-salt-configuration-on-gce-and-others)。 + + +**salt-minion** 服务运行在 kubernetes-master 节点和每个 kubernetes-node 节点。 + + +每个 salt-minion 服务在 **master.conf** 文件中配置与 kubernetes-master 节点上的 **salt-master** 服务进行交互 [(除了 GCE 环境和 OpenStack-Heat 环境)](#standalone-salt-configuration-on-gce-and-others)。 + +```shell +cat /etc/salt/minion.d/master.conf +``` + +```none +master: kubernetes-master +``` + + +每个 salt-minion 都会与 salt-master 联系,根据其提供的机器信息,salt-master 会向其提供作为 kubernetes-master 或 kubernetes-node 用于运行 Kubernetes 所需要的能力。 + + +如果您正使用基于 Vagrant 的环境,**salt-api** 服务运行在 kubernetes-master 节点。它被配置为使 Vagrant 用户能够对 Salt 集群进行内省,以便通过 REST API 了解 Vagrant 环境中的机器的信息。 + + +## 在 GCE 和其它环境下独立配置 Salt + + +在 GCE 和 OpenStack 环境,使用 Openstack-Heat 提供商,master 和 node 节点被配置为 [standalone minions](http://docs.saltstack.com/en/latest/topics/tutorials/standalone_minion.html)。每个 VM 的配置都源于它的 [instance metadata](https://cloud.google.com/compute/docs/metadata) 并被保存在 Salt grains (`/etc/salt/minion.d/grains.conf`) 和本地 Salt 用于保存执行状态的 pillars (`/srv/salt-overlay/pillar/cluster-params.sls`) 中。 + + +对于 GCE 和 OpenStack ,所有引用 master/minion 设置的其余部分都应该被忽略。这种设置的一个后果是,Salt 不存在 - 节点之间不存在配置共享。 + + +## Salt 安全 + + +*(不适用于 默认的 GCE 和 OpenStack-Heat 配置环境。)* + + +salt-master 没有启用安全功能,salt-master 被配置为自动接受所有来自 minion 的接入请求。在深入研究之前,不推荐在生产环境中启用安全配置。(在某些环境中,如果 salt-master 端口不能从外部访问,并且您信任您的网络上的每个节点,这并不像它看起来那么糟糕) + +```shell +cat /etc/salt/master.d/auto-accept.conf +``` + +```shell +open_mode: True +auto_accept: True +``` + + +## 配置 Salt minion + + +Salt 集群中的每个 minion 都有一个相关的配置,它指示 salt-master 如何在机器上提供所需的资源。 + + +下面是一个基于 Vagrant 环境的示例文件: + +```shell +cat /etc/salt/minion.d/grains.conf +``` + +```yaml +grains: + etcd_servers: $MASTER_IP + cloud: vagrant + roles: + - kubernetes-master +``` + + +每个托管环境都使用了略微不同的 grains.conf 文件,用于在需要的 Salt 文件中构建条件逻辑。 + + +下面列举了目前支持的定义键/值对的集合。如果你添加了新的,请确保更新这个列表。 + + +键 | 值 +-----------------------------------|---------------------------------------------------------------- + +`api_servers` | (可选) IP 地址/主机名 ,kubelet 用其访问 kube-apiserver + +`cbr-cidr` | (可选) docker 容器网桥分配给 minion 节点的 IP 地址范围 + +`cloud` | (可选) 托管 Kubernetes 的 IaaS 平台, *gce*, *azure*, *aws*, *vagrant* + +`etcd_servers` | (可选) 以逗号分隔的 IP 地址列表,kube-apiserver 和 kubelet 使用其访问 etcd。kubernetes_master 角色的节点使用第一个机器的 IP ,在 GCE 环境上使用 127.0.0.1。 + +`hostnamef` | (可选) 机器的完整主机名,即:uname -n + +`node_ip` | (可选)用于定位本节点的 IP 地址 + +`hostname_override` | (可选)对应 kubelet 的 hostname-override 参数 + +`network_mode` | (可选)节点间使用的网络模型:*openvswitch* + +`networkInterfaceName` | (可选)用于绑定地址的网络接口,默认值 *eth0* + +`publicAddressOverride` | (可选)kube-apiserver 用于外部只读访问而绑定的IP地址 + +`roles` | (必选)1、`kubernetes-master` 表示本节点是 Kubernetes 集群的 master。2、`kubernetes-pool` 表示本节点是一个 kubernetes-node。根据角色,Salt 脚本会在机器上提供不同的资源 + + +Salt sls 文件可以应用这些键到分支行为。 + + +此外,一个集群可能运行在基于 Debian 的操作系统或基于 Red Hat 的操作系统(Centos、Fedora、RHEL等)。因此,有时区分基于操作系统的行为(如果像下面这样的分支)是很重要的。 + +```liquid + +{% if grains['os_family'] == 'RedHat' %} +// something specific to a RedHat environment (Centos, Fedora, RHEL) where you may use yum, systemd, etc. +{% else %} +// something specific to Debian environment (apt-get, initd) +{% endif %} + +``` + + +## 最佳实践 + + +在为进程配置默认参数时,最好避免使用环境文件( Red Hat 环境中的 Systemd )或 init.d 文件( Debian 发行版)以保留在操作系统环境中应该通用的默认值。这有助于保持我们的 Salt 模板文件易于理解,因为管理员可能不熟悉每个发行版的细节。 + + +## 未来的增强(网络) + + +每个 pod IP 配置都是特定于提供商的,因此在进行网络更改时,必须将这些设置为沙箱,因为不同的提供商可能不会使用相同的机制( iptables 、openvswitch 等)。 + + +我们应该定义一个 grains.conf 键,这样能更明确地捕获正在使用的网络环境配置,以避免将来在不同的提供商之间产生混淆。 + +{{% /capture %}} \ No newline at end of file diff --git a/content/zh/docs/tasks/access-application-cluster/access-cluster.md b/content/zh/docs/tasks/access-application-cluster/access-cluster.md new file mode 100644 index 0000000000..3b6f66b203 --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/access-cluster.md @@ -0,0 +1,573 @@ + +--- +title: 访问集群 +weight: 20 +content_template: templates/concept +--- + +{{% capture overview %}} + + +本文阐述多种与集群交互的方法。 + +{{% /capture %}} + +{{< toc >}} + +{{% capture body %}} + + +## 使用 kubectl 完成集群的第一次访问 + +当您第一次访问 Kubernetes API 的时候,我们建议您使用 Kubernetes CLI,`kubectl`。 + +访问集群时,您需要知道集群的地址并且拥有访问的凭证。通常,这些在您通过 [Getting started guide](/docs/setup/) 安装集群时都是自动安装好的,或者其他人安装时也应该提供了凭证和集群地址。 + +通过以下命令检查 kubectl 是否知道集群地址及凭证: + +```shell +$ kubectl config view +``` + + +有许多 [例子](/docs/user-guide/kubectl-cheatsheet) 介绍了如何使用 kubectl,可以在 [kubectl手册](/docs/user-guide/kubectl-overview) 中找到更完整的文档。 + +## 直接访问 REST API +Kubectl 处理 apiserver 的定位和身份验证。 +如果要使用 curl 或 wget 等 http 客户端或浏览器直接访问 REST API,可以通过多种方式查找和验证: + + + - 以代理模式运行 kubectl。 + - 推荐此方式。 + - 使用已存储的 apiserver 地址。 + - 使用自签名的证书来验证 apiserver 的身份。杜绝 MITM 攻击。 + - 对 apiserver 进行身份验证。 + - 未来可能会实现智能化的客户端负载均衡和故障恢复。 + - 直接向 http 客户端提供位置和凭据。 + - 可选的方案。 + - 适用于代理可能引起混淆的某些客户端类型。 + - 需要引入根证书到您的浏览器以防止 MITM 攻击。 + + +### 使用 kubectl 代理 + +以下命令以反向代理的模式运行kubectl。它处理 apiserver 的定位和验证。 +像这样运行: + +```shell +$ kubectl proxy --port=8080 & +``` + + +参阅 [kubectl proxy](/docs/reference/generated/kubectl/kubectl-commands/#proxy) 获取更多详细信息。 + +然后,您可以使用 curl、wget 或浏览器访问 API,如果是 IPv6 则用 [::1] 替换 localhost,如下所示: + +```shell +$ curl http://localhost:8080/api/ +{ + "versions": [ + "v1" + ] +} +``` + + + +### 不使用 kubectl 代理 + +在 Kubernetes 1.3 或更高版本中,`kubectl config view` 不再显示 token。使用 `kubectl describe secret ...` 来获取默认服务帐户的 token,如下所示: + +```shell +$ APISERVER=$(kubectl config view | grep server | cut -f 2- -d ":" | tr -d " ") +$ TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t') +$ curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure +{ + "kind": "APIVersions", + "versions": [ + "v1" + ], + "serverAddressByClientCIDRs": [ + { + "clientCIDR": "0.0.0.0/0", + "serverAddress": "10.0.1.149:443" + } + ] +} +``` + + +上面的例子使用了 `--insecure` 参数,这使得它很容易受到 MITM 攻击。当 kubectl 访问集群时,它使用存储的根证书和客户端证书来访问服务器(这些安装在 `~/.kube` 目录中)。由于集群证书通常是自签名的,因此可能需要特殊配置才能让您的 http 客户端使用根证书。 + +在一些集群中,apiserver 不需要身份验证;它可能只服务于 localhost,或者被防火墙保护,这个没有一定的标准。 [配置对 API 的访问](/docs/admin/accessing-the-api) 描述了集群管理员如何进行配置。此类方法可能与未来的高可用性支持相冲突。 + + +## 以编程方式访问 API + +Kubernetes 官方提供对 [Go](#go-client) 和 [Python](#python-client) 的客户端库支持。 + +### Go 客户端 + +* 想要获得这个库,请运行命令:`go get k8s.io/client-go//kubernetes`。参阅 [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go) 来查看目前支持哪些版本。 +* 基于这个 client-go 客户端库编写应用程序。 请注意,client-go 定义了自己的 API 对象,因此如果需要,请从 client-go 而不是从主存储库导入 API 定义,例如,`import "k8s.io/client-go/1.4/pkg/api/v1"` 才是对的。 + +Go 客户端可以像 kubectl CLI 一样使用相同的 [kubeconfig 文件](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) 来定位和验证 apiserver。可参阅 [示例](https://git.k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go)。 + +如果应用程序以 Pod 的形式部署在集群中,那么请参阅 [下一章](#accessing-the-api-from-a-pod)。 + + +### Python 客户端 + +如果想要使用 [Python 客户端](https://github.com/kubernetes-client/python),请运行命令:`pip install kubernetes`。参阅 [Python Client Library page](https://github.com/kubernetes-client/python) 以获得更详细的安装参数。 + +Python 客户端可以像 kubectl CLI 一样使用相同的 [kubeconfig 文件](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) 来定位和验证 apiserver,可参阅 [示例](https://github.com/kubernetes-client/python/tree/master/examples/example1.py)。 + +### 其它语言 + +目前有多个 [客户端库](/docs/reference/using-api/client-libraries/) 为其它语言提供访问 API 的方法。 +参阅其它库的相关文档以获取他们是如何验证的。 + + +### 从 Pod 中访问 API + +当你从 Pod 中访问 API 时,定位和验证 apiserver 会有些许不同。 + +在 Pod 中定位 apiserver 的推荐方式是通过 `kubernetes.default.svc` 这个 DNS 名称,该名称将会解析为服务 IP,然后服务 IP 将会路由到 apiserver。 + +向 apiserver 进行身份验证的推荐方法是使用 [服务帐户](/docs/tasks/configure-pod-container/configure-service-account/) 凭据。 +通过 kube-system,pod 与服务帐户相关联,并且该服务帐户的凭证(token)被放置在该 pod 中每个容器的文件系统中,位于 `/var/run/secrets/kubernetes.io/serviceaccount/token`。 + + +如果可用,则将证书放入每个容器的文件系统中的 `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`,并且应该用于验证 apiserver 的服务证书。 + +最后,命名空间化的 API 操作所使用的默认命名空间将被放置在每个容器的 `/var/run/secrets/kubernetes.io/serviceaccount/namespace` 文件中。 + +在 pod 中,建议连接 API 的方法是: + + - 在 pod 的 sidecar 容器中运行 `kubectl proxy`,或者以后台进程的形式运行。 + 这将把 Kubernetes API 代理到当前 pod 的 localhost interface,所以 pod 中的所有容器中的进程都能访问它。 + - 使用 Go 客户端库,并使用 `rest.InClusterConfig()` 和 `kubernetes.NewForConfig()` 函数创建一个客户端。 + 他们处理 apiserver 的定位和身份验证。[示例](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go) + +在每种情况下,pod 的凭证都是为了与 apiserver 安全地通信。 + + +## 访问集群中正在运行的服务 + +上一节介绍了如何连接 Kubernetes API 服务。本节介绍如何连接到 Kubernetes 集群上运行的其他服务。 +在 Kubernetes 中,[节点](/docs/admin/node),[pods](/docs/user-guide/pods) 和 [服务](/docs/user-guide/services) 都有自己的 IP。 +在许多情况下,集群上的节点 IP,pod IP 和某些服务 IP 将无法路由,因此无法从集群外部的计算机(例如桌面计算机)访问它们。 + + +### 连接的方法 + +有多种方式可以从集群外部连接节点、pod 和服务: + + - 通过公共 IP 访问服务。 + - 类型为 `NodePort` 或 `LoadBalancer` 的服务,集群外部可以访问。 + 请参阅 [服务](/docs/user-guide/services) 和 [kubectl expose](/docs/reference/generated/kubectl/kubectl-commands/#expose) 文档。 + - 取决于您的集群环境,该服务可能仅暴露给您的公司网络,或者也可能暴露给整个互联网。 + 请考虑公开该服务是否安全。它是否进行自己的身份验证? + - 在服务后端放置 pod。要从一组副本中访问一个特定的 pod,例如进行调试,请在 pod 上放置一个唯一的标签,然后创建一个选择此标签的新服务。 + - 在大多数情况下,应用程序开发人员不应该通过其 nodeIP 直接访问节点。 + - 使用 Proxy Verb 访问服务、node 或者 pod。 + - 在访问远程服务之前进行 apiserver 身份验证和授权。 + 如果服务不能够安全地暴露到互联网,或者服务不能获得节点 IP 端口的访问权限,或者是为了 debug,那么请使用此选项。 + - 代理可能会给一些 web 应用带来问题。 + - 只适用于 HTTP/HTTPS。 + - 更多详细信息在 [这里]。 + - 从集群中的 node 或者 pod 中访问。 + - 运行一个 pod,然后使用 [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands/#exec) 来连接 pod 里的 shell。 + 然后从 shell 中连接其它的节点、pod 和服务。 + - 有些集群可能允许您通过 ssh 连接到 node,从那您可能可以访问集群的服务。 + 这是一个非正式的方式,可能可以运行在个别的集群上。 + 浏览器和其它一些工具可能没有被安装。集群的 DNS 可能无法使用。 + + +### 发现内建服务 + +通常来说,集群中会有 kube-system 创建的一些运行的服务。 + +通过 `kubectl cluster-info` 命令获得这些服务列表: + +```shell +$ kubectl cluster-info + + Kubernetes master is running at https://104.197.5.247 + elasticsearch-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy + kibana-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kibana-logging/proxy + kube-dns is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kube-dns/proxy + grafana is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy + heapster is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy +``` + + +这展示了访问每个服务的 proxy-verb URL。 +例如,如果集群启动了集群级别的日志(使用 Elasticsearch),并且传递合适的凭证,那么可以通过 `https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/` 进行访问。日志也能通过 kubectl 代理获取,例如: +`http://localhost:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/`。 +(参阅 [上面的内容](#accessing-the-cluster-api) 来获取如何使用 kubectl 代理来传递凭证) + + +#### 手动构建 apiserver 代理 URL + +如上所述,您可以使用 `kubectl cluster-info` 命令来获得服务的代理 URL。要创建包含服务端点、后缀和参数的代理 URL,只需添加到服务的代理 URL: +`http://`*`kubernetes_master_address`*`/api/v1/namespaces/`*`namespace_name`*`/services/`*`service_name[:port_name]`*`/proxy` + +如果尚未为端口指定名称,则不必在 URL 中指定 *port_name*。 + +默认情况下,API server 使用 http 代理您的服务。要使用 https,请在服务名称前加上 `https:`: +`http://`*`kubernetes_master_address`*`/api/v1/namespaces/`*`namespace_name`*`/services/`*`https:service_name:[port_name]`*`/proxy` + +URL 名称段支持的格式为: + +* `` - 使用 http 代理到默认或未命名的端口 +* `:` - 使用 http 代理到指定的端口 +* `https::` - 使用 https 代理到默认或未命名的端口(注意后面的冒号) +* `https::` - 使用 https 代理到指定的端口 + + +##### 示例 + + * 要访问 Elasticsearch 服务端点 `_search?q=user:kimchy`,您需要使用:`http://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy` + * 要访问 Elasticsearch 集群健康信息 `_cluster/health?pretty=true`,您需要使用:`https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true` + +```json + { + "cluster_name" : "kubernetes_logging", + "status" : "yellow", + "timed_out" : false, + "number_of_nodes" : 1, + "number_of_data_nodes" : 1, + "active_primary_shards" : 5, + "active_shards" : 5, + "relocating_shards" : 0, + "initializing_shards" : 0, + "unassigned_shards" : 5 + } +``` + + +### 使用 web 浏览器访问运行在集群上的服务 + +您可以在浏览器地址栏中输入 apiserver 代理 URL。但是: + + - Web 浏览器通常不能传递 token,因此您可能需要使用基本(密码)身份验证。Apiserver 可以配置为接受基本身份验证,但您的集群可能未进行配置。 + - 某些 Web 应用程序可能无法运行,尤其是那些使用客户端 javascript 以不知道代理路径前缀的方式构建 URL 的应用程序。 + + +## 请求重定向 + +已弃用并删除了重定向功能。请改用代理(见下文)。 + + +## 多种代理 + +使用 Kubernetes 时可能会遇到几种不同的代理: + +1. [kubectl 代理](#directly-accessing-the-rest-api): + + - 在用户的桌面或 pod 中运行 + - 代理从本地主机地址到 Kubernetes apiserver + - 客户端到代理将使用 HTTP + - 代理到 apiserver 使用 HTTPS + - 定位 apiserver + - 添加身份验证 header + + +1. [apiserver 代理](#discovering-builtin-services): + + - 内置于 apiserver 中 + - 将集群外部的用户连接到集群 IP,否则这些 IP 可能无法访问 + - 运行在 apiserver 进程中 + - 客户端代理使用 HTTPS(也可配置为 http) + - 代理将根据可用的信息决定使用 HTTP 或者 HTTPS 代理到目标 + - 可用于访问节点、Pod 或服务 + - 在访问服务时进行负载平衡 + + +1. [kube proxy](/docs/concepts/services-networking/service/#ips-and-vips): + + - 运行在每个节点上 + - 代理 UDP 和 TCP + - 不能代理 HTTP + - 提供负载均衡 + - 只能用来访问服务 + + +1. 位于 apiserver 之前的 Proxy/Load-balancer: + + - 存在和实现因集群而异(例如 nginx) + - 位于所有客户和一个或多个 apiserver 之间 + - 如果有多个 apiserver,则充当负载均衡器 + + +1. 外部服务上的云负载均衡器: + + - 由一些云提供商提供(例如 AWS ELB,Google Cloud Load Balancer) + - 当 Kubernetes 服务类型为 `LoadBalancer` 时自动创建 + - 只使用 UDP/TCP + - 具体实现因云提供商而异。 + +除了前两种类型之外,Kubernetes 用户通常不需要担心任何其他问题。集群管理员通常会确保后者的正确配置。 + +{{% /capture %}} diff --git a/content/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md b/content/zh/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md rename to content/zh/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md diff --git a/content/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md rename to content/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md diff --git a/content/cn/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md b/content/zh/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md rename to content/zh/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md diff --git a/content/zh/docs/tasks/access-application-cluster/configure-dns-cluster.md b/content/zh/docs/tasks/access-application-cluster/configure-dns-cluster.md new file mode 100644 index 0000000000..48cc0a019a --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/configure-dns-cluster.md @@ -0,0 +1,26 @@ + +--- +title: 为集群配置 DNS +weight: 120 +content_template: templates/concept +--- + +{{% capture overview %}} + +Kubernetes 提供 DNS 集群插件,大多数支持的环境默认情况下都会启用。 +{{% /capture %}} +{{% capture body %}} + +有关如何为 Kubernetes 集群配置 DNS 的详细信息,请参阅 [Kubernetes DNS 插件示例.](https://github.com/kubernetes/kubernetes/tree/release-1.5/examples/cluster-dns) + +{{% /capture %}} diff --git a/content/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md b/content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md similarity index 98% rename from content/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md rename to content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md index 74ba22eaa4..0c12f2410d 100644 --- a/content/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md +++ b/content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md @@ -34,7 +34,7 @@ content_template: templates/tutorial * 本任务使用 [外部负载均衡服务](/docs/tasks/access-application-cluster/create-external-load-balancer/), 所以需要对应的可支持此功能的环境。如果你的环境不能支持,你可以使用 - [NodePort](/docs/user-guide/services/#nodeport) 类型的服务代替。 + [NodePort](/docs/user-guide/services/#type-nodeport) 类型的服务代替。 {{% /capture %}} diff --git a/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md b/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md new file mode 100644 index 0000000000..45ba1aa7e8 --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md @@ -0,0 +1,322 @@ + +--- +title: 创建一个外部负载均衡器 +content_template: templates/task +weight: 80 +--- + + +{{% capture overview %}} + + +本文展示如何创建一个外部负载均衡器。 + +创建服务时,您可以选择自动创建云网络负载均衡器。这提供了一个外部可访问的 IP 地址,可将流量分配到集群节点上的正确端口上 _假设集群在支持的环境中运行,并配置了正确的云负载平衡器提供商包_。 + +有关如何配置和使用 Ingress 资源以为服务提供外部可访问的 URL、负载均衡流量、终止 SSL 等功能,请查看 [Ingress](/docs/concepts/services-networking/ingress/) 文档。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## 配置文件 + +要创建外部负载均衡器,请将以下内容添加到 [服务配置文件](/docs/concepts/services-networking/service/#type-loadbalancer): + +```json + "type": "LoadBalancer" +``` + + +您的配置文件可能会如下所示: + +```json + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "example-service" + }, + "spec": { + "ports": [{ + "port": 8765, + "targetPort": 9376 + }], + "selector": { + "app": "example" + }, + "type": "LoadBalancer" + } + } +``` + + +## 使用 kubectl + +您也可以使用 `kubectl expose` 命令及其 `--type=LoadBalancer` 参数创建服务: + +```bash +kubectl expose rc example --port=8765 --target-port=9376 \ + --name=example-service --type=LoadBalancer +``` + + +此命令通过使用与引用资源(在上面的示例的情况下,名为 `example` 的 replication controller)相同的选择器来创建一个新的服务。 + +更多信息(包括更多的可选参数),请参阅 [`kubectl expose` reference](/docs/reference/generated/kubectl/kubectl-commands/#expose)。 + + +## 找到您的 IP 地址 + +您可以通过 `kubectl` 获取服务信息,找到为您的服务创建的 IP 地址: + +```bash +kubectl describe services example-service +``` + + +这将获得如下输出: + +```bash + Name: example-service + Namespace: default + Labels: + Annotations: + Selector: app=example + Type: LoadBalancer + IP: 10.67.252.103 + LoadBalancer Ingress: 123.45.678.9 + Port: 80/TCP + NodePort: 32445/TCP + Endpoints: 10.64.0.4:80,10.64.1.5:80,10.64.2.4:80 + Session Affinity: None + Events: +``` + + +IP 地址列在 `LoadBalancer Ingress` 旁边。 + +{{< note >}} + +**注意:** 如果您在 Minikube 上运行服务,您可以通过以下命令找到分配的 IP 地址和端口: +{{< /note >}} +```bash +minikube service example-service --url +``` + + +## 保留客户端源 IP + +由于此功能的实现,目标容器中看到的源 IP 将 *不是客户端的原始源 IP*。要启用保留客户端 IP,可以在服务的 spec 中配置以下字段(支持 GCE/Google Kubernetes Engine 环境): + +* `service.spec.externalTrafficPolicy` - 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:"Cluster"(默认)和 "Local"。"Cluster" 隐藏了客户端源 IP,可能导致第二跳到另一个节点,但具有良好的整体负载分布。 "Local" 保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二跳,但存在潜在的不均衡流量传播风险。 +* `service.spec.healthCheckNodePort` - 指定服务的 healthcheck nodePort(数字端口号)。如果未指定,则 serviceCheckNodePort 由服务 API 后端使用已分配的 nodePort 创建。如果客户端指定,它将使用客户端指定的 nodePort 值。仅当 type 设置为 "LoadBalancer" 并且 externalTrafficPolicy 设置为 "Local" 时才生效。 + +可以通过在服务的配置文件中将 `externalTrafficPolicy` 设置为 "Local" 来激活此功能。 + +```json + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "example-service" + }, + "spec": { + "ports": [{ + "port": 8765, + "targetPort": 9376 + }], + "selector": { + "app": "example" + }, + "type": "LoadBalancer", + "externalTrafficPolicy": "Local" + } + } +``` + + +### 特性可用性 + +| k8s 版本 | 特性支持 | +| :---------: |:-----------:| +| 1.7+ | 支持完整的 API 字段 | +| 1.5 - 1.6 | 支持 Beta Annotation | +| <1.5 | 不支持 | + +您可以在下面找到已弃用的 Beta annotation,在稳定版本前使用它来使用该功能。较新的 Kubernetes 版本可能会在 v1.7 之后停止支持这些功能。 +请更新现有应用程序以直接使用这些字段。 + +* `service.beta.kubernetes.io/external-traffic` annotation <-> `service.spec.externalTrafficPolicy` 字段 +* `service.beta.kubernetes.io/healthcheck-nodeport` annotation <-> `service.spec.healthCheckNodePort` 字段 + +`service.beta.kubernetes.io/external-traffic` annotation 与 `service.spec.externalTrafficPolicy` 字段相比拥有一组不同的值。值匹配如下: + +* "OnlyLocal" annotation <-> "Local" 字段 +* "Global" annotation <-> "Cluster" 字段 + +**请注意,此功能目前尚未实现在所有云提供商/环境中。** + + +已知的问题: + +* AWS: [kubernetes/kubernetes#35758](https://github.com/kubernetes/kubernetes/issues/35758) +* Weave-Net: [weaveworks/weave/#2924](https://github.com/weaveworks/weave/issues/2924) + +{{% /capture %}} + +{{% capture discussion %}} + + +## 外部负载均衡器提供商 + +请务必注意,此功能的数据路径由 Kubernetes 集群外部的负载均衡器提供。 + +当服务类型设置为 `LoadBalancer` 时,Kubernetes 向集群中的 pod 提供与 `type=` 等效的功能,并通过使用 Kubernetes pod 的条目对负载均衡器(从外部到 Kubernetes)进行编程来扩展它。 Kubernetes 服务控制器自动创建外部负载均衡器,健康检查(如果需要),防火墙规则(如果需要),并获取云提供商分配的外部 IP 并将其填充到服务对象中。 + + +## 保留源 IP 时的注意事项和限制 + +GCE/AWS 负载均衡器不为其目标池提供权重。对于旧的 LB kube-proxy 规则来说,这不是一个问题,它可以在所有端点之间正确平衡。 + +使用新功能,外部流量不会在 pod 之间平均负载,而是在节点级别平均负载(因为 GCE/AWS 和其他外部 LB 实现无法指定每个节点的权重,因此它们的平衡跨所有目标节点,并忽略每个节点上的 pod 数量)。 + +但是,我们可以声明,对于 NumServicePods << NumNodes 或 NumServicePods >> NumNodes 时,即使没有权重,也会看到接近相等的分布。 + +一旦外部负载平衡器提供权重,就可以将此功能添加到 LB 编程路径中。 +*未来工作:1.4 版本不提供权重支持,但可能会在将来版本中添加* + +内部 pod 到 pod 的流量应该与 ClusterIP 服务类似,所有 pod 的概率相同。 + +{{% /capture %}} + + diff --git a/content/cn/docs/tasks/access-application-cluster/frontend.yaml b/content/zh/docs/tasks/access-application-cluster/frontend.yaml similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/frontend.yaml rename to content/zh/docs/tasks/access-application-cluster/frontend.yaml diff --git a/content/cn/docs/tasks/access-application-cluster/frontend/frontend.conf b/content/zh/docs/tasks/access-application-cluster/frontend/frontend.conf similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/frontend/frontend.conf rename to content/zh/docs/tasks/access-application-cluster/frontend/frontend.conf diff --git a/content/cn/docs/tasks/access-application-cluster/hello-service.yaml b/content/zh/docs/tasks/access-application-cluster/hello-service.yaml similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/hello-service.yaml rename to content/zh/docs/tasks/access-application-cluster/hello-service.yaml diff --git a/content/cn/docs/tasks/access-application-cluster/hello.yaml b/content/zh/docs/tasks/access-application-cluster/hello.yaml similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/hello.yaml rename to content/zh/docs/tasks/access-application-cluster/hello.yaml diff --git a/content/zh/docs/tasks/access-application-cluster/list-all-running-container-images.md b/content/zh/docs/tasks/access-application-cluster/list-all-running-container-images.md new file mode 100644 index 0000000000..a376b4c098 --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/list-all-running-container-images.md @@ -0,0 +1,193 @@ + +--- +title: 列出集群中所有运行容器的镜像 +content_template: templates/task +weight: 100 +--- + +{{% capture overview %}} + + +本文展示如何使用 kubectl 来列出集群中所有运行 pod 的容器的镜像 + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +在本练习中,您将使用 kubectl 来获取集群中运行的所有 Pod,并格式化输出来提取每个 pod 中的容器列表。 + + +## 列出所有命名空间下的所有容器 + +- 使用 `kubectl get pods --all-namespaces` 获取所有命名空间下的所有 Pod +- 使用 `-o jsonpath={..image}` 来格式化输出,以仅包含容器镜像名称。 + 这将以递归方式从返回的 json 中解析出 `image` 字段。 + - 参阅 [jsonpath reference](/docs/user-guide/jsonpath/) 来获取更多关于如何使用 jsonpath 的信息。 +- 使用标准化工具来格式化输出:`tr`, `sort`, `uniq` + - 使用 `tr` 以用换行符替换空格 + - 使用 `sort` 来对结果进行排序 + - 使用 `uniq` 来聚合镜像计数 + +```sh +kubectl get pods --all-namespaces -o jsonpath="{..image}" |\ +tr -s '[[:space:]]' '\n' |\ +sort |\ +uniq -c +``` + + +上面的命令将递归获取所有返回项目的名为 `image` 的字段。 + +作为替代方案,可以使用 Pod 的镜像字段的绝对路径。这确保即使字段名称重复的情况下也能检索到正确的字段,例如,特定项目中的许多字段都称为 `name`: + +```sh +kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" +``` + + +jsonpath 解释如下: + +- `.items[*]`: 对于每个返回的值 +- `.spec`: 获取 spec +- `.containers[*]`: 对于每个容器 +- `.image`: 获取镜像 + +{{< note >}} + +**注意:** 按名字获取单个 Pod 时,例如 `kubectl get pod nginx`,路径的 `.items[*]` 部分应该省略,因为返回的是一个 Pod 而不是一个项目列表。 +{{< /note >}} + + +## 列出 Pod 中的容器 + +可以使用 `range` 操作进一步控制格式化,以单独操作每个元素。 + +```sh +kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\ +sort +``` + + +## 列出以 label 过滤后的 Pod 的所有容器 + +要获取匹配特定标签的 Pod,请使用 -l 参数。以下匹配仅与标签 `app=nginx` 相符的 Pod。 + +```sh +kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx +``` + + +## 列出以命名空间过滤后的 Pod 的所有容器 + +要获取匹配特定命名空间的 Pod,请使用 namespace 参数。以下仅匹配 `kube-system` 命名空间下的 Pod。 + +```sh +kubectl get pods --namespace kube-system -o jsonpath="{..image}" +``` + + +## 使用 go-template 代替 jsonpath 来获取容器 + +作为 jsonpath 的替代,Kubectl 支持使用 [go-templates](https://golang.org/pkg/text/template/) 来格式化输出: + + +```sh +kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}" +``` + + + +{{% /capture %}} + +{{% capture discussion %}} + +{{% /capture %}} + +{{% capture whatsnext %}} + + +### 参考 + +* [Jsonpath](/docs/user-guide/jsonpath/) 参考指南 +* [Go template](https://golang.org/pkg/text/template/) 参考指南 + +{{% /capture %}} + + diff --git a/content/zh/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md b/content/zh/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md new file mode 100644 index 0000000000..3308069220 --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md @@ -0,0 +1,190 @@ + +--- +title: 提供对集群中应用程序的负载均衡访问 +content_template: templates/tutorial +weight: 50 +--- + +{{% capture overview %}} + + +本文展示如何创建一个 Kubernetes 服务对象,来提供负载均衡入口以访问集群内正在运行的应用程序。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture objectives %}} + + +* 运行两个 Hello World 应用示例 +* 创建一个服务对象 +* 使用这个服务对象来访问正在运行的应用 + +{{% /capture %}} + + +{{% capture lessoncontent %}} + + +## 为在两个 pod 中运行的应用程序创建服务 + +1. 在您的集群中运行一个 Hello World 应用: + + ``` + kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080 + ``` + + +1. 列出运行 Hello World 应用的 pod: + + ``` + kubectl get pods --selector="run=load-balancer-example" + ``` + + + 输出应类似于: + + ``` + NAME READY STATUS RESTARTS AGE + hello-world-2189936611-8fyp0 1/1 Running 0 6m + hello-world-2189936611-9isq8 1/1 Running 0 6m + ``` + + +1. 创建一个服务对象来暴露这个 deployment: + + ``` + kubectl expose deployment --type=NodePort --name=example-service + ``` + + + 这里的 `` 是您的 deployment 的名称。 + +1. 显示您服务的 IP 地址: + + ``` + kubectl get services example-service + ``` + + + 输出展示了您服务的内部和外部 IP 地址。如果外部 IP 地址显示 ``,那么您需要重复运行以上命令。 + + {{< note >}} + + **注意:** 如果您使用 Minikube,那么您将不会获得外部 IP 地址。外部 IP 地址将保持 pending 状态。 + {{< /note >}} + + NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE + example-service 10.0.0.160 8080/TCP 40s + + +1. 使用您的服务对象来访问这个 Hello World 应用: + + curl :8080 + + + 这里的 `` 是您服务的外部 IP 地址。 + + 输出是来自应用的 hello 消息: + + Hello Kubernetes! + + {{< note >}} + + **注意:** 如果您使用 Minikube,输入以下命令: + {{< /note >}} + + kubectl cluster-info + kubectl describe services example-service + + + 输出将展示您的 Minikube 节点的 IP 地址和您服务的 NodePort 值。然后输入以下命令来访问这个 Hello World 应用: + + curl : + + + 这里的 `` 是您的 Minikube 节点的 IP 地址,`` 是您服务的 NodePort 值。 + + +## 使用服务配置文件 + +作为 `kubectl expose` 的替代方法,您可以使用 [服务配置文件](/docs/concepts/services-networking/service/) 来创建服务。 + + +{{% /capture %}} + + +{{% capture whatsnext %}} + + +学习更多关于如何 [通过服务连接应用](/docs/concepts/services-networking/connect-applications-service/)。 +{{% /capture %}} + + + diff --git a/content/zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md b/content/zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md new file mode 100644 index 0000000000..6bccf05cda --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md @@ -0,0 +1,222 @@ + +--- +title: 使用端口转发来访问集群中的应用 +content_template: templates/task +weight: 40 +--- + +{{% capture overview %}} + + +本文展示如何使用 `kubectl port-forward` 连接到在 Kubernetes 集群中运行的 Redis 服务。这种类型的连接对数据库调试很有用。 +{{% /capture %}} + + +{{% capture prerequisites %}} + +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + + +* 安装 [redis-cli](http://redis.io/topics/rediscli)。 + +{{% /capture %}} + + +{{% capture steps %}} + + +## 创建 Redis deployment 和服务 + +1. 创建一个 Redis deployment: + + kubectl create -f https://k8s.io/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml + + + 查看输出是否成功,以验证是否成功创建 deployment: + + deployment "redis-master" created + + + 当 pod 是 ready 时,您将得到: + + kubectl get pods + + NAME READY STATUS RESTARTS AGE + redis-master-765d459796-258hz 1/1 Running 0 50s + + kubectl get deployment + + NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE + redis-master 1 1 1 1 55s + + kubectl get rs + + NAME DESIRED CURRENT READY AGE + redis-master-765d459796 1 1 1 1m + + + +2. 创建一个 Redis 服务: + + kubectl create -f https://k8s.io/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml + + + 查看输出是否成功,以验证是否成功创建服务: + + service "redis-master" created + + + 检查服务是否创建: + + kubectl get svc | grep redis + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + redis-master ClusterIP 10.0.0.213 6379/TCP 27s + + +3. 验证 Redis 服务是否运行在 pod 中并且监听 6379 端口: + + + kubectl get pods redis-master-765d459796-258hz --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' + + + + 输出应该显示端口: + + 6379 + + + +## 转发一个本地端口到 pod 端口 + +1. 从 Kubernetes v1.10 开始,`kubectl port-forward` 允许使用资源名称(例如服务名称)来选择匹配的 pod 来进行端口转发。 + + kubectl port-forward redis-master-765d459796-258hz 6379:6379 + + + 这相当于 + + kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379 + + + 或者 + + kubectl port-forward deployment/redis-master 6379:6379 + + + 或者 + + kubectl port-forward rs/redis-master 6379:6379 + + + 或者 + + kubectl port-forward svc/redis-master 6379:6379 + + + 以上所有命令都应该有效。输出应该类似于: + + I0710 14:43:38.274550 3655 portforward.go:225] Forwarding from 127.0.0.1:6379 -> 6379 + I0710 14:43:38.274797 3655 portforward.go:225] Forwarding from [::1]:6379 -> 6379 + + +2. 启动 Redis 命令行接口: + + redis-cli + + +3. 在 Redis 命令行提示符下,输入 `ping` 命令: + + 127.0.0.1:6379>ping + + + 成功的 ping 请求应该返回 PONG。 + +{{% /capture %}} + + +{{% capture discussion %}} + + +## 讨论 + +与本地 6379 端口建立的连接将转发到运行 Redis 服务器的 pod 的 6379 端口。通过此连接,您可以使用本地工作站来调试在 pod 中运行的数据库。 + +{{< warning >}} + +**警告:** 由于已知的限制,目前的端口转发仅适用于 TCP 协议。 +在 [issue 47862](https://github.com/kubernetes/kubernetes/issues/47862) 中正在跟踪对 UDP 协议的支持。 +{{< /warning >}} + +{{% /capture %}} + + +{{% capture whatsnext %}} + +学习更多关于 [kubectl port-forward](/docs/reference/generated/kubectl/kubectl-commands/#port-forward)。 +{{% /capture %}} + + + diff --git a/content/cn/docs/tasks/access-application-cluster/redis-master.yaml b/content/zh/docs/tasks/access-application-cluster/redis-master.yaml similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/redis-master.yaml rename to content/zh/docs/tasks/access-application-cluster/redis-master.yaml diff --git a/content/zh/docs/tasks/access-application-cluster/service-access-application-cluster.md b/content/zh/docs/tasks/access-application-cluster/service-access-application-cluster.md new file mode 100644 index 0000000000..908280e29d --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/service-access-application-cluster.md @@ -0,0 +1,225 @@ + +--- +title: 使用服务来访问集群中的应用 +content_template: templates/tutorial +weight: 60 +--- + +{{% capture overview %}} + + +本文展示如何创建一个 Kubernetes 服务对象,能让外部客户端访问在集群中运行的应用。该服务为一个应用的两个运行实例提供负载均衡。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture objectives %}} + + +* 运行 Hello World 应用的两个实例。 +* 创建一个服务对象来暴露一个 node port。 +* 使用服务对象来访问正在运行的应用。 + +{{% /capture %}} + + +{{% capture lessoncontent %}} + + +## 为运行在两个 pod 中的应用创建一个服务: + +1. 在您的集群中运行一个 Hello World 应用: + ```shell + kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080 + ``` + + 上面的命令创建一个 [Deployment](/docs/concepts/workloads/controllers/deployment/) 对象和一个关联的 [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/) 对象。这个 ReplicaSet 有两个 [Pod](/docs/concepts/workloads/pods/pod/),每个 Pod 都运行着 Hello World 应用。 + + +1. 展示 Deployment 的信息: + ```shell + kubectl get deployments hello-world + kubectl describe deployments hello-world + ``` + + +1. 展示您的 ReplicaSet 对象信息: + ```shell + kubectl get replicasets + kubectl describe replicasets + ``` + + +1. 创建一个服务对象来暴露 deployment: + ```shell + kubectl expose deployment hello-world --type=NodePort --name=example-service + ``` + + +1. 展示服务信息: + ```shell + kubectl describe services example-service + ``` + + 输出类似于: + ```shell + Name: example-service + Namespace: default + Labels: run=load-balancer-example + Annotations: + Selector: run=load-balancer-example + Type: NodePort + IP: 10.32.0.16 + Port: 8080/TCP + TargetPort: 8080/TCP + NodePort: 31496/TCP + Endpoints: 10.200.1.4:8080,10.200.2.5:8080 + Session Affinity: None + Events: + ``` + + 注意服务中的 NodePort 值。例如在上面的输出中,NodePort 是 31496。 + + +1. 列出运行 Hello World 应用的 pod: + ```shell + kubectl get pods --selector="run=load-balancer-example" --output=wide + ``` + + 输出类似于: + ```shell + NAME READY STATUS ... IP NODE + hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1 + hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2 + ``` + +1. 获取运行 Hello World 的 pod 的其中一个节点的公共 IP 地址。如何获得此地址取决于您设置集群的方式。 + 例如,如果您使用的是 Minikube,则可以通过运行 `kubectl cluster-info` 来查看节点地址。 + 如果您使用的是 Google Compute Engine 实例,则可以使用 `gcloud compute instances list` 命令查看节点的公共地址。 + +1. 在您选择的节点上,创建一个防火墙规则以开放 node port 上的 TCP 流量。 + 例如,如果您的服务的 NodePort 值为 31568,请创建一个防火墙规则以允许 31568 端口上的 TCP 流量。 + 不同的云提供商提供了不同方法来配置防火墙规则。 + +1. 使用节点地址和 node port 来访问 Hello World 应用: + ```shell + curl http://: + ``` + + 这里的 `` 是您节点的公共 IP 地址,`` 是您服务的 NodePort 值。 + 对于请求成功的响应是一个 hello 消息: + ```shell + Hello Kubernetes! + ``` + + +## 使用服务配置文件 + +作为 `kubectl expose` 的替代方法,您可以使用 [服务配置文件](/docs/concepts/services-networking/service/) 来创建服务。 + +{{% /capture %}} + + +{{% capture cleanup %}} + + +想要删除服务,输入以下命令: + + kubectl delete services example-service + + +想要删除运行 Hello World 应用的 Deployment、ReplicaSet 和 Pod,输入以下命令: + + kubectl delete deployment hello-world + +{{% /capture %}} + + +{{% capture whatsnext %}} + + +学习更多关于如何 [通过服务连接应用](/docs/concepts/services-networking/connect-applications-service/)。 +{{% /capture %}} diff --git a/content/cn/docs/tasks/access-application-cluster/two-container-pod.yaml b/content/zh/docs/tasks/access-application-cluster/two-container-pod.yaml similarity index 100% rename from content/cn/docs/tasks/access-application-cluster/two-container-pod.yaml rename to content/zh/docs/tasks/access-application-cluster/two-container-pod.yaml diff --git a/content/zh/docs/tasks/access-kubernetes-api/setup-extension-api-server.md b/content/zh/docs/tasks/access-kubernetes-api/setup-extension-api-server.md new file mode 100644 index 0000000000..f7b3fff81a --- /dev/null +++ b/content/zh/docs/tasks/access-kubernetes-api/setup-extension-api-server.md @@ -0,0 +1,112 @@ + +--- +title: 设置一个扩展的 API server +reviewers: +- lavalamp +- cheftako +- chenopis +content_template: templates/task +weight: 15 +--- + +{{% capture overview %}} + + +设置一个扩展的 API server 来使用聚合层以让 Kubernetes apiserver 使用其它 API 进行扩展,这些 API 不是核心 Kubernetes API 的一部分。 + +{{% /capture %}} + +{{% capture prerequisites %}} + + +* 您需要拥有一个运行的 Kubernetes 集群。 +* 您必须 [配置聚合层](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) 并且启用 apiserver 的相关参数。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## 设置一个扩展的 api-server 来使用聚合层 + +以下步骤描述如何 *在一个高层次* 设置一个扩展的 apiserver。无论您使用的是 YAML 配置还是使用 API,这些步骤都适用。目前我们正在尝试区分出两者的区别。有关使用 YAML 配置的具体示例,您可以在 Kubernetes 库中查看 [sample-apiserver](https://github.com/kubernetes/sample-apiserver/blob/master/README.md)。 + +或者,您可以使用现有的第三方解决方案,例如 [apiserver-builder](https://github.com/Kubernetes-incubator/apiserver-builder/blob/master/README.md),它将生成框架并自动执行以下所有步骤。 + + +1. 确保启用了 APIService API(检查 `--runtime-config`)。默认应该是启用的,除非被特意关闭了。 +1. 您可能需要制定一个 RBAC 规则,以允许您添加 APIService 对象,或让您的集群管理员创建一个。(由于 API 扩展会影响整个集群,因此不建议在实时集群中对 API 扩展进行测试/开发/调试) +1. 创建 Kubernetes 命名空间,扩展的 api-service 将运行在该命名空间中。 +1. 创建(或获取)用来签署服务器证书的 CA 证书,扩展 api-server 中将使用该证书做 HTTPS 连接。 +1. 为 api-server 创建一个服务端的证书(或秘钥)以使用 HTTPS。这个证书应该由上述的 CA 签署。同时应该还要有一个 Kube DNS 名称的 CN,这是从 Kubernetes 服务派生而来的,格式为 `..svc`。 +1. 使用命名空间中的证书(或秘钥)创建一个 Kubernetes secret。 +1. 为扩展 api-server 创建一个 Kubernetes deployment,并确保以卷的方式挂载了 secret。它应该包含对扩展 api-server 镜像的引用。Deployment 也应该在同一个命名空间中。 +1. 确保您的扩展 apiserver 从该卷中加载了那些证书,并在 HTTPS 握手过程中使用它们。 +1. 在您的命令空间中创建一个 Kubernetes service account。 +1. 为资源允许的操作创建 Kubernetes 集群角色。 +1. 以您命令空间中的 service account 创建一个 Kubernetes 集群角色绑定,绑定到您刚创建的角色上。 +1. 以您命令空间中的 service account 创建一个 Kubernetes 集群角色绑定,绑定到 `system:auth-delegator` 集群角色,以将 auth 决策委派给 Kubernetes 核心 API 服务器。 +1. 以您命令空间中的 service account 创建一个 Kubernetes 集群角色绑定,绑定到 `extension-apiserver-authentication-reader` 角色。这将让您的扩展 api-server 能够访问 `extension-apiserver-authentication` configmap。 +1. 创建一个 Kubernetes apiservice。上述的 CA 证书应该使用 base64 编码,剥离新行并用作 apiservice 中的 spec.caBundle。这不应该是命名空间化的。如果使用了 [kube-aggregator API](https://github.com/kubernetes/kube-aggregator/),那么只需要传入 PEM 编码的 CA 绑定,因为 base 64 编码已经完成了。 +1. 使用 kubectl 来获得您的资源。它应该返回 "找不到资源"。这意味着一切正常,但您目前还没有创建该资源类型的对象。 + +{{% /capture %}} + +{{% capture whatsnext %}} + + +* 如果你还未配置,请 [配置聚合层](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) 并启用 apiserver 的相关参数。 +* 高级概述,请参阅 [使用聚合层扩展 Kubernetes API](/docs/concepts/api-extension/apiserver-aggregation)。 +* 了解如何 [使用 Custom Resource Definition 扩展 Kubernetes API](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/)。 + +{{% /capture %}} + + + diff --git a/content/cn/docs/tasks/administer-cluster/access-cluster-services.md b/content/zh/docs/tasks/administer-cluster/access-cluster-services.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/access-cluster-services.md rename to content/zh/docs/tasks/administer-cluster/access-cluster-services.md diff --git a/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md b/content/zh/docs/tasks/administer-cluster/apply-resource-quota-limit.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md rename to content/zh/docs/tasks/administer-cluster/apply-resource-quota-limit.md diff --git a/content/cn/docs/tasks/administer-cluster/calico-network-policy.md b/content/zh/docs/tasks/administer-cluster/calico-network-policy.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/calico-network-policy.md rename to content/zh/docs/tasks/administer-cluster/calico-network-policy.md diff --git a/content/cn/docs/tasks/administer-cluster/change-default-storage-class.md b/content/zh/docs/tasks/administer-cluster/change-default-storage-class.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/change-default-storage-class.md rename to content/zh/docs/tasks/administer-cluster/change-default-storage-class.md diff --git a/content/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md b/content/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md rename to content/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy.md diff --git a/content/cn/docs/tasks/administer-cluster/cluster-management.md b/content/zh/docs/tasks/administer-cluster/cluster-management.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cluster-management.md rename to content/zh/docs/tasks/administer-cluster/cluster-management.md diff --git a/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml b/content/zh/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml b/content/zh/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml b/content/zh/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod.yaml b/content/zh/docs/tasks/administer-cluster/cpu-constraints-pod.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-constraints-pod.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-constraints-pod.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-constraints.yaml b/content/zh/docs/tasks/administer-cluster/cpu-constraints.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-constraints.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-constraints.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml b/content/zh/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml b/content/zh/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-defaults-pod.yaml b/content/zh/docs/tasks/administer-cluster/cpu-defaults-pod.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-defaults-pod.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-defaults-pod.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-defaults.yaml b/content/zh/docs/tasks/administer-cluster/cpu-defaults.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-defaults.yaml rename to content/zh/docs/tasks/administer-cluster/cpu-defaults.yaml diff --git a/content/cn/docs/tasks/administer-cluster/cpu-management-policies.md b/content/zh/docs/tasks/administer-cluster/cpu-management-policies.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/cpu-management-policies.md rename to content/zh/docs/tasks/administer-cluster/cpu-management-policies.md diff --git a/content/cn/docs/tasks/administer-cluster/cpu-memory-limit.md b/content/zh/docs/tasks/administer-cluster/cpu-memory-limit.md similarity index 99% rename from content/cn/docs/tasks/administer-cluster/cpu-memory-limit.md rename to content/zh/docs/tasks/administer-cluster/cpu-memory-limit.md index d867fc14b7..3988b9b9c8 100644 --- a/content/cn/docs/tasks/administer-cluster/cpu-memory-limit.md +++ b/content/zh/docs/tasks/administer-cluster/cpu-memory-limit.md @@ -195,7 +195,7 @@ spec: 注意到这个 Pod 显式地指定了资源 *limits* 和 *requests*,所以它不会使用该 Namespace 的默认值。 -注意:在物理节点上默认安装的 Kubernetes 集群中,CPU 资源的 *limits* 是被强制使用的,该 Kubernetes 集群运行容器,除非管理员在部署 kublet 时使用了如下标志: +注意:在物理节点上默认安装的 Kubernetes 集群中,CPU 资源的 *limits* 是被强制使用的,该 Kubernetes 集群运行容器,除非管理员在部署 kubelet 时使用了如下标志: ```shell $ kubelet --help diff --git a/content/cn/docs/tasks/administer-cluster/declare-network-policy.md b/content/zh/docs/tasks/administer-cluster/declare-network-policy.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/declare-network-policy.md rename to content/zh/docs/tasks/administer-cluster/declare-network-policy.md diff --git a/content/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md b/content/zh/docs/tasks/administer-cluster/dns-custom-nameservers.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md rename to content/zh/docs/tasks/administer-cluster/dns-custom-nameservers.md diff --git a/content/cn/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml b/content/zh/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml rename to content/zh/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml diff --git a/content/zh/docs/tasks/administer-cluster/encrypt-data.md b/content/zh/docs/tasks/administer-cluster/encrypt-data.md new file mode 100644 index 0000000000..c454ec9945 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/encrypt-data.md @@ -0,0 +1,323 @@ + +--- +reviewers: +- smarterclayton +title: 加密静态 Secret 数据 +content_template: templates/task +--- + +{{% capture overview %}} + +本文展示如何启用和配置静态 Secret 数据的加密 +{{% /capture %}} + +{{% capture prerequisites %}} + +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + + +* 需要 Kubernetes 1.7.0 或者更高版本 + +* 需要 etcd v3 或者更高版本 + +* 静态数据加密在 1.7.0 中仍然是 alpha 版本,这意味着它可能会在没有通知的情况下进行更改。在升级到 1.8.0 之前,用户可能需要解密他们的数据。 + +{{% /capture %}} + +{{< toc >}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## 配置并确定是否已启用静态数据加密 + +`kube-apiserver` 的参数 `--experimental-encryption-provider-config` 控制 API 数据在 etcd 中的加密方式。 +下面提供一个配置示例。 + +## 理解静态数据加密 + +```yaml +kind: EncryptionConfig +apiVersion: v1 +resources: + - resources: + - secrets + providers: + - identity: {} + - aesgcm: + keys: + - name: key1 + secret: c2VjcmV0IGlzIHNlY3VyZQ== + - name: key2 + secret: dGhpcyBpcyBwYXNzd29yZA== + - aescbc: + keys: + - name: key1 + secret: c2VjcmV0IGlzIHNlY3VyZQ== + - name: key2 + secret: dGhpcyBpcyBwYXNzd29yZA== + - secretbox: + keys: + - name: key1 + secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY= +``` + + +每个 `resources` 数组项目是一个单独的完整的配置。 `resources.resources` 字段是要加密的 Kubernetes 资源名称(`resource` 或 `resource.group`)的数组。 +`providers` 数组是可能的加密 provider 的有序列表。每个条目只能指定一个 provider 类型(可以是 `identity` 或 `aescbc`,但不能在同一个项目中同时指定)。 + +列表中的第一个提供者用于加密进入存储的资源。当从存储器读取资源时,与存储的数据匹配的所有提供者将尝试按顺序解密数据。 +如果由于格式或密钥不匹配而导致提供者无法读取存储的数据,则会返回一个错误,以防止客户端访问该资源。 + +**重要:** 如果通过加密配置无法读取资源(因为密钥已更改),唯一的方法是直接从基础 etcd 中删除该密钥。任何尝试读取资源的调用将会失败,直到它被删除或提供有效的解密密钥。 + +### Providers: + + +名称 | 加密类型 | 强度 | 速度 | 密钥长度 | 其它事项 +-----|------------|----------|-------|------------|--------------------- +`identity` | 无 | N/A | N/A | N/A | 不加密写入的资源。当设置为第一个 provider 时,资源将在新值写入时被解密。 +`aescbc` | 填充 PKCS#7 的 AES-CBC | 最强 | 快 | 32字节 | 建议使用的加密项,但可能比 `secretbox` 稍微慢一些。 +`secretbox` | XSalsa20 和 Poly1305 | 强 | 更快 | 32字节 | 较新的标准,在需要高度评审的环境中可能不被接受。 +`aesgcm` | 带有随机数的 AES-GCM | 必须每 200k 写入一次 | 最快 | 16, 24, 或者 32字节 | 建议不要使用,除非实施了自动密钥循环方案。 +`kms` | 使用信封加密方案:数据使用带有 PKCS#7 填充的 AES-CBC 通过 data encryption keys(DEK)加密,DEK 根据 Key Management Service(KMS)中的配置通过 key encryption keys(KEK)加密 | 最强 | 快 | 32字节 | 建议使用第三方工具进行密钥管理。为每个加密生成新的 DEK,并由用户控制 KEK 轮换来简化密钥轮换。[配置 KMS 提供程序](/docs/tasks/administer-cluster/kms-provider/) + +每个 provider 都支持多个密钥 - 在解密时会按顺序使用密钥,如果是第一个 provider,则第一个密钥用于加密。 + + +## 加密您的数据 + +创建一个新的加密配置文件: + +```yaml +kind: EncryptionConfig +apiVersion: v1 +resources: + - resources: + - secrets + providers: + - aescbc: + keys: + - name: key1 + secret: + - identity: {} +``` + + +遵循如下步骤来创建一个新的 secret: + +1. 生成一个 32 字节的随机密钥并进行 base64 编码。如果您在 Linux 或 Mac OS X 上,请运行以下命令: + + ``` + head -c 32 /dev/urandom | base64 + ``` + + +2. 将这个值放入到 secret 字段中。 +3. 设置 `kube-apiserver` 的 `--experimental-encryption-provider-config` 参数,将其指定到配置文件所在位置。 +4. 重启您的 API server。 + +**重要:** 您的配置文件包含可以解密 etcd 内容的密钥,因此您必须正确限制主设备的权限,以便只有能运行 kube-apiserver 的用户才能读取它。 + + + +## 验证数据是否被加密 + +数据在写入 etcd 时会被加密。重新启动你的 `kube-apiserver` 后,任何新创建或更新的密码在存储时都应该被加密。 +如果想要检查,你可以使用 `etcdctl` 命令行程序来检索你的加密内容。 + +1. 创建一个新的 secret,名称为 `secret1`,命名空间为 `default`: + + ``` + kubectl create secret generic secret1 -n default --from-literal=mykey=mydata + ``` + + +2. 使用 etcdctl 命令行,从 etcd 中读取 secret: + + ``` +    ETCDCTL_API=3 etcdctl get /registry/secrets/default/secret1 [...] | hexdump -C + ``` + + + 这里的 `[...]` 是用来连接 etcd 服务的额外参数。 +3. 验证存储的密钥前缀是否为 `k8s:enc:aescbc:v1:`,这表明 `aescbc` provider 已加密结果数据。 +4. 通过 API 检索,验证 secret 是否被正确解密: + + ``` + kubectl describe secret secret1 -n default + ``` + + + 必须匹配 `mykey: mydata` + + + +## 确保所有 secret 都被加密 + +由于 secret 是在写入时被加密,因此对 secret 执行更新也会加密该内容。 + +``` +kubectl get secrets --all-namespaces -o json | kubectl replace -f - +``` + + +上面的命令读取所有 secret,然后使用服务端加密来进行更新。 +如果由于冲突写入而发生错误,请重试该命令。 +对于较大的集群,您可能希望通过命名空间或更新脚本来分割 secret。 + + + +## 回滚解密密钥 + +在不发生停机的情况下更改 secret 需要多步操作,特别是在有多个 `kube-apiserver` 进程正在运行的高可用部署的情况下。 + +1. 生成一个新密钥并将其添加为所有服务器上当前提供程序的第二个密钥条目 +2. 重新启动所有 `kube-apiserver` 进程以确保每台服务器都可以使用新密钥进行解密 +3. 将新密钥设置为 `keys` 数组中的第一个条目,以便在配置中使用其进行加密 +4. 重新启动所有 `kube-apiserver` 进程以确保每个服务器现在都使用新密钥进行加密 +5. 运行 `kubectl get secrets --all-namespaces -o json | kubectl replace -f -` 以用新密钥加密所有现有的秘密 +6. 在使用新密钥备份 etcd 后,从配置中删除旧的解密密钥并更新所有密钥 + +如果只有一个 `kube-apiserver`,第 2 步可能可以忽略。 + + + +## 解密所有数据 + +要禁用 rest 加密,请将 `identity` provider 作为配置中的第一个条目: + +```yaml +kind: EncryptionConfig +apiVersion: v1 +resources: + - resources: + - secrets + providers: + - identity: {} + - aescbc: + keys: + - name: key1 + secret: +``` + + +并重新启动所有 `kube-apiserver` 进程。然后运行命令 `kubectl get secrets --all-namespaces -o json | kubectl replace -f -` 强制解密所有 secret。 + +{{% /capture %}} + + diff --git a/content/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md b/content/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md rename to content/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md new file mode 100644 index 0000000000..56dae7aa97 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-9.md @@ -0,0 +1,453 @@ +--- +reviewers: +- pipejakob +- luxas +- roberthbailey +- jbeda +title: 将 kubeadm 集群在 v1.8 版本到 v1.9 版本之间升级/降级 +content_template: templates/task +--- + + + +{{% capture overview %}} + + +本文主要描述如何将 `kubeadm` 集群从 1.8.x 版本升级到 1.9.x 版本,包括从 1.8.x 版本升级到 1.8.y 版本,和从版本 1.9.x 版本到 1.9.y 版本(`y > x`)。 +如果您目前安装的是集群是 1.7 版本,也可以查看[ kubeadm clusters 集群从 1.7 版本升级到 1.8 版本](/docs/tasks/administer-cluster/kubeadm-upgrade-1-8/) +{{% /capture %}} + +{{% capture prerequisites %}} + +升级之前: + +- 您需要先安装一个版本为 1.8.0 或更高版本的 `kubeadm` Kubernetes 集群。另外还需要禁用节点的交换分区。 +- 一定要认真阅读[发布说明](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md) +- `kubeadm upgrade` 可以更新 etcd。默认情况下,从 Kubernetes 1.8 版本升级到 1.9 版本时,`kubeadm upgrade` 也会升级 etcd 到 3.1.10 版本。这是由于 etcd3.1.10 是官方验证的 etcd 版本对于 kubernetes1.9。kubeadm 为您提供了自动化的升级过程。 +- 请注意,`kubeadm upgrade`命令 不会触及任何工作负载,只有 kubernetes 内部组件。作为最佳实践,您应当备份,因为备份相当的重要。例如,任何应用程序级别的状态(如应用程序可能依赖的数据库,如 mysql 或 mongoDB)必须预先备份。 +{{< caution >}} + +**注意:** 由于容器的具体哈希值改变了,所有的容器在升级之后会重新启动。 + +{{< /caution >}} + + +同时,也要注意只有小范围的升级是支持的。例如,您只可以从 1.8 版本升级到 1.9 版本,但是不能从 1.7 版本升级到 1.9 版本。 + + +{{% /capture %}} + +{{% capture steps %}} + +## 升级控制面板 + +在您的 master 节点上执行这些命令: + +1. 使用 `curl` 命令进行安装最新的版本的 `kubeadm` ,例如: +```shell +export VERSION=$(curl -sSL https://dl.k8s.io/release/stable.txt) # or manually specify a released Kubernetes version +export ARCH=amd64 # or: arm, arm64, ppc64le, s390x +curl -sSL https://dl.k8s.io/release/${VERSION}/bin/linux/${ARCH}/kubeadm > /usr/bin/kubeadm +chmod a+rx /usr/bin/kubeadm +``` + +{{< caution >}} + +**注意:** 在您的系统上升级控制面板之前升级 `kubeadm` 包会导致升级失败。 +尽管 `kubeadm` ships 在 kubernetes 仓库中,手动安装 `kubeadm` 是重要的。kubeadm 团队在努力解决这种手动安装的限制。 +{{< /caution >}} + +验证 kubeadm 下载工作是否正常,并是否有达到预期的版本: +```shell +kubeadm version +``` + +2. 在master节点上运行如下命令: +```shell +kubeadm upgrade plan +``` + +可以得到类型的结果: + + + ```shell + [preflight] Running pre-flight checks + [upgrade] Making sure the cluster is healthy: + [upgrade/health] Checking API Server health: Healthy + [upgrade/health] Checking Node health: All Nodes are healthy + [upgrade/health] Checking Static Pod manifests exists on disk: All manifests exist on disk + [upgrade/config] Making sure the configuration is correct: + [upgrade/config] Reading configuration from the cluster... + [upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' + [upgrade] Fetching available versions to upgrade to: + [upgrade/versions] Cluster version: v1.8.1 + [upgrade/versions] kubeadm version: v1.9.0 + [upgrade/versions] Latest stable version: v1.9.0 + [upgrade/versions] Latest version in the v1.8 series: v1.8.6 + + 在升级控制面板并使用 'kubeadm upgrade apply' 后,必须手动升级组件: + COMPONENT CURRENT AVAILABLE + Kubelet 1 x v1.8.1 v1.8.6 + + 升级到最新的 v1.8 系列的版本: + COMPONENT CURRENT AVAILABLE + API Server v1.8.1 v1.8.6 + Controller Manager v1.8.1 v1.8.6 + Scheduler v1.8.1 v1.8.6 + Kube Proxy v1.8.1 v1.8.6 + Kube DNS 1.14.4 1.14.5 + + 您可以通过以下的命令来进行升级: + kubeadm upgrade apply v1.8.6 + + _____________________________________________________________________ + + 在升级控制面板并使用 'kubeadm upgrade apply' 后,必须手动升级组件: + COMPONENT CURRENT AVAILABLE + Kubelet 1 x v1.8.1 v1.9.0 + + 升级到最新和稳定的版本: + COMPONENT CURRENT AVAILABLE + API Server v1.8.1 v1.9.0 + Controller Manager v1.8.1 v1.9.0 + Scheduler v1.8.1 v1.9.0 + Kube Proxy v1.8.1 v1.9.0 + Kube DNS 1.14.5 1.14.7 + + 您可以通过以下命令来进行升级: + kubeadm upgrade apply v1.9.0 + + 请注意:在您执行升级之前,您必须升级 kubeadm 到 v1.9.0 版本 +_____________________________________________________________________ +``` + + +`kubeadm upgrade plan` 命令检查您的集群是否处于可升级的状态并且获取可以以用户友好方式升级的版本。 + +检查 coreDNS 版本,包括 `--feature-gates=CoreDNS=true` 标志来验证存放 kube-dns 在某个位置的 coreDNS 版本。 + +3. 选择一个版本来进行升级和运行,例如: +```shell +kubeadm upgrade apply v1.9.0 +``` + +可以得到如下类似的输出: +```shell +[preflight] Running pre-flight checks. +[upgrade] Making sure the cluster is healthy: +[upgrade/config] Making sure the configuration is correct: +[upgrade/config] Reading configuration from the cluster... +[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' +[upgrade/version] You have chosen to upgrade to version "v1.9.0" +[upgrade/versions] Cluster version: v1.8.1 +[upgrade/versions] kubeadm version: v1.9.0 +[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y +[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler] +[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.9.0"... +[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/etcd.yaml" +[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/etcd.yaml" +[upgrade/staticpods] Waiting for the kubelet to restart the component +[apiclient] Found 1 Pods for label selector component=etcd +[upgrade/staticpods] Component "etcd" upgraded successfully! +[upgrade/staticpods] Writing upgraded Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804" +[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/kube-apiserver.yaml" +[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/kube-controller-manager.yaml" +[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests802453804/kube-scheduler.yaml" +[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/kube-apiserver.yaml" +[upgrade/staticpods] Waiting for the kubelet to restart the component +[apiclient] Found 1 Pods for label selector component=kube-apiserver +[upgrade/staticpods] Component "kube-apiserver" upgraded successfully! +[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-controller-manager.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/kube-controller-manager.yaml" +[upgrade/staticpods] Waiting for the kubelet to restart the component +[apiclient] Found 1 Pods for label selector component=kube-controller-manager +[upgrade/staticpods] Component "kube-controller-manager" upgraded successfully! +[upgrade/staticpods] Moved upgraded manifest to "/etc/kubernetes/manifests/kube-scheduler.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests502223003/kube-scheduler.yaml" +[upgrade/staticpods] Waiting for the kubelet to restart the component +[apiclient] Found 1 Pods for label selector component=kube-scheduler +[upgrade/staticpods] Component "kube-scheduler" upgraded successfully! +[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace +[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials +[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token +[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster +[addons] Applied essential addon: kube-dns +[addons] Applied essential addon: kube-proxy + +[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.9.0". Enjoy! + +[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets in turn. +``` + + +升级具有默认内部的 DNS 的 coreDNS 集群,调用具有 `--feature-gates=CoreDNS=true` 标记的 `kubeadm upgrade apply`。 +`kubeadm upgrade apply`按照如下进行: + +- 检查集群是否处于可升级状态: + -API服务器是否可达 + -所有的节点处于`Ready`状态 + -控制面板是健康的 +- 强制执行版本倾斜策略 +- 确保控制面板镜像可用或者可用于机器pull +- 升级控制面板组件或者回滚如果其中一个无法出现 +- 应用新的`kube-dns`和`kube-proxy`清单并强制创建所必须的RBAC规则 +- 创建API服务器新的证书和秘钥文件,并备份旧文件(如果它们即将在180天到期) + + +4. 手动升级定义网络(SDN)的软件 + + 容器网络接口(CNI)提供者具有升级说明指导。 + 检查这个[插件](/docs/concepts/cluster-administration/addons/)页面来找到 CNI 提供者和查看是否需要额外的升级步骤。 + + + +## 升级master和node包 + +在集群中涉及 `$HOST` 的每个主机,执行如下命令来升级 `kubelet` : + +1. 准备主机维修,并标记为不可调度和驱逐工作负载: +```shell +kubectl drain $HOST --ignore-daemonsets +``` + +当在 master 主机上运行这个命令,这个错误是可以预料的并且可以忽略(因为静态的 pods 运行在 master 上) +```shell +node "master" already cordoned +error: pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): etcd-kubeadm, kube-apiserver-kubeadm, kube-controller-manager-kubeadm, kube-scheduler-kubeadm +``` + +2. 在 `$HOST` 节点上使用特定的包管理器升级 kubernetes 包版本: + +如果主机运行 Debian-based 发行版如 ubuntu,运行如下: +```shell +apt-get update +apt-get upgrade +``` + +如果主机运行centos或者类似,运行如下: +```shell +yum update +``` + +现在 `kubelet` 新的版本运行在主机上。在` $HOST` 上使用如下命令验证: +```shell +systemctl status kubelet +``` + +3. 通过标记可计划的将主机从新联机: +```shell +kubectl uncordon $HOST +``` + +在所以主机升级 `kubelet` 后,通过从任意位置运行以下命令例如从集群外来验证所有节点是否可用: +```shell +kubectl get nodes +``` + +如果上面命令的 `STATUS` 列显示所有的主机的 `Ready`,就完成了。 + +## ##从坏的状态中恢复 + +如果 `kubeadm upgrade` 以某种方式失败了并无法回滚,原因有在执行过程中出现意外关机,可以再次运行 `kubeadm upgrade`,因为它是幂等的,并且最终确保实际状态是期待的状态。 + + + +可以使用 `kubeadm upgrade` 来更改运行的集群并使用具有 `--force` 参数的 `x.x.x --> x.x.x`,这样可以恢复坏的状态。 + +{{% /capture %}} + + diff --git a/content/cn/docs/tasks/administer-cluster/kubelet-config-file.md b/content/zh/docs/tasks/administer-cluster/kubelet-config-file.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/kubelet-config-file.md rename to content/zh/docs/tasks/administer-cluster/kubelet-config-file.md diff --git a/content/cn/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml b/content/zh/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml rename to content/zh/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml b/content/zh/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml rename to content/zh/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml b/content/zh/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml rename to content/zh/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-constraints-pod.yaml b/content/zh/docs/tasks/administer-cluster/memory-constraints-pod.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-constraints-pod.yaml rename to content/zh/docs/tasks/administer-cluster/memory-constraints-pod.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-constraints.yaml b/content/zh/docs/tasks/administer-cluster/memory-constraints.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-constraints.yaml rename to content/zh/docs/tasks/administer-cluster/memory-constraints.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml b/content/zh/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml similarity index 81% rename from content/cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml rename to content/zh/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml index aa80610d84..1013293edd 100644 --- a/content/cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml +++ b/content/zh/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml @@ -4,7 +4,7 @@ metadata: name: default-mem-demo-2 spec: containers: - - name: default-mem-demo-2-ctr + - name: defalt-mem-demo-2-ctr image: nginx resources: limits: diff --git a/content/cn/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml b/content/zh/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml rename to content/zh/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-defaults-pod.yaml b/content/zh/docs/tasks/administer-cluster/memory-defaults-pod.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-defaults-pod.yaml rename to content/zh/docs/tasks/administer-cluster/memory-defaults-pod.yaml diff --git a/content/cn/docs/tasks/administer-cluster/memory-defaults.yaml b/content/zh/docs/tasks/administer-cluster/memory-defaults.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/memory-defaults.yaml rename to content/zh/docs/tasks/administer-cluster/memory-defaults.yaml diff --git a/content/cn/docs/tasks/administer-cluster/my-scheduler.yaml b/content/zh/docs/tasks/administer-cluster/my-scheduler.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/my-scheduler.yaml rename to content/zh/docs/tasks/administer-cluster/my-scheduler.yaml diff --git a/content/zh/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy.md b/content/zh/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy.md new file mode 100644 index 0000000000..78d0d8e675 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy.md @@ -0,0 +1,86 @@ +--- +reviewers: +- caseydavenport +title: 使用 Calico 作为 NetworkPolicy +content_template: templates/task +weight: 10 +--- + +{{% capture overview %}} + +本页展示了两种在 Kubernetes 上快速创建 Calico 集群的方法。 +{{% /capture %}} + +{{% capture prerequisites %}} + + +决定您想部署一个[云](#在-Google-Kubernetes-Engine-GKE-上创建一个-Calico-集群) 还是 [本地](#使用-kubeadm-创建一个本地-Calico-集群) 集群。 +{{% /capture %}} + +{{% capture steps %}} + +## 在 Google Kubernetes Engine (GKE) 上创建一个 Calico 集群 + +**先决条件**: [gcloud](https://cloud.google.com/sdk/docs/quickstarts) + +1. 启动一个带有 Calico 的 GKE 集群,只需加上flag `--enable-network-policy`。 + + **语法** + ```shell + gcloud container clusters create [CLUSTER_NAME] --enable-network-policy + ``` + + **示例** + ```shell + gcloud container clusters create my-calico-cluster --enable-network-policy + ``` + +1. 使用如下命令验证部署是否正确。 + + ```shell + kubectl get pods --namespace=kube-system + ``` + + Calico 的 pods 名以 `calico` 打头,检查确认每个 pods 状态为 `Running`。 + + +## 使用 kubeadm 创建一个本地 Calico 集群 + +在15分钟内使用 kubeadm 得到一个本地单主机 Calico 集群,请参考 +[Calico 快速入门](https://docs.projectcalico.org/latest/getting-started/kubernetes/)。 + +{{% /capture %}} + + +{{% capture whatsnext %}} + +集群运行后,您可以按照 [声明 Network Policy](/docs/tasks/administer-cluster/declare-network-policy/) 去尝试使用 Kubernetes NetworkPolicy。 +{{% /capture %}} diff --git a/content/zh/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy.md b/content/zh/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy.md new file mode 100644 index 0000000000..61be3718b3 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy.md @@ -0,0 +1,133 @@ +--- +reviewers: +- danwent +title: 使用 Cilium 作为 NetworkPolicy +content_template: templates/task +weight: 20 +--- + +{{% capture overview %}} + + +本页展示了如何使用 Cilium 作为 NetworkPolicy。 + +关于 Cilium 的背景知识,请阅读 [Cilium 介绍](https://cilium.readthedocs.io/en/latest/intro)。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## 在 Minikube 上部署 Cilium 用于基本测试 + +为了轻松熟悉 Cilium 您可以根据[Cilium Kubernetes 入门指南](https://docs.cilium.io/en/latest/gettingstarted/minikube/)在 minikube 中执行一个 cilium 的基本的 DaemonSet 安装。 + +在 minikube 中的安装配置使用一个简单的“一体化” YAML 文件,包括了 Cilium 的 DaemonSet 配置,连接 minikube 的 etcd 实例,以及适当的 RBAC 设置。 + +```shell +$ kubectl create -f https://raw.githubusercontent.com/cilium/cilium/master/examples/kubernetes/cilium.yaml +configmap "cilium-config" created +secret "cilium-etcd-secrets" created +serviceaccount "cilium" created +clusterrolebinding "cilium" created +daemonset "cilium" created +clusterrole "cilium" created +``` + +入门指南其余的部分用一个示例应用说明了如何强制执行L3/L4(即 IP 地址+端口)的安全策略以及L7 (如 HTTP)的安全策略。 + + + +## 部署 Cilium 用于生产用途 +关于部署 Cilium 用于生产的详细说明,请见[Cilium Kubernetes 安装指南](https://cilium.readthedocs.io/en/latest/kubernetes/install/) +,此文档包括详细的需求、说明和生产用途 DaemonSet 文件示例。 + +{{% /capture %}} + +{{% capture discussion %}} + +## 了解 Cilium 组件 + +部署使用 Cilium 的集群会添加 Pods 到`kube-system`命名空间。 要查看此Pod列表,运行: + +```shell +kubectl get pods --namespace=kube-system +``` + + +您将看到像这样的 Pods 列表: + +```console +NAME DESIRED CURRENT READY NODE-SELECTOR AGE +cilium 1 1 1 2m +... +``` + +有两个主要组件需要注意: + +- 在集群中的每个节点上都会运行一个 `cilium` Pod,并利用Linux BPF执行网络策略管理该节点上进出 Pod 的流量。 +- 对于生产部署,Cilium 应该复用 Kubernetes 所使用的键值存储集群(如 etcd),其通常在Kubernetes 的 master 节点上运行。 +[Cilium Kubernetes安装指南](https://cilium.readthedocs.io/en/latest/kubernetes/install/) +包括了一个示例 DaemonSet,可以自定义指定此键值存储集群。 +简单的 minikube 的“一体化” DaemonSet 不需要这样的配置,因为它会自动连接到 minikube 的 etcd 实例。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +群集运行后,您可以按照[声明网络策略](/docs/tasks/administer-cluster/declare-network-policy/) +用 Cilium 试用 Kubernetes NetworkPolicy。 +玩得开心,如果您有任何疑问,请联系我们 +[Cilium Slack Channel](https://cilium.herokuapp.com/)。 + +{{% /capture %}} + diff --git a/content/zh/docs/tasks/administer-cluster/network-policy-provider/kube-router-network-policy.md b/content/zh/docs/tasks/administer-cluster/network-policy-provider/kube-router-network-policy.md new file mode 100644 index 0000000000..901184cb25 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/network-policy-provider/kube-router-network-policy.md @@ -0,0 +1,31 @@ +--- +reviewers: +- murali-reddy +title: 使用 Kube-router 作为 NetworkPolicy +content_template: templates/task +weight: 30 +--- + +{{% capture overview %}} + +本页展示了如何使用 [Kube-router](https://github.com/cloudnativelabs/kube-router) 作为 NetworkPolicy。 +{{% /capture %}} + +{{% capture prerequisites %}} + + +您需要拥有一个正在运行的 Kubernetes 集群。如果您还没有集群,可以使用任意的集群安装器如 Kops,Bootkube,Kubeadm 等创建一个。 +{{% /capture %}} + +{{% capture steps %}} + + +## 安装 Kube-router 插件 +Kube-router 插件自带一个Network Policy 控制器,监视来自于Kubernetes API server 的 NetworkPolicy 和 pods 的变化,根据策略指示配置 iptables 规则和 ipsets 来允许或阻止流量。请根据 [尝试通过集群安装器使用 Kube-router](https://www.kube-router.io/docs/user-guide/#try-kube-router-with-cluster-installers) 指南安装 Kube-router 插件。 +{{% /capture %}} + +{{% capture whatsnext %}} + +在您安装 Kube-router 插件后,可以根据 [声明 Network Policy](/docs/tasks/administer-cluster/declare-network-policy/) 去尝试使用 Kubernetes NetworkPolicy。 +{{% /capture %}} diff --git a/content/zh/docs/tasks/administer-cluster/network-policy-provider/romana-network-policy.md b/content/zh/docs/tasks/administer-cluster/network-policy-provider/romana-network-policy.md new file mode 100644 index 0000000000..5867bfec5c --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/network-policy-provider/romana-network-policy.md @@ -0,0 +1,57 @@ +--- +reviewers: +- chrismarino +title: 使用 Romana 作为 NetworkPolicy +content_template: templates/task +weight: 40 +--- + +{{% capture overview %}} + + +本页展示如何使用 Romana 作为 NetworkPolicy。 + +{{% /capture %}} + +{{% capture prerequisites %}} + + +完成[kubeadm 入门指南](/docs/getting-started-guides/kubeadm/)中的1、2、3步。 + +{{% /capture %}} + +{{% capture steps %}} + +## 使用 kubeadm 安装 Romana + +按照[容器化安装指南](https://github.com/romana/romana/tree/master/containerize)获取 kubeadmin。 + +## 运用网络策略 + +使用以下的一种方式去运用网络策略: + +* [Romana 网络策略](https://github.com/romana/romana/wiki/Romana-policies) + * [Romana 网络策略例子](https://github.com/romana/core/blob/master/doc/policy.md) +* NetworkPolicy API + +{{% /capture %}} + +{{% capture whatsnext %}} + +Romana 安装完成后,您可以按照[声明 Network Policy](/docs/tasks/administer-cluster/declare-network-policy/)去尝试使用 Kubernetes NetworkPolicy。 + +{{% /capture %}} diff --git a/content/zh/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy.md b/content/zh/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy.md new file mode 100644 index 0000000000..26eb7434ba --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy.md @@ -0,0 +1,78 @@ +--- +reviewers: +- bboreham +title: 使用 Weave Net 作为 NetworkPolicy +content_template: templates/task +weight: 50 +--- + +{{% capture overview %}} + + + +本页展示了如何使用使用 Weave Net 作为 NetworkPolicy。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +您需要拥有一个 Kubernetes 集群。按照[kubeadm 入门指南](/docs/getting-started-guides/kubeadm/)来引导一个。 +{{% /capture %}} + +{{% capture steps %}} + +## 安装 Weave Net 插件 + +按照[通过插件集成Kubernetes](https://www.weave.works/docs/net/latest/kube-addon/)指南。 + +Kubernetes 的 Weave Net 插件带有[网络策略控制器](https://www.weave.works/docs/net/latest/kube-addon/#npc),可自动监控 Kubernetes 所有名称空间中的任何 NetworkPolicy 注释。 配置`iptables`规则以允许或阻止策略指示的流量。 + + +## 测试安装 + +验证 weave 是否有效。 + +输入以下命令: + +```shell +kubectl get po -n kube-system -o wide +``` + + +输出类似这样: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +weave-net-1t1qg 2/2 Running 0 9d 192.168.2.10 worknode3 +weave-net-231d7 2/2 Running 1 7d 10.2.0.17 worknodegpu +weave-net-7nmwt 2/2 Running 3 9d 192.168.2.131 masternode +weave-net-pmw8w 2/2 Running 0 9d 192.168.2.216 worknode2 +``` + + +每个 Node 都有一个 weave Pod,所有 Pod 都是`Running`和`2/2 READY`。(`2/2`表示每个Pod都有`weave`和`weave-npc`。) + +{{% /capture %}} + +{{% capture whatsnext %}} + + +安装Weave Net插件后,您可以按照[声明网络策略](/docs/tasks/administration-cluster/declare-network-policy/)来试用 Kubernetes NetworkPolicy。 如果您有任何疑问,请联系我们[#weave-community on Slack 或 Weave User Group](https://github.com/weaveworks/weave#getting-help)。 +{{% /capture %}} + diff --git a/content/cn/docs/tasks/administer-cluster/pod1.yaml b/content/zh/docs/tasks/administer-cluster/pod1.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/pod1.yaml rename to content/zh/docs/tasks/administer-cluster/pod1.yaml diff --git a/content/cn/docs/tasks/administer-cluster/pod2.yaml b/content/zh/docs/tasks/administer-cluster/pod2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/pod2.yaml rename to content/zh/docs/tasks/administer-cluster/pod2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/pod3.yaml b/content/zh/docs/tasks/administer-cluster/pod3.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/pod3.yaml rename to content/zh/docs/tasks/administer-cluster/pod3.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml b/content/zh/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml rename to content/zh/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml b/content/zh/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml rename to content/zh/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-mem-cpu.yaml b/content/zh/docs/tasks/administer-cluster/quota-mem-cpu.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-mem-cpu.yaml rename to content/zh/docs/tasks/administer-cluster/quota-mem-cpu.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml b/content/zh/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml rename to content/zh/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-objects-pvc.yaml b/content/zh/docs/tasks/administer-cluster/quota-objects-pvc.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-objects-pvc.yaml rename to content/zh/docs/tasks/administer-cluster/quota-objects-pvc.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-objects.yaml b/content/zh/docs/tasks/administer-cluster/quota-objects.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-objects.yaml rename to content/zh/docs/tasks/administer-cluster/quota-objects.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-pod-deployment.yaml b/content/zh/docs/tasks/administer-cluster/quota-pod-deployment.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-pod-deployment.yaml rename to content/zh/docs/tasks/administer-cluster/quota-pod-deployment.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-pod-namespace.md b/content/zh/docs/tasks/administer-cluster/quota-pod-namespace.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-pod-namespace.md rename to content/zh/docs/tasks/administer-cluster/quota-pod-namespace.md diff --git a/content/cn/docs/tasks/administer-cluster/quota-pod.yaml b/content/zh/docs/tasks/administer-cluster/quota-pod.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-pod.yaml rename to content/zh/docs/tasks/administer-cluster/quota-pod.yaml diff --git a/content/cn/docs/tasks/administer-cluster/quota-pvc-2.yaml b/content/zh/docs/tasks/administer-cluster/quota-pvc-2.yaml similarity index 100% rename from content/cn/docs/tasks/administer-cluster/quota-pvc-2.yaml rename to content/zh/docs/tasks/administer-cluster/quota-pvc-2.yaml diff --git a/content/cn/docs/tasks/administer-cluster/romana-network-policy.md b/content/zh/docs/tasks/administer-cluster/romana-network-policy.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/romana-network-policy.md rename to content/zh/docs/tasks/administer-cluster/romana-network-policy.md diff --git a/content/cn/docs/tasks/administer-cluster/static-pod.md b/content/zh/docs/tasks/administer-cluster/static-pod.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/static-pod.md rename to content/zh/docs/tasks/administer-cluster/static-pod.md diff --git a/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md b/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md new file mode 100644 index 0000000000..9ca39883f3 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md @@ -0,0 +1,329 @@ +--- +title: 在 Kubernetes 集群中使用 sysctl +reviewers: +- sttts +content_template: templates/task +--- + + + +{{% capture overview %}} +{{< feature-state for_k8s_version="v1.11" state="beta" >}} + + +本文档介绍如何通过 sysctl 接口在 Kubernetes 集群中配置和使用内核参数。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## 获取 Sysctl 的参数列表 + + +在 Linux 中,管理员可以通过 sysctl 接口修改内核运行时的参数。在 `/proc/sys/` 虚拟文件系统下存放许多内核参数。这些参数涉及了多个内核子系统,如: + + +- 内核子系统 (通常前缀为: `kernel.`) +- 网络子系统 (通常前缀为: `net.`) +- 虚拟内存子系统 (通常前缀为: `vm.`) +- MDADM 子系统 (通常前缀为: `dev.`) +- 更多子系统请参见 [内核文档](https://www.kernel.org/doc/Documentation/sysctl/README)。 + + +若要获取完整的参数列表,请执行以下命令 + +```shell +$ sudo sysctl -a +``` + + +## 启用非安全的 Sysctl 参数 + + +sysctl 参数分为 _安全_ 和 _非安全的_。_安全_ sysctl 参数除了需要设置恰当的命名空间外,在同一 node 上的不同 Pod 之间也必须是 _相互隔离的_。这意味着在 Pod 上设置 _安全_ sysctl 参数 + + +- 必须不能影响到节点上的其他 Pod +- 必须不能损害节点的健康 +- 必须不允许使用超出 Pod 的资源限制的 CPU 或内存资源。 + + +至今为止,大多数 _有命名空间的_ sysctl 参数不一定被认为是 _安全_ 的。以下几种 sysctl 参数是 _安全的_: + +- `kernel.shm_rmid_forced`, +- `net.ipv4.ip_local_port_range`, +- `net.ipv4.tcp_syncookies`. + +{{< note >}} + +**注意**: 示例中的 `net.ipv4.tcp_syncookies` 在Linux 内核 4.4 或更低的版本中是无命名空间的。 +{{< /note >}} + + +在未来的 Kubernetes 版本中,若kubelet 支持更好的隔离机制,则上述列表中将会列出更多 _安全的_ sysctl 参数。 + + +所有 _安全的_ sysctl 参数都默认启用。 + + +所有 _非安全的_ sysctl 参数都默认禁用,且必须由集群管理员在每个节点上手动开启。那些设置了不安全 sysctl 参数的 Pod 仍会被调度,但无法正常启动。 + + +参考上述警告,集群管理员只有在一些非常特殊的情况下(如:高可用或实时应用调整),才可以启用特定的 _非安全的_ sysctl 参数。如需启用 _非安全的_ sysctl 参数,请您在每个节点上分别设置 kubelet 命令行参数,例如: + +```shell +$ kubelet --allowed-unsafe-sysctls \ + 'kernel.msg*,net.ipv4.route.min_pmtu' ... +``` + +如果您使用 minikube,可以通过 `extra-config` 参数来配置: + +```shell +$ minikube start --extra-config="kubelet.AllowedUnsafeSysctls=kernel.msg*,net.ipv4.route.min_pmtu"... +``` + +只有 _有命名空间的_ sysctl 参数可以通过该方式启用。 + + +## 设置 Pod 的 Sysctl 参数 + + +目前,在 Linux 内核中,有许多的 sysctl 参数都是 _有命名空间的_ 。 这就意味着可以为节点上的每个 Pod 分别去设置它们的 sysctl 参数。 在 Kubernetes 中,只有那些有命名空间的 sysctl 参数可以通过 Pod 的 securityContext 对其进行配置。 + + +以下列出有命名空间的 sysctl 参数,在未来的 Linux 内核版本中,此列表可能会发生变化。 + +- `kernel.shm*`, +- `kernel.msg*`, +- `kernel.sem`, +- `fs.mqueue.*`, +- `net.*`. + + +没有命名空间的 sysctl 参数称为 _节点级别的_ sysctl 参数。 如果需要对其进行设置,则必须在每个节点的操作系统上手动地去配置它们,或者通过在 DaemonSet 中运行特权模式容器来配置。 + + +可使用 pod 的 securityContext 来配置有命名空间的 sysctl 参数,securityContext 应用于同一个 pod 中的所有容器。 + + +此示例中,使用 Pod SecurityContext 来对一个安全的 sysctl 参数 `kernel.shm_rmid_forced` 以及两个非安全的 sysctl 参数 `net.ipv4.route.min_pmtu`和 `kernel.msgmax` 进行设置。在 Pod 规格中对 _安全的_ 和 _非安全的_ sysctl 参数不做区分。 + +{{< warning >}} + +为了避免破坏操作系统的稳定性,请您在了解变更后果之后再修改 sysctl 参数。 +{{< /warning >}} + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: sysctl-example +spec: + securityContext: + sysctls: + - name: kernel.shm_rmid_forced + value: "0" + - name: net.ipv4.route.min_pmtu + value: "552" + - name: kernel.msgmax + value: "65536" + ... +``` +{{% /capture %}} + +{{% capture discussion %}} + +{{< warning >}} + +**警告**:由于 _非安全的_ sysctl 参数其本身具有不稳定性,在使用 _非安全的_ sysctl 参数时可能会导致一些严重问题,如容器的错误行为、机器资源不足或节点被完全破坏,用户需自行承担风险。 +{{< /warning >}} + + +最佳实践方案是将集群中具有特殊 sysctl 设置的节点视为 _受感染的_,并且只调度需要使用到特殊 sysctl 设置的 Pod 到这些节点上。 建议使用 Kubernetes 的 [ _taints 和 toleration_ 特性](/docs/reference/generated/kubectl/kubectl-commands/#taint) 来实现它。 + + +设置了 _非安全的_ sysctl 参数的 pod,在禁用了以下两种 _非安全的_ sysctl 参数配置的节点上启动都会失败。与 _节点级别的_ sysctl 一样,建议开启 +[_taints 和 toleration_ 特性](/docs/reference/generated/kubectl/kubectl-commands/#taint) 或 +[taints on nodes](/docs/concepts/configuration/taint-and-toleration/) +以便将 Pod 调度到正确的节点之上。 + +## PodSecurityPolicy + + +您可以通过在 PodSecurityPolicy 的 `forbiddenSysctls` 和/或 `allowedUnsafeSysctls` 字段中,指定 sysctl 或填写 sysctl 匹配模式来进一步为 Pod 设置 sysctl 参数。sysctl 参数匹配模式以 `*` 字符结尾,如 `kernel.*`。 单独的 `*` 字符匹配所有 sysctl 参数。 + + +所有 _安全的_ sysctl 参数都默认启用。 + + +`forbiddenSysctls` 和 `allowedUnsafeSysctls` 的值都是字符串列表类型,可以添加 sysctl 参数名称,也可以添加 sysctl 参数匹配模式(以`*`结尾)。 只填写 `*` 则匹配所有的 sysctl 参数。 + + +`forbiddenSysctls` 字段用于禁用特定的 sysctl 参数。 您可以在列表中禁用安全和非安全的 sysctl 参数的组合。 要禁用所有的 sysctl 参数,请设置为 `*`。 + + +如果要在 `allowedUnsafeSysctls` 字段中指定一个非安全的 sysctl 参数,并且它在`forbiddenSysctls` 字段中未被禁用,则可以在 Pod 中通过 PodSecurityPolicy 启用该 sysctl 参数。 若要在 PodSecurityPolicy 中开启所有非安全的 sysctl 参数,请设 `allowedUnsafeSysctls` 字段值为 `*`。 + + +`allowedUnsafeSysctls` 与 `forbiddenSysctls` 两字段的配置不能重叠,否则这就意味着存在某个 sysctl 参数既被启用又被禁用。 + +{{< warning >}} + +**警告**:如果您通过 PodSecurityPolicy 中的 `allowedUnsafeSysctls` 字段将非安全的 sysctl 参数列入白名单,但该 sysctl 参数未通过 kubelet 命令行参数 `--allowed-unsafe-sysctls` 在节点上将其列入白名单,则设置了这个 sysctl 参数的 Pod 将会启动失败。 +{{< /warning >}} + + +以下示例设置启用了以 `kernel.msg` 为前缀的非安全的 sysctl 参数,以及禁用了 sysctl 参数 `kernel.shm_rmid_forced`。 + +```yaml +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: sysctl-psp +spec: + allowedUnsafeSysctls: + - kernel.msg* + forbiddenSysctls: + - kernel.shm_rmid_forced + ... +``` + +{{% /capture %}} diff --git a/content/cn/docs/tasks/administer-cluster/weave-network-policy.md b/content/zh/docs/tasks/administer-cluster/weave-network-policy.md similarity index 100% rename from content/cn/docs/tasks/administer-cluster/weave-network-policy.md rename to content/zh/docs/tasks/administer-cluster/weave-network-policy.md diff --git a/content/zh/docs/tasks/configure-pod-container/assign-pods-nodes.md b/content/zh/docs/tasks/configure-pod-container/assign-pods-nodes.md new file mode 100644 index 0000000000..ec39525304 --- /dev/null +++ b/content/zh/docs/tasks/configure-pod-container/assign-pods-nodes.md @@ -0,0 +1,135 @@ +--- +title: 将 Pod 分配给节点 +content_template: templates/task +weight: 120 +--- + + +{{% capture overview %}} + +此页面显示如何将 Kubernetes Pod 分配给 Kubernetes 集群中的特定节点。 +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## 给节点添加标签 + + +1. 列出集群中的节点 + + kubectl get nodes + + + 输出类似如下: + + NAME STATUS AGE VERSION + worker0 Ready 1d v1.6.0+fff5156 + worker1 Ready 1d v1.6.0+fff5156 + worker2 Ready 1d v1.6.0+fff5156 + + +1. 选择其中一个节点,为它添加标签: + + kubectl label nodes disktype=ssd + + + `` 是你选择的节点的名称。 + + +1. 验证你选择的节点是否有 `disktype=ssd` 标签: + + kubectl get nodes --show-labels + + + + 输出类似如下: + + NAME STATUS AGE VERSION LABELS + worker0 Ready 1d v1.6.0+fff5156 ...,disktype=ssd,kubernetes.io/hostname=worker0 + worker1 Ready 1d v1.6.0+fff5156 ...,kubernetes.io/hostname=worker1 + worker2 Ready 1d v1.6.0+fff5156 ...,kubernetes.io/hostname=worker2 + + + 在前面的输出中,你可以看到 `worker0` 节点有 `disktype=ssd` 标签。 + + +## 创建一个调度到你选择的节点的 pod + + +该 pod 配置文件描述了一个拥有节点选择器 `disktype: ssd` 的 pod。这表明该 pod 将被调度到 +有 `disktype=ssd` 标签的节点。 + +{{< codenew file="pods/pod-nginx.yaml" >}} + + +1. 使用该配置文件去创建一个 pod,该 pod 将被调度到你选择的节点上: + + kubectl create -f https://k8s.io/examples/pods/pod-nginx.yaml + + +1. 验证 pod 是不是运行在你选择的节点上: + + kubectl get pods --output=wide + + + 输出类似如下: + + NAME READY STATUS RESTARTS AGE IP NODE + nginx 1/1 Running 0 13s 10.200.0.4 worker0 + +{{% /capture %}} + +{{% capture whatsnext %}} + +了解更多关于 +[标签和选择器](/docs/concepts/overview/working-with-objects/labels/)。 +{{% /capture %}} diff --git a/content/cn/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml b/content/zh/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml rename to content/zh/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/cpu-request-limit.yaml b/content/zh/docs/tasks/configure-pod-container/cpu-request-limit.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/cpu-request-limit.yaml rename to content/zh/docs/tasks/configure-pod-container/cpu-request-limit.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/exec-liveness.yaml b/content/zh/docs/tasks/configure-pod-container/exec-liveness.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/exec-liveness.yaml rename to content/zh/docs/tasks/configure-pod-container/exec-liveness.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/http-liveness.yaml b/content/zh/docs/tasks/configure-pod-container/http-liveness.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/http-liveness.yaml rename to content/zh/docs/tasks/configure-pod-container/http-liveness.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/init-containers.yaml b/content/zh/docs/tasks/configure-pod-container/init-containers.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/init-containers.yaml rename to content/zh/docs/tasks/configure-pod-container/init-containers.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/lifecycle-events.yaml b/content/zh/docs/tasks/configure-pod-container/lifecycle-events.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/lifecycle-events.yaml rename to content/zh/docs/tasks/configure-pod-container/lifecycle-events.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/mem-limit-range.yaml b/content/zh/docs/tasks/configure-pod-container/mem-limit-range.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/mem-limit-range.yaml rename to content/zh/docs/tasks/configure-pod-container/mem-limit-range.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/memory-request-limit-2.yaml b/content/zh/docs/tasks/configure-pod-container/memory-request-limit-2.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/memory-request-limit-2.yaml rename to content/zh/docs/tasks/configure-pod-container/memory-request-limit-2.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/memory-request-limit-3.yaml b/content/zh/docs/tasks/configure-pod-container/memory-request-limit-3.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/memory-request-limit-3.yaml rename to content/zh/docs/tasks/configure-pod-container/memory-request-limit-3.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/memory-request-limit.yaml b/content/zh/docs/tasks/configure-pod-container/memory-request-limit.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/memory-request-limit.yaml rename to content/zh/docs/tasks/configure-pod-container/memory-request-limit.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/oir-pod-2.yaml b/content/zh/docs/tasks/configure-pod-container/oir-pod-2.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/oir-pod-2.yaml rename to content/zh/docs/tasks/configure-pod-container/oir-pod-2.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/oir-pod.yaml b/content/zh/docs/tasks/configure-pod-container/oir-pod.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/oir-pod.yaml rename to content/zh/docs/tasks/configure-pod-container/oir-pod.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md b/content/zh/docs/tasks/configure-pod-container/opaque-integer-resource.md similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md rename to content/zh/docs/tasks/configure-pod-container/opaque-integer-resource.md diff --git a/content/cn/docs/tasks/configure-pod-container/pod-redis.yaml b/content/zh/docs/tasks/configure-pod-container/pod-redis.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/pod-redis.yaml rename to content/zh/docs/tasks/configure-pod-container/pod-redis.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/pod.yaml b/content/zh/docs/tasks/configure-pod-container/pod.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/pod.yaml rename to content/zh/docs/tasks/configure-pod-container/pod.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/private-reg-pod.yaml b/content/zh/docs/tasks/configure-pod-container/private-reg-pod.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/private-reg-pod.yaml rename to content/zh/docs/tasks/configure-pod-container/private-reg-pod.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/projected-volume.yaml b/content/zh/docs/tasks/configure-pod-container/projected-volume.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/projected-volume.yaml rename to content/zh/docs/tasks/configure-pod-container/projected-volume.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/qos-pod-2.yaml b/content/zh/docs/tasks/configure-pod-container/qos-pod-2.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/qos-pod-2.yaml rename to content/zh/docs/tasks/configure-pod-container/qos-pod-2.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/qos-pod-3.yaml b/content/zh/docs/tasks/configure-pod-container/qos-pod-3.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/qos-pod-3.yaml rename to content/zh/docs/tasks/configure-pod-container/qos-pod-3.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/qos-pod-4.yaml b/content/zh/docs/tasks/configure-pod-container/qos-pod-4.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/qos-pod-4.yaml rename to content/zh/docs/tasks/configure-pod-container/qos-pod-4.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/qos-pod.yaml b/content/zh/docs/tasks/configure-pod-container/qos-pod.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/qos-pod.yaml rename to content/zh/docs/tasks/configure-pod-container/qos-pod.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/rq-compute-resources.yaml b/content/zh/docs/tasks/configure-pod-container/rq-compute-resources.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/rq-compute-resources.yaml rename to content/zh/docs/tasks/configure-pod-container/rq-compute-resources.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/security-context-2.yaml b/content/zh/docs/tasks/configure-pod-container/security-context-2.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/security-context-2.yaml rename to content/zh/docs/tasks/configure-pod-container/security-context-2.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/security-context-3.yaml b/content/zh/docs/tasks/configure-pod-container/security-context-3.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/security-context-3.yaml rename to content/zh/docs/tasks/configure-pod-container/security-context-3.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/security-context-4.yaml b/content/zh/docs/tasks/configure-pod-container/security-context-4.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/security-context-4.yaml rename to content/zh/docs/tasks/configure-pod-container/security-context-4.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/security-context.yaml b/content/zh/docs/tasks/configure-pod-container/security-context.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/security-context.yaml rename to content/zh/docs/tasks/configure-pod-container/security-context.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/task-pv-claim.yaml b/content/zh/docs/tasks/configure-pod-container/task-pv-claim.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/task-pv-claim.yaml rename to content/zh/docs/tasks/configure-pod-container/task-pv-claim.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/task-pv-pod.yaml b/content/zh/docs/tasks/configure-pod-container/task-pv-pod.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/task-pv-pod.yaml rename to content/zh/docs/tasks/configure-pod-container/task-pv-pod.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/task-pv-volume.yaml b/content/zh/docs/tasks/configure-pod-container/task-pv-volume.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/task-pv-volume.yaml rename to content/zh/docs/tasks/configure-pod-container/task-pv-volume.yaml diff --git a/content/cn/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml b/content/zh/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml similarity index 100% rename from content/cn/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml rename to content/zh/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml diff --git a/content/zh/docs/tasks/debug-application-cluster/audit.md b/content/zh/docs/tasks/debug-application-cluster/audit.md new file mode 100644 index 0000000000..fe551d011d --- /dev/null +++ b/content/zh/docs/tasks/debug-application-cluster/audit.md @@ -0,0 +1,612 @@ +--- +reviewers: +- soltysh +- sttts +- ericchiang +content_template: templates/concept +title: Auditing +--- + +{{% capture overview %}} + +{{< feature-state state="beta" >}} + + +Kubernetes 审计功能提供了与安全相关的按时间顺序排列的记录集,记录单个用户、管理员或系统其他组件影响系统的活动顺序。 +它能帮助集群管理员处理以下问题: + + + - 发生了什么? + - 什么时候发生的? + - 谁触发的? + - 活动发生在哪个(些)对象上? + - 在哪观察到的? + - 它从哪触发的? + - 活动的后续处理行为是什么? + +{{% /capture %}} + +{{< toc >}} + +{{% capture body %}} + + +[Kube-apiserver][kube-apiserver] 执行审计。每个执行阶段的每个请求都会生成一个事件,然后根据特定策略对事件进行预处理并写入后端。 +您可以在 [设计方案][auditing-proposal] 中找到更多详细信息。 +该策略确定记录的内容并且在后端存储记录。当前的后端支持日志文件和 webhook。 + + + +每个请求都可以用相关的 "stage" 记录。已知的 stage 有: + +- `RequestReceived` - 事件的 stage 将在审计处理器接收到请求后,并且在委托给其余处理器之前生成。 + +- `ResponseStarted` - 在响应消息的头部发送后,但是响应消息体发送前。这个 stage 仅为长时间运行的请求生成(例如 watch)。 + +- `ResponseComplete` - 当响应消息体完成并且没有更多数据需要传输的时候。 +- `Panic` - 当 panic 发生时生成。 + +{{< note >}} + +**注意** 审计日志记录功能会增加 API server 的内存消耗,因为需要为每个请求存储审计所需的某些上下文。 +此外,内存消耗取决于审计日志记录的配置。 +{{< /note >}} + + +## 审计策略 + +审计政策定义了关于应记录哪些事件以及应包含哪些数据的规则。审计策略对象结构在 [`audit.k8s.io` API 组][auditing-api] 中定义。 +处理事件时,将按顺序与规则列表进行比较。第一个匹配规则设置事件的 [审计级别][auditing-level]。已知的审计级别有: + + +- `None` - 符合这条规则的日志将不会记录。 +- `Metadata` - 记录请求的 metadata(请求的用户、timestamp、resource、verb 等等),但是不记录请求或者响应的消息体。 +- `Request` - 记录事件的 metadata 和请求的消息体,但是不记录响应的消息体。这不适用于非资源类型的请求。 +- `RequestResponse` - 记录事件的 metadata,请求和响应的消息体。这不适用于非资源类型的请求。 + + +您可以使用 `--audit-policy-file` 标志将包含策略的文件传递给 [kube-apiserver][kube-apiserver]。如果不设置该标志,则不记录事件。 +注意 `rules` 字段 __必须__ 在审计策略文件中提供。没有(0)规则的策略将被视为非法配置。 + +以下是一个审计策略文件的示例: + +{{< codenew file="audit/audit-policy.yaml" >}} + + +您可以使用最低限度的审计策略文件在 `Metadata` 级别记录所有请求: + +```yaml +# Log all requests at the Metadata level. +apiVersion: audit.k8s.io/v1beta1 +kind: Policy +rules: +- level: Metadata +``` + + +管理员构建自己的审计配置文件时,应使用 [GCE 使用的审计配置文件][gce-audit-profile] 作为参考。 + + +## 审计后端 + +审计后端实现将审计事件导出到外部存储。 +[Kube-apiserver][kube-apiserver] 提供两个后端: + +- Log 后端,将事件写入到磁盘 +- Webhook 后端,将事件发送到外部 API + +在这两种情况下,审计事件结构均由 `audit.k8s.io` API 组中的 API 定义。当前版本的 API 是 [`v1beta1`][auditing-api]。 + +{{< note >}} + +**注意:** 在 patch 请求的情况下,请求的消息体需要是一个 JSON 串指定 patch 操作,而不是一个完整的 Kubernetes API 对象 JSON 串。 +例如,以下的示例是一个合法的 patch 请求消息体,该请求对应 `/apis/batch/v1/namespaces/some-namespace/jobs/some-job-name`。 + +```json +[ + { + "op": "replace", + "path": "/spec/parallelism", + "value": 0 + }, + { + "op": "remove", + "path": "/spec/template/spec/containers/0/terminationMessagePolicy" + } +] +``` +{{< /note >}} + + +### Log 后端 + +Log 后端将审计事件写入 JSON 格式的文件。您可以使用以下 [kube-apiserver][kube-apiserver] 标志配置 Log 审计后端: + + +- `--audit-log-path` 指定用来写入审计事件的日志文件路径。不指定此标志会禁用日志后端。`-` 意味着标准化 +- `--audit-log-maxage` 定义了保留旧审计日志文件的最大天数 +- `--audit-log-maxbackup` 定义了要保留的审计日志文件的最大数量 +- `--audit-log-maxsize` 定义审计日志文件的最大大小(兆字节) + + +### Webhook 后端 + +Webhook 后端将审计事件发送到远程 API,该远程 API 应该暴露与 [kube-apiserver][kube-apiserver] 相同的API。 +您可以使用如下 kube-apiserver 标志来配置 webhook 审计后端: + + +- `--audit-webhook-config-file` webhook 配置文件的路径。Webhook 配置文件实际上是一个 [kubeconfig][kubeconfig]。 +- `--audit-webhook-initial-backoff` 指定在第一次失败后重发请求等待的时间。随后的请求将以指数退避重试。 + +webhook 配置文件使用 kubeconfig 格式指定服务的远程地址和用于连接它的凭据。 + +### Batching + + + +log 和 webhook 后端都支持 batch。以 webhook 为例,以下是可用参数列表。要获取 log 后端的同样参数,请在参数名称中将 `webhook` 替换为 `log`。 +默认情况下,在 `webhook` 中启用 batch,在 `log` 中禁用 batch。同样,默认情况下,在 `webhook` 中启用限制,在 `log` 中禁用限制。 + +- `--audit-webhook-mode` 定义缓存策略,可选值如下: + - `batch` - 以批处理缓存事件和异步的过程。这是默认值。 + - `blocking` - 阻止 API server 处理每个单独事件的响应。 + + +以下参数仅用于 `batch` 模式。 + +- `--audit-webhook-batch-buffer-size` 定义 batch 之前要缓存的事件数。 + 如果传入事件的速率溢出缓存区,则会丢弃事件。 +- `--audit-webhook-batch-max-size` 定义一个 batch 中的最大事件数。 +- `--audit-webhook-batch-max-wait` 无条件 batch 队列中的事件前等待的最大事件。 +- `--audit-webhook-batch-throttle-qps` 每秒生成的最大 batch 平均值。 +- `--audit-webhook-batch-throttle-burst` 在达到允许的 QPS 前,同一时刻允许存在的最大 batch 生成数。 + + +#### 参数调整 + +需要设置参数以适应 apiserver 上的负载。 + + +例如,如果 kube-apiserver 每秒收到 100 个请求,并且每个请求仅在 `ResponseStarted` 和 `ResponseComplete` 阶段进行审计,则应该考虑每秒生成约 200 个审计事件。 +假设批处理中最多有 100 个事件,则应将限制级别设置为至少 2 个 QPS。 +假设后端最多需要 5 秒钟来写入事件,您应该设置缓冲区大小以容纳最多 5 秒的事件,即 10 个 batch,即 1000 个事件。 + + +但是,在大多数情况下,默认参数应该足够了,您不必手动设置它们。您可以查看 kube-apiserver 公开的以下 Prometheus 指标,并在日志中监控审计子系统的状态。 + +- `apiserver_audit_event_total` 包含所有暴露的审计事件数量的指标。 +- `apiserver_audit_error_total` 在暴露时由于发生错误而被丢弃的事件的数量。 + + +## 多集群配置 + +如果您通过 [aggregation layer][kube-aggregator] 对 Kubernetes API 进行扩展,那么您也可以为聚合的 apiserver 设置审计日志。 +想要这么做,您需要以上述的格式给聚合的 apiserver 配置参数,并且配置日志管道以采用审计日志。不同的 apiserver 可以配置不同的审计配置和策略。 + + +## 日志选择器示例 + +### 使用 fluentd 从日志文件中选择并且分发审计日志 + +[Fluentd][fluentd] 是一个开源的数据采集器,可以从统一的日志层中采集。 +在以下示例中,我们将使用 fluentd 来按照命名空间划分审计事件。 + +1. 在 kube-apiserver node 节点上安装 [fluentd, fluent-plugin-forest and fluent-plugin-rewrite-tag-filter][fluentd_install_doc] +1. 为 fluentd 创建一个配置文件 + + ```none + $ cat < /etc/fluentd/config + # fluentd conf runs in the same host with kube-apiserver + + @type tail + # audit log path of kube-apiserver + path /var/log/audit + pos_file /var/log/audit.pos + format json + time_key time + time_format %Y-%m-%dT%H:%M:%S.%N%z + tag audit + + + + #https://github.com/fluent/fluent-plugin-rewrite-tag-filter/issues/13 + type record_transformer + enable_ruby + + namespace ${record["objectRef"].nil? ? "none":(record["objectRef"]["namespace"].nil? ? "none":record["objectRef"]["namespace"])} + + + + + # route audit according to namespace element in context + @type rewrite_tag_filter + rewriterule1 namespace ^(.+) ${tag}.$1 + + + + @type record_transformer + remove_keys namespace + + + + @type forest + subtype file + remove_prefix audit + + + ``` + + +1. 启动 fluentd + + ```shell + $ fluentd -c /etc/fluentd/config -vv + ``` + + +1. 给 kube-apiserver 配置以下参数并启动: + + ```shell + --audit-policy-file=/etc/kubernetes/audit-policy.yaml --audit-log-path=/var/log/kube-audit --audit-log-format=json + ``` + + +1. 在 `/var/log/audit-*.log` 文件中检查不同命名空间的审计事件 + + +### 使用 logstash 采集并分发 webhook 后端的审计事件 + +[Logstash][logstash] 是一个开源的、服务器端的数据处理工具。在下面的示例中,我们将使用 logstash 采集 webhook 后端的审计事件,并且将来自不同用户的事件存入不同的文件。 + +1. 安装 [logstash][logstash_install_doc] +1. 为 logstash 创建配置文件 + + ```none + $ cat < /etc/logstash/config + input{ + http{ + #TODO, figure out a way to use kubeconfig file to authenticate to logstash + #https://www.elastic.co/guide/en/logstash/current/plugins-inputs-http.html#plugins-inputs-http-ssl + port=>8888 + } + } + filter{ + split{ + # Webhook audit backend sends several events together with EventList + # split each event here. + field=>[items] + # We only need event subelement, remove others. + remove_field=>[headers, metadata, apiVersion, "@timestamp", kind, "@version", host] + } + mutate{ + rename => {items=>event} + } + } + output{ + file{ + # Audit events from different users will be saved into different files. + path=>"/var/log/kube-audit-%{[event][user][username]}/audit" + } + } + ``` + + +1. 启动 logstash + + ```shell + $ bin/logstash -f /etc/logstash/config --path.settings /etc/logstash/ + ``` + + +1. 为 kube-apiserver webhook 审计后端创建一个 [kubeconfig 文件](/docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig/) + + ```none + $ cat < /etc/kubernetes/audit-webhook-kubeconfig + apiVersion: v1 + clusters: + - cluster: + server: http://:8888 + name: logstash + contexts: + - context: + cluster: logstash + user: "" + name: default-context + current-context: default-context + kind: Config + preferences: {} + users: [] + EOF + ``` + + +1. 为 kube-apiserver 配置以下参数并启动: + + ```shell + --audit-policy-file=/etc/kubernetes/audit-policy.yaml --audit-webhook-config-file=/etc/kubernetes/audit-webhook-kubeconfig + ``` + + +1. 在 logstash node 节点的 `/var/log/kube-audit-*/audit` 目录中检查审计事件 + +注意到,除了文件输出插件外,logstash 还有其它多种输出可以让用户路由不同的数据。例如,用户可以将审计事件发送给支持全文搜索和分析的 elasticsearch 插件。 + + +## 传统的审计 + +__注意:__ 传统审计已被弃用,自 1.8 版本以后默认禁用,并且将会在 1.12 版本中彻底移除。 +如果想要回退到传统的审计功能,请使用 [kube-apiserver][kube-apiserver] 中 feature gate 的 `AdvancedAuditing` 功能来禁用高级审核功能: + +``` +--feature-gates=AdvancedAuditing=false +``` + + +在传统格式中,每个审计文件条目包含两行: + +1. 请求行包含唯一 ID 以匹配响应和请求元数据,例如源 IP、请求用户、模拟信息和请求的资源等。 +2. 响应行包含与请求行和响应代码相匹配的唯一 ID。 + +``` +2017-03-21T03:57:09.106841886-04:00 AUDIT: id="c939d2a7-1c37-4ef1-b2f7-4ba9b1e43b53" ip="127.0.0.1" method="GET" user="admin" groups="\"system:masters\",\"system:authenticated\"" as="" asgroups="" namespace="default" uri="/api/v1/namespaces/default/pods" +2017-03-21T03:57:09.108403639-04:00 AUDIT: id="c939d2a7-1c37-4ef1-b2f7-4ba9b1e43b53" response="200" +``` + + +### 配置 + +[Kube-apiserver][kube-apiserver] 提供以下选项,负责配置审核日志的位置和处理方式: + + +- `audit-log-path` - 使审计日志指向请求被记录到的文件,'-' 表示标准输出。 +- `audit-log-maxage` - 根据文件名中编码的时间戳指定保留旧审计日志文件的最大天数。 +- `audit-log-maxbackup` - 指定要保留的旧审计日志文件的最大数量。 +- `audit-log-maxsize` - 指定审核日志文件的最大大小(兆字节)。默认为100MB。 + + +如果审核日志文件已经存在,则 Kubernetes 会将新的审核日志附加到该文件。 +否则,Kubernetes 会在您在 `audit-log-path` 中指定的位置创建一个审计日志文件。 +如果审计日志文件超过了您在 `audit-log-maxsize` 中指定的大小,则 Kubernetes 将通过在文件名(在文件扩展名之前)附加当前时间戳并重新创建一个新的审计日志文件来重命名当前日志文件。 +Kubernetes 可能会在创建新的日志文件时删除旧的日志文件; 您可以通过指定 `audit-log-maxbackup` 和 `audit-log-maxage` 选项来配置保留多少文件以及它们的保留时间。 + +[kube-apiserver]: /docs/admin/kube-apiserver +[auditing-proposal]: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/auditing.md +[auditing-api]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1beta1/types.go +[gce-audit-profile]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/cluster/gce/gci/configure-helper.sh#L735 +[kubeconfig]: https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/ +[fluentd]: http://www.fluentd.org/ +[fluentd_install_doc]: http://docs.fluentd.org/v0.12/articles/quickstart#step1-installing-fluentd +[logstash]: https://www.elastic.co/products/logstash +[logstash_install_doc]: https://www.elastic.co/guide/en/logstash/current/installing-logstash.html +[kube-aggregator]: /docs/concepts/api-extension/apiserver-aggregation + +{{% /capture %}} diff --git a/content/cn/docs/tasks/debug-application-cluster/debug-application.md b/content/zh/docs/tasks/debug-application-cluster/debug-application.md similarity index 100% rename from content/cn/docs/tasks/debug-application-cluster/debug-application.md rename to content/zh/docs/tasks/debug-application-cluster/debug-application.md diff --git a/content/cn/docs/tasks/debug-application-cluster/debug-cluster.md b/content/zh/docs/tasks/debug-application-cluster/debug-cluster.md similarity index 100% rename from content/cn/docs/tasks/debug-application-cluster/debug-cluster.md rename to content/zh/docs/tasks/debug-application-cluster/debug-cluster.md diff --git a/content/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md similarity index 100% rename from content/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md rename to content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md diff --git a/content/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md b/content/zh/docs/tasks/debug-application-cluster/debug-stateful-set.md similarity index 100% rename from content/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md rename to content/zh/docs/tasks/debug-application-cluster/debug-stateful-set.md diff --git a/content/cn/docs/tasks/inject-data-application/commands.yaml b/content/zh/docs/tasks/inject-data-application/commands.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/commands.yaml rename to content/zh/docs/tasks/inject-data-application/commands.yaml diff --git a/content/cn/docs/tasks/inject-data-application/dapi-envars-container.yaml b/content/zh/docs/tasks/inject-data-application/dapi-envars-container.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/dapi-envars-container.yaml rename to content/zh/docs/tasks/inject-data-application/dapi-envars-container.yaml diff --git a/content/cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml b/content/zh/docs/tasks/inject-data-application/dapi-envars-pod.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml rename to content/zh/docs/tasks/inject-data-application/dapi-envars-pod.yaml diff --git a/content/cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml b/content/zh/docs/tasks/inject-data-application/dapi-volume-resources.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml rename to content/zh/docs/tasks/inject-data-application/dapi-volume-resources.yaml diff --git a/content/cn/docs/tasks/inject-data-application/dapi-volume.yaml b/content/zh/docs/tasks/inject-data-application/dapi-volume.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/dapi-volume.yaml rename to content/zh/docs/tasks/inject-data-application/dapi-volume.yaml diff --git a/content/cn/docs/tasks/inject-data-application/define-command-argument-container.md b/content/zh/docs/tasks/inject-data-application/define-command-argument-container.md similarity index 100% rename from content/cn/docs/tasks/inject-data-application/define-command-argument-container.md rename to content/zh/docs/tasks/inject-data-application/define-command-argument-container.md diff --git a/content/cn/docs/tasks/inject-data-application/define-environment-variable-container.md b/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md similarity index 96% rename from content/cn/docs/tasks/inject-data-application/define-environment-variable-container.md rename to content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md index 3b5a721ebc..e422fc750d 100644 --- a/content/cn/docs/tasks/inject-data-application/define-environment-variable-container.md +++ b/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md @@ -63,7 +63,7 @@ content_template: templates/task {{% capture whatsnext %}} -* 有关环境变量的更多信息,请参阅[这里](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/)。 +* 有关环境变量的更多信息,请参阅[这里](/docs/tasks/configure-pod-container/environment-variable-expose-pod-information/)。 * 有关如何通过环境变量来使用Secret,请参阅[这里](/docs/user-guide/secrets/#using-secrets-as-environment-variables)。 * 关于[EnvVarSource](/docs/api-reference/{{< param "version" >}}/#envvarsource-v1-core)资源的信息。 diff --git a/content/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md b/content/zh/docs/tasks/inject-data-application/distribute-credentials-secure.md similarity index 100% rename from content/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md rename to content/zh/docs/tasks/inject-data-application/distribute-credentials-secure.md diff --git a/content/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md similarity index 98% rename from content/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md rename to content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md index dd9ee032a9..a230f57afd 100644 --- a/content/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md +++ b/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md @@ -22,7 +22,7 @@ content_template: templates/task 有两种方式可以将Pod和Container字段呈现给运行中的容器: -* [环境变量](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/) +* [环境变量](/docs/tasks/configure-pod-container/environment-variable-expose-pod-information/) * DownwardAPIVolumeFile 这两种呈现Pod和Container字段的方式都称为*Downward API*。 diff --git a/content/cn/docs/tasks/inject-data-application/envars.yaml b/content/zh/docs/tasks/inject-data-application/envars.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/envars.yaml rename to content/zh/docs/tasks/inject-data-application/envars.yaml diff --git a/content/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md b/content/zh/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md similarity index 100% rename from content/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md rename to content/zh/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-allow-db.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-allow-db.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-configmap.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-configmap.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-configmap.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-configmap.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-merged.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-merged.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-merged.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-merged.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-multi-merged.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-multi-merged.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-pod.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-pod.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-pod.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-pod.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-preset.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-preset.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-preset.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-preset.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-proxy.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-proxy.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-proxy.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-proxy.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml b/content/zh/docs/tasks/inject-data-application/podpreset-replicaset.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml rename to content/zh/docs/tasks/inject-data-application/podpreset-replicaset.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset.md b/content/zh/docs/tasks/inject-data-application/podpreset.md similarity index 100% rename from content/cn/docs/tasks/inject-data-application/podpreset.md rename to content/zh/docs/tasks/inject-data-application/podpreset.md diff --git a/content/cn/docs/tasks/inject-data-application/secret-envars-pod.yaml b/content/zh/docs/tasks/inject-data-application/secret-envars-pod.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/secret-envars-pod.yaml rename to content/zh/docs/tasks/inject-data-application/secret-envars-pod.yaml diff --git a/content/cn/docs/tasks/inject-data-application/secret-pod.yaml b/content/zh/docs/tasks/inject-data-application/secret-pod.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/secret-pod.yaml rename to content/zh/docs/tasks/inject-data-application/secret-pod.yaml diff --git a/content/cn/docs/tasks/inject-data-application/secret.yaml b/content/zh/docs/tasks/inject-data-application/secret.yaml similarity index 100% rename from content/cn/docs/tasks/inject-data-application/secret.yaml rename to content/zh/docs/tasks/inject-data-application/secret.yaml diff --git a/content/zh/docs/tasks/job/fine-parallel-processing-work-queue.md b/content/zh/docs/tasks/job/fine-parallel-processing-work-queue.md new file mode 100755 index 0000000000..4d4d3432dc --- /dev/null +++ b/content/zh/docs/tasks/job/fine-parallel-processing-work-queue.md @@ -0,0 +1,380 @@ +--- +cn-approvers: +- linyouchong +title: 使用工作队列进行精细的并行处理 +content_template: templates/task +weight: 40 +--- + + +{{% capture overview %}} + + +在这个例子中,我们会运行一个Kubernetes Job,其中的 Pod 会运行多个并行工作进程。 + + +在这个例子中,当每个pod被创建时,它会从一个任务队列中获取一个工作单元,处理它,然后重复,直到到达队列的尾部。 + + + +下面是这个示例的步骤概述 + + +1. **启动存储服务用于保存工作队列。** 在这个例子中,我们使用 Redis 来存储工作项。在上一个例子中,我们使用了 RabbitMQ。在这个例子中,由于 AMQP 不能为客户端提供一个良好的方法来检测一个有限长度的工作队列是否为空,我们使用了 Redis 和一个自定义的工作队列客户端库。在实践中,您可能会设置一个类似于 Redis 的存储库,并将其同时用于多项任务或其他事务的工作队列。 + +1. **创建一个队列,然后向其中填充消息。** 每个消息表示一个将要被处理的工作任务。在这个例子中,消息只是一个我们将用于进行长度计算的整数。 + +1. **启动一个 Job 对队列中的任务进行处理**。这个 Job 启动了若干个 Pod 。每个 Pod 从消息队列中取出一个工作任务,处理它,然后重复,直到到达队列的尾部。 + +{{% /capture %}} + +{{< toc >}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +熟秋基础知识,非并行方式运行 [Job](/docs/concepts/jobs/run-to-completion-finite-workloads/)。 + +{{% /capture %}} + +{{% capture steps %}} + + +## 启动 Redis + + +对于这个例子,为了简单起见,我们将启动一个单实例的 Redis。 +了解如何部署一个可伸缩、高可用的 Redis 例子,请查看 [Redis 样例](https://github.com/kubernetes/examples/tree/master/guestbook) + + +如果您在使用本文档库的源代码目录,您可以进入如下目录,然后启动一个临时的 Pod 用于运行 Redis 和 一个临时的 service 以便我们能够找到这个 Pod + +```shell +$ cd content/en/examples/application/job/redis +$ kubectl create -f ./redis-pod.yaml +pod/redis-master created +$ kubectl create -f ./redis-service.yaml +service/redis created +``` + + +如果您没有使用本文档库的源代码目录,您可以直接下载如下文件: + +- [`redis-pod.yaml`](/examples/application/job/redis/redis-pod.yaml) +- [`redis-service.yaml`](/examples/application/job/redis/redis-service.yaml) +- [`Dockerfile`](/examples/application/job/redis/Dockerfile) +- [`job.yaml`](/examples/application/job/redis/job.yaml) +- [`rediswq.py`](/examples/application/job/redis/rediswq.py) +- [`worker.py`](/examples/application/job/redis/worker.py) + + +## 使用任务填充队列 + + +现在,让我们往队列里添加一些“任务”。在这个例子中,我们的任务只是一些将被打印出来的字符串。 + + +启动一个临时的可交互的 pod 用于运行 Redis 命令行界面。 + +```shell +$ kubectl run -i --tty temp --image redis --command "/bin/sh" +Waiting for pod default/redis2-c7h78 to be running, status is Pending, pod ready: false +Hit enter for command prompt +``` + + +现在按回车键,启动 redis 命令行界面,然后创建一个存在若干个工作项的列表。 + +``` +# redis-cli -h redis +redis:6379> rpush job2 "apple" +(integer) 1 +redis:6379> rpush job2 "banana" +(integer) 2 +redis:6379> rpush job2 "cherry" +(integer) 3 +redis:6379> rpush job2 "date" +(integer) 4 +redis:6379> rpush job2 "fig" +(integer) 5 +redis:6379> rpush job2 "grape" +(integer) 6 +redis:6379> rpush job2 "lemon" +(integer) 7 +redis:6379> rpush job2 "melon" +(integer) 8 +redis:6379> rpush job2 "orange" +(integer) 9 +redis:6379> lrange job2 0 -1 +1) "apple" +2) "banana" +3) "cherry" +4) "date" +5) "fig" +6) "grape" +7) "lemon" +8) "melon" +9) "orange" +``` + + +因此,这个键为 `job2` 的列表就是我们的工作队列。 + + +注意:如果您还没有正确地配置 Kube DNS,您可能需要将上面的第一步改为 `redis-cli -h $REDIS_SERVICE_HOST`。 + + + +创建镜像 + + +现在我们已经准备好创建一个我们要运行的镜像 + + +我们会使用一个带有 redis 客户端的 python 工作程序从消息队列中读出消息。 + + +这里提供了一个简单的 Redis 工作队列客户端库,叫 rediswq.py ([下载](/examples/application/job/redis/rediswq.py))。 + + +Job 中每个 Pod 内的 “工作程序” 使用工作队列客户端库获取工作。如下: + +{{< codenew language="python" file="application/job/redis/worker.py" >}} + + +如果您在使用本文档库的源代码目录,请将当前目录切换到 `content/en/examples/application/job/redis/`。否则,请点击链接下载 [`worker.py`](/examples/application/job/redis/worker.py)、 [`rediswq.py`](/examples/application/job/redis/rediswq.py) 和 [`Dockerfile`](/examples/application/job/redis/Dockerfile)。然后构建镜像: + +```shell +docker build -t job-wq-2 . +``` + + +### Push 镜像 + + +对于 [Docker Hub](https://hub.docker.com/),请先用您的用户名给镜像打上标签,然后使用下面的命令 push 您的镜像到仓库。请将 `` 替换为您自己的用户名。 + +```shell +docker tag job-wq-2 /job-wq-2 +docker push /job-wq-2 +``` + + +您需要将镜像 push 到一个公共仓库或者 [配置集群访问您的私有仓库](/docs/concepts/containers/images/)。 + + +如果您使用的是 [Google Container +Registry](https://cloud.google.com/tools/container-registry/),请先用您的 project ID 给您的镜像打上标签,然后 push 到 GCR 。请将 `` 替换为您自己的 project ID + +```shell +docker tag job-wq-2 gcr.io//job-wq-2 +gcloud docker -- push gcr.io//job-wq-2 +``` + + +## 定义一个 Job + + +这是 job 定义: + +{{< codenew file="application/job/redis/job.yaml" >}} + + +请确保将 job 模板中的 `gcr.io/myproject` 更改为您自己的路径。 + + +在这个例子中,每个 pod 处理了队列中的多个项目,直到队列中没有项目时便退出。因为是由工作程序自行检测工作队列是否为空,并且 Job 控制器不知道工作队列的存在,所以依赖于工作程序在完成工作时发出信号。工作程序以成功退出的形式发出信号表示工作队列已经为空。所以,只要有任意一个工作程序成功退出,控制器就知道工作已经完成了,所有的 Pod 将很快会退出。因此,我们将 Job 的 completion count 设置为 1 。尽管如此,Job 控制器还是会等待其它 Pod 完成。 + + + +## 运行 Job + + +现在运行这个 Job : + +```shell +kubectl create -f ./job.yaml +``` + + +稍等片刻,然后检查这个 Job。 + +```shell +$ kubectl describe jobs/job-wq-2 +Name: job-wq-2 +Namespace: default +Selector: controller-uid=b1c7e4e3-92e1-11e7-b85e-fa163ee3c11f +Labels: controller-uid=b1c7e4e3-92e1-11e7-b85e-fa163ee3c11f + job-name=job-wq-2 +Annotations: +Parallelism: 2 +Completions: +Start Time: Mon, 11 Jan 2016 17:07:59 -0800 +Pods Statuses: 1 Running / 0 Succeeded / 0 Failed +Pod Template: + Labels: controller-uid=b1c7e4e3-92e1-11e7-b85e-fa163ee3c11f + job-name=job-wq-2 + Containers: + c: + Image: gcr.io/exampleproject/job-wq-2 + Port: + Environment: + Mounts: + Volumes: +Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 33s 33s 1 {job-controller } Normal SuccessfulCreate Created pod: job-wq-2-lglf8 + + +$ kubectl logs pods/job-wq-2-7r7b2 +Worker with sessionID: bbd72d0a-9e5c-4dd6-abf6-416cc267991f +Initial queue state: empty=False +Working on banana +Working on date +Working on lemon +``` + + +您可以看到,其中的一个 pod 处理了若干个工作单元。 + +{{% /capture %}} + +{{% capture discussion %}} + + +## 其它 + + +如果您不方便运行一个队列服务或者修改您的容器用于运行一个工作队列,您可以考虑其它的 [job 模式](/docs/concepts/jobs/run-to-completion-finite-workloads/#job-patterns)。 + + +如果您有连续的后台处理业务,那么可以考虑使用 `replicationController` 来运行您的后台业务,和运行一个类似 [https://github.com/resque/resque](https://github.com/resque/resque) 的后台处理库。 + +{{% /capture %}} diff --git a/content/cn/docs/tasks/manage-daemon/rollback-daemon-set.md b/content/zh/docs/tasks/manage-daemon/rollback-daemon-set.md similarity index 100% rename from content/cn/docs/tasks/manage-daemon/rollback-daemon-set.md rename to content/zh/docs/tasks/manage-daemon/rollback-daemon-set.md diff --git a/content/cn/docs/tasks/manage-gpus/scheduling-gpus.md b/content/zh/docs/tasks/manage-gpus/scheduling-gpus.md similarity index 100% rename from content/cn/docs/tasks/manage-gpus/scheduling-gpus.md rename to content/zh/docs/tasks/manage-gpus/scheduling-gpus.md diff --git a/content/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md b/content/zh/docs/tasks/manage-hugepages/scheduling-hugepages.md similarity index 100% rename from content/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md rename to content/zh/docs/tasks/manage-hugepages/scheduling-hugepages.md diff --git a/content/cn/docs/tasks/run-application/deployment-patch-demo.yaml b/content/zh/docs/tasks/run-application/deployment-patch-demo.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/deployment-patch-demo.yaml rename to content/zh/docs/tasks/run-application/deployment-patch-demo.yaml diff --git a/content/cn/docs/tasks/run-application/deployment-scale.yaml b/content/zh/docs/tasks/run-application/deployment-scale.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/deployment-scale.yaml rename to content/zh/docs/tasks/run-application/deployment-scale.yaml diff --git a/content/cn/docs/tasks/run-application/deployment-update.yaml b/content/zh/docs/tasks/run-application/deployment-update.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/deployment-update.yaml rename to content/zh/docs/tasks/run-application/deployment-update.yaml diff --git a/content/cn/docs/tasks/run-application/deployment.yaml b/content/zh/docs/tasks/run-application/deployment.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/deployment.yaml rename to content/zh/docs/tasks/run-application/deployment.yaml diff --git a/content/cn/docs/tasks/run-application/gce-volume.yaml b/content/zh/docs/tasks/run-application/gce-volume.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/gce-volume.yaml rename to content/zh/docs/tasks/run-application/gce-volume.yaml diff --git a/content/cn/docs/tasks/run-application/mysql-configmap.yaml b/content/zh/docs/tasks/run-application/mysql-configmap.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/mysql-configmap.yaml rename to content/zh/docs/tasks/run-application/mysql-configmap.yaml diff --git a/content/cn/docs/tasks/run-application/mysql-deployment.yaml b/content/zh/docs/tasks/run-application/mysql-deployment.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/mysql-deployment.yaml rename to content/zh/docs/tasks/run-application/mysql-deployment.yaml diff --git a/content/cn/docs/tasks/run-application/mysql-services.yaml b/content/zh/docs/tasks/run-application/mysql-services.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/mysql-services.yaml rename to content/zh/docs/tasks/run-application/mysql-services.yaml diff --git a/content/cn/docs/tasks/run-application/mysql-statefulset.yaml b/content/zh/docs/tasks/run-application/mysql-statefulset.yaml similarity index 100% rename from content/cn/docs/tasks/run-application/mysql-statefulset.yaml rename to content/zh/docs/tasks/run-application/mysql-statefulset.yaml diff --git a/content/cn/docs/tasks/run-application/rolling-update-replication-controller.md b/content/zh/docs/tasks/run-application/rolling-update-replication-controller.md similarity index 100% rename from content/cn/docs/tasks/run-application/rolling-update-replication-controller.md rename to content/zh/docs/tasks/run-application/rolling-update-replication-controller.md diff --git a/content/cn/docs/tasks/run-application/run-single-instance-stateful-application.md b/content/zh/docs/tasks/run-application/run-single-instance-stateful-application.md similarity index 100% rename from content/cn/docs/tasks/run-application/run-single-instance-stateful-application.md rename to content/zh/docs/tasks/run-application/run-single-instance-stateful-application.md diff --git a/content/cn/docs/tasks/run-application/run-stateless-application-deployment.md b/content/zh/docs/tasks/run-application/run-stateless-application-deployment.md similarity index 100% rename from content/cn/docs/tasks/run-application/run-stateless-application-deployment.md rename to content/zh/docs/tasks/run-application/run-stateless-application-deployment.md diff --git a/content/cn/docs/tasks/run-application/scale-stateful-set.md b/content/zh/docs/tasks/run-application/scale-stateful-set.md similarity index 100% rename from content/cn/docs/tasks/run-application/scale-stateful-set.md rename to content/zh/docs/tasks/run-application/scale-stateful-set.md diff --git a/content/cn/docs/tasks/tls/certificate-rotation.md b/content/zh/docs/tasks/tls/certificate-rotation.md similarity index 100% rename from content/cn/docs/tasks/tls/certificate-rotation.md rename to content/zh/docs/tasks/tls/certificate-rotation.md diff --git a/content/cn/docs/templates/index.md b/content/zh/docs/templates/index.md similarity index 100% rename from content/cn/docs/templates/index.md rename to content/zh/docs/templates/index.md diff --git a/content/cn/docs/tutorials/configuration/configure-redis-using-configmap.md b/content/zh/docs/tutorials/configuration/configure-redis-using-configmap.md similarity index 100% rename from content/cn/docs/tutorials/configuration/configure-redis-using-configmap.md rename to content/zh/docs/tutorials/configuration/configure-redis-using-configmap.md diff --git a/content/cn/docs/tutorials/kubernetes-basics/_index.html b/content/zh/docs/tutorials/kubernetes-basics/_index.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/_index.html rename to content/zh/docs/tutorials/kubernetes-basics/_index.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html b/content/zh/docs/tutorials/kubernetes-basics/cluster-interactive.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html rename to content/zh/docs/tutorials/kubernetes-basics/cluster-interactive.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/cluster-intro.html b/content/zh/docs/tutorials/kubernetes-basics/cluster-intro.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/cluster-intro.html rename to content/zh/docs/tutorials/kubernetes-basics/cluster-intro.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html b/content/zh/docs/tutorials/kubernetes-basics/deploy-interactive.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html rename to content/zh/docs/tutorials/kubernetes-basics/deploy-interactive.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/deploy-intro.html b/content/zh/docs/tutorials/kubernetes-basics/deploy-intro.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/deploy-intro.html rename to content/zh/docs/tutorials/kubernetes-basics/deploy-intro.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/explore-interactive.html b/content/zh/docs/tutorials/kubernetes-basics/explore-interactive.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/explore-interactive.html rename to content/zh/docs/tutorials/kubernetes-basics/explore-interactive.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/explore-intro.html b/content/zh/docs/tutorials/kubernetes-basics/explore-intro.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/explore-intro.html rename to content/zh/docs/tutorials/kubernetes-basics/explore-intro.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/expose-interactive.html b/content/zh/docs/tutorials/kubernetes-basics/expose-interactive.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/expose-interactive.html rename to content/zh/docs/tutorials/kubernetes-basics/expose-interactive.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/expose-intro.html b/content/zh/docs/tutorials/kubernetes-basics/expose-intro.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/expose-intro.html rename to content/zh/docs/tutorials/kubernetes-basics/expose-intro.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/scale-interactive.html b/content/zh/docs/tutorials/kubernetes-basics/scale-interactive.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/scale-interactive.html rename to content/zh/docs/tutorials/kubernetes-basics/scale-interactive.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/scale-intro.html b/content/zh/docs/tutorials/kubernetes-basics/scale-intro.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/scale-intro.html rename to content/zh/docs/tutorials/kubernetes-basics/scale-intro.html diff --git a/content/zh/docs/tutorials/kubernetes-basics/scale/scale-intro.html b/content/zh/docs/tutorials/kubernetes-basics/scale/scale-intro.html new file mode 100644 index 0000000000..aeff024382 --- /dev/null +++ b/content/zh/docs/tutorials/kubernetes-basics/scale/scale-intro.html @@ -0,0 +1,136 @@ + +--- +title: 运行应用程序的多个实例 +weight: 10 +--- + + + + + +
+
+
+
+ +

目的

+
    + +
  • 用 kubectl 扩缩应用程序
  • +
+
+ +
+ +

扩缩应用程序

+ + +

在之前的模块中,我们创建了一个 Deployment,然后通过 Service让其可以开放访问。Deployment 仅为跑这个应用程序创建了一个 Pod。 当流量增加时,我们需要扩容应用程序满足用户需求。

+ + +

扩缩 是通过改变 Deployment 中的副本数量来实现的。

+ +
+
+
+ +

小结:

+
    + +
  • 扩缩一个 Deployment
  • +
+
+
+ +

在运行 kubectl run 命令时,你可以通过设置 --replicas 参数来设置 Deployment 的副本数。

+
+
+
+
+ +
+
+ +

扩缩概述

+
+
+ +
+
+
+ +
+
+ +
+ +
+
+ + +

扩展 Deployment 将创建新的 Pods,并将资源调度请求分配到有可用资源的节点上,收缩 会将 Pods 数量减少至所需的状态。Kubernetes 还支持 Pods 的自动缩放,但这并不在本教程的讨论范围内。将 Pods 数量收缩到0也是可以的,但这会终止 Deployment 上所有已经部署的 Pods。

+ + +

运行应用程序的多个实例需要在它们之间分配流量。服务 (Service)有一种负载均衡器类型,可以将网络流量均衡分配到外部可访问的 Pods 上。服务将会一直通过端点来监视 Pods 的运行,保证流量只分配到可用的 Pods 上。

+ +
+
+
+ +

扩缩是通过改变 Deployment 中的副本数量来实现的。

+
+
+
+ +
+ +
+
+ +

一旦有了多个应用实例,就可以没有宕机地滚动更新。我们将会在下面的模块中介绍这些。现在让我们使用在线终端来体验一下应用程序的扩缩过程。

+
+
+
+ + + +
+ +
+ + + diff --git a/content/cn/docs/tutorials/kubernetes-basics/update-interactive.html b/content/zh/docs/tutorials/kubernetes-basics/update-interactive.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/update-interactive.html rename to content/zh/docs/tutorials/kubernetes-basics/update-interactive.html diff --git a/content/cn/docs/tutorials/kubernetes-basics/update-intro.html b/content/zh/docs/tutorials/kubernetes-basics/update-intro.html similarity index 100% rename from content/cn/docs/tutorials/kubernetes-basics/update-intro.html rename to content/zh/docs/tutorials/kubernetes-basics/update-intro.html diff --git a/content/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md b/content/zh/docs/tutorials/object-management-kubectl/imperative-object-management-command.md similarity index 100% rename from content/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md rename to content/zh/docs/tutorials/object-management-kubectl/imperative-object-management-command.md diff --git a/content/cn/docs/tutorials/object-management-kubectl/object-management.md b/content/zh/docs/tutorials/object-management-kubectl/object-management.md similarity index 100% rename from content/cn/docs/tutorials/object-management-kubectl/object-management.md rename to content/zh/docs/tutorials/object-management-kubectl/object-management.md diff --git a/content/cn/docs/tutorials/services/source-ip.md b/content/zh/docs/tutorials/services/source-ip.md similarity index 95% rename from content/cn/docs/tutorials/services/source-ip.md rename to content/zh/docs/tutorials/services/source-ip.md index c4b4bd34e9..77da6af9d0 100644 --- a/content/cn/docs/tutorials/services/source-ip.md +++ b/content/zh/docs/tutorials/services/source-ip.md @@ -116,7 +116,7 @@ command=GET ## Type=NodePort 类型 Services 的 Source IP -对于 Kubernetes 1.5,发送给类型为 [Type=NodePort](/docs/user-guide/services/#nodeport) Services 的数据包默认进行源地址 NAT。你可以创建一个 `NodePort` Service 来进行测试: +对于 Kubernetes 1.5,发送给类型为 [Type=NodePort](/docs/user-guide/services/#type-nodeport) Services 的数据包默认进行源地址 NAT。你可以创建一个 `NodePort` Service 来进行测试: ```console $ kubectl expose deployment source-ip-app --name=nodeport --port=80 --target-port=8080 --type=NodePort @@ -210,7 +210,7 @@ client_address=104.132.1.79 ## Type=LoadBalancer 类型 Services 的 Source IP -对于 Kubernetes 1.5,发送给类型为 [Type=LoadBalancer](/docs/user-guide/services/#nodeport) Services 的数据包默认进行源地址 NAT,这是由于所有处于 `Ready` 状态的 Kubernetes 节点对于负载均衡的流量都是符合条件的。所以如果数据包到达一个没有 endpoint 的节点,系统将把这个包代理到*有* endpoint 的节点,并替换数据包的源 IP 为节点的 IP(如前面章节所述)。 +对于 Kubernetes 1.5,发送给类型为 [Type=LoadBalancer](/docs/user-guide/services/#type-nodeport) Services 的数据包默认进行源地址 NAT,这是由于所有处于 `Ready` 状态的 Kubernetes 节点对于负载均衡的流量都是符合条件的。所以如果数据包到达一个没有 endpoint 的节点,系统将把这个包代理到*有* endpoint 的节点,并替换数据包的源 IP 为节点的 IP(如前面章节所述)。 你可以通过在一个 loadbalancer 上暴露这个 source-ip-app 来进行测试。 diff --git a/content/cn/docs/tutorials/stateful-application/Dockerfile b/content/zh/docs/tutorials/stateful-application/Dockerfile similarity index 100% rename from content/cn/docs/tutorials/stateful-application/Dockerfile rename to content/zh/docs/tutorials/stateful-application/Dockerfile diff --git a/content/cn/docs/tutorials/stateful-application/FETCH_HEAD b/content/zh/docs/tutorials/stateful-application/FETCH_HEAD similarity index 100% rename from content/cn/docs/tutorials/stateful-application/FETCH_HEAD rename to content/zh/docs/tutorials/stateful-application/FETCH_HEAD diff --git a/content/cn/docs/tutorials/stateful-application/basic-stateful-set.md b/content/zh/docs/tutorials/stateful-application/basic-stateful-set.md similarity index 99% rename from content/cn/docs/tutorials/stateful-application/basic-stateful-set.md rename to content/zh/docs/tutorials/stateful-application/basic-stateful-set.md index 9a5bfd9ed3..81a6b1b356 100644 --- a/content/cn/docs/tutorials/stateful-application/basic-stateful-set.md +++ b/content/zh/docs/tutorials/stateful-application/basic-stateful-set.md @@ -107,9 +107,10 @@ web-1 1/1 Running 0 18s 请注意在 `web-0` Pod 处于 [Running和Ready](/docs/user-guide/pod-states) 状态后 `web-1` Pod 才会被启动。 - + ## StatefulSet 中的 Pod diff --git a/content/cn/docs/tutorials/stateful-application/cassandra-service.yaml b/content/zh/docs/tutorials/stateful-application/cassandra-service.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/cassandra-service.yaml rename to content/zh/docs/tutorials/stateful-application/cassandra-service.yaml diff --git a/content/cn/docs/tutorials/stateful-application/cassandra-statefulset.yaml b/content/zh/docs/tutorials/stateful-application/cassandra-statefulset.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/cassandra-statefulset.yaml rename to content/zh/docs/tutorials/stateful-application/cassandra-statefulset.yaml diff --git a/content/cn/docs/tutorials/stateful-application/cassandra.md b/content/zh/docs/tutorials/stateful-application/cassandra.md similarity index 100% rename from content/cn/docs/tutorials/stateful-application/cassandra.md rename to content/zh/docs/tutorials/stateful-application/cassandra.md diff --git a/content/cn/docs/tutorials/stateful-application/dev b/content/zh/docs/tutorials/stateful-application/dev similarity index 100% rename from content/cn/docs/tutorials/stateful-application/dev rename to content/zh/docs/tutorials/stateful-application/dev diff --git a/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md b/content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md similarity index 98% rename from content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md rename to content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md index 5d521f02c7..030d2c24e5 100644 --- a/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md +++ b/content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md @@ -15,7 +15,7 @@ approvers: * [Persistent Volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) 定义持久化磁盘(磁盘生命周期不和 Pods 绑定)。 * [Services](https://kubernetes.io/docs/concepts/services-networking/service/) 使得 Pods 能够找到其它 Pods。 -* [External Load Balancers](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) 对外暴露 Services。 +* [External Load Balancers](https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer) 对外暴露 Services。 * [Deployments](http://kubernetes.io/docs/user-guide/deployments/) 确保 Pods 持续运行。 * [Secrets](http://kubernetes.io/docs/user-guide/secrets/) 保存敏感密码信息。 @@ -66,7 +66,7 @@ kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/m Kubernetes本质是模块化的,可以在各种环境中运行。但并不是所有集群都相同。此处是本示例的一些要求: * 需要 1.2 版本以上的 Kubernetes,以使用更新的特性,例如 PV Claims 和 Deployments。运行 `kubectl version` 来查看你的集群版本。 * [Cluster DNS](https://github.com/kubernetes/dns) 将被用于服务发现。 -* 一个 [external load balancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) 将被用于接入 WordPress。 +* 一个 [external load balancer](https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer) 将被用于接入 WordPress。 * 使用了 [Persistent Volume Claims](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。你必须创建集群中需要的 Persistent Volumes。本示例将展示两种类型的 volume 的创建方法,但是任何类型的 volume 都是足够使用的。 diff --git a/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml b/content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml rename to content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml diff --git a/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml b/content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml rename to content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml diff --git a/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml b/content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml rename to content/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml diff --git a/content/cn/docs/tutorials/stateful-application/web.yaml b/content/zh/docs/tutorials/stateful-application/web.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/web.yaml rename to content/zh/docs/tutorials/stateful-application/web.yaml diff --git a/content/cn/docs/tutorials/stateful-application/webp.yaml b/content/zh/docs/tutorials/stateful-application/webp.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/webp.yaml rename to content/zh/docs/tutorials/stateful-application/webp.yaml diff --git a/content/cn/docs/tutorials/stateful-application/zookeeper.md b/content/zh/docs/tutorials/stateful-application/zookeeper.md similarity index 100% rename from content/cn/docs/tutorials/stateful-application/zookeeper.md rename to content/zh/docs/tutorials/stateful-application/zookeeper.md diff --git a/content/cn/docs/tutorials/stateful-application/zookeeper.yaml b/content/zh/docs/tutorials/stateful-application/zookeeper.yaml similarity index 100% rename from content/cn/docs/tutorials/stateful-application/zookeeper.yaml rename to content/zh/docs/tutorials/stateful-application/zookeeper.yaml diff --git a/content/cn/docs/user-guide/bad-nginx-deployment.yaml b/content/zh/docs/user-guide/bad-nginx-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/bad-nginx-deployment.yaml rename to content/zh/docs/user-guide/bad-nginx-deployment.yaml diff --git a/content/cn/docs/user-guide/curlpod.yaml b/content/zh/docs/user-guide/curlpod.yaml similarity index 100% rename from content/cn/docs/user-guide/curlpod.yaml rename to content/zh/docs/user-guide/curlpod.yaml diff --git a/content/cn/docs/user-guide/deployment.yaml b/content/zh/docs/user-guide/deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/deployment.yaml rename to content/zh/docs/user-guide/deployment.yaml diff --git a/content/cn/docs/user-guide/docker-cli-to-kubectl.md b/content/zh/docs/user-guide/docker-cli-to-kubectl.md similarity index 100% rename from content/cn/docs/user-guide/docker-cli-to-kubectl.md rename to content/zh/docs/user-guide/docker-cli-to-kubectl.md diff --git a/content/cn/docs/user-guide/ingress.yaml b/content/zh/docs/user-guide/ingress.yaml similarity index 100% rename from content/cn/docs/user-guide/ingress.yaml rename to content/zh/docs/user-guide/ingress.yaml diff --git a/content/cn/docs/user-guide/job.yaml b/content/zh/docs/user-guide/job.yaml similarity index 100% rename from content/cn/docs/user-guide/job.yaml rename to content/zh/docs/user-guide/job.yaml diff --git a/content/cn/docs/user-guide/jsonpath.md b/content/zh/docs/user-guide/jsonpath.md similarity index 100% rename from content/cn/docs/user-guide/jsonpath.md rename to content/zh/docs/user-guide/jsonpath.md diff --git a/content/cn/docs/user-guide/kubectl-overview.md b/content/zh/docs/user-guide/kubectl-overview.md similarity index 100% rename from content/cn/docs/user-guide/kubectl-overview.md rename to content/zh/docs/user-guide/kubectl-overview.md diff --git a/content/cn/docs/user-guide/multi-pod.yaml b/content/zh/docs/user-guide/multi-pod.yaml similarity index 100% rename from content/cn/docs/user-guide/multi-pod.yaml rename to content/zh/docs/user-guide/multi-pod.yaml diff --git a/content/cn/docs/user-guide/new-nginx-deployment.yaml b/content/zh/docs/user-guide/new-nginx-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/new-nginx-deployment.yaml rename to content/zh/docs/user-guide/new-nginx-deployment.yaml diff --git a/content/cn/docs/user-guide/nginx-app.yaml b/content/zh/docs/user-guide/nginx-app.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-app.yaml rename to content/zh/docs/user-guide/nginx-app.yaml diff --git a/content/cn/docs/user-guide/nginx-deployment.yaml b/content/zh/docs/user-guide/nginx-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-deployment.yaml rename to content/zh/docs/user-guide/nginx-deployment.yaml diff --git a/content/cn/docs/user-guide/nginx-init-containers.yaml b/content/zh/docs/user-guide/nginx-init-containers.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-init-containers.yaml rename to content/zh/docs/user-guide/nginx-init-containers.yaml diff --git a/content/cn/docs/user-guide/nginx-lifecycle-deployment.yaml b/content/zh/docs/user-guide/nginx-lifecycle-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-lifecycle-deployment.yaml rename to content/zh/docs/user-guide/nginx-lifecycle-deployment.yaml diff --git a/content/cn/docs/user-guide/nginx-probe-deployment.yaml b/content/zh/docs/user-guide/nginx-probe-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-probe-deployment.yaml rename to content/zh/docs/user-guide/nginx-probe-deployment.yaml diff --git a/content/cn/docs/user-guide/nginx-secure-app.yaml b/content/zh/docs/user-guide/nginx-secure-app.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-secure-app.yaml rename to content/zh/docs/user-guide/nginx-secure-app.yaml diff --git a/content/cn/docs/user-guide/nginx-svc.yaml b/content/zh/docs/user-guide/nginx-svc.yaml similarity index 100% rename from content/cn/docs/user-guide/nginx-svc.yaml rename to content/zh/docs/user-guide/nginx-svc.yaml diff --git a/content/cn/docs/user-guide/pod-w-message.yaml b/content/zh/docs/user-guide/pod-w-message.yaml similarity index 100% rename from content/cn/docs/user-guide/pod-w-message.yaml rename to content/zh/docs/user-guide/pod-w-message.yaml diff --git a/content/cn/docs/user-guide/pod.yaml b/content/zh/docs/user-guide/pod.yaml similarity index 100% rename from content/cn/docs/user-guide/pod.yaml rename to content/zh/docs/user-guide/pod.yaml diff --git a/content/cn/docs/user-guide/redis-deployment.yaml b/content/zh/docs/user-guide/redis-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/redis-deployment.yaml rename to content/zh/docs/user-guide/redis-deployment.yaml diff --git a/content/cn/docs/user-guide/redis-resource-deployment.yaml b/content/zh/docs/user-guide/redis-resource-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/redis-resource-deployment.yaml rename to content/zh/docs/user-guide/redis-resource-deployment.yaml diff --git a/content/cn/docs/user-guide/redis-secret-deployment.yaml b/content/zh/docs/user-guide/redis-secret-deployment.yaml similarity index 100% rename from content/cn/docs/user-guide/redis-secret-deployment.yaml rename to content/zh/docs/user-guide/redis-secret-deployment.yaml diff --git a/content/cn/docs/user-guide/run-my-nginx.yaml b/content/zh/docs/user-guide/run-my-nginx.yaml similarity index 100% rename from content/cn/docs/user-guide/run-my-nginx.yaml rename to content/zh/docs/user-guide/run-my-nginx.yaml diff --git a/content/cn/docs/whatisk8s.md b/content/zh/docs/whatisk8s.md similarity index 100% rename from content/cn/docs/whatisk8s.md rename to content/zh/docs/whatisk8s.md diff --git a/layouts/shortcodes/language-repos-list.html b/layouts/shortcodes/language-repos-list.html deleted file mode 100644 index 293efa1ffc..0000000000 --- a/layouts/shortcodes/language-repos-list.html +++ /dev/null @@ -1,38 +0,0 @@ -{{- $languages := .Site.Home.AllTranslations }} - - - - - - - - - - {{- range $languages.ByWeight }} - {{- $name := .Language.LanguageName }} - {{- $code := string .Language }} - {{- $repo := printf "https://github.com/%s" (index .Site.Data.repos $code) }} - - - - - - {{- end }} - -
- Language - - Language code - - Repository -
- - {{ $name }} - - - {{ $code }} - - - {{ $repo }} - -
\ No newline at end of file From 9abeb8bfa1a381b49bad6ed2bd20e21cee6810b6 Mon Sep 17 00:00:00 2001 From: Tim Fogarty Date: Fri, 12 Oct 2018 18:00:20 -0700 Subject: [PATCH 148/181] Update PR template for 1.13 release (#10603) * Update PR template for 1.13 release Also updates links to documentation for submitting PRs * Update contributing docs for new branch strategy Branches for upcoming releases are now dev-X.Y instead of release-X.Y --- .github/PULL_REQUEST_TEMPLATE.md | 10 +++++++--- content/en/docs/contribute/start.md | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b702f514d1..7c0810171f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,8 +1,12 @@ >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Please delete this note before submitting the pull request. -> For 1.12 Features: set Milestone to 1.12 and Base Branch to release-1.12 -> Help editing and submitting pull requests: https://deploy-preview-9510--kubernetes-io-master-staging.netlify.com/docs/contribute/start/#submit-a-pull-request. -> Help choosing which branch to use, see +> +> For 1.13 Features: set Milestone to 1.13 and Base Branch to dev-1.13 +> +> Help editing and submitting pull requests: +> https://kubernetes.io/docs/contribute/start/#improve-existing-content. +> +> Help choosing which branch to use: > https://kubernetes.io/docs/contribute/start#choose-which-git-branch-to-use. >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > diff --git a/content/en/docs/contribute/start.md b/content/en/docs/contribute/start.md index dfd45d668f..02e0ce0bc0 100644 --- a/content/en/docs/contribute/start.md +++ b/content/en/docs/contribute/start.md @@ -179,7 +179,7 @@ to base your work on. Use these guidelines to make the decision: - Use `master` for fixing problems in content that is already published, or making improvements to content that already exists. -- Use a release branch (such as `release-1.12`) to document upcoming features + - Use a release branch (such as `dev-{{< release-branch >}}` for the {{< release-branch >}} release) to document upcoming features or changes for an upcoming release that is not yet published. - Use a feature branch that has been agreed upon by SIG Docs to collaborate on big improvements or changes to the existing documentation, including content From d14b898a91b549bbee3abaefd1f1877278b37b20 Mon Sep 17 00:00:00 2001 From: Takuya N Date: Sat, 13 Oct 2018 10:16:50 +0900 Subject: [PATCH 149/181] Fix Hugo config.toml as valid (#10605) Signed-off-by: Takuya Noguchi --- config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.toml b/config.toml index 6d780612c1..92f1eee421 100644 --- a/config.toml +++ b/config.toml @@ -7,7 +7,7 @@ enableRobotsTXT = true disableKinds = ["taxonomy", "taxonomyTerm"] -ignoreFiles = [ "^OWNERS$", "README[-]+[a-z]*\.md", "^node_modules$", "content/en/docs/doc-contributor-tools" ] +ignoreFiles = [ "^OWNERS$", "README[-]+[a-z]*\\.md", "^node_modules$", "content/en/docs/doc-contributor-tools" ] contentDir = "content/en" From 462f4553e24aee235c6b47de9238b8380bd7666a Mon Sep 17 00:00:00 2001 From: June Yi Date: Sun, 14 Oct 2018 20:58:41 +0900 Subject: [PATCH 150/181] Fix build failure by adding example and include files (#10610) Signed-off-by: June Yi --- content/zh/docs/reference/tools.md | 3 - .../examples/application/job/redis/job.yaml | 14 ++++ .../examples/application/job/redis/worker.py | 23 +++++++ content/zh/examples/audit/audit-policy.yaml | 68 +++++++++++++++++++ content/zh/examples/pods/pod-nginx.yaml | 13 ++++ content/zh/includes/task-tutorial-prereqs.md | 8 +++ .../zh/includes/user-guide-content-moved.md | 0 7 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 content/zh/examples/application/job/redis/job.yaml create mode 100644 content/zh/examples/application/job/redis/worker.py create mode 100644 content/zh/examples/audit/audit-policy.yaml create mode 100644 content/zh/examples/pods/pod-nginx.yaml create mode 100644 content/zh/includes/task-tutorial-prereqs.md create mode 100644 content/zh/includes/user-guide-content-moved.md diff --git a/content/zh/docs/reference/tools.md b/content/zh/docs/reference/tools.md index 565d94b2fe..4fa74d6821 100644 --- a/content/zh/docs/reference/tools.md +++ b/content/zh/docs/reference/tools.md @@ -14,9 +14,7 @@ content_template: templates/concept --- {{% capture overview %}} Kubernetes һЩùߣ԰ûõʹ Kubernetes ϵͳ @@ -102,7 +100,6 @@ Use Kompose to: * Translate a Docker Compose file into Kubernetes objects * Go from local Docker development to managing your application via Kubernetes * Convert v1 or v2 Docker Compose `yaml` files or [Distributed Application Bundles](https://docs.docker.com/compose/bundles/) -{{% /capture %}} --> ʹ Kompose: diff --git a/content/zh/examples/application/job/redis/job.yaml b/content/zh/examples/application/job/redis/job.yaml new file mode 100644 index 0000000000..ee7a06c732 --- /dev/null +++ b/content/zh/examples/application/job/redis/job.yaml @@ -0,0 +1,14 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: job-wq-2 +spec: + parallelism: 2 + template: + metadata: + name: job-wq-2 + spec: + containers: + - name: c + image: gcr.io/myproject/job-wq-2 + restartPolicy: OnFailure diff --git a/content/zh/examples/application/job/redis/worker.py b/content/zh/examples/application/job/redis/worker.py new file mode 100644 index 0000000000..49e5dae798 --- /dev/null +++ b/content/zh/examples/application/job/redis/worker.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import time +import rediswq + +host="redis" +# Uncomment next two lines if you do not have Kube-DNS working. +# import os +# host = os.getenv("REDIS_SERVICE_HOST") + +q = rediswq.RedisWQ(name="job2", host="redis") +print("Worker with sessionID: " + q.sessionID()) +print("Initial queue state: empty=" + str(q.empty())) +while not q.empty(): + item = q.lease(lease_secs=10, block=True, timeout=2) + if item is not None: + itemstr = item.decode("utf=8") + print("Working on " + itemstr) + time.sleep(10) # Put your actual work here instead of sleep. + q.complete(item) + else: + print("Waiting for work") +print("Queue empty, exiting") diff --git a/content/zh/examples/audit/audit-policy.yaml b/content/zh/examples/audit/audit-policy.yaml new file mode 100644 index 0000000000..b5d66b3a18 --- /dev/null +++ b/content/zh/examples/audit/audit-policy.yaml @@ -0,0 +1,68 @@ +apiVersion: audit.k8s.io/v1beta1 # This is required. +kind: Policy +# Don't generate audit events for all requests in RequestReceived stage. +omitStages: + - "RequestReceived" +rules: + # Log pod changes at RequestResponse level + - level: RequestResponse + resources: + - group: "" + # Resource "pods" doesn't match requests to any subresource of pods, + # which is consistent with the RBAC policy. + resources: ["pods"] + # Log "pods/log", "pods/status" at Metadata level + - level: Metadata + resources: + - group: "" + resources: ["pods/log", "pods/status"] + + # Don't log requests to a configmap called "controller-leader" + - level: None + resources: + - group: "" + resources: ["configmaps"] + resourceNames: ["controller-leader"] + + # Don't log watch requests by the "system:kube-proxy" on endpoints or services + - level: None + users: ["system:kube-proxy"] + verbs: ["watch"] + resources: + - group: "" # core API group + resources: ["endpoints", "services"] + + # Don't log authenticated requests to certain non-resource URL paths. + - level: None + userGroups: ["system:authenticated"] + nonResourceURLs: + - "/api*" # Wildcard matching. + - "/version" + + # Log the request body of configmap changes in kube-system. + - level: Request + resources: + - group: "" # core API group + resources: ["configmaps"] + # This rule only applies to resources in the "kube-system" namespace. + # The empty string "" can be used to select non-namespaced resources. + namespaces: ["kube-system"] + + # Log configmap and secret changes in all other namespaces at the Metadata level. + - level: Metadata + resources: + - group: "" # core API group + resources: ["secrets", "configmaps"] + + # Log all other resources in core and extensions at the Request level. + - level: Request + resources: + - group: "" # core API group + - group: "extensions" # Version of group should NOT be included. + + # A catch-all rule to log all other requests at the Metadata level. + - level: Metadata + # Long-running requests like watches that fall under this rule will not + # generate an audit event in RequestReceived. + omitStages: + - "RequestReceived" \ No newline at end of file diff --git a/content/zh/examples/pods/pod-nginx.yaml b/content/zh/examples/pods/pod-nginx.yaml new file mode 100644 index 0000000000..134ddae2aa --- /dev/null +++ b/content/zh/examples/pods/pod-nginx.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: nginx + labels: + env: test +spec: + containers: + - name: nginx + image: nginx + imagePullPolicy: IfNotPresent + nodeSelector: + disktype: ssd diff --git a/content/zh/includes/task-tutorial-prereqs.md b/content/zh/includes/task-tutorial-prereqs.md new file mode 100644 index 0000000000..6f1407fe45 --- /dev/null +++ b/content/zh/includes/task-tutorial-prereqs.md @@ -0,0 +1,8 @@ +You need to have a Kubernetes cluster, and the kubectl command-line tool must +be configured to communicate with your cluster. If you do not already have a +cluster, you can create one by using +[Minikube](/docs/getting-started-guides/minikube), +or you can use one of these Kubernetes playgrounds: + +* [Katacoda](https://www.katacoda.com/courses/kubernetes/playground) +* [Play with Kubernetes](http://labs.play-with-k8s.com/) diff --git a/content/zh/includes/user-guide-content-moved.md b/content/zh/includes/user-guide-content-moved.md new file mode 100644 index 0000000000..e69de29bb2 From bb29bc897d671a1e92293452ee37df5d93c3053c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Meireles?= Date: Mon, 15 Oct 2018 01:36:16 +0100 Subject: [PATCH 151/181] missing 'kubelet config annotate-cri' phase on additional controller nodes (#10598) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi all, AFAICT and after reading [this](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/) `kubeadm alpha phase kubelet config annotate-cri` should invoked for consistency in all joining controller nodes (to match what is already done by default in the seed/initial one). best regards, António Signed-off-by: António Meireles --- content/en/docs/setup/independent/high-availability.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/setup/independent/high-availability.md b/content/en/docs/setup/independent/high-availability.md index fdf3df5def..226409b48f 100644 --- a/content/en/docs/setup/independent/high-availability.md +++ b/content/en/docs/setup/independent/high-availability.md @@ -306,6 +306,7 @@ done ```sh kubeadm alpha phase kubeconfig all --config kubeadm-config.yaml kubeadm alpha phase controlplane all --config kubeadm-config.yaml + kubeadm alpha phase kubelet config annotate-cri --config kubeadm-config.yaml kubeadm alpha phase mark-master --config kubeadm-config.yaml ``` @@ -393,6 +394,7 @@ done ```sh kubeadm alpha phase kubeconfig all --config kubeadm-config.yaml kubeadm alpha phase controlplane all --config kubeadm-config.yaml + kubeadm alpha phase kubelet config annotate-cri --config kubeadm-config.yaml kubeadm alpha phase mark-master --config kubeadm-config.yaml ``` From 9def6050d7af69fc5abce53201f0b4637aed636c Mon Sep 17 00:00:00 2001 From: Stewart-YU Date: Mon, 15 Oct 2018 09:42:43 +0800 Subject: [PATCH 152/181] Add stewart-yu into sig-docs-en-owners group (#10570) Add stewart-yu into sig-docs-en-owners group --- OWNERS_ALIASES | 1 + 1 file changed, 1 insertion(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 22150b331b..8bb54fab61 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -121,6 +121,7 @@ aliases: - mistyhacks - ryanmcginnis - steveperry-53 + - stewart-yu - tengqm - tfogo - zacharysarah From 34d06b10544d58ab15421331ba5750c21406609c Mon Sep 17 00:00:00 2001 From: Yang Li Date: Mon, 15 Oct 2018 11:09:43 +0800 Subject: [PATCH 153/181] Add idealhack as a reviewer (#10592) --- OWNERS_ALIASES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 8bb54fab61..c27bb0210c 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -158,9 +158,9 @@ aliases: - xiangpengzhao - zhangxiaoyu-zidif sig-docs-zh-reviews: #Team Chinese docs reviews; GH: sig-docs-zh-reviews + - idealhack - tengqm - xiangpengzhao - - zhangxiaoyu-zidif sig-federation: #Team: Federation; e.g. Federated Clusters - csbell From 05f4c8ab7a472e44ad47e6a334010d4421875a25 Mon Sep 17 00:00:00 2001 From: Stewart-YU Date: Mon, 15 Oct 2018 15:44:13 +0800 Subject: [PATCH 154/181] Update deployment.md (#10615) fix the wrong comments --- .../workloads/controllers/deployment.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/en/docs/concepts/workloads/controllers/deployment.md b/content/en/docs/concepts/workloads/controllers/deployment.md index b8fbb7b9ca..8bc7f2f73b 100644 --- a/content/en/docs/concepts/workloads/controllers/deployment.md +++ b/content/en/docs/concepts/workloads/controllers/deployment.md @@ -172,14 +172,14 @@ instead of the `nginx:1.7.9` image. ```shell $ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 --record -deployment.extensions/nginx-deployment image updated +deployment.apps/nginx-deployment image updated ``` Alternatively, you can `edit` the Deployment and change `.spec.template.spec.containers[0].image` from `nginx:1.7.9` to `nginx:1.9.1`: ```shell $ kubectl edit deployment/nginx-deployment -deployment.extensions/nginx-deployment edited +deployment.apps/nginx-deployment edited ``` To see the rollout status, run: @@ -187,7 +187,7 @@ To see the rollout status, run: ```shell $ kubectl rollout status deployment/nginx-deployment Waiting for rollout to finish: 2 out of 3 new replicas have been updated... -deployment.extensions/nginx-deployment successfully rolled out +deployment.apps/nginx-deployment successfully rolled out ``` After the rollout succeeds, you may want to `get` the Deployment: @@ -338,7 +338,7 @@ Suppose that you made a typo while updating the Deployment, by putting the image ```shell $ kubectl set image deployment/nginx-deployment nginx=nginx:1.91 -deployment.extensions/nginx-deployment image updated +deployment.apps/nginx-deployment image updated ``` The rollout will be stuck. @@ -453,14 +453,14 @@ Now you've decided to undo the current rollout and rollback to the previous revi ```shell $ kubectl rollout undo deployment/nginx-deployment -deployment.extensions/nginx-deployment +deployment.apps/nginx-deployment ``` Alternatively, you can rollback to a specific revision by specify that in `--to-revision`: ```shell $ kubectl rollout undo deployment/nginx-deployment --to-revision=2 -deployment.extensions/nginx-deployment +deployment.apps/nginx-deployment ``` For more details about rollout related commands, read [`kubectl rollout`](/docs/reference/generated/kubectl/kubectl-commands#rollout). @@ -532,7 +532,7 @@ Pods you want to run based on the CPU utilization of your existing Pods. ```shell $ kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 -deployment.extensions/nginx-deployment scaled +deployment.apps/nginx-deployment scaled ``` ### Proportional scaling @@ -554,7 +554,7 @@ You update to a new image which happens to be unresolvable from inside the clust ```shell $ kubectl set image deploy/nginx-deployment nginx=nginx:sometag -deployment.extensions/nginx-deployment image updated +deployment.apps/nginx-deployment image updated ``` The image update starts a new rollout with ReplicaSet nginx-deployment-1989198191, but it's blocked due to the @@ -608,14 +608,14 @@ Pause by running the following command: ```shell $ kubectl rollout pause deployment/nginx-deployment -deployment.extensions/nginx-deployment paused +deployment.apps/nginx-deployment paused ``` Then update the image of the Deployment: ```shell $ kubectl set image deploy/nginx-deployment nginx=nginx:1.9.1 -deployment.extensions/nginx-deployment image updated +deployment.apps/nginx-deployment image updated ``` Notice that no new rollout started: @@ -635,7 +635,7 @@ You can make as many updates as you wish, for example, update the resources that ```shell $ kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi -deployment.extensions/nginx-deployment resource requirements updated +deployment.apps/nginx-deployment resource requirements updated ``` The initial state of the Deployment prior to pausing it will continue its function, but new updates to @@ -645,7 +645,7 @@ Eventually, resume the Deployment and observe a new ReplicaSet coming up with al ```shell $ kubectl rollout resume deploy/nginx-deployment -deployment.extensions/nginx-deployment resumed +deployment.apps/nginx-deployment resumed $ kubectl get rs -w NAME DESIRED CURRENT READY AGE nginx-2142116321 2 2 2 2m @@ -704,7 +704,7 @@ successfully, `kubectl rollout status` returns a zero exit code. ```shell $ kubectl rollout status deploy/nginx-deployment Waiting for rollout to finish: 2 of 3 updated replicas are available... -deployment.extensions/nginx-deployment successfully rolled out +deployment.apps/nginx-deployment successfully rolled out $ echo $? 0 ``` @@ -731,7 +731,7 @@ lack of progress for a Deployment after 10 minutes: ```shell $ kubectl patch deployment/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}' -deployment.extensions/nginx-deployment patched +deployment.apps/nginx-deployment patched ``` Once the deadline has been exceeded, the Deployment controller adds a DeploymentCondition with the following attributes to the Deployment's `.status.conditions`: From c8ce7c3b18406d21a29a21cc3d8ac68eb43586bc Mon Sep 17 00:00:00 2001 From: Jeff Billimek Date: Mon, 15 Oct 2018 09:40:46 -0400 Subject: [PATCH 155/181] adding missing step for additional control plane nodes (#10600) There appears to be a missing step instructing the user to apply the kubeadm-config on each of the additional control plane nodes --- .../tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md index 064dae86d3..2c8baf8d8b 100644 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha.md @@ -150,6 +150,12 @@ Add an annotation for the cri-socket to the current node, for example to use doc kubectl annotate node kubeadm.alpha.kubernetes.io/cri-socket=/var/run/dockershim.sock ``` +Apply the modified kubeadm-config on the node: + +```shell +kubectl apply -f kubeadm-config-cm.yaml --force +``` + Start the upgrade: ```shell From 208216d46ee39f8dd025503a3008cbb69bb0a145 Mon Sep 17 00:00:00 2001 From: Paris Date: Mon, 15 Oct 2018 09:08:44 -0700 Subject: [PATCH 156/181] Blog Post: 2018 Steering Committee Election Results (#10616) * Blog Post: 2018 Steering Committee Election Results * Update and rename 2018-10-00-Steering-Election-Results to 2018-10-15-Steering-Election-Results * Update 2018-10-15-Steering-Election-Results * Rename 2018-10-15-Steering-Election-Results to 2018-10-15-steering-election-results.md --- .../2018-10-15-steering-election-results.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-15-steering-election-results.md diff --git a/content/en/blog/_posts/2018-10-15-steering-election-results.md b/content/en/blog/_posts/2018-10-15-steering-election-results.md new file mode 100644 index 0000000000..e6b7677981 --- /dev/null +++ b/content/en/blog/_posts/2018-10-15-steering-election-results.md @@ -0,0 +1,33 @@ +--- +layout: blog +title: '2018 Steering Committee Election Results' +date: 2018-10-15 +--- + +**Authors**: Jorge Castro (Heptio), Ihor Dvoretskyi (CNCF), Paris Pittman (Google) + +## Results +The [Kubernetes Steering Committee Election](https://kubernetes.io/blog/2018/09/06/2018-steering-committee-election-cycle-kicks-off/) is now complete and the following candidates came ahead to secure two year terms that start immediately: + +* Aaron Crickenberger, Google, [@spiffxp](https://github.com/spiffxp) +* Davanum Srinivas, Huawei, [@dims](https://github.com/dims) +* Tim St. Clair, Heptio, [@timothysc](https://github.com/timothysc) + +## Big Thanks! + +* Steering Committee Member Emeritus [Quinton Hoole](https://github.com/quinton-hoole) for his service to the community over the past year. We look forward to +* The candidates that came forward to run for election. May we always have a strong set of people who want to push community forward like yours in every election. +* All 307 voters who cast a ballot. +* And last but not least...Cornell University for hosting [CIVS](https://civs.cs.cornell.edu/)! + +## Get Involved with the Steering Committee +You can follow along to Steering Committee [backlog items](https://git.k8s.io/steering/backlog.md) and weigh in by filing an issue or creating a PR against their [repo](https://github.com/kubernetes/steering). They meet bi-weekly on [Wednesdays at 8pm UTC](https://github.com/kubernetes/steering) and regularly attend Meet Our Contributors. + +Steering Committee Meetings: + +* [YouTube Playlist](https://www.youtube.com/playlist?list=PL69nYSiGNLP1yP1B_nd9-drjoxp0Q14qM) + +Meet Our Contributors Steering AMA’s: + +* [Oct 3 2018](https://youtu.be/x6Jm8p0K-IQ) +* [Sept 5 2018](https://youtu.be/UbxWV12Or58) From 4a0f0889fb711142fe65e28c5e15963030a07ab9 Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Mon, 15 Oct 2018 11:21:07 -0700 Subject: [PATCH 157/181] Typo Fix (#10620) * blog post for azure vmss * blog post * blog post * typo fix --- .../2018-10-15-Steering-Election-Results.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-15-Steering-Election-Results.md diff --git a/content/en/blog/_posts/2018-10-15-Steering-Election-Results.md b/content/en/blog/_posts/2018-10-15-Steering-Election-Results.md new file mode 100644 index 0000000000..ae5e2a9917 --- /dev/null +++ b/content/en/blog/_posts/2018-10-15-Steering-Election-Results.md @@ -0,0 +1,33 @@ +--- +layout: blog +title: '2018 Steering Committee Election Results' +date: 2018-10-15 +--- + +**Authors**: Jorge Castro (Heptio), Ihor Dvoretskyi (CNCF), Paris Pittman (Google) + +## Results +The [Kubernetes Steering Committee Election](https://kubernetes.io/blog/2018/09/06/2018-steering-committee-election-cycle-kicks-off/) is now complete and the following candidates came ahead to secure two year terms that start immediately: + +* Aaron Crickenberger, Google, [@spiffxp](https://github.com/spiffxp) +* Davanum Srinivas, Huawei, [@dims](https://github.com/dims) +* Tim St. Clair, Heptio, [@timothysc](https://github.com/timothysc) + +## Big Thanks! + +* Steering Committee Member Emeritus [Quinton Hoole](https://github.com/quinton-hoole) for his service to the community over the past year. +* The candidates that came forward to run for election. May we always have a strong set of people who want to push community forward like yours in every election. +* All 307 voters who cast a ballot. +* And last but not least...Cornell University for hosting [CIVS](https://civs.cs.cornell.edu/)! + +## Get Involved with the Steering Committee +You can follow along to Steering Committee [backlog items](https://git.k8s.io/steering/backlog.md) and weigh in by filing an issue or creating a PR against their [repo](https://github.com/kubernetes/steering). They meet bi-weekly on [Wednesdays at 8pm UTC](https://github.com/kubernetes/steering) and regularly attend Meet Our Contributors. + +Steering Committee Meetings: + +* [YouTube Playlist](https://www.youtube.com/playlist?list=PL69nYSiGNLP1yP1B_nd9-drjoxp0Q14qM) + +Meet Our Contributors Steering AMA’s: + +* [Oct 3 2018](https://youtu.be/x6Jm8p0K-IQ) +* [Sept 5 2018](https://youtu.be/UbxWV12Or58) From 98d2144036719fb06283dbd35d47d47d5e5e5bd2 Mon Sep 17 00:00:00 2001 From: SataQiu <1527062125@qq.com> Date: Tue, 16 Oct 2018 04:51:25 +0800 Subject: [PATCH 158/181] fix some typos (#10614) --- .../2018-07-16-kubernetes-1.11-release-interview.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/en/blog/_posts/2018-07-16-kubernetes-1.11-release-interview.md b/content/en/blog/_posts/2018-07-16-kubernetes-1.11-release-interview.md index ad3531eb18..5bfd60c125 100644 --- a/content/en/blog/_posts/2018-07-16-kubernetes-1.11-release-interview.md +++ b/content/en/blog/_posts/2018-07-16-kubernetes-1.11-release-interview.md @@ -122,7 +122,7 @@ TIM PEPPER: A test escape, another way to think of it as you shipped a bug becau TIM PEPPER: It's common for us to focus on "I've created this feature and I'm testing the positive cases". And this also comes to thinking about things like secure by default and having a really robust system. A harder piece of engineering often is to think about the failure cases and really actively manage those well. -JOSH BERKUS: I had a conversation with a contributor recently where it became apparent that that contributor had never worked on a support team, because their conception of a badly behaved user was, like, a hacker, right? An attacker who comes from outside. +JOSH BERKUS: I had a conversation with a contributor recently where it became apparent that contributor had never worked on a support team, because their conception of a badly behaved user was, like, a hacker, right? An attacker who comes from outside. And I'm like, no, no, no. You're stable of badly behaved users is your own staff. You know, they will do bad things, not necessarily intending to do bad things, but because they're trying to take a shortcut. And that is actually your primary concern in terms of preventing breaking the system. @@ -158,7 +158,7 @@ But then you start also getting interactions. Maybe a bug was introduced, and ot And maybe because I'm following Josh into this role from a bug triage position and in his mentions earlier of just the communications and tracking involved with that versus triage, I do have a bit of a concern that at times, email and Slack are relatively quiet. Some of the SIG meeting notes are a bit sparse or YouTube videos slow to upload. So the general artifacts around choice making I think is an area where we need a little more rigor. So I'm hoping to see some of that. -And that can be just as subtle as commenting on issues like, hey, this commit doesn't say what it's doing. And for that reason on the release team, we can't assess its risk versus value. So could you give a little more information here? Things like that that give more information both to the release team and the development community as well, because this is open source. And to collaborate, you really do need to communicate in depth. +And that can be just as subtle as commenting on issues like, hey, this commit doesn't say what it's doing. And for that reason on the release team, we can't assess its risk versus value. So could you give a little more information here? Things like that give more information both to the release team and the development community as well, because this is open source. And to collaborate, you really do need to communicate in depth. CRAIG BOX: Speaking of cultural changes, professional baker to Kubernetes' release lead sounds like quite a journey. @@ -234,7 +234,7 @@ JOSH BERKUS: And so that made a big difference. And the second thing that was pr JOSH BERKUS: We had a lot of problems with flaky tests. We have a lot of old tests that are not all that well maintained, and they're testing very complicated things like upgrading a cluster that has 40 nodes. And as a result, these tests have high failure rates that have very little to do with any change in the code. -And so one of the things that happened, and the reason we had a one-day delay in the release is, you know, we're a week out from release, and just by random luck of the draw, a bunch of these tests all at once got a run of failures. And it turned out that that run of failures didn't actually mean anything, having anything to do with Kubernetes. But there was no way for us to tell that without a lot of research, and we were not going to have enough time for that research without delaying the release. +And so one of the things that happened, and the reason we had a one-day delay in the release is, you know, we're a week out from release, and just by random luck of the draw, a bunch of these tests all at once got a run of failures. And it turned out that run of failures didn't actually mean anything, having anything to do with Kubernetes. But there was no way for us to tell that without a lot of research, and we were not going to have enough time for that research without delaying the release. So one of the things we're looking to address in the 1.12 cycle is to actually move some of those flaky tests out. Either fix them or move them out of the release blocking category. @@ -258,7 +258,7 @@ And then the second thing, like I said, is that we didn't have sort of major, un You know, number one was having the scalability tests start failing for unrelated reasons for a long period, which then masked the fact that they were actually failing for real reasons when we actually got them working again. And as a result, ending up debugging a major and super complicated scalability issue within days of what was supposed to be the original release date. So that was monkey wrench number one for the 1.10 cycle. -Monkey wrench number two for the 1.10 cycle was we got a security hole that needed to be patched. And so again, a week out from what was supposed to be the original release date, we were releasing a security update, and that security update required patching the release branch. And it turns out that that patch against the release branch broke a bunch of incoming features. And we didn't get anything of that magnitude in the 1.11 release, and I'm thankful for that. +Monkey wrench number two for the 1.10 cycle was we got a security hole that needed to be patched. And so again, a week out from what was supposed to be the original release date, we were releasing a security update, and that security update required patching the release branch. And it turns out that patch against the release branch broke a bunch of incoming features. And we didn't get anything of that magnitude in the 1.11 release, and I'm thankful for that. TIM PEPPER: Also, I would maybe argue in a way that a portion of that wasn't just luck. The extent to which this community has a good team, not just the release team but beyond, some of this goes to active work that folks all across the project, but especially in the contributor experience SIG are doing to cultivate a positive and inclusive culture here. And you really see that. When problems crop up, you're seeing people jump on and really try to constructively tackle them. And it's really fun to be a part of that. From 49ee537481182c96a14a43b76c9ebe865cbacd6f Mon Sep 17 00:00:00 2001 From: Chris Keele Date: Mon, 15 Oct 2018 16:17:13 -0500 Subject: [PATCH 159/181] Added CSS height property to #oceanNodes main to fix spacing in Firefox (#10169) * Changed CSS property for browser consistency. * Moved height property into tablet media query to fix issue on smaller screens. * Add changed to two more .content files. * Updated generated resources files, this time using Hugo extended. --- .../sass/styles.sass_a6e533854c4de092afe9278041939937.content | 3 ++- sass/_tablet.sass | 1 + static/css/styles.css | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content b/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content index 4ea962f457..cc1a88cd0f 100644 --- a/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content +++ b/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content @@ -1663,7 +1663,8 @@ html.search #docsContent { #oceanNodes main { position: relative; clear: both; - display: table; } + display: table; + height: 160px; } #oceanNodes main .content { display: table-cell; position: relative; diff --git a/sass/_tablet.sass b/sass/_tablet.sass index 15d5b496f4..2703f5c4d7 100644 --- a/sass/_tablet.sass +++ b/sass/_tablet.sass @@ -120,6 +120,7 @@ $feature-box-div-width: 45% position: relative clear: both display: table + height: 160px .content display: table-cell diff --git a/static/css/styles.css b/static/css/styles.css index 13b7cb8dd3..dec6c39224 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -1 +1 @@ -html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li + li{margin-left:0}#docs #vendorStrip{line-height:44px}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia > div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah > .title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion > .container:first-child > .item:first-child > .title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item > .title{color:#000}.pi-accordion a.item > .title:hover{color:#3371e3}.pi-accordion div.item > .title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on > .title:before{transform:rotate(90deg)}.pi-accordion .item.on > .wrapper > .content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent * + h2,#docsContent * + h3,#docsContent * + h4,#docsContent * + h5,#docsContent * + h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p + p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents > ul > li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video > .light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-color:#f7f7f7;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box > div:first-child{float:left}.feature-box > div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box > div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0 !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content * + h2,.ui-dialog-content * + h3,.ui-dialog-content * + h4,.ui-dialog-content * + h5,.ui-dialog-content * + h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p + p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0 !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0 !important;list-style:none !important;margin-bottom:0 !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0 !important}.ui-widget-content table{margin:0 !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div + div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0 !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li + li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video > .light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box > div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div + div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div + div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li + li{margin-left:20px}}/*# sourceMappingURL=styles.css.map */ +html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li + li{margin-left:0}#docs #vendorStrip{line-height:44px}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia > div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah > .title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion > .container:first-child > .item:first-child > .title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item > .title{color:#000}.pi-accordion a.item > .title:hover{color:#3371e3}.pi-accordion div.item > .title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on > .title:before{transform:rotate(90deg)}.pi-accordion .item.on > .wrapper > .content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent * + h2,#docsContent * + h3,#docsContent * + h4,#docsContent * + h5,#docsContent * + h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p + p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents > ul > li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video > .light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-color:#f7f7f7;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box > div:first-child{float:left}.feature-box > div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box > div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0 !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content * + h2,.ui-dialog-content * + h3,.ui-dialog-content * + h4,.ui-dialog-content * + h5,.ui-dialog-content * + h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p + p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0 !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0 !important;list-style:none !important;margin-bottom:0 !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0 !important}.ui-widget-content table{margin:0 !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div + div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0 !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li + li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video > .light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box > div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div + div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div + div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li + li{margin-left:20px}}/*# sourceMappingURL=styles.css.map */ From 9b4acdf940ab8b80a74daf3e862d2186f34b0be2 Mon Sep 17 00:00:00 2001 From: June Yi Date: Tue, 16 Oct 2018 06:42:29 +0900 Subject: [PATCH 160/181] Fix broken links for Korean tutorial pages (#10519) --- .../tutorials/kubernetes-basics/_index.html | 26 +++++++++---------- .../create-cluster/cluster-interactive.html | 2 +- .../create-cluster/cluster-intro.html | 2 +- .../deploy-app/deploy-interactive.html | 2 +- .../deploy-app/deploy-intro.html | 2 +- .../explore/explore-interactive.html | 2 +- .../explore/explore-intro.html | 2 +- .../expose/expose-interactive.html | 2 +- .../expose/expose-intro.html | 2 +- .../scale/scale-interactive.html | 2 +- .../kubernetes-basics/scale/scale-intro.html | 2 +- .../update/update-interactive.html | 2 +- .../update/update-intro.html | 2 +- 13 files changed, 25 insertions(+), 25 deletions(-) diff --git a/content/ko/docs/tutorials/kubernetes-basics/_index.html b/content/ko/docs/tutorials/kubernetes-basics/_index.html index da2487b5d1..9c02ebea83 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/_index.html +++ b/content/ko/docs/tutorials/kubernetes-basics/_index.html @@ -45,25 +45,25 @@ weight: 5
@@ -73,25 +73,25 @@ weight: 5
@@ -102,7 +102,7 @@ weight: 5 diff --git a/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html index 90b0abecaa..58bf5a5848 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html @@ -28,7 +28,7 @@ weight: 20
diff --git a/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html b/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html index ff101a1531..c18bbceef9 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html @@ -119,7 +119,7 @@ weight: 10 diff --git a/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html index ce3b72a2d4..f3d3f4c9df 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html @@ -32,7 +32,7 @@ weight: 20
diff --git a/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html b/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html index 7b524bea4d..3868b7d180 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html @@ -116,7 +116,7 @@ weight: 10 diff --git a/content/ko/docs/tutorials/kubernetes-basics/explore/explore-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/explore/explore-interactive.html index 9b90944a82..b6a8c51ec0 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/explore/explore-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/explore/explore-interactive.html @@ -32,7 +32,7 @@ weight: 20
diff --git a/content/ko/docs/tutorials/kubernetes-basics/explore/explore-intro.html b/content/ko/docs/tutorials/kubernetes-basics/explore/explore-intro.html index 0865caad9f..c2a174a9d7 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/explore/explore-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/explore/explore-intro.html @@ -131,7 +131,7 @@ weight: 10 diff --git a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html index 6d7a569862..0c14e5dd7b 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html @@ -26,7 +26,7 @@ weight: 20
diff --git a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html index 6ffa2c6126..9b0a00d8e5 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html @@ -104,7 +104,7 @@ weight: 10
diff --git a/content/ko/docs/tutorials/kubernetes-basics/scale/scale-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/scale/scale-interactive.html index 41dc8ce052..cdab6ad810 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/scale/scale-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/scale/scale-interactive.html @@ -29,7 +29,7 @@ weight: 20
diff --git a/content/ko/docs/tutorials/kubernetes-basics/scale/scale-intro.html b/content/ko/docs/tutorials/kubernetes-basics/scale/scale-intro.html index a3f7da1d4d..6c369c1a5d 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/scale/scale-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/scale/scale-intro.html @@ -123,7 +123,7 @@ weight: 10 diff --git a/content/ko/docs/tutorials/kubernetes-basics/update/update-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/update/update-interactive.html index 83ba8f581f..16ea8d01c1 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/update/update-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/update/update-interactive.html @@ -26,7 +26,7 @@ weight: 20
diff --git a/content/ko/docs/tutorials/kubernetes-basics/update/update-intro.html b/content/ko/docs/tutorials/kubernetes-basics/update/update-intro.html index ea011672a0..0b489f8c43 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/update/update-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/update/update-intro.html @@ -128,7 +128,7 @@ weight: 10 From 612f9c2aa42ee0e1ce6c29e403c3863d05552486 Mon Sep 17 00:00:00 2001 From: Carolyn Van Slyck Date: Mon, 15 Oct 2018 16:33:34 -0700 Subject: [PATCH 161/181] Use CoCC email for reporting CoC violations (#10621) * Use CoCC email for reporting CoC violations * Direct CoC concerns to the new committee --- CONTRIBUTING.md | 3 ++- content/en/community/_index.html | 4 ++-- content/en/community/code-of-conduct.md | 6 +++--- content/en/community/static/cncf-code-of-conduct.md | 3 ++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 13c07eb905..d5f2c4ce05 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,8 @@ These are just guidelines, not rules. Use your best judgment, and feel free to p ### Code of Conduct -Kubernetes follows the [Cloud Native Computing Foundation (CNCF) Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to Sarah Novotny [sarahnovotny@google.com](mailto:sarahnovotny@google.com) and/or Dan Kohn [dan@linuxfoundation.org](mailto:dan@linuxfoundation.org). +Kubernetes follows the [Cloud Native Computing Foundation (CNCF) Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to the +[Kubernetes Code of Conduct Committee](https://github.com/kubernetes/community/tree/master/committee-code-of-conduct) . ### Documentation and Site Decisions diff --git a/content/en/community/_index.html b/content/en/community/_index.html index 807faa6565..88cf6b07d5 100644 --- a/content/en/community/_index.html +++ b/content/en/community/_index.html @@ -44,8 +44,8 @@ cid: community enforces a Code of Conduct in all interactions. If you notice a violation of the Code of Conduct at an event or meeting, in Slack, or in another communication - mechanism, reach out to the - steering committee. + mechanism, reach out to the Kubernetes Code of Conduct Committee + conduct@kubernetes.io. Your anonymity will be protected.

diff --git a/content/en/community/code-of-conduct.md b/content/en/community/code-of-conduct.md index 3defdd4b72..ec85a0cf75 100644 --- a/content/en/community/code-of-conduct.md +++ b/content/en/community/code-of-conduct.md @@ -16,9 +16,9 @@ If you notice that this is out of date, please file an issue. If you notice a violation of the Code of Conduct at an event or meeting, in -Slack, or in another communication mechanism, reach out to the -steering committee. Your -anonymity will be protected. +Slack, or in another communication mechanism, reach out to +the [Kubernetes Code of Conduct Committee](https://github.com/kubernetes/community/tree/master/committee-code-of-conduct) . +Your anonymity will be protected.
{{< include "/static/cncf-code-of-conduct.md" >}} diff --git a/content/en/community/static/cncf-code-of-conduct.md b/content/en/community/static/cncf-code-of-conduct.md index e332919bca..3ee025ba34 100644 --- a/content/en/community/static/cncf-code-of-conduct.md +++ b/content/en/community/static/cncf-code-of-conduct.md @@ -34,7 +34,8 @@ Conduct may be permanently removed from the project team. This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a CNCF project maintainer, Sarah Novotny , and/or Dan Kohn . +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting +the [Kubernetes Code of Conduct Committee](https://github.com/kubernetes/community/tree/master/committee-code-of-conduct) . This Code of Conduct is adapted from the Contributor Covenant (http://contributor-covenant.org), version 1.2.0, available at From 5b29044902d854243f086f9e9a77fd33b73f6eee Mon Sep 17 00:00:00 2001 From: Tommy Hobin <36041286+tommyhobin@users.noreply.github.com> Date: Tue, 16 Oct 2018 03:34:50 +0200 Subject: [PATCH 162/181] Added Giant Swarm to On-Prem and Turnkey (#10193) Please contact me with questions or concerns. --- content/en/docs/setup/pick-right-solution.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/setup/pick-right-solution.md b/content/en/docs/setup/pick-right-solution.md index d14af36bae..3eb057e8fa 100644 --- a/content/en/docs/setup/pick-right-solution.md +++ b/content/en/docs/setup/pick-right-solution.md @@ -97,6 +97,7 @@ few commands. These solutions are actively developed and have active community s * [Madcore.Ai](https://madcore.ai/) * [Oracle Container Engine for K8s](https://docs.us-phoenix-1.oraclecloud.com/Content/ContEng/Concepts/contengprerequisites.htm) * [Pivotal Container Service](https://pivotal.io/platform/pivotal-container-service) +* [Giant Swarm](https://giantswarm.io) * [Rancher 2.0](https://rancher.com/docs/rancher/v2.x/en/) * [Stackpoint.io](/docs/setup/turnkey/stackpoint/) * [Tectonic by CoreOS](https://coreos.com/tectonic) @@ -113,6 +114,7 @@ few commands. * [Kubermatic](https://www.loodse.com) * [Kublr](https://kublr.com/) * [Pivotal Container Service](https://pivotal.io/platform/pivotal-container-service) +* [Giant Swarm](https://giantswarm.io) * [Rancher 2.0](https://rancher.com/docs/rancher/v2.x/en/) * [SUSE CaaS Platform](https://www.suse.com/products/caas-platform) * [SUSE Cloud Application Platform](https://www.suse.com/products/cloud-application-platform/) From 078fb57fe9df6ea72acf8baa2f2e35de8f12c5c2 Mon Sep 17 00:00:00 2001 From: Mike Wilson Date: Mon, 15 Oct 2018 21:37:14 -0400 Subject: [PATCH 163/181] Fixing a small issue (#10392) The docs say to backup, start a new application called new-etcd, but then to restore to etcd/0 and not new-etcd/0. Fixing that so it restores to that newly created unit. --- content/en/docs/getting-started-guides/ubuntu/backups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/getting-started-guides/ubuntu/backups.md b/content/en/docs/getting-started-guides/ubuntu/backups.md index f06a8edde3..226072ceb3 100644 --- a/content/en/docs/getting-started-guides/ubuntu/backups.md +++ b/content/en/docs/getting-started-guides/ubuntu/backups.md @@ -41,7 +41,7 @@ juju deploy etcd new-etcd The above code snippet will deploy a single unit of etcd, as 'new-etcd' ``` -juju run-action etcd/0 restore target=/mnt/etcd-backups +juju run-action new-etcd/0 restore target=/mnt/etcd-backups ``` Once the restore action has completed, evaluate the cluster health. If the unit From 7a12b9ed1cb50e582d6d3b82afbaa972bd3a1a33 Mon Sep 17 00:00:00 2001 From: LiuDui <1693291525@qq.com> Date: Tue, 16 Oct 2018 09:38:31 +0800 Subject: [PATCH 164/181] Fixed typo (#10425) --- ...017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md b/content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md index c1f895f1a2..8c609bfc88 100644 --- a/content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md +++ b/content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md @@ -13,7 +13,7 @@ Of course, this is not true at all. At Google, everything runs in a container, i If you’ve followed my previous posts, you know how to create a [MEAN Stack app with Docker](http://blog.sandeepdinesh.com/2015/07/running-mean-web-application-in-docker.html), then [migrate it to Kubernetes](https://medium.com/google-cloud/running-a-mean-stack-on-google-cloud-platform-with-kubernetes-149ca81c2b5d) to provide easier management and reliability, and [create a MongoDB replica set](https://medium.com/google-cloud/mongodb-replica-sets-with-kubernetes-d96606bd9474) to provide redundancy and high availability. -While the replica set in my previous blog post worked, there were some annoying steps that you needed to follow. You had to manually create a disk, a ReplicationController, and a service for each replica. Scaling the set up and down meant managing all of these resources manually, which is an opportunity for error, and would put your stateful application at risk In the previous example, we created a Makefile to ease the management of of these resources, but it would have been great if Kubernetes could just take care of all of this for us. +While the replica set in my previous blog post worked, there were some annoying steps that you needed to follow. You had to manually create a disk, a ReplicationController, and a service for each replica. Scaling the set up and down meant managing all of these resources manually, which is an opportunity for error, and would put your stateful application at risk In the previous example, we created a Makefile to ease the management of these resources, but it would have been great if Kubernetes could just take care of all of this for us. With StatefulSets, these headaches finally go away. You can create and manage your MongoDB replica set natively in Kubernetes, without the need for scripts and Makefiles. Let’s take a look how. From 45d3960599877337c42ac5d83aa77606e33087a9 Mon Sep 17 00:00:00 2001 From: Qiming Date: Tue, 16 Oct 2018 09:42:02 +0800 Subject: [PATCH 165/181] Fix javascript reference in API docs (#10553) The versions of javascripts used have been updated so the references in the generated API docs should be updated as well. Closes: #10385 --- .../docs/reference/generated/kubernetes-api/v1.12/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/docs/reference/generated/kubernetes-api/v1.12/index.html b/static/docs/reference/generated/kubernetes-api/v1.12/index.html index 658036873c..89b731b09e 100644 --- a/static/docs/reference/generated/kubernetes-api/v1.12/index.html +++ b/static/docs/reference/generated/kubernetes-api/v1.12/index.html @@ -49746,9 +49746,9 @@ $ curl -X GET 'http://127.0.0.1:8001/apis/extensions/v1beta1/watch/namespaces/de
- + - + From 09f15723b369b44b870775f776ea80349f15e5ff Mon Sep 17 00:00:00 2001 From: LiuDui <1693291525@qq.com> Date: Tue, 16 Oct 2018 09:44:26 +0800 Subject: [PATCH 166/181] Update 2018-10-08-support-for-azure-vmss.md (#10572) --- content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md b/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md index 6f1fba6409..79875cc21d 100644 --- a/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md +++ b/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md @@ -14,7 +14,7 @@ _Azure VMSS allow you to create and manage identical, load balanced VMs that aut Cluster autoscaler allows you to adjust the size of the Kubernetes clusters based on the load conditions automatically. -Another exciting feature which v1.12 brings to the table is the the ability to use User Assigned Identities with Kubernetes clusters [[12]](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview). +Another exciting feature which v1.12 brings to the table is the ability to use User Assigned Identities with Kubernetes clusters [[12]](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview). In this article, we will do a brief overview of VMSS, cluster autoscaler and user assigned identity features on Azure. From 12732a69103df7798d3df1b3b75df97f5a5dd9b8 Mon Sep 17 00:00:00 2001 From: Kaitlyn Barnard Date: Mon, 15 Oct 2018 18:50:17 -0700 Subject: [PATCH 167/181] Revert "Typo Fix" (#10624) * Revert "Use CoCC email for reporting CoC violations (#10621)" This reverts commit 612f9c2aa42ee0e1ce6c29e403c3863d05552486. * Revert "Fix broken links for Korean tutorial pages (#10519)" This reverts commit 9b4acdf940ab8b80a74daf3e862d2186f34b0be2. * Revert "Added CSS height property to #oceanNodes main to fix spacing in Firefox (#10169)" This reverts commit 49ee537481182c96a14a43b76c9ebe865cbacd6f. * Revert "fix some typos (#10614)" This reverts commit 98d2144036719fb06283dbd35d47d47d5e5e5bd2. * Revert "Typo Fix (#10620)" This reverts commit 4a0f0889fb711142fe65e28c5e15963030a07ab9. --- .../2018-10-15-Steering-Election-Results.md | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 content/en/blog/_posts/2018-10-15-Steering-Election-Results.md diff --git a/content/en/blog/_posts/2018-10-15-Steering-Election-Results.md b/content/en/blog/_posts/2018-10-15-Steering-Election-Results.md deleted file mode 100644 index ae5e2a9917..0000000000 --- a/content/en/blog/_posts/2018-10-15-Steering-Election-Results.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: blog -title: '2018 Steering Committee Election Results' -date: 2018-10-15 ---- - -**Authors**: Jorge Castro (Heptio), Ihor Dvoretskyi (CNCF), Paris Pittman (Google) - -## Results -The [Kubernetes Steering Committee Election](https://kubernetes.io/blog/2018/09/06/2018-steering-committee-election-cycle-kicks-off/) is now complete and the following candidates came ahead to secure two year terms that start immediately: - -* Aaron Crickenberger, Google, [@spiffxp](https://github.com/spiffxp) -* Davanum Srinivas, Huawei, [@dims](https://github.com/dims) -* Tim St. Clair, Heptio, [@timothysc](https://github.com/timothysc) - -## Big Thanks! - -* Steering Committee Member Emeritus [Quinton Hoole](https://github.com/quinton-hoole) for his service to the community over the past year. -* The candidates that came forward to run for election. May we always have a strong set of people who want to push community forward like yours in every election. -* All 307 voters who cast a ballot. -* And last but not least...Cornell University for hosting [CIVS](https://civs.cs.cornell.edu/)! - -## Get Involved with the Steering Committee -You can follow along to Steering Committee [backlog items](https://git.k8s.io/steering/backlog.md) and weigh in by filing an issue or creating a PR against their [repo](https://github.com/kubernetes/steering). They meet bi-weekly on [Wednesdays at 8pm UTC](https://github.com/kubernetes/steering) and regularly attend Meet Our Contributors. - -Steering Committee Meetings: - -* [YouTube Playlist](https://www.youtube.com/playlist?list=PL69nYSiGNLP1yP1B_nd9-drjoxp0Q14qM) - -Meet Our Contributors Steering AMA’s: - -* [Oct 3 2018](https://youtu.be/x6Jm8p0K-IQ) -* [Sept 5 2018](https://youtu.be/UbxWV12Or58) From f5f80ff508f7e0843cc7ad516537018d5c9c70f2 Mon Sep 17 00:00:00 2001 From: Takuya N Date: Tue, 16 Oct 2018 10:55:19 +0900 Subject: [PATCH 168/181] Use masked white logo for ancestry (#10544) Signed-off-by: Takuya Noguchi --- content/en/case-studies/ancestry/index.html | 2 +- static/images/ancestry_logo.png | Bin 0 -> 675 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 static/images/ancestry_logo.png diff --git a/content/en/case-studies/ancestry/index.html b/content/en/case-studies/ancestry/index.html index 8bd998392a..a992a284ac 100644 --- a/content/en/case-studies/ancestry/index.html +++ b/content/en/case-studies/ancestry/index.html @@ -7,7 +7,7 @@ css: /css/style_ancestry.css ---
-

CASE STUDY:
Digging Into the Past With New Technology

+

CASE STUDY:
Digging Into the Past With New Technology

diff --git a/static/images/ancestry_logo.png b/static/images/ancestry_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1200759565ae65c4385f2ed5c9f6fddebe5829d6 GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^+kn`R5lAq^+vS}EQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aistgPb%?u1b{{!il3=E|P3=FRl7#OT(FffScPl`Y422{&b666=mz)&{%tObad zO>_%)r1c48n{Iv*t(u1=&kHeO=ifaWQiWG3=;#V+9lvNKW)C z1JVzHxD$v)fmmy1Nm>8{17nV-i(`nz>9dy%^9~t^uqC)p{1En?fg^qacQkv}cMn?z zuO21S(m5=p7{B~0Zd%QmChpdUUhpl>=nP8yxK3m;@Q_v z8ltc7c)!~AUCKPSKI6`|+6xx>y9=gsStNG}FWNhI`QKjEeO8q+s}1a?@T^F6Z(u4~ zQES>LD#3T>lk%sNH?M0o@vKRi)E}3?ZGXD8dQZf&z&W!V0uI{$KGeMAlfWjMPnUyO zOdb?}shyM9!#-oV)_3O__1ylKO|5iQ8@MhW|M4nh@$aq1B`a(a?pWv>$d$9rcoW0N z$x-^w^7tQtMPE<0U$dN$HNQ4+cmCeU2Y0NVxAW8nb9p{5Q9BYa`4s2T_e{-vLT=1E zuO10Gr&O}RVCx+(i%lSn_F)fD0|PFGxxH~)ct#1m(-pO`u5LdUUs^CcFZXmaExY@7YPa;dU32H>%bmP?MqYN!?H{{&qxFH|uUg_7 zQIe8al4_M)lnSI6j0_AdbPWx34J<+oO{`1}t&GjI4J@q;4BD*TaH43)%}>cpt3+rp e4lyvWGPD3Hg=h$zIj<6^fx*+&&t;ucLK6V54*6vO literal 0 HcmV?d00001 From ca8728f850bcf805415ac0f6ec656202a0782157 Mon Sep 17 00:00:00 2001 From: Miguel David Date: Tue, 16 Oct 2018 02:56:40 +0100 Subject: [PATCH 169/181] Change deb repo from http to https (#10173) * Change deb repo from http to https Given that http://apt.kubernetes.io/ is redirecting to https://packages.cloud.google.com/apt/ which is secure, then the suggestion is to change the source list to point to the correct destination. * change apt source to https with apt.kubernetes.io --- .../docs/setup/independent/install-kubeadm.md | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/content/en/docs/setup/independent/install-kubeadm.md b/content/en/docs/setup/independent/install-kubeadm.md index f116eae34f..2b4413ea8d 100644 --- a/content/en/docs/setup/independent/install-kubeadm.md +++ b/content/en/docs/setup/independent/install-kubeadm.md @@ -23,11 +23,11 @@ see the [Using kubeadm to Create a Cluster](/docs/setup/independent/create-clust - HypriotOS v1.0.1+ - Container Linux (tested with 1800.6.0) * 2 GB or more of RAM per machine (any less will leave little room for your apps) -* 2 CPUs or more +* 2 CPUs or more * Full network connectivity between all machines in the cluster (public or private network is fine) * Unique hostname, MAC address, and product_uuid for every node. See [here](#verify-the-mac-address-and-product-uuid-are-unique-for-every-node) for more details. * Certain ports are open on your machines. See [here](#check-required-ports) for more details. -* Swap disabled. You **MUST** disable swap in order for the kubelet to work properly. +* Swap disabled. You **MUST** disable swap in order for the kubelet to work properly. {{% /capture %}} @@ -105,10 +105,10 @@ You will install these packages on all of your machines: * `kubectl`: the command line util to talk to your cluster. -kubeadm **will not** install or manage `kubelet` or `kubectl` for you, so you will -need to ensure they match the version of the Kubernetes control panel you want +kubeadm **will not** install or manage `kubelet` or `kubectl` for you, so you will +need to ensure they match the version of the Kubernetes control panel you want kubeadm to install for you. If you do not, there is a risk of a version skew occurring that -can lead to unexpected, buggy behaviour. However, _one_ minor version skew between the +can lead to unexpected, buggy behaviour. However, _one_ minor version skew between the kubelet and the control plane is supported, but the kubelet version may never exceed the API server version. For example, kubelets running 1.7.0 should be fully compatible with a 1.8.0 API server, but not vice versa. @@ -119,7 +119,7 @@ This is because kubeadm and Kubernetes require [special attention to upgrade](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-11/). {{}} -For more information on version skews, please read our +For more information on version skews, please read our [version skew policy](/docs/setup/independent/create-cluster-kubeadm/#version-skew-policy). {{< tabs name="k8s_install" >}} @@ -128,7 +128,7 @@ For more information on version skews, please read our apt-get update && apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat </etc/apt/sources.list.d/kubernetes.list -deb http://apt.kubernetes.io/ kubernetes-xenial main +deb https://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl @@ -164,7 +164,7 @@ systemctl enable kubelet && systemctl start kubelet You have to do this until SELinux support is improved in the kubelet. - Some users on RHEL/CentOS 7 have reported issues with traffic being routed incorrectly due to iptables being bypassed. You should ensure `net.bridge.bridge-nf-call-iptables` is set to 1 in your `sysctl` config, e.g. - + ```bash cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 @@ -251,7 +251,3 @@ If you are running into difficulties with kubeadm, please consult our [troublesh * [Using kubeadm to Create a Cluster](/docs/setup/independent/create-cluster-kubeadm/) {{% /capture %}} - - - - From df90172c3b5b8c74507b239f86ec7732e9ecca0a Mon Sep 17 00:00:00 2001 From: AdamDang Date: Tue, 16 Oct 2018 15:16:50 +0800 Subject: [PATCH 170/181] Update implementation-details.md (#10626) --- .../reference/setup-tools/kubeadm/implementation-details.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md index 67fcee964a..09cc412595 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -86,7 +86,7 @@ In any case the user can skip specific preflight checks (or eventually all prefl - [error] if not Kernel 3.10+ or 4+ with specific KernelSpec - [error] if required cgroups subsystem aren't in set up - if using docker: - - [warning/error] if Docker service does not exists, if it is disabled, if it is not active. + - [warning/error] if Docker service does not exist, if it is disabled, if it is not active. - [error] if Docker endpoint does not exist or does not work - [warning] if docker version >17.03 - If using other cri engine: From ad54de449f49064fb3fa701001c014544ab92114 Mon Sep 17 00:00:00 2001 From: Takuya N Date: Tue, 16 Oct 2018 20:34:55 +0900 Subject: [PATCH 171/181] Improve mobile user experience on pages under /docs (#10072) Force #docs #vendorStrip elements to use overflow-x: scroll in CSS. Signed-off-by: Takuya Noguchi --- .../styles.sass_a6e533854c4de092afe9278041939937.content | 4 +++- sass/_base.sass | 2 ++ static/css/case-study-styles.css | 3 ++- static/css/case-study-styles.css.map | 8 +++++++- static/css/styles.css | 3 ++- static/css/styles.css.map | 8 +++++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content b/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content index cc1a88cd0f..fbbc79a5e5 100644 --- a/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content +++ b/resources/_gen/assets/sass/sass/styles.sass_a6e533854c4de092afe9278041939937.content @@ -572,7 +572,9 @@ section { margin-left: 0; } #docs #vendorStrip { - line-height: 44px; } + line-height: 44px; + max-width: 100%; + overflow-x: scroll; } #docs #vendorStrip ul { float: none; } #docs #vendorStrip #searchBox { diff --git a/sass/_base.sass b/sass/_base.sass index f63f3214ff..21884cc985 100644 --- a/sass/_base.sass +++ b/sass/_base.sass @@ -556,6 +556,8 @@ section #docs #vendorStrip line-height: 44px + max-width: 100% + overflow-x: scroll ul float: none diff --git a/static/css/case-study-styles.css b/static/css/case-study-styles.css index 4b149fa59d..15e858f9fa 100644 --- a/static/css/case-study-styles.css +++ b/static/css/case-study-styles.css @@ -1 +1,2 @@ -html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li + li{margin-left:0}#docs #vendorStrip{line-height:44px}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia > div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah > .title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion > .container:first-child > .item:first-child > .title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item > .title{color:#000}.pi-accordion a.item > .title:hover{color:#3371e3}.pi-accordion div.item > .title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on > .title:before{transform:rotate(90deg)}.pi-accordion .item.on > .wrapper > .content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent * + h2,#docsContent * + h3,#docsContent * + h4,#docsContent * + h5,#docsContent * + h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p + p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents > ul > li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video > .light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-color:#f7f7f7;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box > div:first-child{float:left}.feature-box > div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box > div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0 !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content * + h2,.ui-dialog-content * + h3,.ui-dialog-content * + h4,.ui-dialog-content * + h5,.ui-dialog-content * + h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p + p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0 !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0 !important;list-style:none !important;margin-bottom:0 !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0 !important}.ui-widget-content table{margin:0 !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div + div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0 !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}hr{background-color:#999}h2{margin-bottom:15px !important}.subhead{padding-bottom:2% !important;padding-top:0% !important}.details{margin-left:1.9%;padding-right:5%;font-size:16px !important;padding-bottom:2% !important}.section1{margin-bottom:3%}.section1 .cols{width:80% !important;margin-left:6.8%;padding-top:1.5%}.section1 .cols .col1{width:52% !important;font-weight:300 !important}.section1 .cols .col2{width:46% !important}.banner2text{width:63%;padding-top:10%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.banner3text,.banner4text,.banner5text{width:63%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.fullcol{float:initial !important}body footer{background-color:#585858 !important}.section1{float:left !important}.banner1{padding-left:11.9% !important}.banner2{float:initial !important;padding-bottom:2% !important}footer{padding:0% 7%}.banner4,.banner3,.banner5{float:initial !important}@media screen and (max-width: 910px){.banner2text{width:47%;padding-top:45%}.details{margin-left:0%;margin-bottom:3%}.subhead{padding-bottom:0% !important;padding-top:0% !important}.banner3{width:100% !important}}@media screen and (max-width: 780px){.section1 .cols{width:100% !important;margin-left:0%;padding-top:5%}.section1 .cols .col1,.section1 .cols .col2{width:100% !important;margin-left:0% !important}.fullcol{width:90% !important;margin-left:5% !important}.banner1{padding-left:10% !important;margin-bottom:6% !important}.banner2text{padding-top:60% !important;padding-bottom:2% !important}}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li + li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video > .light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box > div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div + div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div + div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li + li{margin-left:20px}}/*# sourceMappingURL=case-study-styles.css.map */ +html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,0.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,0.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,0.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px;max-width:100%;overflow-x:scroll}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0px}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,0.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,0.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#kubeweekly{background-color:#f7f7f7;padding-top:60px;padding-bottom:140px;background-size:auto;font-family:"Roboto Mono",monospace !important;font-size:24px;font-weight:bold}#kubeweekly h5{font-size:20px}.subscribe-button{border-radius:6px;padding:0 20px;line-height:31px;color:#fff;background-color:blue;text-decoration:none;font-size:14px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,0.24),0 0 5px rgba(0,0,0,0.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0px !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0px}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0px !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0px !important;list-style:none !important;margin-bottom:0px !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0px !important}.ui-widget-content table{margin:0px !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0px !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}hr{background-color:#999}h2{margin-bottom:15px !important}.subhead{padding-bottom:2% !important;padding-top:0% !important}.details{margin-left:1.9%;padding-right:5%;font-size:16px !important;padding-bottom:2% !important}.section1{margin-bottom:3%}.section1 .cols{width:80% !important;margin-left:6.8%;padding-top:1.5%}.section1 .cols .col1{width:52% !important;font-weight:300 !important}.section1 .cols .col2{width:46% !important}.banner2text{width:63%;padding-top:10%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.banner3text,.banner4text,.banner5text{width:63%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.fullcol{float:initial !important}body footer{background-color:#585858 !important}.section1{float:left !important}.banner1{padding-left:11.9% !important}.banner2{float:initial !important;padding-bottom:2% !important}footer{padding:0% 7%}.banner4,.banner3,.banner5{float:initial !important}@media screen and (max-width: 910px){.banner2text{width:47%;padding-top:45%}.details{margin-left:0%;margin-bottom:3%}.subhead{padding-bottom:0% !important;padding-top:0% !important}.banner3{width:100% !important}}@media screen and (max-width: 780px){.section1 .cols{width:100% !important;margin-left:0%;padding-top:5%}.section1 .cols .col1,.section1 .cols .col2{width:100% !important;margin-left:0% !important}.fullcol{width:90% !important;margin-left:5% !important}.banner1{padding-left:10% !important;margin-bottom:6% !important}.banner2text{padding-top:60% !important;padding-bottom:2% !important}}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li+li{margin-left:20px}} +/*# sourceMappingURL=case-study-styles.css.map */ diff --git a/static/css/case-study-styles.css.map b/static/css/case-study-styles.css.map index 0198cc42c4..d685cfb6d1 100644 --- a/static/css/case-study-styles.css.map +++ b/static/css/case-study-styles.css.map @@ -1 +1,7 @@ -{"version":3,"sourceRoot":"","sources":["../../sass/_reset.sass","../../sass/_skin.sass","../../sass/_size.sass","../../sass/_base.sass","../../sass/_case-studies.sass","../../sass/_tablet.sass","../../sass/_desktop.sass"],"names":[],"mappings":"AAAA,UACC,SACA,UAGD,aACC,aAED,OACC,eAED,MACC,gBAED,GACC,SACA,UAED,EACC,qBAGD,OACC,cACA,WAED,YACC,WAED,OACC,YAED,MACC,WAED,QACC,kBC1BD,UACC,sBACA,YANW,oBAOX,gBACA,SACA,SAED,KACC,YAZW,oBAcZ,WACC,gBAED,MACC,gBDxBD,UACC,SACA,UAGD,aACC,aAED,OACC,eAED,MACC,gBAED,GACC,SACA,UAED,EACC,qBAGD,OACC,cACA,WAED,YACC,WAED,OACC,YAED,MACC,WAED,QACC,kBEpCD,GACC,UCEc,KDDd,YCEgB,QDChB,UCCc,iBACE,KDCjB,GACC,eACA,iBAED,GACC,UCDc,KDEd,YCDgB,KDGjB,GACC,UCFc,KDGd,YCFgB,KDIjB,EACC,UCHa,KDIb,YCHe,KDKhB,4BACC,aCFqB,KDGrB,cCHqB,KDKrB,2CACC,MCJW,KDKX,UCJe,KDMjB,OACC,OCLe,KDOhB,aACC,OCRe,KDSf,YCTe,KDWf,yBACC,YCRwB,KDU1B,WACC,MCTgB,KDUhB,OCVgB,KDYjB,SACC,QCTkB,aDWlB,YACC,cCX0B,IDa3B,YACC,cCb0B,KDe3B,kBACC,MCfc,IDiBf,6BACC,YCjB4B,cDmB7B,qBACC,WCnBiC,KDqBlC,uBACC,OCrB0B,KDsB1B,YCtB0B,KDuB1B,UCtB+B,KDyBhC,kDACC,YCvCwB,KDyC1B,MACC,YCzBkB,KD6BjB,8BACC,aCxDmB,KDyDnB,cCzDmB,KD2DtB,aACC,OC/BqB,KDgCrB,YChCqB,KDiCrB,UChCwB,KAWzB,KACC,sBAED,QACC,kBACA,sBAGA,qCACC,kBACA,YAEF,EACC,eACA,gBAGD,QACC,qBACA,kBACA,eACA,iBACA,WACA,iBFvFM,QEwFN,qBAED,YACC,eACA,MACA,OACA,WACA,YACA,aAID,OACC,eACA,MACA,OACA,WACA,aACA,6BACA,6BACA,gBACA,eACA,kBAGD,MACC,kBACA,WACA,cACA,YACA,YACA,MACA,OACA,eACA,2CACA,wBACA,kCACA,4BAIA,qBACC,eACA,SACA,UACA,WACA,YACA,2CACA,kCACA,4BACA,qBACA,kBACA,eACA,cAED,8BACC,aAED,YACC,kBACA,SACA,SACA,gCACA,cACA,WACA,YACA,0CAGD,8BACC,gDAGF,aACC,YAED,yBACC,aAED,UACC,sBACA,6BACA,eAEA,gBACC,sBACA,MF5KU,QE8KZ,eACC,QACA,YACA,6BACA,6BACA,kBACA,mBACA,sBACA,gBACA,eAED,WACC,qBACA,kBACA,sBACA,UACA,SACA,gBAEA,kDACC,kBACA,SACA,UACA,WACA,iBFxMK,QEyML,eACA,WAED,eACC,oBAED,kBACC,QAED,iBACC,WAGA,oEACC,sBAGF,YACC,MF3NK,QE4NL,mBAED,cACC,mBACA,gBACA,WAED,kBACC,WACA,mBAGA,cACC,MFzOI,QE0OJ,qBAIH,cACC,aAEA,iBACC,qBACA,kBAEA,mBACC,WACA,gBACA,UACA,kBAEA,gCACC,kBACA,WACA,WACA,WACA,YACA,OACA,gBAED,4BACC,+BAEF,oBACC,aACA,eACA,SACA,gBAEA,uBACC,cACA,YAEA,yBACC,WFhRO,QEiRP,WACA,YAGD,oCACC,kBAGH,0BACC,cAIF,0DACC,MF/RU,QEiSV,4EACC,qBAEH,mCACC,gBACA,MFtSW,QEwSZ,oIACC,WF3SM,QE+SN,iBACC,sBAKD,eACC,gBAED,sBACC,cACA,aAED,iBACC,yBACA,aAGA,yBACC,UAED,uDACC,UACA,uBAED,4BACC,wBAED,2BACC,yBAGF,kDACC,YACA,iBFjVK,QEkVL,aFlVK,QEsVN,kCACC,6BAED,wCACC,aFxVU,QEyVV,MFzVU,QE2VV,oDACC,aF9VI,QE+VJ,iBF/VI,QEgWJ,WAGD,oMACC,iBFlWS,QEuWZ,MACC,0CACA,iBFzWW,QE0WX,kBACA,eACA,gBACA,gBACA,kBAEA,oBACC,cACA,oBACA,WACA,WACA,sCACA,WAIA,gBACC,aAED,gBACC,mBAEH,kBACC,aAGD,aACC,kBACA,sCACA,gBACA,mBACA,kBAEA,kBACC,2BAEA,sBACC,WACA,kBAIH,OACC,WACA,0CACA,iBFvZW,QEyZX,YACC,eAGA,aACC,WACA,kBACA,qBACA,cACA,eACA,gBACA,WACA,qBAGF,eACC,cAEA,mBACC,kBACA,mBAED,8BACC,cAED,oBACC,cACA,kBAED,qBACC,kBAIH,mBACC,6BACA,aACA,eACA,gBACA,WACA,sBACA,eAEA,+BACC,iBFtcW,QEucX,MFtcU,QEwcZ,UACC,qBACA,gDACA,4BACA,qBACA,WACA,YACA,kBACA,kBAEA,gBACC,sBAED,eACC,kBACA,cACA,SACA,gBAED,iBACC,sBACA,WACA,YAEA,uBACC,MFneI,QEqeP,UACC,wBAEA,gBACC,2BAEF,iBACC,4BAEA,uBACC,+BAEF,QACC,6BAEA,cACC,gCAEF,SACC,6BAEA,eACC,gCAEF,eACC,6BAEA,qBACC,gCAEF,WACC,6BAEA,iBACC,gCAEF,UACC,aAED,QACC,sBAED,MACC,iBF9gBW,QEghBX,SACC,cACA,iBAEF,aACC,kBAEA,gBACC,WAED,gBACC,qBACA,YAED,eACC,cACA,YACA,WACA,gBACA,iBAED,qBACC,cAID,mBACC,iBAEA,sBACC,WAED,8BACC,WACA,cACA,UACA,cACA,YACA,iBACA,kBAEA,qCACC,kBACA,WACA,YACA,WACA,UACA,QACA,8CACA,4BACA,0BACA,UAEF,2BACC,WACA,eACA,YACA,iBACA,eACA,mBACA,gBACA,YACA,kBACA,kBAGH,cACC,kBACA,4BACA,gBACA,eAGA,oBACC,YAEF,SACC,eACA,sBACA,MACA,OACA,QACA,aACA,gBACA,eACA,eACA,eAIC,uBACC,iBF5mBU,QE6mBV,8BACA,8BACA,iBACA,MFjnBI,QEonBN,eACC,gBAED,mBACC,kBACA,YACA,gBACA,gBAGD,gFACC,eACA,gBACA,gBAED,oFACC,6BAED,oBACC,gBAED,qBACC,MFxoBU,QEyoBV,kBACA,8BACA,eACA,eAEA,2BACC,MFjpBI,QEmpBN,8BACC,WAEA,oCACC,MFvpBI,QE0pBL,uCACC,WACA,kBACA,SACA,SACA,mBACA,2BACA,yDACA,uBACA,eAEF,uBACC,kBACA,WACA,sBAED,uBACC,kBACA,UACA,eAGA,uCACC,wBAED,6CACC,UAGH,GACC,kBAED,GACC,mBAED,aACC,aACA,eACA,MACA,WACA,YACA,UACA,uBAEA,gBACC,UAED,sBACC,eACA,MACA,OACA,WACA,YACA,gCAED,mBACC,kBACA,MACA,QACA,YACA,sBACA,cACA,eAED,sBACC,YACA,gBAED,sBACC,SACA,iBACA,sBAED,gBACC,gBAED,gBACC,kBACA,cACA,WACA,gBACA,sBACA,6BAED,eACC,qBACA,WACA,YACA,iBACA,gCACA,eACA,MFrvBK,QEuvBN,qBACC,gBACA,UAED,mBACC,eAEA,sBACC,gBAED,qBACC,YACA,iBACA,eACA,WAGH,wBACC,kBACA,MACA,QACA,WACA,YAEA,6DACC,WACA,kBACA,oBACA,SACA,UACA,WACA,sBAED,+BACC,wBAED,8BACC,yBAEF,aACC,kBACA,YACA,WAKA,oGACC,gBAED,gGACC,mBACA,gBACA,mBACA,oBAGA,0IACC,cACA,YACA,kBACA,OAhBiB,MAiBjB,kBAEF,gCACC,6BAED,gBACC,eACA,mBAED,gBACC,eAED,gBACC,eACA,gBACA,kBAED,gBACC,eACA,gBAED,gCACC,eACA,gBAED,eACC,eACA,gBACA,mBAED,mBACC,gBAED,kBACC,qBACA,sBACA,iBFx1BW,QEy1BX,MFx1BU,QEy1BV,YFp1BU,wBEq1BV,wBACA,eACA,iBACA,gBAED,oBACC,MFl2BK,QEm2BL,0BAED,yCACC,SACA,UAED,0EACC,oCAED,wCACC,cAED,sBACC,UAED,iBACC,yBACA,cACA,cACA,aACA,kBACA,gBAED,8HACC,kBACA,6BAED,0BACC,mBAED,oFACC,qBAED,6BACC,4BACA,wBAED,mEACC,sBACA,wCAED,8BACC,oBAED,mBACC,gBAED,mBACC,mBAED,gCACC,cACA,kBACA,gBAED,4EACC,eAED,gBACC,oBACA,eACA,mBAED,mBACC,WACA,sBACA,iBACA,gBACA,mBAED,mDACC,iBFz6BW,QE26BZ,mBACC,sBACA,WAED,gCACC,YACA,gBACA,SAED,gBACC,mBAED,gBACC,gBAED,6BACC,kBACA,UACA,UACA,WACA,YACA,iBACA,kBACA,mBACA,iBACA,gBACA,0DACA,8BACA,0BAED,yDACC,mBAEA,8HACC,gBACA,MF/8BI,QEi9BL,+DACC,eACA,SAED,+DACC,UACA,kBACA,gBAED,6DACC,kBACA,MF59BI,QE69BJ,gBAEF,iBACC,eAGA,wCACC,gBAED,kEACC,gBAeH,cACC,eACA,SAED,UACC,WACA,eACA,iBACA,WAGD,yBACC,kBACA,WACA,UACA,gBACA,cAEA,yCACC,aAED,+BACC,SACA,gBAED,4BACC,UAED,4BACC,gBACA,gBACA,iBACA,iBA0BA,0CACC,4CAEF,YACC,gBACA,mBAEA,iBACC,eACA,mBAED,yBACC,aAIH,YACC,YAnCuB,KAoCvB,eApCuB,KAsCvB,cACC,MFrkCK,QEukCN,iBACC,cA1CsB,KA2CtB,iBAED,2BACC,cACA,mBACA,kBAEA,+BACC,WACA,gBAGD,4CACC,eAEA,gDACC,gBAEH,eACC,cA5D6B,KAgE/B,OACC,OA9DsB,MAgEvB,OACC,WACA,kBACA,kCACA,sBAGA,qBACC,aACA,kBACA,QACA,SACA,YACA,mBACA,gCACA,WAED,UACC,eACA,iBACA,mBAED,SACC,mBAED,wBACC,kBACA,eACA,iBF7nCU,QE8nCV,kBACA,MF7nCM,KE8nCN,4BAED,+BACC,kBACA,eACA,sBACA,kBACA,MFzoCK,QE0oCL,4BACA,mBAEA,sCACC,WACA,kBH9lCF,kBACA,IAFmC,IAGnC,KG6lCsB,KH5lCtB,gCG6lCE,QACA,SACA,mBACA,8BACA,yDAEF,8BHtmCA,kBACA,IAFmC,IAGnC,KAHwB,IAIxB,gCGqmCC,WACA,YACA,kBACA,6BACA,sCACA,iBAEA,oCH/mCD,kBACA,IAFmC,IAGnC,KAHwB,IAIxB,gCG8mCE,UACA,WACA,QACA,SACA,mBACA,8BACA,sDAEH,aHjoCC,eACA,MACA,OACA,YACA,aG+nCA,gCACA,aAEA,oBH9nCA,kBACA,IAFmC,IAGnC,KAHwB,IAIxB,gCAIA,MADkF,KAElF,YACA,2BACA,WAJwG,KG4nCxG,0BACC,kBACA,SACA,WACA,WACA,YACA,6BACA,eAEA,iEACC,WACA,kBACA,oBACA,SACA,UACA,WACA,sBAED,iCACC,wBAED,gCACC,yBAED,gCACC,kBAGH,MACC,iBACA,qBACA,iBFjtCY,QEktCZ,6CACA,iCACA,4BACA,sBAGD,UACC,kBACA,iBF1tCY,QE2tCZ,wCACA,gCACA,4BACA,qBAED,aAEC,WACA,gBACA,WAEA,gBACC,mBACA,mBAED,+BACC,WAED,8BACC,YAGD,aACC,cA7M0B,KA+M3B,uBACC,cA9M0B,EAgN1B,6BACC,MAlNqB,KAmNrB,cAjN6B,KA0N9B,sGACC,4CAEF,iCACC,oBAED,+CACC,eAEA,yDACC,eAED,mDACC,MFhxCI,QEkxCL,iEACC,mBACA,eAEA,+eACC,mBACA,iBACA,eACA,mBAED,iGACC,iBF5xCS,QE8xCX,6EACC,kBACA,iBACA,cAEA,qFACC,WACA,YACA,iBFtyCS,QEwyCX,6EACC,kBACA,iBACA,cAEA,qFACC,WACA,YACA,iBF7yCI,KE8yCJ,6DAEF,mFACC,kBACA,WACA,YACA,iBACA,iBACA,iBAED,+EACC,kBACA,WACA,YACA,iBACA,iBACA,iBAED,6DACC,kBACA,SACA,WACA,YAGH,SACC,gCAED,2BACC,gCACA,uBACA,qCACC,yBACD,kCACC,gCACA,iCACA,oCACA,yBACA,+CACA,mCACA,0BACA,4BACA,yBAEF,sBACC,2BACA,iCACA,4BAEA,kDACC,2BACA,2BAED,wBACC,wBAED,2BACC,gCACA,iCACA,oCACA,yBACA,+CACA,mCACA,0BACA,4BACA,yBAEF,WACC,8BACA,aAED,mBACC,kBACA,YACA,WAKA,kIACC,gBAED,oIACC,mBACA,gBACA,mBACA,oBAGA,8KACC,cACA,YACA,kBACA,OAhBiB,MAiBjB,kBAEF,4CACC,6BAED,sBACC,eACA,mBAED,sBACC,eAED,sBACC,eACA,gBACA,kBAED,sBACC,eACA,gBAED,4CACC,eACA,gBAED,qBACC,eACA,gBACA,mBAED,yBACC,gBAED,wBACC,qBACA,sBACA,iBFn7CW,QEo7CX,MFn7CU,QEo7CV,YF/6CU,wBEg7CV,wBACA,eACA,iBACA,gBAED,0BACC,MF77CK,QE87CL,0BAED,qDACC,SACA,UAED,4FACC,oCAED,oDACC,cAED,4BACC,UAED,uBACC,yBACA,cACA,cACA,aACA,kBACA,gBAED,kKACC,oBACA,kBACA,6BAED,gCACC,mBAED,sGACC,qBAED,mCACC,4BACA,wBAED,+EACC,sBACA,wCAED,oCACC,oBAED,yBACC,gBAED,yBACC,mBAED,4CACC,cACA,kBACA,gBAED,oGACC,eAED,sBACC,oBACA,eACA,mBAED,yBACC,WACA,sBACA,iBACA,gBACA,mBAED,+DACC,iBFrgDW,QEugDZ,yBACC,sBACA,WAED,4CACC,YACA,gBACA,SAED,sBACC,mBAED,sBACC,gBAED,mCACC,kBACA,UACA,UACA,WACA,YACA,iBACA,kBACA,mBACA,iBACA,gBACA,0DACA,8BACA,0BAED,iCACC,mBAEA,wEACC,gBACA,MF3iDI,QE6iDL,oCACC,eACA,SAED,oCACC,UACA,kBACA,gBAED,mCACC,kBACA,MFxjDI,QEyjDJ,gBAEF,uBACC,eAED,qBAEC,0BAeF,sBACC,8BAGD,kBACC,kCACA,wCACA,oBAGA,oCACC,qBACA,2BACA,2BACA,2BAGD,qBACC,2BAED,qBACC,8BAEF,mBACC,oBAEA,yBACC,oBAEF,wBACC,iCAED,gBACC,gCAIA,0BACC,kBAED,aACC,mBAED,aACC,mBACA,mBAEA,gBACC,aAEF,qBACC,gBAEA,yBACC,WACA,WACA,aACA,kBACA,+BACA,qBACA,4BAED,sCACC,+CAED,sCACC,8CAED,sCACC,6CAED,sCACC,qDAED,+BACC,gBACA,cAED,uBACC,qBACA,MF/pDI,QEgqDJ,eACA,gBACA,qBACA,mBAED,8CACC,kBACA,WAKD,qBACC,eAED,mBACC,eAGF,0BACC,kBACA,kBACA,mBAEA,8BACC,oBAED,8BACC,kBACA,qBACA,mBACA,WACA,iBACA,mBACA,mBACA,+BAED,4BACC,eAED,4BACC,kBACA,aACA,SACA,2BACA,MF7sDI,QE8sDJ,gBAKH,uCACC,UAGD,iDACC,oBAGD,wBACC,gBAID,wBACC,gBACA,iBAED,aACC,mBAED,oBACC,eACA,WAGD,iBACC,YACA,eAED,qBACC,WACA,eAED,2BACC,YACA,iBAED,kBACC,gCACA,eACA,WACA,iBC1vDD,GACE,sBAEF,GACE,8BAEF,SACE,6BACA,0BAEF,SACE,iBACA,iBACA,0BACA,6BAEF,UACE,iBACA,gBACE,qBACA,iBACA,iBACA,sBACE,qBACA,2BACF,sBACE,qBAEN,aACE,UACA,gBACA,2BACA,yBACA,kBACA,cACA,kBAEF,uCACE,UACA,2BACA,yBACA,kBACA,cACA,kBAEF,SACE,yBAEF,YACE,oCAEF,UACE,sBAEF,SACE,8BAEF,SACE,yBACA,6BAEF,OACE,cAEF,2BACE,yBAEF,qCACE,aACE,UACA,gBACF,SACE,eACA,iBACF,SACE,6BACA,0BACF,SACE,uBAEJ,qCACE,gBACE,sBACA,eACA,eACA,4CACE,sBACA,0BACJ,SACE,qBACA,0BACF,SACE,4BACA,4BACF,aACE,2BACA,8BC/BJ,qCHnEA,GACC,UCEc,KDDd,YCEgB,QDChB,UCCc,iBACE,KDCjB,GACC,eACA,iBAED,GACC,UCDc,KDEd,YCDgB,KDGjB,GACC,UCFc,KDGd,YCFgB,KDIjB,EACC,UCHa,KDIb,YCHe,KDKhB,4BACC,aGJqB,KHKrB,cGLqB,KHOrB,2CACC,MGNW,KHOX,UGNe,KHQjB,OACC,OGPe,KHShB,aACC,OGVe,KHWf,YGXe,KHaf,yBACC,YGVwB,KHY1B,WACC,MGXgB,KHYhB,OGZgB,KHcjB,SACC,QGXkB,aHalB,YACC,cGb0B,IHe3B,YACC,cGf0B,KHiB3B,kBACC,MGjBc,IHmBf,6BACC,YGnB4B,cHqB7B,qBACC,WGrBiC,KHuBlC,uBACC,OGvB0B,KHwB1B,YGxB0B,KHyB1B,UGxB+B,KH2BhC,kDACC,YGzCwB,KH2C1B,MACC,YG3BkB,KH+BjB,8BACC,aG1DmB,KH2DnB,cG3DmB,KH6DtB,aACC,OC/BqB,KDgCrB,YChCqB,KDiCrB,UGnCwB,KAoBxB,EACC,eACA,iBACA,oBAED,GACC,eACA,iBAED,GACC,eACA,iBAED,GACC,eACA,iBAKA,qCACC,qBAEF,aACC,cACA,kBAEA,iBACC,gBACA,sBACA,cAKC,wBACC,cACA,mBAED,8BACC,iBAIH,eACC,gBACA,mBAED,iBACC,kBACA,WACA,cAEA,0BACC,mBACA,kBACA,sBAED,gCACC,kBACA,QACA,cACA,gBACA,2BAED,gCACC,oBAEA,+CACC,QAEF,iCACC,mBAEA,gDACC,OAEF,8BACC,gBAEA,iEACC,kBAED,6CACC,kBACA,cACA,WACA,eACA,eAED,uCACC,cAEF,qBACC,WAGH,OACC,OAnHqB,MAoHrB,cAEA,qBACC,cAEF,uBACC,aAED,UACC,oBAEA,uBACC,mBAEA,kCACC,gBAEF,aACC,cAnIyB,KAsIzB,6BACC,MApIoB,IAqIpB,cAtI4B,EA0I7B,yBACC,uBAED,+BACC,aAED,sCACC,iBAED,sCACC,gBAED,sCACC,gBACA,iBAED,uBACC,qBACA,MJtNG,QIuNH,gBACA,qBAIF,WACC,kBAEA,aACC,UACA,eAEF,eACC,kBAEA,mBACC,qBAED,8BACC,cACA,SAED,oBACC,qBACA,kBAED,qBACC,gBAKF,8BACC,WCpPH,sCACC,WACC,aAED,cACC,qBAED,qCACC,SAED,aACC,OAdoB,KAepB,YAfoB,KAmBlB,4BACC,WACA,cACA,kBACA,OACA,SACA,WACA,WACA,iBL5BE,QK+BL,wBACC,YAKA,yBACC,cAID,8BACC,gBAGA,4BACC,WAED,oCACC,YACA,YAED,iCACC,sBAEH,qBACC,aAED,YACC,kBACA,WACA,cACA,YACA,YACA,MACA,OACA,eACA,6CAGA,0CACC,8CAGH,cACC,8BACA,WAED,SACC,kBACA,WACA,eACA,OACA,YACA,aAEA,iCACC,aAEF,aACC,yBAEA,6BACC,YAGD,qCACC,UAlGc,OAoGhB,gKAEC,mBACA,oBAED,aACC,mBAIC,uDACC,iBAGF,iBACC,kBACA,gBAEA,8BACC,iBACA,oBAEA,iEACC,gBAED,6CACC,kBACA,cACA,2BAEA,iDACC,gBAML,OACC,OAxIqB,MAyIrB,kBACA,kCACA,sBAMC,gBACC,cAGD,yBACC,uBAED,+BACC,iBAcH,OACC,WACA,4CACA,iBL1KU,QK4KV,YACC,eAED,WACC,gBACA,mBAEA,aACC,aACA,WACA,eACA,gBACA,mBAEF,eACC,eACA,iBAEA,mBACC,WAED,8BACC,YAEH,mBACC,6BACA,aACA,eACA,gBACA,WACA,sBACA,eAEA,+BACC,iBL/MU,QKgNV,ML/MS,QKiNX,UACC,qBACA,kDACA,4BACA,qBACA,WACA,YACA,kBACA,kBAEA,gBACC,sBAED,eACC,kBACA,cACA,SACA,gBAEF,UACC,wBAEA,gBACC,2BAEF,iBACC,4BAEA,uBACC,+BAEF,QACC,6BAEA,cACC,gCAEF,SACC,6BAEA,eACC,gCAEF,eACC,6BAEA,qBACC,gCAEF,WACC,6BAEA,iBACC,gCA0BD,iCACC,gBAEA,uCACC,mBAEF,mDACC,WACA,iBL1SI,QK2SJ,eAMD,eACC,uBAID,8BACC,UACA,kBAEH,sCACC,aACC,qBAEF,qCAEE,qBACC","file":"case-study-styles.css"} \ No newline at end of file +{ +"version": 3, +"mappings": "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", +"sources": ["../../sass/_reset.sass","../../sass/_skin.sass","../../sass/_size.sass","../../sass/_base.sass","../../sass/_case-studies.sass","../../sass/_tablet.sass","../../sass/_desktop.sass"], +"names": [], +"file": "case-study-styles.css" +} diff --git a/static/css/styles.css b/static/css/styles.css index dec6c39224..e9c0e8360f 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -1 +1,2 @@ -html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li + li{margin-left:0}#docs #vendorStrip{line-height:44px}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia > div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah > .title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion > .container:first-child > .item:first-child > .title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item > .title{color:#000}.pi-accordion a.item > .title:hover{color:#3371e3}.pi-accordion div.item > .title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on > .title:before{transform:rotate(90deg)}.pi-accordion .item.on > .wrapper > .content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent * + h2,#docsContent * + h3,#docsContent * + h4,#docsContent * + h5,#docsContent * + h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p + p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents > ul > li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video > .light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-color:#f7f7f7;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box > div:first-child{float:left}.feature-box > div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box > div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0 !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content * + h2,.ui-dialog-content * + h3,.ui-dialog-content * + h4,.ui-dialog-content * + h5,.ui-dialog-content * + h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p + p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0 !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0 !important;list-style:none !important;margin-bottom:0 !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0 !important}.ui-widget-content table{margin:0 !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div + div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0 !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button + *{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box + .nav-box{margin-left:calc(20% / 3)}#mainNav main + main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li + li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video > .light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box > div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div + div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div + div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li + li{margin-left:20px}}/*# sourceMappingURL=styles.css.map */ +html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,0.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,0.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,0.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px;max-width:100%;overflow-x:scroll}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0px}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,0.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,0.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#kubeweekly{background-color:#f7f7f7;padding-top:60px;padding-bottom:140px;background-size:auto;font-family:"Roboto Mono",monospace !important;font-size:24px;font-weight:bold}#kubeweekly h5{font-size:20px}.subscribe-button{border-radius:6px;padding:0 20px;line-height:31px;color:#fff;background-color:blue;text-decoration:none;font-size:14px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,0.24),0 0 5px rgba(0,0,0,0.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0px !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0px}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0px !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0px !important;list-style:none !important;margin-bottom:0px !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0px !important}.ui-widget-content table{margin:0px !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0px !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li+li{margin-left:20px}} +/*# sourceMappingURL=styles.css.map */ diff --git a/static/css/styles.css.map b/static/css/styles.css.map index 1e125d44ed..d17ea3ec74 100644 --- a/static/css/styles.css.map +++ b/static/css/styles.css.map @@ -1 +1,7 @@ -{"version":3,"sourceRoot":"","sources":["../../sass/_reset.sass","../../sass/_skin.sass","../../sass/_size.sass","../../sass/_base.sass","../../sass/_tablet.sass","../../sass/_desktop.sass"],"names":[],"mappings":"AAAA,UACC,SACA,UAGD,aACC,aAED,OACC,eAED,MACC,gBAED,GACC,SACA,UAED,EACC,qBAGD,OACC,cACA,WAED,YACC,WAED,OACC,YAED,MACC,WAED,QACC,kBC1BD,UACC,sBACA,YANW,oBAOX,gBACA,SACA,SAED,KACC,YAZW,oBAcZ,WACC,gBAED,MACC,gBDxBD,UACC,SACA,UAGD,aACC,aAED,OACC,eAED,MACC,gBAED,GACC,SACA,UAED,EACC,qBAGD,OACC,cACA,WAED,YACC,WAED,OACC,YAED,MACC,WAED,QACC,kBEpCD,GACC,UCEc,KDDd,YCEgB,QDChB,UCCc,iBACE,KDCjB,GACC,eACA,iBAED,GACC,UCDc,KDEd,YCDgB,KDGjB,GACC,UCFc,KDGd,YCFgB,KDIjB,EACC,UCHa,KDIb,YCHe,KDKhB,4BACC,aCFqB,KDGrB,cCHqB,KDKrB,2CACC,MCJW,KDKX,UCJe,KDMjB,OACC,OCLe,KDOhB,aACC,OCRe,KDSf,YCTe,KDWf,yBACC,YCRwB,KDU1B,WACC,MCTgB,KDUhB,OCVgB,KDYjB,SACC,QCTkB,aDWlB,YACC,cCX0B,IDa3B,YACC,cCb0B,KDe3B,kBACC,MCfc,IDiBf,6BACC,YCjB4B,cDmB7B,qBACC,WCnBiC,KDqBlC,uBACC,OCrB0B,KDsB1B,YCtB0B,KDuB1B,UCtB+B,KDyBhC,kDACC,YCvCwB,KDyC1B,MACC,YCzBkB,KD6BjB,8BACC,aCxDmB,KDyDnB,cCzDmB,KD2DtB,aACC,OC/BqB,KDgCrB,YChCqB,KDiCrB,UChCwB,KAWzB,KACC,sBAED,QACC,kBACA,sBAGA,qCACC,kBACA,YAEF,EACC,eACA,gBAGD,QACC,qBACA,kBACA,eACA,iBACA,WACA,iBFvFM,QEwFN,qBAED,YACC,eACA,MACA,OACA,WACA,YACA,aAID,OACC,eACA,MACA,OACA,WACA,aACA,6BACA,6BACA,gBACA,eACA,kBAGD,MACC,kBACA,WACA,cACA,YACA,YACA,MACA,OACA,eACA,2CACA,wBACA,kCACA,4BAIA,qBACC,eACA,SACA,UACA,WACA,YACA,2CACA,kCACA,4BACA,qBACA,kBACA,eACA,cAED,8BACC,aAED,YACC,kBACA,SACA,SACA,gCACA,cACA,WACA,YACA,0CAGD,8BACC,gDAGF,aACC,YAED,yBACC,aAED,UACC,sBACA,6BACA,eAEA,gBACC,sBACA,MF5KU,QE8KZ,eACC,QACA,YACA,6BACA,6BACA,kBACA,mBACA,sBACA,gBACA,eAED,WACC,qBACA,kBACA,sBACA,UACA,SACA,gBAEA,kDACC,kBACA,SACA,UACA,WACA,iBFxMK,QEyML,eACA,WAED,eACC,oBAED,kBACC,QAED,iBACC,WAGA,oEACC,sBAGF,YACC,MF3NK,QE4NL,mBAED,cACC,mBACA,gBACA,WAED,kBACC,WACA,mBAGA,cACC,MFzOI,QE0OJ,qBAIH,cACC,aAEA,iBACC,qBACA,kBAEA,mBACC,WACA,gBACA,UACA,kBAEA,gCACC,kBACA,WACA,WACA,WACA,YACA,OACA,gBAED,4BACC,+BAEF,oBACC,aACA,eACA,SACA,gBAEA,uBACC,cACA,YAEA,yBACC,WFhRO,QEiRP,WACA,YAGD,oCACC,kBAGH,0BACC,cAIF,0DACC,MF/RU,QEiSV,4EACC,qBAEH,mCACC,gBACA,MFtSW,QEwSZ,oIACC,WF3SM,QE+SN,iBACC,sBAKD,eACC,gBAED,sBACC,cACA,aAED,iBACC,yBACA,aAGA,yBACC,UAED,uDACC,UACA,uBAED,4BACC,wBAED,2BACC,yBAGF,kDACC,YACA,iBFjVK,QEkVL,aFlVK,QEsVN,kCACC,6BAED,wCACC,aFxVU,QEyVV,MFzVU,QE2VV,oDACC,aF9VI,QE+VJ,iBF/VI,QEgWJ,WAGD,oMACC,iBFlWS,QEuWZ,MACC,0CACA,iBFzWW,QE0WX,kBACA,eACA,gBACA,gBACA,kBAEA,oBACC,cACA,oBACA,WACA,WACA,sCACA,WAIA,gBACC,aAED,gBACC,mBAEH,kBACC,aAGD,aACC,kBACA,sCACA,gBACA,mBACA,kBAEA,kBACC,2BAEA,sBACC,WACA,kBAIH,OACC,WACA,0CACA,iBFvZW,QEyZX,YACC,eAGA,aACC,WACA,kBACA,qBACA,cACA,eACA,gBACA,WACA,qBAGF,eACC,cAEA,mBACC,kBACA,mBAED,8BACC,cAED,oBACC,cACA,kBAED,qBACC,kBAIH,mBACC,6BACA,aACA,eACA,gBACA,WACA,sBACA,eAEA,+BACC,iBFtcW,QEucX,MFtcU,QEwcZ,UACC,qBACA,gDACA,4BACA,qBACA,WACA,YACA,kBACA,kBAEA,gBACC,sBAED,eACC,kBACA,cACA,SACA,gBAED,iBACC,sBACA,WACA,YAEA,uBACC,MFneI,QEqeP,UACC,wBAEA,gBACC,2BAEF,iBACC,4BAEA,uBACC,+BAEF,QACC,6BAEA,cACC,gCAEF,SACC,6BAEA,eACC,gCAEF,eACC,6BAEA,qBACC,gCAEF,WACC,6BAEA,iBACC,gCAEF,UACC,aAED,QACC,sBAED,MACC,iBF9gBW,QEghBX,SACC,cACA,iBAEF,aACC,kBAEA,gBACC,WAED,gBACC,qBACA,YAED,eACC,cACA,YACA,WACA,gBACA,iBAED,qBACC,cAID,mBACC,iBAEA,sBACC,WAED,8BACC,WACA,cACA,UACA,cACA,YACA,iBACA,kBAEA,qCACC,kBACA,WACA,YACA,WACA,UACA,QACA,8CACA,4BACA,0BACA,UAEF,2BACC,WACA,eACA,YACA,iBACA,eACA,mBACA,gBACA,YACA,kBACA,kBAGH,cACC,kBACA,4BACA,gBACA,eAGA,oBACC,YAEF,SACC,eACA,sBACA,MACA,OACA,QACA,aACA,gBACA,eACA,eACA,eAIC,uBACC,iBF5mBU,QE6mBV,8BACA,8BACA,iBACA,MFjnBI,QEonBN,eACC,gBAED,mBACC,kBACA,YACA,gBACA,gBAGD,gFACC,eACA,gBACA,gBAED,oFACC,6BAED,oBACC,gBAED,qBACC,MFxoBU,QEyoBV,kBACA,8BACA,eACA,eAEA,2BACC,MFjpBI,QEmpBN,8BACC,WAEA,oCACC,MFvpBI,QE0pBL,uCACC,WACA,kBACA,SACA,SACA,mBACA,2BACA,yDACA,uBACA,eAEF,uBACC,kBACA,WACA,sBAED,uBACC,kBACA,UACA,eAGA,uCACC,wBAED,6CACC,UAGH,GACC,kBAED,GACC,mBAED,aACC,aACA,eACA,MACA,WACA,YACA,UACA,uBAEA,gBACC,UAED,sBACC,eACA,MACA,OACA,WACA,YACA,gCAED,mBACC,kBACA,MACA,QACA,YACA,sBACA,cACA,eAED,sBACC,YACA,gBAED,sBACC,SACA,iBACA,sBAED,gBACC,gBAED,gBACC,kBACA,cACA,WACA,gBACA,sBACA,6BAED,eACC,qBACA,WACA,YACA,iBACA,gCACA,eACA,MFrvBK,QEuvBN,qBACC,gBACA,UAED,mBACC,eAEA,sBACC,gBAED,qBACC,YACA,iBACA,eACA,WAGH,wBACC,kBACA,MACA,QACA,WACA,YAEA,6DACC,WACA,kBACA,oBACA,SACA,UACA,WACA,sBAED,+BACC,wBAED,8BACC,yBAEF,aACC,kBACA,YACA,WAKA,oGACC,gBAED,gGACC,mBACA,gBACA,mBACA,oBAGA,0IACC,cACA,YACA,kBACA,OAhBiB,MAiBjB,kBAEF,gCACC,6BAED,gBACC,eACA,mBAED,gBACC,eAED,gBACC,eACA,gBACA,kBAED,gBACC,eACA,gBAED,gCACC,eACA,gBAED,eACC,eACA,gBACA,mBAED,mBACC,gBAED,kBACC,qBACA,sBACA,iBFx1BW,QEy1BX,MFx1BU,QEy1BV,YFp1BU,wBEq1BV,wBACA,eACA,iBACA,gBAED,oBACC,MFl2BK,QEm2BL,0BAED,yCACC,SACA,UAED,0EACC,oCAED,wCACC,cAED,sBACC,UAED,iBACC,yBACA,cACA,cACA,aACA,kBACA,gBAED,8HACC,kBACA,6BAED,0BACC,mBAED,oFACC,qBAED,6BACC,4BACA,wBAED,mEACC,sBACA,wCAED,8BACC,oBAED,mBACC,gBAED,mBACC,mBAED,gCACC,cACA,kBACA,gBAED,4EACC,eAED,gBACC,oBACA,eACA,mBAED,mBACC,WACA,sBACA,iBACA,gBACA,mBAED,mDACC,iBFz6BW,QE26BZ,mBACC,sBACA,WAED,gCACC,YACA,gBACA,SAED,gBACC,mBAED,gBACC,gBAED,6BACC,kBACA,UACA,UACA,WACA,YACA,iBACA,kBACA,mBACA,iBACA,gBACA,0DACA,8BACA,0BAED,yDACC,mBAEA,8HACC,gBACA,MF/8BI,QEi9BL,+DACC,eACA,SAED,+DACC,UACA,kBACA,gBAED,6DACC,kBACA,MF59BI,QE69BJ,gBAEF,iBACC,eAGA,wCACC,gBAED,kEACC,gBAeH,cACC,eACA,SAED,UACC,WACA,eACA,iBACA,WAGD,yBACC,kBACA,WACA,UACA,gBACA,cAEA,yCACC,aAED,+BACC,SACA,gBAED,4BACC,UAED,4BACC,gBACA,gBACA,iBACA,iBA0BA,0CACC,4CAEF,YACC,gBACA,mBAEA,iBACC,eACA,mBAED,yBACC,aAIH,YACC,YAnCuB,KAoCvB,eApCuB,KAsCvB,cACC,MFrkCK,QEukCN,iBACC,cA1CsB,KA2CtB,iBAED,2BACC,cACA,mBACA,kBAEA,+BACC,WACA,gBAGD,4CACC,eAEA,gDACC,gBAEH,eACC,cA5D6B,KAgE/B,OACC,OA9DsB,MAgEvB,OACC,WACA,kBACA,kCACA,sBAGA,qBACC,aACA,kBACA,QACA,SACA,YACA,mBACA,gCACA,WAED,UACC,eACA,iBACA,mBAED,SACC,mBAED,wBACC,kBACA,eACA,iBF7nCU,QE8nCV,kBACA,MF7nCM,KE8nCN,4BAED,+BACC,kBACA,eACA,sBACA,kBACA,MFzoCK,QE0oCL,4BACA,mBAEA,sCACC,WACA,kBH9lCF,kBACA,IAFmC,IAGnC,KG6lCsB,KH5lCtB,gCG6lCE,QACA,SACA,mBACA,8BACA,yDAEF,8BHtmCA,kBACA,IAFmC,IAGnC,KAHwB,IAIxB,gCGqmCC,WACA,YACA,kBACA,6BACA,sCACA,iBAEA,oCH/mCD,kBACA,IAFmC,IAGnC,KAHwB,IAIxB,gCG8mCE,UACA,WACA,QACA,SACA,mBACA,8BACA,sDAEH,aHjoCC,eACA,MACA,OACA,YACA,aG+nCA,gCACA,aAEA,oBH9nCA,kBACA,IAFmC,IAGnC,KAHwB,IAIxB,gCAIA,MADkF,KAElF,YACA,2BACA,WAJwG,KG4nCxG,0BACC,kBACA,SACA,WACA,WACA,YACA,6BACA,eAEA,iEACC,WACA,kBACA,oBACA,SACA,UACA,WACA,sBAED,iCACC,wBAED,gCACC,yBAED,gCACC,kBAGH,MACC,iBACA,qBACA,iBFjtCY,QEktCZ,6CACA,iCACA,4BACA,sBAGD,UACC,kBACA,iBF1tCY,QE2tCZ,wCACA,gCACA,4BACA,qBAED,aAEC,WACA,gBACA,WAEA,gBACC,mBACA,mBAED,+BACC,WAED,8BACC,YAGD,aACC,cA7M0B,KA+M3B,uBACC,cA9M0B,EAgN1B,6BACC,MAlNqB,KAmNrB,cAjN6B,KA0N9B,sGACC,4CAEF,iCACC,oBAED,+CACC,eAEA,yDACC,eAED,mDACC,MFhxCI,QEkxCL,iEACC,mBACA,eAEA,+eACC,mBACA,iBACA,eACA,mBAED,iGACC,iBF5xCS,QE8xCX,6EACC,kBACA,iBACA,cAEA,qFACC,WACA,YACA,iBFtyCS,QEwyCX,6EACC,kBACA,iBACA,cAEA,qFACC,WACA,YACA,iBF7yCI,KE8yCJ,6DAEF,mFACC,kBACA,WACA,YACA,iBACA,iBACA,iBAED,+EACC,kBACA,WACA,YACA,iBACA,iBACA,iBAED,6DACC,kBACA,SACA,WACA,YAGH,SACC,gCAED,2BACC,gCACA,uBACA,qCACC,yBACD,kCACC,gCACA,iCACA,oCACA,yBACA,+CACA,mCACA,0BACA,4BACA,yBAEF,sBACC,2BACA,iCACA,4BAEA,kDACC,2BACA,2BAED,wBACC,wBAED,2BACC,gCACA,iCACA,oCACA,yBACA,+CACA,mCACA,0BACA,4BACA,yBAEF,WACC,8BACA,aAED,mBACC,kBACA,YACA,WAKA,kIACC,gBAED,oIACC,mBACA,gBACA,mBACA,oBAGA,8KACC,cACA,YACA,kBACA,OAhBiB,MAiBjB,kBAEF,4CACC,6BAED,sBACC,eACA,mBAED,sBACC,eAED,sBACC,eACA,gBACA,kBAED,sBACC,eACA,gBAED,4CACC,eACA,gBAED,qBACC,eACA,gBACA,mBAED,yBACC,gBAED,wBACC,qBACA,sBACA,iBFn7CW,QEo7CX,MFn7CU,QEo7CV,YF/6CU,wBEg7CV,wBACA,eACA,iBACA,gBAED,0BACC,MF77CK,QE87CL,0BAED,qDACC,SACA,UAED,4FACC,oCAED,oDACC,cAED,4BACC,UAED,uBACC,yBACA,cACA,cACA,aACA,kBACA,gBAED,kKACC,oBACA,kBACA,6BAED,gCACC,mBAED,sGACC,qBAED,mCACC,4BACA,wBAED,+EACC,sBACA,wCAED,oCACC,oBAED,yBACC,gBAED,yBACC,mBAED,4CACC,cACA,kBACA,gBAED,oGACC,eAED,sBACC,oBACA,eACA,mBAED,yBACC,WACA,sBACA,iBACA,gBACA,mBAED,+DACC,iBFrgDW,QEugDZ,yBACC,sBACA,WAED,4CACC,YACA,gBACA,SAED,sBACC,mBAED,sBACC,gBAED,mCACC,kBACA,UACA,UACA,WACA,YACA,iBACA,kBACA,mBACA,iBACA,gBACA,0DACA,8BACA,0BAED,iCACC,mBAEA,wEACC,gBACA,MF3iDI,QE6iDL,oCACC,eACA,SAED,oCACC,UACA,kBACA,gBAED,mCACC,kBACA,MFxjDI,QEyjDJ,gBAEF,uBACC,eAED,qBAEC,0BAeF,sBACC,8BAGD,kBACC,kCACA,wCACA,oBAGA,oCACC,qBACA,2BACA,2BACA,2BAGD,qBACC,2BAED,qBACC,8BAEF,mBACC,oBAEA,yBACC,oBAEF,wBACC,iCAED,gBACC,gCAIA,0BACC,kBAED,aACC,mBAED,aACC,mBACA,mBAEA,gBACC,aAEF,qBACC,gBAEA,yBACC,WACA,WACA,aACA,kBACA,+BACA,qBACA,4BAED,sCACC,+CAED,sCACC,8CAED,sCACC,6CAED,sCACC,qDAED,+BACC,gBACA,cAED,uBACC,qBACA,MF/pDI,QEgqDJ,eACA,gBACA,qBACA,mBAED,8CACC,kBACA,WAKD,qBACC,eAED,mBACC,eAGF,0BACC,kBACA,kBACA,mBAEA,8BACC,oBAED,8BACC,kBACA,qBACA,mBACA,WACA,iBACA,mBACA,mBACA,+BAED,4BACC,eAED,4BACC,kBACA,aACA,SACA,2BACA,MF7sDI,QE8sDJ,gBAKH,uCACC,UAGD,iDACC,oBAGD,wBACC,gBAID,wBACC,gBACA,iBAED,aACC,mBAED,oBACC,eACA,WAGD,iBACC,YACA,eAED,qBACC,WACA,eAED,2BACC,YACA,iBAED,kBACC,gCACA,eACA,WACA,iBCzrDD,qCFnEA,GACC,UCEc,KDDd,YCEgB,QDChB,UCCc,iBACE,KDCjB,GACC,eACA,iBAED,GACC,UCDc,KDEd,YCDgB,KDGjB,GACC,UCFc,KDGd,YCFgB,KDIjB,EACC,UCHa,KDIb,YCHe,KDKhB,4BACC,aEJqB,KFKrB,cELqB,KFOrB,2CACC,MENW,KFOX,UENe,KFQjB,OACC,OEPe,KFShB,aACC,OEVe,KFWf,YEXe,KFaf,yBACC,YEVwB,KFY1B,WACC,MEXgB,KFYhB,OEZgB,KFcjB,SACC,QEXkB,aFalB,YACC,cEb0B,IFe3B,YACC,cEf0B,KFiB3B,kBACC,MEjBc,IFmBf,6BACC,YEnB4B,cFqB7B,qBACC,WErBiC,KFuBlC,uBACC,OEvB0B,KFwB1B,YExB0B,KFyB1B,UExB+B,KF2BhC,kDACC,YEzCwB,KF2C1B,MACC,YE3BkB,KF+BjB,8BACC,aE1DmB,KF2DnB,cE3DmB,KF6DtB,aACC,OC/BqB,KDgCrB,YChCqB,KDiCrB,UEnCwB,KAoBxB,EACC,eACA,iBACA,oBAED,GACC,eACA,iBAED,GACC,eACA,iBAED,GACC,eACA,iBAKA,qCACC,qBAEF,aACC,cACA,kBAEA,iBACC,gBACA,sBACA,cAKC,wBACC,cACA,mBAED,8BACC,iBAIH,eACC,gBACA,mBAED,iBACC,kBACA,WACA,cAEA,0BACC,mBACA,kBACA,sBAED,gCACC,kBACA,QACA,cACA,gBACA,2BAED,gCACC,oBAEA,+CACC,QAEF,iCACC,mBAEA,gDACC,OAEF,8BACC,gBAEA,iEACC,kBAED,6CACC,kBACA,cACA,WACA,eACA,eAED,uCACC,cAEF,qBACC,WAGH,OACC,OAnHqB,MAoHrB,cAEA,qBACC,cAEF,uBACC,aAED,UACC,oBAEA,uBACC,mBAEA,kCACC,gBAEF,aACC,cAnIyB,KAsIzB,6BACC,MApIoB,IAqIpB,cAtI4B,EA0I7B,yBACC,uBAED,+BACC,aAED,sCACC,iBAED,sCACC,gBAED,sCACC,gBACA,iBAED,uBACC,qBACA,MHtNG,QGuNH,gBACA,qBAIF,WACC,kBAEA,aACC,UACA,eAEF,eACC,kBAEA,mBACC,qBAED,8BACC,cACA,SAED,oBACC,qBACA,kBAED,qBACC,gBAKF,8BACC,WCpPH,sCACC,WACC,aAED,cACC,qBAED,qCACC,SAED,aACC,OAdoB,KAepB,YAfoB,KAmBlB,4BACC,WACA,cACA,kBACA,OACA,SACA,WACA,WACA,iBJ5BE,QI+BL,wBACC,YAKA,yBACC,cAID,8BACC,gBAGA,4BACC,WAED,oCACC,YACA,YAED,iCACC,sBAEH,qBACC,aAED,YACC,kBACA,WACA,cACA,YACA,YACA,MACA,OACA,eACA,6CAGA,0CACC,8CAGH,cACC,8BACA,WAED,SACC,kBACA,WACA,eACA,OACA,YACA,aAEA,iCACC,aAEF,aACC,yBAEA,6BACC,YAGD,qCACC,UAlGc,OAoGhB,gKAEC,mBACA,oBAED,aACC,mBAIC,uDACC,iBAGF,iBACC,kBACA,gBAEA,8BACC,iBACA,oBAEA,iEACC,gBAED,6CACC,kBACA,cACA,2BAEA,iDACC,gBAML,OACC,OAxIqB,MAyIrB,kBACA,kCACA,sBAMC,gBACC,cAGD,yBACC,uBAED,+BACC,iBAcH,OACC,WACA,4CACA,iBJ1KU,QI4KV,YACC,eAED,WACC,gBACA,mBAEA,aACC,aACA,WACA,eACA,gBACA,mBAEF,eACC,eACA,iBAEA,mBACC,WAED,8BACC,YAEH,mBACC,6BACA,aACA,eACA,gBACA,WACA,sBACA,eAEA,+BACC,iBJ/MU,QIgNV,MJ/MS,QIiNX,UACC,qBACA,kDACA,4BACA,qBACA,WACA,YACA,kBACA,kBAEA,gBACC,sBAED,eACC,kBACA,cACA,SACA,gBAEF,UACC,wBAEA,gBACC,2BAEF,iBACC,4BAEA,uBACC,+BAEF,QACC,6BAEA,cACC,gCAEF,SACC,6BAEA,eACC,gCAEF,eACC,6BAEA,qBACC,gCAEF,WACC,6BAEA,iBACC,gCA0BD,iCACC,gBAEA,uCACC,mBAEF,mDACC,WACA,iBJ1SI,QI2SJ,eAMD,eACC,uBAID,8BACC,UACA,kBAEH,sCACC,aACC,qBAEF,qCAEE,qBACC","file":"styles.css"} \ No newline at end of file +{ +"version": 3, +"mappings": "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", +"sources": ["../../sass/_reset.sass","../../sass/_skin.sass","../../sass/_size.sass","../../sass/_base.sass","../../sass/_tablet.sass","../../sass/_desktop.sass"], +"names": [], +"file": "styles.css" +} From f386a59fc8494d530f365942d510586bbbd98323 Mon Sep 17 00:00:00 2001 From: Bob Killen Date: Tue, 16 Oct 2018 14:58:59 -0400 Subject: [PATCH 172/181] Add NA contributor Summit Blog Post (#10630) * add NA contrib summit blog post * Update 2018-10-16-kubernetes-2018-north-american-contributor-summit.md --- ...-2018-north-american-contributor-summit.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md diff --git a/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md b/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md new file mode 100644 index 0000000000..ac7395819d --- /dev/null +++ b/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md @@ -0,0 +1,63 @@ +--- +layout: "Blog" +title: "Kubernetes 2018 North American Contributor Summit" +date: 2018-10-16 +--- + +**Authors:** +[Bob Killen][bob] (University of Michigan) +[Sahdev Zala][sahdev] (IBM), +[Ihor Dvoretskyi][ihor] (CNCF) + + +The 2018 North American Kubernetes Contributor Summit to be hosted right before +[CloudNativeCon/KubeCon][kubecon] Seattle is shaping up to be the largest yet. +It is an event that brings together new and current contributors alike to +connect and share face-to-face; and serves as an opportunity for existing +contributors to help shape the future of community development. For new +community members, it offers a welcoming space to learn, explore and put the +contributor workflow to practice. + +Unlike previous Contributor Summits, the event now spans two-days with a more +relaxed ‘hallway’ track and general Contributor get-together to be hosted from +5-8pm on Sunday December 9th at the [Garage Lounge and Gaming Hall][garage], just +a short walk away from the Convention Center. There, contributors can enjoy +billiards, bowling, trivia and more; accompanied by a variety of food and drink. + +Things pick up the following day, Monday the 10th with three separate tracks: + +### New Contributor Workshop: +A half day workshop aimed at getting new and first time contributors onboarded +and comfortable with working within the Kubernetes Community. Staying for the +duration is required; this is not a workshop you can drop into. + +### Current Contributor Track: +Reserved for those that are actively engaged with the development of the +project; the Current Contributor Track includes Talks, Workshops, Birds of a +Feather, Unconferences, Steering Committee Sessions, and more! Keep an eye on +the [schedule in GitHub][schedule] as content is frequently being updated. + +### Docs Sprint: +SIG-Docs will have a curated list of issues and challenges to be tackled closer +to the event date. + +## To Register: +To register for the Contributor Summit, see the [Registration section of the +Event Details in GitHub][register]. Please note that registrations are being +reviewed. If you select the “Current Contributor Track” and are not an active +contributor, you will be asked to attend the New Contributor Workshop, or asked +to be put on a waitlist. With thousands of contributors and only 300 spots, we +need to make sure the right folks are in the room. + +If you have any questions or concerns, please don’t hesitate to reach out to +the Contributor Summit Events Team at community@kubernetes.io. + +Look forward to seeing everyone there! + +[bob]: https://twitter.com/mrbobbytables +[sahdev]: https://twitter.com/sp_zala +[ihor]: https://twitter.com/idvoretskyi +[kubecon]: https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2018/ +[garage]: https://www.garagebilliards.com/ +[schedule]: https://git.k8s.io/community/events/2018/12-contributor-summit#agenda +[register]: https://git.k8s.io/community/events/2018/12-contributor-summit#registration From a6b876a9d472de093e110f60df334880fc6afe36 Mon Sep 17 00:00:00 2001 From: Bob Killen Date: Tue, 16 Oct 2018 16:29:04 -0400 Subject: [PATCH 173/181] fix kubecon event name in contrib summit blog post (#10640) --- ...8-10-16-kubernetes-2018-north-american-contributor-summit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md b/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md index ac7395819d..095e47a73d 100644 --- a/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md +++ b/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md @@ -11,7 +11,7 @@ date: 2018-10-16 The 2018 North American Kubernetes Contributor Summit to be hosted right before -[CloudNativeCon/KubeCon][kubecon] Seattle is shaping up to be the largest yet. +[KubeCon + CloudNativeCon][kubecon] Seattle is shaping up to be the largest yet. It is an event that brings together new and current contributors alike to connect and share face-to-face; and serves as an opportunity for existing contributors to help shape the future of community development. For new From d0173320b822ecdaa86e2f81343059a8a4d07961 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Wed, 17 Oct 2018 15:48:05 +0800 Subject: [PATCH 174/181] audit api version has been updated to v1 (#10647) --- content/en/examples/audit/audit-policy.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/examples/audit/audit-policy.yaml b/content/en/examples/audit/audit-policy.yaml index b5d66b3a18..25b8fd0070 100644 --- a/content/en/examples/audit/audit-policy.yaml +++ b/content/en/examples/audit/audit-policy.yaml @@ -1,4 +1,4 @@ -apiVersion: audit.k8s.io/v1beta1 # This is required. +apiVersion: audit.k8s.io/v1 # This is required. kind: Policy # Don't generate audit events for all requests in RequestReceived stage. omitStages: @@ -65,4 +65,4 @@ rules: # Long-running requests like watches that fall under this rule will not # generate an audit event in RequestReceived. omitStages: - - "RequestReceived" \ No newline at end of file + - "RequestReceived" From 4b9882f84cfe1f8e3b16c7a830f8b0a7f807141f Mon Sep 17 00:00:00 2001 From: bsky Date: Wed, 17 Oct 2018 23:32:07 +0900 Subject: [PATCH 175/181] Fix tryKubernetes button (#10642) --- sass/_base.sass | 3 ++- static/css/case-study-styles.css | 2 +- static/css/case-study-styles.css.map | 2 +- static/css/styles.css | 2 +- static/css/styles.css.map | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sass/_base.sass b/sass/_base.sass index 21884cc985..b078336a96 100644 --- a/sass/_base.sass +++ b/sass/_base.sass @@ -334,7 +334,8 @@ ul.global-nav .open-nav, .y-enough #tryKubernetes - width: 150px + width: auto + padding: 0 20px background-color: $blue border-color: $blue diff --git a/static/css/case-study-styles.css b/static/css/case-study-styles.css index 15e858f9fa..5ceb84710c 100644 --- a/static/css/case-study-styles.css +++ b/static/css/case-study-styles.css @@ -1,2 +1,2 @@ -html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,0.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,0.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,0.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px;max-width:100%;overflow-x:scroll}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0px}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,0.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,0.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#kubeweekly{background-color:#f7f7f7;padding-top:60px;padding-bottom:140px;background-size:auto;font-family:"Roboto Mono",monospace !important;font-size:24px;font-weight:bold}#kubeweekly h5{font-size:20px}.subscribe-button{border-radius:6px;padding:0 20px;line-height:31px;color:#fff;background-color:blue;text-decoration:none;font-size:14px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,0.24),0 0 5px rgba(0,0,0,0.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0px !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0px}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0px !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0px !important;list-style:none !important;margin-bottom:0px !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0px !important}.ui-widget-content table{margin:0px !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0px !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}hr{background-color:#999}h2{margin-bottom:15px !important}.subhead{padding-bottom:2% !important;padding-top:0% !important}.details{margin-left:1.9%;padding-right:5%;font-size:16px !important;padding-bottom:2% !important}.section1{margin-bottom:3%}.section1 .cols{width:80% !important;margin-left:6.8%;padding-top:1.5%}.section1 .cols .col1{width:52% !important;font-weight:300 !important}.section1 .cols .col2{width:46% !important}.banner2text{width:63%;padding-top:10%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.banner3text,.banner4text,.banner5text{width:63%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.fullcol{float:initial !important}body footer{background-color:#585858 !important}.section1{float:left !important}.banner1{padding-left:11.9% !important}.banner2{float:initial !important;padding-bottom:2% !important}footer{padding:0% 7%}.banner4,.banner3,.banner5{float:initial !important}@media screen and (max-width: 910px){.banner2text{width:47%;padding-top:45%}.details{margin-left:0%;margin-bottom:3%}.subhead{padding-bottom:0% !important;padding-top:0% !important}.banner3{width:100% !important}}@media screen and (max-width: 780px){.section1 .cols{width:100% !important;margin-left:0%;padding-top:5%}.section1 .cols .col1,.section1 .cols .col2{width:100% !important;margin-left:0% !important}.fullcol{width:90% !important;margin-left:5% !important}.banner1{padding-left:10% !important;margin-bottom:6% !important}.banner2text{padding-top:60% !important;padding-bottom:2% !important}}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li+li{margin-left:20px}} +html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:auto;padding:0 20px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,0.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,0.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,0.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px;max-width:100%;overflow-x:scroll}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0px}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,0.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,0.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#kubeweekly{background-color:#f7f7f7;padding-top:60px;padding-bottom:140px;background-size:auto;font-family:"Roboto Mono",monospace !important;font-size:24px;font-weight:bold}#kubeweekly h5{font-size:20px}.subscribe-button{border-radius:6px;padding:0 20px;line-height:31px;color:#fff;background-color:blue;text-decoration:none;font-size:14px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,0.24),0 0 5px rgba(0,0,0,0.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0px !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0px}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0px !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0px !important;list-style:none !important;margin-bottom:0px !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0px !important}.ui-widget-content table{margin:0px !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0px !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}hr{background-color:#999}h2{margin-bottom:15px !important}.subhead{padding-bottom:2% !important;padding-top:0% !important}.details{margin-left:1.9%;padding-right:5%;font-size:16px !important;padding-bottom:2% !important}.section1{margin-bottom:3%}.section1 .cols{width:80% !important;margin-left:6.8%;padding-top:1.5%}.section1 .cols .col1{width:52% !important;font-weight:300 !important}.section1 .cols .col2{width:46% !important}.banner2text{width:63%;padding-top:10%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.banner3text,.banner4text,.banner5text{width:63%;padding-left:0% !important;float:initial !important;text-align:center;margin:0 auto;position:relative}.fullcol{float:initial !important}body footer{background-color:#585858 !important}.section1{float:left !important}.banner1{padding-left:11.9% !important}.banner2{float:initial !important;padding-bottom:2% !important}footer{padding:0% 7%}.banner4,.banner3,.banner5{float:initial !important}@media screen and (max-width: 910px){.banner2text{width:47%;padding-top:45%}.details{margin-left:0%;margin-bottom:3%}.subhead{padding-bottom:0% !important;padding-top:0% !important}.banner3{width:100% !important}}@media screen and (max-width: 780px){.section1 .cols{width:100% !important;margin-left:0%;padding-top:5%}.section1 .cols .col1,.section1 .cols .col2{width:100% !important;margin-left:0% !important}.fullcol{width:90% !important;margin-left:5% !important}.banner1{padding-left:10% !important;margin-bottom:6% !important}.banner2text{padding-top:60% !important;padding-bottom:2% !important}}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li+li{margin-left:20px}} /*# sourceMappingURL=case-study-styles.css.map */ diff --git a/static/css/case-study-styles.css.map b/static/css/case-study-styles.css.map index d685cfb6d1..a4a6e24a6e 100644 --- a/static/css/case-study-styles.css.map +++ b/static/css/case-study-styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["../../sass/_reset.sass","../../sass/_skin.sass","../../sass/_size.sass","../../sass/_base.sass","../../sass/_case-studies.sass","../../sass/_tablet.sass","../../sass/_desktop.sass"], "names": [], "file": "case-study-styles.css" diff --git a/static/css/styles.css b/static/css/styles.css index e9c0e8360f..22c3a6702a 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -1,2 +1,2 @@ -html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:150px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,0.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,0.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,0.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px;max-width:100%;overflow-x:scroll}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0px}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,0.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,0.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#kubeweekly{background-color:#f7f7f7;padding-top:60px;padding-bottom:140px;background-size:auto;font-family:"Roboto Mono",monospace !important;font-size:24px;font-weight:bold}#kubeweekly h5{font-size:20px}.subscribe-button{border-radius:6px;padding:0 20px;line-height:31px;color:#fff;background-color:blue;text-decoration:none;font-size:14px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,0.24),0 0 5px rgba(0,0,0,0.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0px !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0px}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0px !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0px !important;list-style:none !important;margin-bottom:0px !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0px !important}.ui-widget-content table{margin:0px !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0px !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li+li{margin-left:20px}} +html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}*,.button{box-sizing:border-box;font-family:"Roboto",sans-serif;background:none;margin:0;border:0}body{font-family:"Roboto",sans-serif}h1,h2,h5,p{font-weight:300}h3,h4{font-weight:400}html,body{margin:0;padding:0}input,button{outline:none}button{cursor:pointer}ul,li{list-style:none}ul{margin:0;padding:0}a{text-decoration:none}.clear{display:block;clear:both}.light-text{color:#fff}.right{float:right}.left{float:left}.center{text-align:center}h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}body{background-color:#fff}section{position:relative;background-color:#fff}section main,header main,footer main{position:relative;margin:auto}p{font-size:14px;font-weight:400}.button{display:inline-block;border-radius:6px;padding:0 20px;line-height:40px;color:#fff;background-color:#3371e3;text-decoration:none}#cellophane{position:fixed;top:0;left:0;width:100%;height:100%;display:none}header{position:fixed;top:0;left:0;width:100%;z-index:8888;background-color:transparent;box-shadow:0 0 0 transparent;overflow:hidden;transition:.3s;text-align:center}.logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(/images/nav_logo.svg);background-size:contain;background-position:center center;background-repeat:no-repeat}#docs .flyout-button{position:fixed;top:20px;left:20px;width:50px;height:50px;background-image:url(/images/toc_icon.png);background-position:center center;background-repeat:no-repeat;background-size:auto;border-radius:50%;transition:.3s;z-index:99999}#docs.open-nav .flyout-button{display:none}#docs .logo{position:absolute;top:40px;left:50%;transform:translate(-50%, -50%);display:block;width:45px;height:44px;background-image:url(/images/favicon.png)}#docs.flip-nav .flyout-button{background-image:url(/images/toc_icon_grey.png)}.nav-buttons{float:right}#viewDocs,#tryKubernetes{display:none}#viewDocs{border:2px solid #fff;background-color:transparent;transition:.3s}#viewDocs:hover{background-color:#fff;color:#303030}#tryKubernetes{width:0;padding:0 0;border:1px solid transparent;background-color:transparent;text-align:center;white-space:nowrap;vertical-align:middle;overflow:hidden;transition:.3s}#hamburger{display:inline-block;position:relative;vertical-align:middle;padding:0;border:0;background:none}#hamburger div,#hamburger:before,#hamburger:after{position:absolute;left:15%;width:70%;height:2px;background-color:#3371e3;transition:.3s;content:""}#hamburger div{top:calc(50% - 1px)}#hamburger:before{top:24%}#hamburger:after{bottom:24%}#hamburger:hover div,#hamburger:hover:before,#hamburger:hover:after{background-color:#fff}#mainNav h5{color:#3371e3;font-weight:normal}#mainNav main{white-space:nowrap;overflow:hidden;clear:both}#mainNav .nav-box{float:left;white-space:normal}#mainNav h3 a{color:#3371e3;text-decoration:none}ul.global-nav{display:none}ul.global-nav li{display:inline-block;margin-right:14px}ul.global-nav li a{color:#fff;font-weight:400;padding:0;position:relative}ul.global-nav li a.active:after{position:absolute;width:100%;height:2px;content:"";bottom:-4px;left:0;background:#fff}ul.global-nav li a .ui-icon{filter:brightness(0) invert(1)}ul.global-nav li ul{display:none;position:fixed;top:40px;text-align:left}ul.global-nav li ul li{display:block;height:28px}ul.global-nav li ul li a{background:#303030;color:#fff;padding:7px}ul.global-nav li ul li:last-child a{border-radius:7px}ul.global-nav li:hover ul{display:block}.flip-nav ul.global-nav li a,.open-nav ul.global-nav li a{color:#303030}.flip-nav ul.global-nav li a .ui-icon,.open-nav ul.global-nav li a .ui-icon{filter:brightness(0)}.flip-nav ul.global-nav li ul li a{background:#fff;color:#303030}.flip-nav ul.global-nav li a.active:after,.flip-nav ul.global-nav li ul li a.active:after,.open-nav ul.global-nav li a.active:after{background:#3371e3}.flip-nav header{background-color:#fff}.open-nav body{overflow:hidden}.open-nav #cellophane{display:block;z-index:9998}.open-nav header{background-color:#e8e8e8;z-index:9999}.open-nav #hamburger div{opacity:0}.open-nav #hamburger:before,.open-nav #hamburger:after{left:12px;transform-origin:0 1px}.open-nav #hamburger:before{transform:rotate(45deg)}.open-nav #hamburger:after{transform:rotate(-45deg)}.open-nav #tryKubernetes,.y-enough #tryKubernetes{width:auto;padding:0 20px;background-color:#3371e3;border-color:#3371e3}.flip-nav header,.open-nav header{box-shadow:0 1px 2px #4c4c4c}.flip-nav #viewDocs,.open-nav #viewDocs{border-color:#303030;color:#303030}.flip-nav #viewDocs:hover,.open-nav #viewDocs:hover{border-color:#3371e3;background-color:#3371e3;color:#fff}.flip-nav #hamburger:hover div,.flip-nav #hamburger:hover:before,.flip-nav #hamburger:hover:after,.open-nav #hamburger:hover div,.open-nav #hamburger:hover:before,.open-nav #hamburger:hover:after{background-color:#303030}#hero{background-image:url(/images/texture.png);background-color:#303030;text-align:center;padding-left:0;padding-right:0;margin-bottom:0;position:relative}#hero.bot-bar:after{display:block;margin-bottom:-20px;height:8px;width:100%;background-color:rgba(255,255,255,0.1);content:""}#hero.no-sub h5{display:none}#hero.no-sub h1{margin-bottom:20px}#home #hero:after{display:none}#vendorStrip{position:relative;background-color:rgba(255,255,255,0.1);font-weight:100;white-space:nowrap;text-align:center}#vendorStrip li a{color:rgba(255,255,255,0.5)}#vendorStrip li a.YAH{color:#fff;position:relative}footer{width:100%;background-image:url(/images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav a{width:100%;text-align:center;display:inline-block;margin:10px 0;font-size:24px;font-weight:300;color:#fff;text-decoration:none}footer .social{margin:20px 0}footer .social div{text-align:center;margin-bottom:20px}footer .social div:last-child{margin:30px 0}footer .social span{display:block;margin-bottom:8px}footer .social input{text-align:center}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(/images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}.social a.button{background-image:none;width:auto;height:auto}.social a.button:hover{color:#3371e3}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#viewDocs{display:none}section{background-color:#fff}#hero{background-color:#303030}#hero h5{margin:20px 0;line-height:28px}#vendorStrip{position:relative}#vendorStrip ul{float:left}#vendorStrip li{display:inline-block;height:100%}#vendorStrip a{display:block;height:100%;color:#fff;font-size:.75em;font-weight:bold}#vendorStrip li+li{margin-left:0}#docs #vendorStrip{line-height:44px;max-width:100%;overflow-x:scroll}#docs #vendorStrip ul{float:none}#docs #vendorStrip #searchBox{float:none;display:block;width:80%;margin:0 auto;height:44px;line-height:44px;position:relative}#docs #vendorStrip #searchBox:before{position:absolute;width:15px;height:15px;content:"";right:8px;top:7px;background-image:url(/images/search-icon.svg);background-repeat:no-repeat;background-size:100% 100%;z-index:1}#docs #vendorStrip #search{width:100%;padding:0 10px;height:30px;line-height:30px;font-size:16px;vertical-align:top;background:#fff;border:none;border-radius:4px;position:relative}#encyclopedia{position:relative;padding:50px 20px 20px 20px;overflow:hidden;font-size:14px}#encyclopedia>div{height:100%}#docsToc{position:fixed;background-color:#fff;top:0;left:0;width:0;height:100vh;overflow:hidden;padding:50px 0;z-index:999999;transition:.3s}#docsToc .yah>.title{background-color:#f7f7f7;border-left:3px solid #3371e3;padding:7.5px 10px 7.5px 18px;margin-left:-3px;color:#3371e3}.open-toc body{overflow:hidden}.open-toc #docsToc{padding:50px 20px;width:400px;max-width:100vw;overflow-y:auto}.pi-accordion>.container:first-child>.item:first-child>.title:first-child{padding-left:0;font-size:1.5em;font-weight:700}.pi-accordion>.container:first-child>.item.yah:first-child>.title:first-child{margin-left:-20px !important}.pi-accordion .item{overflow:hidden}.pi-accordion .title{color:#303030;position:relative;padding:7.5px 10px 7.5px 18px;cursor:pointer;transition:.3s}.pi-accordion .title:hover{color:#3371e3}.pi-accordion a.item>.title{color:#000}.pi-accordion a.item>.title:hover{color:#3371e3}.pi-accordion div.item>.title:before{content:"";position:absolute;top:12px;left:2px;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #3371e3;transform:rotate(0deg);transition:.3s}.pi-accordion .wrapper{position:relative;width:100%;transition:height .3s}.pi-accordion .content{padding-left:20px;opacity:0;transition:.3s}.pi-accordion .item.on>.title:before{transform:rotate(90deg)}.pi-accordion .item.on>.wrapper>.content{opacity:1}dt{margin-bottom:8px}dd{margin-bottom:16px}.pi-pushmenu{display:none;position:fixed;top:0;width:100%;height:100%;opacity:0;transition:opacity .3s}.pi-pushmenu.on{opacity:1}.pi-pushmenu .overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4)}.pi-pushmenu .sled{position:absolute;top:0;width:0;height:100%;background-color:#fff;overflow:auto;transition:.3s}.pi-pushmenu.on .sled{width:400px;max-width:100vw}.pi-pushmenu .top-bar{height:0;line-height:60px;background-color:#444}.pi-pushmenu ul{margin-top:25px}.pi-pushmenu li{position:relative;display:block;width:100%;min-height:45px;padding:0 60px 0 20px;border-bottom:1px solid #ccc}.pi-pushmenu a{display:inline-block;width:100%;height:45px;line-height:45px;font-family:"Roboto",sans-serif;font-size:20px;color:#3371e3}.pi-pushmenu .button{background:none;padding:0}.pi-pushmenu ul ul{padding:0 20px}.pi-pushmenu ul ul li{min-height:40px}.pi-pushmenu ul ul a{height:40px;line-height:40px;font-size:18px;color:#555}.push-menu-close-button{position:absolute;top:0;right:0;width:50px;height:50px}.push-menu-close-button:before,.push-menu-close-button:after{content:"";position:absolute;top:calc(50% - 1px);left:25%;width:50%;height:2px;background-color:#000}.push-menu-close-button:before{transform:rotate(45deg)}.push-menu-close-button:after{transform:rotate(-45deg)}#docsContent{position:relative;float:right;width:100%}#docsContent *+h2,#docsContent *+h3,#docsContent *+h4,#docsContent *+h5,#docsContent *+h6{margin-top:30px}#docsContent h1,#docsContent h2,#docsContent h3,#docsContent h4,#docsContent h5,#docsContent h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}#docsContent h1:before,#docsContent h2:before,#docsContent h3:before,#docsContent h4:before,#docsContent h5:before,#docsContent h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}#docsContent h1,#docsContent h2{border-bottom:1px solid #ccc}#docsContent h1{font-size:32px;padding-right:60px}#docsContent h2{font-size:28px}#docsContent h3{font-size:24px;font-weight:300;margin-bottom:5px}#docsContent h4{font-size:20px;margin-bottom:0px}#docsContent h5,#docsContent h6{font-size:16px;font-weight:500}#docsContent p{font-size:16px;font-weight:300;line-height:1.75em}#docsContent p+p{margin-top:10px}#docsContent code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}#docsContent a code{color:#3371e3;text-decoration:underline}#docsContent pre .pi,#docsContent pre .s{margin:0;padding:0}#docsContent .highlight code span,#docsContent code,#docsContent pre code{font-family:"Roboto Mono",monospace}#docsContent code,#docsContent pre code{color:#303030}#docsContent pre code{padding:0}#docsContent pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}#docsContent h1 code,#docsContent h2 code,#docsContent h3 code,#docsContent h4 code,#docsContent h5 code,#docsContent h6 code{font-size:inherit;background-color:transparent}#docsContent .includecode{table-layout:fixed}#docsContent .includecode,#docsContent .includecode th,#docsContent .includecode td{padding:0 !important}#docsContent .includecode th{text-align:right !important;padding:10px !important}#docsContent .includecode th a,#docsContent .includecode th a code{color:#fff !important;background-color:transparent !important}#docsContent .includecode pre{margin:0 !important}#docsContent ul li{list-style:disc}#docsContent ol li{list-style:decimal}#docsContent ul,#docsContent ol{margin:20px 0;padding-left:30px;font-weight:300}#docsContent ul ul,#docsContent ol ol,#docsContent ul ol,#docsContent ol ul{margin:.75em 0}#docsContent li{margin-bottom:.75em;font-size:16px;line-height:1.75em}#docsContent table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}#docsContent thead,#docsContent tr:nth-child(even){background-color:#f7f7f7}#docsContent thead{background-color:#555;color:#fff}#docsContent th,#docsContent td{padding:8px;text-align:left;margin:0}#docsContent th{font-weight:normal}#docsContent td{font-size:.85em}#docsContent #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}#docsContent #markdown-toc,#docsContent #TableOfContents{margin-bottom:20px}#docsContent #markdown-toc ul,#docsContent #markdown-toc li,#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disc;color:#3371e3}#docsContent #markdown-toc ul,#docsContent #TableOfContents ul{padding:0 15px;margin:0}#docsContent #markdown-toc li,#docsContent #TableOfContents li{padding:0;line-height:1.5em;margin-bottom:0}#docsContent #markdown-toc a,#docsContent #TableOfContents a{position:relative;color:#3371e3;font-weight:700}#docsContent img{max-width:100%}#docsContent #TableOfContents>ul>li{list-style:none}#docsContent #TableOfContents ul,#docsContent #TableOfContents li{list-style:disk}.fixed footer{position:fixed;bottom:0}#miceType{clear:both;font-size:11px;line-height:18px;color:#aaa}html.search #docsContent{position:relative;float:none;width:90%;max-width:850px;margin:0 auto}html.search #docsContent #editPageButton{display:none}html.search #docsContent table{border:0;margin-bottom:0}html.search #docsContent td{padding:0}html.search #docsContent h1{margin-bottom:0;border-bottom:0;padding-bottom:0;padding-left:8px}#home.flip-nav .logo,#home.open-nav .logo{background-image:url(/images/nav_logo2.svg)}#home #hero{margin-bottom:0;padding-bottom:1px}#home #hero main{padding:0 10px;margin-bottom:30px}#home #hero #vendorStrip{display:none}#oceanNodes{padding-top:60px;padding-bottom:60px}#oceanNodes a{color:#3371e3}#oceanNodes main{margin-bottom:60px;min-height:160px}#oceanNodes .image-wrapper{max-width:75%;margin:0 auto 20px;text-align:center}#oceanNodes .image-wrapper img{width:100%;max-width:160px}#oceanNodes main:first-child .image-wrapper{max-width:100%}#oceanNodes main:first-child .image-wrapper img{max-width:491px}#oceanNodes h3{margin-bottom:30px}#video{height:200px}#video{width:100%;position:relative;background-position:center center;background-size:cover}#video>.light-text{display:none;position:absolute;top:50%;left:75%;width:525px;padding-right:80px;transform:translate(-50%, -50%);color:#fff}#video h2{font-size:32px;line-height:44px;margin-bottom:20px}#video p{margin-bottom:20px}#video #desktopKCButton{position:relative;font-size:18px;background-color:#303030;border-radius:8px;color:#fff;padding:20px 10px 20px 10px}#video #desktopShowVideoButton{position:relative;font-size:24px;background-color:#fff;border-radius:8px;color:#3371e3;padding:15px 30px 15px 80px;margin-bottom:15px}#video #desktopShowVideoButton:before{content:"";position:absolute;position:absolute;top:50%;left:40px;transform:translate(-50%, -50%);width:0;height:0;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #3371e3}#video #mobileShowVideoButton{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80px;height:80px;border-radius:50%;background-color:transparent;border:5px solid rgba(255,255,255,0.2);overflow:visible}#video #mobileShowVideoButton:after{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);left:40px;content:"";width:0;height:0;border-style:solid;border-width:20px 0 20px 30px;border-color:transparent transparent transparent #fff}#videoPlayer{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,0.9);display:none}#videoPlayer iframe{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:80vw;height:45vw;max-width:142.2222222222vh;max-height:80vh}#videoPlayer #closeButton{position:absolute;top:20px;right:20px;width:50px;height:50px;border:2px solid transparent;transition:.3s}#videoPlayer #closeButton:before,#videoPlayer #closeButton:after{content:"";position:absolute;top:calc(50% - 1px);left:10%;width:80%;height:2px;background-color:#fff}#videoPlayer #closeButton:before{transform:rotate(45deg)}#videoPlayer #closeButton:after{transform:rotate(-45deg)}#videoPlayer #closeButton:hover{border-color:#fff}#cncf{padding-top:60px;padding-bottom:140px;background-image:url(/images/cncf-color.png);background-position:center 100px;background-repeat:no-repeat;background-size:300px}#kubeweekly{background-color:#f7f7f7;padding-top:60px;padding-bottom:140px;background-size:auto;font-family:"Roboto Mono",monospace !important;font-size:24px;font-weight:bold}#kubeweekly h5{font-size:20px}.subscribe-button{border-radius:6px;padding:0 20px;line-height:31px;color:#fff;background-color:blue;text-decoration:none;font-size:14px}#features{padding-top:140px;background-color:#f7f7f7;background-image:url(/images/wheel.png);background-position:center 60px;background-repeat:no-repeat;background-size:auto}.feature-box{width:100%;overflow:hidden;clear:both}.feature-box h4{line-height:normal;margin-bottom:15px}.feature-box>div:first-child{float:left}.feature-box>div:last-child{float:right}#features h3{margin-bottom:20px}#features .feature-box{margin-bottom:0}#features .feature-box>div{width:100%;margin-bottom:40px}#community.open-nav .logo,#community.flip-nav .logo,.gridPage.open-nav .logo,.gridPage.flip-nav .logo{background-image:url(/images/nav_logo2.svg)}#community #hero,.gridPage #hero{padding-bottom:20px}#community #mainContent,.gridPage #mainContent{padding:20px 0}#community #mainContent main,.gridPage #mainContent main{max-width:none}#community #mainContent a,.gridPage #mainContent a{color:#3371e3}#community #mainContent .content,.gridPage #mainContent .content{margin-bottom:30px;padding:30px 0}#community #mainContent .content h1,#community #mainContent .content h2,#community #mainContent .content h3,#community #mainContent .content h4,#community #mainContent .content h5,#community #mainContent .content h6,#community #mainContent .content p,.gridPage #mainContent .content h1,.gridPage #mainContent .content h2,.gridPage #mainContent .content h3,.gridPage #mainContent .content h4,.gridPage #mainContent .content h5,.gridPage #mainContent .content h6,.gridPage #mainContent .content p{line-height:normal;max-width:1200px;padding:0 20px;margin:0 auto 20px}#community #mainContent .content:nth-child(even),.gridPage #mainContent .content:nth-child(even){background-color:#f7f7f7}#community #mainContent .company-logos,.gridPage #mainContent .company-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .company-logos img,.gridPage #mainContent .company-logos img{width:auto;margin:10px;background-color:#f7f7f7}#community #mainContent .partner-logos,.gridPage #mainContent .partner-logos{text-align:center;max-width:1200px;margin:0 auto}#community #mainContent .partner-logos img,.gridPage #mainContent .partner-logos img{width:auto;margin:10px;background-color:#fff;box-shadow:0 5px 5px rgba(0,0,0,0.24),0 0 5px rgba(0,0,0,0.12)}#community #mainContent #calendarMeetings,.gridPage #mainContent #calendarMeetings{position:relative;width:80vw;height:60vw;max-width:1200px;max-height:900px;margin:20px auto}#community #mainContent #calendarEvents,.gridPage #mainContent #calendarEvents{position:relative;width:80vw;height:30vw;max-width:1200px;max-height:450px;margin:20px auto}#community #mainContent iframe,.gridPage #mainContent iframe{position:absolute;border:0;width:100%;height:100%}.ui-icon{display:inline-block !important}#feature-state-dialog-link{text-decoration:none !important;padding:5px !important}#feature-state-dialog-link a:visited{color:#454545 !important}#feature-state-dialog-link a code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}#feature-state-dialog{background:#fff !important;border:1px solid #ddd !important;padding:.5em 1em !important}#feature-state-dialog ul,#feature-state-dialog li{list-style:disc !important;margin:4px 12px !important}#feature-state-dialog p{margin:8px 0px !important}#feature-state-dialog code{display:inline-block !important;box-sizing:border-box !important;background-color:#f7f7f7 !important;color:#303030 !important;font-family:"Roboto Mono",monospace !important;vertical-align:baseline !important;font-size:14px !important;font-weight:bold !important;padding:0px 4px !important}.ui-dialog{background:#f7f7f7 !important;padding:.5em}.ui-dialog-content{position:relative;float:right;width:100%}.ui-dialog-content *+h2,.ui-dialog-content *+h3,.ui-dialog-content *+h4,.ui-dialog-content *+h5,.ui-dialog-content *+h6{margin-top:30px}.ui-dialog-content h1,.ui-dialog-content h2,.ui-dialog-content h3,.ui-dialog-content h4,.ui-dialog-content h5,.ui-dialog-content h6{line-height:normal;font-weight:500;margin-bottom:30px;padding-bottom:10px}.ui-dialog-content h1:before,.ui-dialog-content h2:before,.ui-dialog-content h3:before,.ui-dialog-content h4:before,.ui-dialog-content h5:before,.ui-dialog-content h6:before{display:block;content:" ";margin-top:-100px;height:100px;visibility:hidden}.ui-dialog-content h1,.ui-dialog-content h2{border-bottom:1px solid #ccc}.ui-dialog-content h1{font-size:32px;padding-right:60px}.ui-dialog-content h2{font-size:28px}.ui-dialog-content h3{font-size:24px;font-weight:300;margin-bottom:5px}.ui-dialog-content h4{font-size:20px;margin-bottom:0px}.ui-dialog-content h5,.ui-dialog-content h6{font-size:16px;font-weight:500}.ui-dialog-content p{font-size:16px;font-weight:300;line-height:1.75em}.ui-dialog-content p+p{margin-top:10px}.ui-dialog-content code{display:inline-block;box-sizing:border-box;background-color:#f7f7f7;color:#303030;font-family:"Roboto Mono",monospace;vertical-align:baseline;font-size:14px;font-weight:bold;padding:2px 4px}.ui-dialog-content a code{color:#3371e3;text-decoration:underline}.ui-dialog-content pre .pi,.ui-dialog-content pre .s{margin:0;padding:0}.ui-dialog-content .highlight code span,.ui-dialog-content code,.ui-dialog-content pre code{font-family:"Roboto Mono",monospace}.ui-dialog-content code,.ui-dialog-content pre code{color:#303030}.ui-dialog-content pre code{padding:0}.ui-dialog-content pre{background-color:#f7f7f7;display:block;margin:20px 0;padding:15px;position:relative;overflow-x:auto}.ui-dialog-content h1 code,.ui-dialog-content h2 code,.ui-dialog-content h3 code,.ui-dialog-content h4 code,.ui-dialog-content h5 code,.ui-dialog-content h6 code{font-family:inherit;font-size:inherit;background-color:transparent}.ui-dialog-content .includecode{table-layout:fixed}.ui-dialog-content .includecode,.ui-dialog-content .includecode th,.ui-dialog-content .includecode td{padding:0 !important}.ui-dialog-content .includecode th{text-align:right !important;padding:10px !important}.ui-dialog-content .includecode th a,.ui-dialog-content .includecode th a code{color:#fff !important;background-color:transparent !important}.ui-dialog-content .includecode pre{margin:0 !important}.ui-dialog-content ul li{list-style:disc}.ui-dialog-content ol li{list-style:decimal}.ui-dialog-content ul,.ui-dialog-content ol{margin:20px 0;padding-left:30px;font-weight:300}.ui-dialog-content ul ul,.ui-dialog-content ol ol,.ui-dialog-content ul ol,.ui-dialog-content ol ul{margin:.75em 0}.ui-dialog-content li{margin-bottom:.75em;font-size:16px;line-height:1.75em}.ui-dialog-content table{width:100%;border:1px solid #ccc;border-spacing:0;margin-top:30px;margin-bottom:30px}.ui-dialog-content thead,.ui-dialog-content tr:nth-child(even){background-color:#f7f7f7}.ui-dialog-content thead{background-color:#555;color:#fff}.ui-dialog-content th,.ui-dialog-content td{padding:8px;text-align:left;margin:0}.ui-dialog-content th{font-weight:normal}.ui-dialog-content td{font-size:.85em}.ui-dialog-content #editPageButton{position:absolute;top:-25px;right:5px;width:50px;height:50px;line-height:50px;border-radius:50%;white-space:nowrap;text-indent:50px;overflow:hidden;background:#3371e3 url(/images/icon-pencil.svg) no-repeat;background-position:12px 10px;background-size:29px 29px}.ui-dialog-content #markdown-toc{margin-bottom:20px}.ui-dialog-content #markdown-toc ul,.ui-dialog-content #markdown-toc li{list-style:disc;color:#3371e3}.ui-dialog-content #markdown-toc ul{padding:0 15px;margin:0}.ui-dialog-content #markdown-toc li{padding:0;line-height:1.5em;margin-bottom:0}.ui-dialog-content #markdown-toc a{position:relative;color:#3371e3;font-weight:700}.ui-dialog-content img{max-width:100%}.ui-dialog-content a{text-decoration:underline}.ui-dialog-buttonpane{background:#f7f7f7 !important}.ui-widget-header{background:transparent !important;background-color:transparent !important;border:0px !important}.ui-tabs ul,.ui-tabs ol,.ui-tabs li{padding:0px !important;list-style:none !important;margin-bottom:0px !important;margin-left:4px !important}.ui-tabs-panel ul li{list-style:disc !important}.ui-tabs-panel ol li{list-style:decimal !important}.ui-widget-content{border:0px !important}.ui-widget-content table{margin:0px !important}.ui-tabs .ui-tabs-panel{border:1px solid #ccc !important}.ui-tabs-anchor{text-decoration:none !important}#talkToUs h3,#talkToUs h4{text-align:center}#talkToUs h3{margin-bottom:15px}#talkToUs h4{line-height:normal;margin-bottom:50px}#talkToUs h4 br{display:none}#talkToUs #bigSocial{overflow:hidden}#talkToUs #bigSocial div{width:100%;float:left;padding:30px;padding-top:110px;background-position:center top;background-size:auto;background-repeat:no-repeat}#talkToUs #bigSocial div:nth-child(1){background-image:url(/images/twitter_icon.png)}#talkToUs #bigSocial div:nth-child(2){background-image:url(/images/github_icon.png)}#talkToUs #bigSocial div:nth-child(3){background-image:url(/images/slack_icon.png)}#talkToUs #bigSocial div:nth-child(4){background-image:url(/images/stackoverflow_icon.png)}#talkToUs #bigSocial div+div{margin-top:20px;margin-left:0}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-size:24px;font-weight:400;text-decoration:none;margin-bottom:15px}#talkToUs #bigSocial a,#talkToUs #bigSocial p{text-align:center;width:100%}#home #talkToUs main{padding:30px 0}#home #talkToUs h5{font-size:20px}#home #caseStudiesWrapper{position:relative;text-align:center;margin-bottom:30px}#home #caseStudiesWrapper img{padding-bottom:1rem}#home #caseStudiesWrapper div{position:relative;display:inline-block;vertical-align:top;width:100%;min-height:230px;margin-bottom:60px;padding-right:1rem;background-position:top center}#home #caseStudiesWrapper p{font-size:20px}#home #caseStudiesWrapper a{position:absolute;bottom:-30px;left:50%;transform:translateX(-50%);color:#3371e3;font-weight:400}.cse .gsc-control-cse,.gsc-control-cse{padding:0}.gsc-control-cse table,.gsc-control-cse-en table{margin:0px !important}.gsc-above-wrapper-area{border-bottom:0}#bing-results-container{margin-top:30px;margin-left:20px}.bing-result{margin-bottom:20px}.bing-result-name a{font-size:16px;color:#00c}.bing-result-url{color:green;font-size:13px}.bing-result-snippet{color:#000;font-size:11px}#bing-pagination-container{margin:10px;margin-left:20px}.bing-page-anchor{text-decoration:none !important;cursor:pointer;color:#00c;margin-right:8px}@media screen and (min-width: 750px){h1{font-size:32px;line-height:40px}h2{font-size:28px;line-height:60px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:40px}h5{font-size:16px;line-height:36px}p{font-size:14px;line-height:22px}section,header,#vendorStrip{padding-left:20px;padding-right:20px}section main,header main,#vendorStrip main{width:100%;max-width:100%}header{height:80px}.nav-buttons{height:80px;line-height:80px}.nav-buttons .button+*{margin-left:30px}#hamburger{width:50px;height:50px}#mainNav{padding:140px 0 30px}#mainNav h5{margin-bottom:1em}#mainNav h3{margin-bottom:.6em}#mainNav .nav-box{width:20%}#mainNav .nav-box+.nav-box{margin-left:calc(20% / 3)}#mainNav main+main{margin-top:60px}#mainNav .left .button{height:50px;line-height:50px;font-size:18px}.open-nav #tryKubernetes,.y-enough #tryKubernetes{margin-left:30px}#hero{padding-top:80px}#docs #hero h1,#docs #hero h5{padding-left:20px;padding-right:20px}#vendorStrip{height:88px;line-height:88px;font-size:16px}p{font-size:16px;line-height:24px;letter-spacing:.1px}h1{font-size:36px;line-height:44px}h3{font-size:28px;line-height:36px}h4{font-size:24px;line-height:40px}#home #viewDocs,#home #tryKubernetes{display:inline-block}#vendorStrip{display:block;text-align:center}#vendorStrip img{max-height:24px;vertical-align:middle;margin:0 30px}#docs #vendorStrip li a{font-size:1em;font-weight:normal}#docs #vendorStrip li li+li{margin-left:60px}#oceanNodes h3{text-align:left;margin-bottom:18px}#oceanNodes main{position:relative;clear:both;display:table;height:160px}#oceanNodes main .content{display:table-cell;position:relative;vertical-align:middle}#oceanNodes main .image-wrapper{position:absolute;top:50%;max-width:25%;max-height:100%;transform:translateY(-50%)}#oceanNodes main:nth-child(odd){padding-right:210px}#oceanNodes main:nth-child(odd) .image-wrapper{right:0}#oceanNodes main:nth-child(even){padding-left:210px}#oceanNodes main:nth-child(even) .image-wrapper{left:0}#oceanNodes main:nth-child(1){padding-right:0}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:center}#oceanNodes main:nth-child(1) .image-wrapper{position:relative;display:block;float:none;max-width:100%;transform:none}#oceanNodes main:nth-child(1) .content{display:block}#oceanNodes main img{width:100%}#video{height:400px;display:block}#video>.light-text{display:block}#mobileShowVideoButton{display:none}#features{padding-bottom:60px}#features .feature-box{margin-bottom:30px}#features .feature-box:last-child{margin-bottom:0}#features h3{margin-bottom:40px}#features .feature-box>div{width:45%;margin-bottom:0}#talkToUs #bigSocial div{width:calc(50% - 15px)}#talkToUs #bigSocial div+div{margin-top:0}#talkToUs #bigSocial div:nth-child(2){margin-left:20px}#talkToUs #bigSocial div:nth-child(3){margin-top:20px}#talkToUs #bigSocial div:nth-child(4){margin-top:20px;margin-left:20px}#talkToUs #bigSocial a{display:inline-block;color:#3371e3;font-weight:400;text-decoration:none}footer nav{text-align:center}footer nav a{width:30%;padding:0 20px}footer .social{text-align:center}footer .social div{display:inline-block}footer .social div:last-child{display:block;margin:0}footer .social span{display:inline-block;margin-right:10px}footer .social input{text-align:left}#home #caseStudiesWrapper div{width:48%}}@media screen and (min-width: 1025px){#hamburger{display:none}ul.global-nav{display:inline-block}#docs #vendorStrip #searchBox:before{top:15px}#vendorStrip{height:44px;line-height:44px}#vendorStrip li a.YAH:after{content:"";display:block;position:absolute;left:0;bottom:0;width:100%;height:4px;background-color:#3371e3}#vendorStrip #searchBox{float:right}#home #hero #vendorStrip{display:block}#docs #hero h1,#docs #hero h5{text-align:left}#docs #hero #vendorStrip ul{float:left}#docs #hero #vendorStrip #searchBox{float:right;width:250px}#docs #hero #vendorStrip #search{vertical-align:middle}#docs .flyout-button{display:none}#docs .logo{position:relative;float:left;display:block;width:180px;height:88px;top:0;left:0;transform:none;background-image:url(../images/nav_logo.svg)}#docs.flip-nav .logo,#docs.open-nav .logo{background-image:url(../images/nav_logo2.svg)}#encyclopedia{padding:50px 50px 100px 100px;clear:both}#docsToc{position:relative;float:left;padding:0 20px;left:0;width:350px;z-index:auto}#docsToc .push-menu-close-button{display:none}#docsContent{width:calc(100% - 400px)}#docsContent #editPageButton{right:-25px}section main,header main,footer main{max-width:1200px}header,#vendorStrip,#encyclopedia,#hero h1,#hero h5,#docs #hero h1,#docs #hero h5,#community #hero h1,.gridPage #hero h1,#community #hero h5,.gridPage #hero h5{padding-left:100px;padding-right:100px}#vendorStrip{padding-right:10px}#home section main,#home header main,#home footer main{max-width:1000px}#oceanNodes main{position:relative;max-width:830px}#oceanNodes main:nth-child(1){max-width:1000px;padding-right:475px}#oceanNodes main:nth-child(1) h3,#oceanNodes main:nth-child(1) p{text-align:left}#oceanNodes main:nth-child(1) .image-wrapper{position:absolute;max-width:48%;transform:translateY(-50%)}#oceanNodes main:nth-child(1) .image-wrapper img{max-width:425px}#video{height:550px;position:relative;background-position:center center;background-size:cover}#talkToUs h4 br{display:block}#talkToUs #bigSocial div{width:calc(25% - 18px)}#talkToUs #bigSocial div+div{margin-left:20px}footer{width:100%;background-image:url(../images/texture.png);background-color:#303030}footer main{padding:20px 0}footer nav{overflow:hidden;margin-bottom:20px}footer nav a{width:16.65%;float:left;font-size:24px;font-weight:300;white-space:nowrap}footer .social{padding:0 30px;max-width:1200px}footer .social div{float:left}footer .social div:last-child{float:right}#search,#wishField{background-color:transparent;padding:10px;font-size:16px;font-weight:100;color:#fff;border:1px solid #fff;transition:.3s}#search:focus,#wishField:focus{background-color:#f7f7f7;color:#303030}.social a{display:inline-block;background-image:url(../images/social_sprite.png);background-repeat:no-repeat;background-size:auto;width:50px;height:50px;border-radius:5px;margin-right:10px}.social a:hover{background-color:#fff}.social a span{position:absolute;display:block;height:0;overflow:hidden}a.twitter{background-position:0 0}a.twitter:hover{background-position:0 100%}a.stack-overflow{background-position:-50px 0}a.stack-overflow:hover{background-position:-50px 100%}a.slack{background-position:-100px 0}a.slack:hover{background-position:-100px 100%}a.github{background-position:-150px 0}a.github:hover{background-position:-150px 100%}a.mailing-list{background-position:-200px 0}a.mailing-list:hover{background-position:-200px 100%}a.calendar{background-position:-250px 0}a.calendar:hover{background-position:-250px 100%}#community #hero,.gridPage #hero{text-align:left}#community #hero h1,.gridPage #hero h1{padding:20px 100px}#community #tryKubernetes,.gridPage #tryKubernetes{width:auto;background-color:#3371e3;padding:0 20px}#bigSocial div{width:calc(25% - 18px)}#home #caseStudiesWrapper div{width:24%;min-height:260px}}@media screen and (min-width: 1300px){#vendorStrip{padding-right:100px}}@media screen and (min-width: 456px){#vendorStrip li+li{margin-left:20px}} /*# sourceMappingURL=styles.css.map */ diff --git a/static/css/styles.css.map b/static/css/styles.css.map index d17ea3ec74..7706f071e3 100644 --- a/static/css/styles.css.map +++ b/static/css/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["../../sass/_reset.sass","../../sass/_skin.sass","../../sass/_size.sass","../../sass/_base.sass","../../sass/_tablet.sass","../../sass/_desktop.sass"], "names": [], "file": "styles.css" From caf3defcad73b0016dc9b61c7ab4945179a3433a Mon Sep 17 00:00:00 2001 From: Rob Hirschfeld Date: Wed, 17 Oct 2018 14:28:23 -0500 Subject: [PATCH 176/181] Adding Kubernetes Kubeadm + Digital Rebar integration for On-Prem installs (#10118) * add Digital Rebar KRIB to installer lists * second review, minor cleanups * address corrections flagged by @neolit123 * resolve merge - fix table * add Digital Rebar KRIB to installer lists * second review, minor cleanups * address corrections flagged by @neolit123 --- .../en/docs/setup/on-premises-metal/krib.md | 95 +++++++++++++++++++ content/en/docs/setup/pick-right-solution.md | 2 + .../administer-cluster/cluster-management.md | 1 + 3 files changed, 98 insertions(+) create mode 100644 content/en/docs/setup/on-premises-metal/krib.md diff --git a/content/en/docs/setup/on-premises-metal/krib.md b/content/en/docs/setup/on-premises-metal/krib.md new file mode 100644 index 0000000000..10dcbe99bf --- /dev/null +++ b/content/en/docs/setup/on-premises-metal/krib.md @@ -0,0 +1,95 @@ +--- +title: Installing Kubernetes with Digital Rebar Provision (DRP) via KRIB +krib-version: 2.4 +author: Rob Hirschfeld (zehicle) +--- + +## Overview + +This guide helps to install a Kubernetes cluster hosted on bare metal with [Digital Rebar Provision](https://github.com/digitalrebar/provision) using only its Content packages and *kubeadm*. + +Digital Rebar Provision (DRP) is an integrated Golang DHCP, bare metal provisioning (PXE/iPXE) and workflow automation platform. While [DRP can be used to invoke](https://provision.readthedocs.io/en/tip/doc/integrations/ansible.html) [kubespray](../kubespray), it also offers a self-contained Kubernetes installation known as [KRIB (Kubernetes Rebar Integrated Bootstrap)](https://github.com/digitalrebar/provision-content/tree/master/krib). + +{{< note >}} +**Note:** KRIB is not a _stand-alone_ installer: Digital Rebar templates drive a standard *[kubeadm](/docs/admin/kubeadm/)* configuration that manages the Kubernetes installation with the [Digital Rebar cluster pattern](https://provision.readthedocs.io/en/tip/doc/arch/cluster.html#rs-cluster-pattern) to elect leaders _without external supervision_. +{{< /note >}} + + +KRIB features: + +* zero-touch, self-configuring cluster without pre-configuration or inventory +* very fast, no-ssh required automation +* bare metal, on-premises focused platform +* highly available cluster options (including splitting etcd from the controllers) +* dynamic generation of a TLS infrastructure +* composable attributes and automatic detection of hardware by profile +* options for persistent, immutable and image-based deployments +* support for Ubuntu 18.04, CentOS/RHEL 7 and others + +## Creating a cluster + +Review [Digital Rebar documentation](https://https://provision.readthedocs.io/en/tip/README.html) for details about installing the platform. + +The Digital Rebar Provision Golang binary should be installed on a Linux-like system with 16 GB of RAM or larger (Packet.net Tiny and Rasberry Pi are also acceptable). + +### (1/5) Discover servers + +Following the [Digital Rebar installation](https://provision.readthedocs.io/en/tip/doc/quickstart.html), allow one or more servers to boot through the _Sledgehammer_ discovery process to register with the API. This will automatically install the Digital Rebar runner and to allow for next steps. + +### (2/5) Install KRIB Content and Certificate Plugin + +Upload the KRIB Content bundle (or build from [source](https://github.com/digitalrebar/provision-content/tree/master/krib)) and the Cert Plugin for your DRP platform (e.g.: [amd64 Linux v2.4.0](https://s3-us-west-2.amazonaws.com/rebar-catalog/certs/v2.4.0-0-02301d35f9f664d6c81d904c92a9c81d3fd41d2c/amd64/linux/certs)). Both are freely available via the [RackN UX](https://portal.rackn.io). + +### (3/5) Start your cluster deployment + +{{< note >}} +**Note:** KRIB documentation is dynamically generated from the source and will be more up to date than this guide. +{{< /note >}} + +Following the [KRIB documentation](https://provision.readthedocs.io/en/tip/doc/content-packages/krib.html), create a Profile for your cluster and assign your target servers into the cluster Profile. The Profile must set `krib\cluster-name` and `etcd\cluster-name` Params to be the name of the Profile. Cluster configuration choices can be made by adding additional Params to the Profile; however, safe defaults are provided for all Params. + +Once all target servers are assigned to the cluster Profile, start a KRIB installation Workflow by assigning one of the included Workflows to all cluster servers. For example, selecting `krib-live-cluster` will perform an immutable deployment into the Sledgehammer discovery operating system. You may use one of the pre-created read-only Workflows or choose to build your own custom variation. + +For basic installs, no further action is required. Advanced users may choose to assign the controllers, etcd servers or other configuration values in the relevant Params. + +### (4/5) Monitor your cluster deployment + +Digital Rebar Provision provides detailed logging and live updates during the installation process. Workflow events are available via a websocket connection or monitoring the Jobs list. + +During the installation, KRIB writes cluster configuration data back into the cluster Profile. + +### (5/5) Access your cluster + +The cluster is available for access via *kubectl* once the `krib/cluster-admin-conf` Param has been set. This Param contains the `kubeconfig` information necessary to access the cluster. + +For example, if you named the cluster Profile `krib` then the following commands would allow you to connect to the installed cluster from your local terminal. + + :: + + drpcli profiles get krib params krib/cluster-admin-conf > admin.conf + export KUBECONFIG=admin.conf + kubectl get nodes + + +The installation continues after the `krib/cluster-admin-conf` is set to install the Kubernetes UI and Helm. You may interact with the cluster as soon as the `admin.conf` file is available. + +## Cluster operations + +KRIB provides additional Workflows to manage your cluster. Please see the [KRIB documentation](https://provision.readthedocs.io/en/tip/doc/content-packages/krib.html) for an updated list of advanced cluster operations. + +### Scale your cluster + +You can add servers into your cluster by adding the cluster Profile to the server and running the appropriate Workflow. + +### Cleanup your cluster (for developers) + +You can reset your cluster and wipe out all configuration and TLS certificates using the the `krib-reset-cluster` Workflow on any of the servers in the cluster. + +{{< caution >}} +**Caution:** When running the reset Workflow, be sure not to accidentally target your production cluster! +{{< /caution >}} + +## Feedback + +* Slack Channel: [#community](https://rackn.slack.com/messages/community/) +* [GitHub Issues](https://github.com/digital/provision/issues) diff --git a/content/en/docs/setup/pick-right-solution.md b/content/en/docs/setup/pick-right-solution.md index 3eb057e8fa..882563a57c 100644 --- a/content/en/docs/setup/pick-right-solution.md +++ b/content/en/docs/setup/pick-right-solution.md @@ -162,6 +162,7 @@ These solutions are combinations of cloud providers and operating systems not co ### Bare Metal * [CoreOS](/docs/setup/custom-cloud/coreos/) +* [Digital Rebar](/docs/setup/on-premises-metal/krib/) * [Fedora (Single Node)](/docs/getting-started-guides/fedora/fedora_manual_config/) * [Fedora (Multi Node)](/docs/getting-started-guides/fedora/flannel_multi_node_cluster/) * [Kubernetes on Ubuntu](/docs/getting-started-guides/ubuntu/) @@ -223,6 +224,7 @@ any | [Gardener Cluster-Operator](https://kubernetes.io/blog/20 Alibaba Cloud Container Service For Kubernetes | ROS | CentOS | flannel/Terway | [docs](https://www.aliyun.com/product/containerservice) | Commercial Agile Stacks | Terraform | CoreOS | multi-support | [docs](https://www.agilestacks.com/products/kubernetes) | Commercial IBM Cloud Kubernetes Service | | Ubuntu | calico | [docs](https://console.bluemix.net/docs/containers/container_index.html) | Commercial +Digital Rebar | kubeadm | any | metal | [docs](/docs/setup/on-premises-metal/krib/) | Community ([@digitalrebar](https://github.com/digitalrebar)) {{< note >}} diff --git a/content/en/docs/tasks/administer-cluster/cluster-management.md b/content/en/docs/tasks/administer-cluster/cluster-management.md index 42920e1ec9..2871b52d03 100644 --- a/content/en/docs/tasks/administer-cluster/cluster-management.md +++ b/content/en/docs/tasks/administer-cluster/cluster-management.md @@ -73,6 +73,7 @@ Different providers, and tools, will manage upgrades differently. It is recomme * [kops](https://github.com/kubernetes/kops) * [kubespray](https://github.com/kubernetes-incubator/kubespray) * [CoreOS Tectonic](https://coreos.com/tectonic/docs/latest/admin/upgrade.html) +* [Digital Rebar](https://provision.readthedocs.io/en/tip/doc/content-packages/krib.html) * ... ## Resizing a cluster From fe40954ebde17a020061cb9816b48a5bf8e0fdb1 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Wed, 17 Oct 2018 16:51:00 -0700 Subject: [PATCH 177/181] tasks-with-cron-jobs: explain the steps expression (#10540) The `/` steps expression is used throughout this doc but is never explained. Worse, it isn't actually part of the "normal" Cron spec linked in Wikipedia and is an extension added to vixiecron --- .../docs/tasks/job/automated-tasks-with-cron-jobs.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md b/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md index 015f209ff6..4834e7ee91 100644 --- a/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md +++ b/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md @@ -130,6 +130,16 @@ A cron job config also needs a [`.spec` section](https://git.k8s.io/community/co The `.spec.schedule` is a required field of the `.spec`. It takes a [Cron](https://en.wikipedia.org/wiki/Cron) format string, such as `0 * * * *` or `@hourly`, as schedule time of its jobs to be created and executed. +The format also includes extended `vixie cron` step values. As explained in the [FreeBSD manual](https://www.freebsd.org/cgi/man.cgi?crontab%285%29): + +> Step values can be used in conjunction with ranges. Following a range +> with ``/'' specifies skips of the number's value through the +> range. For example, ``0-23/2'' can be used in the hours field to specify +> command execution every other hour (the alternative in the V7 standard is +> ``0,2,4,6,8,10,12,14,16,18,20,22''). Steps are also permitted after an +> asterisk, so if you want to say ``every two hours'', just use ``*/2''. + + **Note:** The question mark (`?`) in the schedule has the same meaning as an asterisk `*`, that is, it stands for any of available value for a given field. ### Job Template From 11e438a270d0b7642a2436bc569020e151b02b81 Mon Sep 17 00:00:00 2001 From: kvaps Date: Thu, 18 Oct 2018 02:08:00 +0200 Subject: [PATCH 178/181] Blog Post: Network bootable servers farm with LTSP (some fixes) (#10466) * upd: small changes, bump docker version * Update 2018-10-02-network-bootable-farm-with-ltsp.md * add: why not coreos * add: why not coreos --- ...8-10-02-network-bootable-farm-with-ltsp.md | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md b/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md index 69141f3568..0a45f18b02 100644 --- a/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md +++ b/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md @@ -29,7 +29,7 @@ Nodes are using overlays as the root filesystem and after reboot any changes wil We will use LTSP project because it's gives us everything we need to organize the network booting environment. Basically, LTSP is a pack of shell-scripts which makes our life much easier. -LTSP provides a initramfs module, a few helper-scripts, and some configuration systems which prepare the system during the early state of boot, before the main init process call. +LTSP provides a initramfs module, a few helper-scripts, and the configuration system which prepare the system during the early state of boot, before the main init process call. **This is what the image preparation procedure looks like:** @@ -43,7 +43,7 @@ After that, you will get the squashed image from the chroot with all the softwar **The server part of LTSP includes two components in our case:** -- **TFTP-server** - TFTP is the initial protocol, it is used the download the kernel, initramfs and main config. +- **TFTP-server** - TFTP is the initial protocol, it is used the download the kernel, initramfs and main config - lts.conf. - **NBD-server** - NBD protocol is used to distribute the squashed rootfs image to the clients. It is the fastest way, but if you want, it can be replaced by the NFS or AoE protocol. You should also have: @@ -61,7 +61,7 @@ You should also have: - During the boot, initramfs modules will handle options from cmdline and do some actions like connect NBD-device, prepare overlay rootfs, etc. - Afterwards it will call the ltsp-init system instead of the normal init. - ltsp-init scripts will prepare the system on the earlier stage, before the main init will be called. Basically it applies the setting from lts.conf (main config): write fstab and rc.local entries etc. -- Call the main init (systemd) which is booting configured system as usual, mounts shares from fstab, start targets and services, executes commands from rc.local file. +- Call the main init (systemd) which is booting the configured system as usual, mounts shares from fstab, start targets and services, executes commands from rc.local file. - In the end you have a fully configured and booted system ready for further operations. # Preparing the Server @@ -84,7 +84,7 @@ I’ll create a fork if the community will warmly accept my solution. * [feature_preinit.diff](https://github.com/kvaps/ltsp/compare/feature_preinit.diff) This patch adds a PREINIT option to lts.conf, which allows you to run custom commands before the main init call. It may be useful to modify the systemd units and configure the network. It's remarkable that all environment variables from the boot environment are saved and you can use them in your scripts. * [feature_initramfs_params_from_lts_conf.diff](https://github.com/kvaps/ltsp/compare/feature_initramfs_params_from_lts_conf.diff) - Solves s problem with NBD_TO_RAM option, after this patch you can specify it on lts.conf inside chroot. (not in tftp directory) + Solves a problem with NBD_TO_RAM option, after this patch you can specify it on lts.conf inside chroot. (not in tftp directory) * [nbd-server-wrapper.sh](https://gist.githubusercontent.com/kvaps/1a6a7d8b73bf7444f0f99b22379c9e4e/raw/eb0d60c638ef72b7e28438b7f4d2beda89c41f75/nbd-server-wrapper.sh) This is not a patch but a special wrapper script which allows you to run NBD-server in the foreground. It is useful if you want to run it inside a Docker container. @@ -222,7 +222,7 @@ Their postinstall scripts try to call some privileged commands which can fail wi Solution: * Some of them can be installed before the kernel without any problems (like `lvm2`) -* But for some of them you will need to use this workaround to install without the postinstall script. +* But for some of them you will need to use [this workaround](https://askubuntu.com/a/482936/327437) to install without the postinstall script. ### Stage 3: builder @@ -285,7 +285,7 @@ RUN ltsp-chroot sh -c \ > /etc/apt/sources.list.d/docker.list \ && apt-get -y update \ && apt-get -y install \ - docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk "{print $ 3}")' + docker-ce=$(apt-cache madison docker-ce | grep 18.06 | head -1 | awk "{print $ 3}")' # Configure docker options RUN DOCKER_OPTS="$(echo \ @@ -365,7 +365,7 @@ Ok, now we have docker image which includes: OK, now when our docker-image with LTSP-server, kernel, initramfs and squashed rootfs fully prepared we can run the deployment with it. We can do that as usual, but one more thing is networking. -Unfortunately, we can't use the standard Kubernetes service for our deployment, because during the boot, our nodes are not part of Kubernetes cluster and they requires ExternalIP, but Kubernetes always enables NAT for ExternalIPs, and there is no way to disable this behavior. +Unfortunately, we can't use the standard Kubernetes service abstraction for our deployment, because during the boot, our nodes are not part of Kubernetes cluster and they requires ExternalIP, but Kubernetes always enables NAT for ExternalIPs, and there is no way to disable this behavior. For now I have two ways for avoid this: use `hostNetwork: true` or use [pipework](https://github.com/dreamcat4/docker-images/blob/master/pipework/3.%20Examples.md#kubernetes). The second option will also provide you redundancy because, in case of failure, the IP will be moved with the Pod to another node. Unfortunately, pipework is not native and a less secure method. If you have some better option for that please let me know. @@ -488,3 +488,9 @@ Now you can try to make your own changes. If you need something more, note that LTSP can be easily changed to meet your needs. Feel free to look into the source code and you can find many answers there. + +**UPD:** Many people asking me: Why not simple use CoreOS and Ignition? + +I can answer. The main feature here is image preparation process not configuration. +In case with LTSP you have classic Ubuntu system, and everything that can be installed on Ubuntu it can also be written here in the Dockerfile. +In case CoreOS you have no so many freedom and you can’t easily add custom kernel modules and packages at the build stage of the boot image. From 5e1579a1996e92561315fee59d8e6b40175d3be9 Mon Sep 17 00:00:00 2001 From: Karen Bradshaw Date: Wed, 17 Oct 2018 20:13:00 -0400 Subject: [PATCH 179/181] fix glossary entry for quantity (#10653) --- content/en/docs/reference/glossary/quantity.md | 9 +++++---- .../horizontal-pod-autoscale-walkthrough.md | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/content/en/docs/reference/glossary/quantity.md b/content/en/docs/reference/glossary/quantity.md index c0c0edd52b..2f63f25c38 100644 --- a/content/en/docs/reference/glossary/quantity.md +++ b/content/en/docs/reference/glossary/quantity.md @@ -8,17 +8,18 @@ short_description: > aka: tags: +- core-object --- A whole-number representation of small or large numbers using SI suffixes. - + Quantities are representations of small or large numbers using a compact, whole-number notation with SI suffixes. Fractional numbers are represented -using milli-units, while large numbers can be represented using kilo-units, -mega-units, giga-units, etc. +using milli units, while large numbers can be represented using kilo, +mega, or giga units. -For instance, the number `1.5` is represented `1500m`, while the number `1000` +For instance, the number `1.5` is represented as `1500m`, while the number `1000` can be represented as `1k`, and `1000000` as `1M`. You can also specify binary-notation suffixes; the number 2048 can be written as `2Ki`. diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md index ca1ec171bd..521b688bb7 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md @@ -440,7 +440,7 @@ the quantity `10500m` would be written as `10.5` in decimal notation. The metri will return whole numbers without a suffix when possible, and will generally return quantities in milli-units otherwise. This means you might see your metric value fluctuate between `1` and `1500m`, or `1` and `1.5` when written in decimal notation. See the -[glossary entry on quantities](/docs/reference/glossary/quantity.md) for more information. +[glossary entry on quantities](/docs/reference/glossary?core-object=true#term-quantity) for more information. ## Appendix: Other possible scenarios From 544e9e408954fbcc8f498be6266f1c12780437b2 Mon Sep 17 00:00:00 2001 From: Sam Fleming Date: Thu, 18 Oct 2018 01:16:31 +0100 Subject: [PATCH 180/181] Show clusterIP in Services diagrams instead of ServiceIP (#10663) * Use clusterIP instead of ServiceIP in graphs and documentation Using ServiceIP instead of clusterIP in images can be confusing when they're showing the clusterIP. Since the SVGs are updated, the "Note" is now redundant. * Update out-dated service diagram PNGs --- .../concepts/services-networking/service.md | 4 ---- .../docs/services-iptables-overview.png | Bin 54546 -> 32514 bytes .../docs/services-iptables-overview.svg | 2 +- static/images/docs/services-ipvs-overview.png | Bin 0 -> 30051 bytes static/images/docs/services-ipvs-overview.svg | 2 +- .../docs/services-userspace-overview.png | Bin 54270 -> 33234 bytes .../docs/services-userspace-overview.svg | 2 +- 7 files changed, 3 insertions(+), 7 deletions(-) create mode 100644 static/images/docs/services-ipvs-overview.png diff --git a/content/en/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md index ce529a53bf..9423fc26f9 100644 --- a/content/en/docs/concepts/services-networking/service.md +++ b/content/en/docs/concepts/services-networking/service.md @@ -173,8 +173,6 @@ By default, the choice of backend is round robin. ![Services overview diagram for userspace proxy](/images/docs/services-userspace-overview.svg) -Note that in the above diagram, `clusterIP` is shown as `ServiceIP`. - ### Proxy-mode: iptables In this mode, kube-proxy watches the Kubernetes master for the addition and @@ -192,8 +190,6 @@ having working [readiness probes](/docs/tasks/configure-pod-container/configure- ![Services overview diagram for iptables proxy](/images/docs/services-iptables-overview.svg) -Note that in the above diagram, `clusterIP` is shown as `ServiceIP`. - ### Proxy-mode: ipvs {{< feature-state for_k8s_version="v1.9" state="beta" >}} diff --git a/static/images/docs/services-iptables-overview.png b/static/images/docs/services-iptables-overview.png index 6d33ce3a4983682cccb06f9fe79cfbd8e85c8c27..78228489768d48f5857b8da19ced063aed58bdf8 100644 GIT binary patch literal 32514 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 OQ8gtk#p1^=-~KOu-&T|W literal 54546 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 diff --git a/static/images/docs/services-userspace-overview.svg b/static/images/docs/services-userspace-overview.svg index 011de754bb..85e81b593d 100644 --- a/static/images/docs/services-userspace-overview.svg +++ b/static/images/docs/services-userspace-overview.svg @@ -115,7 +115,7 @@ c33.5,0,61.4-13.4,66.8-31.1c17-5.3,28.6-15.7,28.6-27.7c0-17.3-24.4-31.4-54.4-31.4c-8.5,0-16.5,1.1-23.6,3.1 c-2-10.5-14.8-18.6-30.3-18.6c-5.8,0-11.2,1.2-15.9,3.1C154.8,160.6,143,153.1,129.6,153.1L129.6,153.1z"/> - ServiceIP + clusterIP (iptables) From 548b538f72c8c5b1762b7f0e9f7541f88757a791 Mon Sep 17 00:00:00 2001 From: Gregory Hanson Date: Wed, 17 Oct 2018 19:27:28 -0500 Subject: [PATCH 181/181] Bug in coredns ConfigMap spec (#10585) Missing the `data` label in configmap spec. Attempting to create the file as is results in: ``` error: error validating "STDIN": error validating data: ValidationError(ConfigMap): unknown field "Corefile" in io.k8s.api.core.v1.ConfigMap; if you choose to ignore these errors, turn validation off with --validate=false ``` --- .../docs/tasks/administer-cluster/dns-custom-nameservers.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md b/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md index 4f019473c6..2d3c921ea5 100644 --- a/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md +++ b/content/en/docs/tasks/administer-cluster/dns-custom-nameservers.md @@ -71,7 +71,8 @@ kind: ConfigMap metadata: name: coredns namespace: kube-system -Corefile: | +data: + Corefile: | .:53 { errors health @@ -139,7 +140,8 @@ kind: ConfigMap metadata: name: coredns namespace: kube-system -Corefile: | +data: + Corefile: | .:53 { errors health

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 e-3jl${AUpAt6%tbjei>!W diff --git a/static/images/docs/services-iptables-overview.svg b/static/images/docs/services-iptables-overview.svg index 9745c4555e..6f014438b3 100644 --- a/static/images/docs/services-iptables-overview.svg +++ b/static/images/docs/services-iptables-overview.svg @@ -117,7 +117,7 @@ c33.5,0,61.4-13.4,66.8-31.1c17-5.3,28.6-15.7,28.6-27.7c0-17.3-24.4-31.4-54.4-31.4c-8.5,0-16.5,1.1-23.6,3.1 c-2-10.5-14.8-18.6-30.3-18.6c-5.8,0-11.2,1.2-15.9,3.1C357.7,209.5,345.9,202,332.5,202L332.5,202z"/> - ServiceIP + clusterIP (iptables) Node diff --git a/static/images/docs/services-ipvs-overview.png b/static/images/docs/services-ipvs-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..34025d88f57c286c04908997b830accced7c45e5 GIT binary patch literal 30051 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 literal 0 HcmV?d00001 diff --git a/static/images/docs/services-ipvs-overview.svg b/static/images/docs/services-ipvs-overview.svg index 3c2fbbf59c..de745a7640 100644 --- a/static/images/docs/services-ipvs-overview.svg +++ b/static/images/docs/services-ipvs-overview.svg @@ -112,7 +112,7 @@ c33.5,0,61.4-13.4,66.8-31.1c17-5.3,28.6-15.7,28.6-27.7c0-17.3-24.4-31.4-54.4-31.4c-8.5,0-16.5,1.1-23.6,3.1 c-2-10.5-14.8-18.6-30.3-18.6c-5.8,0-11.2,1.2-15.9,3.1C357.7,209.5,345.9,202,332.5,202L332.5,202z"/> - ServiceIP + clusterIP (Virtual Server) Node diff --git a/static/images/docs/services-userspace-overview.png b/static/images/docs/services-userspace-overview.png index 74a6521fdcde9aa5c2b54437cb90392aa3cd557b..dfd02ca4c633e51468af33bc6c1fbe6340691448 100644 GIT binary patch literal 33234 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