diff --git a/.gitignore b/.gitignore index 51e94f41b4..6a629010d0 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,8 @@ resources/ # Netlify Functions build output package-lock.json functions/ -node_modules/ \ No newline at end of file +node_modules/ + +# Generated files when building with make container-build +.config/ +.npm/ diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index b958f84bac..2feb3cdb2d 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -27,6 +27,7 @@ aliases: - kbarnard10 - kbhawkey - onlydole + - pi-victor - reylejano - savitharaghunathan - sftim @@ -232,3 +233,27 @@ aliases: - mrbobbytables - nikhita - parispittman + # authoritative source: https://git.k8s.io/sig-release/OWNERS_ALIASES + sig-release-leads: + - hasheddan # SIG Technical Lead + - jeremyrickard # SIG Technical Lead + - justaugustus # SIG Chair + - LappleApple # SIG Program Manager + - saschagrunert # SIG Chair + release-engineering-approvers: + - cpanato # Release Manager + - hasheddan # subproject owner / Release Manager + - puerco # Release Manager + - saschagrunert # subproject owner / Release Manager + - justaugustus # subproject owner / Release Manager + - xmudrii # Release Manager + release-engineering-reviewers: + - ameukam # Release Manager Associate + - jimangel # Release Manager Associate + - mkorbi # Release Manager Associate + - palnabarun # Release Manager Associate + - onlydole # Release Manager Associate + - sethmccombs # Release Manager Associate + - thejoycekung # Release Manager Associate + - verolop # Release Manager Associate + - wilsonehusin # Release Manager Associate diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index 29a8e1ecf8..e7f0902346 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -444,7 +444,7 @@ body.cid-community > #deprecation-warning > .deprecation-warning > * { .td-sidebar__inner { form.td-sidebar__search { - button.td-sidebar__toggle { + .td-sidebar__toggle { &:hover { color: #000000; } @@ -482,10 +482,6 @@ main.content { .td-blog { - .td-sidebar-nav { - max-height: calc(100vh - 8rem); - } - .widget-link { margin-bottom: 1rem; diff --git a/assets/scss/_tablet.scss b/assets/scss/_tablet.scss index b368d54494..58149a7dc2 100644 --- a/assets/scss/_tablet.scss +++ b/assets/scss/_tablet.scss @@ -77,7 +77,6 @@ $feature-box-div-width: 45%; position: relative; clear: both; display: table; - height: 160px; .content { display: table-cell; @@ -124,6 +123,7 @@ $feature-box-div-width: 45%; position: relative; display: block; float: none; + text-align: center; max-width: 100%; transform: none; } diff --git a/content/en/blog/_posts/2020-12-02-dockershim-faq.md b/content/en/blog/_posts/2020-12-02-dockershim-faq.md index 918a969e51..edcab9fe53 100644 --- a/content/en/blog/_posts/2020-12-02-dockershim-faq.md +++ b/content/en/blog/_posts/2020-12-02-dockershim-faq.md @@ -47,6 +47,15 @@ and other ecosystem groups to ensure a smooth transition and will evaluate thing as the situation evolves. +### Can I still use dockershim after it is removed from Kubernetes? + +Update: +Mirantis and Docker have [committed][mirantis] to maintaining the dockershim after +it is removed from Kubernetes. + +[mirantis]: https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/ + + ### Will my existing Docker images still work? Yes, the images produced from `docker build` will work with all CRI implementations. @@ -178,4 +187,3 @@ discussion of the changes. Always and whenever you want! 🤗🤗 - diff --git a/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md b/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md new file mode 100644 index 0000000000..1f6403b301 --- /dev/null +++ b/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md @@ -0,0 +1,268 @@ +--- +layout: blog +title: 'Using Finalizers to Control Deletion' +date: 2021-05-14 +slug: using-finalizers-to-control-deletion +--- + +**Authors:** Aaron Alpar (Kasten) + +Deleting objects in Kubernetes can be challenging. You may think you’ve deleted something, only to find it still persists. While issuing a `kubectl delete` command and hoping for the best might work for day-to-day operations, understanding how Kubernetes `delete` commands operate will help you understand why some objects linger after deletion. + +In this post, I’ll look at: + +- What properties of a resource govern deletion +- How finalizers and owner references impact object deletion +- How the propagation policy can be used to change the order of deletions +- How deletion works, with examples + +For simplicity, all examples will use ConfigMaps and basic shell commands to demonstrate the process. We’ll explore how the commands work and discuss repercussions and results from using them in practice. + +## The basic `delete` + +Kubernetes has several different commands you can use that allow you to create, read, update, and delete objects. For the purpose of this blog post, we’ll focus on four `kubectl` commands: `create`, `get`, `patch`, and `delete`. + +Here are examples of the basic `kubectl delete` command: + +``` +kubectl create configmap mymap +configmap/mymap created +``` + +``` +kubectl get configmap/mymap +NAME DATA AGE +mymap 0 12s +``` + +``` +kubectl delete configmap/mymap +configmap "mymap" deleted +``` + +``` +kubectl get configmap/mymap +Error from server (NotFound): configmaps "mymap" not found +``` + +Shell commands preceded by `$` are followed by their output. You can see that we begin with a `kubectl create configmap mymap`, which will create the empty configmap `mymap`. Next, we need to `get` the configmap to prove it exists. We can then delete that configmap. Attempting to `get` it again produces an HTTP 404 error, which means the configmap is not found. + +The state diagram for the basic `delete` command is very simple: + + +{{
}} + +Although this operation is straightforward, other factors may interfere with the deletion, including finalizers and owner references. + +## Understanding Finalizers + +When it comes to understanding resource deletion in Kubernetes, knowledge of how finalizers work is helpful and can help you understand why some objects don’t get deleted. + +Finalizers are keys on resources that signal pre-delete operations. They control the garbage collection on resources, and are designed to alert controllers what cleanup operations to perform prior to removing a resource. However, they don’t necessarily name code that should be executed; finalizers on resources are basically just lists of keys much like annotations. Like annotations, they can be manipulated. + +Some common finalizers you’ve likely encountered are: + +- `kubernetes.io/pv-protection` +- `kubernetes.io/pvc-protection` + +The finalizers above are used on volumes to prevent accidental deletion. Similarly, some finalizers can be used to prevent deletion of any resource but are not managed by any controller. + +Below with a custom configmap, which has no properties but contains a finalizer: + +``` +cat <}} + +So, if you attempt to delete an object that has a finalizer on it, it will remain in finalization until the controller has removed the finalizer keys or the finalizers are removed using Kubectl. Once that finalizer list is empty, the object can actually be reclaimed by Kubernetes and put into a queue to be deleted from the registry. + +## Owner References + +Owner references describe how groups of objects are related. They are properties on resources that specify the relationship to one another, so entire trees of resources can be deleted. + +Finalizer rules are processed when there are owner references. An owner reference consists of a name and a UID. Owner references link resources within the same namespace, and it also needs a UID for that reference to work. Pods typically have owner references to the owning replica set. So, when deployments or stateful sets are deleted, then the child replica sets and pods are deleted in the process. + +Here are some examples of owner references and how they work. In the first example, we create a parent object first, then the child. The result is a very simple configmap that contains an owner reference to its parent: + +``` +cat <}} diff --git a/content/en/community/_index.html b/content/en/community/_index.html index ad9cab5d94..5b65292ea7 100644 --- a/content/en/community/_index.html +++ b/content/en/community/_index.html @@ -24,7 +24,8 @@ cid: community Videos      Discussions      Events and meetups      -News +News      +Releases

diff --git a/content/en/docs/concepts/cluster-administration/addons.md b/content/en/docs/concepts/cluster-administration/addons.md index 726a714151..5ed93ad20b 100644 --- a/content/en/docs/concepts/cluster-administration/addons.md +++ b/content/en/docs/concepts/cluster-administration/addons.md @@ -23,7 +23,7 @@ This page lists some of the available add-ons and links to their respective inst * [CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) enables Kubernetes to seamlessly connect to a choice of CNI plugins, such as Calico, Canal, Flannel, Romana, or Weave. * [Contiv](https://contiv.github.io) provides configurable networking (native L3 using BGP, overlay using vxlan, classic L2, and Cisco-SDN/ACI) for various use cases and a rich policy framework. Contiv project is fully [open sourced](https://github.com/contiv). The [installer](https://github.com/contiv/install) provides both kubeadm and non-kubeadm based installation options. * [Contrail](https://www.juniper.net/us/en/products-services/sdn/contrail/contrail-networking/), based on [Tungsten Fabric](https://tungsten.io), is an open source, multi-cloud network virtualization and policy management platform. Contrail and Tungsten Fabric are integrated with orchestration systems such as Kubernetes, OpenShift, OpenStack and Mesos, and provide isolation modes for virtual machines, containers/pods and bare metal workloads. -* [Flannel](https://github.com/coreos/flannel/blob/master/Documentation/kubernetes.md) is an overlay network provider that can be used with Kubernetes. +* [Flannel](https://github.com/flannel-io/flannel#deploying-flannel-manually) is an overlay network provider that can be used with Kubernetes. * [Knitter](https://github.com/ZTE/Knitter/) is a plugin to support multiple network interfaces in a Kubernetes pod. * [Multus](https://github.com/Intel-Corp/multus-cni) is a Multi plugin for multiple network support in Kubernetes to support all CNI plugins (e.g. Calico, Cilium, Contiv, Flannel), in addition to SRIOV, DPDK, OVS-DPDK and VPP based workloads in Kubernetes. * [OVN-Kubernetes](https://github.com/ovn-org/ovn-kubernetes/) is a networking provider for Kubernetes based on [OVN (Open Virtual Network)](https://github.com/ovn-org/ovn/), a virtual networking implementation that came out of the Open vSwitch (OVS) project. OVN-Kubernetes provides an overlay based networking implementation for Kubernetes, including an OVS based implementation of load balancing and network policy. diff --git a/content/en/docs/concepts/configuration/secret.md b/content/en/docs/concepts/configuration/secret.md index 111a405a7a..48ac53ed47 100644 --- a/content/en/docs/concepts/configuration/secret.md +++ b/content/en/docs/concepts/configuration/secret.md @@ -328,13 +328,13 @@ kubectl create secret tls my-tls-secret \ --key=path/to/key/file ``` -The public/private key pair must exist before hand. The public key certificate +The public/private key pair must exist beforehand. The public key certificate for `--cert` must be .PEM encoded (Base64-encoded DER format), and match the given private key for `--key`. The private key must be in what is commonly called PEM private key format, unencrypted. In both cases, the initial and the last lines from PEM (for example, `--------BEGIN CERTIFICATE-----` and `-------END CERTIFICATE----` for -a cetificate) are *not* included. +a certificate) are *not* included. ### Bootstrap token Secrets diff --git a/content/en/docs/concepts/containers/images.md b/content/en/docs/concepts/containers/images.md index 6d0db16fe8..1cd678e4a8 100644 --- a/content/en/docs/concepts/containers/images.md +++ b/content/en/docs/concepts/containers/images.md @@ -25,7 +25,7 @@ This page provides an outline of the container image concept. Container images are usually given a name such as `pause`, `example/mycontainer`, or `kube-apiserver`. Images can also include a registry hostname; for example: `fictional.registry.example/imagename`, -and possible a port number as well; for example: `fictional.registry.example:10443/imagename`. +and possibly a port number as well; for example: `fictional.registry.example:10443/imagename`. If you don't specify a registry hostname, Kubernetes assumes that you mean the Docker public registry. diff --git a/content/en/docs/concepts/extend-kubernetes/operator.md b/content/en/docs/concepts/extend-kubernetes/operator.md index 323200ec3a..feb40163fc 100644 --- a/content/en/docs/concepts/extend-kubernetes/operator.md +++ b/content/en/docs/concepts/extend-kubernetes/operator.md @@ -113,11 +113,13 @@ Operator. {{% thirdparty-content %}} +* [Charmed Operator Framework](https://juju.is/) * [kubebuilder](https://book.kubebuilder.io/) * [KUDO](https://kudo.dev/) (Kubernetes Universal Declarative Operator) * [Metacontroller](https://metacontroller.app/) along with WebHooks that you implement yourself * [Operator Framework](https://operatorframework.io) +* [shell-operator](https://github.com/flant/shell-operator) ## {{% heading "whatsnext" %}} diff --git a/content/en/docs/concepts/overview/what-is-kubernetes.md b/content/en/docs/concepts/overview/what-is-kubernetes.md index b19c4155ce..1ace280139 100644 --- a/content/en/docs/concepts/overview/what-is-kubernetes.md +++ b/content/en/docs/concepts/overview/what-is-kubernetes.md @@ -21,7 +21,7 @@ This page is an overview of Kubernetes. Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available. -The name Kubernetes originates from Greek, meaning helmsman or pilot. Google open-sourced the Kubernetes project in 2014. Kubernetes combines [over 15 years of Google's experience](/blog/2015/04/borg-predecessor-to-kubernetes/) running production workloads at scale with best-of-breed ideas and practices from the community. +The name Kubernetes originates from Greek, meaning helmsman or pilot. K8s as an abbreviation results from counting the eight letters between the "K" and the "s". Google open-sourced the Kubernetes project in 2014. Kubernetes combines [over 15 years of Google's experience](/blog/2015/04/borg-predecessor-to-kubernetes/) running production workloads at scale with best-of-breed ideas and practices from the community. ## Going back in time diff --git a/content/en/docs/concepts/overview/working-with-objects/common-labels.md b/content/en/docs/concepts/overview/working-with-objects/common-labels.md index 29af899b4e..3053544cd2 100644 --- a/content/en/docs/concepts/overview/working-with-objects/common-labels.md +++ b/content/en/docs/concepts/overview/working-with-objects/common-labels.md @@ -39,7 +39,8 @@ on every resource object. | `app.kubernetes.io/version` | The current version of the application (e.g., a semantic version, revision hash, etc.) | `5.7.21` | string | | `app.kubernetes.io/component` | The component within the architecture | `database` | string | | `app.kubernetes.io/part-of` | The name of a higher level application this one is part of | `wordpress` | string | -| `app.kubernetes.io/managed-by` | The tool being used to manage the operation of an application | `helm` | string | +| `app.kubernetes.io/managed-by` | The tool being used to manage the operation of an application | `helm` | string | +| `app.kubernetes.io/created-by` | The controller/user who created this resource | `controller-manager` | string | To illustrate these labels in action, consider the following StatefulSet object: @@ -54,6 +55,7 @@ metadata: app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress app.kubernetes.io/managed-by: helm + app.kubernetes.io/created-by: controller-manager ``` ## Applications And Instances Of Applications @@ -170,4 +172,3 @@ metadata: With the MySQL `StatefulSet` and `Service` you'll notice information about both MySQL and WordPress, the broader application, are included. - diff --git a/content/en/docs/concepts/overview/working-with-objects/namespaces.md b/content/en/docs/concepts/overview/working-with-objects/namespaces.md index 8f740c866b..45f454516c 100644 --- a/content/en/docs/concepts/overview/working-with-objects/namespaces.md +++ b/content/en/docs/concepts/overview/working-with-objects/namespaces.md @@ -39,7 +39,7 @@ Creation and deletion of namespaces are described in the [Admin Guide documentation for namespaces](/docs/tasks/administer-cluster/namespaces). {{< note >}} - Avoid creating namespace with prefix `kube-`, since it is reserved for Kubernetes system namespaces. + Avoid creating namespaces with the prefix `kube-`, since it is reserved for Kubernetes system namespaces. {{< /note >}} ### Viewing namespaces diff --git a/content/en/docs/concepts/scheduling-eviction/_index.md b/content/en/docs/concepts/scheduling-eviction/_index.md index 3a2bf9359f..79fca8e597 100644 --- a/content/en/docs/concepts/scheduling-eviction/_index.md +++ b/content/en/docs/concepts/scheduling-eviction/_index.md @@ -1,8 +1,11 @@ --- -title: "Scheduling and Eviction" +title: "Scheduling, Preemption and Eviction" weight: 90 description: > - In Kubernetes, scheduling refers to making sure that Pods are matched to Nodes so that the kubelet can run them. - Eviction is the process of proactively failing one or more Pods on resource-starved Nodes. + In Kubernetes, scheduling refers to making sure that Pods are matched to Nodes + so that the kubelet can run them. Preemption is the process of terminating + Pods with lower Priority so that Pods with higher Priority can schedule on + Nodes. Eviction is the process of proactively terminating one or more Pods on + resource-starved Nodes. --- diff --git a/content/en/docs/concepts/configuration/pod-priority-preemption.md b/content/en/docs/concepts/scheduling-eviction/pod-priority-preemption.md similarity index 100% rename from content/en/docs/concepts/configuration/pod-priority-preemption.md rename to content/en/docs/concepts/scheduling-eviction/pod-priority-preemption.md diff --git a/content/en/docs/concepts/security/pod-security-standards.md b/content/en/docs/concepts/security/pod-security-standards.md index a3c9ee138e..32635d6747 100644 --- a/content/en/docs/concepts/security/pod-security-standards.md +++ b/content/en/docs/concepts/security/pod-security-standards.md @@ -113,7 +113,7 @@ enforced/disallowed: - AppArmor (optional) + AppArmor On supported hosts, the 'runtime/default' AppArmor profile is applied by default. The baseline policy should prevent overriding or disabling the default AppArmor @@ -124,14 +124,26 @@ enforced/disallowed: - SELinux (optional) + SELinux - Setting custom SELinux options should be disallowed.
+ Setting the SELinux type is restricted, and setting a custom SELinux user or role option is forbidden.

Restricted Fields:
- spec.securityContext.seLinuxOptions
- spec.containers[*].securityContext.seLinuxOptions
- spec.initContainers[*].securityContext.seLinuxOptions
-
Allowed Values: undefined/nil
+ spec.securityContext.seLinuxOptions.type
+ spec.containers[*].securityContext.seLinuxOptions.type
+ spec.initContainers[*].securityContext.seLinuxOptions.type
+
Allowed Values:
+ undefined/empty
+ container_t
+ container_init_t
+ container_kvm_t
+
Restricted Fields:
+ spec.securityContext.seLinuxOptions.user
+ spec.containers[*].securityContext.seLinuxOptions.user
+ spec.initContainers[*].securityContext.seLinuxOptions.user
+ spec.securityContext.seLinuxOptions.role
+ spec.containers[*].securityContext.seLinuxOptions.role
+ spec.initContainers[*].securityContext.seLinuxOptions.role
+
Allowed Values: undefined/empty
diff --git a/content/en/docs/concepts/storage/persistent-volumes.md b/content/en/docs/concepts/storage/persistent-volumes.md index 88e468ebfa..f45d17ff54 100644 --- a/content/en/docs/concepts/storage/persistent-volumes.md +++ b/content/en/docs/concepts/storage/persistent-volumes.md @@ -540,11 +540,11 @@ spec: ### Access Modes -Claims use the same conventions as volumes when requesting storage with specific access modes. +Claims use [the same conventions as volumes](#access-modes) when requesting storage with specific access modes. ### Volume Modes -Claims use the same convention as volumes to indicate the consumption of the volume as either a filesystem or block device. +Claims use [the same convention as volumes](#volume-mode) to indicate the consumption of the volume as either a filesystem or block device. ### Resources diff --git a/content/en/docs/concepts/storage/storage-classes.md b/content/en/docs/concepts/storage/storage-classes.md index 0abdf6b545..5e6851d94a 100644 --- a/content/en/docs/concepts/storage/storage-classes.md +++ b/content/en/docs/concepts/storage/storage-classes.md @@ -154,9 +154,9 @@ the class or PV. If a mount option is invalid, the PV mount fails. ### Volume Binding Mode The `volumeBindingMode` field controls when [volume binding and dynamic -provisioning](/docs/concepts/storage/persistent-volumes/#provisioning) should occur. +provisioning](/docs/concepts/storage/persistent-volumes/#provisioning) should occur. When unset, "Immediate" mode is used by default. -By default, the `Immediate` mode indicates that volume binding and dynamic +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 @@ -188,6 +188,36 @@ The following plugins support `WaitForFirstConsumer` with pre-created Persistent and pre-created PVs, but you'll need to look at the documentation for a specific CSI driver to see its supported topology keys and examples. +{{< note >}} + If you choose to use `waitForFirstConsumer`, do not use `nodeName` in the Pod spec + to specify node affinity. If `nodeName` is used in this case, the scheduler will be bypassed and PVC will remain in `pending` state. + + Instead, you can use node selector for hostname in this case as shown below. +{{< /note >}} + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: task-pv-pod +spec: + nodeSelector: + kubernetes.io/hostname: kube-01 + volumes: + - name: task-pv-storage + persistentVolumeClaim: + claimName: task-pv-claim + containers: + - name: task-pv-container + image: nginx + ports: + - containerPort: 80 + name: "http-server" + volumeMounts: + - mountPath: "/usr/share/nginx/html" + name: task-pv-storage +``` + ### Allowed Topologies When a cluster operator specifies the `WaitForFirstConsumer` volume binding mode, it is no longer necessary diff --git a/content/en/docs/concepts/workloads/pods/disruptions.md b/content/en/docs/concepts/workloads/pods/disruptions.md index cf0346e939..288502e0d7 100644 --- a/content/en/docs/concepts/workloads/pods/disruptions.md +++ b/content/en/docs/concepts/workloads/pods/disruptions.md @@ -80,12 +80,14 @@ Here are some ways to mitigate involuntary disruptions: [multi-zone cluster](/docs/setup/multiple-zones).) The frequency of voluntary disruptions varies. On a basic Kubernetes cluster, there are -no voluntary disruptions at all. However, your cluster administrator or hosting provider +no automated voluntary disruptions (only user-triggered ones). However, your cluster administrator or hosting provider may run some additional services which cause voluntary disruptions. For example, rolling out node software updates can cause voluntary disruptions. Also, some implementations of cluster (node) autoscaling may cause voluntary disruptions to defragment and compact nodes. Your cluster administrator or hosting provider should have documented what level of voluntary -disruptions, if any, to expect. +disruptions, if any, to expect. Certain configuration options, such as +[using PriorityClasses](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) +in your pod spec can also cause voluntary (and involuntary) disruptions. ## Pod disruption budgets diff --git a/content/en/docs/concepts/workloads/pods/init-containers.md b/content/en/docs/concepts/workloads/pods/init-containers.md index 1c67e357e5..c73bba5517 100644 --- a/content/en/docs/concepts/workloads/pods/init-containers.md +++ b/content/en/docs/concepts/workloads/pods/init-containers.md @@ -246,7 +246,7 @@ myapp-pod 1/1 Running 0 9m ``` This simple example should provide some inspiration for you to create your own -init containers. [What's next](#whats-next) contains a link to a more detailed example. +init containers. [What's next](#what-s-next) contains a link to a more detailed example. ## Detailed behavior @@ -326,7 +326,6 @@ Kubernetes, consult the documentation for the version you are using. ## {{% heading "whatsnext" %}} - * Read about [creating a Pod that has an init container](/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container) * Learn how to [debug init containers](/docs/tasks/debug-application-cluster/debug-init-containers/) diff --git a/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md b/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md index 8e588da111..e591d2bf45 100644 --- a/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md +++ b/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md @@ -13,7 +13,7 @@ obsolete --> You can use _topology spread constraints_ to control how {{< glossary_tooltip text="Pods" term_id="Pod" >}} are spread across your cluster among failure-domains such as regions, zones, nodes, and other user-defined topology domains. This can help to achieve high availability as well as efficient resource utilization. {{< note >}} -In versions of Kubernetes before v1.19, you must enable the `EvenPodsSpread` +In versions of Kubernetes before v1.18, you must enable the `EvenPodsSpread` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) on the [API server](/docs/concepts/overview/components/#kube-apiserver) and the [scheduler](/docs/reference/generated/kube-scheduler/) in order to use Pod diff --git a/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md b/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md index acc55b2807..67d8acc0b5 100644 --- a/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md +++ b/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md @@ -90,8 +90,8 @@ This section shows how to generate the For example: ```shell -export K8S_WEBROOT=$(GOPATH)/src/github.com//website -export K8S_ROOT=$(GOPATH)/src/k8s.io/kubernetes +export K8S_WEBROOT=${GOPATH}/src/github.com//website +export K8S_ROOT=${GOPATH}/src/k8s.io/kubernetes export K8S_RELEASE=1.17.0 ``` diff --git a/content/en/docs/contribute/localization.md b/content/en/docs/contribute/localization.md index eafc241d40..85772dc9ed 100644 --- a/content/en/docs/contribute/localization.md +++ b/content/en/docs/contribute/localization.md @@ -16,18 +16,21 @@ card: This page shows you how to [localize](https://blog.mozilla.org/l10n/2011/12/14/i18n-vs-l10n-whats-the-diff/) the docs for a different language. - -## Getting started +## Contribute to an existing localization -Because contributors can't approve their own pull requests, you need at least two contributors to begin a localization. +You can help add or improve content to an existing localization. In [Kubernetes Slack](https://slack.k8s.io/) you'll find a channel for each localization. There is also a general [SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations) where you can say hello. -All localization teams must be self-sustaining with their own resources. The Kubernetes website is happy to host your work, but it's up to you to translate it. +{{< note >}} +If you want to work on a localization that already exists, check +this page in that localization (if it exists), rather than the +English original. You might see extra details there. +{{< /note >}} ### Find your two-letter language code -First, consult the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) to find your localization's two-letter country code. For example, the two-letter code for Korean is `ko`. +First, consult the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) to find your localization's two-letter language code. For example, the two-letter code for Korean is `ko`. ### Fork and clone the repo @@ -40,13 +43,54 @@ git clone https://github.com//website cd website ``` -### Open a pull request +The website content directory includes sub-directories for each language. The localization you want to help out with is inside `content/`. -Next, [open a pull request](/docs/contribute/new-content/open-a-pr/#open-a-pr) (PR) to add a localization to the `kubernetes/website` repository. +### Suggest changes -The PR must include all of the [minimum required content](#minimum-required-content) before it can be approved. +Create or update your chosen localized page based on the English original. See +[translating content](#translating-content) for more details. -For an example of adding a new localization, see the PR to enable [docs in French](https://github.com/kubernetes/website/pull/12548). +If you notice a technical inaccuracy or other problem with the upstream (English) +documentation, you should fix the upstream documentation first and then repeat the +equivalent fix by updating the localization you're working on. + +Please limit pull requests to a single localization, since pull requests that change +content in multiple localizations could be difficult to review. + +Follow [Suggesting Content Improvements](/docs/contribute/suggest-improvements/) to propose changes to +that localization. The process is very similar to proposing changes to the upstream (English) content. + +## Start a new localization + +If you want the Kubernetes documentation localized into a new language, here's what +you need to do. + +Because contributors can't approve their own pull requests, you need _at least two contributors_ +to begin a localization. + +All localization teams must be self-sustaining. The Kubernetes website is happy to host your work, but +it's up to you to translate it and keep existing localized content current. + +You'll need to know the two-letter language code for your language. Consult the +[ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) to find your +localization's two-letter language code. For example, the two-letter code for Korean is +`ko`. + +When you start a new localization, you must localize all the +[minimum required content](#minimum-required-content) before +the Kubernetes project can publish your changes to the live +website. + +SIG Docs can help you work on a separate branch so that you +can incrementally work towards that goal. + +### Find community + +Let Kubernetes SIG Docs know you're interested in creating a localization! Join the [SIG Docs Slack channel](https://kubernetes.slack.com/messages/sig-docs) and the [SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations). Other localization teams are happy to help you get started and answer any questions you have. + +Please also consider participating in the [SIG Docs Localization Subgroup meeting](https://github.com/kubernetes/community/tree/master/sig-docs). The mission of the SIG Docs localization subgroup is to work across the SIG Docs localization teams to collaborate on defining and documenting the processes for creating localized contribution guides. In addition, the SIG Docs localization subgroup will look for opportunities for the creation and sharing of common tools across localization teams and also serve to identify new requirements to the SIG Docs Leadership team. If you have questions about this meeting, please inquire on the [SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations). + +You can also create a Slack channel for your localization in the `kubernetes/community` repository. For an example of adding a Slack channel, see the PR for [adding a channel for Persian](https://github.com/kubernetes/community/pull/4980). ### Join the Kubernetes GitHub organization @@ -70,15 +114,6 @@ Next, add a GitHub label for your localization in the `kubernetes/test-infra` re For an example of adding a label, see the PR for adding the [Italian language label](https://github.com/kubernetes/test-infra/pull/11316). -### Find community - -Let Kubernetes SIG Docs know you're interested in creating a localization! Join the [SIG Docs Slack channel](https://kubernetes.slack.com/messages/sig-docs) and the [SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations). Other localization teams are happy to help you get started and answer any questions you have. - -Please also consider participating in the [SIG Docs Localization Subgroup meeting](https://github.com/kubernetes/community/tree/master/sig-docs). The mission of the SIG Docs localization subgroup is to work across the SIG Docs localization teams to collaborate on defining and documenting the processes for creating localized contribution guides. In addition, the SIG Docs localization subgroup will look for opportunities for the creation and sharing of common tools across localization teams and also serve to identify new requirements to the SIG Docs Leadership team. If you have questions about this meeting, please inquire on the [SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations). - -You can also create a Slack channel for your localization in the `kubernetes/community` repository. For an example of adding a Slack channel, see the PR for [adding a channel for Persian](https://github.com/kubernetes/community/pull/4980). - -## Minimum required content ### Modify the site configuration @@ -107,20 +142,20 @@ Add a language-specific subdirectory to the [`content`](https://github.com/kuber mkdir content/de ``` +You also need to create a directory inside `data/i18n` for +[localized strings](#site-strings-in-i18n); look at existing localizations +for an example. To use these new strings, you must also create a symbolic link +from `i18n/.toml` to the actual string configuration in +`data/i18n//.toml` (remember to commit the symbolic +link). + +For example, for German the strings live in `data/i18n/de/de.toml`, and +`i18n/de.toml` is a symbolic link to `data/i18n/de/de.toml`. + ### Localize the community code of conduct Open a PR against the [`cncf/foundation`](https://github.com/cncf/foundation/tree/master/code-of-conduct-languages) repository to add the code of conduct in your language. -### Add a localized README file - -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 `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. You must also provide a link to your localized Community Code of Conduct. ### Setting up the OWNERS files @@ -174,10 +209,38 @@ For each team, add the list of GitHub users requested in [Add your localization - remyleone ``` +### Open a pull request + +Next, [open a pull request](/docs/contribute/new-content/open-a-pr/#open-a-pr) (PR) to add a localization to the `kubernetes/website` repository. + +The PR must include all of the [minimum required content](#minimum-required-content) before it can be approved. + +For an example of adding a new localization, see the PR to enable [docs in French](https://github.com/kubernetes/website/pull/12548). + +### Add a localized README file + +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 `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. You must also provide a link to your localized Community Code of Conduct. + +### Launching your new localization + +Once a localization meets requirements for workflow and minimum output, SIG Docs will: + +- Enable language selection on the website +- Publicize the localization's availability through [Cloud Native Computing Foundation](https://www.cncf.io/about/) (CNCF) channels, including the [Kubernetes blog](https://kubernetes.io/blog/). + ## Translating content Localizing *all* of the Kubernetes documentation is an enormous task. It's okay to start small and expand over time. +### Minimum required content + At a minimum, all localizations must include: Description | URLs @@ -185,7 +248,7 @@ Description | URLs Home | [All heading and subheading URLs](/docs/home/) Setup | [All heading and subheading URLs](/docs/setup/) Tutorials | [Kubernetes Basics](/docs/tutorials/kubernetes-basics/), [Hello Minikube](/docs/tutorials/hello-minikube/) -Site strings | [All site strings in a new localized TOML file](https://github.com/kubernetes/website/tree/master/i18n) +Site strings | [All site strings](#Site-strings-in-i18n) in a new localized TOML file 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](/docs/tutorials/kubernetes-basics/) tutorial for translation into German, create a subfolder under the `content/de/` folder and copy the English source: @@ -213,27 +276,30 @@ To find source files for your target version: 2. Select a branch for your target version from the following table: Target version | Branch -----|----- - Next version | [`dev-{{< skew nextMinorVersion >}}`](https://github.com/kubernetes/website/tree/dev-{{< skew nextMinorVersion >}}) Latest version | [`master`](https://github.com/kubernetes/website/tree/master) - Previous version | `release-*.**` + Previous version | [`release-{{< skew prevMinorVersion >}}`](https://github.com/kubernetes/website/tree/release-{{< skew prevMinorVersion >}}) + Next version | [`dev-{{< skew nextMinorVersion >}}`](https://github.com/kubernetes/website/tree/dev-{{< skew nextMinorVersion >}}) -The `master` branch holds content for the current release `{{< latest-version >}}`. The release team will create `{{< release-branch >}}` branch shortly before the next release: v{{< skew nextMinorVersion >}}. +The `master` branch holds content for the current release `{{< latest-version >}}`. The release team will create a `{{< release-branch >}}` branch before the next release: v{{< skew nextMinorVersion >}}. ### 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`. +Localizations must include the contents of [`data/i18n/en/en.toml`](https://github.com/kubernetes/website/blob/master/data/i18n/en/en.toml) in a new language-specific file. Using German as an example: `data/i18n/de/de.toml`. -Add a new localization file to `i18n/`. For example, with German (`de`): +Add a new localization directory and file to `data/i18n/`. For example, with German (`de`): -```shell -cp i18n/en.toml i18n/de.toml +```bash +mkdir -p data/i18n/de +cp data/i18n/en/en.toml data/i18n/de/de.toml ``` -Then translate the value of each string: +Revise the comments at the top of the file to suit your localization, +then translate the value of each string. For example, this is the German-language +placeholder text for the search form: -```TOML -[docs_label_i_am] -other = "ICH BIN..." +```toml +[ui_search_placeholder] +other = "Suchen" ``` Localizing site strings lets you customize site-wide text and features: for example, the legal copyright text in the footer on each page. @@ -244,7 +310,9 @@ Some language teams have their own language-specific style guide and glossary. F ## Branching strategy -Because localization projects are highly collaborative efforts, we encourage teams to work in shared localization branches. +Because localization projects are highly collaborative efforts, we +encourage teams to work in shared localization branches - especially +when starting out and the localization is not yet live. To collaborate on a localization branch: @@ -288,16 +356,4 @@ For more information about working from forks or directly from the repository, s SIG Docs welcomes upstream contributions and corrections to the English source. -## Help an existing localization -You can also help add or improve content to an existing localization. Join the [Slack channel](https://kubernetes.slack.com/messages/C1J0BPD2M/) for the localization, and start opening PRs to help. Please limit pull requests to a single localization since pull requests that change content in multiple localizations could be difficult to review. - - - -## {{% heading "whatsnext" %}} - - -Once a localization meets requirements for workflow and minimum output, SIG docs will: - -- Enable language selection on the website -- Publicize the localization's availability through [Cloud Native Computing Foundation](https://www.cncf.io/about/) (CNCF) channels, including the [Kubernetes blog](https://kubernetes.io/blog/). 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 26b4018354..78da234572 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 @@ -132,7 +132,7 @@ different Kubernetes components. | `IPv6DualStack` | `true` | Beta | 1.21 | | | `KubeletCredentialProviders` | `false` | Alpha | 1.20 | | | `LegacyNodeRoleBehavior` | `false` | Alpha | 1.16 | 1.18 | -| `LegacyNodeRoleBehavior` | `true` | Beta | 1.19 | | +| `LegacyNodeRoleBehavior` | `true` | Beta | 1.19 | 1.20 | | `LocalStorageCapacityIsolation` | `false` | Alpha | 1.7 | 1.9 | | `LocalStorageCapacityIsolation` | `true` | Beta | 1.10 | | | `LocalStorageCapacityIsolationFSQuotaMonitoring` | `false` | Alpha | 1.15 | | @@ -142,7 +142,7 @@ different Kubernetes components. | `NamespaceDefaultLabelName` | `true` | Beta | 1.21 | | | `NetworkPolicyEndPort` | `false` | Alpha | 1.21 | | | `NodeDisruptionExclusion` | `false` | Alpha | 1.16 | 1.18 | -| `NodeDisruptionExclusion` | `true` | Beta | 1.19 | | +| `NodeDisruptionExclusion` | `true` | Beta | 1.19 | 1.20 | | `NonPreemptingPriority` | `false` | Alpha | 1.15 | 1.18 | | `NonPreemptingPriority` | `true` | Beta | 1.19 | | | `PodDeletionCost` | `false` | Alpha | 1.21 | | @@ -162,7 +162,7 @@ different Kubernetes components. | `ServiceLBNodePortControl` | `false` | Alpha | 1.20 | | | `ServiceLoadBalancerClass` | `false` | Alpha | 1.21 | | | `ServiceNodeExclusion` | `false` | Alpha | 1.8 | 1.18 | -| `ServiceNodeExclusion` | `true` | Beta | 1.19 | | +| `ServiceNodeExclusion` | `true` | Beta | 1.19 | 1.20 | | `ServiceTopology` | `false` | Alpha | 1.17 | | | `SetHostnameAsFQDN` | `false` | Alpha | 1.19 | 1.19 | | `SetHostnameAsFQDN` | `true` | Beta | 1.20 | | @@ -171,7 +171,8 @@ different Kubernetes components. | `StorageVersionHash` | `false` | Alpha | 1.14 | 1.14 | | `StorageVersionHash` | `true` | Beta | 1.15 | | | `SuspendJob` | `false` | Alpha | 1.21 | | -| `TTLAfterFinished` | `false` | Alpha | 1.12 | | +| `TTLAfterFinished` | `false` | Alpha | 1.12 | 1.20 | +| `TTLAfterFinished` | `true` | Beta | 1.21 | | | `TopologyAwareHints` | `false` | Alpha | 1.21 | | | `TopologyManager` | `false` | Alpha | 1.16 | 1.17 | | `TopologyManager` | `true` | Beta | 1.18 | | @@ -264,6 +265,7 @@ different Kubernetes components. | `EvenPodsSpread` | `true` | Beta | 1.18 | 1.18 | | `EvenPodsSpread` | `true` | GA | 1.19 | - | | `ExecProbeTimeout` | `true` | GA | 1.20 | - | +| `ExternalPolicyForExternalIP` | `true` | GA | 1.18 | - | | `GCERegionalPersistentDisk` | `true` | Beta | 1.10 | 1.12 | | `GCERegionalPersistentDisk` | `true` | GA | 1.13 | - | | `HugePages` | `false` | Alpha | 1.8 | 1.9 | @@ -284,11 +286,13 @@ different Kubernetes components. | `KubeletPodResources` | `false` | Alpha | 1.13 | 1.14 | | `KubeletPodResources` | `true` | Beta | 1.15 | | | `KubeletPodResources` | `true` | GA | 1.20 | | +| `LegacyNodeRoleBehavior` | `false` | GA | 1.21 | - | | `MountContainers` | `false` | Alpha | 1.9 | 1.16 | | `MountContainers` | `false` | Deprecated | 1.17 | - | | `MountPropagation` | `false` | Alpha | 1.8 | 1.9 | | `MountPropagation` | `true` | Beta | 1.10 | 1.11 | | `MountPropagation` | `true` | GA | 1.12 | - | +| `NodeDisruptionExclusion` | `true` | GA | 1.21 | - | | `NodeLease` | `false` | Alpha | 1.12 | 1.13 | | `NodeLease` | `true` | Beta | 1.14 | 1.16 | | `NodeLease` | `true` | GA | 1.17 | - | @@ -342,6 +346,7 @@ different Kubernetes components. | `ServiceLoadBalancerFinalizer` | `false` | Alpha | 1.15 | 1.15 | | `ServiceLoadBalancerFinalizer` | `true` | Beta | 1.16 | 1.16 | | `ServiceLoadBalancerFinalizer` | `true` | GA | 1.17 | - | +| `ServiceNodeExclusion` | `true` | GA | 1.21 | - | | `StartupProbe` | `false` | Alpha | 1.16 | 1.17 | | `StartupProbe` | `true` | Beta | 1.18 | 1.19 | | `StartupProbe` | `true` | GA | 1.20 | - | @@ -636,6 +641,7 @@ Each feature gate is designed for enabling/disabling a specific feature: host mounts, or containers that are privileged or using specific non-namespaced capabilities (e.g. `MKNODE`, `SYS_MODULE` etc.). This should only be enabled if user namespace remapping is enabled in the Docker daemon. +- `ExternalPolicyForExternalIP`: Fix a bug where ExternalTrafficPolicy is not applied to Service ExternalIPs. - `GCERegionalPersistentDisk`: Enable the regional PD feature on GCE. - `GenericEphemeralVolume`: Enables ephemeral, inline volumes that support all features of normal volumes (can be provided by third-party storage vendors, storage capacity tracking, diff --git a/content/en/docs/reference/kubectl/cheatsheet.md b/content/en/docs/reference/kubectl/cheatsheet.md index f5a971d3bd..c32ba4f809 100644 --- a/content/en/docs/reference/kubectl/cheatsheet.md +++ b/content/en/docs/reference/kubectl/cheatsheet.md @@ -216,6 +216,10 @@ kubectl get nodes -o json | jq -c 'path(..)|[.[]|tostring]|join(".")' # Produce a period-delimited tree of all keys returned for pods, etc kubectl get pods -o json | jq -c 'path(..)|[.[]|tostring]|join(".")' + +# Produce ENV for all pods, assuming you have a default container for the pods, default namespace and the `env` command is supported. +# Helpful when running any supported command across all pods, not just `env` +for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod env; done ``` ## Updating resources diff --git a/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md index ac7b7a49f9..9c148702b5 100644 --- a/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md +++ b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md @@ -265,7 +265,7 @@ nginx-app 1/1 1 1 2m ``` ```shell -kubectl get po -l run=nginx-app +kubectl get po -l app=nginx-app ``` ``` NAME READY STATUS RESTARTS AGE @@ -279,7 +279,7 @@ deployment "nginx-app" deleted ``` ```shell -kubectl get po -l run=nginx-app +kubectl get po -l app=nginx-app # Return nothing ``` diff --git a/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md b/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md index 8d643c688a..7b9fd5f32c 100644 --- a/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md +++ b/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md @@ -96,7 +96,7 @@ ServiceSpec describes the attributes that a user creates on a service. - **ports.nodePort** (int32) - The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport + The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport - **ports.appProtocol** (string) diff --git a/content/en/docs/reference/scheduling/policies.md b/content/en/docs/reference/scheduling/policies.md index fc9a740266..1cd80273d9 100644 --- a/content/en/docs/reference/scheduling/policies.md +++ b/content/en/docs/reference/scheduling/policies.md @@ -43,21 +43,6 @@ The following *predicates* implement filtering: - `MaxCSIVolumeCount`: Decides how many {{< glossary_tooltip text="CSI" term_id="csi" >}} volumes should be attached, and whether that's over a configured limit. -- `CheckNodeMemoryPressure`: If a Node is reporting memory pressure, and there's no - configured exception, the Pod won't be scheduled there. - -- `CheckNodePIDPressure`: If a Node is reporting that process IDs are scarce, and - there's no configured exception, the Pod won't be scheduled there. - -- `CheckNodeDiskPressure`: If a Node is reporting storage pressure (a filesystem that - is full or nearly full), and there's no configured exception, the Pod won't be - scheduled there. - -- `CheckNodeCondition`: Nodes can report that they have a completely full filesystem, - that networking isn't available or that kubelet is otherwise not ready to run Pods. - If such a condition is set for a Node, and there's no configured exception, the Pod - won't be scheduled there. - - `PodToleratesNodeTaints`: checks if a Pod's {{< glossary_tooltip text="tolerations" term_id="toleration" >}} can tolerate the Node's {{< glossary_tooltip text="taints" term_id="taint" >}}. diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md index daad2e9a39..45fa4a29c4 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md @@ -59,7 +59,7 @@ kubeadm init phase control-plane all [flags] --apiserver-extra-args <comma-separated 'key=value' pairs> -

A set of extra flags to pass to the API Server or override default ones in form of =

+

A set of extra flags to pass to the API Server or override default ones in form of <flagname>=<value>

@@ -87,7 +87,7 @@ kubeadm init phase control-plane all [flags] --controller-manager-extra-args <comma-separated 'key=value' pairs> -

A set of extra flags to pass to the Controller Manager or override default ones in form of =

+

A set of extra flags to pass to the Controller Manager or override default ones in form of <flagname>=<value>

@@ -136,7 +136,7 @@ kubeadm init phase control-plane all [flags] --scheduler-extra-args <comma-separated 'key=value' pairs> -

A set of extra flags to pass to the Scheduler or override default ones in form of =

+

A set of extra flags to pass to the Scheduler or override default ones in form of <flagname>=<value>

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md index f95da1c6d2..d073ed89f0 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md @@ -48,7 +48,7 @@ kubeadm init phase control-plane apiserver [flags] --apiserver-extra-args <comma-separated 'key=value' pairs> -

A set of extra flags to pass to the API Server or override default ones in form of =

+

A set of extra flags to pass to the API Server or override default ones in form of <flagname>=<value>

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md index 0931956c54..4a7f1e0fe0 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md @@ -48,7 +48,7 @@ kubeadm init phase control-plane controller-manager [flags] --controller-manager-extra-args <comma-separated 'key=value' pairs> -

A set of extra flags to pass to the Controller Manager or override default ones in form of =

+

A set of extra flags to pass to the Controller Manager or override default ones in form of <flagname>=<value>

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md index 5fe483282a..c8ccb8c37a 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md @@ -76,7 +76,7 @@ kubeadm init phase control-plane scheduler [flags] --scheduler-extra-args <comma-separated 'key=value' pairs> -

A set of extra flags to pass to the Scheduler or override default ones in form of =

+

A set of extra flags to pass to the Scheduler or override default ones in form of <flagname>=<value>

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 ae528a44df..3f39346c96 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 @@ -147,7 +147,7 @@ kubeadm join [api-server-endpoint] [flags] --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md index cfc54c9bb4..02864ace82 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md @@ -83,7 +83,7 @@ kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags] --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md index d26c5e1adb..6475115940 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md @@ -69,7 +69,7 @@ kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags] --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md index e45e23cf7d..1cfac530cd 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md @@ -69,7 +69,7 @@ kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [f --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md index 995c6290c4..027837aeee 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md @@ -69,7 +69,7 @@ kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md index 9c1cef31c0..5896b25337 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md @@ -62,7 +62,7 @@ kubeadm join phase kubelet-start [api-server-endpoint] [flags] --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md index 5d8e10522b..0f4b7c50cd 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md @@ -97,7 +97,7 @@ kubeadm join phase preflight [api-server-endpoint] [flags] --discovery-token-ca-cert-hash strings -

For token-based discovery, validate that the root CA public key matches this hash (format: ":").

+

For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>").

diff --git a/content/en/docs/setup/best-practices/cluster-large.md b/content/en/docs/setup/best-practices/cluster-large.md index a75499a811..81b6404f37 100644 --- a/content/en/docs/setup/best-practices/cluster-large.md +++ b/content/en/docs/setup/best-practices/cluster-large.md @@ -24,7 +24,7 @@ on how your cluster is deployed. To avoid running into cloud provider quota issues, when creating a cluster with many nodes, consider: -* Request a quota increase for cloud resources such as: +* Requesting a quota increase for cloud resources such as: * Computer instances * CPUs * Storage volumes @@ -33,7 +33,7 @@ consider: * Number of load balancers * Network subnets * Log streams -* Gate the cluster scaling actions to brings up new nodes in batches, with a pause +* Gating the cluster scaling actions to bring up new nodes in batches, with a pause between batches, because some cloud providers rate limit the creation of new instances. ## Control plane components @@ -66,6 +66,10 @@ When creating a cluster, you can (using custom tooling): * start and configure additional etcd instance * configure the {{< glossary_tooltip term_id="kube-apiserver" text="API server" >}} to use it for storing events +See [Operating etcd clusters for Kubernetes](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/) and +[Set up a High Availability etcd cluster with kubeadm](docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) +for details on configuring and managing etcd for a large cluster. + ## Addon resources Kubernetes [resource limits](/docs/concepts/configuration/manage-resources-containers/) diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md b/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md index 1dd44e9b0b..8a9828a7ad 100644 --- a/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md +++ b/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md @@ -78,9 +78,13 @@ kind: ClusterConfiguration kubernetesVersion: v1.16.0 scheduler: extraArgs: - bind-address: 0.0.0.0 - config: /home/johndoe/schedconfig.yaml - kubeconfig: /home/johndoe/kubeconfig.yaml + config: /etc/kubernetes/scheduler-config.yaml + extraVolumes: + - name: schedulerconfig + hostPath: /home/johndoe/schedconfig.yaml + mountPath: /etc/kubernetes/scheduler-config.yaml + readOnly: true + pathType: "File" ``` diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md b/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md index 6f62a051ad..9e95a69f47 100644 --- a/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md +++ b/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md @@ -246,8 +246,8 @@ this example. ```sh root@HOST0 $ kubeadm init phase etcd local --config=/tmp/${HOST0}/kubeadmcfg.yaml - root@HOST1 $ kubeadm init phase etcd local --config=/home/ubuntu/kubeadmcfg.yaml - root@HOST2 $ kubeadm init phase etcd local --config=/home/ubuntu/kubeadmcfg.yaml + root@HOST1 $ kubeadm init phase etcd local --config=/tmp/${HOST1}/kubeadmcfg.yaml + root@HOST2 $ kubeadm init phase etcd local --config=/tmp/${HOST2}/kubeadmcfg.yaml ``` 1. Optional: Check the cluster health diff --git a/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md b/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md index a2055ce425..587b34b58f 100644 --- a/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md +++ b/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md @@ -1,33 +1,58 @@ --- +title: Intro to Windows support in Kubernetes +content_type: concept +weight: 65 reviewers: - jayunit100 - jsturtevant - marosset - perithompson -title: Intro to Windows support in Kubernetes -content_type: concept -weight: 65 --- -Windows applications constitute a large portion of the services and applications that run in many organizations. [Windows containers](https://aka.ms/windowscontainers) provide a modern way to encapsulate processes and package dependencies, making it easier to use DevOps practices and follow cloud native patterns for Windows applications. Kubernetes has become the defacto standard container orchestrator, and the release of Kubernetes 1.14 includes production support for scheduling Windows containers on Windows nodes in a Kubernetes cluster, enabling a vast ecosystem of Windows applications to leverage the power of Kubernetes. Organizations with investments in Windows-based applications and Linux-based applications don't have to look for separate orchestrators to manage their workloads, leading to increased operational efficiencies across their deployments, regardless of operating system. +Windows applications constitute a large portion of the services and +applications that run in many organizations. +[Windows containers](https://aka.ms/windowscontainers) provide a modern way to +encapsulate processes and package dependencies, making it easier to use DevOps +practices and follow cloud native patterns for Windows applications. +Kubernetes has become the defacto standard container orchestrator, and the +release of Kubernetes 1.14 includes production support for scheduling Windows +containers on Windows nodes in a Kubernetes cluster, enabling a vast ecosystem +of Windows applications to leverage the power of Kubernetes. Organizations +with investments in Windows-based applications and Linux-based applications +don't have to look for separate orchestrators to manage their workloads, +leading to increased operational efficiencies across their deployments, +regardless of operating system. ## Windows containers in Kubernetes -To enable the orchestration of Windows containers in Kubernetes, include Windows nodes in your existing Linux cluster. Scheduling Windows containers in {{< glossary_tooltip text="Pods" term_id="pod" >}} on Kubernetes is similar to scheduling Linux-based containers. +To enable the orchestration of Windows containers in Kubernetes, include +Windows nodes in your existing Linux cluster. Scheduling Windows containers in +{{< glossary_tooltip text="Pods" term_id="pod" >}} on Kubernetes is similar to +scheduling Linux-based containers. -In order to run Windows containers, your Kubernetes cluster must include multiple operating systems, with control plane nodes running Linux and workers running either Windows or Linux depending on your workload needs. Windows Server 2019 is the only Windows operating system supported, enabling [Kubernetes Node](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/architecture.md#the-kubernetes-node) on Windows (including kubelet, [container runtime](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/containerd), and kube-proxy). For a detailed explanation of Windows distribution channels see the [Microsoft documentation](https://docs.microsoft.com/en-us/windows-server/get-started-19/servicing-channels-19). +In order to run Windows containers, your Kubernetes cluster must include +multiple operating systems, with control plane nodes running Linux and workers +running either Windows or Linux depending on your workload needs. Windows +Server 2019 is the only Windows operating system supported, enabling +[Kubernetes Node](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/architecture.md#the-kubernetes-node) +on Windows (including kubelet, +[container runtime](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/containerd), +and kube-proxy). For a detailed explanation of Windows distribution channels +see the [Microsoft documentation](https://docs.microsoft.com/en-us/windows-server/get-started-19/servicing-channels-19). -{{< note >}} -The Kubernetes control plane, including the [master components](/docs/concepts/overview/components/), continues to run on Linux. There are no plans to have a Windows-only Kubernetes cluster. -{{< /note >}} +The Kubernetes control plane, including the +[master components](/docs/concepts/overview/components/), +continues to run on Linux. +There are no plans to have a Windows-only Kubernetes cluster. -{{< note >}} -In this document, when we talk about Windows containers we mean Windows containers with process isolation. Windows containers with [Hyper-V isolation](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/hyperv-container) is planned for a future release. -{{< /note >}} +In this document, when we talk about Windows containers we mean Windows +containers with process isolation. Windows containers with +[Hyper-V isolation](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/hyperv-container) +is planned for a future release. ## Supported Functionality and Limitations @@ -35,41 +60,68 @@ In this document, when we talk about Windows containers we mean Windows containe #### Windows OS Version Support -Refer to the following table for Windows operating system support in Kubernetes. A single heterogeneous Kubernetes cluster can have both Windows and Linux worker nodes. Windows containers have to be scheduled on Windows nodes and Linux containers on Linux nodes. +Refer to the following table for Windows operating system support in +Kubernetes. A single heterogeneous Kubernetes cluster can have both Windows +and Linux worker nodes. Windows containers have to be scheduled on Windows +nodes and Linux containers on Linux nodes. | Kubernetes version | Windows Server LTSC releases | Windows Server SAC releases | -| --- | --- | --- | -| *Kubernetes v1.17* | Windows Server 2019 | Windows Server ver 1809 | -| *Kubernetes v1.18* | Windows Server 2019 | Windows Server ver 1809, Windows Server ver 1903, Windows Server ver 1909 | +| --- | --- | --- | --- | | *Kubernetes v1.19* | Windows Server 2019 | Windows Server ver 1909, Windows Server ver 2004 | | *Kubernetes v1.20* | Windows Server 2019 | Windows Server ver 1909, Windows Server ver 2004 | +| *Kubernetes v1.21* | Windows Server 2019 | Windows Server ver 2004, Windows Server ver 20H2 | -{{< note >}} -Information on the different Windows Server servicing channels including their support models can be found at [Windows Server servicing channels](https://docs.microsoft.com/en-us/windows-server/get-started-19/servicing-channels-19). -{{< /note >}} -{{< note >}} -We don't expect all Windows customers to update the operating system for their apps frequently. Upgrading your applications is what dictates and necessitates upgrading or introducing new nodes to the cluster. For the customers that chose to upgrade their operating system for containers running on Kubernetes, we will offer guidance and step-by-step instructions when we add support for a new operating system version. This guidance will include recommended upgrade procedures for upgrading user applications together with cluster nodes. Windows nodes adhere to Kubernetes [version-skew policy](/docs/setup/release/version-skew-policy/) (node to control plane versioning) the same way as Linux nodes do today. -{{< /note >}} -{{< note >}} -The Windows Server Host Operating System is subject to the [Windows Server ](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing) licensing. The Windows Container images are subject to the [Supplemental License Terms for Windows containers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/images-eula). -{{< /note >}} -{{< note >}} -Windows containers with process isolation have strict compatibility rules, [where the host OS version must match the container base image OS version](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility). Once we support Windows containers with Hyper-V isolation in Kubernetes, the limitation and compatibility rules will change. -{{< /note >}} + +Information on the different Windows Server servicing channels including their +support models can be found at +[Windows Server servicing channels](https://docs.microsoft.com/en-us/windows-server/get-started-19/servicing-channels-19). + +We don't expect all Windows customers to update the operating system for their +apps frequently. Upgrading your applications is what dictates and necessitates +upgrading or introducing new nodes to the cluster. For the customers that +chose to upgrade their operating system for containers running on Kubernetes, +we will offer guidance and step-by-step instructions when we add support for a +new operating system version. This guidance will include recommended upgrade +procedures for upgrading user applications together with cluster nodes. +Windows nodes adhere to Kubernetes +[version-skew policy](/docs/setup/release/version-skew-policy/) (node to control plane +versioning) the same way as Linux nodes do today. + + +The Windows Server Host Operating System is subject to the +[Windows Server ](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing) +licensing. The Windows Container images are subject to the +[Supplemental License Terms for Windows containers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/images-eula). + +Windows containers with process isolation have strict compatibility rules, +[where the host OS version must match the container base image OS version](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility). +Once we support Windows containers with Hyper-V isolation in Kubernetes, the +limitation and compatibility rules will change. #### Pause Image -Microsoft maintains a Windows pause infrastructure container at `mcr.microsoft.com/oss/kubernetes/pause:1.4.1`. +Microsoft maintains a Windows pause infrastructure container at +`mcr.microsoft.com/oss/kubernetes/pause:3.4.1`. #### Compute -From an API and kubectl perspective, Windows containers behave in much the same way as Linux-based containers. However, there are some notable differences in key functionality which are outlined in the [limitation section](#limitations). +From an API and kubectl perspective, Windows containers behave in much the +same way as Linux-based containers. However, there are some notable +differences in key functionality which are outlined in the +[limitation section](#limitations). -Key Kubernetes elements work the same way in Windows as they do in Linux. In this section, we talk about some of the key workload enablers and how they map to Windows. +Key Kubernetes elements work the same way in Windows as they do in Linux. In +this section, we talk about some of the key workload enablers and how they map +to Windows. * [Pods](/docs/concepts/workloads/pods/) - A Pod is the basic building block of Kubernetes–the smallest and simplest unit in the Kubernetes object model that you create or deploy. You may not deploy Windows and Linux containers in the same Pod. All containers in a Pod are scheduled onto a single Node where each Node represents a specific platform and architecture. The following Pod capabilities, properties and events are supported with Windows containers: + A Pod is the basic building block of Kubernetes–the smallest and simplest + unit in the Kubernetes object model that you create or deploy. You may not + deploy Windows and Linux containers in the same Pod. All containers in a Pod + are scheduled onto a single Node where each Node represents a specific + platform and architecture. The following Pod capabilities, properties and + events are supported with Windows containers: * Single or multiple containers per Pod with process isolation and volume sharing * Pod status fields @@ -81,7 +133,8 @@ Key Kubernetes elements work the same way in Windows as they do in Linux. In thi * Resource limits * [Controllers](/docs/concepts/workloads/controllers/) - Kubernetes controllers handle the desired state of Pods. The following workload controllers are supported with Windows containers: + Kubernetes controllers handle the desired state of Pods. The following + workload controllers are supported with Windows containers: * ReplicaSet * ReplicationController @@ -90,9 +143,13 @@ Key Kubernetes elements work the same way in Windows as they do in Linux. In thi * DaemonSet * Job * CronJob + * [Services](/docs/concepts/services-networking/service/) - A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them - sometimes called a micro-service. You can use services for cross-operating system connectivity. In Windows, services can utilize the following types, properties and capabilities: + A Kubernetes Service is an abstraction which defines a logical set of Pods + and a policy by which to access them - sometimes called a micro-service. You + can use services for cross-operating system connectivity. In Windows, services + can utilize the following types, properties and capabilities: * Service Environment variables * NodePort @@ -101,7 +158,10 @@ Key Kubernetes elements work the same way in Windows as they do in Linux. In thi * ExternalName * Headless services -Pods, Controllers and Services are critical elements to managing Windows workloads on Kubernetes. However, on their own they are not enough to enable the proper lifecycle management of Windows workloads in a dynamic cloud native environment. We added support for the following features: +Pods, Controllers and Services are critical elements to managing Windows +workloads on Kubernetes. However, on their own they are not enough to enable +the proper lifecycle management of Windows workloads in a dynamic cloud native +environment. We added support for the following features: * Pod and container metrics * Horizontal Pod Autoscaler support @@ -115,27 +175,42 @@ Pods, Controllers and Services are critical elements to managing Windows workloa {{< feature-state for_k8s_version="v1.14" state="stable" >}} -Docker EE-basic 19.03+ is the recommended container runtime for all Windows Server versions. This works with the dockershim code included in the kubelet. +Docker EE-basic 19.03+ is the recommended container runtime for all Windows +Server versions. This works with the dockershim code included in the kubelet. ##### CRI-ContainerD {{< feature-state for_k8s_version="v1.20" state="stable" >}} -{{< glossary_tooltip term_id="containerd" text="ContainerD" >}} 1.4.0+ can also be used as the container runtime for Windows Kubernetes nodes. +{{< glossary_tooltip term_id="containerd" text="ContainerD" >}} 1.4.0+ can +also be used as the container runtime for Windows Kubernetes nodes. -Learn how to [install ContainerD on a Windows](/docs/setup/production-environment/container-runtimes/#install-containerd). - -{{< caution >}} -There is a [known limitation](/docs/tasks/configure-pod-container/configure-gmsa/#gmsa-limitations) when using GMSA with ContainerD to access Windows network shares which requires a kernel patch. Updates to address this limitation are currently available for Windows Server, Version 2004 and will be available for Windows Server 2019 in early 2021. Check for updates on the [Microsoft Windows Containers issue tracker](https://github.com/microsoft/Windows-Containers/issues/44). -{{< /caution >}} +Learn how to +[install ContainerD on a Windows](/docs/setup/production-environment/container-runtimes/#install-containerd). #### Persistent Storage -Kubernetes [volumes](/docs/concepts/storage/volumes/) enable complex applications, with data persistence and Pod volume sharing requirements, to be deployed on Kubernetes. Management of persistent volumes associated with a specific storage back-end or protocol includes actions such as: provisioning/de-provisioning/resizing of volumes, attaching/detaching a volume to/from a Kubernetes node and mounting/dismounting a volume to/from individual containers in a pod that needs to persist data. The code implementing these volume management actions for a specific storage back-end or protocol is shipped in the form of a Kubernetes volume [plugin](/docs/concepts/storage/volumes/#types-of-volumes). The following broad classes of Kubernetes volume plugins are supported on Windows: +Kubernetes [volumes](/docs/concepts/storage/volumes/) enable complex +applications, with data persistence and Pod volume sharing requirements, to be +deployed on Kubernetes. Management of persistent volumes associated with a +specific storage back-end or protocol includes actions such as: +provisioning/de-provisioning/resizing of volumes, attaching/detaching a volume +to/from a Kubernetes node and mounting/dismounting a volume to/from individual +containers in a pod that needs to persist data. The code implementing these +volume management actions for a specific storage back-end or protocol is +shipped in the form of a Kubernetes volume +[plugin](/docs/concepts/storage/volumes/#types-of-volumes). The following +broad classes of Kubernetes volume plugins are supported on Windows: ##### In-tree Volume Plugins -Code associated with in-tree volume plugins ship as part of the core Kubernetes code base. Deployment of in-tree volume plugins do not require installation of additional scripts or deployment of separate containerized plugin components. These plugins can handle: provisioning/de-provisioning and resizing of volumes in the storage backend, attaching/detaching of volumes to/from a Kubernetes node and mounting/dismounting a volume to/from individual containers in a pod. The following in-tree plugins support Windows nodes: +Code associated with in-tree volume plugins ship as part of the core +Kubernetes code base. Deployment of in-tree volume plugins do not require +installation of additional scripts or deployment of separate containerized +plugin components. These plugins can handle: provisioning/de-provisioning and +resizing of volumes in the storage backend, attaching/detaching of volumes +to/from a Kubernetes node and mounting/dismounting a volume to/from individual +containers in a pod. The following in-tree plugins support Windows nodes: * [awsElasticBlockStore](/docs/concepts/storage/volumes/#awselasticblockstore) * [azureDisk](/docs/concepts/storage/volumes/#azuredisk) @@ -145,7 +220,16 @@ Code associated with in-tree volume plugins ship as part of the core Kubernetes ##### FlexVolume Plugins -Code associated with [FlexVolume](/docs/concepts/storage/volumes/#flexVolume) plugins ship as out-of-tree scripts or binaries that need to be deployed directly on the host. FlexVolume plugins handle attaching/detaching of volumes to/from a Kubernetes node and mounting/dismounting a volume to/from individual containers in a pod. Provisioning/De-provisioning of persistent volumes associated with FlexVolume plugins may be handled through an external provisioner that is typically separate from the FlexVolume plugins. The following FlexVolume [plugins](https://github.com/Microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows), deployed as powershell scripts on the host, support Windows nodes: +Code associated with [FlexVolume](/docs/concepts/storage/volumes/#flexVolume) +plugins ship as out-of-tree scripts or binaries that need to be deployed +directly on the host. FlexVolume plugins handle attaching/detaching of volumes +to/from a Kubernetes node and mounting/dismounting a volume to/from individual +containers in a pod. Provisioning/De-provisioning of persistent volumes +associated with FlexVolume plugins may be handled through an external +provisioner that is typically separate from the FlexVolume plugins. The +following FlexVolume +[plugins](https://github.com/Microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows), +deployed as powershell scripts on the host, support Windows nodes: * [SMB](https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows/plugins/microsoft.com~smb.cmd) * [iSCSI](https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows/plugins/microsoft.com~iscsi.cmd) @@ -154,13 +238,40 @@ Code associated with [FlexVolume](/docs/concepts/storage/volumes/#flexVolume) pl {{< feature-state for_k8s_version="v1.19" state="beta" >}} -Code associated with {{< glossary_tooltip text="CSI" term_id="csi" >}} plugins ship as out-of-tree scripts and binaries that are typically distributed as container images and deployed using standard Kubernetes constructs like DaemonSets and StatefulSets. CSI plugins handle a wide range of volume management actions in Kubernetes: provisioning/de-provisioning/resizing of volumes, attaching/detaching of volumes to/from a Kubernetes node and mounting/dismounting a volume to/from individual containers in a pod, backup/restore of persistent data using snapshots and cloning. CSI plugins typically consist of node plugins (that run on each node as a DaemonSet) and controller plugins. +Code associated with {{< glossary_tooltip text="CSI" term_id="csi" >}} plugins +ship as out-of-tree scripts and binaries that are typically distributed as +container images and deployed using standard Kubernetes constructs like +DaemonSets and StatefulSets. CSI plugins handle a wide range of volume +management actions in Kubernetes: provisioning/de-provisioning/resizing of +volumes, attaching/detaching of volumes to/from a Kubernetes node and +mounting/dismounting a volume to/from individual containers in a pod, +backup/restore of persistent data using snapshots and cloning. CSI plugins +typically consist of node plugins (that run on each node as a DaemonSet) and +controller plugins. -CSI node plugins (especially those associated with persistent volumes exposed as either block devices or over a shared file-system) need to perform various privileged operations like scanning of disk devices, mounting of file systems, etc. These operations differ for each host operating system. For Linux worker nodes, containerized CSI node plugins are typically deployed as privileged containers. For Windows worker nodes, privileged operations for containerized CSI node plugins is supported using [csi-proxy](https://github.com/kubernetes-csi/csi-proxy), a community-managed, stand-alone binary that needs to be pre-installed on each Windows node. Please refer to the deployment guide of the CSI plugin you wish to deploy for further details. +CSI node plugins (especially those associated with persistent volumes exposed +as either block devices or over a shared file-system) need to perform various +privileged operations like scanning of disk devices, mounting of file systems, +etc. These operations differ for each host operating system. For Linux worker +nodes, containerized CSI node plugins are typically deployed as privileged +containers. For Windows worker nodes, privileged operations for containerized +CSI node plugins is supported using +[csi-proxy](https://github.com/kubernetes-csi/csi-proxy), a community-managed, +stand-alone binary that needs to be pre-installed on each Windows node. Please +refer to the deployment guide of the CSI plugin you wish to deploy for further +details. #### Networking -Networking for Windows containers is exposed through [CNI plugins](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/). Windows containers function similarly to virtual machines in regards to networking. Each container has a virtual network adapter (vNIC) which is connected to a Hyper-V virtual switch (vSwitch). The Host Networking Service (HNS) and the Host Compute Service (HCS) work together to create containers and attach container vNICs to networks. HCS is responsible for the management of containers whereas HNS is responsible for the management of networking resources such as: +Networking for Windows containers is exposed through +[CNI plugins](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/). +Windows containers function similarly to virtual machines in regards to +networking. Each container has a virtual network adapter (vNIC) which is +connected to a Hyper-V virtual switch (vSwitch). The Host Networking Service +(HNS) and the Host Compute Service (HCS) work together to create containers +and attach container vNICs to networks. HCS is responsible for the management +of containers whereas HNS is responsible for the management of networking +resources such as: * Virtual networks (including creation of vSwitches) * Endpoints / vNICs @@ -176,19 +287,155 @@ The following service spec types are supported: ##### Network modes -Windows supports five different networking drivers/modes: L2bridge, L2tunnel, Overlay, Transparent, and NAT. In a heterogeneous cluster with Windows and Linux worker nodes, you need to select a networking solution that is compatible on both Windows and Linux. The following out-of-tree plugins are supported on Windows, with recommendations on when to use each CNI: +Windows supports five different networking drivers/modes: L2bridge, L2tunnel, +Overlay, Transparent, and NAT. In a heterogeneous cluster with Windows and +Linux worker nodes, you need to select a networking solution that is +compatible on both Windows and Linux. The following out-of-tree plugins are +supported on Windows, with recommendations on when to use each CNI: -| Network Driver | Description | Container Packet Modifications | Network Plugins | Network Plugin Characteristics | -| -------------- | ----------- | ------------------------------ | --------------- | ------------------------------ | -| L2bridge | Containers are attached to an external vSwitch. Containers are attached to the underlay network, although the physical network doesn't need to learn the container MACs because they are rewritten on ingress/egress. | MAC is rewritten to host MAC, IP may be rewritten to host IP using HNS OutboundNAT policy. | [win-bridge](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-bridge), [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md), Flannel host-gateway uses win-bridge | win-bridge uses L2bridge network mode, connects containers to the underlay of hosts, offering best performance. Requires user-defined routes (UDR) for inter-node connectivity. | -| L2Tunnel | This is a special case of l2bridge, but only used on Azure. All packets are sent to the virtualization host where SDN policy is applied. | MAC rewritten, IP visible on the underlay network | [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md) | Azure-CNI allows integration of containers with Azure vNET, and allows them to leverage the set of capabilities that [Azure Virtual Network provides](https://azure.microsoft.com/en-us/services/virtual-network/). For example, securely connect to Azure services or use Azure NSGs. See [azure-cni for some examples](https://docs.microsoft.com/en-us/azure/aks/concepts-network#azure-cni-advanced-networking) | -| Overlay (Overlay networking for Windows in Kubernetes is in *alpha* stage) | Containers are given a vNIC connected to an external vSwitch. Each overlay network gets its own IP subnet, defined by a custom IP prefix.The overlay network driver uses VXLAN encapsulation. | Encapsulated with an outer header. | [Win-overlay](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-overlay), Flannel VXLAN (uses win-overlay) | win-overlay should be used when virtual container networks are desired to be isolated from underlay of hosts (e.g. for security reasons). Allows for IPs to be re-used for different overlay networks (which have different VNID tags) if you are restricted on IPs in your datacenter. This option requires [KB4489899](https://support.microsoft.com/help/4489899) on Windows Server 2019. | -| Transparent (special use case for [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes)) | Requires an external vSwitch. Containers are attached to an external vSwitch which enables intra-pod communication via logical networks (logical switches and routers). | Packet is encapsulated either via [GENEVE](https://datatracker.ietf.org/doc/draft-gross-geneve/) or [STT](https://datatracker.ietf.org/doc/draft-davie-stt/) tunneling to reach pods which are not on the same host.
Packets are forwarded or dropped via the tunnel metadata information supplied by the ovn network controller.
NAT is done for north-south communication. | [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes) | [Deploy via ansible](https://github.com/openvswitch/ovn-kubernetes/tree/master/contrib). Distributed ACLs can be applied via Kubernetes policies. IPAM support. Load-balancing can be achieved without kube-proxy. NATing is done without using iptables/netsh. | -| NAT (*not used in Kubernetes*) | Containers are given a vNIC connected to an internal vSwitch. DNS/DHCP is provided using an internal component called [WinNAT](https://blogs.technet.microsoft.com/virtualization/2016/05/25/windows-nat-winnat-capabilities-and-limitations/) | MAC and IP is rewritten to host MAC/IP. | [nat](https://github.com/Microsoft/windows-container-networking/tree/master/plugins/nat) | Included here for completeness | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Network DriverDescriptionContainer Packet ModificationsNetwork PluginsNetwork Plugin Characteristics
L2bridgeContainers are attached to an external vSwitch. Containers are attached + to the underlay network, although the physical network doesn't need to learn + the container. MACs because they are rewritten on ingress/egress. + + MAC is rewritten to host MAC, IP may be rewritten to host IP using HNS + OutboundNAT policy. + + win-bridge, + Azure-CNI, + Flannel host-gateway uses win-bridge + + win-bridge uses L2bridge network mode, + connects containers to the underlay of hosts, offering best performance. + Requires user-defined routes (UDR) for inter-node connectivity. +
L2Tunnel + This is a special case of l2bridge, but only used on Azure. All packets + are sent to the virtualization host where SDN policy is applied. + + MAC rewritten, IP visible on the underlay network + + Azure-CNI + + Azure-CNI allows integration of containers with Azure vNET, and allows them + to leverage the set of capabilities that + Azure Virtual Network + provides. For example, securely connect to Azure services or use Azure NSGs. + See azure-cni + for some examples. +
Overlay (Overlay networking for Windows in Kubernetes is in Alpha stage) + Containers are given a vNIC connected to an external vSwitch. Each overlay + network gets its own IP subnet, defined by a custom IP prefix.The overlay + network driver uses VXLAN encapsulation. + + Encapsulated with an outer header. + + Win-overlay, + Flannel VXLAN (uses win-overlay) + + win-overlay should be used when virtual container networks are desired to + be isolated from underlay of hosts (e.g. for security reasons). Allows for IPs + to be re-used for different overlay networks (which have different VNID tags) + if you are restricted on IPs in your datacenter. This option requires + KB4489899 on Windows Server + 2019. +
+ Transparent (special use case for ovn-kubernetes) + + Requires an external vSwitch. Containers are attached to an external + vSwitch which enables intra-pod communication via logical networks (logical + switches and routers). + + Packet is encapsulated either via + GENEVE, + STT tunneling to reach + pods which are not on the same host.
Packets are forwarded or dropped + via the tunnel metadata information supplied by the ovn network controller. +
+ NAT is done for north-south communication. +
+ ovn-kubernetes + + Deploy via Ansible. + Distributed ACLs can be applied via Kubernetes policies. IPAM support. + Load-balancing can be achieved without kube-proxy. NATing is done without + using iptables/netsh. +
NAT (not used in Kubernetes) + Containers are given a vNIC connected to an internal vSwitch. DNS/DHCP is + provided using an internal component called + WinNAT. + + MAC and IP is rewritten to host MAC/IP. + + nat + + Included here for completeness +
-As outlined above, the [Flannel](https://github.com/coreos/flannel) CNI [meta plugin](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel) is also supported on [Windows](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel#windows-support-experimental) via the [VXLAN network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) (**alpha support** ; delegates to win-overlay) and [host-gateway network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) (stable support; delegates to win-bridge). This plugin supports delegating to one of the reference CNI plugins (win-overlay, win-bridge), to work in conjunction with Flannel daemon on Windows (Flanneld) for automatic node subnet lease assignment and HNS network creation. This plugin reads in its own configuration file (cni.conf), and aggregates it with the environment variables from the FlannelD generated subnet.env file. It then delegates to one of the reference CNI plugins for network plumbing, and sends the correct configuration containing the node-assigned subnet to the IPAM plugin (e.g. host-local). +As outlined above, the [Flannel](https://github.com/coreos/flannel) CNI +[meta plugin](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel) +is also supported on +[Windows](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel#windows-support-experimental) +via the [VXLAN network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) +(**alpha support** ; delegates to win-overlay) and +[host-gateway network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) +(stable support; delegates to win-bridge). This plugin supports delegating to +one of the reference CNI plugins (win-overlay, win-bridge), to work in +conjunction with Flannel daemon on Windows (Flanneld) for automatic node +subnet lease assignment and HNS network creation. This plugin reads in its own +configuration file (cni.conf), and aggregates it with the environment +variables from the FlannelD generated subnet.env file. It then delegates to +one of the reference CNI plugins for network plumbing, and sends the correct +configuration containing the node-assigned subnet to the IPAM plugin (e.g. +host-local). -For the node, pod, and service objects, the following network flows are supported for TCP/UDP traffic: +For the node, pod, and service objects, the following network flows are +supported for TCP/UDP traffic: * Pod -> Pod (IP) * Pod -> Pod (Name) @@ -210,87 +457,229 @@ The following IPAM options are supported on Windows: ##### Load balancing and Services -On Windows, you can use the following settings to configure Services and load balancing behavior: +On Windows, you can use the following settings to configure Services and load +balancing behavior: {{< table caption="Windows Service Settings" >}} -| Feature | Description | Supported Kubernetes version | Supported Windows OS build | How to enable | -| ------- | ----------- | ----------------------------- | -------------------------- | ------------- | -| Session affinity | Ensures that connections from a particular client are passed to the same Pod each time. | v1.20+ | [Windows Server vNext Insider Preview Build 19551](https://blogs.windows.com/windowsexperience/2020/01/28/announcing-windows-server-vnext-insider-preview-build-19551/) (or higher) | Set `service.spec.sessionAffinity` to "ClientIP" | -| Direct Server Return (DSR) | Load balancing mode where the IP address fixups and the LBNAT occurs at the container vSwitch port directly; service traffic arrives with the source IP set as the originating pod IP. | v1.20+ | Windows Server 2019 | Set the following flags in kube-proxy: `--feature-gates="WinDSR=true" --enable-dsr=true` | -| Preserve-Destination | Skips DNAT of service traffic, thereby preserving the virtual IP of the target service in packets reaching the backend Pod. Also disables node-node forwarding. | v1.20+ | Windows Server, version 1903 (or higher) | Set `"preserve-destination": "true"` in service annotations and enable DSR in kube-proxy. | -| IPv4/IPv6 dual-stack networking | Native IPv4-to-IPv4 in parallel with IPv6-to-IPv6 communications to, from, and within a cluster | v1.19+ | Windows Server, version 2004 (or higher) | See [IPv4/IPv6 dual-stack](#ipv4ipv6-dual-stack) | -| Client IP preservation | Ensures that source IP of incoming ingress traffic gets preserved. Also disables node-node forwarding. | v1.20+ | Windows Server, version 2019 (or higher) | Set `service.spec.externalTrafficPolicy` to "Local" and enable DSR in kube-proxy | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureDescriptionSupported Kubernetes versionSupported Windows OS buildHow to enable
Session affinity + Ensures that connections from a particular client are passed to the same + Pod each time. + v1.20+ + Windows Server vNext Insider Preview Build 19551 (or higher) + + Set service.spec.sessionAffinity to "ClientIP" +
Direct Server Return (DSR) + Load balancing mode where the IP address fixups and the LBNAT occurs at + the container vSwitch port directly; service traffic arrives with the source + IP set as the originating pod IP. + v1.20+ + Windows Server 2019 + + Set the following flags in kube-proxy: + --feature-gates="WinDSR=true" --enable-dsr=true +
Preserve-Destination + Skips DNAT of service traffic, thereby preserving the virtual IP of the target + service in packets reaching the backend Pod. Also disables node-node forwarding. + v1.20+Windows Server, version 1903 (or higher) + Set "preserve-destination": "true" in service annotations + and enable DSR in kube-proxy. +
IPv4/IPv6 dual-stack networking + Native IPv4-to-IPv4 in parallel with IPv6-to-IPv6 communications to, from, + and within a cluster + v1.19+Windows Server, version 2004 (or higher) + See IPv4/IPv6 dual-stack +
Client IP preservation + Ensures that source IP of incoming ingress traffic gets preserved. Also + disables node-node forwarding. + v1.20+Windows Server, version 2019 (or higher) + Set service.spec.externalTrafficPolicy to "Local" and enable + DSR in kube-proxy. +
+ {{< /table >}} #### IPv4/IPv6 dual-stack -You can enable IPv4/IPv6 dual-stack networking for `l2bridge` networks using the `IPv6DualStack` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/). See [enable IPv4/IPv6 dual stack](/docs/concepts/services-networking/dual-stack#enable-ipv4ipv6-dual-stack) for more details. +You can enable IPv4/IPv6 dual-stack networking for `l2bridge` networks using +the `IPv6DualStack` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/). See +[enable IPv4/IPv6 dual stack](/docs/concepts/services-networking/dual-stack#enable-ipv4ipv6-dual-stack) +for more details. -{{< note >}} -On Windows, using IPv6 with Kubernetes require Windows Server, version 2004 (kernel version 10.0.19041.610) or later. -{{< /note >}} +On Windows, using IPv6 with Kubernetes require Windows Server, version 2004 +(kernel version 10.0.19041.610) or later. -{{< note >}} Overlay (VXLAN) networks on Windows do not support dual-stack networking today. -{{< /note >}} ### Limitations -Windows is only supported as a worker node in the Kubernetes architecture and component matrix. This means that a Kubernetes cluster must always include Linux master nodes, zero or more Linux worker nodes, and zero or more Windows worker nodes. - +Windows is only supported as a worker node in the Kubernetes architecture and +component matrix. This means that a Kubernetes cluster must always include +Linux master nodes, zero or more Linux worker nodes, and zero or more Windows +worker nodes. #### Resource Handling - Linux cgroups are used as a pod boundary for resource controls in Linux. Containers are created within that boundary for network, process and file system isolation. The cgroups APIs can be used to gather cpu/io/memory stats. In contrast, Windows uses a Job object per container with a system namespace filter to contain all processes in a container and provide logical isolation from the host. There is no way to run a Windows container without the namespace filtering in place. This means that system privileges cannot be asserted in the context of the host, and thus privileged containers are not available on Windows. Containers cannot assume an identity from the host because the Security Account Manager (SAM) is separate. +Linux cgroups are used as a pod boundary for resource controls in Linux. +Containers are created within that boundary for network, process and file +system isolation. The cgroups APIs can be used to gather cpu/io/memory stats. +In contrast, Windows uses a Job object per container with a system namespace +filter to contain all processes in a container and provide logical isolation +from the host. There is no way to run a Windows container without the +namespace filtering in place. This means that system privileges cannot be +asserted in the context of the host, and thus privileged containers are not +available on Windows. Containers cannot assume an identity from the host +because the Security Account Manager (SAM) is separate. #### Resource Reservations ##### Memory Reservations -Windows does not have an out-of-memory process killer as Linux does. Windows always treats all user-mode memory allocations as virtual, and pagefiles are mandatory. The net effect is that Windows won't reach out of memory conditions the same way Linux does, and processes page to disk instead of being subject to out of memory (OOM) termination. If memory is over-provisioned and all physical memory is exhausted, then paging can slow down performance. -Keeping memory usage within reasonable bounds is possible using the kubelet parameters `--kubelet-reserve` and/or `--system-reserve` to account for memory usage on the node (outside of containers). This reduces [NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable). +Windows does not have an out-of-memory process killer as Linux does. Windows +always treats all user-mode memory allocations as virtual, and pagefiles are +mandatory. The net effect is that Windows won't reach out of memory conditions +the same way Linux does, and processes page to disk instead of being subject +to out of memory (OOM) termination. If memory is over-provisioned and all +physical memory is exhausted, then paging can slow down performance. -{{< note >}} -As you deploy workloads, use resource limits (must set only limits or limits must equal requests) on containers. This also subtracts from NodeAllocatable and prevents the scheduler from adding more pods once a node is full. -{{< /note >}} +Keeping memory usage within reasonable bounds is possible using the kubelet +parameters `--kubelet-reserve` and/or `--system-reserve` to account for memory +usage on the node (outside of containers). This reduces +[NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable). -A best practice to avoid over-provisioning is to configure the kubelet with a system reserved memory of at least 2GB to account for Windows, Docker, and Kubernetes processes. +As you deploy workloads, use resource limits (must set only limits or limits +must equal requests) on containers. This also subtracts from NodeAllocatable +and prevents the scheduler from adding more pods once a node is full. + +A best practice to avoid over-provisioning is to configure the kubelet with a +system reserved memory of at least 2GB to account for Windows, Docker, and +Kubernetes processes. ##### CPU Reservations -To account for Windows, Docker and other Kubernetes host processes it is recommended to reserve a percentage of CPU so they are able to respond to events. This value needs to be scaled based on the number of CPU cores available on the Windows node.To determine this percentage a user should identify the maximum pod density for each of their nodes and monitor the CPU usage of the system services choosing a value that meets their workload needs. -Keeping CPU usage within reasonable bounds is possible using the kubelet parameters `--kubelet-reserve` and/or `--system-reserve` to account for CPU usage on the node (outside of containers). This reduces [NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable). +To account for Windows, Docker and other Kubernetes host processes it is +recommended to reserve a percentage of CPU so they are able to respond to +events. This value needs to be scaled based on the number of CPU cores +available on the Windows node.To determine this percentage a user should +identify the maximum pod density for each of their nodes and monitor the CPU +usage of the system services choosing a value that meets their workload needs. + +Keeping CPU usage within reasonable bounds is possible using the kubelet +parameters `--kubelet-reserve` and/or `--system-reserve` to account for CPU +usage on the node (outside of containers). This reduces +[NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable). #### Feature Restrictions + * TerminationGracePeriod: not implemented * Single file mapping: to be implemented with CRI-ContainerD * Termination message: to be implemented with CRI-ContainerD * Privileged Containers: not currently supported in Windows containers * HugePages: not currently supported in Windows containers -* The existing node problem detector is Linux-only and requires privileged containers. In general, we don't expect this to be used on Windows because privileged containers are not supported -* Not all features of shared namespaces are supported (see API section for more details) +* The existing node problem detector is Linux-only and requires privileged + containers. In general, we don't expect this to be used on Windows because + privileged containers are not supported +* Not all features of shared namespaces are supported (see API section for + more details) #### Difference in behavior of flags when compared to Linux + The behavior of the following kubelet flags is different on Windows nodes as described below: -* `--kubelet-reserve`, `--system-reserve` , and `--eviction-hard` flags update Node Allocatable -* Eviction by using `--enforce-node-allocable` is not implemented -* Eviction by using `--eviction-hard` and `--eviction-soft` are not implemented -* MemoryPressure Condition is not implemented -* There are no OOM eviction actions taken by the kubelet -* Kubelet running on the windows node does not have memory restrictions. `--kubelet-reserve` and `--system-reserve` do not set limits on kubelet or processes running on the host. This means kubelet or a process on the host could cause memory resource starvation outside the node-allocatable and scheduler -* An additional flag to set the priority of the kubelet process is available on the Windows nodes called `--windows-priorityclass`. This flag allows kubelet process to get more CPU time slices when compared to other processes running on the Windows host. More information on the allowable values and their meaning is available at [Windows Priority Classes](https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities#priority-class). In order for kubelet to always have enough CPU cycles it is recommended to set this flag to `ABOVE_NORMAL_PRIORITY_CLASS` and above +* `--kubelet-reserve`, `--system-reserve` , and `--eviction-hard` flags update + Node Allocatable + +* Eviction by using `--enforce-node-allocable` is not implemented. + +* Eviction by using `--eviction-hard` and `--eviction-soft` are not implemented. + +* `MemoryPressure` Condition is not implemented. + +* There are no OOM eviction actions taken by the kubelet. + +* Kubelet running on the windows node does not have memory restrictions. + `--kubelet-reserve` and `--system-reserve` do not set limits on kubelet or + processes running on the host. This means kubelet or a process on the host + could cause memory resource starvation outside the node-allocatable and + scheduler + +* An additional flag to set the priority of the kubelet process is available + on the Windows nodes called `--windows-priorityclass`. This flag allows + kubelet process to get more CPU time slices when compared to other processes + running on the Windows host. More information on the allowable values and + their meaning is available at + [Windows Priority Classes](https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities#priority-class). + In order for kubelet to always have enough CPU cycles it is recommended to set + this flag to `ABOVE_NORMAL_PRIORITY_CLASS` and above. #### Storage -Windows has a layered filesystem driver to mount container layers and create a copy filesystem based on NTFS. All file paths in the container are resolved only within the context of that container. +Windows has a layered filesystem driver to mount container layers and create a +copy filesystem based on NTFS. All file paths in the container are resolved +only within the context of that container. -* With Docker Volume mounts can only target a directory in the container, and not an individual file. This limitation does not exist with CRI-containerD. -* Volume mounts cannot project files or directories back to the host filesystem -* Read-only filesystems are not supported because write access is always required for the Windows registry and SAM database. However, read-only volumes are supported -* Volume user-masks and permissions are not available. Because the SAM is not shared between the host & container, there's no mapping between them. All permissions are resolved within the context of the container +* With Docker Volume mounts can only target a directory in the container, and + not an individual file. This limitation does not exist with CRI-containerD. -As a result, the following storage functionality is not supported on Windows nodes +* Volume mounts cannot project files or directories back to the host + filesystem + +* Read-only filesystems are not supported because write access is always + required for the Windows registry and SAM database. However, read-only + volumes are supported + +* Volume user-masks and permissions are not available. Because the SAM is not + shared between the host & container, there's no mapping between them. All + permissions are resolved within the context of the container + +As a result, the following storage functionality is not supported on Windows nodes: * Volume subpath mounts. Only the entire volume can be mounted in a Windows container. * Subpath volume mounting for Secrets @@ -305,24 +694,61 @@ As a result, the following storage functionality is not supported on Windows nod #### Networking {#networking-limitations} -Windows Container Networking differs in some important ways from Linux networking. The [Microsoft documentation for Windows Container Networking](https://docs.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture) contains additional details and background. +Windows Container Networking differs in some important ways from Linux +networking. The [Microsoft documentation for Windows Container Networking](https://docs.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture) +contains additional details and background. -The Windows host networking service and virtual switch implement namespacing and can create virtual NICs as needed for a pod or container. However, many configurations such as DNS, routes, and metrics are stored in the Windows registry database rather than /etc/... files as they are on Linux. The Windows registry for the container is separate from that of the host, so concepts like mapping /etc/resolv.conf from the host into a container don't have the same effect they would on Linux. These must be configured using Windows APIs run in the context of that container. Therefore CNI implementations need to call the HNS instead of relying on file mappings to pass network details into the pod or container. +The Windows host networking service and virtual switch implement namespacing +and can create virtual NICs as needed for a pod or container. However, many +configurations such as DNS, routes, and metrics are stored in the Windows +registry database rather than /etc/... files as they are on Linux. The Windows +registry for the container is separate from that of the host, so concepts like +mapping /etc/resolv.conf from the host into a container don't have the same +effect they would on Linux. These must be configured using Windows APIs run in +the context of that container. Therefore CNI implementations need to call the +HNS instead of relying on file mappings to pass network details into the pod +or container. The following networking functionality is not supported on Windows nodes -* Host networking mode is not available for Windows pods -* Local NodePort access from the node itself fails (works for other nodes or external clients) -* Accessing service VIPs from nodes will be available with a future release of Windows Server -* A single service can only support up to 64 backend pods / unique destination IPs -* Overlay networking support in kube-proxy is a beta feature. In addition, it requires [KB4482887](https://support.microsoft.com/en-us/help/4482887/windows-10-update-kb4482887) to be installed on Windows Server 2019 -* Local Traffic Policy in non-DSR mode -* Windows containers connected to overlay networks do not support communicating over the IPv6 stack. There is outstanding Windows platform work required to enable this network driver to consume IPv6 addresses and subsequent Kubernetes work in kubelet, kube-proxy, and CNI plugins. -* Outbound communication using the ICMP protocol via the win-overlay, win-bridge, and Azure-CNI plugin. Specifically, the Windows data plane ([VFP](https://www.microsoft.com/en-us/research/project/azure-virtual-filtering-platform/)) doesn't support ICMP packet transpositions. This means: - * ICMP packets directed to destinations within the same network (e.g. pod to pod communication via ping) work as expected and without any limitations +* Host networking mode is not available for Windows pods. + +* Local NodePort access from the node itself fails (works for other nodes or + external clients). + +* Accessing service VIPs from nodes will be available with a future release of + Windows Server. + +* A single service can only support up to 64 backend pods / unique destination IPs. + +* Overlay networking support in kube-proxy is a beta feature. In addition, it + requires [KB4482887](https://support.microsoft.com/en-us/help/4482887/windows-10-update-kb4482887) + to be installed on Windows Server 2019. + +* Local Traffic Policy in non-DSR mode. + +* Windows containers connected to overlay networks do not support + communicating over the IPv6 stack. There is outstanding Windows platform + work required to enable this network driver to consume IPv6 addresses and + subsequent Kubernetes work in kubelet, kube-proxy, and CNI plugins. + +* Outbound communication using the ICMP protocol via the win-overlay, + win-bridge, and Azure-CNI plugin. Specifically, the Windows data plane + ([VFP](https://www.microsoft.com/en-us/research/project/azure-virtual-filtering-platform/)) + doesn't support ICMP packet transpositions. This means: + + * ICMP packets directed to destinations within the same network (e.g. pod to + pod communication via ping) work as expected and without any limitations + * TCP/UDP packets work as expected and without any limitations - * ICMP packets directed to pass through a remote network (e.g. pod to external internet communication via ping) cannot be transposed and thus will not be routed back to their source - * Since TCP/UDP packets can still be transposed, one can substitute `ping ` with `curl ` to be able to debug connectivity to the outside world. + + * ICMP packets directed to pass through a remote network (e.g. pod to + external internet communication via ping) cannot be transposed and thus + will not be routed back to their source + + * Since TCP/UDP packets can still be transposed, one can substitute + `ping ` with `curl ` to be able to debug connectivity + to the outside world. These features were added in Kubernetes v1.15: @@ -330,334 +756,585 @@ These features were added in Kubernetes v1.15: ##### CNI Plugins -* Windows reference network plugins win-bridge and win-overlay do not currently implement [CNI spec](https://github.com/containernetworking/cni/blob/master/SPEC.md) v0.4.0 due to missing "CHECK" implementation. +* Windows reference network plugins `win-bridge` and `win-overlay` do not + currently implement [CNI spec](https://github.com/containernetworking/cni/blob/master/SPEC.md) + v0.4.0 due to missing "CHECK" implementation. + * The Flannel VXLAN CNI has the following limitations on Windows: -1. Node-pod connectivity isn't possible by design. It's only possible for local pods with Flannel v0.12.0 (or higher). -2. We are restricted to using VNI 4096 and UDP port 4789. The VNI limitation is being worked on and will be overcome in a future release (open-source flannel changes). See the official [Flannel VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) backend docs for more details on these parameters. + 1. Node-pod connectivity isn't possible by design. It's only possible for + local pods with Flannel v0.12.0 (or higher). + + 1. We are restricted to using VNI 4096 and UDP port 4789. The VNI limitation + is being worked on and will be overcome in a future release (open-source + flannel changes). See the official + [Flannel VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) + backend docs for more details on these parameters. ##### DNS {#dns-limitations} -* ClusterFirstWithHostNet is not supported for DNS. Windows treats all names with a '.' as a FQDN and skips PQDN resolution -* On Linux, you have a DNS suffix list, which is used when trying to resolve PQDNs. On Windows, we only have 1 DNS suffix, which is the DNS suffix associated with that pod's namespace (mydns.svc.cluster.local for example). Windows can resolve FQDNs and services or names resolvable with only that suffix. For example, a pod spawned in the default namespace, will have the DNS suffix **default.svc.cluster.local**. On a Windows pod, you can resolve both **kubernetes.default.svc.cluster.local** and **kubernetes**, but not the in-betweens, like **kubernetes.default** or **kubernetes.default.svc**. -* On Windows, there are multiple DNS resolvers that can be used. As these come with slightly different behaviors, using the `Resolve-DNSName` utility for name query resolutions is recommended. +* ClusterFirstWithHostNet is not supported for DNS. Windows treats all names + with a '.' as a FQDN and skips PQDN resolution + +* On Linux, you have a DNS suffix list, which is used when trying to resolve + PQDNs. On Windows, we only have 1 DNS suffix, which is the DNS suffix + associated with that pod's namespace (mydns.svc.cluster.local for example). + Windows can resolve FQDNs and services or names resolvable with only that + suffix. For example, a pod spawned in the default namespace, will have the DNS + suffix `default.svc.cluster.local`. On a Windows pod, you can resolve both + `kubernetes.default.svc.cluster.local` and `kubernetes`, but not the + in-betweens, like `kubernetes.default` or `kubernetes.default.svc`. + +* On Windows, there are multiple DNS resolvers that can be used. As these come + with slightly different behaviors, using the `Resolve-DNSName` utility for + name query resolutions is recommended. ##### IPv6 -Kubernetes on Windows does not support single-stack "IPv6-only" networking. However,dual-stack IPv4/IPv6 networking for pods and nodes with single-family services is supported. See [IPv4/IPv6 dual-stack networking](#ipv4ipv6-dual-stack) for more details. +Kubernetes on Windows does not support single-stack "IPv6-only" networking. +However,dual-stack IPv4/IPv6 networking for pods and nodes with single-family +services is supported. +See [IPv4/IPv6 dual-stack networking](#ipv4ipv6-dual-stack) for more details. ##### Session affinity -Setting the maximum session sticky time for Windows services using `service.spec.sessionAffinityConfig.clientIP.timeoutSeconds` is not supported. +Setting the maximum session sticky time for Windows services using +`service.spec.sessionAffinityConfig.clientIP.timeoutSeconds` is not supported. ##### Security -Secrets are written in clear text on the node's volume (as compared to tmpfs/in-memory on linux). This means customers have to do two things +Secrets are written in clear text on the node's volume (as compared to +tmpfs/in-memory on linux). This means customers have to do two things: 1. Use file ACLs to secure the secrets file location -2. Use volume-level encryption using [BitLocker](https://docs.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-how-to-deploy-on-windows-server) +1. Use volume-level encryption using + [BitLocker](https://docs.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-how-to-deploy-on-windows-server) -[RunAsUsername](/docs/tasks/configure-pod-container/configure-runasusername) can be specified for Windows Pod's or Container's to execute the Container processes as a node-default user. This is roughly equivalent to [RunAsUser](/docs/concepts/policy/pod-security-policy/#users-and-groups). +[RunAsUsername](/docs/tasks/configure-pod-container/configure-runasusername) +can be specified for Windows Pod's or Container's to execute the Container +processes as a node-default user. This is roughly equivalent to +[RunAsUser](/docs/concepts/policy/pod-security-policy/#users-and-groups). -Linux specific pod security context privileges such as SELinux, AppArmor, Seccomp, Capabilities (POSIX Capabilities), and others are not supported. +Linux specific pod security context privileges such as SELinux, AppArmor, +Seccomp, Capabilities (POSIX Capabilities), and others are not supported. -In addition, as mentioned already, privileged containers are not supported on Windows. +In addition, as mentioned already, privileged containers are not supported on +Windows. #### API -There are no differences in how most of the Kubernetes APIs work for Windows. The subtleties around what's different come down to differences in the OS and container runtime. In certain situations, some properties on workload APIs such as Pod or Container were designed with an assumption that they are implemented on Linux, failing to run on Windows. +There are no differences in how most of the Kubernetes APIs work for Windows. +The subtleties around what's different come down to differences in the OS and +container runtime. In certain situations, some properties on workload APIs +such as Pod or Container were designed with an assumption that they are +implemented on Linux, failing to run on Windows. At a high level, these OS concepts are different: -* Identity - Linux uses userID (UID) and groupID (GID) which are represented as integer types. User and group names are not canonical - they are an alias in `/etc/groups` or `/etc/passwd` back to UID+GID. Windows uses a larger binary security identifier (SID) which is stored in the Windows Security Access Manager (SAM) database. This database is not shared between the host and containers, or between containers. -* File permissions - Windows uses an access control list based on SIDs, rather than a bitmask of permissions and UID+GID -* File paths - convention on Windows is to use `\` instead of `/`. The Go IO libraries accept both types of file path separators. However, when you're setting a path or command line that's interpreted inside a container, `\` may be needed. -* Signals - Windows interactive apps handle termination differently, and can implement one or more of these: - * A UI thread handles well-defined messages including WM_CLOSE - * Console apps handle ctrl-c or ctrl-break using a Control Handler - * Services register a Service Control Handler function that can accept SERVICE_CONTROL_STOP control codes +* Identity - Linux uses userID (UID) and groupID (GID) which are represented + as integer types. User and group names are not canonical - they are an alias + in `/etc/groups` or `/etc/passwd` back to UID+GID. Windows uses a larger + binary security identifier (SID) which is stored in the Windows Security + Access Manager (SAM) database. This database is not shared between the host + and containers, or between containers. -Exit Codes follow the same convention where 0 is success, nonzero is failure. The specific error codes may differ across Windows and Linux. However, exit codes passed from the Kubernetes components (kubelet, kube-proxy) are unchanged. +* File permissions - Windows uses an access control list based on SIDs, rather + than a bitmask of permissions and UID+GID + +* File paths - convention on Windows is to use `\` instead of `/`. The Go IO + libraries accept both types of file path separators. However, when you're + setting a path or command line that's interpreted inside a container, `\` may + be needed. + +* Signals - Windows interactive apps handle termination differently, and can + implement one or more of these: + + * A UI thread handles well-defined messages including `WM_CLOSE` + + * Console apps handle ctrl-c or ctrl-break using a Control Handler + + * Services register a Service Control Handler function that can accept + `SERVICE_CONTROL_STOP` control codes + +Exit Codes follow the same convention where 0 is success, nonzero is failure. +The specific error codes may differ across Windows and Linux. However, exit +codes passed from the Kubernetes components (kubelet, kube-proxy) are +unchanged. ##### V1.Container -* V1.Container.ResourceRequirements.limits.cpu and V1.Container.ResourceRequirements.limits.memory - Windows doesn't use hard limits for CPU allocations. Instead, a share system is used. The existing fields based on millicores are scaled into relative shares that are followed by the Windows scheduler. [see: kuberuntime/helpers_windows.go](https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/kuberuntime/helpers_windows.go), [see: resource controls in Microsoft docs](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/resource-controls) - * Huge pages are not implemented in the Windows container runtime, and are not available. They require [asserting a user privilege](https://docs.microsoft.com/en-us/windows/desktop/Memory/large-page-support) that's not configurable for containers. -* V1.Container.ResourceRequirements.requests.cpu and V1.Container.ResourceRequirements.requests.memory - Requests are subtracted from node available resources, so they can be used to avoid overprovisioning a node. However, they cannot be used to guarantee resources in an overprovisioned node. They should be applied to all containers as a best practice if the operator wants to avoid overprovisioning entirely. -* V1.Container.SecurityContext.allowPrivilegeEscalation - not possible on Windows, none of the capabilities are hooked up -* V1.Container.SecurityContext.Capabilities - POSIX capabilities are not implemented on Windows -* V1.Container.SecurityContext.privileged - Windows doesn't support privileged containers +* V1.Container.ResourceRequirements.limits.cpu and + V1.Container.ResourceRequirements.limits.memory - Windows doesn't use hard + limits for CPU allocations. Instead, a share system is used. The existing + fields based on millicores are scaled into relative shares that are followed + by the Windows scheduler. + See [kuberuntime/helpers_windows.go](https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/kuberuntime/helpers_windows.go), + and [resource controls in Microsoft docs](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/resource-controls) + + * Huge pages are not implemented in the Windows container runtime, and are + not available. They require + [asserting a user privilege](https://docs.microsoft.com/en-us/windows/desktop/Memory/large-page-support) + that's not configurable for containers. + +* V1.Container.ResourceRequirements.requests.cpu and + V1.Container.ResourceRequirements.requests.memory - Requests are subtracted + from node available resources, so they can be used to avoid overprovisioning a + node. However, they cannot be used to guarantee resources in an + overprovisioned node. They should be applied to all containers as a best + practice if the operator wants to avoid overprovisioning entirely. + +* V1.Container.SecurityContext.allowPrivilegeEscalation - not possible on + Windows, none of the capabilities are hooked up + +* V1.Container.SecurityContext.Capabilities - POSIX capabilities are not + implemented on Windows + +* V1.Container.SecurityContext.privileged - Windows doesn't support privileged + containers + * V1.Container.SecurityContext.procMount - Windows doesn't have a /proc filesystem -* V1.Container.SecurityContext.readOnlyRootFilesystem - not possible on Windows, write access is required for registry & system processes to run inside the container + +* V1.Container.SecurityContext.readOnlyRootFilesystem - not possible on + Windows, write access is required for registry & system processes to run + inside the container + * V1.Container.SecurityContext.runAsGroup - not possible on Windows, no GID support -* V1.Container.SecurityContext.runAsNonRoot - Windows does not have a root user. The closest equivalent is ContainerAdministrator which is an identity that doesn't exist on the node. -* V1.Container.SecurityContext.runAsUser - not possible on Windows, no UID support as int. + +* V1.Container.SecurityContext.runAsNonRoot - Windows does not have a root + user. The closest equivalent is ContainerAdministrator which is an identity + that doesn't exist on the node. + +* V1.Container.SecurityContext.runAsUser - not possible on Windows, no UID + support as int. + * V1.Container.SecurityContext.seLinuxOptions - not possible on Windows, no SELinux -* V1.Container.terminationMessagePath - this has some limitations in that Windows doesn't support mapping single files. The default value is /dev/termination-log, which does work because it does not exist on Windows by default. + +* V1.Container.terminationMessagePath - this has some limitations in that + Windows doesn't support mapping single files. The default value is + `/dev/termination-log`, which does work because it does not exist on Windows by + default. ##### V1.Pod * V1.Pod.hostIPC, v1.pod.hostpid - host namespace sharing is not possible on Windows + * V1.Pod.hostNetwork - There is no Windows OS support to share the host network -* V1.Pod.dnsPolicy - ClusterFirstWithHostNet - is not supported because Host Networking is not supported on Windows. + +* V1.Pod.dnsPolicy - `ClusterFirstWithHostNet` is not supported because Host + Networking is not supported on Windows. + * V1.Pod.podSecurityContext - see V1.PodSecurityContext below -* V1.Pod.shareProcessNamespace - this is a beta feature, and depends on Linux namespaces which are not implemented on Windows. Windows cannot share process namespaces or the container's root filesystem. Only the network can be shared. -* V1.Pod.terminationGracePeriodSeconds - this is not fully implemented in Docker on Windows, see: [reference](https://github.com/moby/moby/issues/25982). The behavior today is that the ENTRYPOINT process is sent CTRL_SHUTDOWN_EVENT, then Windows waits 5 seconds by default, and finally shuts down all processes using the normal Windows shutdown behavior. The 5 second default is actually in the Windows registry [inside the container](https://github.com/moby/moby/issues/25982#issuecomment-426441183), so it can be overridden when the container is built. -* V1.Pod.volumeDevices - this is a beta feature, and is not implemented on Windows. Windows cannot attach raw block devices to pods. -* V1.Pod.volumes - EmptyDir, Secret, ConfigMap, HostPath - all work and have tests in TestGrid - * V1.emptyDirVolumeSource - the Node default medium is disk on Windows. Memory is not supported, as Windows does not have a built-in RAM disk. + +* V1.Pod.shareProcessNamespace - this is a beta feature, and depends on Linux + namespaces which are not implemented on Windows. Windows cannot share + process namespaces or the container's root filesystem. Only the network can be + shared. + +* V1.Pod.terminationGracePeriodSeconds - this is not fully implemented in + Docker on Windows, see: + [reference](https://github.com/moby/moby/issues/25982). The behavior today is + that the `ENTRYPOINT` process is sent `CTRL_SHUTDOWN_EVENT`, then Windows waits 5 + seconds by default, and finally shuts down all processes using the normal + Windows shutdown behavior. The 5 second default is actually in the Windows + registry [inside the container](https://github.com/moby/moby/issues/25982#issuecomment-426441183), + so it can be overridden when the container is built. + +* V1.Pod.volumeDevices - this is a beta feature, and is not implemented on + Windows. Windows cannot attach raw block devices to pods. + +* V1.Pod.volumes - EmptyDir, Secret, ConfigMap, HostPath - all work and have + tests in TestGrid + + * V1.emptyDirVolumeSource - the Node default medium is disk on Windows. + Memory is not supported, as Windows does not have a built-in RAM disk. + * V1.VolumeMount.mountPropagation - mount propagation is not supported on Windows. ##### V1.PodSecurityContext -None of the PodSecurityContext fields work on Windows. They're listed here for reference. +None of the PodSecurityContext fields work on Windows. They're listed here for +reference. * V1.PodSecurityContext.SELinuxOptions - SELinux is not available on Windows + * V1.PodSecurityContext.RunAsUser - provides a UID, not available on Windows + * V1.PodSecurityContext.RunAsGroup - provides a GID, not available on Windows -* V1.PodSecurityContext.RunAsNonRoot - Windows does not have a root user. The closest equivalent is ContainerAdministrator which is an identity that doesn't exist on the node. + +* V1.PodSecurityContext.RunAsNonRoot - Windows does not have a root user. The + closest equivalent is ContainerAdministrator which is an identity that + doesn't exist on the node. + * V1.PodSecurityContext.SupplementalGroups - provides GID, not available on Windows -* V1.PodSecurityContext.Sysctls - these are part of the Linux sysctl interface. There's no equivalent on Windows. + +* V1.PodSecurityContext.Sysctls - these are part of the Linux sysctl + interface. There's no equivalent on Windows. #### Operating System Version Restrictions -Windows has strict compatibility rules, where the host OS version must match the container base image OS version. Only Windows containers with a container operating system of Windows Server 2019 are supported. Hyper-V isolation of containers, enabling some backward compatibility of Windows container image versions, is planned for a future release. +Windows has strict compatibility rules, where the host OS version must match +the container base image OS version. Only Windows containers with a container +operating system of Windows Server 2019 are supported. Hyper-V isolation of +containers, enabling some backward compatibility of Windows container image +versions, is planned for a future release. ## Getting Help and Troubleshooting {#troubleshooting} -Your main source of help for troubleshooting your Kubernetes cluster should start with this [section](/docs/tasks/debug-application-cluster/troubleshooting/). Some additional, Windows-specific troubleshooting help is included in this section. Logs are an important element of troubleshooting issues in Kubernetes. Make sure to include them any time you seek troubleshooting assistance from other contributors. Follow the instructions in the SIG-Windows [contributing guide on gathering logs](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs). +Your main source of help for troubleshooting your Kubernetes cluster should +start with this +[section](/docs/tasks/debug-application-cluster/troubleshooting/). Some +additional, Windows-specific troubleshooting help is included in this section. +Logs are an important element of troubleshooting issues in Kubernetes. Make +sure to include them any time you seek troubleshooting assistance from other +contributors. Follow the instructions in the SIG-Windows +[contributing guide on gathering logs](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs). -1. How do I know start.ps1 completed successfully? +* How do I know start.ps1 completed successfully? - You should see kubelet, kube-proxy, and (if you chose Flannel as your networking solution) flanneld host-agent processes running on your node, with running logs being displayed in separate PowerShell windows. In addition to this, your Windows node should be listed as "Ready" in your Kubernetes cluster. + You should see kubelet, kube-proxy, and (if you chose Flannel as your + networking solution) flanneld host-agent processes running on your node, with + running logs being displayed in separate PowerShell windows. In addition to + this, your Windows node should be listed as "Ready" in your Kubernetes + cluster. -1. Can I configure the Kubernetes node processes to run in the background as services? +* Can I configure the Kubernetes node processes to run in the background as services? - Kubelet and kube-proxy are already configured to run as native Windows Services, offering resiliency by re-starting the services automatically in the event of failure (for example a process crash). You have two options for configuring these node components as services. + Kubelet and kube-proxy are already configured to run as native Windows + Services, offering resiliency by re-starting the services automatically in the + event of failure (for example a process crash). You have two options for + configuring these node components as services. - 1. As native Windows Services + * As native Windows Services - Kubelet & kube-proxy can be run as native Windows Services using `sc.exe`. - - ```powershell - # Create the services for kubelet and kube-proxy in two separate commands - sc.exe create binPath= " --service " - - # Please note that if the arguments contain spaces, they must be escaped. - sc.exe create kubelet binPath= "C:\kubelet.exe --service --hostname-override 'minion' " - - # Start the services - Start-Service kubelet - Start-Service kube-proxy - - # Stop the service - Stop-Service kubelet (-Force) - Stop-Service kube-proxy (-Force) - - # Query the service status - Get-Service kubelet - Get-Service kube-proxy - ``` - - 1. Using nssm.exe - - You can also always use alternative service managers like [nssm.exe](https://nssm.cc/) to run these processes (flanneld, kubelet & kube-proxy) in the background for you. You can use this [sample script](https://github.com/Microsoft/SDN/tree/master/Kubernetes/flannel/register-svc.ps1), leveraging nssm.exe to register kubelet, kube-proxy, and flanneld.exe to run as Windows services in the background. - - ```powershell - register-svc.ps1 -NetworkMode -ManagementIP -ClusterCIDR -KubeDnsServiceIP -LogDir - - # NetworkMode = The network mode l2bridge (flannel host-gw, also the default value) or overlay (flannel vxlan) chosen as a network solution - # ManagementIP = The IP address assigned to the Windows node. You can use ipconfig to find this - # ClusterCIDR = The cluster subnet range. (Default value 10.244.0.0/16) - # KubeDnsServiceIP = The Kubernetes DNS service IP (Default value 10.96.0.10) - # LogDir = The directory where kubelet and kube-proxy logs are redirected into their respective output files (Default value C:\k) - ``` - - If the above referenced script is not suitable, you can manually configure nssm.exe using the following examples. - - ```powershell - # Register flanneld.exe - nssm install flanneld C:\flannel\flanneld.exe - nssm set flanneld AppParameters --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1 - nssm set flanneld AppEnvironmentExtra NODE_NAME= - nssm set flanneld AppDirectory C:\flannel - nssm start flanneld - - # Register kubelet.exe - # Microsoft releases the pause infrastructure container at mcr.microsoft.com/oss/kubernetes/pause:1.4.1 - nssm install kubelet C:\k\kubelet.exe - nssm set kubelet AppParameters --hostname-override= --v=6 --pod-infra-container-image=mcr.microsoft.com/oss/kubernetes/pause:1.4.1 --resolv-conf="" --allow-privileged=true --enable-debugging-handlers --cluster-dns= --cluster-domain=cluster.local --kubeconfig=c:\k\config --hairpin-mode=promiscuous-bridge --image-pull-progress-deadline=20m --cgroups-per-qos=false --log-dir= --logtostderr=false --enforce-node-allocatable="" --network-plugin=cni --cni-bin-dir=c:\k\cni --cni-conf-dir=c:\k\cni\config - nssm set kubelet AppDirectory C:\k - nssm start kubelet - - # Register kube-proxy.exe (l2bridge / host-gw) - nssm install kube-proxy C:\k\kube-proxy.exe - nssm set kube-proxy AppDirectory c:\k - nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --hostname-override=--kubeconfig=c:\k\config --enable-dsr=false --log-dir= --logtostderr=false - nssm.exe set kube-proxy AppEnvironmentExtra KUBE_NETWORK=cbr0 - nssm set kube-proxy DependOnService kubelet - nssm start kube-proxy - - # Register kube-proxy.exe (overlay / vxlan) - nssm install kube-proxy C:\k\kube-proxy.exe - nssm set kube-proxy AppDirectory c:\k - nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --feature-gates="WinOverlay=true" --hostname-override= --kubeconfig=c:\k\config --network-name=vxlan0 --source-vip= --enable-dsr=false --log-dir= --logtostderr=false - nssm set kube-proxy DependOnService kubelet - nssm start kube-proxy - ``` - - For initial troubleshooting, you can use the following flags in [nssm.exe](https://nssm.cc/) to redirect stdout and stderr to a output file: - - ```powershell - nssm set AppStdout C:\k\mysvc.log - nssm set AppStderr C:\k\mysvc.log - ``` - - For additional details, see official [nssm usage](https://nssm.cc/usage) docs. - -1. My Windows Pods do not have network connectivity - - If you are using virtual machines, ensure that MAC spoofing is enabled on all the VM network adapter(s). - -1. My Windows Pods cannot ping external resources - - Windows Pods do not have outbound rules programmed for the ICMP protocol today. However, TCP/UDP is supported. When trying to demonstrate connectivity to resources outside of the cluster, please substitute `ping ` with corresponding `curl ` commands. - - If you are still facing problems, most likely your network configuration in [cni.conf](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf) deserves some extra attention. You can always edit this static file. The configuration update will apply to any newly created Kubernetes resources. - - One of the Kubernetes networking requirements (see [Kubernetes model](/docs/concepts/cluster-administration/networking/)) is for cluster communication to occur without NAT internally. To honor this requirement, there is an [ExceptionList](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf#L20) for all the communication where we do not want outbound NAT to occur. However, this also means that you need to exclude the external IP you are trying to query from the ExceptionList. Only then will the traffic originating from your Windows pods be SNAT'ed correctly to receive a response from the outside world. In this regard, your ExceptionList in `cni.conf` should look as follows: - - ```conf - "ExceptionList": [ - "10.244.0.0/16", # Cluster subnet - "10.96.0.0/12", # Service subnet - "10.127.130.0/24" # Management (host) subnet - ] - ``` - -1. My Windows node cannot access NodePort service - - Local NodePort access from the node itself fails. This is a known limitation. NodePort access works from other nodes or external clients. - -1. vNICs and HNS endpoints of containers are being deleted - - This issue can be caused when the `hostname-override` parameter is not passed to [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/). To resolve it, users need to pass the hostname to kube-proxy as follows: + Kubelet & kube-proxy can be run as native Windows Services using `sc.exe`. ```powershell - C:\k\kube-proxy.exe --hostname-override=$(hostname) + # Create the services for kubelet and kube-proxy in two separate commands + sc.exe create binPath= " --service " + + # Please note that if the arguments contain spaces, they must be escaped. + sc.exe create kubelet binPath= "C:\kubelet.exe --service --hostname-override 'minion' " + + # Start the services + Start-Service kubelet + Start-Service kube-proxy + + # Stop the service + Stop-Service kubelet (-Force) + Stop-Service kube-proxy (-Force) + + # Query the service status + Get-Service kubelet + Get-Service kube-proxy ``` -1. With flannel my nodes are having issues after rejoining a cluster + * Using nssm.exe - Whenever a previously deleted node is being re-joined to the cluster, flannelD tries to assign a new pod subnet to the node. Users should remove the old pod subnet configuration files in the following paths: + You can also always use alternative service managers like + [`nssm.exe`](https://nssm.cc/) to run these processes (flanneld, kubelet & + kube-proxy) in the background for you. You can use this + [sample script](https://github.com/Microsoft/SDN/tree/master/Kubernetes/flannel/register-svc.ps1), + leveraging `nssm.exe` to register kubelet, kube-proxy, and `flanneld.exe` + to run as Windows services in the background. ```powershell - Remove-Item C:\k\SourceVip.json - Remove-Item C:\k\SourceVipRequest.json + register-svc.ps1 -NetworkMode -ManagementIP -ClusterCIDR -KubeDnsServiceIP -LogDir ``` -1. After launching `start.ps1`, flanneld is stuck in "Waiting for the Network to be created" + The parameters are explained below: - There are numerous reports of this [issue](https://github.com/coreos/flannel/issues/1066); most likely it is a timing issue for when the management IP of the flannel network is set. A workaround is to relaunch start.ps1 or relaunch it manually as follows: + - `NetworkMode`: The network mode l2bridge (flannel host-gw, also the + default value) or overlay (flannel vxlan) chosen as a network solution + - `ManagementIP`: The IP address assigned to the Windows node. You can use + `ipconfig` to find this. + - `ClusterCIDR`: The cluster subnet range. (Default: 10.244.0.0/16) + - `KubeDnsServiceIP`: The Kubernetes DNS service IP. (Default: 10.96.0.10) + - `LogDir`: The directory where kubelet and kube-proxy logs are redirected + into their respective output files. (Default value C:\k) + + If the above referenced script is not suitable, you can manually configure + `nssm.exe` using the following examples. + + Register flanneld.exe: ```powershell - PS C:> [Environment]::SetEnvironmentVariable("NODE_NAME", "") - PS C:> C:\flannel\flanneld.exe --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1 + nssm install flanneld C:\flannel\flanneld.exe + nssm set flanneld AppParameters --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1 + nssm set flanneld AppEnvironmentExtra NODE_NAME= + nssm set flanneld AppDirectory C:\flannel + nssm start flanneld ``` -1. My Windows Pods cannot launch because of missing `/run/flannel/subnet.env` - - This indicates that Flannel didn't launch correctly. You can either try to restart flanneld.exe or you can copy the files over manually from `/run/flannel/subnet.env` on the Kubernetes master to `C:\run\flannel\subnet.env` on the Windows worker node and modify the `FLANNEL_SUBNET` row to a different number. For example, if node subnet 10.244.4.1/24 is desired: - - ```env - FLANNEL_NETWORK=10.244.0.0/16 - FLANNEL_SUBNET=10.244.4.1/24 - FLANNEL_MTU=1500 - FLANNEL_IPMASQ=true - ``` - -1. My Windows node cannot access my services using the service IP - - This is a known limitation of the current networking stack on Windows. Windows Pods are able to access the service IP however. - -1. No network adapter is found when starting kubelet - - The Windows networking stack needs a virtual adapter for Kubernetes networking to work. If the following commands return no results (in an admin shell), virtual network creation — a necessary prerequisite for Kubelet to work — has failed: + Register kubelet.exe: ```powershell - Get-HnsNetwork | ? Name -ieq "cbr0" - Get-NetAdapter | ? Name -Like "vEthernet (Ethernet*" + # Microsoft releases the pause infrastructure container at mcr.microsoft.com/oss/kubernetes/pause:3.4.1 + nssm install kubelet C:\k\kubelet.exe + nssm set kubelet AppParameters --hostname-override= --v=6 --pod-infra-container-image=mcr.microsoft.com/oss/kubernetes/pause:3.4.1 --resolv-conf="" --allow-privileged=true --enable-debugging-handlers --cluster-dns= --cluster-domain=cluster.local --kubeconfig=c:\k\config --hairpin-mode=promiscuous-bridge --image-pull-progress-deadline=20m --cgroups-per-qos=false --log-dir= --logtostderr=false --enforce-node-allocatable="" --network-plugin=cni --cni-bin-dir=c:\k\cni --cni-conf-dir=c:\k\cni\config + nssm set kubelet AppDirectory C:\k + nssm start kubelet ``` - Often it is worthwhile to modify the [InterfaceName](https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/start.ps1#L7) parameter of the start.ps1 script, in cases where the host's network adapter isn't "Ethernet". Otherwise, consult the output of the `start-kubelet.ps1` script to see if there are errors during virtual network creation. + Register kube-proxy.exe (l2bridge / host-gw): -1. My Pods are stuck at "Container Creating" or restarting over and over - - Check that your pause image is compatible with your OS version. The [instructions](https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/deploying-resources) assume that both the OS and the containers are version 1803. If you have a later version of Windows, such as an Insider build, you need to adjust the images accordingly. Please refer to the Microsoft's [Docker repository](https://hub.docker.com/u/microsoft/) for images. Regardless, both the pause image Dockerfile and the sample service expect the image to be tagged as :latest. - -1. DNS resolution is not properly working - - Check the DNS limitations for Windows in this [section](#dns-limitations). - -1. `kubectl port-forward` fails with "unable to do port forwarding: wincat not found" - - This was implemented in Kubernetes 1.15 by including wincat.exe in the pause infrastructure container `mcr.microsoft.com/oss/kubernetes/pause:1.4.1`. Be sure to use these versions or newer ones. - If you would like to build your own pause infrastructure container be sure to include [wincat](https://github.com/kubernetes-sigs/sig-windows-tools/tree/master/cmd/wincat). - -1. My Kubernetes installation is failing because my Windows Server node is behind a proxy - - If you are behind a proxy, the following PowerShell environment variables must be defined: - - ```PowerShell - [Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.example.com:80/", [EnvironmentVariableTarget]::Machine) - [Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://proxy.example.com:443/", [EnvironmentVariableTarget]::Machine) + ```powershell + nssm install kube-proxy C:\k\kube-proxy.exe + nssm set kube-proxy AppDirectory c:\k + nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --hostname-override=--kubeconfig=c:\k\config --enable-dsr=false --log-dir= --logtostderr=false + nssm.exe set kube-proxy AppEnvironmentExtra KUBE_NETWORK=cbr0 + nssm set kube-proxy DependOnService kubelet + nssm start kube-proxy ``` -1. What is a `pause` container? + Register kube-proxy.exe (overlay / vxlan): - In a Kubernetes Pod, an infrastructure or "pause" container is first created to host the container endpoint. Containers that belong to the same pod, including infrastructure and worker containers, share a common network namespace and endpoint (same IP and port space). Pause containers are needed to accommodate worker containers crashing or restarting without losing any of the networking configuration. + ```powershell + nssm install kube-proxy C:\k\kube-proxy.exe + nssm set kube-proxy AppDirectory c:\k + nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --feature-gates="WinOverlay=true" --hostname-override= --kubeconfig=c:\k\config --network-name=vxlan0 --source-vip= --enable-dsr=false --log-dir= --logtostderr=false + nssm set kube-proxy DependOnService kubelet + nssm start kube-proxy + ``` - The "pause" (infrastructure) image is hosted on Microsoft Container Registry (MCR). You can access it using `mcr.microsoft.com/oss/kubernetes/pause:1.4.1`. For more details, see the [DOCKERFILE](https://github.com/kubernetes-sigs/windows-testing/blob/master/images/pause/Dockerfile). + For initial troubleshooting, you can use the following flags in + [`nssm.exe`](https://nssm.cc/) to redirect stdout and stderr to a output file: + + ```powershell + nssm set AppStdout C:\k\mysvc.log + nssm set AppStderr C:\k\mysvc.log + ``` + + For additional details, see official [nssm usage](https://nssm.cc/usage) docs. + +* My Windows Pods do not have network connectivity + + If you are using virtual machines, ensure that MAC spoofing is enabled on + all the VM network adapter(s). + +* My Windows Pods cannot ping external resources + + Windows Pods do not have outbound rules programmed for the ICMP protocol + today. However, TCP/UDP is supported. When trying to demonstrate connectivity + to resources outside of the cluster, please substitute `ping ` with + corresponding `curl ` commands. + + If you are still facing problems, most likely your network configuration in + [cni.conf](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf) + deserves some extra attention. You can always edit this static file. The + configuration update will apply to any newly created Kubernetes resources. + + One of the Kubernetes networking requirements (see + [Kubernetes network model](/docs/concepts/cluster-administration/networking/)) + is for cluster communication to occur without NAT internally. To honor this + requirement, there is an + [ExceptionList](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf#L20) + for all the communication where we do not want outbound NAT to occur. However, + this also means that you need to exclude the external IP you are trying to + query from the ExceptionList. Only then will the traffic originating from your + Windows pods be SNAT'ed correctly to receive a response from the outside + world. In this regard, your ExceptionList in `cni.conf` should look as + follows: + + ```conf + "ExceptionList": [ + "10.244.0.0/16", # Cluster subnet + "10.96.0.0/12", # Service subnet + "10.127.130.0/24" # Management (host) subnet + ] + ``` + +* My Windows node cannot access NodePort service + + Local NodePort access from the node itself fails. This is a known + limitation. NodePort access works from other nodes or external clients. + +* vNICs and HNS endpoints of containers are being deleted + + This issue can be caused when the `hostname-override` parameter is not + passed to + [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/). + To resolve it, users need to pass the hostname to kube-proxy as follows: + + ```powershell + C:\k\kube-proxy.exe --hostname-override=$(hostname) + ``` + +* With flannel my nodes are having issues after rejoining a cluster + + Whenever a previously deleted node is being re-joined to the cluster, + flannelD tries to assign a new pod subnet to the node. Users should remove the + old pod subnet configuration files in the following paths: + + ```powershell + Remove-Item C:\k\SourceVip.json + Remove-Item C:\k\SourceVipRequest.json + ``` + +* After launching `start.ps1`, flanneld is stuck in "Waiting for the Network + to be created" + + There are numerous reports of this + [issue](https://github.com/coreos/flannel/issues/1066); most likely it is a + timing issue for when the management IP of the flannel network is set. A + workaround is to relaunch start.ps1 or relaunch it manually as follows: + + ```powershell + PS C:> [Environment]::SetEnvironmentVariable("NODE_NAME", "") + PS C:> C:\flannel\flanneld.exe --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1 + ``` + +* My Windows Pods cannot launch because of missing `/run/flannel/subnet.env` + + This indicates that Flannel didn't launch correctly. You can either try to + restart flanneld.exe or you can copy the files over manually from + `/run/flannel/subnet.env` on the Kubernetes master to + `C:\run\flannel\subnet.env` on the Windows worker node and modify the + `FLANNEL_SUBNET` row to a different number. For example, if node subnet + 10.244.4.1/24 is desired: + + ```none + FLANNEL_NETWORK=10.244.0.0/16 + FLANNEL_SUBNET=10.244.4.1/24 + FLANNEL_MTU=1500 + FLANNEL_IPMASQ=true + ``` + +* My Windows node cannot access my services using the service IP + + This is a known limitation of the current networking stack on Windows. + Windows Pods are able to access the service IP however. + +* No network adapter is found when starting kubelet + + The Windows networking stack needs a virtual adapter for Kubernetes + networking to work. If the following commands return no results (in an admin + shell), virtual network creation — a necessary prerequisite for Kubelet to + work — has failed: + + ```powershell + Get-HnsNetwork | ? Name -ieq "cbr0" + Get-NetAdapter | ? Name -Like "vEthernet (Ethernet*" + ``` + + Often it is worthwhile to modify the + [InterfaceName](https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/start.ps1#L7) + parameter of the start.ps1 script, in cases where the host's network adapter + isn't "Ethernet". Otherwise, consult the output of the `start-kubelet.ps1` + script to see if there are errors during virtual network creation. + +* My Pods are stuck at "Container Creating" or restarting over and over + + Check that your pause image is compatible with your OS version. The + [instructions](https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/deploying-resources) + assume that both the OS and the containers are version 1803. If you have a + later version of Windows, such as an Insider build, you need to adjust the + images accordingly. Please refer to the Microsoft's + [Docker repository](https://hub.docker.com/u/microsoft/) for images. + Regardless, both the pause image Dockerfile and the sample service expect + the image to be tagged as :latest. + +* DNS resolution is not properly working + + Check the [DNS limitations for Windows](#dns-limitations). + +* `kubectl port-forward` fails with "unable to do port forwarding: wincat not found" + + This was implemented in Kubernetes 1.15 by including wincat.exe in the + pause infrastructure container `mcr.microsoft.com/oss/kubernetes/pause:3.4.1`. + Be sure to use these versions or newer ones. If you would like to build your + own pause infrastructure container be sure to include + [wincat](https://github.com/kubernetes-sigs/sig-windows-tools/tree/master/cmd/wincat). + +* My Kubernetes installation is failing because my Windows Server node is + behind a proxy + + If you are behind a proxy, the following PowerShell environment variables + must be defined: + + ```PowerShell + [Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.example.com:80/", [EnvironmentVariableTarget]::Machine) + [Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://proxy.example.com:443/", [EnvironmentVariableTarget]::Machine) + ``` + +* What is a `pause` container? + + In a Kubernetes Pod, an infrastructure or "pause" container is first created + to host the container endpoint. Containers that belong to the same pod, + including infrastructure and worker containers, share a common network + namespace and endpoint (same IP and port space). Pause containers are needed + to accommodate worker containers crashing or restarting without losing any of + the networking configuration. + + The "pause" (infrastructure) image is hosted on Microsoft Container Registry + (MCR). You can access it using `mcr.microsoft.com/oss/kubernetes/pause:3.4.1`. + For more details, see the + [DOCKERFILE](https://github.com/kubernetes-sigs/windows-testing/blob/master/images/pause/Dockerfile). ### Further investigation -If these steps don't resolve your problem, you can get help running Windows containers on Windows nodes in Kubernetes through: +If these steps don't resolve your problem, you can get help running Windows +containers on Windows nodes in Kubernetes through: * StackOverflow [Windows Server Container](https://stackoverflow.com/questions/tagged/windows-server-container) topic + * Kubernetes Official Forum [discuss.kubernetes.io](https://discuss.kubernetes.io/) + * Kubernetes Slack [#SIG-Windows Channel](https://kubernetes.slack.com/messages/sig-windows) ## Reporting Issues and Feature Requests -If you have what looks like a bug, or you would like to make a feature request, please use the [GitHub issue tracking system](https://github.com/kubernetes/kubernetes/issues). You can open issues on [GitHub](https://github.com/kubernetes/kubernetes/issues/new/choose) and assign them to SIG-Windows. You should first search the list of issues in case it was reported previously and comment with your experience on the issue and add additional logs. SIG-Windows Slack is also a great avenue to get some initial support and troubleshooting ideas prior to creating a ticket. +If you have what looks like a bug, or you would like to make a feature +request, please use the +[GitHub issue tracking system](https://github.com/kubernetes/kubernetes/issues). +You can open issues on +[GitHub](https://github.com/kubernetes/kubernetes/issues/new/choose) and +assign them to SIG-Windows. You should first search the list of issues in case +it was reported previously and comment with your experience on the issue and +add additional logs. SIG-Windows Slack is also a great avenue to get some +initial support and troubleshooting ideas prior to creating a ticket. -If filing a bug, please include detailed information about how to reproduce the problem, such as: +If filing a bug, please include detailed information about how to reproduce +the problem, such as: * Kubernetes version: kubectl version -* Environment details: Cloud provider, OS distro, networking choice and configuration, and Docker version +* Environment details: Cloud provider, OS distro, networking choice and + configuration, and Docker version * Detailed steps to reproduce the problem * [Relevant logs](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs) -* Tag the issue sig/windows by commenting on the issue with `/sig windows` to bring it to a SIG-Windows member's attention +* Tag the issue sig/windows by commenting on the issue with `/sig windows` to + bring it to a SIG-Windows member's attention ## {{% heading "whatsnext" %}} -We have a lot of features in our roadmap. An abbreviated high level list is included below, but we encourage you to view our [roadmap project](https://github.com/orgs/kubernetes/projects/8) and help us make Windows support better by [contributing](https://github.com/kubernetes/community/blob/master/sig-windows/). +We have a lot of features in our roadmap. An abbreviated high level list is +included below, but we encourage you to view our +[roadmap project](https://github.com/orgs/kubernetes/projects/8) and help us make +Windows support better by +[contributing](https://github.com/kubernetes/community/blob/master/sig-windows/). ### Hyper-V isolation -Hyper-V isolation is required to enable the following use cases for Windows containers in Kubernetes: +Hyper-V isolation is required to enable the following use cases for Windows +containers in Kubernetes: * Hypervisor-based isolation between pods for additional security -* Backwards compatibility allowing a node to run a newer Windows Server version without requiring containers to be rebuilt + +* Backwards compatibility allowing a node to run a newer Windows Server + version without requiring containers to be rebuilt + * Specific CPU/NUMA settings for a pod + * Memory isolation and reservations -Hyper-V isolation support will be added in a later release and will require CRI-Containerd. +Hyper-V isolation support will be added in a later release and will require +CRI-Containerd. ### Deployment with kubeadm and cluster API Kubeadm is becoming the de facto standard for users to deploy a Kubernetes cluster. Windows node support in kubeadm is currently a work-in-progress but a -guide is available [here](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/). -We are also making investments in cluster API to ensure Windows nodes are -properly provisioned. +guide is available +[here](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/). We are +also making investments in cluster API to ensure Windows nodes are properly +provisioned. + diff --git a/content/en/docs/setup/release/_index.md b/content/en/docs/setup/release/_index.md deleted file mode 100755 index e6d5944331..0000000000 --- a/content/en/docs/setup/release/_index.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "Release notes and version skew" -weight: 10 ---- diff --git a/content/en/docs/setup/release/notes.md b/content/en/docs/setup/release/notes.md deleted file mode 100644 index 2741de7e50..0000000000 --- a/content/en/docs/setup/release/notes.md +++ /dev/null @@ -1,1626 +0,0 @@ ---- -title: v1.21 Release Notes -weight: 10 -card: - name: release-notes - weight: 20 - anchors: - - anchor: "#" - title: Current Release Notes - - anchor: "#urgent-upgrade-notes" - title: Urgent Upgrade Notes ---- - - - -# v1.21.0 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.21.0 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes.tar.gz) | `19bb76a3fa5ce4b9f043b2a3a77c32365ab1fcb902d8dd6678427fb8be8f49f64a5a03dc46aaef9c7dadee05501cf83412eda46f0edacbb8fc1ed0bf5fb79142` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-src.tar.gz) | `f942e6d6c10007a6e9ce21e94df597015ae646a7bc3e515caf1a3b79f1354efb9aff59c40f2553a8e3d43fe4a01742241f5af18b69666244906ed11a22e3bc49` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-darwin-amd64.tar.gz) | `be9d1440e418e5253fb8a3d8aba705ca8160746a9bd17325ad626a986b6da9f733af864155a651a32b7bca94b533b8d596005ddbe5248bdeea85db47a1b957ed` -[kubernetes-client-darwin-arm64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-darwin-arm64.tar.gz) | `eed0ddc81d104bb2d41ace13f737c490423d5df4ebddc7376e45c18ed66af35933c9376b912c1c3da105945b04056f6ca0870c156bee8a307cf4189ca5eb1dd1` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-linux-386.tar.gz) | `8a2f30c4434199762f2a96141dab4241c1cce2711bea9ea39cc63c2c5e7d31719ed7f076efac1931604e3a94578d3bbf0cfa454965708c96f3cfb91789868746` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-linux-amd64.tar.gz) | `cd3cfa645fa31de3716f1f63506e31b73d2aa8d37bb558bb3b3e8c151f35b3d74d44e03cbd05be67e380f9a5d015aba460222afdac6677815cd99a85c2325cf0` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-linux-arm.tar.gz) | `936042aa11cea0f6dfd2c30fc5dbe655420b34799bede036b1299a92d6831f589ca10290b73b9c9741560b603ae31e450ad024e273f2b4df5354bfac272691d8` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-linux-arm64.tar.gz) | `42beb75364d7bf4bf526804b8a35bd0ab3e124b712e9d1f45c1b914e6be0166619b30695feb24b3eecef134991dacb9ab3597e788bd9e45cf35addddf20dd7f6` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-linux-ppc64le.tar.gz) | `4baba2ed7046b28370eccc22e2378ae79e3ce58220d6f4f1b6791e8233bec8379e30200bb20b971456b83f2b791ea166fdfcf1ea56908bc1eea03590c0eda468` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-linux-s390x.tar.gz) | `37fa0c4d703aef09ce68c10ef3e7362b0313c8f251ce38eea579cd18fae4023d3d2b70e0f31577cabe6958ab9cfc30e98d25a7c64e69048b423057c3cf728339` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-windows-386.tar.gz) | `6900db36c1e3340edfd6dfd8d720575a904c932d39a8a7fa36401595e971a0235bd42111dbcc1cbb77e7374e47f1380a68c637997c18f96a0d9cdc9f3714c4c9` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-client-windows-amd64.tar.gz) | `90de67f6f79fc63bcfdf35066e3d84501cc85433265ffad36fd1a7a428a31b446249f0644a1e97495ea8b2a08e6944df6ef30363003750339edaa2aceffe937c` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-server-linux-amd64.tar.gz) | `3941dcc2309ac19ec185603a79f5a086d8a198f98c04efa23f15a177e5e1f34946ea9392ba9f5d24d0d727839438f067fef1001fc6e88b27b8b01e35bbd962ca` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-server-linux-arm.tar.gz) | `6507abf6c2ec2b336901dc23269f6c577ec0049b8bad3c9dd6ad63f21aa10f09bfbbfa6e064c2466d250411d3e10f8672791a9e10942e38de7bfbaf7a8bcc9da` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-server-linux-arm64.tar.gz) | `5abe76f867ca6865344e957bf166b81766c049ec4eb183a8a5580c22a7f8474db1edf90fd901a5833e56128b6825811653a1d27f72fd34ce5b1287a8c10da05c` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-server-linux-ppc64le.tar.gz) | `62507b182ca25396a285d91241536860e58f54fac937e97cbdf91948c83bb41be97d33277400489bf50e85164d560205540b76e94e5d519892312bdc63df1067` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-server-linux-s390x.tar.gz) | `04f2a1f7d1388e4a7d7d9f597f872a3da36f26839cfed16aad6df07021c03f4dca1df06b19cfda56df09d1c2d9a13ebd0af40ca1b9b6aecfaf427ab7712d88f3` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-node-linux-amd64.tar.gz) | `c1831c708109c31b3878e5a9327ea4b9e546504d0b6b00f3d43db78b5dd7d5114d32ac24a9a505f9cadbe61521f0419933348d2cd309ed8cfe3987d9ca8a7e2c` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-node-linux-arm.tar.gz) | `b68dd5bcfc7f9ce2781952df40c8c3a64c29701beff6ac22f042d6f31d4de220e9200b7e8272ddf608114327770acdaf3cb9a34a0a5206e784bda717ea080e0f` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-node-linux-arm64.tar.gz) | `7fa84fc500c28774ed25ca34b6f7b208a2bea29d6e8379f84b9f57bd024aa8fe574418cee7ee26edd55310716d43d65ae7b9cbe11e40c995fe2eac7f66bdb423` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-node-linux-ppc64le.tar.gz) | `a4278b3f8e458e9581e01f0c5ba8443303c987988ee136075a8f2f25515d70ca549fbd2e4d10eefca816c75c381d62d71494bd70c47034ab47f8315bbef4ae37` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-node-linux-s390x.tar.gz) | `8de2bc6f22f232ff534b45012986eac23893581ccb6c45bd637e40dbe808ce31d5a92375c00dc578bdbadec342b6e5b70c1b9f3d3a7bb26ccfde97d71f9bf84a` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0/kubernetes-node-windows-amd64.tar.gz) | `b82e94663d330cff7a117f99a7544f27d0bc92b36b5a283b3c23725d5b33e6f15e0ebf784627638f22f2d58c58c0c2b618ddfd226a64ae779693a0861475d355` - -## Changelog since v1.20.0 - -## What's New (Major Themes) - -### Deprecation of PodSecurityPolicy - -PSP as an admission controller resource is being deprecated. Deployed PodSecurityPolicy's will keep working until version 1.25, their target removal from the codebase. A new feature, with a working title of "PSP replacement policy", is being developed in [KEP-2579](https://features.k8s.io/2579). To learn more, read [PodSecurityPolicy Deprecation: Past, Present, and Future](https://blog.k8s.io/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/). - -### Kubernetes API Reference Documentation - -The API reference is now generated with [`gen-resourcesdocs`](https://github.com/kubernetes-sigs/reference-docs/tree/c96658d89fb21037b7d00d27e6dbbe6b32375837/gen-resourcesdocs) and it is moving to [Kubernetes API](https://docs.k8s.io/reference/kubernetes-api/) - -### Kustomize Updates in Kubectl - -[Kustomize](https://github.com/kubernetes-sigs/kustomize) version in kubectl had a jump from v2.0.3 to [v4.0.5](https://github.com/kubernetes/kubernetes/pull/98946). Kustomize is now treated as a library and future updates will be less sporadic. - -### Default Container Labels - -Pod with multiple containers can use `kubectl.kubernetes.io/default-container` label to have a container preselected for kubectl commands. More can be read in [KEP-2227](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/2227-kubectl-default-container/README.md). - -### Immutable Secrets and ConfigMaps - -Immutable Secrets and ConfigMaps graduates to GA. This feature allows users to specify that the contents of a particular Secret or ConfigMap is immutable for its object lifetime. For such instances, Kubelet will not watch/poll for changes and therefore reducing apiserver load. - -### Structured Logging in Kubelet - -Kubelet has adopted structured logging, thanks to community effort in accomplishing this within the release timeline. Structured logging in the project remains an ongoing effort -- for folks interested in participating, [keep an eye / chime in to the mailing list discussion](https://groups.google.com/g/kubernetes-dev/c/y4WIw-ntUR8). - -### Storage Capacity Tracking - -Traditionally, the Kubernetes scheduler was based on the assumptions that additional persistent storage is available everywhere in the cluster and has infinite capacity. Topology constraints addressed the first point, but up to now pod scheduling was still done without considering that the remaining storage capacity may not be enough to start a new pod. [Storage capacity tracking](https://docs.k8s.io/concepts/storage/storage-capacity/) addresses that by adding an API for a CSI driver to report storage capacity and uses that information in the Kubernetes scheduler when choosing a node for a pod. This feature serves as a stepping stone for supporting dynamic provisioning for local volumes and other volume types that are more capacity constrained. - -### Generic Ephemeral Volumes - -[Generic ephermeral volumes](https://docs.k8s.io/concepts/storage/ephemeral-volumes/#generic-ephemeral-volumes) feature allows any existing storage driver that supports dynamic provisioning to be used as an ephemeral volume with the volume’s lifecycle bound to the Pod. It can be used to provide scratch storage that is different from the root disk, for example persistent memory, or a separate local disk on that node. All StorageClass parameters for volume provisioning are supported. All features supported with PersistentVolumeClaims are supported, such as storage capacity tracking, snapshots and restore, and volume resizing. - -### CSI Service Account Token - -CSI Service Account Token feature moves to Beta in 1.21. This feature improves the security posture and allows CSI drivers to receive pods' [bound service account tokens](https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/1205-bound-service-account-tokens/README.md). This feature also provides a knob to re-publish volumes so that short-lived volumes can be refreshed. - -### CSI Health Monitoring - -The CSI health monitoring feature is being released as a second Alpha in Kubernetes 1.21. This feature enables CSI Drivers to share abnormal volume conditions from the underlying storage systems with Kubernetes so that they can be reported as events on PVCs or Pods. This feature serves as a stepping stone towards programmatic detection and resolution of individual volume health issues by Kubernetes. - -## Known Issues - -### `TopologyAwareHints` feature falls back to default behavior - -The feature gate currently falls back to the default behavior in most cases. Enabling the feature gate will add hints to `EndpointSlices`, but functional differences are only observed in non-dual stack kube-proxy implementation. [The fix will be available in coming releases](https://github.com/kubernetes/kubernetes/pull/100804). - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - -- Kube-proxy's IPVS proxy mode no longer sets the net.ipv4.conf.all.route_localnet sysctl parameter. Nodes upgrading will have net.ipv4.conf.all.route_localnet set to 1 but new nodes will inherit the system default (usually 0). If you relied on any behavior requiring net.ipv4.conf.all.route_localnet, you must set ensure it is enabled as kube-proxy will no longer set it automatically. This change helps to further mitigate CVE-2020-8558. ([#92938](https://github.com/kubernetes/kubernetes/pull/92938), [@lbernail](https://github.com/lbernail)) [SIG Network and Release] - - Kubeadm: during "init" an empty cgroupDriver value in the KubeletConfiguration is now always set to "systemd" unless the user is explicit about it. This requires existing machine setups to configure the container runtime to use the "systemd" driver. Documentation on this topic can be found here: https://kubernetes.io/docs/setup/production-environment/container-runtimes/. When upgrading existing clusters / nodes using "kubeadm upgrade" the old cgroupDriver value is preserved, but in 1.22 this change will also apply to "upgrade". For more information on migrating to the "systemd" driver or remaining on the "cgroupfs" driver see: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/. ([#99471](https://github.com/kubernetes/kubernetes/pull/99471), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] - - Newly provisioned PVs by EBS plugin will no longer use the deprecated "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" labels. It will use "topology.kubernetes.io/zone" and "topology.kubernetes.io/region" labels instead. ([#99130](https://github.com/kubernetes/kubernetes/pull/99130), [@ayberk](https://github.com/ayberk)) [SIG Cloud Provider, Storage and Testing] - - Newly provisioned PVs by OpenStack Cinder plugin will no longer use the deprecated "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" labels. It will use "topology.kubernetes.io/zone" and "topology.kubernetes.io/region" labels instead. ([#99719](https://github.com/kubernetes/kubernetes/pull/99719), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider and Storage] - - Newly provisioned PVs by gce-pd will no longer have the beta FailureDomain label. gce-pd volume plugin will start to have GA topology label instead. ([#98700](https://github.com/kubernetes/kubernetes/pull/98700), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Cloud Provider, Storage and Testing] - - OpenStack Cinder CSI migration is on by default, Clinder CSI driver must be installed on clusters on OpenStack for Cinder volumes to work. ([#98538](https://github.com/kubernetes/kubernetes/pull/98538), [@dims](https://github.com/dims)) [SIG Storage] - - Remove alpha `CSIMigrationXXComplete` flag and add alpha `InTreePluginXXUnregister` flag. Deprecate `CSIMigrationvSphereComplete` flag and it will be removed in v1.22. ([#98243](https://github.com/kubernetes/kubernetes/pull/98243), [@Jiawei0227](https://github.com/Jiawei0227)) - - Remove storage metrics `storage_operation_errors_total`, since we already have `storage_operation_status_count`.And add new field `status` for `storage_operation_duration_seconds`, so that we can know about all status storage operation latency. ([#98332](https://github.com/kubernetes/kubernetes/pull/98332), [@JornShen](https://github.com/JornShen)) [SIG Instrumentation and Storage] - - The metric `storage_operation_errors_total` is not removed, but is marked deprecated, and the metric `storage_operation_status_count` is marked deprecated. In both cases the `storage_operation_duration_seconds` metric can be used to recover equivalent counts (using `status=fail-unknown` in the case of `storage_operations_errors_total`). ([#99045](https://github.com/kubernetes/kubernetes/pull/99045), [@mattcary](https://github.com/mattcary)) - - `ServiceNodeExclusion`, `NodeDisruptionExclusion` and `LegacyNodeRoleBehavior` features have been promoted to GA. `ServiceNodeExclusion` and `NodeDisruptionExclusion` are now unconditionally enabled, while `LegacyNodeRoleBehavior` is unconditionally disabled. To prevent control plane nodes from being added to load balancers automatically, upgrade users need to add "node.kubernetes.io/exclude-from-external-load-balancers" label to control plane nodes. ([#97543](https://github.com/kubernetes/kubernetes/pull/97543), [@pacoxu](https://github.com/pacoxu)) - -## Changes by Kind - -### Deprecation - -- Aborting the drain command in a list of nodes will be deprecated. The new behavior will make the drain command go through all nodes even if one or more nodes failed during the drain. For now, users can try such experience by enabling --ignore-errors flag. ([#98203](https://github.com/kubernetes/kubernetes/pull/98203), [@yuzhiquan](https://github.com/yuzhiquan)) -- Delete deprecated `service.beta.kubernetes.io/azure-load-balancer-mixed-protocols` mixed procotol annotation in favor of the MixedProtocolLBService feature ([#97096](https://github.com/kubernetes/kubernetes/pull/97096), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Deprecate the `topologyKeys` field in Service. This capability will be replaced with upcoming work around Topology Aware Subsetting and Service Internal Traffic Policy. ([#96736](https://github.com/kubernetes/kubernetes/pull/96736), [@andrewsykim](https://github.com/andrewsykim)) [SIG Apps] -- Kube-proxy: remove deprecated --cleanup-ipvs flag of kube-proxy, and make --cleanup flag always to flush IPVS ([#97336](https://github.com/kubernetes/kubernetes/pull/97336), [@maaoBit](https://github.com/maaoBit)) [SIG Network] -- Kubeadm: deprecated command "alpha selfhosting pivot" is now removed. ([#97627](https://github.com/kubernetes/kubernetes/pull/97627), [@knight42](https://github.com/knight42)) -- Kubeadm: graduate the command `kubeadm alpha kubeconfig user` to `kubeadm kubeconfig user`. The `kubeadm alpha kubeconfig user` command is deprecated now. ([#97583](https://github.com/kubernetes/kubernetes/pull/97583), [@knight42](https://github.com/knight42)) [SIG Cluster Lifecycle] -- Kubeadm: the "kubeadm alpha certs" command is removed now, please use "kubeadm certs" instead. ([#97706](https://github.com/kubernetes/kubernetes/pull/97706), [@knight42](https://github.com/knight42)) [SIG Cluster Lifecycle] -- Kubeadm: the deprecated kube-dns is no longer supported as an option. If "ClusterConfiguration.dns.type" is set to "kube-dns" kubeadm will now throw an error. ([#99646](https://github.com/kubernetes/kubernetes/pull/99646), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Kubectl: The deprecated `kubectl alpha debug` command is removed. Use `kubectl debug` instead. ([#98111](https://github.com/kubernetes/kubernetes/pull/98111), [@pandaamanda](https://github.com/pandaamanda)) [SIG CLI] -- Official support to build kubernetes with docker-machine / remote docker is removed. This change does not affect building kubernetes with docker locally. ([#97935](https://github.com/kubernetes/kubernetes/pull/97935), [@adeniyistephen](https://github.com/adeniyistephen)) [SIG Release and Testing] -- Remove deprecated `--generator, --replicas, --service-generator, --service-overrides, --schedule` from `kubectl run` - Deprecate `--serviceaccount, --hostport, --requests, --limits` in `kubectl run` ([#99732](https://github.com/kubernetes/kubernetes/pull/99732), [@soltysh](https://github.com/soltysh)) -- Remove the deprecated metrics "scheduling_algorithm_preemption_evaluation_seconds" and "binding_duration_seconds", suggest to use "scheduler_framework_extension_point_duration_seconds" instead. ([#96447](https://github.com/kubernetes/kubernetes/pull/96447), [@chendave](https://github.com/chendave)) [SIG Cluster Lifecycle, Instrumentation, Scheduling and Testing] -- Removing experimental windows container hyper-v support with Docker ([#97141](https://github.com/kubernetes/kubernetes/pull/97141), [@wawa0210](https://github.com/wawa0210)) [SIG Node and Windows] -- Rename metrics `etcd_object_counts` to `apiserver_storage_object_counts` and mark it as stable. The original `etcd_object_counts` metrics name is marked as "Deprecated" and will be removed in the future. ([#99785](https://github.com/kubernetes/kubernetes/pull/99785), [@erain](https://github.com/erain)) [SIG API Machinery, Instrumentation and Testing] -- The GA TokenRequest and TokenRequestProjection feature gates have been removed and are unconditionally enabled. Remove explicit use of those feature gates in CLI invocations. ([#97148](https://github.com/kubernetes/kubernetes/pull/97148), [@wawa0210](https://github.com/wawa0210)) [SIG Node] -- The PodSecurityPolicy API is deprecated in 1.21, and will no longer be served starting in 1.25. ([#97171](https://github.com/kubernetes/kubernetes/pull/97171), [@deads2k](https://github.com/deads2k)) [SIG Auth and CLI] -- The `batch/v2alpha1` CronJob type definitions and clients are deprecated and removed. ([#96987](https://github.com/kubernetes/kubernetes/pull/96987), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, Apps, CLI and Testing] -- The `export` query parameter (inconsistently supported by API resources and deprecated in v1.14) is fully removed. Requests setting this query parameter will now receive a 400 status response. ([#98312](https://github.com/kubernetes/kubernetes/pull/98312), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth and Testing] -- `audit.k8s.io/v1beta1` and `audit.k8s.io/v1alpha1` audit policy configuration and audit events are deprecated in favor of `audit.k8s.io/v1`, available since v1.13. kube-apiserver invocations that specify alpha or beta policy configurations with `--audit-policy-file`, or explicitly request alpha or beta audit events with `--audit-log-version` / `--audit-webhook-version` must update to use `audit.k8s.io/v1` and accept `audit.k8s.io/v1` events prior to v1.24. ([#98858](https://github.com/kubernetes/kubernetes/pull/98858), [@carlory](https://github.com/carlory)) [SIG Auth] -- `discovery.k8s.io/v1beta1` EndpointSlices are deprecated in favor of `discovery.k8s.io/v1`, and will no longer be served in Kubernetes v1.25. ([#100472](https://github.com/kubernetes/kubernetes/pull/100472), [@liggitt](https://github.com/liggitt)) -- `diskformat` storage class parameter for in-tree vSphere volume plugin is deprecated as of v1.21 release. Please consider updating storageclass and remove `diskformat` parameter. vSphere CSI Driver does not support diskformat storageclass parameter. - - vSphere releases less than 67u3 are deprecated as of v1.21. Please consider upgrading vSphere to 67u3 or above. vSphere CSI Driver requires minimum vSphere 67u3. - - VM Hardware version less than 15 is deprecated as of v1.21. Please consider upgrading the Node VM Hardware version to 15 or above. vSphere CSI Driver recommends Node VM's Hardware version set to at least vmx-15. - - Multi vCenter support is deprecated as of v1.21. If you have a Kubernetes cluster spanning across multiple vCenter servers, please consider moving all k8s nodes to a single vCenter Server. vSphere CSI Driver does not support Kubernetes deployment spanning across multiple vCenter servers. - - Support for these deprecations will be available till Kubernetes v1.24. ([#98546](https://github.com/kubernetes/kubernetes/pull/98546), [@divyenpatel](https://github.com/divyenpatel)) - -### API Change - -- 1. PodAffinityTerm includes a namespaceSelector field to allow selecting eligible namespaces based on their labels. - 2. A new CrossNamespacePodAffinity quota scope API that allows restricting which namespaces allowed to use PodAffinityTerm with corss-namespace reference via namespaceSelector or namespaces fields. ([#98582](https://github.com/kubernetes/kubernetes/pull/98582), [@ahg-g](https://github.com/ahg-g)) [SIG API Machinery, Apps, Auth and Testing] -- Add Probe-level terminationGracePeriodSeconds field ([#99375](https://github.com/kubernetes/kubernetes/pull/99375), [@ehashman](https://github.com/ehashman)) [SIG API Machinery, Apps, Node and Testing] -- Added `.spec.completionMode` field to Job, with accepted values `NonIndexed` (default) and `Indexed`. This is an alpha field and is only honored by servers with the `IndexedJob` feature gate enabled. ([#98441](https://github.com/kubernetes/kubernetes/pull/98441), [@alculquicondor](https://github.com/alculquicondor)) [SIG Apps and CLI] -- Adds support for endPort field in NetworkPolicy ([#97058](https://github.com/kubernetes/kubernetes/pull/97058), [@rikatz](https://github.com/rikatz)) [SIG Apps and Network] -- CSIServiceAccountToken graduates to Beta and enabled by default. ([#99298](https://github.com/kubernetes/kubernetes/pull/99298), [@zshihang](https://github.com/zshihang)) -- Cluster admins can now turn off `/debug/pprof` and `/debug/flags/v` endpoint in kubelet by setting `enableProfilingHandler` and `enableDebugFlagsHandler` to `false` in the Kubelet configuration file. Options `enableProfilingHandler` and `enableDebugFlagsHandler` can be set to `true` only when `enableDebuggingHandlers` is also set to `true`. ([#98458](https://github.com/kubernetes/kubernetes/pull/98458), [@SaranBalaji90](https://github.com/SaranBalaji90)) -- DaemonSets accept a MaxSurge integer or percent on their rolling update strategy that will launch the updated pod on nodes and wait for those pods to go ready before marking the old out-of-date pods as deleted. This allows workloads to avoid downtime during upgrades when deployed using DaemonSets. This feature is alpha and is behind the DaemonSetUpdateSurge feature gate. ([#96441](https://github.com/kubernetes/kubernetes/pull/96441), [@smarterclayton](https://github.com/smarterclayton)) [SIG Apps and Testing] -- Enable SPDY pings to keep connections alive, so that `kubectl exec` and `kubectl portforward` won't be interrupted. ([#97083](https://github.com/kubernetes/kubernetes/pull/97083), [@knight42](https://github.com/knight42)) [SIG API Machinery and CLI] -- FieldManager no longer owns fields that get reset before the object is persisted (e.g. "status wiping"). ([#99661](https://github.com/kubernetes/kubernetes/pull/99661), [@kevindelgado](https://github.com/kevindelgado)) [SIG API Machinery, Auth and Testing] -- Fixes server-side apply for APIService resources. ([#98576](https://github.com/kubernetes/kubernetes/pull/98576), [@kevindelgado](https://github.com/kevindelgado)) -- Generic ephemeral volumes are beta. ([#99643](https://github.com/kubernetes/kubernetes/pull/99643), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, CLI, Node, Storage and Testing] -- Hugepages request values are limited to integer multiples of the page size. ([#98515](https://github.com/kubernetes/kubernetes/pull/98515), [@lala123912](https://github.com/lala123912)) [SIG Apps] -- Implement the GetAvailableResources in the podresources API. ([#95734](https://github.com/kubernetes/kubernetes/pull/95734), [@fromanirh](https://github.com/fromanirh)) [SIG Instrumentation, Node and Testing] -- IngressClass resource can now reference a resource in a specific namespace - for implementation-specific configuration (previously only Cluster-level resources were allowed). - This feature can be enabled using the IngressClassNamespacedParams feature gate. ([#99275](https://github.com/kubernetes/kubernetes/pull/99275), [@hbagdi](https://github.com/hbagdi)) -- Jobs API has a new `.spec.suspend` field that can be used to suspend and resume Jobs. This is an alpha field which is only honored by servers with the `SuspendJob` feature gate enabled. ([#98727](https://github.com/kubernetes/kubernetes/pull/98727), [@adtac](https://github.com/adtac)) -- Kubelet Graceful Node Shutdown feature graduates to Beta and enabled by default. ([#99735](https://github.com/kubernetes/kubernetes/pull/99735), [@bobbypage](https://github.com/bobbypage)) -- Kubernetes is now built using go1.15.7 ([#98363](https://github.com/kubernetes/kubernetes/pull/98363), [@cpanato](https://github.com/cpanato)) [SIG Cloud Provider, Instrumentation, Node, Release and Testing] -- Namespace API objects now have a `kubernetes.io/metadata.name` label matching their metadata.name field to allow selecting any namespace by its name using a label selector. ([#96968](https://github.com/kubernetes/kubernetes/pull/96968), [@jayunit100](https://github.com/jayunit100)) [SIG API Machinery, Apps, Cloud Provider, Storage and Testing] -- One new field "InternalTrafficPolicy" in Service is added. - It specifies if the cluster internal traffic should be routed to all endpoints or node-local endpoints only. - "Cluster" routes internal traffic to a Service to all endpoints. - "Local" routes traffic to node-local endpoints only, and traffic is dropped if no node-local endpoints are ready. - The default value is "Cluster". ([#96600](https://github.com/kubernetes/kubernetes/pull/96600), [@maplain](https://github.com/maplain)) [SIG API Machinery, Apps and Network] -- PodDisruptionBudget API objects can now contain conditions in status. ([#98127](https://github.com/kubernetes/kubernetes/pull/98127), [@mortent](https://github.com/mortent)) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- PodSecurityPolicy only stores "generic" as allowed volume type if the GenericEphemeralVolume feature gate is enabled ([#98918](https://github.com/kubernetes/kubernetes/pull/98918), [@pohly](https://github.com/pohly)) [SIG Auth and Security] -- Promote CronJobs to batch/v1 ([#99423](https://github.com/kubernetes/kubernetes/pull/99423), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, Apps, CLI and Testing] -- Promote Immutable Secrets/ConfigMaps feature to Stable. This allows to set `immutable` field in Secret or ConfigMap object to mark their contents as immutable. ([#97615](https://github.com/kubernetes/kubernetes/pull/97615), [@wojtek-t](https://github.com/wojtek-t)) [SIG Apps, Architecture, Node and Testing] -- Remove support for building Kubernetes with bazel. ([#99561](https://github.com/kubernetes/kubernetes/pull/99561), [@BenTheElder](https://github.com/BenTheElder)) [SIG API Machinery, Apps, Architecture, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Scheduling, Storage, Testing and Windows] -- Scheduler extender filter interface now can report unresolvable failed nodes in the new field `FailedAndUnresolvableNodes` of `ExtenderFilterResult` struct. Nodes in this map will be skipped in the preemption phase. ([#92866](https://github.com/kubernetes/kubernetes/pull/92866), [@cofyc](https://github.com/cofyc)) [SIG Scheduling] -- Services can specify loadBalancerClass to use a custom load balancer ([#98277](https://github.com/kubernetes/kubernetes/pull/98277), [@XudongLiuHarold](https://github.com/XudongLiuHarold)) -- Storage capacity tracking (= the CSIStorageCapacity feature) graduates to Beta and enabled by default, storage.k8s.io/v1alpha1/VolumeAttachment and storage.k8s.io/v1alpha1/CSIStorageCapacity objects are deprecated ([#99641](https://github.com/kubernetes/kubernetes/pull/99641), [@pohly](https://github.com/pohly)) -- Support for Indexed Job: a Job that is considered completed when Pods associated to indexes from 0 to (.spec.completions-1) have succeeded. ([#98812](https://github.com/kubernetes/kubernetes/pull/98812), [@alculquicondor](https://github.com/alculquicondor)) [SIG Apps and CLI] -- The BoundServiceAccountTokenVolume feature has been promoted to beta, and enabled by default. - - This changes the tokens provided to containers at `/var/run/secrets/kubernetes.io/serviceaccount/token` to be time-limited, auto-refreshed, and invalidated when the containing pod is deleted. - - Clients should reload the token from disk periodically (once per minute is recommended) to ensure they continue to use a valid token. `k8s.io/client-go` version v11.0.0+ and v0.15.0+ reload tokens automatically. - - By default, injected tokens are given an extended lifetime so they remain valid even after a new refreshed token is provided. The metric `serviceaccount_stale_tokens_total` can be used to monitor for workloads that are depending on the extended lifetime and are continuing to use tokens even after a refreshed token is provided to the container. If that metric indicates no existing workloads are depending on extended lifetimes, injected token lifetime can be shortened to 1 hour by starting `kube-apiserver` with `--service-account-extend-token-expiration=false`. ([#95667](https://github.com/kubernetes/kubernetes/pull/95667), [@zshihang](https://github.com/zshihang)) [SIG API Machinery, Auth, Cluster Lifecycle and Testing] -- The EndpointSlice Controllers are now GA. The `EndpointSliceController` will not populate the `deprecatedTopology` field and will only provide topology information through the `zone` and `nodeName` fields. ([#99870](https://github.com/kubernetes/kubernetes/pull/99870), [@swetharepakula](https://github.com/swetharepakula)) -- The Endpoints controller will now set the `endpoints.kubernetes.io/over-capacity` annotation to "warning" when an Endpoints resource contains more than 1000 addresses. In a future release, the controller will truncate Endpoints that exceed this limit. The EndpointSlice API can be used to support significantly larger number of addresses. ([#99975](https://github.com/kubernetes/kubernetes/pull/99975), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- The PodDisruptionBudget API has been promoted to policy/v1 with no schema changes. The only functional change is that an empty selector (`{}`) written to a policy/v1 PodDisruptionBudget now selects all pods in the namespace. The behavior of the policy/v1beta1 API remains unchanged. The policy/v1beta1 PodDisruptionBudget API is deprecated and will no longer be served in 1.25+. ([#99290](https://github.com/kubernetes/kubernetes/pull/99290), [@mortent](https://github.com/mortent)) [SIG API Machinery, Apps, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Scheduling and Testing] -- The `EndpointSlice` API is now GA. The `EndpointSlice` topology field has been removed from the GA API and will be replaced by a new per Endpoint Zone field. If the topology field was previously used, it will be converted into an annotation in the v1 Resource. The `discovery.k8s.io/v1alpha1` API is removed. ([#99662](https://github.com/kubernetes/kubernetes/pull/99662), [@swetharepakula](https://github.com/swetharepakula)) -- The `controller.kubernetes.io/pod-deletion-cost` annotation can be set to offer a hint on the cost of deleting a `Pod` compared to other pods belonging to the same ReplicaSet. Pods with lower deletion cost are deleted first. This is an alpha feature. ([#99163](https://github.com/kubernetes/kubernetes/pull/99163), [@ahg-g](https://github.com/ahg-g)) -- The kube-apiserver now resets `managedFields` that got corrupted by a mutating admission controller. ([#98074](https://github.com/kubernetes/kubernetes/pull/98074), [@kwiesmueller](https://github.com/kwiesmueller)) -- Topology Aware Hints are now available in alpha and can be enabled with the `TopologyAwareHints` feature gate. ([#99522](https://github.com/kubernetes/kubernetes/pull/99522), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps, Auth, Instrumentation, Network and Testing] -- Users might specify the `kubectl.kubernetes.io/default-exec-container` annotation in a Pod to preselect container for kubectl commands. ([#97099](https://github.com/kubernetes/kubernetes/pull/97099), [@pacoxu](https://github.com/pacoxu)) [SIG CLI] - -### Feature - -- A client-go metric, rest_client_exec_plugin_call_total, has been added to track total calls to client-go credential plugins. ([#98892](https://github.com/kubernetes/kubernetes/pull/98892), [@ankeesler](https://github.com/ankeesler)) [SIG API Machinery, Auth, Cluster Lifecycle and Instrumentation] -- A new histogram metric to track the time it took to delete a job by the `TTLAfterFinished` controller ([#98676](https://github.com/kubernetes/kubernetes/pull/98676), [@ahg-g](https://github.com/ahg-g)) -- AWS cloud provider supports auto-discovering subnets without any `kubernetes.io/cluster/` tags. It also supports additional service annotation `service.beta.kubernetes.io/aws-load-balancer-subnets` to manually configure the subnets. ([#97431](https://github.com/kubernetes/kubernetes/pull/97431), [@kishorj](https://github.com/kishorj)) -- Aborting the drain command in a list of nodes will be deprecated. The new behavior will make the drain command go through all nodes even if one or more nodes failed during the drain. For now, users can try such experience by enabling --ignore-errors flag. ([#98203](https://github.com/kubernetes/kubernetes/pull/98203), [@yuzhiquan](https://github.com/yuzhiquan)) -- Add --permit-address-sharing flag to `kube-apiserver` to listen with `SO_REUSEADDR`. While allowing to listen on wildcard IPs like 0.0.0.0 and specific IPs in parallel, it avoids waiting for the kernel to release socket in `TIME_WAIT` state, and hence, considerably reducing `kube-apiserver` restart times under certain conditions. ([#93861](https://github.com/kubernetes/kubernetes/pull/93861), [@sttts](https://github.com/sttts)) -- Add `csi_operations_seconds` metric on kubelet that exposes CSI operations duration and status for node CSI operations. ([#98979](https://github.com/kubernetes/kubernetes/pull/98979), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Instrumentation and Storage] -- Add `migrated` field into `storage_operation_duration_seconds` metric ([#99050](https://github.com/kubernetes/kubernetes/pull/99050), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Apps, Instrumentation and Storage] -- Add flag --lease-reuse-duration-seconds for kube-apiserver to config etcd lease reuse duration. ([#97009](https://github.com/kubernetes/kubernetes/pull/97009), [@lingsamuel](https://github.com/lingsamuel)) [SIG API Machinery and Scalability] -- Add metric etcd_lease_object_counts for kube-apiserver to observe max objects attached to a single etcd lease. ([#97480](https://github.com/kubernetes/kubernetes/pull/97480), [@lingsamuel](https://github.com/lingsamuel)) [SIG API Machinery, Instrumentation and Scalability] -- Add support to generate client-side binaries for new darwin/arm64 platform ([#97743](https://github.com/kubernetes/kubernetes/pull/97743), [@dims](https://github.com/dims)) [SIG Release and Testing] -- Added `ephemeral_volume_controller_create[_failures]_total` counters to kube-controller-manager metrics ([#99115](https://github.com/kubernetes/kubernetes/pull/99115), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Cluster Lifecycle, Instrumentation and Storage] -- Added support for installing `arm64` node artifacts. ([#99242](https://github.com/kubernetes/kubernetes/pull/99242), [@liu-cong](https://github.com/liu-cong)) -- Adds alpha feature `VolumeCapacityPriority` which makes the scheduler prioritize nodes based on the best matching size of statically provisioned PVs across multiple topologies. ([#96347](https://github.com/kubernetes/kubernetes/pull/96347), [@cofyc](https://github.com/cofyc)) [SIG Apps, Network, Scheduling, Storage and Testing] -- Adds the ability to pass --strict-transport-security-directives to the kube-apiserver to set the HSTS header appropriately. Be sure you understand the consequences to browsers before setting this field. ([#96502](https://github.com/kubernetes/kubernetes/pull/96502), [@249043822](https://github.com/249043822)) [SIG Auth] -- Adds two new metrics to cronjobs, a histogram to track the time difference when a job is created and the expected time when it should be created, as well as a gauge for the missed schedules of a cronjob ([#99341](https://github.com/kubernetes/kubernetes/pull/99341), [@alaypatel07](https://github.com/alaypatel07)) -- Alpha implementation of Kubectl Command Headers: SIG CLI KEP 859 enabled when KUBECTL_COMMAND_HEADERS environment variable set on the client command line. ([#98952](https://github.com/kubernetes/kubernetes/pull/98952), [@seans3](https://github.com/seans3)) -- Base-images: Update to debian-iptables:buster-v1.4.0 - - Uses iptables 1.8.5 - - base-images: Update to debian-base:buster-v1.3.0 - - cluster/images/etcd: Build etcd:3.4.13-2 image - - Uses debian-base:buster-v1.3.0 ([#98401](https://github.com/kubernetes/kubernetes/pull/98401), [@pacoxu](https://github.com/pacoxu)) [SIG Testing] -- CRIContainerLogRotation graduates to GA and unconditionally enabled. ([#99651](https://github.com/kubernetes/kubernetes/pull/99651), [@umohnani8](https://github.com/umohnani8)) -- Component owner can configure the allowlist of metric label with flag '--allow-metric-labels'. ([#99385](https://github.com/kubernetes/kubernetes/pull/99385), [@YoyinZyc](https://github.com/YoyinZyc)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Release] -- Component owner can configure the allowlist of metric label with flag '--allow-metric-labels'. ([#99738](https://github.com/kubernetes/kubernetes/pull/99738), [@YoyinZyc](https://github.com/YoyinZyc)) [SIG API Machinery, Cluster Lifecycle and Instrumentation] -- EmptyDir memory backed volumes are sized as the the minimum of pod allocatable memory on a host and an optional explicit user provided value. ([#100319](https://github.com/kubernetes/kubernetes/pull/100319), [@derekwaynecarr](https://github.com/derekwaynecarr)) [SIG Node] -- Enables Kubelet to check volume condition and log events to corresponding pods. ([#99284](https://github.com/kubernetes/kubernetes/pull/99284), [@fengzixu](https://github.com/fengzixu)) [SIG Apps, Instrumentation, Node and Storage] -- EndpointSliceNodeName graduates to GA and thus will be unconditionally enabled -- NodeName will always be available in the v1beta1 API. ([#99746](https://github.com/kubernetes/kubernetes/pull/99746), [@swetharepakula](https://github.com/swetharepakula)) -- Export `NewDebuggingRoundTripper` function and `DebugLevel` options in the k8s.io/client-go/transport package. ([#98324](https://github.com/kubernetes/kubernetes/pull/98324), [@atosatto](https://github.com/atosatto)) -- Kube-proxy iptables: new metric sync_proxy_rules_iptables_total that exposes the number of rules programmed per table in each iteration ([#99653](https://github.com/kubernetes/kubernetes/pull/99653), [@aojea](https://github.com/aojea)) [SIG Instrumentation and Network] -- Kube-scheduler now logs plugin scoring summaries at --v=4 ([#99411](https://github.com/kubernetes/kubernetes/pull/99411), [@damemi](https://github.com/damemi)) [SIG Scheduling] -- Kubeadm now includes CoreDNS v1.8.0. ([#96429](https://github.com/kubernetes/kubernetes/pull/96429), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Kubeadm: IPv6DualStack feature gate graduates to Beta and enabled by default ([#99294](https://github.com/kubernetes/kubernetes/pull/99294), [@pacoxu](https://github.com/pacoxu)) -- Kubeadm: a warning to user as ipv6 site-local is deprecated ([#99574](https://github.com/kubernetes/kubernetes/pull/99574), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle and Network] -- Kubeadm: add support for certificate chain validation. When using kubeadm in external CA mode, this allows an intermediate CA to be used to sign the certificates. The intermediate CA certificate must be appended to each signed certificate for this to work correctly. ([#97266](https://github.com/kubernetes/kubernetes/pull/97266), [@robbiemcmichael](https://github.com/robbiemcmichael)) [SIG Cluster Lifecycle] -- Kubeadm: amend the node kernel validation to treat CGROUP_PIDS, FAIR_GROUP_SCHED as required and CFS_BANDWIDTH, CGROUP_HUGETLB as optional ([#96378](https://github.com/kubernetes/kubernetes/pull/96378), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle and Node] -- Kubeadm: apply the "node.kubernetes.io/exclude-from-external-load-balancers" label on control plane nodes during "init", "join" and "upgrade" to preserve backwards compatibility with the lagacy LB mode where nodes labeled as "master" where excluded. To opt-out you can remove the label from a node. See #97543 and the linked KEP for more details. ([#98269](https://github.com/kubernetes/kubernetes/pull/98269), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: if the user has customized their image repository via the kubeadm configuration, pass the custom pause image repository and tag to the kubelet via --pod-infra-container-image not only for Docker but for all container runtimes. This flag tells the kubelet that it should not garbage collect the image. ([#99476](https://github.com/kubernetes/kubernetes/pull/99476), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: perform pre-flight validation on host/node name upon `kubeadm init` and `kubeadm join`, showing warnings on non-compliant names ([#99194](https://github.com/kubernetes/kubernetes/pull/99194), [@pacoxu](https://github.com/pacoxu)) -- Kubectl version changed to write a warning message to stderr if the client and server version difference exceeds the supported version skew of +/-1 minor version. ([#98250](https://github.com/kubernetes/kubernetes/pull/98250), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- Kubectl: Add `--use-protocol-buffers` flag to kubectl top pods and nodes. ([#96655](https://github.com/kubernetes/kubernetes/pull/96655), [@serathius](https://github.com/serathius)) -- Kubectl: `kubectl get` will omit managed fields by default now. Users could set `--show-managed-fields` to true to show managedFields when the output format is either `json` or `yaml`. ([#96878](https://github.com/kubernetes/kubernetes/pull/96878), [@knight42](https://github.com/knight42)) [SIG CLI and Testing] -- Kubectl: a Pod can be preselected as default container using `kubectl.kubernetes.io/default-container` annotation ([#99833](https://github.com/kubernetes/kubernetes/pull/99833), [@mengjiao-liu](https://github.com/mengjiao-liu)) -- Kubectl: add bash-completion for comma separated list on `kubectl get` ([#98301](https://github.com/kubernetes/kubernetes/pull/98301), [@phil9909](https://github.com/phil9909)) -- Kubernetes is now built using go1.15.8 ([#98834](https://github.com/kubernetes/kubernetes/pull/98834), [@cpanato](https://github.com/cpanato)) [SIG Cloud Provider, Instrumentation, Release and Testing] -- Kubernetes is now built with Golang 1.16 ([#98572](https://github.com/kubernetes/kubernetes/pull/98572), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Node, Release and Testing] -- Kubernetes is now built with Golang 1.16.1 ([#100106](https://github.com/kubernetes/kubernetes/pull/100106), [@justaugustus](https://github.com/justaugustus)) [SIG Cloud Provider, Instrumentation, Release and Testing] -- Metrics can now be disabled explicitly via a command line flag (i.e. '--disabled-metrics=metric1,metric2') ([#99217](https://github.com/kubernetes/kubernetes/pull/99217), [@logicalhan](https://github.com/logicalhan)) -- New admission controller `DenyServiceExternalIPs` is available. Clusters which do not *need* the Service `externalIPs` feature should enable this controller and be more secure. ([#97395](https://github.com/kubernetes/kubernetes/pull/97395), [@thockin](https://github.com/thockin)) -- Overall, enable the feature of `PreferNominatedNode` will improve the performance of scheduling where preemption might frequently happen, but in theory, enable the feature of `PreferNominatedNode`, the pod might not be scheduled to the best candidate node in the cluster. ([#93179](https://github.com/kubernetes/kubernetes/pull/93179), [@chendave](https://github.com/chendave)) [SIG Scheduling and Testing] -- Persistent Volumes formatted with the btrfs filesystem will now automatically resize when expanded. ([#99361](https://github.com/kubernetes/kubernetes/pull/99361), [@Novex](https://github.com/Novex)) [SIG Storage] -- Port the devicemanager to Windows node to allow device plugins like directx ([#93285](https://github.com/kubernetes/kubernetes/pull/93285), [@aarnaud](https://github.com/aarnaud)) [SIG Node, Testing and Windows] -- Removes cAdvisor JSON metrics (/stats/container, /stats//, /stats////) from the kubelet. ([#99236](https://github.com/kubernetes/kubernetes/pull/99236), [@pacoxu](https://github.com/pacoxu)) -- Rename metrics `etcd_object_counts` to `apiserver_storage_object_counts` and mark it as stable. The original `etcd_object_counts` metrics name is marked as "Deprecated" and will be removed in the future. ([#99785](https://github.com/kubernetes/kubernetes/pull/99785), [@erain](https://github.com/erain)) [SIG API Machinery, Instrumentation and Testing] -- Sysctls graduates to General Availability and thus unconditionally enabled. ([#99158](https://github.com/kubernetes/kubernetes/pull/99158), [@wgahnagl](https://github.com/wgahnagl)) -- The Kubernetes pause image manifest list now contains an image for Windows Server 20H2. ([#97322](https://github.com/kubernetes/kubernetes/pull/97322), [@claudiubelu](https://github.com/claudiubelu)) [SIG Windows] -- The NodeAffinity plugin implements the PreFilter extension, offering enhanced performance for Filter. ([#99213](https://github.com/kubernetes/kubernetes/pull/99213), [@AliceZhang2016](https://github.com/AliceZhang2016)) [SIG Scheduling] -- The `CronJobControllerV2` feature flag graduates to Beta and set to be enabled by default. ([#98878](https://github.com/kubernetes/kubernetes/pull/98878), [@soltysh](https://github.com/soltysh)) -- The `EndpointSlice` mirroring controller mirrors endpoints annotations and labels to the generated endpoint slices, it also ensures that updates on any of these fields are mirrored. - The well-known annotation `endpoints.kubernetes.io/last-change-trigger-time` is skipped and not mirrored. ([#98116](https://github.com/kubernetes/kubernetes/pull/98116), [@aojea](https://github.com/aojea)) -- The `RunAsGroup` feature has been promoted to GA in this release. ([#94641](https://github.com/kubernetes/kubernetes/pull/94641), [@krmayankk](https://github.com/krmayankk)) [SIG Auth and Node] -- The `ServiceAccountIssuerDiscovery` feature has graduated to GA, and is unconditionally enabled. The `ServiceAccountIssuerDiscovery` feature-gate will be removed in 1.22. ([#98553](https://github.com/kubernetes/kubernetes/pull/98553), [@mtaufen](https://github.com/mtaufen)) [SIG API Machinery, Auth and Testing] -- The `TTLAfterFinished` feature flag is now beta and enabled by default ([#98678](https://github.com/kubernetes/kubernetes/pull/98678), [@ahg-g](https://github.com/ahg-g)) -- The apimachinery util/net function used to detect the bind address `ResolveBindAddress()` takes into consideration global IP addresses on loopback interfaces when 1) the host has default routes, or 2) there are no global IPs on those interfaces in order to support more complex network scenarios like BGP Unnumbered RFC 5549 ([#95790](https://github.com/kubernetes/kubernetes/pull/95790), [@aojea](https://github.com/aojea)) [SIG Network] -- The feature gate `RootCAConfigMap` graduated to GA in v1.21 and therefore will be unconditionally enabled. This flag will be removed in v1.22 release. ([#98033](https://github.com/kubernetes/kubernetes/pull/98033), [@zshihang](https://github.com/zshihang)) -- The pause image upgraded to `v3.4.1` in kubelet and kubeadm for both Linux and Windows. ([#98205](https://github.com/kubernetes/kubernetes/pull/98205), [@pacoxu](https://github.com/pacoxu)) -- Update pause container to run as pseudo user and group `65535:65535`. This implies the release of version 3.5 of the container images. ([#97963](https://github.com/kubernetes/kubernetes/pull/97963), [@saschagrunert](https://github.com/saschagrunert)) [SIG CLI, Cloud Provider, Cluster Lifecycle, Node, Release, Security and Testing] -- Update the latest validated version of Docker to 20.10 ([#98977](https://github.com/kubernetes/kubernetes/pull/98977), [@neolit123](https://github.com/neolit123)) [SIG CLI, Cluster Lifecycle and Node] -- Upgrade node local dns to 1.17.0 for better IPv6 support ([#99749](https://github.com/kubernetes/kubernetes/pull/99749), [@pacoxu](https://github.com/pacoxu)) [SIG Cloud Provider and Network] -- Upgrades `IPv6Dualstack` to `Beta` and turns it on by default. New clusters or existing clusters are not be affected until an actor starts adding secondary Pods and service CIDRS CLI flags as described here: [IPv4/IPv6 Dual-stack](https://github.com/kubernetes/enhancements/tree/master/keps/sig-network/563-dual-stack) ([#98969](https://github.com/kubernetes/kubernetes/pull/98969), [@khenidak](https://github.com/khenidak)) -- Users might specify the `kubectl.kubernetes.io/default-container` annotation in a Pod to preselect container for kubectl commands. ([#99581](https://github.com/kubernetes/kubernetes/pull/99581), [@mengjiao-liu](https://github.com/mengjiao-liu)) [SIG CLI] -- When downscaling ReplicaSets, ready and creation timestamps are compared in a logarithmic scale. ([#99212](https://github.com/kubernetes/kubernetes/pull/99212), [@damemi](https://github.com/damemi)) [SIG Apps and Testing] -- When the kubelet is watching a ConfigMap or Secret purely in the context of setting environment variables - for containers, only hold that watch for a defined duration before cancelling it. This change reduces the CPU - and memory usage of the kube-apiserver in large clusters. ([#99393](https://github.com/kubernetes/kubernetes/pull/99393), [@chenyw1990](https://github.com/chenyw1990)) [SIG API Machinery, Node and Testing] -- WindowsEndpointSliceProxying feature gate has graduated to beta and is enabled by default. This means kube-proxy will read from EndpointSlices instead of Endpoints on Windows by default. ([#99794](https://github.com/kubernetes/kubernetes/pull/99794), [@robscott](https://github.com/robscott)) [SIG Network] -- `kubectl wait` ensures that observedGeneration >= generation to prevent stale state reporting. An example scenario can be found on CRD updates. ([#97408](https://github.com/kubernetes/kubernetes/pull/97408), [@KnicKnic](https://github.com/KnicKnic)) - -### Documentation - -- Azure file migration graduates to beta, with CSIMigrationAzureFile flag off by default - as it requires installation of AzureFile CSI Driver. Users should enable CSIMigration and - CSIMigrationAzureFile features and install the [AzureFile CSI Driver](https://github.com/kubernetes-sigs/azurefile-csi-driver) - to avoid disruption to existing Pod and PVC objects at that time. Azure File CSI driver does not support using same persistent - volume with different fsgroups. When CSI migration is enabled for azurefile driver, such case is not supported. - (there is a case we support where volume is mounted with 0777 and then it readable/writable by everyone) ([#96293](https://github.com/kubernetes/kubernetes/pull/96293), [@andyzhangx](https://github.com/andyzhangx)) -- Official support to build kubernetes with docker-machine / remote docker is removed. This change does not affect building kubernetes with docker locally. ([#97935](https://github.com/kubernetes/kubernetes/pull/97935), [@adeniyistephen](https://github.com/adeniyistephen)) [SIG Release and Testing] -- Set kubelet option `--volume-stats-agg-period` to negative value to disable volume calculations. ([#96675](https://github.com/kubernetes/kubernetes/pull/96675), [@pacoxu](https://github.com/pacoxu)) [SIG Node] - -### Failing Test - -- Escape the special characters like `[`, `]` and ` ` that exist in vsphere windows path ([#98830](https://github.com/kubernetes/kubernetes/pull/98830), [@liyanhui1228](https://github.com/liyanhui1228)) [SIG Storage and Windows] -- Kube-proxy: fix a bug on UDP `NodePort` Services where stale connection tracking entries may blackhole the traffic directed to the `NodePort` ([#98305](https://github.com/kubernetes/kubernetes/pull/98305), [@aojea](https://github.com/aojea)) -- Kubelet: fixes a bug in the HostPort dockershim implementation that caused the conformance test "HostPort validates that there is no conflict between pods with same hostPort but different hostIP and protocol" to fail. ([#98755](https://github.com/kubernetes/kubernetes/pull/98755), [@aojea](https://github.com/aojea)) [SIG Cloud Provider, Network and Node] - -### Bug or Regression - -- AcceleratorStats will be available in the Summary API of kubelet when cri_stats_provider is used. ([#96873](https://github.com/kubernetes/kubernetes/pull/96873), [@ruiwen-zhao](https://github.com/ruiwen-zhao)) [SIG Node] -- All data is no longer automatically deleted when a failure is detected during creation of the volume data file on a CSI volume. Now only the data file and volume path is removed. ([#96021](https://github.com/kubernetes/kubernetes/pull/96021), [@huffmanca](https://github.com/huffmanca)) -- Clean ReplicaSet by revision instead of creation timestamp in deployment controller ([#97407](https://github.com/kubernetes/kubernetes/pull/97407), [@waynepeking348](https://github.com/waynepeking348)) [SIG Apps] -- Cleanup subnet in frontend IP configs to prevent huge subnet request bodies in some scenarios. ([#98133](https://github.com/kubernetes/kubernetes/pull/98133), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Client-go exec credential plugins will pass stdin only when interactive terminal is detected on stdin. This fixes a bug where previously it was checking if **stdout** is an interactive terminal. ([#99654](https://github.com/kubernetes/kubernetes/pull/99654), [@ankeesler](https://github.com/ankeesler)) -- Cloud-controller-manager: routes controller should not depend on --allocate-node-cidrs ([#97029](https://github.com/kubernetes/kubernetes/pull/97029), [@andrewsykim](https://github.com/andrewsykim)) [SIG Cloud Provider and Testing] -- Cluster Autoscaler version bump to v1.20.0 ([#97011](https://github.com/kubernetes/kubernetes/pull/97011), [@towca](https://github.com/towca)) -- Creating a PVC with DataSource should fail for non-CSI plugins. ([#97086](https://github.com/kubernetes/kubernetes/pull/97086), [@xing-yang](https://github.com/xing-yang)) [SIG Apps and Storage] -- EndpointSlice controller is now less likely to emit FailedToUpdateEndpointSlices events. ([#99345](https://github.com/kubernetes/kubernetes/pull/99345), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- EndpointSlice controllers are less likely to create duplicate EndpointSlices. ([#100103](https://github.com/kubernetes/kubernetes/pull/100103), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- EndpointSliceMirroring controller is now less likely to emit FailedToUpdateEndpointSlices events. ([#99756](https://github.com/kubernetes/kubernetes/pull/99756), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Ensure all vSphere nodes are are tracked by volume attach-detach controller ([#96689](https://github.com/kubernetes/kubernetes/pull/96689), [@gnufied](https://github.com/gnufied)) -- Ensure empty string annotations are copied over in rollbacks. ([#94858](https://github.com/kubernetes/kubernetes/pull/94858), [@waynepeking348](https://github.com/waynepeking348)) -- Ensure only one LoadBalancer rule is created when HA mode is enabled ([#99825](https://github.com/kubernetes/kubernetes/pull/99825), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Ensure that client-go's EventBroadcaster is safe (non-racy) during shutdown. ([#95664](https://github.com/kubernetes/kubernetes/pull/95664), [@DirectXMan12](https://github.com/DirectXMan12)) [SIG API Machinery] -- Explicitly pass `KUBE_BUILD_CONFORMANCE=y` in `package-tarballs` to reenable building the conformance tarballs. ([#100571](https://github.com/kubernetes/kubernetes/pull/100571), [@puerco](https://github.com/puerco)) -- Fix Azure file migration e2e test failure when CSIMigration is turned on. ([#97877](https://github.com/kubernetes/kubernetes/pull/97877), [@andyzhangx](https://github.com/andyzhangx)) -- Fix CSI-migrated inline EBS volumes failing to mount if their volumeID is prefixed by aws:// ([#96821](https://github.com/kubernetes/kubernetes/pull/96821), [@wongma7](https://github.com/wongma7)) [SIG Storage] -- Fix CVE-2020-8555 for Gluster client connections. ([#97922](https://github.com/kubernetes/kubernetes/pull/97922), [@liggitt](https://github.com/liggitt)) [SIG Storage] -- Fix NPE in ephemeral storage eviction ([#98261](https://github.com/kubernetes/kubernetes/pull/98261), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Fix PermissionDenied issue on SMB mount for Windows ([#99550](https://github.com/kubernetes/kubernetes/pull/99550), [@andyzhangx](https://github.com/andyzhangx)) -- Fix bug that would let the Horizontal Pod Autoscaler scale down despite at least one metric being unavailable/invalid ([#99514](https://github.com/kubernetes/kubernetes/pull/99514), [@mikkeloscar](https://github.com/mikkeloscar)) [SIG Apps and Autoscaling] -- Fix cgroup handling for systemd with cgroup v2 ([#98365](https://github.com/kubernetes/kubernetes/pull/98365), [@odinuge](https://github.com/odinuge)) [SIG Node] -- Fix counting error in service/nodeport/loadbalancer quota check ([#97451](https://github.com/kubernetes/kubernetes/pull/97451), [@pacoxu](https://github.com/pacoxu)) [SIG API Machinery, Network and Testing] -- Fix errors when accessing Windows container stats for Dockershim ([#98510](https://github.com/kubernetes/kubernetes/pull/98510), [@jsturtevant](https://github.com/jsturtevant)) [SIG Node and Windows] -- Fix kube-proxy container image architecture for non amd64 images. ([#98526](https://github.com/kubernetes/kubernetes/pull/98526), [@saschagrunert](https://github.com/saschagrunert)) -- Fix missing cadvisor machine metrics. ([#97006](https://github.com/kubernetes/kubernetes/pull/97006), [@lingsamuel](https://github.com/lingsamuel)) [SIG Node] -- Fix nil VMSS name when setting service to auto mode ([#97366](https://github.com/kubernetes/kubernetes/pull/97366), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Fix privileged config of Pod Sandbox which was previously ignored. ([#96877](https://github.com/kubernetes/kubernetes/pull/96877), [@xeniumlee](https://github.com/xeniumlee)) -- Fix the panic when kubelet registers if a node object already exists with no Status.Capacity or Status.Allocatable ([#95269](https://github.com/kubernetes/kubernetes/pull/95269), [@SataQiu](https://github.com/SataQiu)) [SIG Node] -- Fix the regression with the slow pods termination. Before this fix pods may take an additional time to terminate - up to one minute. Reversing the change that ensured that CNI resources cleaned up when the pod is removed on API server. ([#97980](https://github.com/kubernetes/kubernetes/pull/97980), [@SergeyKanzhelev](https://github.com/SergeyKanzhelev)) [SIG Node] -- Fix to recover CSI volumes from certain dangling attachments ([#96617](https://github.com/kubernetes/kubernetes/pull/96617), [@yuga711](https://github.com/yuga711)) [SIG Apps and Storage] -- Fix: azure file latency issue for metadata-heavy workloads ([#97082](https://github.com/kubernetes/kubernetes/pull/97082), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed Cinder volume IDs on OpenStack Train ([#96673](https://github.com/kubernetes/kubernetes/pull/96673), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider] -- Fixed FibreChannel volume plugin corrupting filesystems on detach of multipath volumes. ([#97013](https://github.com/kubernetes/kubernetes/pull/97013), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixed a bug in kubelet that will saturate CPU utilization after containerd got restarted. ([#97174](https://github.com/kubernetes/kubernetes/pull/97174), [@hanlins](https://github.com/hanlins)) [SIG Node] -- Fixed a bug that causes smaller number of conntrack-max being used under CPU static policy. (#99225, @xh4n3) ([#99613](https://github.com/kubernetes/kubernetes/pull/99613), [@xh4n3](https://github.com/xh4n3)) [SIG Network] -- Fixed a bug that on k8s nodes, when the policy of INPUT chain in filter table is not ACCEPT, healthcheck nodeport would not work. - Added iptables rules to allow healthcheck nodeport traffic. ([#97824](https://github.com/kubernetes/kubernetes/pull/97824), [@hanlins](https://github.com/hanlins)) [SIG Network] -- Fixed a bug that the kubelet cannot start on BtrfS. ([#98042](https://github.com/kubernetes/kubernetes/pull/98042), [@gjkim42](https://github.com/gjkim42)) [SIG Node] -- Fixed a race condition on API server startup ensuring previously created webhook configurations are effective before the first write request is admitted. ([#95783](https://github.com/kubernetes/kubernetes/pull/95783), [@roycaihw](https://github.com/roycaihw)) [SIG API Machinery] -- Fixed an issue with garbage collection failing to clean up namespaced children of an object also referenced incorrectly by cluster-scoped children ([#98068](https://github.com/kubernetes/kubernetes/pull/98068), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Apps] -- Fixed authentication_duration_seconds metric scope. Previously, it included whole apiserver request duration which yields inaccurate results. ([#99944](https://github.com/kubernetes/kubernetes/pull/99944), [@marseel](https://github.com/marseel)) -- Fixed bug in CPUManager with race on container map access ([#97427](https://github.com/kubernetes/kubernetes/pull/97427), [@klueska](https://github.com/klueska)) [SIG Node] -- Fixed bug that caused cAdvisor to incorrectly detect single-socket multi-NUMA topology. ([#99315](https://github.com/kubernetes/kubernetes/pull/99315), [@iwankgb](https://github.com/iwankgb)) [SIG Node] -- Fixed cleanup of block devices when /var/lib/kubelet is a symlink. ([#96889](https://github.com/kubernetes/kubernetes/pull/96889), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixed no effect namespace when exposing deployment with --dry-run=client. ([#97492](https://github.com/kubernetes/kubernetes/pull/97492), [@masap](https://github.com/masap)) [SIG CLI] -- Fixed provisioning of Cinder volumes migrated to CSI when StorageClass with AllowedTopologies was used. ([#98311](https://github.com/kubernetes/kubernetes/pull/98311), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixes a bug of identifying the correct containerd process. ([#97888](https://github.com/kubernetes/kubernetes/pull/97888), [@pacoxu](https://github.com/pacoxu)) -- Fixes add-on manager leader election to use leases instead of endpoints, similar to what kube-controller-manager does in 1.20 ([#98968](https://github.com/kubernetes/kubernetes/pull/98968), [@liggitt](https://github.com/liggitt)) -- Fixes connection errors when using `--volume-host-cidr-denylist` or `--volume-host-allow-local-loopback` ([#98436](https://github.com/kubernetes/kubernetes/pull/98436), [@liggitt](https://github.com/liggitt)) [SIG Network and Storage] -- Fixes problem where invalid selector on `PodDisruptionBudget` leads to a nil pointer dereference that causes the Controller manager to crash loop. ([#98750](https://github.com/kubernetes/kubernetes/pull/98750), [@mortent](https://github.com/mortent)) -- Fixes spurious errors about IPv6 in `kube-proxy` logs on nodes with IPv6 disabled. ([#99127](https://github.com/kubernetes/kubernetes/pull/99127), [@danwinship](https://github.com/danwinship)) -- Fixing a bug where a failed node may not have the NoExecute taint set correctly ([#96876](https://github.com/kubernetes/kubernetes/pull/96876), [@howieyuen](https://github.com/howieyuen)) [SIG Apps and Node] -- GCE Internal LoadBalancer sync loop will now release the ILB IP address upon sync failure. An error in ILB forwarding rule creation will no longer leak IP addresses. ([#97740](https://github.com/kubernetes/kubernetes/pull/97740), [@prameshj](https://github.com/prameshj)) [SIG Cloud Provider and Network] -- Ignore update pod with no new images in alwaysPullImages admission controller ([#96668](https://github.com/kubernetes/kubernetes/pull/96668), [@pacoxu](https://github.com/pacoxu)) [SIG Apps, Auth and Node] -- Improve speed of vSphere PV provisioning and reduce number of API calls ([#100054](https://github.com/kubernetes/kubernetes/pull/100054), [@gnufied](https://github.com/gnufied)) [SIG Cloud Provider and Storage] -- KUBECTL_EXTERNAL_DIFF now accepts equal sign for additional parameters. ([#98158](https://github.com/kubernetes/kubernetes/pull/98158), [@dougsland](https://github.com/dougsland)) [SIG CLI] -- Kube-apiserver: an update of a pod with a generic ephemeral volume dropped that volume if the feature had been disabled since creating the pod with such a volume ([#99446](https://github.com/kubernetes/kubernetes/pull/99446), [@pohly](https://github.com/pohly)) [SIG Apps, Node and Storage] -- Kube-proxy: remove deprecated --cleanup-ipvs flag of kube-proxy, and make --cleanup flag always to flush IPVS ([#97336](https://github.com/kubernetes/kubernetes/pull/97336), [@maaoBit](https://github.com/maaoBit)) [SIG Network] -- Kubeadm installs etcd v3.4.13 when creating cluster v1.19 ([#97244](https://github.com/kubernetes/kubernetes/pull/97244), [@pacoxu](https://github.com/pacoxu)) -- Kubeadm: Fixes a kubeadm upgrade bug that could cause a custom CoreDNS configuration to be replaced with the default. ([#97016](https://github.com/kubernetes/kubernetes/pull/97016), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Kubeadm: Some text in the `kubeadm upgrade plan` output has changed. If you have scripts or other automation that parses this output, please review these changes and update your scripts to account for the new output. ([#98728](https://github.com/kubernetes/kubernetes/pull/98728), [@stmcginnis](https://github.com/stmcginnis)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug in the host memory detection code on 32bit Linux platforms ([#97403](https://github.com/kubernetes/kubernetes/pull/97403), [@abelbarrera15](https://github.com/abelbarrera15)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug where "kubeadm join" would not properly handle missing names for existing etcd members. ([#97372](https://github.com/kubernetes/kubernetes/pull/97372), [@ihgann](https://github.com/ihgann)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug where "kubeadm upgrade" commands can fail if CoreDNS v1.8.0 is installed. ([#97919](https://github.com/kubernetes/kubernetes/pull/97919), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug where external credentials in an existing admin.conf prevented the CA certificate to be written in the cluster-info ConfigMap. ([#98882](https://github.com/kubernetes/kubernetes/pull/98882), [@kvaps](https://github.com/kvaps)) [SIG Cluster Lifecycle] -- Kubeadm: get k8s CI version markers from k8s infra bucket ([#98836](https://github.com/kubernetes/kubernetes/pull/98836), [@hasheddan](https://github.com/hasheddan)) [SIG Cluster Lifecycle and Release] -- Kubeadm: skip validating pod subnet against node-cidr-mask when allocate-node-cidrs is set to be false ([#98984](https://github.com/kubernetes/kubernetes/pull/98984), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubectl logs: `--ignore-errors` is now honored by all containers, maintaining consistency with parallelConsumeRequest behavior. ([#97686](https://github.com/kubernetes/kubernetes/pull/97686), [@wzshiming](https://github.com/wzshiming)) -- Kubectl-convert: Fix `no kind "Ingress" is registered for version` error ([#97754](https://github.com/kubernetes/kubernetes/pull/97754), [@wzshiming](https://github.com/wzshiming)) -- Kubectl: Fixed panic when describing an ingress backend without an API Group ([#100505](https://github.com/kubernetes/kubernetes/pull/100505), [@lauchokyip](https://github.com/lauchokyip)) [SIG CLI] -- Kubelet now cleans up orphaned volume directories automatically ([#95301](https://github.com/kubernetes/kubernetes/pull/95301), [@lorenz](https://github.com/lorenz)) [SIG Node and Storage] -- Kubelet.exe on Windows now checks that the process running as administrator and the executing user account is listed in the built-in administrators group. This is the equivalent to checking the process is running as uid 0. ([#96616](https://github.com/kubernetes/kubernetes/pull/96616), [@perithompson](https://github.com/perithompson)) [SIG Node and Windows] -- Kubelet: Fix kubelet from panic after getting the wrong signal ([#98200](https://github.com/kubernetes/kubernetes/pull/98200), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Kubelet: Fix repeatedly acquiring the inhibit lock ([#98088](https://github.com/kubernetes/kubernetes/pull/98088), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Kubelet: Fixed the bug of getting the number of cpu when the number of cpu logical processors is more than 64 in windows ([#97378](https://github.com/kubernetes/kubernetes/pull/97378), [@hwdef](https://github.com/hwdef)) [SIG Node and Windows] -- Limits lease to have 1000 maximum attached objects. ([#98257](https://github.com/kubernetes/kubernetes/pull/98257), [@lingsamuel](https://github.com/lingsamuel)) -- Mitigate CVE-2020-8555 for kube-up using GCE by preventing local loopback folume hosts. ([#97934](https://github.com/kubernetes/kubernetes/pull/97934), [@mattcary](https://github.com/mattcary)) [SIG Cloud Provider and Storage] -- On single-stack configured (IPv4 or IPv6, but not both) clusters, Services which are both headless (no clusterIP) and selectorless (empty or undefined selector) will report `ipFamilyPolicy RequireDualStack` and will have entries in `ipFamilies[]` for both IPv4 and IPv6. This is a change from alpha, but does not have any impact on the manually-specified Endpoints and EndpointSlices for the Service. ([#99555](https://github.com/kubernetes/kubernetes/pull/99555), [@thockin](https://github.com/thockin)) [SIG Apps and Network] -- Performance regression #97685 has been fixed. ([#97860](https://github.com/kubernetes/kubernetes/pull/97860), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) [SIG API Machinery] -- Pod Log stats for windows now reports metrics ([#99221](https://github.com/kubernetes/kubernetes/pull/99221), [@jsturtevant](https://github.com/jsturtevant)) [SIG Node, Storage, Testing and Windows] -- Pod status updates faster when reacting on probe results. The first readiness probe will be called faster when startup probes succeeded, which will make Pod status as ready faster. ([#98376](https://github.com/kubernetes/kubernetes/pull/98376), [@matthyx](https://github.com/matthyx)) -- Readjust `kubelet_containers_per_pod_count` buckets to only show metrics greater than 1. ([#98169](https://github.com/kubernetes/kubernetes/pull/98169), [@wawa0210](https://github.com/wawa0210)) -- Remove CSI topology from migrated in-tree gcepd volume. ([#97823](https://github.com/kubernetes/kubernetes/pull/97823), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Cloud Provider and Storage] -- Requests with invalid timeout parameters in the request URL now appear in the audit log correctly. ([#96901](https://github.com/kubernetes/kubernetes/pull/96901), [@tkashem](https://github.com/tkashem)) [SIG API Machinery and Testing] -- Resolve a "concurrent map read and map write" crashing error in the kubelet ([#95111](https://github.com/kubernetes/kubernetes/pull/95111), [@choury](https://github.com/choury)) [SIG Node] -- Resolves spurious `Failed to list *v1.Secret` or `Failed to list *v1.ConfigMap` messages in kubelet logs. ([#99538](https://github.com/kubernetes/kubernetes/pull/99538), [@liggitt](https://github.com/liggitt)) [SIG Auth and Node] -- ResourceQuota of an entity now inclusively calculate Pod overhead ([#99600](https://github.com/kubernetes/kubernetes/pull/99600), [@gjkim42](https://github.com/gjkim42)) -- Return zero time (midnight on Jan. 1, 1970) instead of negative number when reporting startedAt and finishedAt of the not started or a running Pod when using `dockershim` as a runtime. ([#99585](https://github.com/kubernetes/kubernetes/pull/99585), [@Iceber](https://github.com/Iceber)) -- Reverts breaking change to inline AzureFile volumes; referenced secrets are now searched for in the same namespace as the pod as in previous releases. ([#100563](https://github.com/kubernetes/kubernetes/pull/100563), [@msau42](https://github.com/msau42)) -- Scores from InterPodAffinity have stronger differentiation. ([#98096](https://github.com/kubernetes/kubernetes/pull/98096), [@leileiwan](https://github.com/leileiwan)) [SIG Scheduling] -- Specifying the KUBE_TEST_REPO environment variable when e2e tests are executed will instruct the test infrastructure to load that image from a location within the specified repo, using a predefined pattern. ([#93510](https://github.com/kubernetes/kubernetes/pull/93510), [@smarterclayton](https://github.com/smarterclayton)) [SIG Testing] -- Static pods will be deleted gracefully. ([#98103](https://github.com/kubernetes/kubernetes/pull/98103), [@gjkim42](https://github.com/gjkim42)) [SIG Node] -- Sync node status during kubelet node shutdown. - Adds an pod admission handler that rejects new pods when the node is in progress of shutting down. ([#98005](https://github.com/kubernetes/kubernetes/pull/98005), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- The calculation of pod UIDs for static pods has changed to ensure each static pod gets a unique value - this will cause all static pod containers to be recreated/restarted if an in-place kubelet upgrade from 1.20 to 1.21 is performed. Note that draining pods before upgrading the kubelet across minor versions is the supported upgrade path. ([#87461](https://github.com/kubernetes/kubernetes/pull/87461), [@bboreham](https://github.com/bboreham)) [SIG Node] -- The maximum number of ports allowed in EndpointSlices has been increased from 100 to 20,000 ([#99795](https://github.com/kubernetes/kubernetes/pull/99795), [@robscott](https://github.com/robscott)) [SIG Network] -- Truncates a message if it hits the `NoteLengthLimit` when the scheduler records an event for the pod that indicates the pod has failed to schedule. ([#98715](https://github.com/kubernetes/kubernetes/pull/98715), [@carlory](https://github.com/carlory)) -- Updated k8s.gcr.io/ingress-gce-404-server-with-metrics-amd64 to a version that serves /metrics endpoint on a non-default port. ([#97621](https://github.com/kubernetes/kubernetes/pull/97621), [@vbannai](https://github.com/vbannai)) [SIG Cloud Provider] -- Updates the commands ` - - kubectl kustomize {arg} - - kubectl apply -k {arg} - `to use same code as kustomize CLI [v4.0.5](https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.0.5) ([#98946](https://github.com/kubernetes/kubernetes/pull/98946), [@monopole](https://github.com/monopole)) -- Use force unmount for NFS volumes if regular mount fails after 1 minute timeout ([#96844](https://github.com/kubernetes/kubernetes/pull/96844), [@gnufied](https://github.com/gnufied)) [SIG Storage] -- Use network.Interface.VirtualMachine.ID to get the binded VM - Skip standalone VM when reconciling LoadBalancer ([#97635](https://github.com/kubernetes/kubernetes/pull/97635), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Using exec auth plugins with kubectl no longer results in warnings about constructing many client instances from the same exec auth config. ([#97857](https://github.com/kubernetes/kubernetes/pull/97857), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Auth] -- When a CNI plugin returns dual-stack pod IPs, kubelet will now try to respect the - "primary IP family" of the cluster by picking a primary pod IP of the same family - as the (primary) node IP, rather than assuming that the CNI plugin returned the IPs - in the order the administrator wanted (since some CNI plugins don't allow - configuring this). ([#97979](https://github.com/kubernetes/kubernetes/pull/97979), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] -- When dynamically provisioning Azure File volumes for a premium account, the requested size will be set to 100GB if the request is initially lower than this value to accommodate Azure File requirements. ([#99122](https://github.com/kubernetes/kubernetes/pull/99122), [@huffmanca](https://github.com/huffmanca)) [SIG Cloud Provider and Storage] -- When using `Containerd` on Windows, the `C:\Windows\System32\drivers\etc\hosts` file will now be managed by kubelet. ([#83730](https://github.com/kubernetes/kubernetes/pull/83730), [@claudiubelu](https://github.com/claudiubelu)) -- `VolumeBindingArgs` now allow `BindTimeoutSeconds` to be set as zero, while the value zero indicates no waiting for the checking of volume binding operation. ([#99835](https://github.com/kubernetes/kubernetes/pull/99835), [@chendave](https://github.com/chendave)) [SIG Scheduling and Storage] -- `kubectl exec` and `kubectl attach` now honor the `--quiet` flag which suppresses output from the local binary that could be confused by a script with the remote command output (all non-failure output is hidden). In addition, print inline with exec and attach the list of alternate containers when we default to the first spec.container. ([#99004](https://github.com/kubernetes/kubernetes/pull/99004), [@smarterclayton](https://github.com/smarterclayton)) [SIG CLI] - -### Other (Cleanup or Flake) - -- APIs for kubelet annotations and labels from `k8s.io/kubernetes/pkg/kubelet/apis` are now moved under `k8s.io/kubelet/pkg/apis/` ([#98931](https://github.com/kubernetes/kubernetes/pull/98931), [@michaelbeaumont](https://github.com/michaelbeaumont)) -- Apiserver_request_duration_seconds is promoted to stable status. ([#99925](https://github.com/kubernetes/kubernetes/pull/99925), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Instrumentation and Testing] -- Bump github.com/Azure/go-autorest/autorest to v0.11.12 ([#97033](https://github.com/kubernetes/kubernetes/pull/97033), [@patrickshan](https://github.com/patrickshan)) [SIG API Machinery, CLI, Cloud Provider and Cluster Lifecycle] -- Clients required to use go1.15.8+ or go1.16+ if kube-apiserver has the goaway feature enabled to avoid unexpected data race condition. ([#98809](https://github.com/kubernetes/kubernetes/pull/98809), [@answer1991](https://github.com/answer1991)) -- Delete deprecated `service.beta.kubernetes.io/azure-load-balancer-mixed-protocols` mixed procotol annotation in favor of the MixedProtocolLBService feature ([#97096](https://github.com/kubernetes/kubernetes/pull/97096), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- EndpointSlice generation is now incremented when labels change. ([#99750](https://github.com/kubernetes/kubernetes/pull/99750), [@robscott](https://github.com/robscott)) [SIG Network] -- Featuregate AllowInsecureBackendProxy graduates to GA and unconditionally enabled. ([#99658](https://github.com/kubernetes/kubernetes/pull/99658), [@deads2k](https://github.com/deads2k)) -- Increase timeout for pod lifecycle test to reach pod status=ready ([#96691](https://github.com/kubernetes/kubernetes/pull/96691), [@hh](https://github.com/hh)) -- Increased `CSINodeIDMaxLength` from 128 bytes to 192 bytes. ([#98753](https://github.com/kubernetes/kubernetes/pull/98753), [@Jiawei0227](https://github.com/Jiawei0227)) -- Kube-apiserver: The OIDC authenticator no longer waits 10 seconds before attempting to fetch the metadata required to verify tokens. ([#97693](https://github.com/kubernetes/kubernetes/pull/97693), [@enj](https://github.com/enj)) [SIG API Machinery and Auth] -- Kube-proxy: Traffic from the cluster directed to ExternalIPs is always sent directly to the Service. ([#96296](https://github.com/kubernetes/kubernetes/pull/96296), [@aojea](https://github.com/aojea)) [SIG Network and Testing] -- Kubeadm: change the default image repository for CI images from 'gcr.io/kubernetes-ci-images' to 'gcr.io/k8s-staging-ci-images' ([#97087](https://github.com/kubernetes/kubernetes/pull/97087), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubectl: The deprecated `kubectl alpha debug` command is removed. Use `kubectl debug` instead. ([#98111](https://github.com/kubernetes/kubernetes/pull/98111), [@pandaamanda](https://github.com/pandaamanda)) [SIG CLI] -- Kubelet command line flags related to dockershim are now showing deprecation message as they will be removed along with dockershim in future release. ([#98730](https://github.com/kubernetes/kubernetes/pull/98730), [@dims](https://github.com/dims)) -- Official support to build kubernetes with docker-machine / remote docker is removed. This change does not affect building kubernetes with docker locally. ([#97618](https://github.com/kubernetes/kubernetes/pull/97618), [@jherrera123](https://github.com/jherrera123)) [SIG Release and Testing] -- Process start time on Windows now uses current process information ([#97491](https://github.com/kubernetes/kubernetes/pull/97491), [@jsturtevant](https://github.com/jsturtevant)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Windows] -- Resolves flakes in the Ingress conformance tests due to conflicts with controllers updating the Ingress object ([#98430](https://github.com/kubernetes/kubernetes/pull/98430), [@liggitt](https://github.com/liggitt)) [SIG Network and Testing] -- The `AttachVolumeLimit` feature gate (GA since v1.17) has been removed and now unconditionally enabled. ([#96539](https://github.com/kubernetes/kubernetes/pull/96539), [@ialidzhikov](https://github.com/ialidzhikov)) -- The `CSINodeInfo` feature gate that is GA since v1.17 is unconditionally enabled, and can no longer be specified via the `--feature-gates` argument. ([#96561](https://github.com/kubernetes/kubernetes/pull/96561), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Apps, Auth, Scheduling, Storage and Testing] -- The `apiserver_request_total` metric is promoted to stable status and no longer has a content-type dimensions, so any alerts/charts which presume the existence of this will fail. This is however, unlikely to be the case since it was effectively an unbounded dimension in the first place. ([#99788](https://github.com/kubernetes/kubernetes/pull/99788), [@logicalhan](https://github.com/logicalhan)) -- The default delegating authorization options now allow unauthenticated access to healthz, readyz, and livez. A system:masters user connecting to an authz delegator will not perform an authz check. ([#98325](https://github.com/kubernetes/kubernetes/pull/98325), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth, Cloud Provider and Scheduling] -- The deprecated feature gates `CSIDriverRegistry`, `BlockVolume` and `CSIBlockVolume` are now unconditionally enabled and can no longer be specified in component invocations. ([#98021](https://github.com/kubernetes/kubernetes/pull/98021), [@gavinfish](https://github.com/gavinfish)) [SIG Storage] -- The deprecated feature gates `RotateKubeletClientCertificate`, `AttachVolumeLimit`, `VolumePVCDataSource` and `EvenPodsSpread` are now unconditionally enabled and can no longer be specified in component invocations. ([#97306](https://github.com/kubernetes/kubernetes/pull/97306), [@gavinfish](https://github.com/gavinfish)) [SIG Node, Scheduling and Storage] -- The e2e suite can be instructed not to wait for pods in kube-system to be ready or for all nodes to be ready by passing `--allowed-not-ready-nodes=-1` when invoking the e2e.test program. This allows callers to run subsets of the e2e suite in scenarios other than perfectly healthy clusters. ([#98781](https://github.com/kubernetes/kubernetes/pull/98781), [@smarterclayton](https://github.com/smarterclayton)) [SIG Testing] -- The feature gates `WindowsGMSA` and `WindowsRunAsUserName` that are GA since v1.18 are now removed. ([#96531](https://github.com/kubernetes/kubernetes/pull/96531), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Node and Windows] -- The new `-gce-zones` flag on the `e2e.test` binary instructs tests that check for information about how the cluster interacts with the cloud to limit their queries to the provided zone list. If not specified, the current behavior of asking the cloud provider for all available zones in multi zone clusters is preserved. ([#98787](https://github.com/kubernetes/kubernetes/pull/98787), [@smarterclayton](https://github.com/smarterclayton)) [SIG API Machinery, Cluster Lifecycle and Testing] -- Update cri-tools to [v1.20.0](https://github.com/kubernetes-sigs/cri-tools/releases/tag/v1.20.0) ([#97967](https://github.com/kubernetes/kubernetes/pull/97967), [@rajibmitra](https://github.com/rajibmitra)) [SIG Cloud Provider] -- Windows nodes on GCE will take longer to start due to dependencies installed at node creation time. ([#98284](https://github.com/kubernetes/kubernetes/pull/98284), [@pjh](https://github.com/pjh)) [SIG Cloud Provider] -- `apiserver_storage_objects` (a newer version of `etcd_object_counts`) is promoted and marked as stable. ([#100082](https://github.com/kubernetes/kubernetes/pull/100082), [@logicalhan](https://github.com/logicalhan)) - -### Uncategorized - -- GCE L4 Loadbalancers now handle > 5 ports in service spec correctly. ([#99595](https://github.com/kubernetes/kubernetes/pull/99595), [@prameshj](https://github.com/prameshj)) [SIG Cloud Provider] -- The DownwardAPIHugePages feature is beta. Users may use the feature if all workers in their cluster are min 1.20 version. The feature will be enabled by default in all installations in 1.22. ([#99610](https://github.com/kubernetes/kubernetes/pull/99610), [@derekwaynecarr](https://github.com/derekwaynecarr)) [SIG Node] - -## Dependencies - -### Added -- github.com/go-errors/errors: [v1.0.1](https://github.com/go-errors/errors/tree/v1.0.1) -- github.com/gobuffalo/here: [v0.6.0](https://github.com/gobuffalo/here/tree/v0.6.0) -- github.com/google/shlex: [e7afc7f](https://github.com/google/shlex/tree/e7afc7f) -- github.com/markbates/pkger: [v0.17.1](https://github.com/markbates/pkger/tree/v0.17.1) -- github.com/moby/spdystream: [v0.2.0](https://github.com/moby/spdystream/tree/v0.2.0) -- github.com/monochromegane/go-gitignore: [205db1a](https://github.com/monochromegane/go-gitignore/tree/205db1a) -- github.com/niemeyer/pretty: [a10e7ca](https://github.com/niemeyer/pretty/tree/a10e7ca) -- github.com/xlab/treeprint: [a009c39](https://github.com/xlab/treeprint/tree/a009c39) -- go.starlark.net: 8dd3e2e -- golang.org/x/term: 6a3ed07 -- sigs.k8s.io/kustomize/api: v0.8.5 -- sigs.k8s.io/kustomize/cmd/config: v0.9.7 -- sigs.k8s.io/kustomize/kustomize/v4: v4.0.5 -- sigs.k8s.io/kustomize/kyaml: v0.10.15 - -### Changed -- dmitri.shuralyov.com/gpu/mtl: 666a987 → 28db891 -- github.com/Azure/go-autorest/autorest: [v0.11.1 → v0.11.12](https://github.com/Azure/go-autorest/autorest/compare/v0.11.1...v0.11.12) -- github.com/NYTimes/gziphandler: [56545f4 → v1.1.1](https://github.com/NYTimes/gziphandler/compare/56545f4...v1.1.1) -- github.com/cilium/ebpf: [1c8d4c9 → v0.2.0](https://github.com/cilium/ebpf/compare/1c8d4c9...v0.2.0) -- github.com/container-storage-interface/spec: [v1.2.0 → v1.3.0](https://github.com/container-storage-interface/spec/compare/v1.2.0...v1.3.0) -- github.com/containerd/console: [v1.0.0 → v1.0.1](https://github.com/containerd/console/compare/v1.0.0...v1.0.1) -- github.com/containerd/containerd: [v1.4.1 → v1.4.4](https://github.com/containerd/containerd/compare/v1.4.1...v1.4.4) -- github.com/coredns/corefile-migration: [v1.0.10 → v1.0.11](https://github.com/coredns/corefile-migration/compare/v1.0.10...v1.0.11) -- github.com/creack/pty: [v1.1.7 → v1.1.11](https://github.com/creack/pty/compare/v1.1.7...v1.1.11) -- github.com/docker/docker: [bd33bbf → v20.10.2+incompatible](https://github.com/docker/docker/compare/bd33bbf...v20.10.2) -- github.com/go-logr/logr: [v0.2.0 → v0.4.0](https://github.com/go-logr/logr/compare/v0.2.0...v0.4.0) -- github.com/go-openapi/spec: [v0.19.3 → v0.19.5](https://github.com/go-openapi/spec/compare/v0.19.3...v0.19.5) -- github.com/go-openapi/strfmt: [v0.19.3 → v0.19.5](https://github.com/go-openapi/strfmt/compare/v0.19.3...v0.19.5) -- github.com/go-openapi/validate: [v0.19.5 → v0.19.8](https://github.com/go-openapi/validate/compare/v0.19.5...v0.19.8) -- github.com/gogo/protobuf: [v1.3.1 → v1.3.2](https://github.com/gogo/protobuf/compare/v1.3.1...v1.3.2) -- github.com/golang/mock: [v1.4.1 → v1.4.4](https://github.com/golang/mock/compare/v1.4.1...v1.4.4) -- github.com/google/cadvisor: [v0.38.5 → v0.39.0](https://github.com/google/cadvisor/compare/v0.38.5...v0.39.0) -- github.com/heketi/heketi: [c2e2a4a → v10.2.0+incompatible](https://github.com/heketi/heketi/compare/c2e2a4a...v10.2.0) -- github.com/kisielk/errcheck: [v1.2.0 → v1.5.0](https://github.com/kisielk/errcheck/compare/v1.2.0...v1.5.0) -- github.com/konsorten/go-windows-terminal-sequences: [v1.0.3 → v1.0.2](https://github.com/konsorten/go-windows-terminal-sequences/compare/v1.0.3...v1.0.2) -- github.com/kr/text: [v0.1.0 → v0.2.0](https://github.com/kr/text/compare/v0.1.0...v0.2.0) -- github.com/mattn/go-runewidth: [v0.0.2 → v0.0.7](https://github.com/mattn/go-runewidth/compare/v0.0.2...v0.0.7) -- github.com/miekg/dns: [v1.1.4 → v1.1.35](https://github.com/miekg/dns/compare/v1.1.4...v1.1.35) -- github.com/moby/sys/mountinfo: [v0.1.3 → v0.4.0](https://github.com/moby/sys/mountinfo/compare/v0.1.3...v0.4.0) -- github.com/moby/term: [672ec06 → df9cb8a](https://github.com/moby/term/compare/672ec06...df9cb8a) -- github.com/mrunalp/fileutils: [abd8a0e → v0.5.0](https://github.com/mrunalp/fileutils/compare/abd8a0e...v0.5.0) -- github.com/olekukonko/tablewriter: [a0225b3 → v0.0.4](https://github.com/olekukonko/tablewriter/compare/a0225b3...v0.0.4) -- github.com/opencontainers/runc: [v1.0.0-rc92 → v1.0.0-rc93](https://github.com/opencontainers/runc/compare/v1.0.0-rc92...v1.0.0-rc93) -- github.com/opencontainers/runtime-spec: [4d89ac9 → e6143ca](https://github.com/opencontainers/runtime-spec/compare/4d89ac9...e6143ca) -- github.com/opencontainers/selinux: [v1.6.0 → v1.8.0](https://github.com/opencontainers/selinux/compare/v1.6.0...v1.8.0) -- github.com/sergi/go-diff: [v1.0.0 → v1.1.0](https://github.com/sergi/go-diff/compare/v1.0.0...v1.1.0) -- github.com/sirupsen/logrus: [v1.6.0 → v1.7.0](https://github.com/sirupsen/logrus/compare/v1.6.0...v1.7.0) -- github.com/syndtr/gocapability: [d983527 → 42c35b4](https://github.com/syndtr/gocapability/compare/d983527...42c35b4) -- github.com/willf/bitset: [d5bec33 → v1.1.11](https://github.com/willf/bitset/compare/d5bec33...v1.1.11) -- github.com/yuin/goldmark: [v1.1.27 → v1.2.1](https://github.com/yuin/goldmark/compare/v1.1.27...v1.2.1) -- golang.org/x/crypto: 7f63de1 → 5ea612d -- golang.org/x/exp: 6cc2880 → 85be41e -- golang.org/x/mobile: d2bd2a2 → e6ae53a -- golang.org/x/mod: v0.3.0 → ce943fd -- golang.org/x/net: 69a7880 → 3d97a24 -- golang.org/x/sync: cd5d95a → 67f06af -- golang.org/x/sys: 5cba982 → a50acf3 -- golang.org/x/time: 3af7569 → f8bda1e -- golang.org/x/tools: c1934b7 → v0.1.0 -- gopkg.in/check.v1: 41f04d3 → 8fa4692 -- gopkg.in/yaml.v2: v2.2.8 → v2.4.0 -- gotest.tools/v3: v3.0.2 → v3.0.3 -- k8s.io/gengo: 83324d8 → b6c5ce2 -- k8s.io/klog/v2: v2.4.0 → v2.8.0 -- k8s.io/kube-openapi: d219536 → 591a79e -- k8s.io/system-validators: v1.2.0 → v1.4.0 -- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.0.14 → v0.0.15 -- sigs.k8s.io/structured-merge-diff/v4: v4.0.2 → v4.1.0 - -### Removed -- github.com/codegangsta/negroni: [v1.0.0](https://github.com/codegangsta/negroni/tree/v1.0.0) -- github.com/docker/spdystream: [449fdfc](https://github.com/docker/spdystream/tree/449fdfc) -- github.com/golangplus/bytes: [45c989f](https://github.com/golangplus/bytes/tree/45c989f) -- github.com/golangplus/fmt: [2a5d6d7](https://github.com/golangplus/fmt/tree/2a5d6d7) -- github.com/gorilla/context: [v1.1.1](https://github.com/gorilla/context/tree/v1.1.1) -- github.com/kr/pty: [v1.1.5](https://github.com/kr/pty/tree/v1.1.5) -- rsc.io/quote/v3: v3.1.0 -- rsc.io/sampler: v1.3.0 -- sigs.k8s.io/kustomize: v2.0.3+incompatible - - - -# v1.21.0-rc.0 - - -## Downloads for v1.21.0-rc.0 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes.tar.gz) | ef53a41955d6f8a8d2a94636af98b55d633fb8a5081517559039e019b3dd65c9d10d4e7fa297ab88a7865d772f3eecf72e7b0eeba5e87accb4000c91da33e148 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-src.tar.gz) | 9335a01b50d351776d3b8d00c07a5233844c51d307e361fa7e55a0620c1cb8b699e43eacf45ae9cafd8cbc44752e6987450c528a5bede8204706b7673000b5fc - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-darwin-amd64.tar.gz) | 964135e43234cee275c452f5f06fb6d2bcd3cff3211a0d50fa35fff1cc4446bc5a0ac5125405dadcfb6596cb152afe29fabf7aad5b35b100e1288db890b70f8e -[kubernetes-client-darwin-arm64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-darwin-arm64.tar.gz) | 50d782abaa4ded5e706b3192d87effa953ceabbd7d91e3d48b0c1fa2206a1963a909c14b923560f5d09cac2c7392edc5f38a13fbf1e9a40bc94e3afe8de10622 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-linux-386.tar.gz) | 72af5562f24184a2d7c27f95fa260470da979fbdcacce39a372f8f3add2991d7af8bc78f4e1dbe7a0f97e3f559b149b72a51491d3b13008da81872ee50f02f37 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-linux-amd64.tar.gz) | 1eddb8f6b51e005bc6f7b519d036cbe3d2f6d97dbf7d212dd933fb56354c29f222d050519115a9bcf94555aef095db7cf763469e47bb4ae3c6c07f97edf437cb -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-linux-arm.tar.gz) | 670f8ca60ea3cf0bb3262a772715e0ea735fccda6a92f3186299361dc455b304ae177d4017e0b67bbfa4a95e36f4cc3f7eb335e2a5130c93ac3fba2aff4519bf -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-linux-arm64.tar.gz) | a69a47907cff138ba393d8c87044fd95d97f3ca8f35d301b50742e2801ad7c229d99d6667971091f65825eb51854d585be0dd7421670110b1aa567e67e7ab4b3 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-linux-ppc64le.tar.gz) | b929feade94b71c81908abdcd4343b1e1e20098fd65e10d4d02585ad649d292d06f52c7ddc349efa188ce5b093e703c7aa9582c6ae5a69699adb87bbf5350243 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-linux-s390x.tar.gz) | 899d1470e412282cf289d8e24806d1a08c62ec0151f345ae3c9e497cc7bc0feab76498de4dd897d6adcdfa0c422e6b1a37e25d928669030f53457fd69d6e7df7 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-windows-386.tar.gz) | 9f0bc90a269eabd06fe4f637b5172a3a6a7d3de26de0d66504c2e1f2093083c584ea39031db6075a7da7a86b98c48bed25aa88d4ac09060b38692c6a5b637078 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-client-windows-amd64.tar.gz) | 05c8cc10188a1294b0d51d052942742a9b26411a08ec73494bf0e728a8a167e0a7863bdfc8864e76a371b584380098381805341e18b4b283b5d0cf298d5f7c7c - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-server-linux-amd64.tar.gz) | 355f278728ef7ac7eb2f5568c99c1429543c6302bbd0ed3bd0378c08116075e56ae850a49241313f078e2392702672ec6c9b70c8d97b4f2f5f4bee36828a63ba -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-server-linux-arm.tar.gz) | 9ac02c2825e2fd4e92f0c0f67180c67c24e32841ccbabc82284bf6293727ffecfae65e8a42b527c2a7ca482752384928eb65c2a1706144ae7819a6b3a1ab291c -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-server-linux-arm64.tar.gz) | eb412453da03c82a9248412c8ccf4d4baa1fbfa81edd8d4f81d28969b40a3727e18934accc68f643d253446c58ffd2623292402495480b3d4b2a837b5318b957 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-server-linux-ppc64le.tar.gz) | 07da2812c35bbc427ee5b4a0b601c3ae271e0d50ab0dd4c5c25399f43506fa2a187642eb9d4d2085df7b90264d48ea2f31088af87d9efa7eb2e87f91e1fdbde4 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-server-linux-s390x.tar.gz) | 3b79442a3d6e389c4ff105922a8e49994c0b6c088d2c501bd8c78d9f9e814902f5bb72c8f9c89380b750fda9b3a336759b9b68f11d70bef4f0e984564a95c29e - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-node-linux-amd64.tar.gz) | f12edf1faf5f07de1ebc5a8626601c12927902e10aca3f11e398637382fdf55365dbd9a0ef38858553fb7569495ae2cf68f155dd2e49b85b27d76fb599bb92e4 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-node-linux-arm.tar.gz) | 4fba8fc4e2102f07fb778aab597ec7231ea65c35e1aa618fe98b707b64a931237bd842c173e9120326e4d9deb983bb3917176762bba2212612bbc09d6e2105c4 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-node-linux-arm64.tar.gz) | a2e1be5459a8346839970faf4e7ebdb8ab9f3273e02babf1f3199b06bdb67434a2d18fcd1628cf1b989756e99d8dad6624a455b9db11d50f51f509f4df5c27da -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-node-linux-ppc64le.tar.gz) | 16d2c1cc295474fc49fe9a827ddd73e81bdd6b76af7074987b90250023f99b6d70bf474e204c7d556802111984fcb3a330740b150bdc7970d0e3634eb94a1665 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-node-linux-s390x.tar.gz) | 9dc6faa6cd007b13dfce703f3e271f80adcc4e029c90a4a9b4f2f143b9756f2893f8af3d7c2cf813f2bd6731cffd87d15d4229456c1685939f65bf467820ec6e -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-rc.0/kubernetes-node-windows-amd64.tar.gz) | f8bac2974c9142bfb80cd5eadeda79f79f27b78899a4e6e71809b795c708824ba442be83fdbadb98e01c3823dd8350776358258a205e851ed045572923cacba7 - -## Changelog since v1.21.0-beta.1 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - Migrated pkg/kubelet/cm/cpuset/cpuset.go to structured logging. Exit code changed from 255 to 1. ([#100007](https://github.com/kubernetes/kubernetes/pull/100007), [@utsavoza](https://github.com/utsavoza)) [SIG Instrumentation and Node] - -## Changes by Kind - -### API Change - -- Add Probe-level terminationGracePeriodSeconds field ([#99375](https://github.com/kubernetes/kubernetes/pull/99375), [@ehashman](https://github.com/ehashman)) [SIG API Machinery, Apps, Node and Testing] -- CSIServiceAccountToken is Beta now ([#99298](https://github.com/kubernetes/kubernetes/pull/99298), [@zshihang](https://github.com/zshihang)) [SIG Auth, Storage and Testing] -- Discovery.k8s.io/v1beta1 EndpointSlices are deprecated in favor of discovery.k8s.io/v1, and will no longer be served in Kubernetes v1.25. ([#100472](https://github.com/kubernetes/kubernetes/pull/100472), [@liggitt](https://github.com/liggitt)) [SIG Network] -- FieldManager no longer owns fields that get reset before the object is persisted (e.g. "status wiping"). ([#99661](https://github.com/kubernetes/kubernetes/pull/99661), [@kevindelgado](https://github.com/kevindelgado)) [SIG API Machinery, Auth and Testing] -- Generic ephemeral volumes are beta. ([#99643](https://github.com/kubernetes/kubernetes/pull/99643), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, CLI, Node, Storage and Testing] -- Implement the GetAvailableResources in the podresources API. ([#95734](https://github.com/kubernetes/kubernetes/pull/95734), [@fromanirh](https://github.com/fromanirh)) [SIG Instrumentation, Node and Testing] -- The Endpoints controller will now set the `endpoints.kubernetes.io/over-capacity` annotation to "warning" when an Endpoints resource contains more than 1000 addresses. In a future release, the controller will truncate Endpoints that exceed this limit. The EndpointSlice API can be used to support significantly larger number of addresses. ([#99975](https://github.com/kubernetes/kubernetes/pull/99975), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- The PodDisruptionBudget API has been promoted to policy/v1 with no schema changes. The only functional change is that an empty selector (`{}`) written to a policy/v1 PodDisruptionBudget now selects all pods in the namespace. The behavior of the policy/v1beta1 API remains unchanged. The policy/v1beta1 PodDisruptionBudget API is deprecated and will no longer be served in 1.25+. ([#99290](https://github.com/kubernetes/kubernetes/pull/99290), [@mortent](https://github.com/mortent)) [SIG API Machinery, Apps, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Scheduling and Testing] -- Topology Aware Hints are now available in alpha and can be enabled with the `TopologyAwareHints` feature gate. ([#99522](https://github.com/kubernetes/kubernetes/pull/99522), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps, Auth, Instrumentation, Network and Testing] - -### Feature - -- Add e2e test to validate performance metrics of volume lifecycle operations ([#94334](https://github.com/kubernetes/kubernetes/pull/94334), [@RaunakShah](https://github.com/RaunakShah)) [SIG Storage and Testing] -- EmptyDir memory backed volumes are sized as the the minimum of pod allocatable memory on a host and an optional explicit user provided value. ([#100319](https://github.com/kubernetes/kubernetes/pull/100319), [@derekwaynecarr](https://github.com/derekwaynecarr)) [SIG Node] -- Enables Kubelet to check volume condition and log events to corresponding pods. ([#99284](https://github.com/kubernetes/kubernetes/pull/99284), [@fengzixu](https://github.com/fengzixu)) [SIG Apps, Instrumentation, Node and Storage] -- Introduce a churn operator to scheduler perf testing framework. ([#98900](https://github.com/kubernetes/kubernetes/pull/98900), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling and Testing] -- Kubernetes is now built with Golang 1.16.1 ([#100106](https://github.com/kubernetes/kubernetes/pull/100106), [@justaugustus](https://github.com/justaugustus)) [SIG Cloud Provider, Instrumentation, Release and Testing] -- Migrated pkg/kubelet/cm/devicemanager to structured logging ([#99976](https://github.com/kubernetes/kubernetes/pull/99976), [@knabben](https://github.com/knabben)) [SIG Instrumentation and Node] -- Migrated pkg/kubelet/cm/memorymanager to structured logging ([#99974](https://github.com/kubernetes/kubernetes/pull/99974), [@knabben](https://github.com/knabben)) [SIG Instrumentation and Node] -- Migrated pkg/kubelet/cm/topologymanager to structure logging ([#99969](https://github.com/kubernetes/kubernetes/pull/99969), [@knabben](https://github.com/knabben)) [SIG Instrumentation and Node] -- Rename metrics `etcd_object_counts` to `apiserver_storage_object_counts` and mark it as stable. The original `etcd_object_counts` metrics name is marked as "Deprecated" and will be removed in the future. ([#99785](https://github.com/kubernetes/kubernetes/pull/99785), [@erain](https://github.com/erain)) [SIG API Machinery, Instrumentation and Testing] -- Update pause container to run as pseudo user and group `65535:65535`. This implies the release of version 3.5 of the container images. ([#97963](https://github.com/kubernetes/kubernetes/pull/97963), [@saschagrunert](https://github.com/saschagrunert)) [SIG CLI, Cloud Provider, Cluster Lifecycle, Node, Release, Security and Testing] -- Users might specify the `kubectl.kubernetes.io/default-exec-container` annotation in a Pod to preselect container for kubectl commands. ([#99833](https://github.com/kubernetes/kubernetes/pull/99833), [@mengjiao-liu](https://github.com/mengjiao-liu)) [SIG CLI] - -### Bug or Regression - -- Add ability to skip OpenAPI handler installation to the GenericAPIServer ([#100341](https://github.com/kubernetes/kubernetes/pull/100341), [@kevindelgado](https://github.com/kevindelgado)) [SIG API Machinery] -- Count pod overhead against an entity's ResourceQuota ([#99600](https://github.com/kubernetes/kubernetes/pull/99600), [@gjkim42](https://github.com/gjkim42)) [SIG API Machinery and Node] -- EndpointSlice controllers are less likely to create duplicate EndpointSlices. ([#100103](https://github.com/kubernetes/kubernetes/pull/100103), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Ensure only one LoadBalancer rule is created when HA mode is enabled ([#99825](https://github.com/kubernetes/kubernetes/pull/99825), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fixed a race condition on API server startup ensuring previously created webhook configurations are effective before the first write request is admitted. ([#95783](https://github.com/kubernetes/kubernetes/pull/95783), [@roycaihw](https://github.com/roycaihw)) [SIG API Machinery] -- Fixed authentication_duration_seconds metric. Previously it included whole apiserver request duration. ([#99944](https://github.com/kubernetes/kubernetes/pull/99944), [@marseel](https://github.com/marseel)) [SIG API Machinery, Instrumentation and Scalability] -- Fixes issue where inline AzueFile secrets could not be accessed from the pod's namespace. ([#100563](https://github.com/kubernetes/kubernetes/pull/100563), [@msau42](https://github.com/msau42)) [SIG Storage] -- Improve speed of vSphere PV provisioning and reduce number of API calls ([#100054](https://github.com/kubernetes/kubernetes/pull/100054), [@gnufied](https://github.com/gnufied)) [SIG Cloud Provider and Storage] -- Kubectl: Fixed panic when describing an ingress backend without an API Group ([#100505](https://github.com/kubernetes/kubernetes/pull/100505), [@lauchokyip](https://github.com/lauchokyip)) [SIG CLI] -- Kubectl: fix case of age column in describe node (#96963, @bl-ue) ([#96963](https://github.com/kubernetes/kubernetes/pull/96963), [@bl-ue](https://github.com/bl-ue)) [SIG CLI] -- Kubelet.exe on Windows now checks that the process running as administrator and the executing user account is listed in the built-in administrators group. This is the equivalent to checking the process is running as uid 0. ([#96616](https://github.com/kubernetes/kubernetes/pull/96616), [@perithompson](https://github.com/perithompson)) [SIG Node and Windows] -- Kubelet: Fixed the bug of getting the number of cpu when the number of cpu logical processors is more than 64 in windows ([#97378](https://github.com/kubernetes/kubernetes/pull/97378), [@hwdef](https://github.com/hwdef)) [SIG Node and Windows] -- Pass `KUBE_BUILD_CONFORMANCE=y` to the package-tarballs to reenable building the conformance tarballs. ([#100571](https://github.com/kubernetes/kubernetes/pull/100571), [@puerco](https://github.com/puerco)) [SIG Release] -- Pod Log stats for windows now reports metrics ([#99221](https://github.com/kubernetes/kubernetes/pull/99221), [@jsturtevant](https://github.com/jsturtevant)) [SIG Node, Storage, Testing and Windows] - -### Other (Cleanup or Flake) - -- A new storage E2E testsuite covers CSIStorageCapacity publishing if a driver opts into the test. ([#100537](https://github.com/kubernetes/kubernetes/pull/100537), [@pohly](https://github.com/pohly)) [SIG Storage and Testing] -- Convert cmd/kubelet/app/server.go to structured logging ([#98334](https://github.com/kubernetes/kubernetes/pull/98334), [@wawa0210](https://github.com/wawa0210)) [SIG Node] -- If kube-apiserver enabled goaway feature, clients required golang 1.15.8 or 1.16+ version to avoid un-expected data race issue. ([#98809](https://github.com/kubernetes/kubernetes/pull/98809), [@answer1991](https://github.com/answer1991)) [SIG API Machinery] -- Increased CSINodeIDMaxLength from 128 bytes to 192 bytes. ([#98753](https://github.com/kubernetes/kubernetes/pull/98753), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Apps and Storage] -- Migrate `pkg/kubelet/pluginmanager` to structured logging ([#99885](https://github.com/kubernetes/kubernetes/pull/99885), [@qingwave](https://github.com/qingwave)) [SIG Node] -- Migrate `pkg/kubelet/preemption/preemption.go` and `pkg/kubelet/logs/container_log_manager.go` to structured logging ([#99848](https://github.com/kubernetes/kubernetes/pull/99848), [@qingwave](https://github.com/qingwave)) [SIG Node] -- Migrate `pkg/kubelet/(cri)` to structured logging ([#99006](https://github.com/kubernetes/kubernetes/pull/99006), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Node] -- Migrate `pkg/kubelet/(node, pod)` to structured logging ([#98847](https://github.com/kubernetes/kubernetes/pull/98847), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Node] -- Migrate `pkg/kubelet/(volume,container)` to structured logging ([#98850](https://github.com/kubernetes/kubernetes/pull/98850), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Node] -- Migrate `pkg/kubelet/kubelet_node_status.go` to structured logging ([#98154](https://github.com/kubernetes/kubernetes/pull/98154), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Node and Release] -- Migrate `pkg/kubelet/lifecycle,oom` to structured logging ([#99479](https://github.com/kubernetes/kubernetes/pull/99479), [@mengjiao-liu](https://github.com/mengjiao-liu)) [SIG Instrumentation and Node] -- Migrate cmd/kubelet/+ pkg/kubelet/cadvisor/cadvisor_linux.go + pkg/kubelet/cri/remote/util/util_unix.go + pkg/kubelet/images/image_manager.go to structured logging ([#99994](https://github.com/kubernetes/kubernetes/pull/99994), [@AfrouzMashayekhi](https://github.com/AfrouzMashayekhi)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/cm/container_manager_linux.go and pkg/kubelet/cm/container_manager_stub.go to structured logging ([#100001](https://github.com/kubernetes/kubernetes/pull/100001), [@shiyajuan123](https://github.com/shiyajuan123)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/cm/cpumanage/{topology/togit pology.go, policy_none.go, cpu_assignment.go} to structured logging ([#100163](https://github.com/kubernetes/kubernetes/pull/100163), [@lala123912](https://github.com/lala123912)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/cm/cpumanager/state to structured logging ([#99563](https://github.com/kubernetes/kubernetes/pull/99563), [@jmguzik](https://github.com/jmguzik)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/config to structured logging ([#100002](https://github.com/kubernetes/kubernetes/pull/100002), [@AfrouzMashayekhi](https://github.com/AfrouzMashayekhi)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/kubelet.go to structured logging ([#99861](https://github.com/kubernetes/kubernetes/pull/99861), [@navidshaikh](https://github.com/navidshaikh)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/kubeletconfig to structured logging ([#100265](https://github.com/kubernetes/kubernetes/pull/100265), [@ehashman](https://github.com/ehashman)) [SIG Node] -- Migrate pkg/kubelet/kuberuntime to structured logging ([#99970](https://github.com/kubernetes/kubernetes/pull/99970), [@krzysiekg](https://github.com/krzysiekg)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/prober to structured logging ([#99830](https://github.com/kubernetes/kubernetes/pull/99830), [@krzysiekg](https://github.com/krzysiekg)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/winstats to structured logging ([#99855](https://github.com/kubernetes/kubernetes/pull/99855), [@hexxdump](https://github.com/hexxdump)) [SIG Instrumentation and Node] -- Migrate probe log messages to structured logging ([#97093](https://github.com/kubernetes/kubernetes/pull/97093), [@aldudko](https://github.com/aldudko)) [SIG Instrumentation and Node] -- Migrate remaining kubelet files to structured logging ([#100196](https://github.com/kubernetes/kubernetes/pull/100196), [@ehashman](https://github.com/ehashman)) [SIG Instrumentation and Node] -- `apiserver_storage_objects` (a newer version of `etcd_object_counts) is promoted and marked as stable. ([#100082](https://github.com/kubernetes/kubernetes/pull/100082), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Instrumentation and Testing] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- github.com/cilium/ebpf: [1c8d4c9 → v0.2.0](https://github.com/cilium/ebpf/compare/1c8d4c9...v0.2.0) -- github.com/containerd/console: [v1.0.0 → v1.0.1](https://github.com/containerd/console/compare/v1.0.0...v1.0.1) -- github.com/containerd/containerd: [v1.4.1 → v1.4.4](https://github.com/containerd/containerd/compare/v1.4.1...v1.4.4) -- github.com/creack/pty: [v1.1.9 → v1.1.11](https://github.com/creack/pty/compare/v1.1.9...v1.1.11) -- github.com/docker/docker: [bd33bbf → v20.10.2+incompatible](https://github.com/docker/docker/compare/bd33bbf...v20.10.2) -- github.com/google/cadvisor: [v0.38.8 → v0.39.0](https://github.com/google/cadvisor/compare/v0.38.8...v0.39.0) -- github.com/konsorten/go-windows-terminal-sequences: [v1.0.3 → v1.0.2](https://github.com/konsorten/go-windows-terminal-sequences/compare/v1.0.3...v1.0.2) -- github.com/moby/sys/mountinfo: [v0.1.3 → v0.4.0](https://github.com/moby/sys/mountinfo/compare/v0.1.3...v0.4.0) -- github.com/moby/term: [672ec06 → df9cb8a](https://github.com/moby/term/compare/672ec06...df9cb8a) -- github.com/mrunalp/fileutils: [abd8a0e → v0.5.0](https://github.com/mrunalp/fileutils/compare/abd8a0e...v0.5.0) -- github.com/opencontainers/runc: [v1.0.0-rc92 → v1.0.0-rc93](https://github.com/opencontainers/runc/compare/v1.0.0-rc92...v1.0.0-rc93) -- github.com/opencontainers/runtime-spec: [4d89ac9 → e6143ca](https://github.com/opencontainers/runtime-spec/compare/4d89ac9...e6143ca) -- github.com/opencontainers/selinux: [v1.6.0 → v1.8.0](https://github.com/opencontainers/selinux/compare/v1.6.0...v1.8.0) -- github.com/sirupsen/logrus: [v1.6.0 → v1.7.0](https://github.com/sirupsen/logrus/compare/v1.6.0...v1.7.0) -- github.com/syndtr/gocapability: [d983527 → 42c35b4](https://github.com/syndtr/gocapability/compare/d983527...42c35b4) -- github.com/willf/bitset: [d5bec33 → v1.1.11](https://github.com/willf/bitset/compare/d5bec33...v1.1.11) -- gotest.tools/v3: v3.0.2 → v3.0.3 -- k8s.io/klog/v2: v2.5.0 → v2.8.0 -- sigs.k8s.io/structured-merge-diff/v4: v4.0.3 → v4.1.0 - -### Removed -_Nothing has changed._ - - - -# v1.21.0-beta.1 - - -## Downloads for v1.21.0-beta.1 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes.tar.gz) | c9f4f25242e319e5d90f49d26f239a930aad69677c0f3c2387c56bb13482648a26ed234be2bfe2352508f35010e3eb6d3b127c31a9f24fa1e53ac99c38520fe4 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-src.tar.gz) | 255357db8fa160cab2187658906b674a8b0d9b9a5b5f688cc7b69dc124f5da00362c6cc18ae9b80f7ddb3da6f64c2ab2f12fb9b63a4e063c7366a5375b175cda - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | 02efd389c8126456416fd2c7ea25c3cc30f612649ad91f631f068d6c0e5e539484d3763cb9a8645ad6b8077e4fcd1552a659d7516ebc4ce6828cf823b65c3016 -[kubernetes-client-darwin-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-darwin-arm64.tar.gz) | ac90dcd1699d1d7ff9c8342d481f6d0d97ccdc3ec501a56dc7c9e1898a8f77f712bf66942d304bfe581b5494f13e3efa211865de88f89749780e9e26e673dbdb -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-linux-386.tar.gz) | cce5fb84cc7a1ee664f89d8ad3064307c51c044e9ddd2ae5a004939b69d3b3ef6f29acc5782e27d0c8f0d6d3d9c96e922f5d1b99d210ca3e754666d775df9f0c -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | 2e93bbd2e60ad7cd8fe495115e96c55b1dc8facd100a827ef9c197a732679b60cceb9ea7bf92a1f5e328c3b8adfa8d3922cbc5d8370e374f3381b83f5b877b4f -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-linux-arm.tar.gz) | 23f03b6a8fa9decce9b89a2c1bd3dae6d0b2f9e533e35a79e2c5a29326a165259677594ae83c877219a21bdb95557a284e55f4eec12954742794579c89a7d7e5 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | 3acf3101b46568b0ded6b90f13df0e918870d6812dc1a584903ddb8ba146484a204b9e442f863df47c7d4dab043fd9f7294c5510d3eb09004993d6d3b1e9e13c -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | f749198df69577f62872d3096138a1b8969ec6b1636eb68eb56640bf33cf5f97a11df4363462749a1c0dc3ccbb8ae76c5d66864bf1c5cf7e52599caaf498e504 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | 3f6c0189d59fca22cdded3a02c672ef703d17e6ab0831e173a870e14ccec436c142600e9fc35b403571b6906f2be8d18d38d33330f7caada971bbe1187b388f6 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-windows-386.tar.gz) | 03d92371c425cf331c80807c0ac56f953be304fc6719057258a363d527d186d610e1d4b4d401b34128062983265c2e21f2d2389231aa66a6f5787eee78142cf6 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | 489ece0c886a025ca3a25d28518637a5a824ea6544e7ef8778321036f13c8909a978ad4ceca966cec1e1cda99f25ca78bfd37460d1231c77436d216d43c872ad - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | 2e95cb31d5afcb6842c41d25b7d0c18dd7e65693b2d93c8aa44e5275f9c6201e1a67685c7a8ddefa334babb04cb559d26e39b6a18497695a07dc270568cae108 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-server-linux-arm.tar.gz) | 2927e82b98404c077196ce3968f3afd51a7576aa56d516019bd3976771c0213ba01e78da5b77478528e770da0d334e9457995fafb98820ed68b2ee34beb68856 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | e0f7aea3ea598214a9817bc04949389cb7e4e7b9503141a590ef48c0b681fe44a4243ebc6280752fa41aa1093149b3ee1bcef7664edb746097a342281825430b -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | c011f7eb01294e9ba5d5ced719068466f88ed595dcb8d554a36a4dd5118fb6b3d6bafe8bf89aa2d42988e69793ed777ba77b8876c6ec74f898a43cfce1f61bf4 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | 15f6683e7f16caab7eebead2b7c15799460abbf035a43de0b75f96b0be19908f58add98a777a0cca916230d60cf6bfe3fee92b9dcff50274b1e37c243c157969 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | ed58679561197110f366b9109f7afd62c227bfc271918ccf3eea203bb2ab6428eb5db4dd6c965f202a8a636f66da199470269b863815809b99d53d2fa47af2ea -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-node-linux-arm.tar.gz) | 7e6c7f1957fcdecec8fef689c5019edbc0d0c11d22dafbfef0a07121d10d8f6273644f73511bd06a9a88b04d81a940bd6645ffb5711422af64af547a45c76273 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | a3618f29967e7a1574917a67f0296e65780321eda484b99aa32bfd4dc9b35acdefce33da952ac52dfb509fbac5bf700cf177431fad2ab4adcab0544538939faa -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | 326d3eb521b41bdf489912177f70b8cdd7cd828bb9b3d847ed3694eb27e457f24e0a88b8e51b726eee39800a3c5a40c1b30e3a8ec4a34d8041b3d8ef05d1b749 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | 022d05ebaa66a0332c4fe18cdaf23d14c2c7e4d1f2af7f27baaf1eb042e6890dc3434b4ac8ba58c35d590717956f8c3458112685aff4938b94b18e263c3f4256 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | fa691ed93f07af6bc1cf57e20a30580d6c528f88e5fea3c14f39c1820969dc5a0eb476c5b87b288593d0c086c4dd93aff6165082393283c3f46c210f9bb66d61 - -## Changelog since v1.21.0-beta.0 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - Kubeadm: during "init" an empty cgroupDriver value in the KubeletConfiguration is now always set to "systemd" unless the user is explicit about it. This requires existing machine setups to configure the container runtime to use the "systemd" driver. Documentation on this topic can be found here: https://kubernetes.io/docs/setup/production-environment/container-runtimes/. When upgrading existing clusters / nodes using "kubeadm upgrade" the old cgroupDriver value is preserved, but in 1.22 this change will also apply to "upgrade". For more information on migrating to the "systemd" driver or remaining on the "cgroupfs" driver see: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/. ([#99471](https://github.com/kubernetes/kubernetes/pull/99471), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] - - Migrate `pkg/kubelet/(dockershim, network)` to structured logging - Exit code changed from 255 to 1 ([#98939](https://github.com/kubernetes/kubernetes/pull/98939), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Network and Node] - - Migrate `pkg/kubelet/certificate` to structured logging - Exit code changed from 255 to 1 ([#98993](https://github.com/kubernetes/kubernetes/pull/98993), [@SataQiu](https://github.com/SataQiu)) [SIG Auth and Node] - - Newly provisioned PVs by EBS plugin will no longer use the deprecated "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" labels. It will use "topology.kubernetes.io/zone" and "topology.kubernetes.io/region" labels instead. ([#99130](https://github.com/kubernetes/kubernetes/pull/99130), [@ayberk](https://github.com/ayberk)) [SIG Cloud Provider, Storage and Testing] - - Newly provisioned PVs by OpenStack Cinder plugin will no longer use the deprecated "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" labels. It will use "topology.kubernetes.io/zone" and "topology.kubernetes.io/region" labels instead. ([#99719](https://github.com/kubernetes/kubernetes/pull/99719), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider and Storage] - - OpenStack Cinder CSI migration is on by default, Clinder CSI driver must be installed on clusters on OpenStack for Cinder volumes to work. ([#98538](https://github.com/kubernetes/kubernetes/pull/98538), [@dims](https://github.com/dims)) [SIG Storage] - - Package pkg/kubelet/server migrated to structured logging - Exit code changed from 255 to 1 ([#99838](https://github.com/kubernetes/kubernetes/pull/99838), [@adisky](https://github.com/adisky)) [SIG Node] - - Pkg/kubelet/kuberuntime/kuberuntime_manager.go migrated to structured logging - Exit code changed from 255 to 1 ([#99841](https://github.com/kubernetes/kubernetes/pull/99841), [@adisky](https://github.com/adisky)) [SIG Instrumentation and Node] - -## Changes by Kind - -### Deprecation - -- Kubeadm: the deprecated kube-dns is no longer supported as an option. If "ClusterConfiguration.dns.type" is set to "kube-dns" kubeadm will now throw an error. ([#99646](https://github.com/kubernetes/kubernetes/pull/99646), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Remove deprecated --generator --replicas --service-generator --service-overrides --schedule from kubectl run - Deprecate --serviceaccount --hostport --requests --limits in kubectl run ([#99732](https://github.com/kubernetes/kubernetes/pull/99732), [@soltysh](https://github.com/soltysh)) [SIG CLI and Testing] -- `audit.k8s.io/v1beta1` and `audit.k8s.io/v1alpha1` audit policy configuration and audit events are deprecated in favor of `audit.k8s.io/v1`, available since v1.13. kube-apiserver invocations that specify alpha or beta policy configurations with `--audit-policy-file`, or explicitly request alpha or beta audit events with `--audit-log-version` / `--audit-webhook-version` must update to use `audit.k8s.io/v1` and accept `audit.k8s.io/v1` events prior to v1.24. ([#98858](https://github.com/kubernetes/kubernetes/pull/98858), [@carlory](https://github.com/carlory)) [SIG Auth] -- `diskformat` stroage class parameter for in-tree vSphere volume plugin is deprecated as of v1.21 release. Please consider updating storageclass and remove `diskformat` parameter. vSphere CSI Driver does not support diskformat storageclass parameter. - - vSphere releases less than 67u3 are deprecated as of v1.21. Please consider upgrading vSphere to 67u3 or above. vSphere CSI Driver requires minimum vSphere 67u3. - - VM Hardware version less than 15 is deprecated as of v1.21. Please consider upgrading the Node VM Hardware version to 15 or above. vSphere CSI Driver recommends Node VM's Hardware version set to at least vmx-15. - - Multi vCenter support is deprecated as of v1.21. If you have a Kubernetes cluster spanning across multiple vCenter servers, please consider moving all k8s nodes to a single vCenter Server. vSphere CSI Driver does not support Kubernetes deployment spanning across multiple vCenter servers. - - Support for these deprecations will be available till Kubernetes v1.24. ([#98546](https://github.com/kubernetes/kubernetes/pull/98546), [@divyenpatel](https://github.com/divyenpatel)) [SIG Cloud Provider and Storage] - -### API Change - -- 1. PodAffinityTerm includes a namespaceSelector field to allow selecting eligible namespaces based on their labels. - 2. A new CrossNamespacePodAffinity quota scope API that allows restricting which namespaces allowed to use PodAffinityTerm with corss-namespace reference via namespaceSelector or namespaces fields. ([#98582](https://github.com/kubernetes/kubernetes/pull/98582), [@ahg-g](https://github.com/ahg-g)) [SIG API Machinery, Apps, Auth and Testing] -- Add a default metadata name labels for selecting any namespace by its name. ([#96968](https://github.com/kubernetes/kubernetes/pull/96968), [@jayunit100](https://github.com/jayunit100)) [SIG API Machinery, Apps, Cloud Provider, Storage and Testing] -- Added `.spec.completionMode` field to Job, with accepted values `NonIndexed` (default) and `Indexed` ([#98441](https://github.com/kubernetes/kubernetes/pull/98441), [@alculquicondor](https://github.com/alculquicondor)) [SIG Apps and CLI] -- Clarified NetworkPolicy policyTypes documentation ([#97216](https://github.com/kubernetes/kubernetes/pull/97216), [@joejulian](https://github.com/joejulian)) [SIG Network] -- DaemonSets accept a MaxSurge integer or percent on their rolling update strategy that will launch the updated pod on nodes and wait for those pods to go ready before marking the old out-of-date pods as deleted. This allows workloads to avoid downtime during upgrades when deployed using DaemonSets. This feature is alpha and is behind the DaemonSetUpdateSurge feature gate. ([#96441](https://github.com/kubernetes/kubernetes/pull/96441), [@smarterclayton](https://github.com/smarterclayton)) [SIG Apps and Testing] -- EndpointSlice API is now GA. The EndpointSlice topology field has been removed from the GA API and will be replaced by a new per Endpoint Zone field. If the topology field was previously used, it will be converted into an annotation in the v1 Resource. The discovery.k8s.io/v1alpha1 API is removed. ([#99662](https://github.com/kubernetes/kubernetes/pull/99662), [@swetharepakula](https://github.com/swetharepakula)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network and Testing] -- EndpointSlice Controllers are now GA. The EndpointSlice Controller will not populate the `deprecatedTopology` field and will only provide topology information through the `zone` and `nodeName` fields. ([#99870](https://github.com/kubernetes/kubernetes/pull/99870), [@swetharepakula](https://github.com/swetharepakula)) [SIG API Machinery, Apps, Auth, Network and Testing] -- IngressClass resource can now reference a resource in a specific namespace - for implementation-specific configuration(previously only Cluster-level resources were allowed). - This feature can be enabled using the IngressClassNamespacedParams feature gate. ([#99275](https://github.com/kubernetes/kubernetes/pull/99275), [@hbagdi](https://github.com/hbagdi)) [SIG API Machinery, CLI and Network] -- Introduce conditions for PodDisruptionBudget ([#98127](https://github.com/kubernetes/kubernetes/pull/98127), [@mortent](https://github.com/mortent)) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- Jobs API has a new .spec.suspend field that can be used to suspend and resume Jobs ([#98727](https://github.com/kubernetes/kubernetes/pull/98727), [@adtac](https://github.com/adtac)) [SIG API Machinery, Apps, Node, Scheduling and Testing] -- Kubelet Graceful Node Shutdown feature is now beta. ([#99735](https://github.com/kubernetes/kubernetes/pull/99735), [@bobbypage](https://github.com/bobbypage)) [SIG Node] -- Limit the quest value of hugepage to integer multiple of page size. ([#98515](https://github.com/kubernetes/kubernetes/pull/98515), [@lala123912](https://github.com/lala123912)) [SIG Apps] -- One new field "InternalTrafficPolicy" in Service is added. - It specifies if the cluster internal traffic should be routed to all endpoints or node-local endpoints only. - "Cluster" routes internal traffic to a Service to all endpoints. - "Local" routes traffic to node-local endpoints only, and traffic is dropped if no node-local endpoints are ready. - The default value is "Cluster". ([#96600](https://github.com/kubernetes/kubernetes/pull/96600), [@maplain](https://github.com/maplain)) [SIG API Machinery, Apps and Network] -- PodSecurityPolicy only stores "generic" as allowed volume type if the GenericEphemeralVolume feature gate is enabled ([#98918](https://github.com/kubernetes/kubernetes/pull/98918), [@pohly](https://github.com/pohly)) [SIG Auth and Security] -- Promote CronJobs to batch/v1 ([#99423](https://github.com/kubernetes/kubernetes/pull/99423), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, Apps, CLI and Testing] -- Remove support for building Kubernetes with bazel. ([#99561](https://github.com/kubernetes/kubernetes/pull/99561), [@BenTheElder](https://github.com/BenTheElder)) [SIG API Machinery, Apps, Architecture, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Scheduling, Storage, Testing and Windows] -- Setting loadBalancerClass in load balancer type of service is available with this PR. - Users who want to use a custom load balancer can specify loadBalancerClass to achieve it. ([#98277](https://github.com/kubernetes/kubernetes/pull/98277), [@XudongLiuHarold](https://github.com/XudongLiuHarold)) [SIG API Machinery, Apps, Cloud Provider and Network] -- Storage capacity tracking (= the CSIStorageCapacity feature) is beta, storage.k8s.io/v1alpha1/VolumeAttachment and storage.k8s.io/v1alpha1/CSIStorageCapacity objects are deprecated ([#99641](https://github.com/kubernetes/kubernetes/pull/99641), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, Scheduling, Storage and Testing] -- Support for Indexed Job: a Job that is considered completed when Pods associated to indexes from 0 to (.spec.completions-1) have succeeded. ([#98812](https://github.com/kubernetes/kubernetes/pull/98812), [@alculquicondor](https://github.com/alculquicondor)) [SIG Apps and CLI] -- The apiserver now resets managedFields that got corrupted by a mutating admission controller. ([#98074](https://github.com/kubernetes/kubernetes/pull/98074), [@kwiesmueller](https://github.com/kwiesmueller)) [SIG API Machinery and Testing] -- `controller.kubernetes.io/pod-deletion-cost` annotation can be set to offer a hint on the cost of deleting a pod compared to other pods belonging to the same ReplicaSet. Pods with lower deletion cost are deleted first. This is an alpha feature. ([#99163](https://github.com/kubernetes/kubernetes/pull/99163), [@ahg-g](https://github.com/ahg-g)) [SIG Apps] - -### Feature - -- A client-go metric, rest_client_exec_plugin_call_total, has been added to track total calls to client-go credential plugins. ([#98892](https://github.com/kubernetes/kubernetes/pull/98892), [@ankeesler](https://github.com/ankeesler)) [SIG API Machinery, Auth, Cluster Lifecycle and Instrumentation] -- Add --use-protocol-buffers flag to kubectl top pods and nodes ([#96655](https://github.com/kubernetes/kubernetes/pull/96655), [@serathius](https://github.com/serathius)) [SIG CLI] -- Add support to generate client-side binaries for new darwin/arm64 platform ([#97743](https://github.com/kubernetes/kubernetes/pull/97743), [@dims](https://github.com/dims)) [SIG Release and Testing] -- Added `ephemeral_volume_controller_create[_failures]_total` counters to kube-controller-manager metrics ([#99115](https://github.com/kubernetes/kubernetes/pull/99115), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Cluster Lifecycle, Instrumentation and Storage] -- Adds alpha feature `VolumeCapacityPriority` which makes the scheduler prioritize nodes based on the best matching size of statically provisioned PVs across multiple topologies. ([#96347](https://github.com/kubernetes/kubernetes/pull/96347), [@cofyc](https://github.com/cofyc)) [SIG Apps, Network, Scheduling, Storage and Testing] -- Adds two new metrics to cronjobs, a histogram to track the time difference when a job is created and the expected time when it should be created, and a gauge for the missed schedules of a cronjob ([#99341](https://github.com/kubernetes/kubernetes/pull/99341), [@alaypatel07](https://github.com/alaypatel07)) [SIG Apps and Instrumentation] -- Alpha implementation of Kubectl Command Headers: SIG CLI KEP 859 enabled when KUBECTL_COMMAND_HEADERS environment variable set on the client command line. - - To enable: export KUBECTL_COMMAND_HEADERS=1; kubectl ... ([#98952](https://github.com/kubernetes/kubernetes/pull/98952), [@seans3](https://github.com/seans3)) [SIG API Machinery and CLI] -- Component owner can configure the allowlist of metric label with flag '--allow-metric-labels'. ([#99738](https://github.com/kubernetes/kubernetes/pull/99738), [@YoyinZyc](https://github.com/YoyinZyc)) [SIG API Machinery, Cluster Lifecycle and Instrumentation] -- Disruption controller only sends one event per PodDisruptionBudget if scale can't be computed ([#98128](https://github.com/kubernetes/kubernetes/pull/98128), [@mortent](https://github.com/mortent)) [SIG Apps] -- EndpointSliceNodeName will always be enabled, so NodeName will always be available in the v1beta1 API. ([#99746](https://github.com/kubernetes/kubernetes/pull/99746), [@swetharepakula](https://github.com/swetharepakula)) [SIG Apps and Network] -- Graduate CRIContainerLogRotation feature gate to GA. ([#99651](https://github.com/kubernetes/kubernetes/pull/99651), [@umohnani8](https://github.com/umohnani8)) [SIG Node and Testing] -- Kube-proxy iptables: new metric sync_proxy_rules_iptables_total that exposes the number of rules programmed per table in each iteration ([#99653](https://github.com/kubernetes/kubernetes/pull/99653), [@aojea](https://github.com/aojea)) [SIG Instrumentation and Network] -- Kube-scheduler now logs plugin scoring summaries at --v=4 ([#99411](https://github.com/kubernetes/kubernetes/pull/99411), [@damemi](https://github.com/damemi)) [SIG Scheduling] -- Kubeadm: a warning to user as ipv6 site-local is deprecated ([#99574](https://github.com/kubernetes/kubernetes/pull/99574), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle and Network] -- Kubeadm: apply the "node.kubernetes.io/exclude-from-external-load-balancers" label on control plane nodes during "init", "join" and "upgrade" to preserve backwards compatibility with the lagacy LB mode where nodes labeled as "master" where excluded. To opt-out you can remove the label from a node. See #97543 and the linked KEP for more details. ([#98269](https://github.com/kubernetes/kubernetes/pull/98269), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: if the user has customized their image repository via the kubeadm configuration, pass the custom pause image repository and tag to the kubelet via --pod-infra-container-image not only for Docker but for all container runtimes. This flag tells the kubelet that it should not garbage collect the image. ([#99476](https://github.com/kubernetes/kubernetes/pull/99476), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: promote IPv6DualStack feature gate to Beta ([#99294](https://github.com/kubernetes/kubernetes/pull/99294), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle] -- Kubectl version changed to write a warning message to stderr if the client and server version difference exceeds the supported version skew of +/-1 minor version. ([#98250](https://github.com/kubernetes/kubernetes/pull/98250), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- Kubernetes is now built with Golang 1.16 ([#98572](https://github.com/kubernetes/kubernetes/pull/98572), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Node, Release and Testing] -- Persistent Volumes formatted with the btrfs filesystem will now automatically resize when expanded. ([#99361](https://github.com/kubernetes/kubernetes/pull/99361), [@Novex](https://github.com/Novex)) [SIG Storage] -- Remove cAdvisor json metrics api collected by Kubelet ([#99236](https://github.com/kubernetes/kubernetes/pull/99236), [@pacoxu](https://github.com/pacoxu)) [SIG Node] -- Sysctls is now GA and locked to default ([#99158](https://github.com/kubernetes/kubernetes/pull/99158), [@wgahnagl](https://github.com/wgahnagl)) [SIG Node] -- The NodeAffinity plugin implements the PreFilter extension, offering enhanced performance for Filter. ([#99213](https://github.com/kubernetes/kubernetes/pull/99213), [@AliceZhang2016](https://github.com/AliceZhang2016)) [SIG Scheduling] -- The endpointslice mirroring controller mirrors endpoints annotations and labels to the generated endpoint slices, it also ensures that updates on any of these fields are mirrored. - The well-known annotation endpoints.kubernetes.io/last-change-trigger-time is skipped and not mirrored. ([#98116](https://github.com/kubernetes/kubernetes/pull/98116), [@aojea](https://github.com/aojea)) [SIG Apps, Network and Testing] -- Update the latest validated version of Docker to 20.10 ([#98977](https://github.com/kubernetes/kubernetes/pull/98977), [@neolit123](https://github.com/neolit123)) [SIG CLI, Cluster Lifecycle and Node] -- Upgrade node local dns to 1.17.0 for better IPv6 support ([#99749](https://github.com/kubernetes/kubernetes/pull/99749), [@pacoxu](https://github.com/pacoxu)) [SIG Cloud Provider and Network] -- Users might specify the `kubectl.kubernetes.io/default-exec-container` annotation in a Pod to preselect container for kubectl commands. ([#99581](https://github.com/kubernetes/kubernetes/pull/99581), [@mengjiao-liu](https://github.com/mengjiao-liu)) [SIG CLI] -- When downscaling ReplicaSets, ready and creation timestamps are compared in a logarithmic scale. ([#99212](https://github.com/kubernetes/kubernetes/pull/99212), [@damemi](https://github.com/damemi)) [SIG Apps and Testing] -- When the kubelet is watching a ConfigMap or Secret purely in the context of setting environment variables - for containers, only hold that watch for a defined duration before cancelling it. This change reduces the CPU - and memory usage of the kube-apiserver in large clusters. ([#99393](https://github.com/kubernetes/kubernetes/pull/99393), [@chenyw1990](https://github.com/chenyw1990)) [SIG API Machinery, Node and Testing] -- WindowsEndpointSliceProxying feature gate has graduated to beta and is enabled by default. This means kube-proxy will read from EndpointSlices instead of Endpoints on Windows by default. ([#99794](https://github.com/kubernetes/kubernetes/pull/99794), [@robscott](https://github.com/robscott)) [SIG Network] - -### Bug or Regression - -- Creating a PVC with DataSource should fail for non-CSI plugins. ([#97086](https://github.com/kubernetes/kubernetes/pull/97086), [@xing-yang](https://github.com/xing-yang)) [SIG Apps and Storage] -- EndpointSlice controller is now less likely to emit FailedToUpdateEndpointSlices events. ([#99345](https://github.com/kubernetes/kubernetes/pull/99345), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- EndpointSliceMirroring controller is now less likely to emit FailedToUpdateEndpointSlices events. ([#99756](https://github.com/kubernetes/kubernetes/pull/99756), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Fix --ignore-errors does not take effect if multiple logs are printed and unfollowed ([#97686](https://github.com/kubernetes/kubernetes/pull/97686), [@wzshiming](https://github.com/wzshiming)) [SIG CLI] -- Fix bug that would let the Horizontal Pod Autoscaler scale down despite at least one metric being unavailable/invalid ([#99514](https://github.com/kubernetes/kubernetes/pull/99514), [@mikkeloscar](https://github.com/mikkeloscar)) [SIG Apps and Autoscaling] -- Fix cgroup handling for systemd with cgroup v2 ([#98365](https://github.com/kubernetes/kubernetes/pull/98365), [@odinuge](https://github.com/odinuge)) [SIG Node] -- Fix smb mount PermissionDenied issue on Windows ([#99550](https://github.com/kubernetes/kubernetes/pull/99550), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider, Storage and Windows] -- Fixed a bug that causes smaller number of conntrack-max being used under CPU static policy. (#99225, @xh4n3) ([#99613](https://github.com/kubernetes/kubernetes/pull/99613), [@xh4n3](https://github.com/xh4n3)) [SIG Network] -- Fixed bug that caused cAdvisor to incorrectly detect single-socket multi-NUMA topology. ([#99315](https://github.com/kubernetes/kubernetes/pull/99315), [@iwankgb](https://github.com/iwankgb)) [SIG Node] -- Fixes add-on manager leader election ([#98968](https://github.com/kubernetes/kubernetes/pull/98968), [@liggitt](https://github.com/liggitt)) [SIG Cloud Provider] -- Improved update time of pod statuses following new probe results. ([#98376](https://github.com/kubernetes/kubernetes/pull/98376), [@matthyx](https://github.com/matthyx)) [SIG Node and Testing] -- Kube-apiserver: an update of a pod with a generic ephemeral volume dropped that volume if the feature had been disabled since creating the pod with such a volume ([#99446](https://github.com/kubernetes/kubernetes/pull/99446), [@pohly](https://github.com/pohly)) [SIG Apps, Node and Storage] -- Kubeadm: skip validating pod subnet against node-cidr-mask when allocate-node-cidrs is set to be false ([#98984](https://github.com/kubernetes/kubernetes/pull/98984), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- On single-stack configured (IPv4 or IPv6, but not both) clusters, Services which are both headless (no clusterIP) and selectorless (empty or undefined selector) will report `ipFamilyPolicy RequireDualStack` and will have entries in `ipFamilies[]` for both IPv4 and IPv6. This is a change from alpha, but does not have any impact on the manually-specified Endpoints and EndpointSlices for the Service. ([#99555](https://github.com/kubernetes/kubernetes/pull/99555), [@thockin](https://github.com/thockin)) [SIG Apps and Network] -- Resolves spurious `Failed to list *v1.Secret` or `Failed to list *v1.ConfigMap` messages in kubelet logs. ([#99538](https://github.com/kubernetes/kubernetes/pull/99538), [@liggitt](https://github.com/liggitt)) [SIG Auth and Node] -- Return zero time (midnight on Jan. 1, 1970) instead of negative number when reporting startedAt and finishedAt of the not started or a running Pod when using dockershim as a runtime. ([#99585](https://github.com/kubernetes/kubernetes/pull/99585), [@Iceber](https://github.com/Iceber)) [SIG Node] -- Stdin is now only passed to client-go exec credential plugins when it is detected to be an interactive terminal. Previously, it was passed to client-go exec plugins when **stdout*- was detected to be an interactive terminal. ([#99654](https://github.com/kubernetes/kubernetes/pull/99654), [@ankeesler](https://github.com/ankeesler)) [SIG API Machinery and Auth] -- The maximum number of ports allowed in EndpointSlices has been increased from 100 to 20,000 ([#99795](https://github.com/kubernetes/kubernetes/pull/99795), [@robscott](https://github.com/robscott)) [SIG Network] -- Updates the commands - - kubectl kustomize {arg} - - kubectl apply -k {arg} - to use same code as kustomize CLI v4.0.5 - - [v4.0.5]: https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.0.5 ([#98946](https://github.com/kubernetes/kubernetes/pull/98946), [@monopole](https://github.com/monopole)) [SIG API Machinery, Architecture, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Node and Storage] -- When a CNI plugin returns dual-stack pod IPs, kubelet will now try to respect the - "primary IP family" of the cluster by picking a primary pod IP of the same family - as the (primary) node IP, rather than assuming that the CNI plugin returned the IPs - in the order the administrator wanted (since some CNI plugins don't allow - configuring this). ([#97979](https://github.com/kubernetes/kubernetes/pull/97979), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] -- When using Containerd on Windows, the "C:\Windows\System32\drivers\etc\hosts" file will now be managed by kubelet. ([#83730](https://github.com/kubernetes/kubernetes/pull/83730), [@claudiubelu](https://github.com/claudiubelu)) [SIG Node and Windows] -- `VolumeBindingArgs` now allow `BindTimeoutSeconds` to be set as zero, while the value zero indicates no waiting for the checking of volume binding operation. ([#99835](https://github.com/kubernetes/kubernetes/pull/99835), [@chendave](https://github.com/chendave)) [SIG Scheduling and Storage] -- `kubectl exec` and `kubectl attach` now honor the `--quiet` flag which suppresses output from the local binary that could be confused by a script with the remote command output (all non-failure output is hidden). In addition, print inline with exec and attach the list of alternate containers when we default to the first spec.container. ([#99004](https://github.com/kubernetes/kubernetes/pull/99004), [@smarterclayton](https://github.com/smarterclayton)) [SIG CLI] - -### Other (Cleanup or Flake) - -- Apiserver_request_duration_seconds is promoted to stable status. ([#99925](https://github.com/kubernetes/kubernetes/pull/99925), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Instrumentation and Testing] -- Apiserver_request_total is promoted to stable status and no longer has a content-type dimensions, so any alerts/charts which presume the existence of this will fail. This is however, unlikely to be the case since it was effectively an unbounded dimension in the first place. ([#99788](https://github.com/kubernetes/kubernetes/pull/99788), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Instrumentation and Testing] -- EndpointSlice generation is now incremented when labels change. ([#99750](https://github.com/kubernetes/kubernetes/pull/99750), [@robscott](https://github.com/robscott)) [SIG Network] -- Featuregate AllowInsecureBackendProxy is promoted to GA ([#99658](https://github.com/kubernetes/kubernetes/pull/99658), [@deads2k](https://github.com/deads2k)) [SIG API Machinery] -- Migrate `pkg/kubelet/(eviction)` to structured logging ([#99032](https://github.com/kubernetes/kubernetes/pull/99032), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Node] -- Migrate deployment controller log messages to structured logging ([#97507](https://github.com/kubernetes/kubernetes/pull/97507), [@aldudko](https://github.com/aldudko)) [SIG Apps] -- Migrate pkg/kubelet/cloudresource to structured logging ([#98999](https://github.com/kubernetes/kubernetes/pull/98999), [@sladyn98](https://github.com/sladyn98)) [SIG Node] -- Migrate pkg/kubelet/cri/remote logs to structured logging ([#98589](https://github.com/kubernetes/kubernetes/pull/98589), [@chenyw1990](https://github.com/chenyw1990)) [SIG Node] -- Migrate pkg/kubelet/kuberuntime/kuberuntime_container.go logs to structured logging ([#96973](https://github.com/kubernetes/kubernetes/pull/96973), [@chenyw1990](https://github.com/chenyw1990)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/status to structured logging ([#99836](https://github.com/kubernetes/kubernetes/pull/99836), [@navidshaikh](https://github.com/navidshaikh)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/token to structured logging ([#99264](https://github.com/kubernetes/kubernetes/pull/99264), [@palnabarun](https://github.com/palnabarun)) [SIG Auth, Instrumentation and Node] -- Migrate pkg/kubelet/util to structured logging ([#99823](https://github.com/kubernetes/kubernetes/pull/99823), [@navidshaikh](https://github.com/navidshaikh)) [SIG Instrumentation and Node] -- Migrate proxy/userspace/proxier.go logs to structured logging ([#97837](https://github.com/kubernetes/kubernetes/pull/97837), [@JornShen](https://github.com/JornShen)) [SIG Network] -- Migrate some kubelet/metrics log messages to structured logging ([#98627](https://github.com/kubernetes/kubernetes/pull/98627), [@jialaijun](https://github.com/jialaijun)) [SIG Instrumentation and Node] -- Process start time on Windows now uses current process information ([#97491](https://github.com/kubernetes/kubernetes/pull/97491), [@jsturtevant](https://github.com/jsturtevant)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Windows] - -### Uncategorized - -- Migrate pkg/kubelet/stats to structured logging ([#99607](https://github.com/kubernetes/kubernetes/pull/99607), [@krzysiekg](https://github.com/krzysiekg)) [SIG Node] -- The DownwardAPIHugePages feature is beta. Users may use the feature if all workers in their cluster are min 1.20 version. The feature will be enabled by default in all installations in 1.22. ([#99610](https://github.com/kubernetes/kubernetes/pull/99610), [@derekwaynecarr](https://github.com/derekwaynecarr)) [SIG Node] - -## Dependencies - -### Added -- github.com/go-errors/errors: [v1.0.1](https://github.com/go-errors/errors/tree/v1.0.1) -- github.com/gobuffalo/here: [v0.6.0](https://github.com/gobuffalo/here/tree/v0.6.0) -- github.com/google/shlex: [e7afc7f](https://github.com/google/shlex/tree/e7afc7f) -- github.com/markbates/pkger: [v0.17.1](https://github.com/markbates/pkger/tree/v0.17.1) -- github.com/monochromegane/go-gitignore: [205db1a](https://github.com/monochromegane/go-gitignore/tree/205db1a) -- github.com/niemeyer/pretty: [a10e7ca](https://github.com/niemeyer/pretty/tree/a10e7ca) -- github.com/xlab/treeprint: [a009c39](https://github.com/xlab/treeprint/tree/a009c39) -- go.starlark.net: 8dd3e2e -- golang.org/x/term: 6a3ed07 -- sigs.k8s.io/kustomize/api: v0.8.5 -- sigs.k8s.io/kustomize/cmd/config: v0.9.7 -- sigs.k8s.io/kustomize/kustomize/v4: v4.0.5 -- sigs.k8s.io/kustomize/kyaml: v0.10.15 - -### Changed -- dmitri.shuralyov.com/gpu/mtl: 666a987 → 28db891 -- github.com/creack/pty: [v1.1.7 → v1.1.9](https://github.com/creack/pty/compare/v1.1.7...v1.1.9) -- github.com/go-openapi/spec: [v0.19.3 → v0.19.5](https://github.com/go-openapi/spec/compare/v0.19.3...v0.19.5) -- github.com/go-openapi/strfmt: [v0.19.3 → v0.19.5](https://github.com/go-openapi/strfmt/compare/v0.19.3...v0.19.5) -- github.com/go-openapi/validate: [v0.19.5 → v0.19.8](https://github.com/go-openapi/validate/compare/v0.19.5...v0.19.8) -- github.com/google/cadvisor: [v0.38.7 → v0.38.8](https://github.com/google/cadvisor/compare/v0.38.7...v0.38.8) -- github.com/kr/text: [v0.1.0 → v0.2.0](https://github.com/kr/text/compare/v0.1.0...v0.2.0) -- github.com/mattn/go-runewidth: [v0.0.2 → v0.0.7](https://github.com/mattn/go-runewidth/compare/v0.0.2...v0.0.7) -- github.com/olekukonko/tablewriter: [a0225b3 → v0.0.4](https://github.com/olekukonko/tablewriter/compare/a0225b3...v0.0.4) -- github.com/sergi/go-diff: [v1.0.0 → v1.1.0](https://github.com/sergi/go-diff/compare/v1.0.0...v1.1.0) -- golang.org/x/crypto: 7f63de1 → 5ea612d -- golang.org/x/exp: 6cc2880 → 85be41e -- golang.org/x/mobile: d2bd2a2 → e6ae53a -- golang.org/x/mod: v0.3.0 → ce943fd -- golang.org/x/net: 69a7880 → 3d97a24 -- golang.org/x/sys: 5cba982 → a50acf3 -- golang.org/x/time: 3af7569 → f8bda1e -- golang.org/x/tools: 113979e → v0.1.0 -- gopkg.in/check.v1: 41f04d3 → 8fa4692 -- gopkg.in/yaml.v2: v2.2.8 → v2.4.0 -- k8s.io/kube-openapi: d219536 → 591a79e -- k8s.io/system-validators: v1.3.0 → v1.4.0 - -### Removed -- github.com/codegangsta/negroni: [v1.0.0](https://github.com/codegangsta/negroni/tree/v1.0.0) -- github.com/golangplus/bytes: [45c989f](https://github.com/golangplus/bytes/tree/45c989f) -- github.com/golangplus/fmt: [2a5d6d7](https://github.com/golangplus/fmt/tree/2a5d6d7) -- github.com/gorilla/context: [v1.1.1](https://github.com/gorilla/context/tree/v1.1.1) -- github.com/kr/pty: [v1.1.5](https://github.com/kr/pty/tree/v1.1.5) -- sigs.k8s.io/kustomize: v2.0.3+incompatible - - - -# v1.21.0-beta.0 - - -## Downloads for v1.21.0-beta.0 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes.tar.gz) | 69b73a03b70b0ed006e9fef3f5b9bc68f0eb8dc40db6cc04777c03a2cb83a008c783012ca186b1c48357fb192403dbcf6960f120924785e2076e215b9012d546 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-src.tar.gz) | 9620fb6d37634271bdd423c09f33f3bd29e74298aa82c47dffc8cb6bd2ff44fa8987a53c53bc529db4ca96ec41503aa81cc8d0c3ac106f3b06c4720de933a8e6 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-darwin-amd64.tar.gz) | 2a6f3fcd6b571f5ccde56b91e6e179a01899244be496dae16a2a16e0405c9437b75c6dc853b56f9a4876a7c0a60ec624ccd28400bf8fb960258263172f6860ba -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-linux-386.tar.gz) | 78fe9ad9f9a9bc043293327223f0038a2c087ca65e87187a6dcae7a24aef9565fe498d295a4639b0b90524469a04930022fcecd815d0afc742eb87ddd8eb7ef5 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-linux-amd64.tar.gz) | c025f5e5bd132355e7dd1296cf2ec752264e7f754c4d95fc34b076bd75bef2f571d30872bcb3d138ce95c592111353d275a80eb31f82c07000874b4c56282dbd -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-linux-arm.tar.gz) | 9975cd2f08fbc202575fb15ba6fc51dab23155ca4d294ebb48516a81efa51f58bab3a87d41c865103756189b554c020371d729ad42880ba788f25047ffc46910 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-linux-arm64.tar.gz) | 56a6836e24471e42e9d9a8488453f2d55598d70c8aca0a307d5116139c930c25c469fd0d1ab5060fbe88dad75a9b5209a08dc11d644af5f3ebebfbcb6c16266c -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-linux-ppc64le.tar.gz) | b6a6cc9baad0ad85ed079ee80e6d6acc905095cfb440998bbc0f553b94fa80077bd58b8692754de477517663d51161705e6e89a1b6d04aa74819800db3517722 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-linux-s390x.tar.gz) | 7b743481b340f510bf9ae28ea8ea91150aa1e8c37fe104b66d7b3aff62f5e6db3c590d2c13d14dbb5c928de31c7613372def2496075853611d10d6b5fa5b60bd -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-windows-386.tar.gz) | df06c7a524ce84c1f8d7836aa960c550c88dbca0ec4854df4dd0a85b3c84b8ecbc41b54e8c4669ce28ac670659ff0fad795deb1bc539f3c3b3aa885381265f5a -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-client-windows-amd64.tar.gz) | 4568497b684564f2a94fbea6cbfd778b891231470d9a6956c3b7a3268643d13b855c0fc5ebea5f769300cc0c7719c2c331c387f468816f182f63e515adeaa7a0 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-server-linux-amd64.tar.gz) | 42883cca2d312153baf693fc6024a295359a421e74fd70eefc927413be4e0353debe634e7cca6b9a8f7d8a0cee3717e03ba5d29a306e93139b1c2f3027535a6d -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-server-linux-arm.tar.gz) | e0042215e84c769ba4fc4d159ccf67b2c4a26206bfffb0ec5152723dc813ff9c1426aa0e9b963d7bfa2efb266ca43561b596b459152882ebb42102ccf60bd8eb -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-server-linux-arm64.tar.gz) | bfad29d43e14152cb9bc7c4df6aa77929c6eca64a294bb832215bdba9fa0ee2195a2b709c0267dc7426bb371b547ee80bb8461a8c678c9bffa0819aa7db96289 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-server-linux-ppc64le.tar.gz) | ca67674c01c6cebdc8160c85b449eab1a23bb0557418665246e0208543fa2eaaf97679685c7b49bee3a4300904c0399c3d762ae34dc3e279fd69ce792c4b07ff -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-server-linux-s390x.tar.gz) | 285352b628ec754b01b8ad4ef1427223a142d58ebcb46f6861df14d68643133b32330460b213b1ba5bc5362ff2b6dacd8e0c2d20cce6e760fa1954af8a60df8b - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-node-linux-amd64.tar.gz) | d92d9b30e7e44134a0cd9db4c01924d365991ea16b3131200b02a82cff89c8701f618cd90e7f1c65427bd4bb5f78b10d540b2262de2c143b401fa44e5b25627b -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-node-linux-arm.tar.gz) | 551092f23c27fdea4bb2d0547f6075892534892a96fc2be7786f82b58c93bffdb5e1c20f8f11beb8bed46c24f36d4c18ec5ac9755435489efa28e6ae775739bd -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-node-linux-arm64.tar.gz) | 26ae7f4163e527349b8818ee38b9ee062314ab417f307afa49c146df8f5a2bd689509b128bd4a1efd3896fd89571149a9955ada91f8ca0c2f599cd863d613c86 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-node-linux-ppc64le.tar.gz) | 821fa953f6cebc69d2d481e489f3e90899813d20e2eefbabbcadd019d004108e7540f741fabe60e8e7c6adbb1053ac97898bbdddec3ca19f34a71aa3312e0d4e -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-node-linux-s390x.tar.gz) | 22197d4f66205d5aa9de83dfddcc4f2bb3195fd7067cdb5c21e61dbeae217bc112fb7ecff8a539579b60ad92298c2b4c87b9b7c7e6ec1ee1ffa0c6e4bc4412c1 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-beta.0/kubernetes-node-windows-amd64.tar.gz) | 7e22e0d9603562a04dee16a513579f06b1ff6354d97d669bd68f8777ec7f89f6ef027fb23ab0445d7bba0bb689352f0cc748ce90e3f597c6ebe495464a96b860 - -## Changelog since v1.21.0-alpha.3 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - The metric `storage_operation_errors_total` is not removed, but is marked deprecated, and the metric `storage_operation_status_count` is marked deprecated. In both cases the storage_operation_duration_seconds metric can be used to recover equivalent counts (using `status=fail-unknown` in the case of `storage_operations_errors_total`). ([#99045](https://github.com/kubernetes/kubernetes/pull/99045), [@mattcary](https://github.com/mattcary)) [SIG Instrumentation and Storage] - -## Changes by Kind - -### Deprecation - -- The `batch/v2alpha1` CronJob type definitions and clients are deprecated and removed. ([#96987](https://github.com/kubernetes/kubernetes/pull/96987), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, Apps, CLI and Testing] - -### API Change - -- Cluster admins can now turn off /debug/pprof and /debug/flags/v endpoint in kubelet by setting enableProfilingHandler and enableDebugFlagsHandler to false in their kubelet configuration file. enableProfilingHandler and enableDebugFlagsHandler can be set to true only when enableDebuggingHandlers is also set to true. ([#98458](https://github.com/kubernetes/kubernetes/pull/98458), [@SaranBalaji90](https://github.com/SaranBalaji90)) [SIG Node] -- The BoundServiceAccountTokenVolume feature has been promoted to beta, and enabled by default. - - This changes the tokens provided to containers at `/var/run/secrets/kubernetes.io/serviceaccount/token` to be time-limited, auto-refreshed, and invalidated when the containing pod is deleted. - - Clients should reload the token from disk periodically (once per minute is recommended) to ensure they continue to use a valid token. `k8s.io/client-go` version v11.0.0+ and v0.15.0+ reload tokens automatically. - - By default, injected tokens are given an extended lifetime so they remain valid even after a new refreshed token is provided. The metric `serviceaccount_stale_tokens_total` can be used to monitor for workloads that are depending on the extended lifetime and are continuing to use tokens even after a refreshed token is provided to the container. If that metric indicates no existing workloads are depending on extended lifetimes, injected token lifetime can be shortened to 1 hour by starting `kube-apiserver` with `--service-account-extend-token-expiration=false`. ([#95667](https://github.com/kubernetes/kubernetes/pull/95667), [@zshihang](https://github.com/zshihang)) [SIG API Machinery, Auth, Cluster Lifecycle and Testing] - -### Feature - -- A new histogram metric to track the time it took to delete a job by the ttl-after-finished controller ([#98676](https://github.com/kubernetes/kubernetes/pull/98676), [@ahg-g](https://github.com/ahg-g)) [SIG Apps and Instrumentation] -- AWS cloudprovider supports auto-discovering subnets without any kubernetes.io/cluster/ tags. It also supports additional service annotation service.beta.kubernetes.io/aws-load-balancer-subnets to manually configure the subnets. ([#97431](https://github.com/kubernetes/kubernetes/pull/97431), [@kishorj](https://github.com/kishorj)) [SIG Cloud Provider] -- Add --permit-address-sharing flag to kube-apiserver to listen with SO_REUSEADDR. While allowing to listen on wildcard IPs like 0.0.0.0 and specific IPs in parallel, it avoid waiting for the kernel to release socket in TIME_WAIT state, and hence, considably reducing kube-apiserver restart times under certain conditions. ([#93861](https://github.com/kubernetes/kubernetes/pull/93861), [@sttts](https://github.com/sttts)) [SIG API Machinery] -- Add `csi_operations_seconds` metric on kubelet that exposes CSI operations duration and status for node CSI operations. ([#98979](https://github.com/kubernetes/kubernetes/pull/98979), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Instrumentation and Storage] -- Add `migrated` field into `storage_operation_duration_seconds` metric ([#99050](https://github.com/kubernetes/kubernetes/pull/99050), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Apps, Instrumentation and Storage] -- Add bash-completion for comma separated list on `kubectl get` ([#98301](https://github.com/kubernetes/kubernetes/pull/98301), [@phil9909](https://github.com/phil9909)) [SIG CLI] -- Added support for installing arm64 node artifacts. ([#99242](https://github.com/kubernetes/kubernetes/pull/99242), [@liu-cong](https://github.com/liu-cong)) [SIG Cloud Provider] -- Feature gate RootCAConfigMap is graduated to GA in 1.21 and will be removed in 1.22. ([#98033](https://github.com/kubernetes/kubernetes/pull/98033), [@zshihang](https://github.com/zshihang)) [SIG API Machinery and Auth] -- Kubeadm: during "init" and "join" perform preflight validation on the host / node name and throw warnings if a name is not compliant ([#99194](https://github.com/kubernetes/kubernetes/pull/99194), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle] -- Kubectl: `kubectl get` will omit managed fields by default now. Users could set `--show-managed-fields` to true to show managedFields when the output format is either `json` or `yaml`. ([#96878](https://github.com/kubernetes/kubernetes/pull/96878), [@knight42](https://github.com/knight42)) [SIG CLI and Testing] -- Metrics can now be disabled explicitly via a command line flag (i.e. '--disabled-metrics=bad_metric1,bad_metric2') ([#99217](https://github.com/kubernetes/kubernetes/pull/99217), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Cluster Lifecycle and Instrumentation] -- TTLAfterFinished is now beta and enabled by default ([#98678](https://github.com/kubernetes/kubernetes/pull/98678), [@ahg-g](https://github.com/ahg-g)) [SIG Apps and Auth] -- The `RunAsGroup` feature has been promoted to GA in this release. ([#94641](https://github.com/kubernetes/kubernetes/pull/94641), [@krmayankk](https://github.com/krmayankk)) [SIG Auth and Node] -- Turn CronJobControllerV2 on by default. ([#98878](https://github.com/kubernetes/kubernetes/pull/98878), [@soltysh](https://github.com/soltysh)) [SIG Apps] -- UDP protocol support for Agnhost connect subcommand ([#98639](https://github.com/kubernetes/kubernetes/pull/98639), [@knabben](https://github.com/knabben)) [SIG Testing] -- Upgrades `IPv6Dualstack` to `Beta` and turns it on by default. Clusters new and existing will not be affected until user starting adding secondary pod and service cidrs cli flags as described here: https://github.com/kubernetes/enhancements/tree/master/keps/sig-network/563-dual-stack ([#98969](https://github.com/kubernetes/kubernetes/pull/98969), [@khenidak](https://github.com/khenidak)) [SIG API Machinery, Apps, Cloud Provider, Network and Node] - -### Documentation - -- Fix ALPHA stability level reference link ([#98641](https://github.com/kubernetes/kubernetes/pull/98641), [@Jeffwan](https://github.com/Jeffwan)) [SIG Auth, Cloud Provider, Instrumentation and Storage] - -### Failing Test - -- Escape the special characters like `[`, `]` and ` ` that exist in vsphere windows path ([#98830](https://github.com/kubernetes/kubernetes/pull/98830), [@liyanhui1228](https://github.com/liyanhui1228)) [SIG Storage and Windows] -- Kube-proxy: fix a bug on UDP NodePort Services where stale conntrack entries may blackhole the traffic directed to the NodePort. ([#98305](https://github.com/kubernetes/kubernetes/pull/98305), [@aojea](https://github.com/aojea)) [SIG Network] - -### Bug or Regression - -- Add missing --kube-api-content-type in kubemark hollow template ([#98911](https://github.com/kubernetes/kubernetes/pull/98911), [@Jeffwan](https://github.com/Jeffwan)) [SIG Scalability and Testing] -- Avoid duplicate error messages when runing kubectl edit quota ([#98201](https://github.com/kubernetes/kubernetes/pull/98201), [@pacoxu](https://github.com/pacoxu)) [SIG API Machinery and Apps] -- Cleanup subnet in frontend IP configs to prevent huge subnet request bodies in some scenarios. ([#98133](https://github.com/kubernetes/kubernetes/pull/98133), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Fix errors when accessing Windows container stats for Dockershim ([#98510](https://github.com/kubernetes/kubernetes/pull/98510), [@jsturtevant](https://github.com/jsturtevant)) [SIG Node and Windows] -- Fixes spurious errors about IPv6 in kube-proxy logs on nodes with IPv6 disabled. ([#99127](https://github.com/kubernetes/kubernetes/pull/99127), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] -- In the method that ensures that the docker and containerd are in the correct containers with the proper OOM score set up, fixed the bug of identifying containerd process. ([#97888](https://github.com/kubernetes/kubernetes/pull/97888), [@pacoxu](https://github.com/pacoxu)) [SIG Node] -- Kubelet now cleans up orphaned volume directories automatically ([#95301](https://github.com/kubernetes/kubernetes/pull/95301), [@lorenz](https://github.com/lorenz)) [SIG Node and Storage] -- When dynamically provisioning Azure File volumes for a premium account, the requested size will be set to 100GB if the request is initially lower than this value to accommodate Azure File requirements. ([#99122](https://github.com/kubernetes/kubernetes/pull/99122), [@huffmanca](https://github.com/huffmanca)) [SIG Cloud Provider and Storage] - -### Other (Cleanup or Flake) - -- APIs for kubelet annotations and labels from k8s.io/kubernetes/pkg/kubelet/apis are now available under k8s.io/kubelet/pkg/apis/ ([#98931](https://github.com/kubernetes/kubernetes/pull/98931), [@michaelbeaumont](https://github.com/michaelbeaumont)) [SIG Apps, Auth and Node] -- Migrate `pkg/kubelet/(pod, pleg)` to structured logging ([#98990](https://github.com/kubernetes/kubernetes/pull/98990), [@gjkim42](https://github.com/gjkim42)) [SIG Instrumentation and Node] -- Migrate pkg/kubelet/nodestatus to structured logging ([#99001](https://github.com/kubernetes/kubernetes/pull/99001), [@QiWang19](https://github.com/QiWang19)) [SIG Node] -- Migrate pkg/kubelet/server logs to structured logging ([#98643](https://github.com/kubernetes/kubernetes/pull/98643), [@chenyw1990](https://github.com/chenyw1990)) [SIG Node] -- Migrate proxy/winkernel/proxier.go logs to structured logging ([#98001](https://github.com/kubernetes/kubernetes/pull/98001), [@JornShen](https://github.com/JornShen)) [SIG Network and Windows] -- Migrate scheduling_queue.go to structured logging ([#98358](https://github.com/kubernetes/kubernetes/pull/98358), [@tanjing2020](https://github.com/tanjing2020)) [SIG Scheduling] -- Several flags related to the deprecated dockershim which are present in the kubelet command line are now deprecated. ([#98730](https://github.com/kubernetes/kubernetes/pull/98730), [@dims](https://github.com/dims)) [SIG Node] -- The deprecated feature gates `CSIDriverRegistry`, `BlockVolume` and `CSIBlockVolume` are now unconditionally enabled and can no longer be specified in component invocations. ([#98021](https://github.com/kubernetes/kubernetes/pull/98021), [@gavinfish](https://github.com/gavinfish)) [SIG Storage] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- sigs.k8s.io/structured-merge-diff/v4: v4.0.2 → v4.0.3 - -### Removed -_Nothing has changed._ - - - -# v1.21.0-alpha.3 - - -## Downloads for v1.21.0-alpha.3 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes.tar.gz) | 704ec916a1dbd134c54184d2652671f80ae09274f9d23dbbed312944ebeccbc173e2e6b6949b38bdbbfdaf8aa032844deead5efeda1b3150f9751386d9184bc8 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-src.tar.gz) | 57db9e7560cfc9c10e7059cb5faf9c4bd5eb8f9b7964f44f000a417021cf80873184b774e7c66c80d4aba84c14080c6bc335618db3d2e5f276436ae065e25408 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | e2706efda92d5cf4f8b69503bb2f7703a8754407eff7f199bb77847838070e720e5f572126c14daa4c0c03b59bb1a63c1dfdeb6e936a40eff1d5497e871e3409 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-linux-386.tar.gz) | 007bb23c576356ed0890bdfd25a0f98d552599e0ffec19fb982591183c7c1f216d8a3ffa3abf15216be12ae5c4b91fdcd48a7306a2d26b007b86a6abd553fc61 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | 39504b0c610348beba60e8866fff265bad58034f74504951cd894c151a248db718d10f77ebc83f2c38b2d517f8513a46325b38889eefa261ca6dbffeceba50ff -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | 30bc2c40d0c759365422ad1651a6fb35909be771f463c5b971caf401f9209525d05256ab70c807e88628dd357c2896745eecf13eda0b748464da97d0a5ef2066 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | 085cdf574dc8fd33ece667130b8c45830b522a07860e03a2384283b1adea73a9652ef3dfaa566e69ee00aea1a6461608814b3ce7a3f703e4a934304f7ae12f97 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | b34b845037d83ea7b3e2d80a9ede4f889b71b17b93b1445f0d936a36e98c13ed6ada125630a68d9243a5fcd311ee37cdcc0c05da484da8488ea5060bc529dbfc -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | c4758adc7a404b776556efaa79655db2a70777c562145d6ea6887f3335988367a0c2fcd4383e469340f2a768b22e786951de212805ca1cb91104d41c21e0c9ce -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-windows-386.tar.gz) | f51edc79702bbd1d9cb3a672852a405e11b20feeab64c5411a7e85c9af304960663eb6b23ef96e0f8c44a722fecf58cb6d700ea2c42c05b3269d8efd5ad803f2 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | 6a3507ce4ac40a0dc7e4720538863fa15f8faf025085a032f34b8fa0f6fa4e8c26849baf649b5b32829b9182e04f82721b13950d31cf218c35be6bf1c05d6abf - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | 19181d162dfb0b30236e2bf1111000e037eece87c037ca2b24622ca94cb88db86aa4da4ca533522518b209bc9983bbfd6b880a7898e0da96b33f3f6c4690539b -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | 42a02f9e08a78ad5da6e5fa1ab12bf1e3c967c472fdbdadbd8746586da74dc8093682ba8513ff2a5301393c47ee9021b860e88ada56b13da386ef485708e46ca -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | 3c8ba8eb02f70061689bd7fab7813542005efe2edc6cfc6b7aecd03ffedf0b81819ad91d69fff588e83023d595eefbfe636aa55e1856add8733bf42fff3c748f -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | cd9e6537450411c39a06fd0b5819db3d16b668d403fb3627ec32c0e32dd1c4860e942934578ca0e1d1b8e6f21f450ff81e37e0cd46ff5c5faf7847ab074aefc5 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | ada3f65e53bc0e0c0229694dd48c425388089d6d77111a62476d1b08f6ad1d8ab3d60b9ed7d95ac1b42c2c6be8dc0618f40679717160769743c43583d8452362 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | ae0fec6aa59e49624b55d9a11c12fdf717ddfe04bdfd4f69965d03004a34e52ee4a3e83f7b61d0c6a86f43b72c99f3decb195b39ae529ef30526d18ec5f58f83 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | 9a48c140ab53b7ed8ecec6903988a1a474efc16d2538e5974bc9a12f0c9190be78c4f9e326bf4e982d0b7045a80b99dd0fda7e9b650663be5b89bfd991596746 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | 6912adbc9300344bea470d6435f7b387bfce59767078c11728ce59faf47cd3f72b41b9604fcc5cda45e9816fe939fbe2fb33e52a773e6ff2dfa9a615b4df6141 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | d66dccfe3e6ed6d81567c70703f15375a53992b3a5e2814b98c32e581b861ad95912e03ed2562415d087624c008038bb4a816611fa255442ae752968ea15856b -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | ad8c69a28f1fbafa3f1cb54909bfd3fc22b104bed63d7ca2b296208c9d43eb5f2943a0ff267da4c185186cdd9f7f77b315cd7f5f1bf9858c0bf42eceb9ac3c58 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | 91d723aa848a9cb028f5bcb41090ca346fb973961521d025c4399164de2c8029b57ca2c4daca560d3c782c05265d2eb0edb0abcce6f23d3efbecf2316a54d650 - -## Changelog since v1.21.0-alpha.2 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - Newly provisioned PVs by gce-pd will no longer have the beta FailureDomain label. gce-pd volume plugin will start to have GA topology label instead. ([#98700](https://github.com/kubernetes/kubernetes/pull/98700), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Cloud Provider, Storage and Testing] - - Remove alpha CSIMigrationXXComplete flag and add alpha InTreePluginXXUnregister flag. Deprecate CSIMigrationvSphereComplete flag and it will be removed in 1.22. ([#98243](https://github.com/kubernetes/kubernetes/pull/98243), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Node and Storage] - -## Changes by Kind - -### API Change - -- Adds support for portRange / EndPort in Network Policy ([#97058](https://github.com/kubernetes/kubernetes/pull/97058), [@rikatz](https://github.com/rikatz)) [SIG Apps and Network] -- Fixes using server-side apply with APIService resources ([#98576](https://github.com/kubernetes/kubernetes/pull/98576), [@kevindelgado](https://github.com/kevindelgado)) [SIG API Machinery, Apps and Testing] -- Kubernetes is now built using go1.15.7 ([#98363](https://github.com/kubernetes/kubernetes/pull/98363), [@cpanato](https://github.com/cpanato)) [SIG Cloud Provider, Instrumentation, Node, Release and Testing] -- Scheduler extender filter interface now can report unresolvable failed nodes in the new field `FailedAndUnresolvableNodes` of `ExtenderFilterResult` struct. Nodes in this map will be skipped in the preemption phase. ([#92866](https://github.com/kubernetes/kubernetes/pull/92866), [@cofyc](https://github.com/cofyc)) [SIG Scheduling] - -### Feature - -- A lease can only attach up to 10k objects. ([#98257](https://github.com/kubernetes/kubernetes/pull/98257), [@lingsamuel](https://github.com/lingsamuel)) [SIG API Machinery] -- Add ignore-errors flag for drain, support none-break drain in group ([#98203](https://github.com/kubernetes/kubernetes/pull/98203), [@yuzhiquan](https://github.com/yuzhiquan)) [SIG CLI] -- Base-images: Update to debian-iptables:buster-v1.4.0 - - Uses iptables 1.8.5 - - base-images: Update to debian-base:buster-v1.3.0 - - cluster/images/etcd: Build etcd:3.4.13-2 image - - Uses debian-base:buster-v1.3.0 ([#98401](https://github.com/kubernetes/kubernetes/pull/98401), [@pacoxu](https://github.com/pacoxu)) [SIG Testing] -- Export NewDebuggingRoundTripper function and DebugLevel options in the k8s.io/client-go/transport package. ([#98324](https://github.com/kubernetes/kubernetes/pull/98324), [@atosatto](https://github.com/atosatto)) [SIG API Machinery] -- Kubectl wait ensures that observedGeneration >= generation if applicable ([#97408](https://github.com/kubernetes/kubernetes/pull/97408), [@KnicKnic](https://github.com/KnicKnic)) [SIG CLI] -- Kubernetes is now built using go1.15.8 ([#98834](https://github.com/kubernetes/kubernetes/pull/98834), [@cpanato](https://github.com/cpanato)) [SIG Cloud Provider, Instrumentation, Release and Testing] -- New admission controller "denyserviceexternalips" is available. Clusters which do not *need- the Service "externalIPs" feature should enable this controller and be more secure. ([#97395](https://github.com/kubernetes/kubernetes/pull/97395), [@thockin](https://github.com/thockin)) [SIG API Machinery] -- Overall, enable the feature of `PreferNominatedNode` will improve the performance of scheduling where preemption might frequently happen, but in theory, enable the feature of `PreferNominatedNode`, the pod might not be scheduled to the best candidate node in the cluster. ([#93179](https://github.com/kubernetes/kubernetes/pull/93179), [@chendave](https://github.com/chendave)) [SIG Scheduling and Testing] -- Pause image upgraded to 3.4.1 in kubelet and kubeadm for both Linux and Windows. ([#98205](https://github.com/kubernetes/kubernetes/pull/98205), [@pacoxu](https://github.com/pacoxu)) [SIG CLI, Cloud Provider, Cluster Lifecycle, Node, Testing and Windows] -- The `ServiceAccountIssuerDiscovery` feature has graduated to GA, and is unconditionally enabled. The `ServiceAccountIssuerDiscovery` feature-gate will be removed in 1.22. ([#98553](https://github.com/kubernetes/kubernetes/pull/98553), [@mtaufen](https://github.com/mtaufen)) [SIG API Machinery, Auth and Testing] - -### Documentation - -- Feat: azure file migration go beta in 1.21. Feature gates CSIMigration to Beta (on by default) and CSIMigrationAzureFile to Beta (off by default since it requires installation of the AzureFile CSI Driver) - The in-tree AzureFile plugin "kubernetes.io/azure-file" is now deprecated and will be removed in 1.23. Users should enable CSIMigration + CSIMigrationAzureFile features and install the AzureFile CSI Driver (https://github.com/kubernetes-sigs/azurefile-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. - Users should start using the AzureFile CSI Driver directly for any new volumes. ([#96293](https://github.com/kubernetes/kubernetes/pull/96293), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] - -### Failing Test - -- Kubelet: the HostPort implementation in dockershim was not taking into consideration the HostIP field, causing that the same HostPort can not be used with different IP addresses. - This bug causes the conformance test "HostPort validates that there is no conflict between pods with same hostPort but different hostIP and protocol" to fail. ([#98755](https://github.com/kubernetes/kubernetes/pull/98755), [@aojea](https://github.com/aojea)) [SIG Cloud Provider, Network and Node] - -### Bug or Regression - -- Fix NPE in ephemeral storage eviction ([#98261](https://github.com/kubernetes/kubernetes/pull/98261), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Fixed a bug that on k8s nodes, when the policy of INPUT chain in filter table is not ACCEPT, healthcheck nodeport would not work. - Added iptables rules to allow healthcheck nodeport traffic. ([#97824](https://github.com/kubernetes/kubernetes/pull/97824), [@hanlins](https://github.com/hanlins)) [SIG Network] -- Fixed kube-proxy container image architecture for non amd64 images. ([#98526](https://github.com/kubernetes/kubernetes/pull/98526), [@saschagrunert](https://github.com/saschagrunert)) [SIG API Machinery, Release and Testing] -- Fixed provisioning of Cinder volumes migrated to CSI when StorageClass with AllowedTopologies was used. ([#98311](https://github.com/kubernetes/kubernetes/pull/98311), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixes a panic in the disruption budget controller for PDB objects with invalid selectors ([#98750](https://github.com/kubernetes/kubernetes/pull/98750), [@mortent](https://github.com/mortent)) [SIG Apps] -- Fixes connection errors when using `--volume-host-cidr-denylist` or `--volume-host-allow-local-loopback` ([#98436](https://github.com/kubernetes/kubernetes/pull/98436), [@liggitt](https://github.com/liggitt)) [SIG Network and Storage] -- If the user specifies an invalid timeout in the request URL, the request will be aborted with an HTTP 400. - - in cases where the client specifies a timeout in the request URL, the overall request deadline is shortened now since the deadline is setup as soon as the request is received by the apiserver. ([#96901](https://github.com/kubernetes/kubernetes/pull/96901), [@tkashem](https://github.com/tkashem)) [SIG API Machinery and Testing] -- Kubeadm: Some text in the `kubeadm upgrade plan` output has changed. If you have scripts or other automation that parses this output, please review these changes and update your scripts to account for the new output. ([#98728](https://github.com/kubernetes/kubernetes/pull/98728), [@stmcginnis](https://github.com/stmcginnis)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug where external credentials in an existing admin.conf prevented the CA certificate to be written in the cluster-info ConfigMap. ([#98882](https://github.com/kubernetes/kubernetes/pull/98882), [@kvaps](https://github.com/kvaps)) [SIG Cluster Lifecycle] -- Kubeadm: fix bad token placeholder text in "config print *-defaults --help" ([#98839](https://github.com/kubernetes/kubernetes/pull/98839), [@Mattias-](https://github.com/Mattias-)) [SIG Cluster Lifecycle] -- Kubeadm: get k8s CI version markers from k8s infra bucket ([#98836](https://github.com/kubernetes/kubernetes/pull/98836), [@hasheddan](https://github.com/hasheddan)) [SIG Cluster Lifecycle and Release] -- Mitigate CVE-2020-8555 for kube-up using GCE by preventing local loopback folume hosts. ([#97934](https://github.com/kubernetes/kubernetes/pull/97934), [@mattcary](https://github.com/mattcary)) [SIG Cloud Provider and Storage] -- Remove CSI topology from migrated in-tree gcepd volume. ([#97823](https://github.com/kubernetes/kubernetes/pull/97823), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Cloud Provider and Storage] -- Sync node status during kubelet node shutdown. - Adds an pod admission handler that rejects new pods when the node is in progress of shutting down. ([#98005](https://github.com/kubernetes/kubernetes/pull/98005), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Truncates a message if it hits the NoteLengthLimit when the scheduler records an event for the pod that indicates the pod has failed to schedule. ([#98715](https://github.com/kubernetes/kubernetes/pull/98715), [@carlory](https://github.com/carlory)) [SIG Scheduling] -- We will no longer automatically delete all data when a failure is detected during creation of the volume data file on a CSI volume. Now we will only remove the data file and volume path. ([#96021](https://github.com/kubernetes/kubernetes/pull/96021), [@huffmanca](https://github.com/huffmanca)) [SIG Storage] - -### Other (Cleanup or Flake) - -- Fix the description of command line flags that can override --config ([#98254](https://github.com/kubernetes/kubernetes/pull/98254), [@changshuchao](https://github.com/changshuchao)) [SIG Scheduling] -- Migrate scheduler/taint_manager.go structured logging ([#98259](https://github.com/kubernetes/kubernetes/pull/98259), [@tanjing2020](https://github.com/tanjing2020)) [SIG Apps] -- Migrate staging/src/k8s.io/apiserver/pkg/admission logs to structured logging ([#98138](https://github.com/kubernetes/kubernetes/pull/98138), [@lala123912](https://github.com/lala123912)) [SIG API Machinery] -- Resolves flakes in the Ingress conformance tests due to conflicts with controllers updating the Ingress object ([#98430](https://github.com/kubernetes/kubernetes/pull/98430), [@liggitt](https://github.com/liggitt)) [SIG Network and Testing] -- The default delegating authorization options now allow unauthenticated access to healthz, readyz, and livez. A system:masters user connecting to an authz delegator will not perform an authz check. ([#98325](https://github.com/kubernetes/kubernetes/pull/98325), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth, Cloud Provider and Scheduling] -- The e2e suite can be instructed not to wait for pods in kube-system to be ready or for all nodes to be ready by passing `--allowed-not-ready-nodes=-1` when invoking the e2e.test program. This allows callers to run subsets of the e2e suite in scenarios other than perfectly healthy clusters. ([#98781](https://github.com/kubernetes/kubernetes/pull/98781), [@smarterclayton](https://github.com/smarterclayton)) [SIG Testing] -- The feature gates `WindowsGMSA` and `WindowsRunAsUserName` that are GA since v1.18 are now removed. ([#96531](https://github.com/kubernetes/kubernetes/pull/96531), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Node and Windows] -- The new `-gce-zones` flag on the `e2e.test` binary instructs tests that check for information about how the cluster interacts with the cloud to limit their queries to the provided zone list. If not specified, the current behavior of asking the cloud provider for all available zones in multi zone clusters is preserved. ([#98787](https://github.com/kubernetes/kubernetes/pull/98787), [@smarterclayton](https://github.com/smarterclayton)) [SIG API Machinery, Cluster Lifecycle and Testing] - -## Dependencies - -### Added -- github.com/moby/spdystream: [v0.2.0](https://github.com/moby/spdystream/tree/v0.2.0) - -### Changed -- github.com/NYTimes/gziphandler: [56545f4 → v1.1.1](https://github.com/NYTimes/gziphandler/compare/56545f4...v1.1.1) -- github.com/container-storage-interface/spec: [v1.2.0 → v1.3.0](https://github.com/container-storage-interface/spec/compare/v1.2.0...v1.3.0) -- github.com/go-logr/logr: [v0.2.0 → v0.4.0](https://github.com/go-logr/logr/compare/v0.2.0...v0.4.0) -- github.com/gogo/protobuf: [v1.3.1 → v1.3.2](https://github.com/gogo/protobuf/compare/v1.3.1...v1.3.2) -- github.com/kisielk/errcheck: [v1.2.0 → v1.5.0](https://github.com/kisielk/errcheck/compare/v1.2.0...v1.5.0) -- github.com/yuin/goldmark: [v1.1.27 → v1.2.1](https://github.com/yuin/goldmark/compare/v1.1.27...v1.2.1) -- golang.org/x/sync: cd5d95a → 67f06af -- golang.org/x/tools: c1934b7 → 113979e -- k8s.io/klog/v2: v2.4.0 → v2.5.0 -- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.0.14 → v0.0.15 - -### Removed -- github.com/docker/spdystream: [449fdfc](https://github.com/docker/spdystream/tree/449fdfc) - - - -# v1.21.0-alpha.2 - - -## Downloads for v1.21.0-alpha.2 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes.tar.gz) | 6836f6c8514253fe0831fd171fc4ed92eb6d9a773491c8dc82b90d171a1b10076bd6bfaea56ec1e199c5f46c273265bdb9f174f0b2d99c5af1de4c99b862329e -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-src.tar.gz) | d137694804741a05ab09e5f9a418448b66aba0146c028eafce61bcd9d7c276521e345ce9223ffbc703e8172041d58dfc56a3242a4df3686f24905a4541fcd306 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | 9478b047a97717953f365c13a098feb7e3cb30a3df22e1b82aa945f2208dcc5cb90afc441ba059a3ae7aafb4ee000ec3a52dc65a8c043a5ac7255a391c875330 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-linux-386.tar.gz) | 44c8dd4b1ddfc256d35786c8abf45b0eb5f0794f5e310d2efc865748adddc50e8bf38aa71295ae8a82884cb65f2e0b9b0737b000f96fd8f2d5c19971d7c4d8e8 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | e1291989892769de6b978c17b8612b94da6f3b735a4d895100af622ca9ebb968c75548afea7ab00445869625dd0da3afec979e333afbb445805f5d31c1c13cc7 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | 3c4bcb8cbe73822d68a2f62553a364e20bec56b638c71d0f58679b4f4b277d809142346f18506914e694f6122a3e0f767eab20b7b1c4dbb79e4c5089981ae0f1 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | 9389974a790268522e187f5ba5237f3ee4684118c7db76bc3d4164de71d8208702747ec333b204c7a78073ab42553cbbce13a1883fab4fec617e093b05fab332 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | 63399e53a083b5af3816c28ff162c9de6b64c75da4647f0d6bbaf97afdf896823cb1e556f2abac75c6516072293026d3ff9f30676fd75143ac6ca3f4d21f4327 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | 50898f197a9d923971ff9046c9f02779b57f7b3cea7da02f3ea9bab8c08d65a9c4a7531a2470fa14783460f52111a52b96ebf916c0a1d8215b4070e4e861c1b0 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-windows-386.tar.gz) | a7743e839e1aa19f5ee20b6ee5000ac8ef9e624ac5be63bb574fad6992e4b9167193ed07e03c9bc524e88bfeed66c95341a38a03bff1b10bc9910345f33019f0 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | 5f1d19c230bd3542866d16051808d184e9dd3e2f8c001ed4cee7b5df91f872380c2bf56a3add8c9413ead9d8c369efce2bcab4412174df9b823d3592677bf74e - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | ef2cac10febde231aeb6f131e589450c560eeaab8046b49504127a091cddc17bc518c2ad56894a6a033033ab6fc6e121b1cc23691683bc36f45fe6b1dd8e0510 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | d11c9730307f08e80b2b8a7c64c3e9a9e43c622002e377dfe3a386f4541e24adc79a199a6f280f40298bb36793194fd44ed45defe8a3ee54a9cb1386bc26e905 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | 28f8c32bf98ee1add7edf5d341c3bac1afc0085f90dcbbfb8b27a92087f13e2b53c327c8935ee29bf1dc3160655b32bbe3e29d5741a8124a3848a777e7d42933 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | 99ae8d44b0de3518c27fa8bbddd2ecf053dfb789fb9d65f8a4ecf4c8331cf63d2f09a41c2bcd5573247d5f66a1b2e51944379df1715017d920d521b98589508a -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | f8c0e954a2dfc6845614488dadeed069cc7f3f08e33c351d7a77c6ef97867af590932e8576d12998a820a0e4d35d2eee797c764e2810f09ab1e90a5acaeaad33 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | c5456d50bfbe0d75fb150b3662ed7468a0abd3970792c447824f326894382c47bbd3a2cc5a290f691c8c09585ff6fe505ab86b4aff2b7e5ccee11b5e6354ae6c -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | 335b5cd8672e053302fd94d932fb2fa2e48eeeb1799650b3f93acdfa635e03a8453637569ab710c46885c8317759f4c60aaaf24dca9817d9fa47500fe4a3ca53 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | 3ee87dbeed8ace9351ac89bdaf7274dd10b4faec3ceba0825f690ec7a2bb7eb7c634274a1065a0939eec8ff3e43f72385f058f4ec141841550109e775bc5eff9 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | 6956f965b8d719b164214ec9195fdb2c776b907fe6d2c524082f00c27872a73475927fd7d2a994045ce78f6ad2aa5aeaf1eb5514df1810d2cfe342fd4e5ce4a1 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | 3b643aa905c709c57083c28dd9e8ffd88cb64466cda1499da7fc54176b775003e08b9c7a07b0964064df67c8142f6f1e6c13bfc261bd65fb064049920bfa57d0 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | b2e6d6fb0091f2541f9925018c2bdbb0138a95bab06b4c6b38abf4b7144b2575422263b78fb3c6fd09e76d90a25a8d35a6d4720dc169794d42c95aa22ecc6d5f - -## Changelog since v1.21.0-alpha.1 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - Remove storage metrics `storage_operation_errors_total`, since we already have `storage_operation_status_count`.And add new field `status` for `storage_operation_duration_seconds`, so that we can know about all status storage operation latency. ([#98332](https://github.com/kubernetes/kubernetes/pull/98332), [@JornShen](https://github.com/JornShen)) [SIG Instrumentation and Storage] - -## Changes by Kind - -### Deprecation - -- Remove the TokenRequest and TokenRequestProjection feature gates ([#97148](https://github.com/kubernetes/kubernetes/pull/97148), [@wawa0210](https://github.com/wawa0210)) [SIG Node] -- Removing experimental windows container hyper-v support with Docker ([#97141](https://github.com/kubernetes/kubernetes/pull/97141), [@wawa0210](https://github.com/wawa0210)) [SIG Node and Windows] -- The `export` query parameter (inconsistently supported by API resources and deprecated in v1.14) is fully removed. Requests setting this query parameter will now receive a 400 status response. ([#98312](https://github.com/kubernetes/kubernetes/pull/98312), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth and Testing] - -### API Change - -- Enable SPDY pings to keep connections alive, so that `kubectl exec` and `kubectl port-forward` won't be interrupted. ([#97083](https://github.com/kubernetes/kubernetes/pull/97083), [@knight42](https://github.com/knight42)) [SIG API Machinery and CLI] - -### Documentation - -- Official support to build kubernetes with docker-machine / remote docker is removed. This change does not affect building kubernetes with docker locally. ([#97935](https://github.com/kubernetes/kubernetes/pull/97935), [@adeniyistephen](https://github.com/adeniyistephen)) [SIG Release and Testing] -- Set kubelet option `--volume-stats-agg-period` to negative value to disable volume calculations. ([#96675](https://github.com/kubernetes/kubernetes/pull/96675), [@pacoxu](https://github.com/pacoxu)) [SIG Node] - -### Bug or Regression - -- Clean ReplicaSet by revision instead of creation timestamp in deployment controller ([#97407](https://github.com/kubernetes/kubernetes/pull/97407), [@waynepeking348](https://github.com/waynepeking348)) [SIG Apps] -- Ensure that client-go's EventBroadcaster is safe (non-racy) during shutdown. ([#95664](https://github.com/kubernetes/kubernetes/pull/95664), [@DirectXMan12](https://github.com/DirectXMan12)) [SIG API Machinery] -- Fix azure file migration issue ([#97877](https://github.com/kubernetes/kubernetes/pull/97877), [@andyzhangx](https://github.com/andyzhangx)) [SIG Auth, Cloud Provider and Storage] -- Fix kubelet from panic after getting the wrong signal ([#98200](https://github.com/kubernetes/kubernetes/pull/98200), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Fix repeatedly acquire the inhibit lock ([#98088](https://github.com/kubernetes/kubernetes/pull/98088), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Fixed a bug that the kubelet cannot start on BtrfS. ([#98042](https://github.com/kubernetes/kubernetes/pull/98042), [@gjkim42](https://github.com/gjkim42)) [SIG Node] -- Fixed an issue with garbage collection failing to clean up namespaced children of an object also referenced incorrectly by cluster-scoped children ([#98068](https://github.com/kubernetes/kubernetes/pull/98068), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Apps] -- Fixed no effect namespace when exposing deployment with --dry-run=client. ([#97492](https://github.com/kubernetes/kubernetes/pull/97492), [@masap](https://github.com/masap)) [SIG CLI] -- Fixing a bug where a failed node may not have the NoExecute taint set correctly ([#96876](https://github.com/kubernetes/kubernetes/pull/96876), [@howieyuen](https://github.com/howieyuen)) [SIG Apps and Node] -- Indentation of `Resource Quota` block in kubectl describe namespaces output gets correct. ([#97946](https://github.com/kubernetes/kubernetes/pull/97946), [@dty1er](https://github.com/dty1er)) [SIG CLI] -- KUBECTL_EXTERNAL_DIFF now accepts equal sign for additional parameters. ([#98158](https://github.com/kubernetes/kubernetes/pull/98158), [@dougsland](https://github.com/dougsland)) [SIG CLI] -- Kubeadm: fix a bug where "kubeadm join" would not properly handle missing names for existing etcd members. ([#97372](https://github.com/kubernetes/kubernetes/pull/97372), [@ihgann](https://github.com/ihgann)) [SIG Cluster Lifecycle] -- Kubelet should ignore cgroup driver check on Windows node. ([#97764](https://github.com/kubernetes/kubernetes/pull/97764), [@pacoxu](https://github.com/pacoxu)) [SIG Node and Windows] -- Make podTopologyHints protected by lock ([#95111](https://github.com/kubernetes/kubernetes/pull/95111), [@choury](https://github.com/choury)) [SIG Node] -- Readjust kubelet_containers_per_pod_count bucket ([#98169](https://github.com/kubernetes/kubernetes/pull/98169), [@wawa0210](https://github.com/wawa0210)) [SIG Instrumentation and Node] -- Scores from InterPodAffinity have stronger differentiation. ([#98096](https://github.com/kubernetes/kubernetes/pull/98096), [@leileiwan](https://github.com/leileiwan)) [SIG Scheduling] -- Specifying the KUBE_TEST_REPO environment variable when e2e tests are executed will instruct the test infrastructure to load that image from a location within the specified repo, using a predefined pattern. ([#93510](https://github.com/kubernetes/kubernetes/pull/93510), [@smarterclayton](https://github.com/smarterclayton)) [SIG Testing] -- Static pods will be deleted gracefully. ([#98103](https://github.com/kubernetes/kubernetes/pull/98103), [@gjkim42](https://github.com/gjkim42)) [SIG Node] -- Use network.Interface.VirtualMachine.ID to get the binded VM - Skip standalone VM when reconciling LoadBalancer ([#97635](https://github.com/kubernetes/kubernetes/pull/97635), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] - -### Other (Cleanup or Flake) - -- Kubeadm: change the default image repository for CI images from 'gcr.io/kubernetes-ci-images' to 'gcr.io/k8s-staging-ci-images' ([#97087](https://github.com/kubernetes/kubernetes/pull/97087), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Migrate generic_scheduler.go and types.go to structured logging. ([#98134](https://github.com/kubernetes/kubernetes/pull/98134), [@tanjing2020](https://github.com/tanjing2020)) [SIG Scheduling] -- Migrate proxy/winuserspace/proxier.go logs to structured logging ([#97941](https://github.com/kubernetes/kubernetes/pull/97941), [@JornShen](https://github.com/JornShen)) [SIG Network] -- Migrate staging/src/k8s.io/apiserver/pkg/audit/policy/reader.go logs to structured logging. ([#98252](https://github.com/kubernetes/kubernetes/pull/98252), [@lala123912](https://github.com/lala123912)) [SIG API Machinery and Auth] -- Migrate staging\src\k8s.io\apiserver\pkg\endpoints logs to structured logging ([#98093](https://github.com/kubernetes/kubernetes/pull/98093), [@lala123912](https://github.com/lala123912)) [SIG API Machinery] -- Node ([#96552](https://github.com/kubernetes/kubernetes/pull/96552), [@pandaamanda](https://github.com/pandaamanda)) [SIG Apps, Cloud Provider, Node and Scheduling] -- The kubectl alpha debug command was scheduled to be removed in v1.21. ([#98111](https://github.com/kubernetes/kubernetes/pull/98111), [@pandaamanda](https://github.com/pandaamanda)) [SIG CLI] -- Update cri-tools to [v1.20.0](https://github.com/kubernetes-sigs/cri-tools/releases/tag/v1.20.0) ([#97967](https://github.com/kubernetes/kubernetes/pull/97967), [@rajibmitra](https://github.com/rajibmitra)) [SIG Cloud Provider] -- Windows nodes on GCE will take longer to start due to dependencies installed at node creation time. ([#98284](https://github.com/kubernetes/kubernetes/pull/98284), [@pjh](https://github.com/pjh)) [SIG Cloud Provider] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- github.com/google/cadvisor: [v0.38.6 → v0.38.7](https://github.com/google/cadvisor/compare/v0.38.6...v0.38.7) -- k8s.io/gengo: 83324d8 → b6c5ce2 - -### Removed -_Nothing has changed._ - - - -# v1.21.0-alpha.1 - - -## Downloads for v1.21.0-alpha.1 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes.tar.gz) | b2bacd5c3fc9f829e6269b7d2006b0c6e464ff848bb0a2a8f2fe52ad2d7c4438f099bd8be847d8d49ac6e4087f4d74d5c3a967acd798e0b0cb4d7a2bdb122997 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-src.tar.gz) | 518ac5acbcf23902fb1b902b69dbf3e86deca5d8a9b5f57488a15f185176d5a109558f3e4df062366af874eca1bcd61751ee8098b0beb9bcdc025d9a1c9be693 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | eaa7aea84a5ed954df5ec710cbeb6ec88b46465f43cb3d09aabe2f714b84a050a50bf5736089f09dbf1090f2e19b44823d656c917e3c8c877630756c3026f2b6 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-linux-386.tar.gz) | 47f74b8d46ad1779c5b0b5f15aa15d5513a504eeb6f53db4201fbe9ff8956cb986b7c1b0e9d50a99f78e9e2a7f304f3fc1cc2fa239296d9a0dd408eb6069e975 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | 1a148e282628b008c8abd03dd12ec177ced17584b5115d92cd33dd251e607097d42e9da8c7089bd947134b900f85eb75a4740b6a5dd580c105455b843559df39 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | d13d2feb73bd032dc01f7e2955b98d8215a39fe1107d037a73fa1f7d06c3b93ebaa53ed4952d845c64454ef3cca533edb97132d234d50b6fb3bcbd8a8ad990eb -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | 8252105a17b09a78e9ad2c024e4e401a69764ac869708a071aaa06f81714c17b9e7c5b2eb8efde33f24d0b59f75c5da607d5e1e72bdf12adfbb8c829205cd1c1 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | 297a9082df4988389dc4be30eb636dff49f36f5d87047bab44745884e610f46a17ae3a08401e2cab155b7c439f38057bfd8288418215f7dd3bf6a49dbe61ea0e -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | 04c06490dd17cd5dccfd92bafa14acf64280ceaea370d9635f23aeb6984d1beae6d0d1d1506edc6f30f927deeb149b989d3e482b47fbe74008b371f629656e79 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-windows-386.tar.gz) | ec6e9e87a7d685f8751d7e58f24f417753cff5554a7229218cb3a08195d461b2e12409344950228e9fbbc92a8a06d35dd86242da6ff1e6652ec1fae0365a88c1 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | 51039e6221d3126b5d15e797002ae01d4f0b10789c5d2056532f27ef13f35c5a2e51be27764fda68e8303219963126559023aed9421313bec275c0827fbcaf8a - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | 4edf820930c88716263560275e3bd7fadb8dc3700b9f8e1d266562e356e0abeb1a913f536377dab91218e3940b447d6bf1da343b85da25c2256dc4dcde5798dd -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | b15213e53a8ab4ba512ce6ef9ad42dd197d419c61615cd23de344227fd846c90448d8f3d98e555b63ba5b565afa627cca6b7e3990ebbbba359c96f2391302df1 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | 5be29cca9a9358fc68351ee63e99d57dc2ffce6e42fc3345753dbbf7542ff2d770c4852424158540435fa6e097ce3afa9b13affc40c8b3b69fe8406798f8068f -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | 89fd99ab9ce85db0b94b86709932105efc883cc93959cf7ea9a39e79a4acea23064d7010eeb577450cccabe521c04b7ba47bbec212ed37edeed7cb04bad34518 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | 2fbc30862c77d247aa8d96ab9d1a144599505287b0033a3a2d0988958e7bb2f2e8b67f52c1fec74b4ec47d74ba22cd0f6cb5c4228acbaa72b1678d5fece0254d - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | 95658d321a0a371c0900b401d1469d96915310afbc4e4b9b11f031438bb188513b57d5a60b5316c3b0c18f541cda6f0ac42f59a76495f8abc743a067115da23a -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | f375acfb42aad6c65b833c270e7e3acfe9cd1d6b2441c33874e77faae263957f7acfe86f1b71f14298118595e4cc6952c7dea0c832f7f2e72428336f13034362 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | 43b4baccd58d74e7f48d096ab92f2bbbcdf47e30e7a3d2b56c6cc9f90002cfd4fefaac894f69bd5f9f4dbdb09a4749a77eb76b1b97d91746bd96fe94457879ab -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | e7962b522c6c7c14b9ee4c1d254d8bdd9846b2b33b0443fc9c4a41be6c40e5e6981798b720f0148f36263d5cc45d5a2bb1dd2f9ab2838e3d002e45b9bddeb7bf -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | 49ebc97f01829e65f7de15be00b882513c44782eaadd1b1825a227e3bd3c73cc6aca8345af05b303d8c43aa2cb944a069755b2709effb8cc22eae621d25d4ba5 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.21.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | 6e0fd7724b09e6befbcb53b33574e97f2db089f2eee4bbf391abb7f043103a5e6e32e3014c0531b88f9a3ca88887bbc68625752c44326f98dd53adb3a6d1bed8 - -## Changelog since v1.20.0 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - Kube-proxy's IPVS proxy mode no longer sets the net.ipv4.conf.all.route_localnet sysctl parameter. Nodes upgrading will have net.ipv4.conf.all.route_localnet set to 1 but new nodes will inherit the system default (usually 0). If you relied on any behavior requiring net.ipv4.conf.all.route_localnet, you must set ensure it is enabled as kube-proxy will no longer set it automatically. This change helps to further mitigate CVE-2020-8558. ([#92938](https://github.com/kubernetes/kubernetes/pull/92938), [@lbernail](https://github.com/lbernail)) [SIG Network and Release] - -## Changes by Kind - -### Deprecation - -- Deprecate the `topologyKeys` field in Service. This capability will be replaced with upcoming work around Topology Aware Subsetting and Service Internal Traffic Policy. ([#96736](https://github.com/kubernetes/kubernetes/pull/96736), [@andrewsykim](https://github.com/andrewsykim)) [SIG Apps] -- Kubeadm: deprecated command "alpha selfhosting pivot" is removed now. ([#97627](https://github.com/kubernetes/kubernetes/pull/97627), [@knight42](https://github.com/knight42)) [SIG Cluster Lifecycle] -- Kubeadm: graduate the command `kubeadm alpha kubeconfig user` to `kubeadm kubeconfig user`. The `kubeadm alpha kubeconfig user` command is deprecated now. ([#97583](https://github.com/kubernetes/kubernetes/pull/97583), [@knight42](https://github.com/knight42)) [SIG Cluster Lifecycle] -- Kubeadm: the "kubeadm alpha certs" command is removed now, please use "kubeadm certs" instead. ([#97706](https://github.com/kubernetes/kubernetes/pull/97706), [@knight42](https://github.com/knight42)) [SIG Cluster Lifecycle] -- Remove the deprecated metrics "scheduling_algorithm_preemption_evaluation_seconds" and "binding_duration_seconds", suggest to use "scheduler_framework_extension_point_duration_seconds" instead. ([#96447](https://github.com/kubernetes/kubernetes/pull/96447), [@chendave](https://github.com/chendave)) [SIG Cluster Lifecycle, Instrumentation, Scheduling and Testing] -- The PodSecurityPolicy API is deprecated in 1.21, and will no longer be served starting in 1.25. ([#97171](https://github.com/kubernetes/kubernetes/pull/97171), [@deads2k](https://github.com/deads2k)) [SIG Auth and CLI] - -### API Change - -- Change the APIVersion proto name of BoundObjectRef from aPIVersion to apiVersion. ([#97379](https://github.com/kubernetes/kubernetes/pull/97379), [@kebe7jun](https://github.com/kebe7jun)) [SIG Auth] -- Promote Immutable Secrets/ConfigMaps feature to Stable. - This allows to set `Immutable` field in Secrets or ConfigMap object to mark their contents as immutable. ([#97615](https://github.com/kubernetes/kubernetes/pull/97615), [@wojtek-t](https://github.com/wojtek-t)) [SIG Apps, Architecture, Node and Testing] - -### Feature - -- Add flag --lease-max-object-size and metric etcd_lease_object_counts for kube-apiserver to config and observe max objects attached to a single etcd lease. ([#97480](https://github.com/kubernetes/kubernetes/pull/97480), [@lingsamuel](https://github.com/lingsamuel)) [SIG API Machinery, Instrumentation and Scalability] -- Add flag --lease-reuse-duration-seconds for kube-apiserver to config etcd lease reuse duration. ([#97009](https://github.com/kubernetes/kubernetes/pull/97009), [@lingsamuel](https://github.com/lingsamuel)) [SIG API Machinery and Scalability] -- Adds the ability to pass --strict-transport-security-directives to the kube-apiserver to set the HSTS header appropriately. Be sure you understand the consequences to browsers before setting this field. ([#96502](https://github.com/kubernetes/kubernetes/pull/96502), [@249043822](https://github.com/249043822)) [SIG Auth] -- Kubeadm now includes CoreDNS v1.8.0. ([#96429](https://github.com/kubernetes/kubernetes/pull/96429), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Kubeadm: add support for certificate chain validation. When using kubeadm in external CA mode, this allows an intermediate CA to be used to sign the certificates. The intermediate CA certificate must be appended to each signed certificate for this to work correctly. ([#97266](https://github.com/kubernetes/kubernetes/pull/97266), [@robbiemcmichael](https://github.com/robbiemcmichael)) [SIG Cluster Lifecycle] -- Kubeadm: amend the node kernel validation to treat CGROUP_PIDS, FAIR_GROUP_SCHED as required and CFS_BANDWIDTH, CGROUP_HUGETLB as optional ([#96378](https://github.com/kubernetes/kubernetes/pull/96378), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle and Node] -- The Kubernetes pause image manifest list now contains an image for Windows Server 20H2. ([#97322](https://github.com/kubernetes/kubernetes/pull/97322), [@claudiubelu](https://github.com/claudiubelu)) [SIG Windows] -- The apimachinery util/net function used to detect the bind address `ResolveBindAddress()` - takes into consideration global ip addresses on loopback interfaces when: - - the host has default routes - - there are no global IPs on those interfaces. - in order to support more complex network scenarios like BGP Unnumbered RFC 5549 ([#95790](https://github.com/kubernetes/kubernetes/pull/95790), [@aojea](https://github.com/aojea)) [SIG Network] - -### Bug or Regression - -- ## Changelog - - ### General - - Fix priority expander falling back to a random choice even though there is a higher priority option to choose - - Clone `kubernetes/kubernetes` in `update-vendor.sh` shallowly, instead of fetching all revisions - - Speed up binpacking by reducing the number of PreFilter calls (call once per pod instead of #pods*#nodes times) - - Speed up finding unneeded nodes by 5x+ in very large clusters by reducing the number of PreFilter calls - - Expose `--max-nodes-total` as a metric - - Errors in `IncreaseSize` changed from type `apiError` to `cloudProviderError` - - Make `build-in-docker` and `test-in-docker` work on Linux systems with SELinux enabled - - Fix an error where existing nodes were not considered as destinations while finding place for pods in scale-down simulations - - Remove redundant log lines and reduce severity around parsing kubeEnv - - Don't treat nodes created by virtual kubelet as nodes from non-autoscaled node groups - - Remove redundant logging around calculating node utilization - - Add configurable `--network` and `--rm` flags for docker in `Makefile` - - Subtract DaemonSet pods' requests from node allocatable in the denominator while computing node utilization - - Include taints by condition when determining if a node is unready/still starting - - Fix `update-vendor.sh` to work on OSX and zsh - - Add best-effort eviction for DaemonSet pods while scaling down non-empty nodes - - Add build support for ARM64 - - ### AliCloud - - Add missing daemonsets and replicasets to ALI example cluster role - - ### Apache CloudStack - - Add support for Apache CloudStack - - ### AWS - - Regenerate list of EC2 instances - - Fix pricing endpoint in AWS China Region - - ### Azure - - Add optional jitter on initial VMSS VM cache refresh, keep the refreshes spread over time - - Serve from cache for the whole period of ongoing throttling - - Fix unwanted VMSS VMs cache invalidations - - Enforce setting the number of retries if cloud provider backoff is enabled - - Don't update capacity if VMSS provisioning state is updating - - Support allocatable resources overrides via VMSS tags - - Add missing stable labels in template nodes - - Proactively set instance status to deleting on node deletions - - ### Cluster API - - Migrate interaction with the API from using internal types to using Unstructured - - Improve tests to work better with constrained resources - - Add support for node autodiscovery - - Add support for `--cloud-config` - - Update group identifier to use for Cluster API annotations - - ### Exoscale - - Add support for Exoscale - - ### GCE - - Decrease the number of GCE Read Requests made while deleting nodes - - Base pricing of custom instances on their instance family type - - Add pricing information for missing machine types - - Add pricing information for different GPU types - - Ignore the new `topology.gke.io/zone` label when comparing groups - - Add missing stable labels to template nodes - - ### HuaweiCloud - - Add auto scaling group support - - Implement node group by AS - - Implement getting desired instance number of node group - - Implement increasing node group size - - Implement TemplateNodeInfo - - Implement caching instances - - ### IONOS - - Add support for IONOS - - ### Kubemark - - Skip non-kubemark nodes while computing node infos for node groups. - - ### Magnum - - Add Magnum support in the Cluster Autoscaler helm chart - - ### Packet - - Allow empty nodepools - - Add support for multiple nodepools - - Add pricing support - - ## Image - Image: `k8s.gcr.io/autoscaling/cluster-autoscaler:v1.20.0` ([#97011](https://github.com/kubernetes/kubernetes/pull/97011), [@towca](https://github.com/towca)) [SIG Cloud Provider] -- AcceleratorStats will be available in the Summary API of kubelet when cri_stats_provider is used. ([#96873](https://github.com/kubernetes/kubernetes/pull/96873), [@ruiwen-zhao](https://github.com/ruiwen-zhao)) [SIG Node] -- Add limited lines to log when having tail option ([#93920](https://github.com/kubernetes/kubernetes/pull/93920), [@zhouya0](https://github.com/zhouya0)) [SIG Node] -- Avoid systemd-logind loading configuration warning ([#97950](https://github.com/kubernetes/kubernetes/pull/97950), [@wzshiming](https://github.com/wzshiming)) [SIG Node] -- Cloud-controller-manager: routes controller should not depend on --allocate-node-cidrs ([#97029](https://github.com/kubernetes/kubernetes/pull/97029), [@andrewsykim](https://github.com/andrewsykim)) [SIG Cloud Provider and Testing] -- Copy annotations with empty value when deployment rolls back ([#94858](https://github.com/kubernetes/kubernetes/pull/94858), [@waynepeking348](https://github.com/waynepeking348)) [SIG Apps] -- Detach volumes from vSphere nodes not tracked by attach-detach controller ([#96689](https://github.com/kubernetes/kubernetes/pull/96689), [@gnufied](https://github.com/gnufied)) [SIG Cloud Provider and Storage] -- Fix kubectl label error when local=true is set. ([#97440](https://github.com/kubernetes/kubernetes/pull/97440), [@pandaamanda](https://github.com/pandaamanda)) [SIG CLI] -- Fix Azure file share not deleted issue when the namespace is deleted ([#97417](https://github.com/kubernetes/kubernetes/pull/97417), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix CVE-2020-8555 for Gluster client connections. ([#97922](https://github.com/kubernetes/kubernetes/pull/97922), [@liggitt](https://github.com/liggitt)) [SIG Storage] -- Fix counting error in service/nodeport/loadbalancer quota check ([#97451](https://github.com/kubernetes/kubernetes/pull/97451), [@pacoxu](https://github.com/pacoxu)) [SIG API Machinery, Network and Testing] -- Fix kubectl-convert import known versions ([#97754](https://github.com/kubernetes/kubernetes/pull/97754), [@wzshiming](https://github.com/wzshiming)) [SIG CLI and Testing] -- Fix missing cadvisor machine metrics. ([#97006](https://github.com/kubernetes/kubernetes/pull/97006), [@lingsamuel](https://github.com/lingsamuel)) [SIG Node] -- Fix nil VMSS name when setting service to auto mode ([#97366](https://github.com/kubernetes/kubernetes/pull/97366), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Fix the panic when kubelet registers if a node object already exists with no Status.Capacity or Status.Allocatable ([#95269](https://github.com/kubernetes/kubernetes/pull/95269), [@SataQiu](https://github.com/SataQiu)) [SIG Node] -- Fix the regression with the slow pods termination. Before this fix pods may take an additional time to terminate - up to one minute. Reversing the change that ensured that CNI resources cleaned up when the pod is removed on API server. ([#97980](https://github.com/kubernetes/kubernetes/pull/97980), [@SergeyKanzhelev](https://github.com/SergeyKanzhelev)) [SIG Node] -- Fix to recover CSI volumes from certain dangling attachments ([#96617](https://github.com/kubernetes/kubernetes/pull/96617), [@yuga711](https://github.com/yuga711)) [SIG Apps and Storage] -- Fix: azure file latency issue for metadata-heavy workloads ([#97082](https://github.com/kubernetes/kubernetes/pull/97082), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed Cinder volume IDs on OpenStack Train ([#96673](https://github.com/kubernetes/kubernetes/pull/96673), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider] -- Fixed FibreChannel volume plugin corrupting filesystems on detach of multipath volumes. ([#97013](https://github.com/kubernetes/kubernetes/pull/97013), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixed a bug in kubelet that will saturate CPU utilization after containerd got restarted. ([#97174](https://github.com/kubernetes/kubernetes/pull/97174), [@hanlins](https://github.com/hanlins)) [SIG Node] -- Fixed bug in CPUManager with race on container map access ([#97427](https://github.com/kubernetes/kubernetes/pull/97427), [@klueska](https://github.com/klueska)) [SIG Node] -- Fixed cleanup of block devices when /var/lib/kubelet is a symlink. ([#96889](https://github.com/kubernetes/kubernetes/pull/96889), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- GCE Internal LoadBalancer sync loop will now release the ILB IP address upon sync failure. An error in ILB forwarding rule creation will no longer leak IP addresses. ([#97740](https://github.com/kubernetes/kubernetes/pull/97740), [@prameshj](https://github.com/prameshj)) [SIG Cloud Provider and Network] -- Ignore update pod with no new images in alwaysPullImages admission controller ([#96668](https://github.com/kubernetes/kubernetes/pull/96668), [@pacoxu](https://github.com/pacoxu)) [SIG Apps, Auth and Node] -- Kubeadm now installs version 3.4.13 of etcd when creating a cluster with v1.19 ([#97244](https://github.com/kubernetes/kubernetes/pull/97244), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle] -- Kubeadm: avoid detection of the container runtime for commands that do not need it ([#97625](https://github.com/kubernetes/kubernetes/pull/97625), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug in the host memory detection code on 32bit Linux platforms ([#97403](https://github.com/kubernetes/kubernetes/pull/97403), [@abelbarrera15](https://github.com/abelbarrera15)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug where "kubeadm upgrade" commands can fail if CoreDNS v1.8.0 is installed. ([#97919](https://github.com/kubernetes/kubernetes/pull/97919), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Performance regression [#97685](https://github.com/kubernetes/kubernetes/issues/97685) has been fixed. ([#97860](https://github.com/kubernetes/kubernetes/pull/97860), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) [SIG API Machinery] -- Remove deprecated --cleanup-ipvs flag of kube-proxy, and make --cleanup flag always to flush IPVS ([#97336](https://github.com/kubernetes/kubernetes/pull/97336), [@maaoBit](https://github.com/maaoBit)) [SIG Network] -- The current version of the container image publicly exposed IP serving a /metrics endpoint to the Internet. The new version of the container image serves /metrics endpoint on a different port. ([#97621](https://github.com/kubernetes/kubernetes/pull/97621), [@vbannai](https://github.com/vbannai)) [SIG Cloud Provider] -- Use force unmount for NFS volumes if regular mount fails after 1 minute timeout ([#96844](https://github.com/kubernetes/kubernetes/pull/96844), [@gnufied](https://github.com/gnufied)) [SIG Storage] -- Users will see increase in time for deletion of pods and also guarantee that removal of pod from api server would mean deletion of all the resources from container runtime. ([#92817](https://github.com/kubernetes/kubernetes/pull/92817), [@kmala](https://github.com/kmala)) [SIG Node] -- Using exec auth plugins with kubectl no longer results in warnings about constructing many client instances from the same exec auth config. ([#97857](https://github.com/kubernetes/kubernetes/pull/97857), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Auth] -- Warning about using a deprecated volume plugin is logged only once. ([#96751](https://github.com/kubernetes/kubernetes/pull/96751), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] - -### Other (Cleanup or Flake) - -- Bump github.com/Azure/go-autorest/autorest to v0.11.12 ([#97033](https://github.com/kubernetes/kubernetes/pull/97033), [@patrickshan](https://github.com/patrickshan)) [SIG API Machinery, CLI, Cloud Provider and Cluster Lifecycle] -- Delete deprecated mixed protocol annotation ([#97096](https://github.com/kubernetes/kubernetes/pull/97096), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Kube-proxy: Traffic from the cluster directed to ExternalIPs is always sent directly to the Service. ([#96296](https://github.com/kubernetes/kubernetes/pull/96296), [@aojea](https://github.com/aojea)) [SIG Network and Testing] -- Kubeadm: fix a whitespace issue in the output of the "kubeadm join" command shown as the output of "kubeadm init" and "kubeadm token create --print-join-command" ([#97413](https://github.com/kubernetes/kubernetes/pull/97413), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: improve the error messaging when the user provides an invalid discovery token CA certificate hash. ([#97290](https://github.com/kubernetes/kubernetes/pull/97290), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Migrate log messages in pkg/scheduler/{scheduler.go,factory.go} to structured logging ([#97509](https://github.com/kubernetes/kubernetes/pull/97509), [@aldudko](https://github.com/aldudko)) [SIG Scheduling] -- Migrate proxy/iptables/proxier.go logs to structured logging ([#97678](https://github.com/kubernetes/kubernetes/pull/97678), [@JornShen](https://github.com/JornShen)) [SIG Network] -- Migrate some scheduler log messages to structured logging ([#97349](https://github.com/kubernetes/kubernetes/pull/97349), [@aldudko](https://github.com/aldudko)) [SIG Scheduling] -- NONE ([#97167](https://github.com/kubernetes/kubernetes/pull/97167), [@geegeea](https://github.com/geegeea)) [SIG Node] -- NetworkPolicy validation framework optimizations for rapidly verifying CNI's work correctly across several pods and namespaces ([#91592](https://github.com/kubernetes/kubernetes/pull/91592), [@jayunit100](https://github.com/jayunit100)) [SIG Network, Storage and Testing] -- Official support to build kubernetes with docker-machine / remote docker is removed. This change does not affect building kubernetes with docker locally. ([#97618](https://github.com/kubernetes/kubernetes/pull/97618), [@jherrera123](https://github.com/jherrera123)) [SIG Release and Testing] -- Scheduler plugin validation now provides all errors detected instead of the first one. ([#96745](https://github.com/kubernetes/kubernetes/pull/96745), [@lingsamuel](https://github.com/lingsamuel)) [SIG Node, Scheduling and Testing] -- Storage related e2e testsuite redesign & cleanup ([#96573](https://github.com/kubernetes/kubernetes/pull/96573), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Storage and Testing] -- The OIDC authenticator no longer waits 10 seconds before attempting to fetch the metadata required to verify tokens. ([#97693](https://github.com/kubernetes/kubernetes/pull/97693), [@enj](https://github.com/enj)) [SIG API Machinery and Auth] -- The `AttachVolumeLimit` feature gate that is GA since v1.17 is now removed. ([#96539](https://github.com/kubernetes/kubernetes/pull/96539), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Storage] -- The `CSINodeInfo` feature gate that is GA since v1.17 is unconditionally enabled, and can no longer be specified via the `--feature-gates` argument. ([#96561](https://github.com/kubernetes/kubernetes/pull/96561), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Apps, Auth, Scheduling, Storage and Testing] -- The deprecated feature gates `RotateKubeletClientCertificate`, `AttachVolumeLimit`, `VolumePVCDataSource` and `EvenPodsSpread` are now unconditionally enabled and can no longer be specified in component invocations. ([#97306](https://github.com/kubernetes/kubernetes/pull/97306), [@gavinfish](https://github.com/gavinfish)) [SIG Node, Scheduling and Storage] -- `ServiceNodeExclusion`, `NodeDisruptionExclusion` and `LegacyNodeRoleBehavior`(locked to false) features have been promoted to GA. - To prevent control plane nodes being added to load balancers automatically, upgrade users need to add "node.kubernetes.io/exclude-from-external-load-balancers" label to control plane nodes. ([#97543](https://github.com/kubernetes/kubernetes/pull/97543), [@pacoxu](https://github.com/pacoxu)) [SIG API Machinery, Apps, Cloud Provider and Network] - -### Uncategorized - -- Adding Brazilian Portuguese translation for kubectl ([#61595](https://github.com/kubernetes/kubernetes/pull/61595), [@cpanato](https://github.com/cpanato)) [SIG CLI] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- github.com/Azure/go-autorest/autorest: [v0.11.1 → v0.11.12](https://github.com/Azure/go-autorest/autorest/compare/v0.11.1...v0.11.12) -- github.com/coredns/corefile-migration: [v1.0.10 → v1.0.11](https://github.com/coredns/corefile-migration/compare/v1.0.10...v1.0.11) -- github.com/golang/mock: [v1.4.1 → v1.4.4](https://github.com/golang/mock/compare/v1.4.1...v1.4.4) -- github.com/google/cadvisor: [v0.38.5 → v0.38.6](https://github.com/google/cadvisor/compare/v0.38.5...v0.38.6) -- github.com/heketi/heketi: [c2e2a4a → v10.2.0+incompatible](https://github.com/heketi/heketi/compare/c2e2a4a...v10.2.0) -- github.com/miekg/dns: [v1.1.4 → v1.1.35](https://github.com/miekg/dns/compare/v1.1.4...v1.1.35) -- k8s.io/system-validators: v1.2.0 → v1.3.0 - -### Removed -- rsc.io/quote/v3: v3.1.0 -- rsc.io/sampler: v1.3.0 diff --git a/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md b/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md index 0a6d352d2c..a0b4d78dab 100644 --- a/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md +++ b/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md @@ -196,13 +196,6 @@ the slightly simpler syntax: kubectl port-forward deployment/mongo :27017 ``` -The output is similar to this: - -``` -Forwarding from 127.0.0.1:63753 -> 27017 -Forwarding from [::1]:63753 -> 27017 -``` - The `kubectl` tool finds a local port number that is not in use (avoiding low ports numbers, because these might be used by other applications). The output is similar to: diff --git a/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md index 47cec90f26..5c402e0304 100644 --- a/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md +++ b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md @@ -34,7 +34,7 @@ Dashboard also provides information on the state of Kubernetes resources in your The Dashboard UI is not deployed by default. To deploy it, run the following command: ``` -kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml +kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml ``` ## Accessing the Dashboard UI diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md index 62e66d1a8f..57aac35a7a 100644 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md @@ -229,7 +229,7 @@ serverTLSBootstrap: true If you have already created the cluster you must adapt it by doing the following: - Find and edit the `kubelet-config-{{< skew latestVersion >}}` ConfigMap in the `kube-system` namespace. -In that ConfigMap, the `config` key has a +In that ConfigMap, the `kubelet` key has a [KubeletConfiguration](/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration) document as its value. Edit the KubeletConfiguration document to set `serverTLSBootstrap: true`. - On each node, add the `serverTLSBootstrap: true` field in `/var/lib/kubelet/config.yaml` diff --git a/content/en/docs/tasks/administer-cluster/nodelocaldns.md b/content/en/docs/tasks/administer-cluster/nodelocaldns.md index b0f0596599..33417b00ad 100644 --- a/content/en/docs/tasks/administer-cluster/nodelocaldns.md +++ b/content/en/docs/tasks/administer-cluster/nodelocaldns.md @@ -79,7 +79,7 @@ If you are using the sample manifest from the previous point, this will require * If kube-proxy is running in IPVS mode: ``` bash - sed -i "s/__PILLAR__LOCAL__DNS__/$localdns/g; s/__PILLAR__DNS__DOMAIN__/$domain/g; s/__PILLAR__DNS__SERVER__//g; s/__PILLAR__CLUSTER__DNS__/$kubedns/g" nodelocaldns.yaml + sed -i "s/__PILLAR__LOCAL__DNS__/$localdns/g; s/__PILLAR__DNS__DOMAIN__/$domain/g; s/,__PILLAR__DNS__SERVER__//g; s/__PILLAR__CLUSTER__DNS__/$kubedns/g" nodelocaldns.yaml ``` In this mode, node-local-dns pods listen only on ``. The node-local-dns interface cannot bind the kube-dns cluster IP since the interface used for IPVS loadbalancing already uses this address. `__PILLAR__UPSTREAM__SERVERS__` will be populated by the node-local-dns pods. diff --git a/content/en/docs/tasks/configmap-secret/managing-secret-using-config-file.md b/content/en/docs/tasks/configmap-secret/managing-secret-using-config-file.md index b405d57baf..b2aace7057 100644 --- a/content/en/docs/tasks/configmap-secret/managing-secret-using-config-file.md +++ b/content/en/docs/tasks/configmap-secret/managing-secret-using-config-file.md @@ -131,6 +131,8 @@ The output is similar to: ```yaml apiVersion: v1 +data: + config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19 kind: Secret metadata: creationTimestamp: 2018-11-15T20:40:59Z @@ -139,8 +141,6 @@ metadata: resourceVersion: "7225" uid: c280ad2e-e916-11e8-98f2-025000000001 type: Opaque -data: - config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19 ``` The commands `kubectl get` and `kubectl describe` avoid showing the contents of a `Secret` by @@ -168,6 +168,8 @@ Results in the following Secret: ```yaml apiVersion: v1 +data: + username: YWRtaW5pc3RyYXRvcg== kind: Secret metadata: creationTimestamp: 2018-11-15T20:46:46Z @@ -176,8 +178,6 @@ metadata: resourceVersion: "7579" uid: 91460ecb-e917-11e8-98f2-025000000001 type: Opaque -data: - username: YWRtaW5pc3RyYXRvcg== ``` Where `YWRtaW5pc3RyYXRvcg==` decodes to `administrator`. diff --git a/content/en/docs/tasks/configmap-secret/managing-secret-using-kubectl.md b/content/en/docs/tasks/configmap-secret/managing-secret-using-kubectl.md index 293915736e..fe63c2434d 100644 --- a/content/en/docs/tasks/configmap-secret/managing-secret-using-kubectl.md +++ b/content/en/docs/tasks/configmap-secret/managing-secret-using-kubectl.md @@ -1,5 +1,5 @@ --- -title: Managing Secret using kubectl +title: Managing Secrets using kubectl content_type: task weight: 10 description: Creating Secret objects using kubectl command line. @@ -15,7 +15,7 @@ description: Creating Secret objects using kubectl command line. ## Create a Secret -A `Secret` can contain user credentials required by Pods to access a database. +A `Secret` can contain user credentials required by pods to access a database. For example, a database connection string consists of a username and password. You can store the username in a file `./username.txt` and the password in a file `./password.txt` on your local machine. @@ -24,11 +24,10 @@ file `./password.txt` on your local machine. echo -n 'admin' > ./username.txt echo -n '1f2d1e2e67df' > ./password.txt ``` - -The `-n` flag in the above two commands ensures that the generated files will -not contain an extra newline character at the end of the text. This is -important because when `kubectl` reads a file and encode the content into -base64 string, the extra newline character gets encoded too. +In these commands, the `-n` flag ensures that the generated files do not have +an extra newline character at the end of the text. This is important because +when `kubectl` reads a file and encodes the content into a base64 string, the +extra newline character gets encoded too. The `kubectl create secret` command packages these files into a Secret and creates the object on the API server. @@ -45,7 +44,7 @@ The output is similar to: secret/db-user-pass created ``` -Default key name is the filename. You may optionally set the key name using +The default key name is the filename. You can optionally set the key name using `--from-file=[key=]source`. For example: ```shell @@ -54,17 +53,18 @@ kubectl create secret generic db-user-pass \ --from-file=password=./password.txt ``` -You do not need to escape special characters in passwords from files -(`--from-file`). +You do not need to escape special characters in password strings that you +include in a file. You can also provide Secret data using the `--from-literal==` tag. This tag can be specified more than once to provide multiple key-value pairs. Note that special characters such as `$`, `\`, `*`, `=`, and `!` will be interpreted by your [shell](https://en.wikipedia.org/wiki/Shell_(computing)) and require escaping. + In most shells, the easiest way to escape the password is to surround it with -single quotes (`'`). For example, if your actual password is `S!B\*d$zDsb=`, -you should execute the command this way: +single quotes (`'`). For example, if your password is `S!B\*d$zDsb=`, +run the following command: ```shell kubectl create secret generic dev-db-secret \ @@ -74,7 +74,7 @@ kubectl create secret generic dev-db-secret \ ## Verify the Secret -You can check that the secret was created: +Check that the Secret was created: ```shell kubectl get secrets @@ -111,7 +111,7 @@ username: 5 bytes The commands `kubectl get` and `kubectl describe` avoid showing the contents of a `Secret` by default. This is to protect the `Secret` from being exposed -accidentally to an onlooker, or from being stored in a terminal log. +accidentally, or from being stored in a terminal log. ## Decoding the Secret {#decoding-secret} @@ -141,7 +141,7 @@ The output is similar to: ## Clean Up -To delete the Secret you have created: +Delete the Secret you created: ```shell kubectl delete secret db-user-pass @@ -152,5 +152,5 @@ kubectl delete secret db-user-pass ## {{% heading "whatsnext" %}} - Read more about the [Secret concept](/docs/concepts/configuration/secret/) -- Learn how to [manage Secret using config file](/docs/tasks/configmap-secret/managing-secret-using-config-file/) -- Learn how to [manage Secret using kustomize](/docs/tasks/configmap-secret/managing-secret-using-kustomize/) +- Learn how to [manage Secrets using config files](/docs/tasks/configmap-secret/managing-secret-using-config-file/) +- Learn how to [manage Secrets using kustomize](/docs/tasks/configmap-secret/managing-secret-using-kustomize/) diff --git a/content/en/docs/tasks/configmap-secret/managing-secret-using-kustomize.md b/content/en/docs/tasks/configmap-secret/managing-secret-using-kustomize.md index fb257a6026..4e78a4c5f0 100644 --- a/content/en/docs/tasks/configmap-secret/managing-secret-using-kustomize.md +++ b/content/en/docs/tasks/configmap-secret/managing-secret-using-kustomize.md @@ -48,7 +48,19 @@ secretGenerator: - password=1f2d1e2e67df ``` -Note that in both cases, you don't need to base64 encode the values. +You can also define the `secretGenerator` in the `kustomization.yaml` +file by providing `.env` files. +For example, the following `kustomization.yaml` file pulls in data from +`.env.secret` file: + +```yaml +secretGenerator: +- name: db-user-pass + envs: + - .env.secret +``` + +Note that in all cases, you don't need to base64 encode the values. ## Create the Secret diff --git a/content/en/docs/tasks/configure-pod-container/configure-gmsa.md b/content/en/docs/tasks/configure-pod-container/configure-gmsa.md index 360deada02..0073feea24 100644 --- a/content/en/docs/tasks/configure-pod-container/configure-gmsa.md +++ b/content/en/docs/tasks/configure-pod-container/configure-gmsa.md @@ -197,21 +197,70 @@ As Pod specs with GMSA fields populated (as described above) are applied in a cl 1. The container runtime configures each Windows container with the specified GMSA credential spec so that the container can assume the identity of the GMSA in Active Directory and access services in the domain using that identity. +## Containerd + +On Windows Server 2019, in order to use GMSA with containerd, you must be running OS Build 17763.1817 (or later) which can be installed using the patch [KB5000822](https://support.microsoft.com/en-us/topic/march-9-2021-kb5000822-os-build-17763-1817-2eb6197f-e3b1-4f42-ab51-84345e063564). + +There is also a known issue with containerd that occurs when trying to connect to SMB shares from Pods. Once you have configured GMSA, the pod will be unable to connect to the share using the hostname or FQDN, but connecting to the share using an IP address works as expected. + +```PowerShell +ping adserver.ad.local +``` +and correctly resolves the hostname to an IPv4 address. The output is similar to: + +``` +Pinging adserver.ad.local [192.168.111.18] with 32 bytes of data: +Reply from 192.168.111.18: bytes=32 time=6ms TTL=124 +Reply from 192.168.111.18: bytes=32 time=5ms TTL=124 +Reply from 192.168.111.18: bytes=32 time=5ms TTL=124 +Reply from 192.168.111.18: bytes=32 time=5ms TTL=124 +``` + +However, when attempting to browse the directory using the hostname + +```PowerShell +cd \\adserver.ad.local\test +``` + +you see an error that implies the target share doesn't exist: + +``` +cd : Cannot find path '\\adserver.ad.local\test' because it does not exist. +At line:1 char:1 ++ cd \\adserver.ad.local\test ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : ObjectNotFound: (\\adserver.ad.local\test:String) [Set-Location], ItemNotFoundException + + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand +``` + +but you notice that the error disappears if you browse to the share using its IPv4 address instead; for example: + +```PowerShell +cd \\192.168.111.18\test +``` + +After you change into a directory within the share, you see a prompt similar to: + +``` +Microsoft.PowerShell.Core\FileSystem::\\192.168.111.18\test> +``` + +To correct the behaviour you must run the following on the node `reg add "HKLM\SYSTEM\CurrentControlSet\Services\hns\State" /v EnableCompartmentNamespace /t REG_DWORD /d 1` to add the required registry key. This node change will only take effect in newly created pods, meaning you must now recreate any running pods which require access to SMB shares. + ## Troubleshooting If you are having difficulties getting GMSA to work in your environment, there are a few troubleshooting steps you can take. -First, make sure the credspec has been passed to the Pod. To do this you will need to `exec` into one of your Pods and check the output of the `nltest.exe /parentdomain` command. In the example below the Pod did not get the credspec correctly: +First, make sure the credspec has been passed to the Pod. To do this you will need to `exec` into one of your Pods and check the output of the `nltest.exe /parentdomain` command. -```shell +In the example below the Pod did not get the credspec correctly: + +```PowerShell kubectl exec -it iis-auth-7776966999-n5nzr powershell.exe - -Windows PowerShell -Copyright (C) Microsoft Corporation. All rights reserved. - -PS C:\> nltest.exe /parentdomain +``` +nltest.exe /parentdomain` results in the following error: +``` Getting parent domain failed: Status = 1722 0x6ba RPC_S_SERVER_UNAVAILABLE -PS C:\> ``` If your Pod did get the credspec correctly, then next check communication with the domain. First, from inside of your Pod, quickly do an nslookup to find the root of your domain. @@ -224,23 +273,30 @@ This will tell us 3 things: If the DNS and communication test passes, next you will need to check if the Pod has established secure channel communication with the domain. To do this, again, `exec` into your Pod and run the `nltest.exe /query` command. -```shell -PS C:\> nltest.exe /query +```PowerShell +nltest.exe /query +``` + +Results in the following output: +``` I_NetLogonControl failed: Status = 1722 0x6ba RPC_S_SERVER_UNAVAILABLE ``` -This tells us that for some reason, the Pod was unable to logon to the domain using the account specified in the credspec. You can try to repair the secure channel by running the `nltest.exe /sc_reset:domain.example` command. +This tells us that for some reason, the Pod was unable to logon to the domain using the account specified in the credspec. You can try to repair the secure channel by running the following: -```shell -PS C:\> nltest /sc_reset:domain.example +```PowerShell +nltest /sc_reset:domain.example +``` + +If the command is successful you will see and output similar to this: +``` Flags: 30 HAS_IP HAS_TIMESERV Trusted DC Name \\dc10.domain.example Trusted DC Connection Status Status = 0 0x0 NERR_Success The command completed successfully -PS C:\> ``` -If the above command corrects the error, you can automate the step by adding the following lifecycle hook to your Pod spec. If it did not correct the error, you will need to examine your credspec again and confirm that it is correct and complete. +If the above corrects the error, you can automate the step by adding the following lifecycle hook to your Pod spec. If it did not correct the error, you will need to examine your credspec again and confirm that it is correct and complete. ```yaml image: registry.domain.example/iis-auth:1809v1 @@ -252,6 +308,3 @@ If the above command corrects the error, you can automate the step by adding the ``` If you add the `lifecycle` section show above to your Pod spec, the Pod will execute the commands listed to restart the `netlogon` service until the `nltest.exe /query` command exits without error. - -## GMSA limitations -When using the [ContainerD runtime for Windows](/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#cri-containerd) accessing restricted network shares via the GMSA domain identity fails. The container will receive the identity of and calls from `nltest.exe /query` will work. It is recommended to use the [Docker EE runtime](/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#docker-ee) if access to network shares is required. The Windows Server team is working on resolving the issue in the Windows Kernel and will release a patch to resolve this issue in the future. Look for updates on the [Microsoft Windows Containers issue tracker](https://github.com/microsoft/Windows-Containers/issues/44). diff --git a/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md index 40987152e8..d52a4acc66 100644 --- a/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md +++ b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md @@ -624,9 +624,20 @@ Like before, all previous files in the `/etc/config/` directory will be deleted. You can project keys to specific paths and specific permissions on a per-file basis. The [Secrets](/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod) user guide explains the syntax. +### Optional References + +A ConfigMap reference may be marked "optional". If the ConfigMap is non-existent, the mounted volume will be empty. If the ConfigMap exists, but the referenced +key is non-existent the path will be absent beneath the mount point. + ### Mounted ConfigMaps are updated automatically -When a ConfigMap already being consumed in a volume is updated, projected keys are eventually updated as well. Kubelet is checking whether the mounted ConfigMap is fresh on every periodic sync. However, it is using its local ttl-based cache for getting the current value of the ConfigMap. As a result, the total delay from the moment when the ConfigMap is updated to the moment when new keys are projected to the pod can be as long as kubelet sync period (1 minute by default) + ttl of ConfigMaps cache (1 minute by default) in kubelet. You can trigger an immediate refresh by updating one of the pod's annotations. +When a mounted ConfigMap is updated, the projected content is eventually updated too. This applies in the case where an optionally referenced ConfigMap comes into +existence after a pod has started. + +Kubelet checks whether the mounted ConfigMap is fresh on every periodic sync. However, it uses its local TTL-based cache for getting the current value of the +ConfigMap. As a result, the total delay from the moment when the ConfigMap is updated to the moment when new keys are projected to the pod can be as long as +kubelet sync period (1 minute by default) + TTL of ConfigMaps cache (1 minute by default) in kubelet. You can trigger an immediate refresh by updating one of +the pod's annotations. {{< note >}} A container using a ConfigMap as a [subPath](/docs/concepts/storage/volumes/#using-subpath) volume will not receive ConfigMap updates. 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 26c7c91134..e37e5b6569 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,7 @@ All modifications to a cron job, especially its `.spec`, are applied only to the 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 +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 diff --git a/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md b/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md index a41bab6736..27f3762988 100644 --- a/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md +++ b/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md @@ -86,6 +86,43 @@ metadata: name: example-configmap-1-8mbdf7882g ``` +To generate a ConfigMap from an env file, add an entry to the `envs` list in `configMapGenerator`. Here is an example of generating a ConfigMap with a data item from a `.env` file: + +```shell +# Create a .env file +cat <.env +FOO=Bar +EOF + +cat <./kustomization.yaml +configMapGenerator: +- name: example-configmap-1 + envs: + - .env +EOF +``` + +The generated ConfigMap can be examined with the following command: + +```shell +kubectl kustomize ./ +``` + +The generated ConfigMap is: + +```yaml +apiVersion: v1 +data: + FOO=Bar +kind: ConfigMap +metadata: + name: example-configmap-1-8mbdf7882g +``` + +{{< note >}} +Each variable in the `.env` file becomes a separate key in the ConfigMap that you generate. This is different from the previous example which embeds a file named `.properties` (and all its entries) as the value for a single key. +{{< /note >}} + ConfigMaps can also be generated from literal key-value pairs. To generate a ConfigMap from a literal key-value pair, add an entry to the `literals` list in configMapGenerator. Here is an example of generating a ConfigMap with a data item from a key-value pair: ```shell @@ -975,4 +1012,3 @@ deployment.apps "dev-my-nginx" deleted * [Kubectl Command Reference](/docs/reference/generated/kubectl/kubectl-commands/) * [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) - diff --git a/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md b/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md index b4d7b11a7e..759eaf76cd 100644 --- a/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md +++ b/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md @@ -310,10 +310,10 @@ Patch your Deployment: {{< tabs name="kubectl_retainkeys_example" >}} {{{< tab name="Bash" codelang="bash" >}} -kubectl patch deployment retainkeys-demo --patch "$(cat patch-file-no-retainkeys.yaml)" +kubectl patch deployment retainkeys-demo --type merge --patch "$(cat patch-file-no-retainkeys.yaml)" {{< /tab >}} {{< tab name="PowerShell" codelang="posh" >}} -kubectl patch deployment retainkeys-demo --patch $(Get-Content patch-file-no-retainkeys.yaml -Raw) +kubectl patch deployment retainkeys-demo --type merge --patch $(Get-Content patch-file-no-retainkeys.yaml -Raw) {{< /tab >}}} {{< /tabs >}} @@ -341,10 +341,10 @@ Patch your Deployment again with this new patch: {{< tabs name="kubectl_retainkeys2_example" >}} {{{< tab name="Bash" codelang="bash" >}} -kubectl patch deployment retainkeys-demo --patch "$(cat patch-file-retainkeys.yaml)" +kubectl patch deployment retainkeys-demo --type merge --patch "$(cat patch-file-retainkeys.yaml)" {{< /tab >}} {{< tab name="PowerShell" codelang="posh" >}} -kubectl patch deployment retainkeys-demo --patch $(Get-Content patch-file-retainkeys.yaml -Raw) +kubectl patch deployment retainkeys-demo --type merge --patch $(Get-Content patch-file-retainkeys.yaml -Raw) {{< /tab >}}} {{< /tabs >}} diff --git a/content/en/docs/tasks/run-application/delete-stateful-set.md b/content/en/docs/tasks/run-application/delete-stateful-set.md index 94b3c583eb..eff3aaee17 100644 --- a/content/en/docs/tasks/run-application/delete-stateful-set.md +++ b/content/en/docs/tasks/run-application/delete-stateful-set.md @@ -43,14 +43,14 @@ You may need to delete the associated headless service separately after the Stat kubectl delete service ``` -When deleting a StatefulSet through `kubectl`, the StatefulSet scales down to 0. All Pods that are part of this workload are also deleted. If you want to delete only the StatefulSet and not the Pods, use `--cascade=false`. +When deleting a StatefulSet through `kubectl`, the StatefulSet scales down to 0. All Pods that are part of this workload are also deleted. If you want to delete only the StatefulSet and not the Pods, use `--cascade=orphan`. For example: ```shell -kubectl delete -f --cascade=false +kubectl delete -f --cascade=orphan ``` -By passing `--cascade=false` to `kubectl delete`, the Pods managed by the StatefulSet are left behind even after the StatefulSet object itself is deleted. If the pods have a label `app=myapp`, you can then delete them as follows: +By passing `--cascade=orphan` to `kubectl delete`, the Pods managed by the StatefulSet are left behind even after the StatefulSet object itself is deleted. If the pods have a label `app=myapp`, you can then delete them as follows: ```shell kubectl delete pods -l app=myapp diff --git a/content/en/examples/admin/konnectivity/konnectivity-agent.yaml b/content/en/examples/admin/konnectivity/konnectivity-agent.yaml index 3c71999427..0eb47e1c58 100644 --- a/content/en/examples/admin/konnectivity/konnectivity-agent.yaml +++ b/content/en/examples/admin/konnectivity/konnectivity-agent.yaml @@ -22,7 +22,7 @@ spec: - key: "CriticalAddonsOnly" operator: "Exists" containers: - - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent:v0.0.12 + - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent:v0.0.16 name: konnectivity-agent command: ["/proxy-agent"] args: [ diff --git a/content/en/examples/admin/konnectivity/konnectivity-server.yaml b/content/en/examples/admin/konnectivity/konnectivity-server.yaml index a0f45af5ff..f1f378431a 100644 --- a/content/en/examples/admin/konnectivity/konnectivity-server.yaml +++ b/content/en/examples/admin/konnectivity/konnectivity-server.yaml @@ -8,7 +8,7 @@ spec: hostNetwork: true containers: - name: konnectivity-server-container - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-server:v0.0.12 + image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-server:v0.0.16 command: ["/proxy-server"] args: [ "--logtostderr=true", diff --git a/content/en/examples/application/job/redis/worker.py b/content/en/examples/application/job/redis/worker.py index b8abbee917..c3523a4e21 100644 --- a/content/en/examples/application/job/redis/worker.py +++ b/content/en/examples/application/job/redis/worker.py @@ -8,7 +8,7 @@ host="redis" # import os # host = os.getenv("REDIS_SERVICE_HOST") -q = rediswq.RedisWQ(name="job2", host="redis") +q = rediswq.RedisWQ(name="job2", host=host) print("Worker with sessionID: " + q.sessionID()) print("Initial queue state: empty=" + str(q.empty())) while not q.empty(): diff --git a/content/en/examples/controllers/daemonset.yaml b/content/en/examples/controllers/daemonset.yaml index f291b750c1..685a137244 100644 --- a/content/en/examples/controllers/daemonset.yaml +++ b/content/en/examples/controllers/daemonset.yaml @@ -18,6 +18,7 @@ spec: # this toleration is to have the daemonset runnable on master nodes # remove it if your masters can't run pods - key: node-role.kubernetes.io/master + operator: Exists effect: NoSchedule containers: - name: fluentd-elasticsearch diff --git a/content/en/releases/OWNERS b/content/en/releases/OWNERS new file mode 100644 index 0000000000..25d2d0a271 --- /dev/null +++ b/content/en/releases/OWNERS @@ -0,0 +1,17 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# 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 + - release-engineering-reviewers + +approvers: + - sig-docs-en-owners + - sig-release-leads + - release-engineering-approvers + +labels: +- sig/release +- area/release-eng diff --git a/content/en/releases/_index.md b/content/en/releases/_index.md new file mode 100644 index 0000000000..af7819a0c1 --- /dev/null +++ b/content/en/releases/_index.md @@ -0,0 +1,27 @@ +--- +linktitle: Release History +title: Releases +type: docs +--- + + + + +The Kubernetes project maintains release branches for the most recent three minor releases ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Kubernetes 1.19 and newer receive approximately 1 year of patch support. Kubernetes 1.18 and older received approximately 9 months of patch support. + +Kubernetes versions are expressed as **x.y.z**, +where **x** is the major version, **y** is the minor version, and **z** is the patch version, following [Semantic Versioning](https://semver.org/) terminology. + +More information in the [version skew policy](/releases/version-skew-policy/) document. + + + +## Release History + +{{< release-data >}} + +## Upcoming Release + +Check out the [schedule](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) for the upcoming **{{< skew nextMinorVersion >}}** Kubernetes release! + +## Helpful Resources \ No newline at end of file diff --git a/content/en/releases/download.md b/content/en/releases/download.md new file mode 100644 index 0000000000..aa1fca98a4 --- /dev/null +++ b/content/en/releases/download.md @@ -0,0 +1,26 @@ +--- +title: Download Kubernetes +type: docs +--- +## Core Kubernetes components + +Find links to download Kubernetes components (and their checksums) in the [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) files. + +Alternately, use [downloadkubernetes.com](https://www.downloadkubernetes.com/) to filter by version and architecture. + +## kubectl + + +The Kubernetes command-line tool, [kubectl](/docs/reference/kubectl/kubectl/), allows +you to run commands against Kubernetes clusters. + +You can use kubectl to deploy applications, inspect and manage cluster resources, +and view logs. For more information including a complete list of kubectl operations, see the +[`kubectl` reference documentation](/docs/reference/kubectl/). + +kubectl is installable on a variety of Linux platforms, macOS and Windows. +Find your preferred operating system below. + +- [Install kubectl on Linux](/docs/tasks/tools/install-kubectl-linux) +- [Install kubectl on macOS](/docs/tasks/tools/install-kubectl-macos) +- [Install kubectl on Windows](/docs/tasks/tools/install-kubectl-windows) \ No newline at end of file diff --git a/content/en/releases/notes.md b/content/en/releases/notes.md new file mode 100644 index 0000000000..3ad20944b2 --- /dev/null +++ b/content/en/releases/notes.md @@ -0,0 +1,13 @@ +--- +linktitle: Release Notes +title: Notes +type: docs +description: > + Kubernetes release notes. +sitemap: + priority: 0.5 +--- + +Release notes can be found by reading the [Changelog](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) that matches your Kubernetes version. View the changelog for {{< skew latestVersion >}} on [GitHub](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-{{< skew latestVersion >}}.md). + +Alternately, release notes can be searched and filtered online at: [relnotes.k8s.io](https://relnotes.k8s.io). View filtered release notes for {{< skew latestVersion >}} on [relnotes.k8s.io](https://relnotes.k8s.io/?releaseVersions={{< skew latestVersion >}}.0). diff --git a/content/en/releases/patch-releases.md b/content/en/releases/patch-releases.md new file mode 100644 index 0000000000..85951742ab --- /dev/null +++ b/content/en/releases/patch-releases.md @@ -0,0 +1,164 @@ +--- +title: Patch Releases +type: docs +--- + +Schedule and team contact information for Kubernetes patch releases. + +For general information about Kubernetes release cycle, see the +[release process description]. + +## Cadence + +Our typical patch release cadence is monthly. It is +commonly a bit faster (1 to 2 weeks) for the earliest patch releases +after a 1.X minor release. Critical bug fixes may cause a more +immediate release outside of the normal cadence. We also aim to not make +releases during major holiday periods. + +## Contact + +See the [Release Managers page][release-managers] for full contact details on the Patch Release Team. + +Please give us a business day to respond - we may be in a different timezone! + +In between releases the team is looking at incoming cherry pick +requests on a weekly basis. The team will get in touch with +submitters via GitHub PR, SIG channels in Slack, and direct messages +in Slack and [email](mailto:release-managers-private@kubernetes.io) +if there are questions on the PR. + +## Cherry picks + +Please follow the [cherry pick process][cherry-picks]. + +Cherry picks must be merge-ready in GitHub with proper labels (e.g., +`approved`, `lgtm`, `release-note`) and passing CI tests ahead of the +cherry pick deadline. This is typically two days before the target +release, but may be more. Earlier PR readiness is better, as we +need time to get CI signal after merging your cherry picks ahead +of the actual release. + +Cherry pick PRs which miss merge criteria will be carried over and tracked +for the next patch release. + +## Support Period + +In accordance with the [yearly support KEP][yearly-support], the Kubernetes +Community will support active patch release series for a period of roughly +fourteen (14) months. + +The first twelve months of this timeframe will be considered the standard +period. + +Towards the end of the twelve month, the following will happen: + +- [Release Managers][release-managers] will cut a release +- The patch release series will enter maintenance mode + +During the two-month maintenance mode period, Release Managers may cut +additional maintenance releases to resolve: + +- CVEs (under the advisement of the Product Security Committee) +- dependency issues (including base image updates) +- critical core component issues + +At the end of the two-month maintenance mode period, the patch release series +will be considered EOL (end of life) and cherry picks to the associated branch +are to be closed soon afterwards. + +Note that the 28th of the month was chosen for maintenance mode and EOL target +dates for simplicity (every month has it). + +## Upcoming Monthly Releases + +Timelines may vary with the severity of bug fixes, but for easier planning we +will target the following monthly release points. Unplanned, critical +releases may also occur in between these. + +| Monthly Patch Release | Target date | +| --- | --- | +| June 2021 | 2021-06-16 | +| July 2021 | 2021-07-14 | +| August 2021 | 2021-08-11 | +| September 2021 | 2021-09-15 | + +## Detailed Release History for Active Branches + +### 1.21 + +**1.21** enters maintenance mode on **2022-04-28** + +End of Life for **1.21** is **2022-06-28** + +| PATCH RELEASE | CHERRY PICK DEADLINE | TARGET DATE | +|--- |--- |--- | +| 1.21.2 | 2021-06-12 | 2021-06-16 | +| 1.21.1 | 2021-05-07 | 2021-05-12 | + +### 1.20 + +**1.20** enters maintenance mode on **2021-12-28** + +End of Life for **1.20** is **2022-02-28** + +| PATCH RELEASE | CHERRY PICK DEADLINE | TARGET DATE | +|--- |--- |--- | +| 1.20.8 | 2021-06-12 | 2021-06-16 | +| 1.20.7 | 2021-05-07 | 2021-05-12 | +| 1.20.6 | 2021-04-09 | 2021-04-14 | +| 1.20.5 | 2021-03-12 | 2021-03-17 | +| 1.20.4 | 2021-02-12 | 2021-02-18 | +| 1.20.3 | [Conformance Tests Issue](https://groups.google.com/g/kubernetes-dev/c/oUpY9vWgzJo) | 2021-02-17 | +| 1.20.2 | 2021-01-08 | 2021-01-13 | +| 1.20.1 | [Tagging Issue](https://groups.google.com/g/kubernetes-dev/c/dNH2yknlCBA) | 2020-12-18 | + +### 1.19 + +**1.19** enters maintenance mode on **2021-08-28** + +End of Life for **1.19** is **2021-10-28** + +| PATCH RELEASE | CHERRY PICK DEADLINE | TARGET DATE | +|--- |--- |--- | +| 1.19.12 | 2021-06-12 | 2021-06-16 | +| 1.19.11 | 2021-05-07 | 2021-05-12 | +| 1.19.10 | 2021-04-09 | 2021-04-14 | +| 1.19.9 | 2021-03-12 | 2021-03-17 | +| 1.19.8 | 2021-02-12 | 2021-02-17 | +| 1.19.7 | 2021-01-08 | 2021-01-13 | +| 1.19.6 | [Tagging Issue](https://groups.google.com/g/kubernetes-dev/c/dNH2yknlCBA) | 2020-12-18 | +| 1.19.5 | 2020-12-04 | 2020-12-09 | +| 1.19.4 | 2020-11-06 | 2020-11-11 | +| 1.19.3 | 2020-10-09 | 2020-10-14 | +| 1.19.2 | 2020-09-11 | 2020-09-16 | +| 1.19.1 | 2020-09-04 | 2020-09-09 | + +## Non-Active Branch History + +These releases are no longer supported. + +| Minor Version | Final Patch Release | EOL date | +| --- | --- | --- | +| 1.18 | 1.18.19 | 2021-05-12 | +| 1.17 | 1.17.17 | 2021-01-13 | +| 1.16 | 1.16.15 | 2020-09-02 | +| 1.15 | 1.15.12 | 2020-05-06 | +| 1.14 | 1.14.10 | 2019-12-11 | +| 1.13 | 1.13.12 | 2019-10-15 | +| 1.12 | 1.12.10 | 2019-07-08 | +| 1.11 | 1.11.10 | 2019-05-01 | +| 1.10 | 1.10.13 | 2019-02-13 | +| 1.9 | 1.9.11 | 2018-09-29 | +| 1.8 | 1.8.15 | 2018-07-12 | +| 1.7 | 1.7.16 | 2018-04-04 | +| 1.6 | 1.6.13 | 2017-11-23 | +| 1.5 | 1.5.8 | 2017-10-01 | +| 1.4 | 1.4.12 | 2017-04-21 | +| 1.3 | 1.3.10 | 2016-11-01 | +| 1.2 | 1.2.7 | 2016-10-23 | + +[cherry-picks]: https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md +[release-managers]: /release-managers.md +[release process description]: /release.md +[yearly-support]: https://git.k8s.io/enhancements/keps/sig-release/1498-kubernetes-yearly-support-period/README.md diff --git a/content/en/releases/release-managers.md b/content/en/releases/release-managers.md new file mode 100644 index 0000000000..e8b895def6 --- /dev/null +++ b/content/en/releases/release-managers.md @@ -0,0 +1,213 @@ +--- +title: Release Managers +type: docs +--- + +"Release Managers" is an umbrella term that encompasses the set of Kubernetes +contributors responsible for maintaining release branches, tagging releases, +and building/packaging Kubernetes. + +The responsibilities of each role are described below. + +- [Contact](#contact) +- [Handbooks](#handbooks) +- [Release Managers](#release-managers) + - [Becoming a Release Manager](#becoming-a-release-manager) +- [Release Manager Associates](#release-manager-associates) + - [Becoming a Release Manager Associate](#becoming-a-release-manager-associate) +- [Build Admins](#build-admins) +- [SIG Release Leads](#sig-release-leads) + - [Chairs](#chairs) + - [Technical Leads](#technical-leads) + +## Contact + +| Mailing List | Slack | Visibility | Usage | Membership | +| --- | --- | --- | --- | --- | +| [release-managers@kubernetes.io](mailto:release-managers@kubernetes.io) | [#release-management](https://kubernetes.slack.com/messages/CJH2GBF7Y) (channel) / @release-managers (user group) | Public | Public discussion for Release Managers | All Release Managers (including Associates, Build Admins, and SIG Chairs) | +| [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | N/A | Private | Private discussion for privileged Release Managers | Release Managers, SIG Release leadership | +| [security-release-team@kubernetes.io](mailto:security-release-team@kubernetes.io) | [#security-release-team](https://kubernetes.slack.com/archives/G0162T1RYHG) (channel) / @security-rel-team (user group) | Private | Security release coordination with the Product Security Committee | [security-discuss-private@kubernetes.io](mailto:security-discuss-private@kubernetes.io), [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | + +## Handbooks + +**NOTE: The Patch Release Team and Branch Manager handbooks will be de-duplicated at a later date.** + +- [Patch Release Team][handbook-patch-release] +- [Branch Managers][handbook-branch-mgmt] +- [Build Admins][handbook-packaging] + +## Release Managers + +**Note:** The documentation might refer to the Patch Release Team and the +Branch Management role. Those two roles were consolidated into the +Release Managers role. + +Minimum requirements for Release Managers and Release Manager Associates are: + +- Familiarity with basic Unix commands and able to debug shell scripts. +- Familiarity with branched source code workflows via `git` and associated + `git` command line invocations. +- General knowledge of Google Cloud (Cloud Build and Cloud Storage). +- Open to seeking help and communicating clearly. +- Kubernetes Community [membership][community-membership] + +Release Managers are responsible for: + +- Coordinating and cutting Kubernetes releases: + - Patch releases (`x.y.z`, where `z` > 0) + - Minor releases (`x.y.z`, where `z` = 0) + - Pre-releases (alpha, beta, and release candidates) + - Working with the [Release Team][release-team] through each + release cycle + - Setting the [schedule and cadence for patch releases][patches] +- Maintaining the release branches: + - Reviewing cherry picks + - Ensuring the release branch stays healthy and that no unintended patch + gets merged +- Mentoring the [Release Manager Associates](#associates) group +- Actively developing features and maintaining the code in k/release +- Supporting Release Manager Associates and contributors through actively + participating in the Buddy program + - Check in monthly with Associates and delegate tasks, empower them to cut + releases, and mentor + - Being available to support Associates in onboarding new contributors e.g., + answering questions and suggesting appropriate work for them to do + +This team at times works in close conjunction with the +[Product Security Committee][psc] and therefore should abide by the guidelines +set forth in the [Security Release Process][security-release-process]. + +GitHub Access Controls: [@kubernetes/release-managers](https://github.com/orgs/kubernetes/teams/release-managers) + +GitHub Mentions: [@kubernetes/release-engineering](https://github.com/orgs/kubernetes/teams/release-engineering) + +- Adolfo García Veytia ([@puerco](https://github.com/puerco)) +- Carlos Panato ([@cpanato](https://github.com/cpanato)) +- Daniel Mangum ([@hasheddan](https://github.com/hasheddan)) +- Marko Mudrinić ([@xmudrii](https://github.com/xmudrii)) +- Sascha Grunert ([@saschagrunert](https://github.com/saschagrunert)) +- Stephen Augustus ([@justaugustus](https://github.com/justaugustus)) + +### Becoming a Release Manager + +To become a Release Manager, one must first serve as a Release Manager +Associate. Associates graduate to Release Manager by actively working on +releases over several cycles and: + +- demonstrating the willingness to lead +- tag-teaming with Release Managers on patches, to eventually cut a release + independently + - because releases have a limiting function, we also consider substantial + contributions to image promotion and other core Release Engineering tasks +- questioning how Associates work, suggesting improvements, gathering feedback, + and driving change +- being reliable and responsive +- leaning into advanced work that requires Release Manager-level access and + privileges to complete + +## Release Manager Associates + +Release Manager Associates are apprentices to the Release Managers, formerly +referred to as Release Manager shadows. They are responsible for: + +- Patch release work, cherry pick review +- Contributing to k/release: updating dependencies and getting used to the + source codebase +- Contributing to the documentation: maintaining the handbooks, ensuring that + release processes are documented +- With help from a release manager: working with the Release Team during the + release cycle and cutting Kubernetes releases +- Seeking opportunities to help with prioritization and communication + - Sending out pre-announcements and updates about patch releases + - Updating the calendar, helping with the release dates and milestones from + the [release cycle timeline][k-sig-release-releases] +- Through the Buddy program, onboarding new contributors and pairing up with + them on tasks + +GitHub Mentions: @kubernetes/release-engineering + +- Arnaud Meukam ([@ameukam](https://github.com/ameukam)) +- Jim Angel ([@jimangel](https://github.com/jimangel)) +- Joyce Kung ([@thejoycekung](https://github.com/thejoycekung)) +- Max Körbächer ([@mkorbi](https://github.com/mkorbi)) +- Nabarun Pal ([@palnabarun](https://github.com/palnabarun)) +- Seth McCombs ([@sethmccombs](https://github.com/sethmccombs)) +- Taylor Dolezal ([@onlydole](https://github.com/onlydole)) +- Verónica López ([@verolop](https://github.com/verolop)) +- Wilson Husin ([@wilsonehusin](https://github.com/wilsonehusin)) + +### Becoming a Release Manager Associate + +Contributors can become Associates by demonstrating the following: + +- consistent participation, including 6-12 months of active release + engineering-related work +- experience fulfilling a technical lead role on the Release Team during a + release cycle + - this experience provides a solid baseline for understanding how SIG Release + works overall—including our expectations regarding technical skills, + communications/responsiveness, and reliability +- working on k/release items that improve our interactions with Testgrid, + cleaning up libraries, etc. + - these efforts require interacting and pairing with Release Managers and + Associates + +## Build Admins + +Build Admins are (currently) Google employees with the requisite access to +Google build systems/tooling to publish deb/rpm packages on behalf of the +Kubernetes project. They are responsible for: + +- Building, signing, and publishing the deb/rpm packages +- Being the interlock with Release Managers (and Associates) on the final steps +of each minor (1.Y) and patch (1.Y.Z) release + +GitHub team: [@kubernetes/build-admins](https://github.com/orgs/kubernetes/teams/build-admins) + +- Aaron Crickenberger ([@spiffxp](https://github.com/spiffxp)) +- Amit Watve ([@amwat](https://github.com/amwat)) +- Benjamin Elder ([@BenTheElder](https://github.com/BenTheElder)) +- Grant McCloskey ([@MushuEE](https://github.com/MushuEE)) + +## SIG Release Leads + +SIG Release Chairs and Technical Leads are responsible for: + +- The governance of SIG Release +- Leading knowledge exchange sessions for Release Managers and Associates +- Coaching on leadership and prioritization + +They are mentioned explicitly here as they are owners of the various +communications channels and permissions groups (GitHub teams, GCP access) for +each role. As such, they are highly privileged community members and privy to +some private communications, which can at times relate to Kubernetes security +disclosures. + +GitHub team: [@kubernetes/sig-release-leads](https://github.com/orgs/kubernetes/teams/sig-release-leads) + +### Chairs + +- Sascha Grunert ([@saschagrunert](https://github.com/saschagrunert)) +- Stephen Augustus ([@justaugustus](https://github.com/justaugustus)) + +### Technical Leads + +- Daniel Mangum ([@hasheddan](https://github.com/hasheddan)) +- Jeremy Rickard ([@jeremyrickard](https://github.com/jeremyrickard)) + +--- + +Past Branch Managers, can be found in the [releases directory][k-sig-release-releases] +of the kubernetes/sig-release repository within `release-x.y/release_team.md`. + +Example: [1.15 Release Team](https://git.k8s.io/sig-release/releases/release-1.15/release_team.md) + +[community-membership]: https://git.k8s.io/community/community-membership.md#member +[handbook-branch-mgmt]: https://git.k8s.io/sig-release/release-engineering/role-handbooks/branch-manager.md +[handbook-packaging]: https://git.k8s.io/sig-release/release-engineering/packaging.md +[handbook-patch-release]: https://git.k8s.io/sig-release/release-engineering/role-handbooks/patch-release-team.md +[k-sig-release-releases]: https://git.k8s.io/sig-release/releases +[patches]: /patch-releases.md +[psc]: https://git.k8s.io/community/committee-product-security/README.md +[release-team]: https://git.k8s.io/sig-release/release-team/README.md +[security-release-process]: https://git.k8s.io/security/security-release-process.md diff --git a/content/en/releases/release.md b/content/en/releases/release.md new file mode 100644 index 0000000000..fa0f5e0b21 --- /dev/null +++ b/content/en/releases/release.md @@ -0,0 +1,364 @@ +--- +title: Kubernetes Release Cycle +type: docs +auto_generated: true +--- + + +{{< warning >}} +This content is auto-generated and links may not function. The source of the document is located [here](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/release.md). +{{< /warning >}} + +# Targeting enhancements, Issues and PRs to Release Milestones + +This document is focused on Kubernetes developers and contributors who need to +create an enhancement, issue, or pull request which targets a specific release +milestone. + +- [TL;DR](#tldr) + - [Normal Dev (Weeks 1-8)](#normal-dev-weeks-1-8) + - [Code Freeze (Weeks 9-11)](#code-freeze-weeks-9-11) + - [Post-Release (Weeks 11+)](#post-release-weeks-11) +- [Definitions](#definitions) +- [The Release Cycle](#the-release-cycle) +- [Removal Of Items From The Milestone](#removal-of-items-from-the-milestone) +- [Adding An Item To The Milestone](#adding-an-item-to-the-milestone) + - [Milestone Maintainers](#milestone-maintainers) + - [Feature additions](#feature-additions) + - [Issue additions](#issue-additions) + - [PR Additions](#pr-additions) +- [Other Required Labels](#other-required-labels) + - [SIG Owner Label](#sig-owner-label) + - [Priority Label](#priority-label) + - [Issue/PR Kind Label](#issuepr-kind-label) + +The process for shepherding enhancements, issues, and pull requests into a +Kubernetes release spans multiple stakeholders: + +- the enhancement, issue, and pull request owner(s) +- SIG leadership +- the [Release Team][release-team] + +Information on workflows and interactions are described below. + +As the owner of an enhancement, issue, or pull request (PR), it is your +responsibility to ensure release milestone requirements are met. Automation and +the Release Team will be in contact with you if updates are required, but +inaction can result in your work being removed from the milestone. Additional +requirements exist when the target milestone is a prior release (see +[cherry pick process][cherry-picks] for more information). + +## TL;DR + +If you want your PR to get merged, it needs the following required labels and +milestones, represented here by the Prow /commands it would take to add them: + +### Normal Dev (Weeks 1-8) + +- /sig {name} +- /kind {type} +- /lgtm +- /approved + +### [Code Freeze][code-freeze] (Weeks 9-11) + +- /milestone {v1.y} +- /sig {name} +- /kind {bug, failing-test} +- /lgtm +- /approved + +### Post-Release (Weeks 11+) + +Return to 'Normal Dev' phase requirements: + +- /sig {name} +- /kind {type} +- /lgtm +- /approved + +Merges into the 1.y branch are now [via cherry picks][cherry-picks], approved +by [Release Managers][release-managers]. + +In the past, there was a requirement for a milestone-targeted pull requests to +have an associated GitHub issue opened, but this is no longer the case. +Features or enhancements are effectively GitHub issues or [KEPs][keps] which +lead to subsequent PRs. + +The general labeling process should be consistent across artifact types. + +## Definitions + +- *issue owners*: Creator, assignees, and user who moved the issue into a + release milestone + +- *Release Team*: Each Kubernetes release has a team doing project management + tasks described [here][release-team]. + + The contact info for the team associated with any given release can be found + [here](https://git.k8s.io/sig-release/releases/). + +- *Y days*: Refers to business days + +- *enhancement*: see "[Is My Thing an Enhancement?](https://git.k8s.io/enhancements/README.md#is-my-thing-an-enhancement)" + +- *[Enhancements Freeze][enhancements-freeze]*: + the deadline by which [KEPs][keps] have to be completed in order for + enhancements to be part of the current release + +- *[Exception Request][exceptions]*: + The process of requesting an extension on the deadline for a particular + Enhancement + +- *[Code Freeze][code-freeze]*: + The period of ~4 weeks before the final release date, during which only + critical bug fixes are merged into the release. + +- *[Pruning](https://git.k8s.io/sig-release/releases/release_phases.md#pruning)*: + The process of removing an Enhancement from a release milestone if it is not + fully implemented or is otherwise considered not stable. + +- *release milestone*: semantic version string or + [GitHub milestone](https://help.github.com/en/github/managing-your-work-on-github/associating-milestones-with-issues-and-pull-requests) + referring to a release MAJOR.MINOR `vX.Y` version. + + See also + [release versioning](/contributors/design-proposals/release/versioning.md). + +- *release branch*: Git branch `release-X.Y` created for the `vX.Y` milestone. + + Created at the time of the `vX.Y-rc.0` release and maintained after the + release for approximately 12 months with `vX.Y.Z` patch releases. + + Note: releases 1.19 and newer receive 1 year of patch release support, and + releases 1.18 and earlier received 9 months of patch release support. + +## The Release Cycle + +![Image of one Kubernetes release cycle](release-cycle.png) + +Kubernetes releases currently happen approximately four times per year. + +The release process can be thought of as having three main phases: + +- Enhancement Definition +- Implementation +- Stabilization + +But in reality, this is an open source and agile project, with feature planning +and implementation happening at all times. Given the project scale and globally +distributed developer base, it is critical to project velocity to not rely on a +trailing stabilization phase and rather have continuous integration testing +which ensures the project is always stable so that individual commits can be +flagged as having broken something. + +With ongoing feature definition through the year, some set of items will bubble +up as targeting a given release. **[Enhancements Freeze][enhancements-freeze]** +starts ~4 weeks into release cycle. By this point all intended feature work for +the given release has been defined in suitable planning artifacts in +conjunction with the Release Team's [Enhancements Lead](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md). + +After Enhancements Freeze, tracking milestones on PRs and issues is important. +Items within the milestone are used as a punchdown list to complete the +release. *On issues*, milestones must be applied correctly, via triage by the +SIG, so that [Release Team][release-team] can track bugs and enhancements (any +enhancement-related issue needs a milestone). + +There is some automation in place to help automatically assign milestones to +PRs. + +This automation currently applies to the following repos: + +- `kubernetes/enhancements` +- `kubernetes/kubernetes` +- `kubernetes/release` +- `kubernetes/sig-release` +- `kubernetes/test-infra` + +At creation time, PRs against the `master` branch need humans to hint at which +milestone they might want the PR to target. Once merged, PRs against the +`master` branch have milestones auto-applied so from that time onward human +management of that PR's milestone is less necessary. On PRs against release +branches, milestones are auto-applied when the PR is created so no human +management of the milestone is ever necessary. + +Any other effort that should be tracked by the Release Team that doesn't fall +under that automation umbrella should be have a milestone applied. + +Implementation and bug fixing is ongoing across the cycle, but culminates in a +code freeze period. + +**[Code Freeze][code-freeze]** starts in week ~10 and continues for ~2 weeks. +Only critical bug fixes are accepted into the release codebase during this +time. + +There are approximately two weeks following Code Freeze, and preceding release, +during which all remaining critical issues must be resolved before release. +This also gives time for documentation finalization. + +When the code base is sufficiently stable, the master branch re-opens for +general development and work begins there for the next release milestone. Any +remaining modifications for the current release are cherry picked from master +back to the release branch. The release is built from the release branch. + +Each release is part of a broader Kubernetes lifecycle: + +![Image of Kubernetes release lifecycle spanning three releases](release-lifecycle.png) + +## Removal Of Items From The Milestone + +Before getting too far into the process for adding an item to the milestone, +please note: + +Members of the [Release Team][release-team] may remove issues from the +milestone if they or the responsible SIG determine that the issue is not +actually blocking the release and is unlikely to be resolved in a timely +fashion. + +Members of the Release Team may remove PRs from the milestone for any of the +following, or similar, reasons: + +- PR is potentially de-stabilizing and is not needed to resolve a blocking + issue +- PR is a new, late feature PR and has not gone through the enhancements + process or the [exception process][exceptions] +- There is no responsible SIG willing to take ownership of the PR and resolve + any follow-up issues with it +- PR is not correctly labelled +- Work has visibly halted on the PR and delivery dates are uncertain or late + +While members of the Release Team will help with labelling and contacting +SIG(s), it is the responsibility of the submitter to categorize PRs, and to +secure support from the relevant SIG to guarantee that any breakage caused by +the PR will be rapidly resolved. + +Where additional action is required, an attempt at human to human escalation +will be made by the Release Team through the following channels: + +- Comment in GitHub mentioning the SIG team and SIG members as appropriate for + the issue type +- Emailing the SIG mailing list + - bootstrapped with group email addresses from the + [community sig list][sig-list] + - optionally also directly addressing SIG leadership or other SIG members +- Messaging the SIG's Slack channel + - bootstrapped with the slackchannel and SIG leadership from the + [community sig list][sig-list] + - optionally directly "@" mentioning SIG leadership or others by handle + +## Adding An Item To The Milestone + +### Milestone Maintainers + +The members of the [`milestone-maintainers`](https://github.com/orgs/kubernetes/teams/milestone-maintainers/members) +GitHub team are entrusted with the responsibility of specifying the release +milestone on GitHub artifacts. + +This group is [maintained](https://git.k8s.io/sig-release/release-team/README.md#milestone-maintainers) +by SIG Release and has representation from the various SIGs' leadership. + +### Feature additions + +Feature planning and definition takes many forms today, but a typical example +might be a large piece of work described in a [KEP][keps], with associated task +issues in GitHub. When the plan has reached an implementable state and work is +underway, the enhancement or parts thereof are targeted for an upcoming milestone +by creating GitHub issues and marking them with the Prow "/milestone" command. + +For the first ~4 weeks into the release cycle, the Release Team's Enhancements +Lead will interact with SIGs and feature owners via GitHub, Slack, and SIG +meetings to capture all required planning artifacts. + +If you have an enhancement to target for an upcoming release milestone, begin a +conversation with your SIG leadership and with that release's Enhancements +Lead. + +### Issue additions + +Issues are marked as targeting a milestone via the Prow "/milestone" command. + +The Release Team's [Bug Triage Lead](https://git.k8s.io/sig-release/release-team/role-handbooks/bug-triage/README.md) +and overall community watch incoming issues and triage them, as described in +the contributor guide section on +[issue triage](/contributors/guide/issue-triage.md). + +Marking issues with the milestone provides the community better visibility +regarding when an issue was observed and by when the community feels it must be +resolved. During [Code Freeze][code-freeze], a milestone must be set to merge +a PR. + +An open issue is no longer required for a PR, but open issues and associated +PRs should have synchronized labels. For example a high priority bug issue +might not have its associated PR merged if the PR is only marked as lower +priority. + +### PR Additions + +PRs are marked as targeting a milestone via the Prow "/milestone" command. + +This is a blocking requirement during Code Freeze as described above. + +## Other Required Labels + +[Here is the list of labels and their use and purpose.](https://git.k8s.io/test-infra/label_sync/labels.md#labels-that-apply-to-all-repos-for-both-issues-and-prs) + +### SIG Owner Label + +The SIG owner label defines the SIG to which we escalate if a milestone issue +is languishing or needs additional attention. If there are no updates after +escalation, the issue may be automatically removed from the milestone. + +These are added with the Prow "/sig" command. For example to add the label +indicating SIG Storage is responsible, comment with `/sig storage`. + +### Priority Label + +Priority labels are used to determine an escalation path before moving issues +out of the release milestone. They are also used to determine whether or not a +release should be blocked on the resolution of the issue. + +- `priority/critical-urgent`: Never automatically move out of a release + milestone; continually escalate to contributor and SIG through all available + channels. + - considered a release blocking issue + - requires daily updates from issue owners during [Code Freeze][code-freeze] + - would require a patch release if left undiscovered until after the minor + release +- `priority/important-soon`: Escalate to the issue owners and SIG owner; move + out of milestone after several unsuccessful escalation attempts. + - not considered a release blocking issue + - would not require a patch release + - will automatically be moved out of the release milestone at Code Freeze + after a 4 day grace period +- `priority/important-longterm`: Escalate to the issue owners; move out of the + milestone after 1 attempt. + - even less urgent / critical than `priority/important-soon` + - moved out of milestone more aggressively than `priority/important-soon` + +### Issue/PR Kind Label + +The issue kind is used to help identify the types of changes going into the +release over time. This may allow the Release Team to develop a better +understanding of what sorts of issues we would miss with a faster release +cadence. + +For release targeted issues, including pull requests, one of the following +issue kind labels must be set: + +- `kind/api-change`: Adds, removes, or changes an API +- `kind/bug`: Fixes a newly discovered bug. +- `kind/cleanup`: Adding tests, refactoring, fixing old bugs. +- `kind/design`: Related to design +- `kind/documentation`: Adds documentation +- `kind/failing-test`: CI test case is failing consistently. +- `kind/feature`: New functionality. +- `kind/flake`: CI test case is showing intermittent failures. + +[cherry-picks]: /contributors/devel/sig-release/cherry-picks.md +[code-freeze]: https://git.k8s.io/sig-release/releases/release_phases.md#code-freeze +[enhancements-freeze]: https://git.k8s.io/sig-release/releases/release_phases.md#enhancements-freeze +[exceptions]: https://git.k8s.io/sig-release/releases/release_phases.md#exceptions +[keps]: https://git.k8s.io/enhancements/keps +[release-managers]: https://git.k8s.io/sig-release/release-managers.md +[release-team]: https://git.k8s.io/sig-release/release-team +[sig-list]: /sig-list.md diff --git a/content/en/docs/setup/release/version-skew-policy.md b/content/en/releases/version-skew-policy.md similarity index 96% rename from content/en/docs/setup/release/version-skew-policy.md rename to content/en/releases/version-skew-policy.md index 68ea7aef8a..56a7afda10 100644 --- a/content/en/docs/setup/release/version-skew-policy.md +++ b/content/en/releases/version-skew-policy.md @@ -6,22 +6,21 @@ reviewers: - sig-cluster-lifecycle - sig-node - sig-release -title: Kubernetes version and version skew support policy -content_type: concept -weight: 30 +title: Version Skew Policy +type: docs +description: > + The maximum version skew supported between various Kubernetes components. --- This document describes the maximum version skew supported between various Kubernetes components. Specific cluster deployment tools may place additional restrictions on version skew. - ## Supported versions -Kubernetes versions are expressed as **x.y.z**, -where **x** is the major version, **y** is the minor version, and **z** is the patch version, following [Semantic Versioning](https://semver.org/) terminology. +Kubernetes versions are expressed as **x.y.z**, where **x** is the major version, **y** is the minor version, and **z** is the patch version, following [Semantic Versioning](https://semver.org/) terminology. For more information, see [Kubernetes Release Versioning](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/release/versioning.md#kubernetes-release-versioning). The Kubernetes project maintains release branches for the most recent three minor releases ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Kubernetes 1.19 and newer receive approximately 1 year of patch support. Kubernetes 1.18 and older received approximately 9 months of patch support. diff --git a/content/es/docs/concepts/_index.md b/content/es/docs/concepts/_index.md index 7dd7709bae..50da027886 100644 --- a/content/es/docs/concepts/_index.md +++ b/content/es/docs/concepts/_index.md @@ -31,18 +31,18 @@ Kubernetes tiene diferentes abstracciones que representan el estado de tu sistem Los objetos básicos de Kubernetes incluyen: -* [Pod](/docs/concepts/workloads/pods/pod-overview/) +* [Pod](/es/docs/concepts/workloads/pods/pod/) * [Service](/docs/concepts/services-networking/service/) * [Volume](/docs/concepts/storage/volumes/) -* [Namespace](/docs/concepts/overview/working-with-objects/namespaces/) +* [Namespace](/es/docs/concepts/overview/working-with-objects/namespaces/) Además, Kubernetes contiene abstracciónes de nivel superior llamadas Controladores. Los Controladores se basan en los objetos básicos y proporcionan funcionalidades adicionales sobre ellos. Incluyen: -* [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/) -* [Deployment](/docs/concepts/workloads/controllers/deployment/) -* [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) -* [DaemonSet](/docs/concepts/workloads/controllers/daemonset/) -* [Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/) +* [ReplicaSet](/es/docs/concepts/workloads/controllers/replicaset/) +* [Deployment](/es/docs/concepts/workloads/controllers/deployment/) +* [StatefulSet](/es/docs/concepts/workloads/controllers/statefulset/) +* [DaemonSet](/es/docs/concepts/workloads/controllers/daemonset/) +* [Job](/es/docs/concepts/workloads/controllers/jobs-run-to-completion/) ## Plano de Control de Kubernetes @@ -64,15 +64,13 @@ En un clúster de Kubernetes, los nodos son las máquinas (máquinas virtuales, #### Metadatos de los Objectos -* [Annotations](/docs/concepts/overview/working-with-objects/annotations/) +* [Annotations](/es/docs/concepts/overview/working-with-objects/annotations/) ## {{% heading "whatsnext" %}} -Si estás interesado en escribir una página sobre conceptos, -revisa [Usando Templates de Páginas](/docs/home/contribute/page-templates/) -para obtener información sobre el tipo de página conceptos y la plantilla conceptos. +Si quieres empezar a contribuir a la documentación de Kubernetes accede a la página [Empieza a contribuir](/es/docs/contribute/start/). diff --git a/content/ko/case-studies/ibm/ibm_featured_logo.svg b/content/ko/case-studies/ibm/ibm_featured_logo.svg index 577d8e97d9..f79fd7847b 100644 --- a/content/ko/case-studies/ibm/ibm_featured_logo.svg +++ b/content/ko/case-studies/ibm/ibm_featured_logo.svg @@ -1 +1 @@ -ibm_featured_logo \ No newline at end of file +ibm_featured_logo \ No newline at end of file diff --git a/content/ko/docs/concepts/architecture/nodes.md b/content/ko/docs/concepts/architecture/nodes.md index 291b7e82ce..5bba08100e 100644 --- a/content/ko/docs/concepts/architecture/nodes.md +++ b/content/ko/docs/concepts/architecture/nodes.md @@ -304,13 +304,6 @@ ConditionFalse 다.). {{< glossary_tooltip text="테인트" term_id="taint" >}}를 추가한다. 이는 스케줄러가 비정상적인 노드에 파드를 배치하지 않게 된다. - -{{< caution >}} -`kubectl cordon` 은 노드를 'unschedulable'로 표기하는데, 이는 -서비스 컨트롤러가 이전에 자격 있는 로드밸런서 노드 대상 목록에서 해당 노드를 제거하기에 -사실상 cordon 된 노드에서 들어오는 로드 밸런서 트래픽을 제거하는 부작용을 갖는다. -{{< /caution >}} - ### 노드 용량 노드 오브젝트는 노드 리소스 용량에 대한 정보: 예를 들어, 사용 가능한 메모리의 diff --git a/content/ko/docs/concepts/cluster-administration/_index.md b/content/ko/docs/concepts/cluster-administration/_index.md index 9870704596..f5363a45c2 100755 --- a/content/ko/docs/concepts/cluster-administration/_index.md +++ b/content/ko/docs/concepts/cluster-administration/_index.md @@ -45,7 +45,7 @@ no_list: true ## 클러스터 보안 -* [인증서 생성](/ko/docs/tasks/administer-cluster/certificates/)는 다른 툴 체인을 사용하여 인증서를 생성하는 단계를 설명한다. +* [인증서 생성](/ko/docs/tasks/administer-cluster/certificates/)은 다른 툴 체인을 사용하여 인증서를 생성하는 단계를 설명한다. * [쿠버네티스 컨테이너 환경](/ko/docs/concepts/containers/container-environment/)은 쿠버네티스 노드에서 Kubelet으로 관리하는 컨테이너에 대한 환경을 설명한다. diff --git a/content/ko/docs/concepts/cluster-administration/system-metrics.md b/content/ko/docs/concepts/cluster-administration/system-metrics.md index 737c1ded25..88ae6adacc 100644 --- a/content/ko/docs/concepts/cluster-administration/system-metrics.md +++ b/content/ko/docs/concepts/cluster-administration/system-metrics.md @@ -170,4 +170,5 @@ kube-scheduler는 각 파드에 대해 구성된 리소스 [요청과 제한](/k ## {{% heading "whatsnext" %}} * 메트릭에 대한 [프로메테우스 텍스트 형식](https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md#text-based-format)에 대해 읽어본다 +* [안정 버전의 쿠버네티스 메트릭](https://github.com/kubernetes/kubernetes/blob/master/test/instrumentation/testdata/stable-metrics-list.yaml) 목록을 살펴본다 * [쿠버네티스 사용 중단 정책](/docs/reference/using-api/deprecation-policy/#deprecating-a-feature-or-behavior)에 대해 읽어본다 diff --git a/content/ko/docs/concepts/containers/container-lifecycle-hooks.md b/content/ko/docs/concepts/containers/container-lifecycle-hooks.md index f2ef1f10a9..d9a1137024 100644 --- a/content/ko/docs/concepts/containers/container-lifecycle-hooks.md +++ b/content/ko/docs/concepts/containers/container-lifecycle-hooks.md @@ -50,11 +50,10 @@ terminated 또는 completed 상태인 경우에는 `PreStop` 훅 요청이 실 ### 훅 핸들러 구현 컨테이너는 훅의 핸들러를 구현하고 등록함으로써 해당 훅에 접근할 수 있다. -구현될 수 있는 컨테이너의 훅 핸들러에는 세 가지 유형이 있다. +구현될 수 있는 컨테이너의 훅 핸들러에는 두 가지 유형이 있다. * Exec - 컨테이너의 cgroups와 네임스페이스 안에서, `pre-stop.sh`와 같은, 특정 커맨드를 실행. 커맨드에 의해 소비된 리소스는 해당 컨테이너에 대해 계산된다. -* TCP - 컨테이너의 특정 포트에 대한 TCP 연결을 연다. * HTTP - 컨테이너의 특정 엔드포인트에 대해서 HTTP 요청을 실행. ### 훅 핸들러 실행 diff --git a/content/ko/docs/concepts/containers/runtime-class.md b/content/ko/docs/concepts/containers/runtime-class.md index 3d7c89b65c..2770b1e4b2 100644 --- a/content/ko/docs/concepts/containers/runtime-class.md +++ b/content/ko/docs/concepts/containers/runtime-class.md @@ -11,7 +11,7 @@ weight: 20 이 페이지는 런타임클래스 리소스와 런타임 선택 메커니즘에 대해서 설명한다. 런타임클래스는 컨테이너 런타임을 구성을 선택하는 기능이다. 컨테이너 런타임 -구성은 파드의 컨테이너를 실행하는데 사용된다. +구성은 파드의 컨테이너를 실행하는 데 사용된다. @@ -21,7 +21,7 @@ weight: 20 ## 동기 서로 다른 파드간에 런타임클래스를 설정하여 -성능대 보안의 균형을 유지할 수 있다. +성능과 보안의 균형을 유지할 수 있다. 예를 들어, 일부 작업에서 높은 수준의 정보 보안 보증이 요구되는 경우, 하드웨어 가상화를 이용하는 컨테이너 런타임으로 파드를 실행하도록 예약하는 선택을 할 수 있다. 그러면 몇가지 추가적인 오버헤드는 있지만 @@ -106,7 +106,8 @@ CRI 런타임 설치에 대한 자세한 내용은 [CRI 설치](/ko/docs/setup/p #### dockershim -쿠버네티스의 내장 dockershim CRI는 런타임 핸들러를 지원하지 않는다. +dockershim을 사용하는 경우 RuntimeClass는 런타임 핸들러를 `docker`로 고정한다. +dockershim은 사용자 정의 런타임 핸들러를 지원하지 않는다. #### {{< glossary_tooltip term_id="containerd" >}} diff --git a/content/ko/docs/concepts/extend-kubernetes/_index.md b/content/ko/docs/concepts/extend-kubernetes/_index.md index 81cc38337f..f93537bf62 100644 --- a/content/ko/docs/concepts/extend-kubernetes/_index.md +++ b/content/ko/docs/concepts/extend-kubernetes/_index.md @@ -2,6 +2,10 @@ title: 쿠버네티스 확장 weight: 110 description: 쿠버네티스 클러스터의 동작을 변경하는 다양한 방법 +feature: + title: 확장성을 고려하여 설계됨 + description: > + 쿠버네티스 업스트림 소스 코드 수정 없이 쿠버네티스 클러스터에 기능을 추가할 수 있다. content_type: concept no_list: true --- @@ -76,19 +80,18 @@ kubectl에서 아래는 익스텐션 포인트가 쿠버네티스 컨트롤 플레인과 상호 작용하는 방법을 보여주는 다이어그램이다. - - +![익스텐션 포인트와 컨트롤 플레인](/ko/docs/concepts/extend-kubernetes/control-plane.png) ## 익스텐션 포인트 이 다이어그램은 쿠버네티스 시스템의 익스텐션 포인트를 보여준다. - - +![익스텐션 포인트](/docs/concepts/extend-kubernetes/extension-points.png) + 1. 사용자는 종종 `kubectl`을 사용하여 쿠버네티스 API와 상호 작용한다. [Kubectl 플러그인](/ko/docs/tasks/extend-kubectl/kubectl-plugins/)은 kubectl 바이너리를 확장한다. 개별 사용자의 로컬 환경에만 영향을 미치므로 사이트 전체 정책을 적용할 수는 없다. 2. apiserver는 모든 요청을 처리한다. apiserver의 여러 유형의 익스텐션 포인트는 요청을 인증하거나, 콘텐츠를 기반으로 요청을 차단하거나, 콘텐츠를 편집하고, 삭제 처리를 허용한다. 이 내용은 [API 접근 익스텐션](#api-접근-익스텐션) 섹션에 설명되어 있다. 3. apiserver는 다양한 종류의 *리소스* 를 제공한다. `pods`와 같은 *빌트인 리소스 종류* 는 쿠버네티스 프로젝트에 의해 정의되며 변경할 수 없다. 직접 정의한 리소스를 추가할 수도 있고, [커스텀 리소스](#사용자-정의-유형) 섹션에 설명된 대로 *커스텀 리소스* 라고 부르는 다른 프로젝트에서 정의한 리소스를 추가할 수도 있다. 커스텀 리소스는 종종 API 접근 익스텐션과 함께 사용된다. @@ -99,11 +102,10 @@ kubectl에서 어디서부터 시작해야 할지 모르겠다면, 이 플로우 차트가 도움이 될 수 있다. 일부 솔루션에는 여러 유형의 익스텐션이 포함될 수 있다. - - - +![익스텐션 플로우차트](/ko/docs/concepts/extend-kubernetes/flowchart.png) + ## API 익스텐션 ### 사용자 정의 유형 diff --git a/content/ko/docs/concepts/extend-kubernetes/control-plane.png b/content/ko/docs/concepts/extend-kubernetes/control-plane.png new file mode 100644 index 0000000000..df95778fdb Binary files /dev/null and b/content/ko/docs/concepts/extend-kubernetes/control-plane.png differ diff --git a/content/ko/docs/concepts/extend-kubernetes/extend-cluster.md b/content/ko/docs/concepts/extend-kubernetes/extend-cluster.md deleted file mode 100644 index ee9763a769..0000000000 --- a/content/ko/docs/concepts/extend-kubernetes/extend-cluster.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: 쿠버네티스 클러스터 확장 -content_type: concept -weight: 10 ---- - - - -쿠버네티스는 매우 유연하게 구성할 수 있고 확장 가능하다. 결과적으로 -쿠버네티스 프로젝트를 포크하거나 코드에 패치를 제출할 필요가 -거의 없다. - -이 가이드는 쿠버네티스 클러스터를 사용자 정의하기 위한 옵션을 설명한다. -쿠버네티스 클러스터를 업무 환경의 요구에 맞게 -조정하는 방법을 이해하려는 {{< glossary_tooltip text="클러스터 운영자" term_id="cluster-operator" >}}를 -대상으로 한다. -잠재적인 {{< glossary_tooltip text="플랫폼 개발자" term_id="platform-developer" >}} 또는 -쿠버네티스 프로젝트 {{< glossary_tooltip text="컨트리뷰터" term_id="contributor" >}}인 개발자에게도 -어떤 익스텐션 포인트와 패턴이 있는지, -그리고 그것들의 트레이드오프와 제약에 대한 소개 자료로 유용할 것이다. - - - - -## 개요 - -사용자 정의 방식은 크게 플래그, 로컬 구성 파일 또는 API 리소스 변경만 포함하는 *구성* 과 추가 프로그램이나 서비스 실행과 관련된 *익스텐션* 으로 나눌 수 있다. 이 문서는 주로 익스텐션에 관한 것이다. - -## 구성 - -*구성 파일* 및 *플래그* 는 온라인 문서의 레퍼런스 섹션에 각 바이너리 별로 문서화되어 있다. - -* [kubelet](/docs/reference/command-line-tools-reference/kubelet/) -* [kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/) -* [kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/) -* [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/). - -호스팅된 쿠버네티스 서비스 또는 매니지드 설치 환경의 배포판에서 플래그 및 구성 파일을 항상 변경할 수 있는 것은 아니다. 변경 가능한 경우 일반적으로 클러스터 관리자만 변경할 수 있다. 또한 향후 쿠버네티스 버전에서 변경될 수 있으며, 이를 설정하려면 프로세스를 다시 시작해야 할 수도 있다. 이러한 이유로 다른 옵션이 없는 경우에만 사용해야 한다. - -[리소스쿼터](/ko/docs/concepts/policy/resource-quotas/), [PodSecurityPolicy](/ko/docs/concepts/policy/pod-security-policy/), [네트워크폴리시](/ko/docs/concepts/services-networking/network-policies/) 및 역할 기반 접근 제어([RBAC](/docs/reference/access-authn-authz/rbac/))와 같은 *빌트인 정책 API(built-in Policy API)* 는 기본적으로 제공되는 쿠버네티스 API이다. API는 일반적으로 호스팅된 쿠버네티스 서비스 및 매니지드 쿠버네티스 설치 환경과 함께 사용된다. 그것들은 선언적이며 파드와 같은 다른 쿠버네티스 리소스와 동일한 규칙을 사용하므로, 새로운 클러스터 구성을 반복할 수 있고 애플리케이션과 동일한 방식으로 관리할 수 ​​있다. 또한, 이들 API가 안정적인 경우, 다른 쿠버네티스 API와 같이 [정의된 지원 정책](/docs/reference/using-api/deprecation-policy/)을 사용할 수 있다. 이러한 이유로 인해 구성 파일과 플래그보다 선호된다. - -## 익스텐션(Extension) {#익스텐션} - -익스텐션은 쿠버네티스를 확장하고 쿠버네티스와 긴밀하게 통합되는 소프트웨어 컴포넌트이다. -이들 컴포넌트는 쿠버네티스가 새로운 유형과 새로운 종류의 하드웨어를 지원할 수 있게 해준다. - -대부분의 클러스터 관리자는 쿠버네티스의 호스팅 또는 배포판 인스턴스를 사용한다. -결과적으로 대부분의 쿠버네티스 사용자는 익스텐션 기능을 설치할 필요가 없고 -새로운 익스텐션 기능을 작성할 필요가 있는 사람은 더 적다. - -## 익스텐션 패턴 - -쿠버네티스는 클라이언트 프로그램을 작성하여 자동화 되도록 설계되었다. -쿠버네티스 API를 읽고 쓰는 프로그램은 유용한 자동화를 제공할 수 있다. -*자동화* 는 클러스터 상에서 또는 클러스터 밖에서 실행할 수 있다. 이 문서의 지침에 따라 -고가용성과 강력한 자동화를 작성할 수 있다. -자동화는 일반적으로 호스트 클러스터 및 매니지드 설치 환경을 포함한 모든 -쿠버네티스 클러스터에서 작동한다. - -쿠버네티스와 잘 작동하는 클라이언트 프로그램을 작성하기 위한 특정 패턴은 *컨트롤러* 패턴이라고 한다. -컨트롤러는 일반적으로 오브젝트의 `.spec`을 읽고, 가능한 경우 수행한 다음 -오브젝트의 `.status`를 업데이트 한다. - -컨트롤러는 쿠버네티스의 클라이언트이다. 쿠버네티스가 클라이언트이고 -원격 서비스를 호출할 때 이를 *웹훅(Webhook)* 이라고 한다. 원격 서비스를 -*웹훅 백엔드* 라고 한다. 컨트롤러와 마찬가지로 웹훅은 장애 지점을 -추가한다. - -웹훅 모델에서 쿠버네티스는 원격 서비스에 네트워크 요청을 한다. -*바이너리 플러그인* 모델에서 쿠버네티스는 바이너리(프로그램)를 실행한다. -바이너리 플러그인은 kubelet(예: -[Flex 볼륨 플러그인](/ko/docs/concepts/storage/volumes/#flexvolume)과 -[네트워크 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/))과 -kubectl에서 -사용한다. - -아래는 익스텐션 포인트가 쿠버네티스 컨트롤 플레인과 상호 작용하는 방법을 -보여주는 다이어그램이다. - - - - - - -## 익스텐션 포인트 - -이 다이어그램은 쿠버네티스 시스템의 익스텐션 포인트를 보여준다. - - - - - -1. 사용자는 종종 `kubectl`을 사용하여 쿠버네티스 API와 상호 작용한다. [Kubectl 플러그인](/ko/docs/tasks/extend-kubectl/kubectl-plugins/)은 kubectl 바이너리를 확장한다. 개별 사용자의 로컬 환경에만 영향을 미치므로 사이트 전체 정책을 적용할 수는 없다. -2. apiserver는 모든 요청을 처리한다. apiserver의 여러 유형의 익스텐션 포인트는 요청을 인증하거나, 콘텐츠를 기반으로 요청을 차단하거나, 콘텐츠를 편집하고, 삭제 처리를 허용한다. 이 내용은 [API 접근 익스텐션](/ko/docs/concepts/extend-kubernetes/extend-cluster/#api-접근-익스텐션) 섹션에 설명되어 있다. -3. apiserver는 다양한 종류의 *리소스* 를 제공한다. `pods`와 같은 *빌트인 리소스 종류* 는 쿠버네티스 프로젝트에 의해 정의되며 변경할 수 없다. 직접 정의한 리소스를 추가할 수도 있고, [커스텀 리소스](/ko/docs/concepts/extend-kubernetes/extend-cluster/#사용자-정의-유형) 섹션에 설명된 대로 *커스텀 리소스* 라고 부르는 다른 프로젝트에서 정의한 리소스를 추가할 수도 있다. 커스텀 리소스는 종종 API 접근 익스텐션과 함께 사용된다. -4. 쿠버네티스 스케줄러는 파드를 배치할 노드를 결정한다. 스케줄링을 확장하는 몇 가지 방법이 있다. 이들은 [스케줄러 익스텐션](/ko/docs/concepts/extend-kubernetes/#스케줄러-익스텐션) 섹션에 설명되어 있다. -5. 쿠버네티스의 많은 동작은 API-Server의 클라이언트인 컨트롤러(Controller)라는 프로그램으로 구현된다. 컨트롤러는 종종 커스텀 리소스와 함께 사용된다. -6. kubelet은 서버에서 실행되며 파드가 클러스터 네트워크에서 자체 IP를 가진 가상 서버처럼 보이도록 한다. [네트워크 플러그인](/ko/docs/concepts/extend-kubernetes/extend-cluster/#네트워크-플러그인)을 사용하면 다양한 파드 네트워킹 구현이 가능하다. -7. kubelet은 컨테이너의 볼륨을 마운트 및 마운트 해제한다. 새로운 유형의 스토리지는 [스토리지 플러그인](/ko/docs/concepts/extend-kubernetes/extend-cluster/#스토리지-플러그인)을 통해 지원될 수 있다. - -어디서부터 시작해야 할지 모르겠다면, 이 플로우 차트가 도움이 될 수 있다. 일부 솔루션에는 여러 유형의 익스텐션이 포함될 수 있다. - - - - - - -## API 익스텐션 -### 사용자 정의 유형 - -새 컨트롤러, 애플리케이션 구성 오브젝트 또는 기타 선언적 API를 정의하고 `kubectl`과 같은 쿠버네티스 도구를 사용하여 관리하려면 쿠버네티스에 커스텀 리소스를 추가하자. - -애플리케이션, 사용자 또는 모니터링 데이터의 데이터 저장소로 커스텀 리소스를 사용하지 않는다. - -커스텀 리소스에 대한 자세한 내용은 [커스텀 리소스 개념 가이드](/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/)를 참고하길 바란다. - - -### 새로운 API와 자동화의 결합 - -사용자 정의 리소스 API와 컨트롤 루프의 조합을 [오퍼레이터(operator) 패턴](/ko/docs/concepts/extend-kubernetes/operator/)이라고 한다. 오퍼레이터 패턴은 특정 애플리케이션, 일반적으로 스테이트풀(stateful) 애플리케이션을 관리하는 데 사용된다. 이러한 사용자 정의 API 및 컨트롤 루프를 사용하여 스토리지나 정책과 같은 다른 리소스를 제어할 수도 있다. - -### 빌트인 리소스 변경 - -사용자 정의 리소스를 추가하여 쿠버네티스 API를 확장하면 추가된 리소스는 항상 새로운 API 그룹에 속한다. 기존 API 그룹을 바꾸거나 변경할 수 없다. -API를 추가해도 기존 API(예: 파드)의 동작에 직접 영향을 미치지는 않지만 API 접근 익스텐션은 영향을 준다. - - -### API 접근 익스텐션 - -요청이 쿠버네티스 API 서버에 도달하면 먼저 인증이 되고, 그런 다음 승인된 후 다양한 유형의 어드미션 컨트롤이 적용된다. 이 흐름에 대한 자세한 내용은 [쿠버네티스 API에 대한 접근 제어](/ko/docs/concepts/security/controlling-access/)를 참고하길 바란다. - -이러한 각 단계는 익스텐션 포인트를 제공한다. - -쿠버네티스에는 이를 지원하는 몇 가지 빌트인 인증 방법이 있다. 또한 인증 프록시 뒤에 있을 수 있으며 인증 헤더에서 원격 서비스로 토큰을 전송하여 확인할 수 있다(웹훅). 이러한 방법은 모두 [인증 설명서](/docs/reference/access-authn-authz/authentication/)에 설명되어 있다. - -### 인증 - -[인증](/docs/reference/access-authn-authz/authentication/)은 모든 요청의 헤더 또는 인증서를 요청하는 클라이언트의 사용자 이름에 매핑한다. - -쿠버네티스는 몇 가지 빌트인 인증 방법과 필요에 맞지 않는 경우 [인증 웹훅](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication) 방법을 제공한다. - - -### 승인 - -[승인](/docs/reference/access-authn-authz/webhook/)은 특정 사용자가 API 리소스에서 읽고, 쓰고, 다른 작업을 수행할 수 있는지를 결정한다. 전체 리소스 레벨에서 작동하며 임의의 오브젝트 필드를 기준으로 구별하지 않는다. 빌트인 인증 옵션이 사용자의 요구를 충족시키지 못하면 [인증 웹훅](/docs/reference/access-authn-authz/webhook/)을 통해 사용자가 제공한 코드를 호출하여 인증 결정을 내릴 수 있다. - - -### 동적 어드미션 컨트롤 - -요청이 승인된 후, 쓰기 작업인 경우 [어드미션 컨트롤](/docs/reference/access-authn-authz/admission-controllers/) 단계도 수행된다. 빌트인 단계 외에도 몇 가지 익스텐션이 있다. - -* [이미지 정책 웹훅](/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook)은 컨테이너에서 실행할 수 있는 이미지를 제한한다. -* 임의의 어드미션 컨트롤 결정을 내리기 위해 일반적인 [어드미션 웹훅](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)을 사용할 수 있다. 어드미션 웹훅은 생성 또는 업데이트를 거부할 수 있다. - -## 인프라스트럭처 익스텐션 - - -### 스토리지 플러그인 - -[Flex 볼륨](/ko/docs/concepts/storage/volumes/#flexvolume)을 사용하면 -Kubelet이 바이너리 플러그인을 호출하여 볼륨을 마운트하도록 함으로써 -빌트인 지원 없이 볼륨 유형을 마운트 할 수 있다. - - -### 장치 플러그인 - -장치 플러그인은 노드가 [장치 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)을 -통해 새로운 노드 리소스(CPU 및 메모리와 같은 빌트인 자원 외에)를 -발견할 수 있게 해준다. - -### 네트워크 플러그인 - -노드-레벨의 [네트워크 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)을 통해 -다양한 네트워킹 패브릭을 지원할 수 있다. - -### 스케줄러 익스텐션 - -스케줄러는 파드를 감시하고 파드를 노드에 할당하는 특수한 유형의 -컨트롤러이다. 다른 쿠버네티스 컴포넌트를 계속 사용하면서 -기본 스케줄러를 완전히 교체하거나, -[여러 스케줄러](/docs/tasks/extend-kubernetes/configure-multiple-schedulers/)를 -동시에 실행할 수 있다. - -이것은 중요한 부분이며, 거의 모든 쿠버네티스 사용자는 스케줄러를 수정할 -필요가 없다는 것을 알게 된다. - -스케줄러는 또한 웹훅 백엔드(스케줄러 익스텐션)가 -파드에 대해 선택된 노드를 필터링하고 우선 순위를 지정할 수 있도록 하는 -[웹훅](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/scheduler_extender.md)을 -지원한다. - - -## {{% heading "whatsnext" %}} - -* [커스텀 리소스](/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/)에 대해 더 알아보기 -* [동적 어드미션 컨트롤](/docs/reference/access-authn-authz/extensible-admission-controllers/)에 대해 알아보기 -* 인프라스트럭처 익스텐션에 대해 더 알아보기 - * [네트워크 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) - * [장치 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) -* [kubectl 플러그인](/ko/docs/tasks/extend-kubectl/kubectl-plugins/)에 대해 알아보기 -* [오퍼레이터 패턴](/ko/docs/concepts/extend-kubernetes/operator/)에 대해 알아보기 diff --git a/content/ko/docs/concepts/extend-kubernetes/flowchart.png b/content/ko/docs/concepts/extend-kubernetes/flowchart.png new file mode 100644 index 0000000000..1415903a83 Binary files /dev/null and b/content/ko/docs/concepts/extend-kubernetes/flowchart.png differ diff --git a/content/ko/docs/concepts/overview/working-with-objects/labels.md b/content/ko/docs/concepts/overview/working-with-objects/labels.md index da3cff2a89..0583ae0fe3 100644 --- a/content/ko/docs/concepts/overview/working-with-objects/labels.md +++ b/content/ko/docs/concepts/overview/working-with-objects/labels.md @@ -53,9 +53,9 @@ _레이블_ 은 키와 값의 쌍이다. 유효한 레이블 키에는 슬래시 `kubernetes.io/`와 `k8s.io/` 접두사는 쿠버네티스의 핵심 컴포넌트로 예약되어있다. 유효한 레이블 값은 다음과 같다. -* 63 자 이하 여야 하고(공백이면 안 됨), -* 시작과 끝은 알파벳과 숫자(`[a-z0-9A-Z]`)이며, -* 알파벳과 숫자, 대시(`-`), 밑줄(`_`), 점(`.`)를 중간에 포함할 수 있다. +* 63 자 이하여야 하고 (공백일 수도 있음), +* (공백이 아니라면) 시작과 끝은 알파벳과 숫자(`[a-z0-9A-Z]`)이며, +* 알파벳과 숫자, 대시(`-`), 밑줄(`_`), 점(`.`)을 중간에 포함할 수 있다. 유효한 레이블 값은 63자 미만 또는 공백이며 시작과 끝은 알파벳과 숫자(`[a-z0-9A-Z]`)이며, 대시(`-`), 밑줄(`_`), 점(`.`)과 함께 사용할 수 있다. diff --git a/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md index 8c095e4a27..da30c01ab2 100644 --- a/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md +++ b/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md @@ -72,7 +72,7 @@ spec: ## 넘어가기 전에: 내장 노드 레이블들 {#built-in-node-labels} [붙인](#1-단계-노드에-레이블-붙이기) 레이블뿐만 아니라, 노드에는 -표준 레이블 셋이 미리 채워져 있다. 이들 목록은 [잘 알려진 레이블, 어노테이션 및 테인트](/docs/reference/kubernetes-api/labels-annotations-taints/)를 참고한다. +표준 레이블 셋이 미리 채워져 있다. 이들 목록은 [잘 알려진 레이블, 어노테이션 및 테인트](/docs/reference/labels-annotations-taints/)를 참고한다. {{< note >}} 이 레이블들의 값은 클라우드 공급자에 따라 다르고 신뢰성이 보장되지 않는다. diff --git a/content/ko/docs/concepts/scheduling-eviction/taint-and-toleration.md b/content/ko/docs/concepts/scheduling-eviction/taint-and-toleration.md index bab0803b99..588adee0f7 100644 --- a/content/ko/docs/concepts/scheduling-eviction/taint-and-toleration.md +++ b/content/ko/docs/concepts/scheduling-eviction/taint-and-toleration.md @@ -206,9 +206,9 @@ tolerations: `Ready` 가 "`False`"로 됨에 해당한다. * `node.kubernetes.io/unreachable`: 노드가 노드 컨트롤러에서 도달할 수 없다. 이는 NodeCondition `Ready` 가 "`Unknown`"로 됨에 해당한다. - * `node.kubernetes.io/out-of-disk`: 노드에 디스크가 부족하다. * `node.kubernetes.io/memory-pressure`: 노드에 메모리 할당 압박이 있다. * `node.kubernetes.io/disk-pressure`: 노드에 디스크 할당 압박이 있다. + * `node.kubernetes.io/pid-pressure`: 노드에 PID 할당 압박이 있다. * `node.kubernetes.io/network-unavailable`: 노드의 네트워크를 사용할 수 없다. * `node.kubernetes.io/unschedulable`: 노드를 스케줄할 수 없다. * `node.cloudprovider.kubernetes.io/uninitialized`: "외부" 클라우드 공급자로 @@ -271,7 +271,7 @@ tolerations: * `node.kubernetes.io/memory-pressure` * `node.kubernetes.io/disk-pressure` - * `node.kubernetes.io/out-of-disk` (*중요한 파드에만 해당*) + * `node.kubernetes.io/pid-pressure` (1.14 이상) * `node.kubernetes.io/unschedulable` (1.10 이상) * `node.kubernetes.io/network-unavailable` (*호스트 네트워크만 해당*) diff --git a/content/ko/docs/concepts/services-networking/dns-pod-service.md b/content/ko/docs/concepts/services-networking/dns-pod-service.md index 006ffba99c..e3254d3ba8 100644 --- a/content/ko/docs/concepts/services-networking/dns-pod-service.md +++ b/content/ko/docs/concepts/services-networking/dns-pod-service.md @@ -194,7 +194,7 @@ A 또는 AAAA 레코드만 생성할 수 있다. (`default-subdomain.my-namespac 또한 서비스에서 `publishNotReadyAddresses=True` 를 설정하지 않았다면, 파드가 준비 상태가 되어야 레코드를 가질 수 있다. {{< /note >}} -### 파드의 setHostnameAsFQDN 필드 {# pod-sethostnameasfqdn-field} +### 파드의 setHostnameAsFQDN 필드 {#pod-sethostnameasfqdn-field} {{< feature-state for_k8s_version="v1.20" state="beta" >}} diff --git a/content/ko/docs/concepts/services-networking/service.md b/content/ko/docs/concepts/services-networking/service.md index e5aa794ae0..7bbb4f6f63 100644 --- a/content/ko/docs/concepts/services-networking/service.md +++ b/content/ko/docs/concepts/services-networking/service.md @@ -935,11 +935,18 @@ Classic ELB의 연결 드레이닝은 # 값 보다 작아야한다. 기본값은 5이며, 2와 60 사이여야 한다. service.beta.kubernetes.io/aws-load-balancer-security-groups: "sg-53fae93f" - # 생성된 ELB에 추가할 기존 보안 그룹 목록. - # service.beta.kubernetes.io/aws-load-balancer-extra-security-groups 어노테이션과 달리, 이는 이전에 ELB에 할당된 다른 모든 보안 그룹을 대체한다. + # 생성된 ELB에 설정할 기존 보안 그룹(security group) 목록. + # service.beta.kubernetes.io/aws-load-balancer-extra-security-groups 어노테이션과 달리, 이는 이전에 ELB에 할당된 다른 모든 보안 그룹을 대체하며, + # '해당 ELB를 위한 고유 보안 그룹 생성'을 오버라이드한다. + # 목록의 첫 번째 보안 그룹 ID는 인바운드 트래픽(서비스 트래픽과 헬스 체크)이 워커 노드로 향하도록 하는 규칙으로 사용된다. + # 여러 ELB가 하나의 보안 그룹 ID와 연결되면, 1줄의 허가 규칙만이 워커 노드 보안 그룹에 추가된다. + # 즉, 만약 여러 ELB 중 하나를 지우면, 1줄의 허가 규칙이 삭제되어, 같은 보안 그룹 ID와 연결된 모든 ELB에 대한 접속이 막힌다. + # 적절하게 사용되지 않으면 이는 다수의 서비스가 중단되는 상황을 유발할 수 있다. service.beta.kubernetes.io/aws-load-balancer-extra-security-groups: "sg-53fae93f,sg-42efd82e" - # ELB에 추가될 추가 보안 그룹(security group) 목록 + # 생성된 ELB에 추가할 추가 보안 그룹 목록 + # 이 방법을 사용하면 이전에 생성된 고유 보안 그룹이 그대로 유지되므로, 각 ELB가 고유 보안 그룹 ID와 그에 매칭되는 허가 규칙 라인을 소유하여 + # 트래픽(서비스 트래픽과 헬스 체크)이 워커 노드로 향할 수 있도록 한다. 여기에 기재되는 보안 그룹은 여러 서비스 간 공유될 수 있다. service.beta.kubernetes.io/aws-load-balancer-target-node-labels: "ingress-gw,gw-name=public-api" # 로드 밸런서의 대상 노드를 선택하는 데 @@ -988,7 +995,6 @@ NLB는 특정 인스턴스 클래스에서만 작동한다. 지원되는 인스 | 규칙 | 프로토콜 | 포트 | IP 범위 | IP 범위 설명 | |------|----------|---------|------------|---------------------| | 헬스 체크 | TCP | NodePort(s) (`.spec.healthCheckNodePort` for `.spec.externalTrafficPolicy = Local`) | Subnet CIDR | kubernetes.io/rule/nlb/health=\ | - | 클라이언트 트래픽 | TCP | NodePort(s) | `.spec.loadBalancerSourceRanges` (defaults to `0.0.0.0/0`) | kubernetes.io/rule/nlb/client=\ | | MTU 탐색 | ICMP | 3,4 | `.spec.loadBalancerSourceRanges` (defaults to `0.0.0.0/0`) | kubernetes.io/rule/nlb/mtu=\ | diff --git a/content/ko/docs/concepts/storage/volumes.md b/content/ko/docs/concepts/storage/volumes.md index 698ee14e72..6156a4704b 100644 --- a/content/ko/docs/concepts/storage/volumes.md +++ b/content/ko/docs/concepts/storage/volumes.md @@ -29,10 +29,9 @@ weight: 10 쿠버네티스는 다양한 유형의 볼륨을 지원한다. {{< glossary_tooltip term_id="pod" text="파드" >}}는 여러 볼륨 유형을 동시에 사용할 수 있다. 임시 볼륨 유형은 파드의 수명을 갖지만, 퍼시스턴트 볼륨은 -파드의 수명을 넘어 존재한다. 결과적으로, 볼륨은 파드 내에서 -실행되는 모든 컨테이너보다 오래 지속되며, 컨테이너를 다시 시작해도 데이터가 보존된다. 파드가 -더 이상 존재하지 않으면, 쿠버네티스는 임시(ephemeral) 볼륨을 삭제하지만, +파드의 수명을 넘어 존재한다. 파드가 더 이상 존재하지 않으면, 쿠버네티스는 임시(ephemeral) 볼륨을 삭제하지만, 퍼시스턴트(persistent) 볼륨은 삭제하지 않는다. +볼륨의 종류와 상관없이, 파드 내의 컨테이너가 재시작되어도 데이터는 보존된다. 기본적으로 볼륨은 디렉터리이며, 일부 데이터가 있을 수 있으며, 파드 내 컨테이너에서 접근할 수 있다. 디렉터리의 생성 방식, 이를 지원하는 diff --git a/content/ko/docs/concepts/workloads/controllers/job.md b/content/ko/docs/concepts/workloads/controllers/job.md index b9411ecc31..6cdab2d6c5 100644 --- a/content/ko/docs/concepts/workloads/controllers/job.md +++ b/content/ko/docs/concepts/workloads/controllers/job.md @@ -99,7 +99,7 @@ echo $pods pi-5rwd7 ``` -여기서 셀렉터는 잡의 셀렉터와 동일하다. `--output = jsonpath` 옵션은 반환된 +여기서 셀렉터는 잡의 셀렉터와 동일하다. `--output=jsonpath` 옵션은 반환된 목록에 있는 각 파드의 이름으로 표현식을 지정한다. 파드 중 하나를 표준 출력으로 본다. diff --git a/content/ko/docs/concepts/workloads/pods/disruptions.md b/content/ko/docs/concepts/workloads/pods/disruptions.md index 9d2319ae6a..56244fae26 100644 --- a/content/ko/docs/concepts/workloads/pods/disruptions.md +++ b/content/ko/docs/concepts/workloads/pods/disruptions.md @@ -135,7 +135,7 @@ PDB는 [비자발적 중단](#자발적-중단과-비자발적-중단)이 발생 Eviction API를 사용하여 파드를 축출하면, [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core)의 -`terminationGracePeriodSeconds` 설정을 준수하여 정상적으로 [종료됨](/ko/docs/concepts/workloads/pods/pod-lifecycle/#파드의-종료) 상태가 된다.) +`terminationGracePeriodSeconds` 설정을 준수하여 정상적으로 [종료됨](/ko/docs/concepts/workloads/pods/pod-lifecycle/#파드의-종료) 상태가 된다. ## PodDisruptionBudget 예시 {#pdb-example} diff --git a/content/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints.md b/content/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints.md index b927895575..9bb8cfba78 100644 --- a/content/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints.md +++ b/content/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints.md @@ -58,7 +58,7 @@ graph TB class zoneA,zoneB cluster; {{< /mermaid >}} -레이블을 수동으로 적용하는 대신에, 사용자는 대부분의 클러스터에서 자동으로 생성되고 채워지는 [잘-알려진 레이블](/docs/reference/kubernetes-api/labels-annotations-taints/)을 재사용할 수 있다. +레이블을 수동으로 적용하는 대신에, 사용자는 대부분의 클러스터에서 자동으로 생성되고 채워지는 [잘-알려진 레이블](/docs/reference/labels-annotations-taints/)을 재사용할 수 있다. ## 파드의 분배 제약 조건 diff --git a/content/ko/docs/contribute/new-content/open-a-pr.md b/content/ko/docs/contribute/new-content/open-a-pr.md index 8697159261..552a6e1a0c 100644 --- a/content/ko/docs/contribute/new-content/open-a-pr.md +++ b/content/ko/docs/contribute/new-content/open-a-pr.md @@ -123,8 +123,8 @@ git에 익숙하거나, 변경 사항이 몇 줄보다 클 경우, ```bash origin git@github.com:/website.git (fetch) origin git@github.com:/website.git (push) - upstream https://github.com/kubernetes/website (fetch) - upstream https://github.com/kubernetes/website (push) + upstream https://github.com/kubernetes/website.git (fetch) + upstream https://github.com/kubernetes/website.git (push) ``` 6. 포크의 `origin/master` 와 `kubernetes/website` 의 `upstream/master` 에서 커밋을 가져온다. diff --git a/content/ko/docs/reference/_index.md b/content/ko/docs/reference/_index.md index 4c0b0b8177..a441e80783 100644 --- a/content/ko/docs/reference/_index.md +++ b/content/ko/docs/reference/_index.md @@ -25,7 +25,7 @@ no_list: true * [쿠버네티스 {{< param "version" >}}용 원페이지(One-page) API 레퍼런스](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) * [쿠버네티스 API 사용](/ko/docs/reference/using-api/) - 쿠버네티스 API에 대한 개요 * [API 접근 제어](/ko/docs/reference/access-authn-authz/) - 쿠버네티스가 API 접근을 제어하는 방법에 대한 세부사항 -* [잘 알려진 레이블, 어노테이션과 테인트](/docs/reference/kubernetes-api/labels-annotations-taints/) +* [잘 알려진 레이블, 어노테이션과 테인트](/docs/reference/labels-annotations-taints/) ## 공식적으로 지원되는 클라이언트 라이브러리 diff --git a/content/ko/docs/reference/access-authn-authz/service-accounts-admin.md b/content/ko/docs/reference/access-authn-authz/service-accounts-admin.md index a64633ed52..c5a13a5608 100644 --- a/content/ko/docs/reference/access-authn-authz/service-accounts-admin.md +++ b/content/ko/docs/reference/access-authn-authz/service-accounts-admin.md @@ -5,14 +5,15 @@ weight: 50 --- + 이것은 서비스 어카운트에 대한 클러스터 관리자 안내서다. 독자는 [쿠버네티스 서비스 어카운트 설정](/docs/tasks/configure-pod-container/configure-service-account/)에 익숙하다고 가정한다. 인증 및 사용자 어카운트에 대한 지원은 아직 준비 중이다. -가끔은 서비스 어카운트를 더 잘 설명하기 위해 준비 중인 기능을 참조한다. - +서비스 어카운트를 더 잘 설명하기 위해, 때때로 미완성 기능이 언급될 수 있다. + ## 사용자 어카운트와 서비스 어카운트 비교 쿠버네티스는 여러 가지 이유로 사용자 어카운트와 서비스 어카운트의 개념을 @@ -48,37 +49,51 @@ weight: 50 파드가 생성되거나 수정될 때 파드를 수정하기 위해 동기적으로 동작한다. 이 플러그인이 활성 상태(대부분의 배포에서 기본값)인 경우 파드 생성 또는 수정 시 다음 작업을 수행한다. - 1. 파드에 `ServiceAccount` 가 없다면, `ServiceAccount` 를 `default` 로 설정한다. - 1. 파드에 참조되는 `ServiceAccount` 가 있도록 하고, 그렇지 않으면 이를 거부한다. - 1. 파드에 `ImagePullSecrets` 이 없는 경우, `ServiceAccount` 의 `ImagePullSecrets` 이 파드에 추가된다. - 1. 파드에 API 접근을 위한 토큰이 포함된 `volume` 을 추가한다. - 1. `/var/run/secrets/kubernetes.io/serviceaccount` 에 마운트된 파드의 각 컨테이너에 `volumeSource` 를 추가한다. +1. 파드에 `ServiceAccount` 가 없다면, `ServiceAccount` 를 `default` 로 설정한다. +1. 이전 단계는 파드에 참조되는 `ServiceAccount` 가 있도록 하고, 그렇지 않으면 이를 거부한다. +1. 서비스어카운트 `automountServiceAccountToken` 와 파드의 `automountServiceAccountToken` 중 어느 것도 `false` 로 설정되어 있지 않다면, API 접근을 위한 토큰이 포함된 `volume` 을 파드에 추가한다. +1. 이전 단계에서 서비스어카운트 토큰을 위한 볼륨이 만들어졌다면, `/var/run/secrets/kubernetes.io/serviceaccount` 에 마운트된 파드의 각 컨테이너에 `volumeSource` 를 추가한다. +1. 파드에 `ImagePullSecrets` 이 없는 경우, `ServiceAccount` 의 `ImagePullSecrets` 이 파드에 추가된다. #### 바인딩된 서비스 어카운트 토큰 볼륨 + {{< feature-state for_k8s_version="v1.21" state="beta" >}} -`BoundServiceAccountTokenVolume` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)가 활성화되면, 서비스 어카운트 어드미션 컨트롤러가 -시크릿 볼륨 대신 프로젝티드 서비스 어카운트 토큰 볼륨을 추가한다. 서비스 어카운트 토큰은 기본적으로 1시간 후에 만료되거나 파드가 삭제된다. [프로젝티드 볼륨](/docs/tasks/configure-pod-container/configure-projected-volume-storage/)에 대한 자세한 내용을 참고한다. +`BoundServiceAccountTokenVolume` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)가 활성화되면, +토큰 컨트롤러에 의해 생성된 무기한 서비스 어카운트 토큰을 위해, 서비스 어카운트 어드미션 컨트롤러가 시크릿 기반 볼륨 대신 다음과 같은 프로젝티드 볼륨을 추가한다. -이 기능은 모든 네임스페이스에 "kube-root-ca.crt" 컨피그맵을 게시하는 활성화된 `RootCAConfigMap` 기능 게이트에 따라 다르다. 이 컨피그맵에는 kube-apiserver에 대한 연결을 확인하는 데 사용되는 CA 번들이 포함되어 있다. +```yaml +- name: kube-api-access- + projected: + defaultMode: 420 # 0644 + sources: + - serviceAccountToken: + expirationSeconds: 3600 + path: token + - configMap: + items: + - key: ca.crt + path: ca.crt + name: kube-root-ca.crt + - downwardAPI: + items: + - fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + path: namespace +``` -1. 파드에 `serviceAccountName`가 없다면, `serviceAccountName`를 - `default`로 설정한다. -1. 파드에 참조되는 `serviceAccountName`가 있도록 하고, 그렇지 않으면 - 이를 거부한다. -1. 파드에 `imagePullSecrets`이 없는 경우, 서비스어카운트의 - `imagePullSecrets`이 파드에 추가된다. -1. 서비스어카운트 `automountServiceAccountToken` 또는 파드의 - `automountServiceAccountToken` 이 `false` 로 설정되지 않은 경우 - 파드에 API 접근 토큰이 포함된 `volume`을 추가한다. -1. 이전 단계에서 서비스어카운트 토큰에 대한 볼륨을 생성한 경우, - `/var/run/secrets/kubernetes.io/serviceaccount`에 마운트된 - 파드의 각 컨테이너에 `volumeSource`를 추가한다. +프로젝티드 볼륨은 세 가지로 구성된다. -`BoundServiceAccountTokenVolume` 기능 게이트가 활성화되면 서비스 어카운트 볼륨을 프로젝티드 볼륨으로 마이그레이션할 수 있다. -서비스 어카운트 토큰은 1시간 후에 만료되거나 파드가 삭제된다. -[프로젝티드 볼륨](/docs/tasks/configure-pod-container/configure-projected-volume-storage/)에 대한 -자세한 내용을 참조한다. +1. kube-apiserver로부터 TokenRequest API를 통해 얻은 서비스어카운트토큰(ServiceAccountToken). 서비스어카운트토큰은 기본적으로 1시간 뒤에, 또는 파드가 삭제될 때 만료된다. 서비스어카운트토큰은 파드에 연결되며 kube-apiserver를 위해 존재한다. +1. kube-apiserver에 대한 연결을 확인하는 데 사용되는 CA 번들을 포함하는 컨피그맵(ConfigMap). 이 기능은 모든 네임스페이스에 "kube-root-ca.crt" 컨피그맵을 게시하는 기능 게이트인 `RootCAConfigMap`이 활성화되어 있어야 동작한다. `RootCAConfigMap`은 1.20에서 기본적으로 활성화되어 있으며, 1.21 이상에서는 항상 활성화된 상태이다. +1. 파드의 네임스페이스를 참조하는 DownwardAPI. + +상세 사항은 [프로젝티드 볼륨](/docs/tasks/configure-pod-container/configure-projected-volume-storage/)을 참고한다. + +`BoundServiceAccountTokenVolume` 기능 게이트가 활성화되어 있지 않은 경우, +위의 프로젝티드 볼륨을 파드 스펙에 추가하여 시크릿 기반 서비스 어카운트 볼륨을 프로젝티드 볼륨으로 수동으로 옮길 수 있다. +그러나, `RootCAConfigMap`은 활성화되어 있어야 한다. ### 토큰 컨트롤러 diff --git a/content/ko/docs/reference/command-line-tools-reference/feature-gates.md b/content/ko/docs/reference/command-line-tools-reference/feature-gates.md index a0f970d7c4..6040ba514b 100644 --- a/content/ko/docs/reference/command-line-tools-reference/feature-gates.md +++ b/content/ko/docs/reference/command-line-tools-reference/feature-gates.md @@ -53,7 +53,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `APIPriorityAndFairness` | `false` | 알파 | 1.17 | 1.19 | | `APIPriorityAndFairness` | `true` | 베타 | 1.20 | | | `APIResponseCompression` | `false` | 알파 | 1.7 | 1.15 | -| `APIResponseCompression` | `false` | 베타 | 1.16 | | +| `APIResponseCompression` | `true` | 베타 | 1.16 | | | `APIServerIdentity` | `false` | 알파 | 1.20 | | | `AllowInsecureBackendProxy` | `true` | 베타 | 1.17 | | | `AnyVolumeDataSource` | `false` | 알파 | 1.18 | | @@ -90,6 +90,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `CSIStorageCapacity` | `true` | 베타 | 1.21 | | | `CSIVolumeFSGroupPolicy` | `false` | 알파 | 1.19 | 1.19 | | `CSIVolumeFSGroupPolicy` | `true` | 베타 | 1.20 | | +| `CSIVolumeHealth` | `false` | 알파 | 1.21 | | | `ConfigurableFSGroupPolicy` | `false` | 알파 | 1.18 | 1.19 | | `ConfigurableFSGroupPolicy` | `true` | 베타 | 1.20 | | | `CronJobControllerV2` | `false` | 알파 | 1.20 | 1.20 | @@ -125,14 +126,13 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `HPAScaleToZero` | `false` | 알파 | 1.16 | | | `HugePageStorageMediumSize` | `false` | 알파 | 1.18 | 1.18 | | `HugePageStorageMediumSize` | `true` | 베타 | 1.19 | | +| `IndexedJob` | `false` | 알파 | 1.21 | | | `IngressClassNamespacedParams` | `false` | 알파 | 1.21 | | | `IPv6DualStack` | `false` | 알파 | 1.15 | 1.20 | | `IPv6DualStack` | `true` | 베타 | 1.21 | | | `KubeletCredentialProviders` | `false` | 알파 | 1.20 | | -| `KubeletPodResources` | `true` | 알파 | 1.13 | 1.14 | -| `KubeletPodResources` | `true` | 베타 | 1.15 | | | `LegacyNodeRoleBehavior` | `false` | 알파 | 1.16 | 1.18 | -| `LegacyNodeRoleBehavior` | `true` | True | 1.19 | | +| `LegacyNodeRoleBehavior` | `true` | 베타 | 1.19 | | | `LocalStorageCapacityIsolation` | `false` | 알파 | 1.7 | 1.9 | | `LocalStorageCapacityIsolation` | `true` | 베타 | 1.10 | | | `LocalStorageCapacityIsolationFSQuotaMonitoring` | `false` | 알파 | 1.15 | | @@ -158,8 +158,6 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `RotateKubeletServerCertificate` | `false` | 알파 | 1.7 | 1.11 | | `RotateKubeletServerCertificate` | `true` | 베타 | 1.12 | | | `RunAsGroup` | `true` | 베타 | 1.14 | | -| `SCTPSupport` | `false` | 알파 | 1.12 | 1.18 | -| `SCTPSupport` | `true` | 베타 | 1.19 | | | `ServerSideApply` | `false` | 알파 | 1.14 | 1.15 | | `ServerSideApply` | `true` | 베타 | 1.16 | | | `ServiceInternalTrafficPolicy` | `false` | 알파 | 1.21 | | @@ -181,12 +179,13 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `TopologyManager` | `true` | 베타 | 1.18 | | | `ValidateProxyRedirects` | `false` | 알파 | 1.12 | 1.13 | | `ValidateProxyRedirects` | `true` | 베타 | 1.14 | | +| `VolumeCapacityPriority` | `false` | 알파 | 1.21 | - | | `WarningHeaders` | `true` | 베타 | 1.19 | | | `WinDSR` | `false` | 알파 | 1.14 | | | `WinOverlay` | `false` | 알파 | 1.14 | 1.19 | | `WinOverlay` | `true` | 베타 | 1.20 | | | `WindowsEndpointSliceProxying` | `false` | 알파 | 1.19 | 1.20 | -| `WindowsEndpointSliceProxying` | `true` | beta | 1.21 | | +| `WindowsEndpointSliceProxying` | `true` | 베타 | 1.21 | | {{< /table >}} ### GA 또는 사용 중단된 기능을 위한 기능 게이트 @@ -225,7 +224,6 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `CSIPersistentVolume` | `false` | 알파 | 1.9 | 1.9 | | `CSIPersistentVolume` | `true` | 베타 | 1.10 | 1.12 | | `CSIPersistentVolume` | `true` | GA | 1.13 | - | -| `CSIVolumeHealth` | `false` | 알파 | 1.21 | - | | `CustomPodDNS` | `false` | 알파 | 1.9 | 1.9 | | `CustomPodDNS` | `true` | 베타| 1.10 | 1.13 | | `CustomPodDNS` | `true` | GA | 1.14 | - | @@ -258,9 +256,9 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `EnableEquivalenceClassCache` | - | 사용중단 | 1.15 | - | | `EndpointSlice` | `false` | 알파 | 1.16 | 1.16 | | `EndpointSlice` | `false` | 베타 | 1.17 | 1.17 | -| `EndpointSlice` | `true` | 베타 | 1.18 | 1.21 | +| `EndpointSlice` | `true` | 베타 | 1.18 | 1.20 | | `EndpointSlice` | `true` | GA | 1.21 | - | -| `EndpointSliceNodeName` | `false` | 알파 | 1.20 | 1.21 | +| `EndpointSliceNodeName` | `false` | 알파 | 1.20 | 1.20 | | `EndpointSliceNodeName` | `true` | GA | 1.21 | - | | `ExperimentalCriticalPodAnnotation` | `false` | 알파 | 1.5 | 1.12 | | `ExperimentalCriticalPodAnnotation` | `false` | 사용중단 | 1.13 | - | @@ -278,7 +276,6 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `ImmutableEphemeralVolumes` | `false` | 알파 | 1.18 | 1.18 | | `ImmutableEphemeralVolumes` | `true` | 베타 | 1.19 | 1.20 | | `ImmutableEphemeralVolumes` | `true` | GA | 1.21 | | -| `IndexedJob` | `false` | 알파 | 1.21 | | | `Initializers` | `false` | 알파 | 1.7 | 1.13 | | `Initializers` | - | 사용중단 | 1.14 | - | | `KubeletConfigFile` | `false` | 알파 | 1.8 | 1.9 | @@ -315,6 +312,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `PodShareProcessNamespace` | `true` | 베타 | 1.12 | 1.16 | | `PodShareProcessNamespace` | `true` | GA | 1.17 | - | | `RequestManagement` | `false` | 알파 | 1.15 | 1.16 | +| `RequestManagement` | - | 사용중단 | 1.17 | - | | `ResourceLimitsPriorityFunction` | `false` | 알파 | 1.9 | 1.18 | | `ResourceLimitsPriorityFunction` | - | 사용중단 | 1.19 | - | | `ResourceQuotaScopeSelectors` | `false` | 알파 | 1.11 | 1.11 | @@ -338,7 +336,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `ServiceAccountIssuerDiscovery` | `true` | 베타 | 1.20 | 1.20 | | `ServiceAccountIssuerDiscovery` | `true` | GA | 1.21 | - | | `ServiceAppProtocol` | `false` | 알파 | 1.18 | 1.18 | -| `ServiceAppProtocol` | `true` | 베타 | 1.19 | | +| `ServiceAppProtocol` | `true` | 베타 | 1.19 | 1.19 | | `ServiceAppProtocol` | `true` | GA | 1.20 | - | | `ServiceLoadBalancerFinalizer` | `false` | 알파 | 1.15 | 1.15 | | `ServiceLoadBalancerFinalizer` | `true` | 베타 | 1.16 | 1.16 | @@ -350,7 +348,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `StorageObjectInUseProtection` | `true` | GA | 1.11 | - | | `StreamingProxyRedirects` | `false` | 베타 | 1.5 | 1.5 | | `StreamingProxyRedirects` | `true` | 베타 | 1.6 | 1.18 | -| `StreamingProxyRedirects` | - | 사용중단| 1.19 | - | +| `StreamingProxyRedirects` | - | GA | 1.19 | - | | `SupportIPVSProxyMode` | `false` | 알파 | 1.8 | 1.8 | | `SupportIPVSProxyMode` | `false` | 베타 | 1.9 | 1.9 | | `SupportIPVSProxyMode` | `true` | 베타 | 1.10 | 1.10 | @@ -376,15 +374,15 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 | `TokenRequestProjection` | `true` | 베타 | 1.12 | 1.19 | | `TokenRequestProjection` | `true` | GA | 1.20 | - | | `VolumeCapacityPriority` | `false` | 알파 | 1.21 | - | -| `VolumeSnapshotDataSource` | `false` | 알파 | 1.12 | 1.16 | -| `VolumeSnapshotDataSource` | `true` | 베타 | 1.17 | 1.19 | -| `VolumeSnapshotDataSource` | `true` | GA | 1.20 | - | | `VolumePVCDataSource` | `false` | 알파 | 1.15 | 1.15 | | `VolumePVCDataSource` | `true` | 베타 | 1.16 | 1.17 | | `VolumePVCDataSource` | `true` | GA | 1.18 | - | | `VolumeScheduling` | `false` | 알파 | 1.9 | 1.9 | | `VolumeScheduling` | `true` | 베타 | 1.10 | 1.12 | | `VolumeScheduling` | `true` | GA | 1.13 | - | +| `VolumeSnapshotDataSource` | `false` | 알파 | 1.12 | 1.16 | +| `VolumeSnapshotDataSource` | `true` | 베타 | 1.17 | 1.19 | +| `VolumeSnapshotDataSource` | `true` | GA | 1.20 | - | | `VolumeSubpath` | `true` | GA | 1.10 | - | | `VolumeSubpathEnvExpansion` | `false` | 알파 | 1.14 | 1.14 | | `VolumeSubpathEnvExpansion` | `true` | 베타 | 1.15 | 1.16 | @@ -451,7 +449,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 - `APIServerIdentity`: 클러스터의 각 API 서버에 ID를 할당한다. - `Accelerators`: 도커 사용 시 Nvidia GPU 지원 활성화한다. - `AdvancedAuditing`: [고급 감사](/docs/tasks/debug-application-cluster/audit/#advanced-audit) 기능을 활성화한다. -- `AffinityInAnnotations`(*사용 중단됨*): [파드 어피니티 또는 안티-어피니티](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#어피니티-affinity-와-안티-어피니티-anti-affinity) +- `AffinityInAnnotations`: [파드 어피니티 또는 안티-어피니티](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#어피니티-affinity-와-안티-어피니티-anti-affinity) 설정을 활성화한다. - `AllowExtTrafficLocalEndpoints`: 서비스가 외부 요청을 노드의 로컬 엔드포인트로 라우팅할 수 있도록 한다. - `AllowInsecureBackendProxy`: 사용자가 파드 로그 요청에서 kubelet의 @@ -477,8 +475,8 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 확인한다. - `CPUManager`: 컨테이너 수준의 CPU 어피니티 지원을 활성화한다. [CPU 관리 정책](/docs/tasks/administer-cluster/cpu-management-policies/)을 참고한다. -- `CRIContainerLogRotation`: cri 컨테이너 런타임에 컨테이너 로그 로테이션을 활성화한다. 로그 파일 사이즈 기본값은 10MB이며, -컨테이너 당 최대 로그 파일 수 기본값은 5이다. 이 값은 kubelet 환경설정으로 변경할 수 있다. +- `CRIContainerLogRotation`: cri 컨테이너 런타임에 컨테이너 로그 로테이션을 활성화한다. 로그 파일 사이즈 기본값은 10MB이며, +컨테이너 당 최대 로그 파일 수 기본값은 5이다. 이 값은 kubelet 환경설정으로 변경할 수 있다. 더 자세한 내용은 [노드 레벨에서의 로깅](/ko/docs/concepts/cluster-administration/logging/#노드-레벨에서의-로깅)을 참고한다. - `CSIBlockVolume`: 외부 CSI 볼륨 드라이버가 블록 스토리지를 지원할 수 있게 한다. 자세한 내용은 [`csi` 원시 블록 볼륨 지원](/ko/docs/concepts/storage/volumes/#csi-원시-raw-블록-볼륨-지원) @@ -592,18 +590,18 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 hugepages 사용을 활성화한다. - `DryRun`: 서버 측의 [dry run](/docs/reference/using-api/api-concepts/#dry-run) 요청을 요청을 활성화하여 커밋하지 않고 유효성 검사, 병합 및 변화를 테스트할 수 있다. -- `DynamicAuditing`(*사용 중단됨*): v1.19 이전의 버전에서 동적 감사를 활성화하는 데 사용된다. +- `DynamicAuditing`: v1.19 이전의 버전에서 동적 감사를 활성화하는 데 사용된다. - `DynamicKubeletConfig`: kubelet의 동적 구성을 활성화한다. [kubelet 재구성](/docs/tasks/administer-cluster/reconfigure-kubelet/)을 참고한다. - `DynamicProvisioningScheduling`: 볼륨 토폴로지를 인식하고 PV 프로비저닝을 처리하도록 기본 스케줄러를 확장한다. 이 기능은 v1.12의 `VolumeScheduling` 기능으로 대체되었다. -- `DynamicVolumeProvisioning`(*사용 중단됨*): 파드에 퍼시스턴트 볼륨의 +- `DynamicVolumeProvisioning`: 파드에 퍼시스턴트 볼륨의 [동적 프로비저닝](/ko/docs/concepts/storage/dynamic-provisioning/)을 활성화한다. - `EfficientWatchResumption`: 스토리지에서 생성된 북마크(진행 알림) 이벤트를 사용자에게 전달할 수 있다. 이것은 감시 작업에만 적용된다. -- `EnableAggregatedDiscoveryTimeout` (*사용 중단됨*): 수집된 검색 호출에서 5초 +- `EnableAggregatedDiscoveryTimeout`: 수집된 검색 호출에서 5초 시간 초과를 활성화한다. - `EnableEquivalenceClassCache`: 스케줄러가 파드를 스케줄링할 때 노드의 동등성을 캐시할 수 있게 한다. @@ -661,11 +659,13 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 기능을 활성화한다. - `ImmutableEphemeralVolumes`: 안정성과 성능 향상을 위해 개별 시크릿(Secret)과 컨피그맵(ConfigMap)을 변경할 수 없는(immutable) 것으로 표시할 수 있다. -- `IndexedJob`: [잡](/ko/docs/concepts/workloads/controllers/job/) 컨트롤러가 +- `IndexedJob`: [잡](/ko/docs/concepts/workloads/controllers/job/) 컨트롤러가 완료 횟수를 기반으로 파드 완료를 관리할 수 있도록 한다. -- `IngressClassNamespacedParams`: `IngressClass` 리소스가 네임스페이스 범위로 - 한정된 파라미터를 이용할 수 있도록 한다. 이 기능은 `IngressClass.spec.parameters` 에 +- `IngressClassNamespacedParams`: `IngressClass` 리소스가 네임스페이스 범위로 + 한정된 파라미터를 이용할 수 있도록 한다. 이 기능은 `IngressClass.spec.parameters` 에 `Scope` 와 `Namespace` 2개의 필드를 추가한다. +- `Initializers`: Initializers 어드미션 플러그인을 사용하여 오브젝트 생성의 + 비동기 조정을 허용한다. - `IPv6DualStack`: IPv6을 위한 [이중 스택](/ko/docs/concepts/services-networking/dual-stack/) 기능을 활성화한다. - `KubeletConfigFile`: 구성 파일을 사용하여 지정된 파일에서 @@ -679,12 +679,12 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 [장치 모니터링 지원](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/606-compute-device-assignment/README.md)을 참고한다. - `KubeletPodResourcesGetAllocatable`: kubelet의 파드 리소스 `GetAllocatableResources` 기능을 활성화한다. - 이 API는 클라이언트가 노드의 여유 컴퓨팅 자원을 잘 파악할 수 있도록, 할당 가능 자원에 대한 정보를 + 이 API는 클라이언트가 노드의 여유 컴퓨팅 자원을 잘 파악할 수 있도록, 할당 가능 자원에 대한 정보를 [자원 할당 보고](/ko/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#장치-플러그인-리소스-모니터링)한다. - `LegacyNodeRoleBehavior`: 비활성화되면, 서비스 로드 밸런서 및 노드 중단의 레거시 동작은 `NodeDisruptionExclusion` 과 `ServiceNodeExclusion` 에 의해 제공된 기능별 레이블을 대신하여 `node-role.kubernetes.io/master` 레이블을 무시한다. -- `LocalStorageCapacityIsolation`: +- `LocalStorageCapacityIsolation`: [로컬 임시 스토리지](/ko/docs/concepts/configuration/manage-resources-containers/)와 [emptyDir 볼륨](/ko/docs/concepts/storage/volumes/#emptydir)의 `sizeLimit` 속성을 사용할 수 있게 한다. @@ -695,15 +695,14 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 프로젝트 쿼터를 사용하여 [emptyDir 볼륨](/ko/docs/concepts/storage/volumes/#emptydir) 스토리지 사용을 모니터링하여 성능과 정확성을 향상시킨다. -- `LogarithmicScaleDown`: 컨트롤러 스케일 다운 시에 파드 타임스탬프를 로그 스케일로 버켓화하여 +- `LogarithmicScaleDown`: 컨트롤러 스케일 다운 시에 파드 타임스탬프를 로그 스케일로 버켓화하여 축출할 파드를 반-랜덤하게 선택하는 기법을 활성화한다. - `MixedProtocolLBService`: 동일한 로드밸런서 유형 서비스 인스턴스에서 다른 프로토콜 사용을 활성화한다. -- `MountContainers` (*사용 중단됨*): 호스트의 유틸리티 컨테이너를 볼륨 마운터로 - 사용할 수 있다. +- `MountContainers`: 호스트의 유틸리티 컨테이너를 볼륨 마운터로 사용할 수 있다. - `MountPropagation`: 한 컨테이너에서 다른 컨테이너 또는 파드로 마운트된 볼륨을 공유할 수 있다. 자세한 내용은 [마운트 전파(propagation)](/ko/docs/concepts/storage/volumes/#마운트-전파-propagation)을 참고한다. -- `NamespaceDefaultLabelName`: API 서버로 하여금 모든 네임스페이스에 대해 변경할 수 없는 (immutable) +- `NamespaceDefaultLabelName`: API 서버로 하여금 모든 네임스페이스에 대해 변경할 수 없는 (immutable) {{< glossary_tooltip text="레이블" term_id="label" >}} `kubernetes.io/metadata.name`을 설정하도록 한다. (네임스페이스의 이름도 변경 불가) - `NetworkPolicyEndPort`: 네트워크폴리시(NetworkPolicy) 오브젝트에서 단일 포트를 지정하는 것 대신에 포트 범위를 지정할 수 있도록, `endPort` 필드의 사용을 활성화한다. - `NodeDisruptionExclusion`: 영역(zone) 장애 시 노드가 제외되지 않도록 노드 레이블 `node.kubernetes.io/exclude-disruption` @@ -712,12 +711,12 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 - `NonPreemptingPriority`: 프라이어리티클래스(PriorityClass)와 파드에 `preemptionPolicy` 필드를 활성화한다. - `PVCProtection`: 파드에서 사용 중일 때 퍼시스턴트볼륨클레임(PVC)이 삭제되지 않도록 한다. -- `PodDeletionCost`: 레플리카셋 다운스케일 시 삭제될 파드의 우선순위를 사용자가 조절할 수 있도록, +- `PodDeletionCost`: 레플리카셋 다운스케일 시 삭제될 파드의 우선순위를 사용자가 조절할 수 있도록, [파드 삭제 비용](/ko/docs/concepts/workloads/controllers/replicaset/#파드-삭제-비용) 기능을 활성화한다. - `PersistentLocalVolumes`: 파드에서 `local` 볼륨 유형의 사용을 활성화한다. `local` 볼륨을 요청하는 경우 파드 어피니티를 지정해야 한다. - `PodDisruptionBudget`: [PodDisruptionBudget](/docs/tasks/run-application/configure-pdb/) 기능을 활성화한다. -- `PodAffinityNamespaceSelector`: [파드 어피니티 네임스페이스 셀렉터](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#네임스페이스-셀렉터) 기능과 +- `PodAffinityNamespaceSelector`: [파드 어피니티 네임스페이스 셀렉터](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#네임스페이스-셀렉터) 기능과 [CrossNamespacePodAffinity](/ko/docs/concepts/policy/resource-quotas/#네임스페이스-간-파드-어피니티-쿼터) 쿼터 범위 기능을 활성화한다. - `PodOverhead`: 파드 오버헤드를 판단하기 위해 [파드오버헤드(PodOverhead)](/ko/docs/concepts/scheduling-eviction/pod-overhead/) 기능을 활성화한다. @@ -729,8 +728,8 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 - `PodShareProcessNamespace`: 파드에서 실행되는 컨테이너 간에 단일 프로세스 네임스페이스를 공유하기 위해 파드에서 `shareProcessNamespace` 설정을 활성화한다. 자세한 내용은 [파드의 컨테이너 간 프로세스 네임스페이스 공유](/docs/tasks/configure-pod-container/share-process-namespace/)에서 확인할 수 있다. -- `ProbeTerminationGracePeriod`: 파드의 [프로브-수준 - `terminationGracePeriodSeconds` 설정하기](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#probe-level-terminationgraceperiodseconds) 기능을 활성화한다. +- `ProbeTerminationGracePeriod`: 파드의 [프로브-수준 + `terminationGracePeriodSeconds` 설정하기](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#probe-level-terminationgraceperiodseconds) 기능을 활성화한다. 더 자세한 사항은 [기능개선 제안](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2238-liveness-probe-grace-period)을 참고한다. - `ProcMountType`: SecurityContext의 `procMount` 필드를 설정하여 컨테이너의 proc 타입의 마운트를 제어할 수 있다. @@ -742,7 +741,9 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 응답에서 남은 항목 수를 표시하도록 허용한다. - `RemoveSelfLink`: ObjectMeta 및 ListMeta에서 `selfLink` 를 사용하지 않고 제거한다. -- `ResourceLimitsPriorityFunction` (*사용 중단됨*): 입력 파드의 CPU 및 메모리 한도 중 +- `RequestManagement`: 각 API 서버에서 우선 순위 및 공정성으로 요청 동시성을 + 관리할 수 있다. 1.17 이후 `APIPriorityAndFairness` 에서 사용 중단되었다. +- `ResourceLimitsPriorityFunction`: 입력 파드의 CPU 및 메모리 한도 중 하나 이상을 만족하는 노드에 가능한 최저 점수 1을 할당하는 스케줄러 우선 순위 기능을 활성화한다. 의도는 동일한 점수를 가진 노드 사이의 관계를 끊는 것이다. @@ -770,11 +771,11 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 JWKS URL)를 활성화한다. 자세한 내용은 [파드의 서비스 어카운트 구성](/docs/tasks/configure-pod-container/configure-service-account/#service-account-issuer-discovery)을 참고한다. -- `ServiceAppProtocol`: 서비스와 엔드포인트에서 `AppProtocol` 필드를 활성화한다. -- `ServiceInternalTrafficPolicy`: 서비스에서 `InternalTrafficPolicy` 필드를 활성화한다. -- `ServiceLBNodePortControl`: 서비스에서`spec.allocateLoadBalancerNodePorts` 필드를 - 활성화한다. -- `ServiceLoadBalancerClass`: 서비스에서 `LoadBalancerClass` 필드를 활성화한다. 자세한 내용은 [로드밸런서 구현체의 종류 확인하기](/ko/docs/concepts/services-networking/service/#load-balancer-class)를 참고한다. +- `ServiceAppProtocol`: 서비스와 엔드포인트에서 `appProtocol` 필드를 활성화한다. +- `ServiceInternalTrafficPolicy`: 서비스에서 `internalTrafficPolicy` 필드를 활성화한다. +- `ServiceLBNodePortControl`: 서비스에서 `allocateLoadBalancerNodePorts` 필드를 활성화한다. +- `ServiceLoadBalancerClass`: 서비스에서 `loadBalancerClass` 필드를 활성화한다. 자세한 내용은 + [로드밸런서 구현체의 종류 확인하기](/ko/docs/concepts/services-networking/service/#load-balancer-class)를 참고한다. - `ServiceLoadBalancerFinalizer`: 서비스 로드 밸런서에 대한 Finalizer 보호를 활성화한다. - `ServiceNodeExclusion`: 클라우드 제공자가 생성한 로드 밸런서에서 노드를 제외할 수 있다. "`node.kubernetes.io/exclude-from-external-load-balancers`"로 @@ -785,7 +786,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 참고한다. - `SetHostnameAsFQDN`: 전체 주소 도메인 이름(FQDN)을 파드의 호스트 이름으로 설정하는 기능을 활성화한다. - [파드의 `setHostnameAsFQDN` 필드](/ko/docs/concepts/services-networking/dns-pod-service/#파드의-sethostnameasfqdn-필드)를 참고한다. + [파드의 `setHostnameAsFQDN` 필드](/ko/docs/concepts/services-networking/dns-pod-service/#pod-sethostnameasfqdn-field)를 참고한다. - `StartupProbe`: kubelet에서 [스타트업](/ko/docs/concepts/workloads/pods/pod-lifecycle/#언제-스타트업-프로브를-사용해야-하는가) 프로브를 활성화한다. @@ -800,14 +801,14 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 스트리밍 요청의 예로는 `exec`, `attach` 및 `port-forward` 요청이 있다. - `SupportIPVSProxyMode`: IPVS를 사용하여 클러스터 내 서비스 로드 밸런싱을 제공한다. 자세한 내용은 [서비스 프록시](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시)를 참고한다. -- `SupportPodPidsLimit`: 파드의 PID 제한을 지원한다. - `SupportNodePidsLimit`: 노드에서 PID 제한 지원을 활성화한다. `--system-reserved` 및 `--kube-reserved` 옵션의 `pid=` 파라미터를 지정하여 지정된 수의 프로세스 ID가 시스템 전체와 각각 쿠버네티스 시스템 데몬에 대해 예약되도록 할 수 있다. -- `SuspendJob`: 잡 중지/재시작 기능을 활성화한다. - 자세한 내용은 [잡 문서](/ko/docs/concepts/workloads/controllers/job/)를 +- `SupportPodPidsLimit`: 파드의 PID 제한에 대한 지원을 활성화한다. +- `SuspendJob`: 잡 중지/재시작 기능을 활성화한다. + 자세한 내용은 [잡 문서](/ko/docs/concepts/workloads/controllers/job/)를 참고한다. - `Sysctls`: 각 파드에 설정할 수 있는 네임스페이스 커널 파라미터(sysctl)를 지원한다. 자세한 내용은 @@ -824,14 +825,17 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 - `TokenRequest`: 서비스 어카운트 리소스에서 `TokenRequest` 엔드포인트를 활성화한다. - `TokenRequestProjection`: [`projected` 볼륨](/ko/docs/concepts/storage/volumes/#projected)을 통해 서비스 어카운트 토큰을 파드에 주입할 수 있다. -- `TopologyAwareHints`: 엔드포인트슬라이스(EndpointSlices)에서 토폴로지 힌트 기반 - 토폴로지-어웨어 라우팅을 활성화한다. 자세한 내용은 +- `TopologyAwareHints`: 엔드포인트슬라이스(EndpointSlices)에서 토폴로지 힌트 기반 + 토폴로지-어웨어 라우팅을 활성화한다. 자세한 내용은 [토폴로지 어웨어 힌트](/docs/concepts/services-networking/topology-aware-hints/) 를 참고한다. - `TopologyManager`: 쿠버네티스의 다른 컴포넌트에 대한 세분화된 하드웨어 리소스 할당을 조정하는 메커니즘을 활성화한다. [노드의 토폴로지 관리 정책 제어](/docs/tasks/administer-cluster/topology-manager/)를 참고한다. -- `VolumeCapacityPriority`: 가용 PV 용량을 기반으로 +- `ValidateProxyRedirects`: 이 플래그는 API 서버가 동일한 호스트로만 리디렉션되는가를 + 확인해야 하는지 여부를 제어한다. `StreamingProxyRedirects` + 플래그가 활성화된 경우에만 사용된다. +- `VolumeCapacityPriority`: 가용 PV 용량을 기반으로 여러 토폴로지에 있는 노드들의 우선순위를 정하는 기능을 활성화한다. - `VolumePVCDataSource`: 기존 PVC를 데이터 소스로 지정하는 기능을 지원한다. - `VolumeScheduling`: 볼륨 토폴로지 인식 스케줄링을 활성화하고 @@ -839,6 +843,7 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능 `PersistentLocalVolumes` 기능 게이트와 함께 사용될 때 [`local`](/ko/docs/concepts/storage/volumes/#local) 볼륨 유형을 사용할 수 있다. - `VolumeSnapshotDataSource`: 볼륨 스냅샷 데이터 소스 지원을 활성화한다. +- `VolumeSubpath`: 컨테이너에 볼륨의 하위 경로(subpath)를 마운트할 수 있다. - `VolumeSubpathEnvExpansion`: 환경 변수를 `subPath`로 확장하기 위해 `subPathExpr` 필드를 활성화한다. - `WarningHeaders`: API 응답에서 경고 헤더를 보낼 수 있다. diff --git a/content/ko/docs/reference/command-line-tools-reference/kube-proxy.md b/content/ko/docs/reference/command-line-tools-reference/kube-proxy.md index e4c790c491..bd930180cd 100644 --- a/content/ko/docs/reference/command-line-tools-reference/kube-proxy.md +++ b/content/ko/docs/reference/command-line-tools-reference/kube-proxy.md @@ -5,6 +5,7 @@ weight: 30 auto_generated: true --- + -## minikubue 클러스터 만들기 +## minikube 클러스터 만들기 1. **Launch Terminal** 을 클릭 diff --git a/content/ru/docs/concepts/architecture/nodes.md b/content/ru/docs/concepts/architecture/nodes.md index 7c10f75e1b..075c3140f5 100644 --- a/content/ru/docs/concepts/architecture/nodes.md +++ b/content/ru/docs/concepts/architecture/nodes.md @@ -235,8 +235,9 @@ ConditionUnknown, когда узел становится недоступны например, из-за того, что узел упал), и затем позже выселяет все поды с узла (используя мягкое (graceful) завершение) если узел продолжает быть недоступным. (По умолчанию таймауты составляют 40 секунд, чтобы начать сообщать `ConditionUnknown`, -и 5 минут после, чтобы начать выселять поды.) Контроллер узла проверяет состояние каждого узла -каждые `--node-monitor-period` секунд. +и 5 минут после, чтобы начать выселять поды.) + +Контроллер узла проверяет состояние каждого узла каждые `--node-monitor-period` секунд. #### Сердцебиения @@ -274,8 +275,9 @@ Kubelet отвечает за создание и обновление `NodeStat если кластер небольшой (т.е. количество узлов меньше или равно `--large-cluster-size-threshold` - по умолчанию, 50), то выселения прекращаются, в противном случае скорость выселения снижается до -`--secondary-node-eviction-rate` (по умолчанию, 0.01) в секунду. Причина, по которой -эти политики реализуются для каждой зоны доступности, заключается в том, +`--secondary-node-eviction-rate` (по умолчанию, 0.01) в секунду. + +Причина, по которой эти политики реализуются для каждой зоны доступности, заключается в том, что одна зона доступности может стать отделенной от мастера, в то время как другие остаются подключенными. Если ваш кластер не охватывает несколько зон доступности облачного провайдера, то существует только одна зона доступности (весь кластер). diff --git a/content/zh/docs/concepts/architecture/cloud-controller.md b/content/zh/docs/concepts/architecture/cloud-controller.md index 33d660b243..c962b5f5f0 100644 --- a/content/zh/docs/concepts/architecture/cloud-controller.md +++ b/content/zh/docs/concepts/architecture/cloud-controller.md @@ -1,11 +1,11 @@ --- -title: 云控制器管理器的基础概念 +title: 云控制器管理器 content_type: concept weight: 40 --- diff --git a/content/zh/docs/concepts/architecture/control-plane-node-communication.md b/content/zh/docs/concepts/architecture/control-plane-node-communication.md index 0501507898..3e2beaafd9 100644 --- a/content/zh/docs/concepts/architecture/control-plane-node-communication.md +++ b/content/zh/docs/concepts/architecture/control-plane-node-communication.md @@ -15,7 +15,7 @@ aliases: 本文列举控制面节点(确切说是 API 服务器)和 Kubernetes 集群之间的通信路径。 目的是为了让用户能够自定义他们的安装,以实现对网络配置的加固,使得集群能够在不可信的网络上 @@ -24,14 +24,15 @@ This document catalogs the communication paths between the control plane (really ## 节点到控制面 Kubernetes 采用的是中心辐射型(Hub-and-Spoke)API 模式。 -所有从集群(或所运行的 Pods)发出的 API 调用都终止于 apiserver(其它控制面组件都没有被设计为可暴露远程服务)。 -apiserver 被配置为在一个安全的 HTTPS 端口(443)上监听远程连接请求, +所有从集群(或所运行的 Pods)发出的 API 调用都终止于 apiserver。 +其它控制面组件都没有被设计为可暴露远程服务。 +apiserver 被配置为在一个安全的 HTTPS 端口(通常为 443)上监听远程连接请求, 并启用一种或多种形式的客户端[身份认证](/zh/docs/reference/access-authn-authz/authentication/)机制。 一种或多种客户端[鉴权机制](/zh/docs/reference/access-authn-authz/authorization/)应该被启用, 特别是在允许使用[匿名请求](/zh/docs/reference/access-authn-authz/authentication/#anonymous-requests) @@ -84,7 +85,7 @@ The connections from the apiserver to the kubelet are used for: * Attaching (through kubectl) to running pods. * Providing the kubelet's port-forwarding functionality. -These connections terminate at the kubelet's HTTPS endpoint. By default, the apiserver does not verify the kubelet's serving certificate, which makes the connection subject to man-in-the-middle attacks, and **unsafe** to run over untrusted and/or public networks. +These connections terminate at the kubelet's HTTPS endpoint. By default, the apiserver does not verify the kubelet's serving certificate, which makes the connection subject to man-in-the-middle attacks and **unsafe** to run over untrusted and/or public networks. --> ### API 服务器到 kubelet @@ -121,7 +122,6 @@ kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。 The connections from the apiserver to a node, pod, or service default to plain HTTP connections and are therefore neither authenticated nor encrypted. They can be run over a secure HTTPS connection by prefixing `https:` to the node, pod, or service name in the API URL, but they will not validate the certificate provided by the HTTPS endpoint nor provide client credentials so while the connection will be encrypted, it will not provide any guarantees of integrity. These connections **are not currently safe** to run over untrusted and/or public networks. --> - ### apiserver 到节点、Pod 和服务 从 apiserver 到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。 @@ -153,7 +153,7 @@ Konnectivity 服务是对此通信通道的替代品。 {{< feature-state for_k8s_version="v1.18" state="beta" >}} -As a replacement to the SSH tunnels, the Konnectivity service provides TCP level proxy for the control plane to cluster communication. The Konnectivity service consists of two parts: the Konnectivity server and the Konnectivity agents, running in the control plane network and the nodes network respectively. The Konnectivity agents initiate connections to the Konnectivity server and maintain the network connections. +As a replacement to the SSH tunnels, the Konnectivity service provides TCP level proxy for the control plane to cluster communication. The Konnectivity service consists of two parts: the Konnectivity server in the control plane network and the Konnectivity agents in the nodes network. The Konnectivity agents initiate connections to the Konnectivity server and maintain the network connections. After enabling the Konnectivity service, all control plane to nodes traffic goes through these connections. Follow the [Konnectivity service task](/docs/tasks/extend-kubernetes/setup-konnectivity/) to set up the Konnectivity service in your cluster. diff --git a/content/zh/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md index 8536916268..280b705e84 100644 --- a/content/zh/docs/concepts/architecture/nodes.md +++ b/content/zh/docs/concepts/architecture/nodes.md @@ -17,9 +17,10 @@ weight: 10 Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 -每个节点包含运行 {{< glossary_tooltip text="Pods" term_id="pod" >}} 所需的服务, -这些 Pods 由 {{< glossary_tooltip text="控制面" term_id="control-plane" >}} 负责管理。 +每个节点包含运行 {{< glossary_tooltip text="Pods" term_id="pod" >}} 所需的服务; +这些节点由 {{< glossary_tooltip text="控制面" term_id="control-plane" >}} 负责管理。 通常集群中会有若干个节点;而在一个学习用或者资源受限的环境中,你的集群中也可能 只有一个节点。 @@ -556,17 +557,6 @@ that the scheduler won't place Pods onto unhealthy nodes. {{< glossary_tooltip text="污点" term_id="taint" >}}。 这意味着调度器不会将 Pod 调度到不健康的节点上。 - -{{< caution>}} -`kubectl cordon` 会将节点标记为“不可调度(Unschedulable)”。 -此操作的副作用是,服务控制器会将该节点从负载均衡器中之前的目标节点列表中移除, -从而使得来自负载均衡器的网络请求不会到达被保护起来的节点。 -{{< /caution>}} - ## 节点体面关闭 {#graceful-node-shutdown} -{{< feature-state state="alpha" for_k8s_version="v1.20" >}} +{{< feature-state state="beta" for_k8s_version="v1.21" >}} -如果你启用了 `GracefulNodeShutdown` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/), -那么 kubelet 尝试检测节点的系统关闭事件并终止在节点上运行的 Pod。 +kubelet 会尝试检测节点系统关闭事件并终止在节点上运行的 Pods。 + 在节点终止期间,kubelet 保证 Pod 遵从常规的 [Pod 终止流程](/zh/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination)。 -当启用了 `GracefulNodeShutdown` 特性门控时, -kubelet 使用 [systemd 抑制器锁](https://www.freedesktop.org/wiki/Software/systemd/inhibit/) -在给定的期限内延迟节点关闭。在关闭过程中,kubelet 分两个阶段终止 Pod: +体面节点关闭特性依赖于 systemd,因为它要利用 +[systemd 抑制器锁](https://www.freedesktop.org/wiki/Software/systemd/inhibit/) +在给定的期限内延迟节点关闭。 + + +体面节点关闭特性受 `GracefulNodeShutdown` +[特性门控](/docs/reference/command-line-tools-reference/feature-gates/) +控制,在 1.21 版本中是默认启用的。 + + +注意,默认情况下,下面描述的两个配置选项,`ShutdownGracePeriod` 和 +`ShutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活 +体面节点关闭功能。 +要激活此功能特性,这两个 kubelet 配置选项要适当配置,并设置为非零值。 +在体面关闭节点过程中,kubelet 分两个阶段来终止 Pods: + 1. 终止在节点上运行的常规 Pod。 2. 终止在节点上运行的[关键 Pod](/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 @@ -658,9 +675,11 @@ Graceful Node Shutdown feature is configured with two [`KubeletConfiguration`](/ * `ShutdownGracePeriod`: * Specifies the total duration that the node should delay the shutdown by. This is the total grace period for pod termination for both regular and [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical). * `ShutdownGracePeriodCriticalPods`: - * Specifies the duration used to terminate [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) during a node shutdown. This should be less than `ShutdownGracePeriod`. + * Specifies the duration used to terminate [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) during a node shutdown. This value should be less than `ShutdownGracePeriod`. --> -节点体面关闭的特性对应两个 [`KubeletConfiguration`](/zh/docs/tasks/administer-cluster/kubelet-config-file/) 选项: +节点体面关闭的特性对应两个 +[`KubeletConfiguration`](/zh/docs/tasks/administer-cluster/kubelet-config-file/) 选项: + * `ShutdownGracePeriod`: * 指定节点应延迟关闭的总持续时间。此时间是 Pod 体面终止的时间总和,不区分常规 Pod 还是 [关键 Pod](/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 @@ -670,10 +689,16 @@ Graceful Node Shutdown feature is configured with two [`KubeletConfiguration`](/ 的持续时间。该值应小于 `ShutdownGracePeriod`。 -例如,如果设置了 `ShutdownGracePeriod=30s` 和 `ShutdownGracePeriodCriticalPods=10s`,则 kubelet 将延迟 30 秒关闭节点。 -在关闭期间,将保留前 20(30 - 10)秒用于体面终止常规 Pod,而保留最后 10 秒用于终止 +例如,如果设置了 `ShutdownGracePeriod=30s` 和 `ShutdownGracePeriodCriticalPods=10s`, +则 kubelet 将延迟 30 秒关闭节点。 +在关闭期间,将保留前 20(30 - 10)秒用于体面终止常规 Pod, +而保留最后 10 秒用于终止 [关键 Pod](/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 ## {{% heading "whatsnext" %}} @@ -685,8 +710,10 @@ For example, if `ShutdownGracePeriod=30s`, and `ShutdownGracePeriodCriticalPods= section of the architecture design document. * Read about [taints and tolerations](/docs/concepts/scheduling-eviction/taint-and-toleration/). --> -* 了解有关节点[组件](/zh/docs/concepts/overview/components/#node-components) -* 阅读[节点的 API 定义](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#node-v1-core) -* 阅读架构设计文档中有关[节点](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md#the-kubernetes-node)的章节 -* 了解[污点和容忍度](/zh/docs/concepts/scheduling-eviction/taint-and-toleration/) +* 了解有关节点[组件](/zh/docs/concepts/overview/components/#node-components)。 +* 阅读 [Node 的 API 定义](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#node-v1-core)。 +* 阅读架构设计文档中有关 + [节点](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md#the-kubernetes-node) + 的章节。 +* 了解[污点和容忍度](/zh/docs/concepts/scheduling-eviction/taint-and-toleration/)。 diff --git a/content/zh/docs/concepts/cluster-administration/addons.md b/content/zh/docs/concepts/cluster-administration/addons.md index aaed1402d0..c5295d9518 100644 --- a/content/zh/docs/concepts/cluster-administration/addons.md +++ b/content/zh/docs/concepts/cluster-administration/addons.md @@ -25,8 +25,8 @@ Add-ons 扩展了 Kubernetes 的功能。 +当使用某 *CRI 容器运行时* 时,kubelet 要负责对日志进行轮换,并 +管理日志目录的结构。kubelet 将此信息发送给 CRI 容器运行时,后者 +将容器日志写入到指定的位置。kubelet 标志 `container-log-max-size` +和 `container-log-max-files` 可以用来配置每个日志文件的最大长度 +和每个容器可以生成的日志文件个数上限。 + {{< note >}} -如果有外部系统执行日志轮转,那么 `kubectl logs` 仅可查询到最新的日志内容。 +如果有外部系统执行日志轮转或者使用了 CRI 容器运行时,那么 `kubectl logs` +仅可查询到最新的日志内容。 比如,对于一个 10MB 大小的文件,通过 `logrotate` 执行轮转后生成两个文件, 一个 10MB 大小,一个为空,`kubectl logs` 返回最新的日志文件,而该日志文件 在这个例子中为空。 diff --git a/content/zh/docs/concepts/cluster-administration/system-metrics.md b/content/zh/docs/concepts/cluster-administration/system-metrics.md index 033dabb95e..3e62921679 100644 --- a/content/zh/docs/concepts/cluster-administration/system-metrics.md +++ b/content/zh/docs/concepts/cluster-administration/system-metrics.md @@ -247,15 +247,14 @@ cloudprovider_gce_api_request_duration_seconds { request = "list_disk"} ### kube-scheduler 指标 {#kube-scheduler-metrics} -{{< feature-state for_k8s_version="v1.20" state="alpha" >}} +{{< feature-state for_k8s_version="v1.21" state="beta" >}} + 调度器会暴露一些可选的指标,报告所有运行中 Pods 所请求的资源和期望的约束值。 这些指标可用来构造容量规划监控面板、访问调度约束的当前或历史数据、 快速发现因为缺少资源而无法被调度的负载,或者将 Pod 的实际资源用量 @@ -287,7 +286,7 @@ kube-scheduler 组件能够辩识各个 Pod 所配置的资源 Once a pod reaches completion (has a `restartPolicy` of `Never` or `OnFailure` and is in the `Succeeded` or `Failed` pod phase, or has been deleted and all containers have a terminated state) the series is no longer reported since the scheduler is now free to schedule other pods to run. The two metrics are called `kube_pod_resource_request` and `kube_pod_resource_limit`. The metrics are exposed at the HTTP endpoint `/metrics/resources` and require the same authorization as the `/metrics` -endpoint on the scheduler. You must use the `--show-hidden-metrics-for-version=1.20` flag to expose these alpha stability metrics. +endpoint on the scheduler. You must use the `-show-hidden-metrics-for-version=1.20` flag to expose these alpha stability metrics. --> 一旦 Pod 进入完成状态(其 `restartPolicy` 为 `Never` 或 `OnFailure`,且 其处于 `Succeeded` 或 `Failed` Pod 阶段,或者已经被删除且所有容器都具有 @@ -299,6 +298,42 @@ endpoint on the scheduler. You must use the `--show-hidden-metrics-for-version=1 `--show-hidden-metrics-for-version=1.20` 标志才能暴露那些稳定性为 Alpha 的指标。 + +## 禁用指标 {#disabling-metrics} + +你可以通过命令行标志 `--disabled-metrics` 来关闭某指标。 +在例如某指标会带来性能问题的情况下,这一操作可能是有用的。 +标志的参数值是一组被禁止的指标(例如:`--disabled-metrics=metric1,metric2`)。 + + +## 指标顺序性保证 {#metric-cardinality-enforcement} + +在 Alpha 阶段,标志只能接受一组映射值作为可以使用的指标标签。 +每个映射值的格式为`<指标名称>,<标签名称>=<可用标签列表>`,其中 +`<可用标签列表>` 是一个用逗号分隔的、可接受的标签名的列表。 + + +最终的格式看起来会是这样: +`--allow-label-value <指标名称>,<标签名称>='<可用值1>,<可用值2>...', <指标名称2>,<标签名称>='<可用值1>, <可用值2>...', ...`. + + +下面是一个例子: + +`--allow-label-value number_count_metric,odd_number='1,3,5', number_count_metric,even_number='2,4,6', date_gauge_metric,weekend='Saturday,Sunday'` + ## {{% heading "whatsnext" %}} #### 被挂载的 ConfigMap 内容会被自动更新 @@ -386,15 +386,15 @@ ConfigMaps consumed as environment variables are not updated automatically and r --> ## 不可变更的 ConfigMap {#configmap-immutable} -{{< feature-state for_k8s_version="v1.19" state="beta" >}} +{{< feature-state for_k8s_version="v1.21" state="stable" >}} -Kubernetes Beta 特性 _不可变更的 Secret 和 ConfigMap_ 提供了一种将各个 +Kubernetes 特性 _不可变更的 Secret 和 ConfigMap_ 提供了一种将各个 Secret 和 ConfigMap 设置为不可变更的选项。对于大量使用 ConfigMap 的 集群(至少有数万个各不相同的 ConfigMap 给 Pod 挂载)而言,禁止更改 ConfigMap 的数据有以下好处: diff --git a/content/zh/docs/concepts/configuration/manage-resources-containers.md b/content/zh/docs/concepts/configuration/manage-resources-containers.md index 8ce9ef3f71..e019c5180a 100644 --- a/content/zh/docs/concepts/configuration/manage-resources-containers.md +++ b/content/zh/docs/concepts/configuration/manage-resources-containers.md @@ -134,8 +134,7 @@ This is different from the `memory` and `cpu` resources. {{< /note >}} #### 集群层面的扩展资源 {#cluster-level-extended-resources} 集群层面的扩展资源并不绑定到具体节点。 它们通常由调度器扩展程序(Scheduler Extenders)管理,这些程序处理资源消耗和资源配额。 -你可以在[调度器策略配置](https://github.com/kubernetes/kubernetes/blob/release-1.10/pkg/scheduler/api/v1/types.go#L31) +你可以在[调度器策略配置](/zh/docs/reference/config-api/kube-scheduler-policy-config.v1/) 中指定由调度器扩展程序处理的扩展资源。 * 获取[分配内存资源给容器和 Pod ](/zh/docs/tasks/configure-pod-container/assign-memory-resource/) 的实践经验 @@ -1300,4 +1296,5 @@ You can see that the Container was terminated because of `reason:OOM Killed`, wh * 阅读 API 参考文档中 [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) 部分。 * 阅读 API 参考文档中 [ResourceRequirements](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcerequirements-v1-core) 部分。 * 阅读 XFS 中关于[项目配额](https://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/xfs-quotas.html) 的文档。 +* 阅读更多关于[kube-scheduler 策略参考 (v1)](/zh/docs/reference/config-api/kube-scheduler-policy-config.v1/) 的文档。 diff --git a/content/zh/docs/concepts/configuration/secret.md b/content/zh/docs/concepts/configuration/secret.md index f1f950ac3e..53a301f03e 100644 --- a/content/zh/docs/concepts/configuration/secret.md +++ b/content/zh/docs/concepts/configuration/secret.md @@ -50,10 +50,10 @@ Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象 Kubernetes Secrets are, by default, stored as unencrypted base64-encoded strings. By default they can be retrieved - as plain text - by anyone with API access, or anyone with access to Kubernetes' underlying data store, etcd. In -order to safely use Secrets, we recommend you (at a minimum): +order to safely use Secrets, it is recommended you (at a minimum): -1. [Enable Encryption at Rest](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) for Secrets. -2. [Enable RBAC rules that restrict reading and writing the Secret](https://kubernetes.io/docs/reference/access-authn-authz/authorization/). Be aware that secrets can be obtained implicitly by anyone with the permission to create a Pod. +1. [Enable Encryption at Rest](/zh/docs/tasks/administer-cluster/encrypt-data/) for Secrets. +2. [Enable or configure RBAC rules](/docs/reference/access-authn-authz/authorization/) that restrict reading and writing the Secret. Be aware that secrets can be obtained implicitly by anyone with the permission to create a Pod. --> Kubernetes Secret 默认情况下存储为 base64-编码的、非加密的字符串。 默认情况下,能够访问 API 的任何人,或者能够访问 Kubernetes 下层数据存储(etcd) @@ -61,7 +61,7 @@ Kubernetes Secret 默认情况下存储为 base64-编码的、非加密的字符 为了能够安全地使用 Secret,我们建议你(至少): 1. 为 Secret [启用静态加密](/zh/docs/tasks/administer-cluster/encrypt-data/); -2. [启用 RBAC 规则来限制对 Secret 的读写操作](/zh/docs/reference/access-authn-authz/authorization/)。 +2. [启用 或配置 RBAC 规则](/zh/docs/reference/access-authn-authz/authorization/)来限制对 Secret 的读写操作。 要注意,任何被允许创建 Pod 的人都默认地具有读取 Secret 的权限。 {{< /caution >}} @@ -193,7 +193,7 @@ empty-secret Opaque 0 2m6s `DATA` 列显示 Secret 中保存的数据条目个数。 在这个例子种,`0` 意味着我们刚刚创建了一个空的 Secret。 @@ -204,7 +204,7 @@ In this case, `0` means we have just created an empty Secret. A `kubernetes.io/service-account-token` type of Secret is used to store a token that identifies a service account. When using this Secret type, you need to ensure that the `kubernetes.io/service-account.name` annotation is set to an -existing service account name. An Kubernetes controller fills in some other +existing service account name. A Kubernetes controller fills in some other fields such as the `kubernetes.io/service-account.uid` annotation and the `token` key in the `data` field set to actual token content. @@ -1068,8 +1068,8 @@ Kubelet is checking whether the mounted secret is fresh on every periodic sync. 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" >}}/staging/src/k8s.io/kubelet/config/v1beta1/types.go)). -It can be either propagated via watch (default), ttl-based, or simply redirecting +the [KubeletConfiguration struct](/docs/reference/config-api/kubelet-config.v1beta1/). +A Secret can be either propagated by watch (default), ttl-based, or by 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 @@ -1082,7 +1082,7 @@ propagation delay, where cache propagation delay depends on the chosen cache typ 组件 kubelet 在周期性同步时检查被挂载的 Secret 是不是最新的。 但是,它会使用其本地缓存的数值作为 Secret 的当前值。 -缓存的类型可以使用 [KubeletConfiguration 结构](https://github.com/kubernetes/kubernetes/blob/{{< param "docsbranch" >}}/staging/src/k8s.io/kubelet/config/v1beta1/types.go) +缓存的类型可以使用 [KubeletConfiguration 结构](/zh/docs/reference/config-api/kubelet-config.v1beta1/) 中的 `ConfigMapAndSecretChangeDetectionStrategy` 字段来配置。 它可以通过 watch 操作来传播(默认),基于 TTL 来刷新,也可以 将所有请求直接重定向到 API 服务器。 @@ -1151,7 +1151,7 @@ spec: @@ -1203,10 +1203,10 @@ There are third party solutions for triggering restarts when secrets change. --> ## 不可更改的 Secret {#secret-immutable} -{{< feature-state for_k8s_version="v1.19" state="beta" >}} +{{< feature-state for_k8s_version="v1.21" state="stable" >}} -Kubernetes 的 alpha 特性 _不可变的 Secret 和 ConfigMap_ 提供了一种可选配置, +Kubernetes 的特性 _不可变的 Secret 和 ConfigMap_ 提供了一种可选配置, 可以设置各个 Secret 和 ConfigMap 为不可变的。 对于大量使用 Secret 的集群(至少有成千上万各不相同的 Secret 供 Pod 挂载), 禁止变更它们的数据有下列好处: @@ -1225,8 +1225,8 @@ Kubernetes 的 alpha 特性 _不可变的 Secret 和 ConfigMap_ 提供了一种 kube-apiserver 的负载,提升集群性能。 @@ -1300,17 +1300,6 @@ Pod 将会将其的 imagePullSecret 字段设置为服务帐户的 imagePullSecr 有关该过程的详细说明,请参阅 [将 ImagePullSecrets 添加到服务帐户](/zh/docs/tasks/configure-pod-container/configure-service-account/#adding-imagepullsecrets-to-a-service-account)。 - - -#### 自动挂载手动创建的 Secret - -手动创建的 Secret(例如包含用于访问 GitHub 帐户令牌的 Secret)可以 -根据其服务帐户自动附加到 Pod。 diff --git a/content/zh/docs/concepts/containers/container-environment.md b/content/zh/docs/concepts/containers/container-environment.md index 543260c95a..79170508e6 100644 --- a/content/zh/docs/concepts/containers/container-environment.md +++ b/content/zh/docs/concepts/containers/container-environment.md @@ -68,6 +68,7 @@ Pod 定义中的用户所定义的环境变量也可在容器中使用,就像 ### Cluster information A list of all services that were running when a Container was created is available to that Container as environment variables. +This list is limited to services within the same namespace as the new Container's Pod and Kubernetes control plane services. Those environment variables match the syntax of Docker links. For a service named *foo* that maps to a Container named *bar*, @@ -75,7 +76,9 @@ the following variables are defined: --> ### 集群信息 -创建容器时正在运行的所有服务的列表都可用作该容器的环境变量。这些环境变量与 Docker 链接的语法匹配。 +创建容器时正在运行的所有服务都可用作该容器的环境变量。 +这里的服务仅限于新容器的 Pod 所在的名字空间中的服务,以及 Kubernetes 控制面的服务。 +这些环境变量与 Docker 链接的语法相同。 对于名为 *foo* 的服务,当映射到名为 *bar* 的容器时,以下变量是被定义了的: diff --git a/content/zh/docs/concepts/containers/container-lifecycle-hooks.md b/content/zh/docs/concepts/containers/container-lifecycle-hooks.md index 1f2d2b25e7..cb4a1d613a 100644 --- a/content/zh/docs/concepts/containers/container-lifecycle-hooks.md +++ b/content/zh/docs/concepts/containers/container-lifecycle-hooks.md @@ -59,16 +59,21 @@ No parameters are passed to the handler. `PreStop` -在容器因 API 请求或者管理事件(诸如存活态探针失败、资源抢占、资源竞争等)而被终止之前, -此回调会被调用。 -如果容器已经处于终止或者完成状态,则对 preStop 回调的调用将失败。 -此调用是阻塞的,也是同步调用,因此必须在发出删除容器的信号之前完成。 -没有参数传递给处理程序。 +在容器因 API 请求或者管理事件(诸如存活态探针、启动探针失败、资源抢占、资源竞争等) +而被终止之前,此回调会被调用。 +如果容器已经处于已终止或者已完成状态,则对 preStop 回调的调用将失败。 +在用来停止容器的 TERM 信号被发出之前,回调必须执行结束。 +Pod 的终止宽限周期在 `PreStop` 回调被执行之前即开始计数,所以无论 +回调函数的执行结果如何,容器最终都会在 Pod 的终止宽限期内被终止。 +没有参数会被传递给处理程序。 ## 更新镜像 {#updating-images} -默认的镜像拉取策略是 `IfNotPresent`:在镜像已经存在的情况下, -{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} 将不再去拉取镜像。 -如果希望强制总是拉取镜像,你可以执行以下操作之一: +当你最初创建一个 {{< glossary_tooltip text="Deployment" term_id="deployment" >}}、 +{{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}}、Pod +或者其他包含 Pod 模板的对象时,如果没有显式设定的话,Pod 中所有容器的默认镜像 +拉取策略是 `IfNotPresent`。这一策略会使得 +{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} +在镜像已经存在的情况下直接略过拉取镜像的操作。 + + +如果你希望强制总是拉取镜像,你可以执行以下操作之一: - 设置容器的 `imagePullPolicy` 为 `Always`。 -- 省略 `imagePullPolicy`,并使用 `:latest` 作为要使用的镜像的标签。 +- 省略 `imagePullPolicy`,并使用 `:latest` 作为要使用的镜像的标签; + Kubernetes 会将策略设置为 `Always`。 - 省略 `imagePullPolicy` 和要使用的镜像标签。 - 启用 [AlwaysPullImages](/zh/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) 准入控制器(Admission Controller)。 +{{< note >}} + +对象被 *创建* 时,容器的 `imagePullPolicy` 总是被设置为某值,如果镜像的标签 +后来发生改变,镜像拉取策略也不会被改变。 + +例如,如果你创建了一个 Deployment 对象,其中的镜像标签不是 `:latest`, +后来 Deployment 的镜像被改为 `:latest`,则 `imagePullPolicy` 不会被改变为 +`Always`。你必须在对象被初始创建之后手动改变拉取策略。 +{{< /note >}} + + 如果 `imagePullPolicy` 未被定义为特定的值,也会被设置为 `Always`。 -Kubernetes 内置的 dockershim CRI 不支持配置运行时 handler。 +为 dockershim 设置 RuntimeClass 时,必须将运行时处理程序设置为 `docker`。 +Dockershim 不支持自定义的可配置的运行时处理程序。 #### [containerd](https://containerd.io/) diff --git a/content/zh/docs/concepts/extend-kubernetes/_index.md b/content/zh/docs/concepts/extend-kubernetes/_index.md index 2d48a28e24..22d9c7dac2 100644 --- a/content/zh/docs/concepts/extend-kubernetes/_index.md +++ b/content/zh/docs/concepts/extend-kubernetes/_index.md @@ -2,6 +2,10 @@ title: 扩展 Kubernetes weight: 110 description: 改变你的 Kubernetes 集群的行为的若干方法。 +feature: + title: 为扩展性设计 + description: > + 无需更改上游源码即可扩展你的 Kubernetes 集群。 content_type: concept no_list: true --- @@ -14,6 +18,10 @@ reviewers: - lavalamp - cheftako - chenopis +feature: + title: Designed for extensibility + description: > + Add features to your Kubernetes cluster without changing upstream source code. content_type: concept no_list: true --> @@ -176,9 +184,11 @@ Kubernetes control plane. 下面的示意图中展示了这些扩展点如何与 Kubernetes 控制面交互。 - - + +![扩展点与控制面](/docs/concepts/extend-kubernetes/control-plane.png) + +![扩展点](/docs/concepts/extend-kubernetes/extension-points.png) + +![扩展流程图](/docs/concepts/extend-kubernetes/flowchart.png) ### 鉴权 {#authorization} diff --git a/content/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation.md b/content/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation.md index e08fa7690d..f11620acf2 100644 --- a/content/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation.md +++ b/content/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation.md @@ -64,9 +64,7 @@ apiserver-builder 库同时提供构造扩展 API 服务器和控制器框架代 Extension API servers should have low latency networking to and from the kube-apiserver. Discovery requests are required to round-trip from the kube-apiserver in five seconds or less. -If your extension API server cannot achieve that latency requirement, consider making changes that let you meet it. You can also set the -`EnableAggregatedDiscoveryTimeout=false` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) on the kube-apiserver -to disable the timeout restriction. This deprecated feature gate will be removed in a future release. +If your extension API server cannot achieve that latency requirement, consider making changes that let you meet it. --> ### 反应延迟 {#response-latency} @@ -74,9 +72,6 @@ to disable the timeout restriction. This deprecated feature gate will be removed 发现请求需要在五秒钟或更短的时间内完成到 kube-apiserver 的往返。 如果你的扩展 API 服务器无法满足这一延迟要求,应考虑如何更改配置已满足需要。 -你也可以为 kube-apiserver 设置 `EnableAggregatedDiscoveryTimeout=false` -[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) -来禁用超时限制。此特性门控已经废弃,将在未来版本中被删除。 ## {{% heading "whatsnext" %}} diff --git a/content/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources.md b/content/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources.md index a893ef8765..5094d8910b 100644 --- a/content/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources.md +++ b/content/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources.md @@ -67,7 +67,7 @@ Kubernetes 安装中就可用。定制资源所代表的是对特定 Kubernetes @@ -93,13 +93,13 @@ desired state, and continually maintains this state. You can deploy and update a custom controller on a running cluster, independently of the cluster's lifecycle. Custom controllers can work with any kind of resource, but they are especially effective when combined with custom resources. The -[Operator pattern](https://coreos.com/blog/introducing-operators.html) combines custom +[Operator pattern](/docs/concepts/extend-kubernetes/operator/) combines custom resources and custom controllers. You can use custom controllers to encode domain knowledge for specific applications into an extension of the Kubernetes API. --> 你可以在一个运行中的集群上部署和更新定制控制器,这类操作与集群的生命周期无关。 定制控制器可以用于任何类别的资源,不过它们与定制资源结合起来时最为有效。 -[Operator 模式](https://coreos.com/blog/introducing-operators.html)就是将定制资源 +[Operator 模式](/zh/docs/concepts/extend-kubernetes/operator/)就是将定制资源 与定制控制器相结合的。你可以使用定制控制器来将特定于某应用的领域知识组织 起来,以编码的形式构造对 Kubernetes API 的扩展。 @@ -257,7 +257,7 @@ Kubernetes 提供了两种方式供你向集群中添加定制资源: +这一 `List` 端点提供运行中 Pods 的资源信息,包括类似独占式分配的 +CPU ID、设备插件所报告的设备 ID 以及这些设备分配所处的 NUMA 节点 ID。 + +```gRPC +// ListPodResourcesResponse 是 List 函数的响应 +message ListPodResourcesResponse { + repeated PodResources pod_resources = 1; +} + +// PodResources 包含关于分配给 Pod 的节点资源的信息 +message PodResources { + string name = 1; + string namespace = 2; + repeated ContainerResources containers = 3; +} + +// ContainerResources 包含分配给容器的资源的信息 +message ContainerResources { + string name = 1; + repeated ContainerDevices devices = 2; + repeated int64 cpu_ids = 3; +} + +// Topology 描述资源的硬件拓扑结构 +message TopologyInfo { + repeated NUMANode nodes = 1; +} + +// NUMA 代表的是 NUMA 节点 +message NUMANode { + int64 ID = 1; +} + +// ContainerDevices 包含分配给容器的设备信息 +message ContainerDevices { + string resource_name = 1; + repeated string device_ids = 2; + TopologyInfo topology = 3; +} +``` + + +端点 `GetAllocatableResources` 提供最初在工作节点上可用的资源的信息。 +此端点所提供的信息比导出给 API 服务器的信息更丰富。 + + +```gRPC +// AllocatableResourcesResponses 包含 kubelet 所了解到的所有设备的信息 +message AllocatableResourcesResponse { + repeated ContainerDevices devices = 1; + repeated int64 cpu_ids = 2; +} + +``` + + +`ContainerDevices` 会向外提供各个设备所隶属的 NUMA 单元这类拓扑信息。 +NUMA 单元通过一个整数 ID 来标识,其取值与设备插件所报告的一致。 +[设备插件注册到 kubelet 时](/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) +会报告这类信息。 + gRPC 服务通过 `/var/lib/kubelet/pod-resources/kubelet.sock` 的 UNIX 套接字来提供服务。 @@ -350,9 +425,9 @@ gRPC 服务通过 `/var/lib/kubelet/pod-resources/kubelet.sock` 的 UNIX 套接 中声明将 `/var/lib/kubelet/pod-resources` 目录以 {{< glossary_tooltip text="卷" term_id="volume" >}}的形式被挂载到设备监控代理中。 -对“PodResources 服务”的支持要求启用 `KubeletPodResources` +对“PodResourcesLister 服务”的支持要求启用 `KubeletPodResources` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。 -从 Kubernetes 1.15 开始默认启用,自从 Kubernetes 1.20开始为 v1。 +从 Kubernetes 1.15 开始默认启用,自从 Kubernetes 1.20 开始为 v1。 ## 安装 diff --git a/content/zh/docs/concepts/extend-kubernetes/extend-cluster.md b/content/zh/docs/concepts/extend-kubernetes/extend-cluster.md deleted file mode 100644 index 05af5323d9..0000000000 --- a/content/zh/docs/concepts/extend-kubernetes/extend-cluster.md +++ /dev/null @@ -1,434 +0,0 @@ ---- -title: 扩展 Kubernetes 集群 -content_type: concept -weight: 10 ---- - - - - - -Kubernetes 是高度可配置和可扩展的。因此,极少需要分发或提交补丁代码给 Kubernetes 项目。 - -本文档介绍自定义 Kubernetes 集群的选项。本文档的目标读者包括希望了解如何使 -Kubernetes 集群满足其业务环境需求的 -{{< glossary_tooltip text="集群运维人员" term_id="cluster-operator" >}}、 -Kubernetes 项目的{{< glossary_tooltip text="贡献者" term_id="contributor" >}}。 -或潜在的{{< glossary_tooltip text="平台开发人员" term_id="platform-developer" >}} -也可以从本文找到有用的信息,如对已存在扩展点和模式的介绍,以及它们的权衡和限制。 - - - - -## 概述 - -定制方法可以大致分为 *配置(Configuration)* 和 *扩展(Extension)* 。 -*配置* 只涉及更改标志参数、本地配置文件或 API 资源; -*扩展* 涉及运行额外的程序或服务。本文档主要内容是关于扩展。 - - -## 配置 {#configuration} - -关于 *配置文件* 和 *标志* 的说明文档位于在线文档的"参考"部分,按照可执行文件组织: - -* [kubelet](/zh/docs/reference/command-line-tools-reference/kubelet/) -* [kube-apiserver](/zh/docs/reference/command-line-tools-reference/kube-apiserver/) -* [kube-controller-manager](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/) -* [kube-scheduler](/zh/docs/reference/command-line-tools-reference/kube-scheduler/). - - -在托管的 Kubernetes 服务或受控安装的 Kubernetes 版本中,标志和配置文件可能并不总是可以更改的。而且当它们可以进行更改时,它们通常只能由集群管理员进行更改。此外,标志和配置文件在未来的 Kubernetes 版本中可能会发生变化,并且更改设置后它们可能需要重新启动进程。出于这些原因,只有在没有其他选择的情况下才使用它们。 - - -*内置策略 API* ,例如 [ResourceQuota](/zh/docs/concepts/policy/resource-quotas/)、 -[PodSecurityPolicy](/zh/docs/concepts/policy/pod-security-policy/)、 -[NetworkPolicy](/zh/docs/concepts/services-networking/network-policies/) -和基于角色的权限控制 ([RBAC](/zh/docs/reference/access-authn-authz/rbac/)), -是内置的 Kubernetes API。API 通常与托管的 Kubernetes 服务和受控的 Kubernetes 安装一起使用。 -它们是声明性的,并使用与其他 Kubernetes 资源(如 Pod )相同的约定,所以新的集群配置可以重复使用, -并以与应用程序相同的方式进行管理。 -而且,当它们变稳定后,也遵循和其他 Kubernetes API 一样的 -[支持政策](/zh/docs/reference/using-api/deprecation-policy/)。 -出于这些原因,在合适的情况下它们优先于 *配置文件* 和 *标志* 被使用。 - - -## 扩展程序 {#extension} - -扩展程序是指对 Kubernetes 进行扩展和深度集成的软件组件。它们适合用于支持新的类型和新型硬件。 - -大多数集群管理员会使用托管的或统一分发的 Kubernetes 实例。 -因此,大多数 Kubernetes 用户不需要安装扩展程序,而且还有少部分用户甚至需要编写新的扩展程序。 - - -## 扩展模式 {#extension-patterns} - - -Kubernetes 的设计是通过编写客户端程序来实现自动化的。 -任何读和(或)写 Kubernetes API 的程序都可以提供有用的自动化工作。 -*自动化* 程序可以运行在集群之中或之外。按照本文档的指导,你可以编写出高可用的和健壮的自动化程序。 -自动化程序通常适用于任何 Kubernetes 集群,包括托管集群和受管理安装的集群。 - - -*控制器(Controller)* 模式是编写适合 Kubernetes 的客户端程序的一种特定模式。 -控制器通常读取一个对象的 `.spec` 字段,可能做出一些处理,然后更新对象的 `.status` 字段。 - -一个控制器是 Kubernetes 的一个客户端。 -当 Kubernetes 作为客户端调用远程服务时,它被称为 *Webhook* , -远程服务称为 *Webhook* 后端。 和控制器类似,Webhooks 增加了一个失败点。 - - -在 webhook 模型里,Kubernetes 向远程服务发送一个网络请求。 -在 *可执行文件插件* 模型里,Kubernetes 执行一个可执行文件(程序)。 -可执行文件插件被 kubelet(如 -[Flex 卷插件](/zh/docs/concepts/storage/volumes/#flexvolume) -和[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) -和 `kubectl` 所使用。 - - -下图显示了扩展点如何与 Kubernetes 控制平面进行交互。 - - - - - - -## 扩展点 {#extension-points} - -下图显示了 Kubernetes 系统的扩展点。 - - - - - - - -1. 用户通常使用 `kubectl` 与 Kubernetes API 进行交互。 - [kubectl 插件](/zh/docs/tasks/extend-kubectl/kubectl-plugins/)扩展了 kubectl 可执行文件。 - 它们只影响个人用户的本地环境,因此不能执行站点范围的策略。 -2. API 服务器处理所有请求。API 服务器中的几种类型的扩展点允许对请求进行身份认证或根据其内容对其进行阻止、 - 编辑内容以及处理删除操作。这些内容在 - [API 访问扩展](/zh/docs/concepts/extend-kubernetes/#api-access-extensions)小节中描述。 -3. API 服务器提供各种 *资源(Resource)* 。 *内置的资源种类(Resource Kinds)* ,如 `pods`, - 由 Kubernetes 项目定义,不能更改。你还可以添加你自己定义的资源或其他项目已定义的资源, - 称为 *自定义资源(Custom Resource)*,如[自定义资源](/zh/docs/concepts/extend-kubernetes/#user-defined-types) - 部分所述。自定义资源通常与 API 访问扩展一起使用。 -4. Kubernetes 调度器决定将 Pod 放置到哪个节点。有几种方法可以扩展调度器。 - 这些内容在[调度器扩展](/zh/docs/concepts/extend-kubernetes/#scheduler-extensions) - 小节中描述。 -5. Kubernetes 的大部分行为都是由称为控制器(Controllers)的程序实现的,这些程序是 API 服务器的客户端。 - 控制器通常与自定义资源一起使用。 -6. `kubelet` 在主机上运行,并帮助 Pod 看起来就像在集群网络上拥有自己的 IP 的虚拟服务器。 - [网络插件](/zh/docs/concepts/extend-kubernetes/#network-plugins)让你可以实现不同的 pod 网络。 -7. `kubelet` 也负责为容器挂载和卸载卷。新的存储类型可以通过 - [存储插件](/zh/docs/concepts/extend-kubernetes/#storage-plugins)支持。 - - -如果你不确定从哪里开始扩展,下面流程图可以提供一些帮助。请注意,某些解决方案可能涉及多种类型的扩展。 - - - - - - -## API 扩展 {#api-extensions} - -### 用户自定义类型 {#user-defined-types} - -如果你想定义新的控制器、应用程序配置对象或其他声明式 API,并使用 Kubernetes -工具(如 `kubectl`)管理它们,请考虑为 Kubernetes 添加一个自定义资源。 - -不要使用自定义资源作为应用、用户或者监控数据的数据存储。 - -有关自定义资源的更多信息,请查看 -[自定义资源概念指南](/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/)。 - - -### 将新的 API 与自动化相结合 - -自定义资源 API 和控制循环的组合称为 -[操作者(Operator)模式](/zh/docs/concepts/extend-kubernetes/operator/)。 -操作者模式用于管理特定的,通常是有状态的应用程序。 -这些自定义 API 和控制循环还可用于控制其他资源,例如存储或策略。 - - -### 改变内置资源 - -当你通过添加自定义资源来扩展 Kubernetes API 时,添加的资源始终属于新的 API 组。 -你不能替换或更改已有的 API 组。 -添加 API 不会直接影响现有 API(例如 Pod )的行为,但是 API 访问扩展可以。 - - -### API 访问扩展 {#api-access-extensions} - -当请求到达 Kubernetes API Server 时,它首先被要求进行用户认证,然后要进行授权检查, -接着受到各种类型的准入控制的检查。有关此流程的更多信息,请参阅 -[Kubernetes API 访问控制](/zh/docs/concepts/security/controlling-access/)。 - -上述每个步骤都提供了扩展点。 - -Kubernetes 有几个它支持的内置认证方法。它还可以位于身份验证代理之后,并将 Authorziation 头部 -中的令牌发送给远程服务(webhook)进行验证。所有这些方法都在 -[身份验证文档](/zh/docs/reference/access-authn-authz/authentication/)中介绍。 - - -### 身份认证 {#authentication} - -[身份认证](/zh/docs/reference/access-authn-authz/authentication/) -将所有请求中的头部字段或证书映射为发出请求的客户端的用户名。 - -Kubernetes 提供了几种内置的身份认证方法,如果这些方法不符合你的需求,可以使用 -[身份认证 Webhook](/zh/docs/reference/access-authn-authz/authentication/#webhook-token-authentication) 方法。 - - -### 鉴权 {#authorization} - -[鉴权组件](/zh/docs/reference/access-authn-authz/authorization/)决定特定用户是否可以对 -API 资源执行读取、写入以及其他操作。它只是在整个资源的层面上工作 -- -它不基于任意的对象字段进行区分。如果内置授权选项不能满足你的需求, -[鉴权 Webhook](/zh/docs/reference/access-authn-authz/webhook/) -允许调用用户提供的代码来作出授权决定。 - - -### 动态准入控制 - -在请求被授权之后,如果是写入操作,它还将进入 -[准入控制](/zh/docs/reference/access-authn-authz/admission-controllers/) -步骤。除了内置的步骤之外,还有几个扩展: - -* [镜像策略 Webhook](/zh/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook) - 限制哪些镜像可以在容器中运行。 -* 为了进行灵活的准入控制决策,可以使用通用的 - [准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)。 - 准入 Webhooks 可以拒绝创建或更新操作。 - - -## 基础设施扩展 - -### 存储插件 - -[Flex Volumes](/zh/docs/concepts/storage/volumes/#flexvolume) -允许用户挂载无内置插件支持的卷类型,它通过 Kubelet 调用一个可执行文件插件来挂载卷。 - - -### 设备插件 {#device-plugins} - -设备插件允许节点通过 -[设备插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/). -发现新的节点资源(除了内置的 CPU 和内存之外)。 - - -### 网络插件 {#network-plugins} - -不同的网络结构可以通过节点级的 -[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) -得到支持。 - - -### 调度器扩展 {#scheduler-extensions} - -调度器是一种特殊类型的控制器,用于监视 pod 并将其分配到节点。 -默认的调度器可以完全被替换,而继续使用其他 Kubernetes 组件,或者可以同时运行 -[多个调度器](/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers/)。 - -这是一个不太轻松的任务,几乎所有的 Kubernetes 用户都会意识到他们并不需要修改调度器。 - -调度器也支持 -[Webhook](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/scheduler_extender.md), -它允许使用一个 Webhook 后端(调度器扩展程序)为 Pod 筛选节点和确定节点的优先级。 - - - -## {{% heading "whatsnext" %}} - - -* 详细了解[自定义资源](/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/) -* 了解[动态准入控制](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/) -* 详细了解基础设施扩展 - * [网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) - * [设备插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) -* 了解 [kubectl 插件](/zh/docs/tasks/extend-kubectl/kubectl-plugins/) -* 了解[操作者模式](/zh/docs/concepts/extend-kubernetes/operator/) - - diff --git a/content/zh/docs/concepts/overview/components.md b/content/zh/docs/concepts/overview/components.md index 6d3c0d7281..6f1051d142 100644 --- a/content/zh/docs/concepts/overview/components.md +++ b/content/zh/docs/concepts/overview/components.md @@ -52,18 +52,21 @@ The control plane's components make global decisions about the cluster (for exam --> ## 控制平面组件(Control Plane Components) {#control-plane-components} -控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 `replicas` 字段时,启动新的 {{< glossary_tooltip text="pod" term_id="pod">}})。 +控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 +`replicas` 字段时,启动新的 {{< glossary_tooltip text="pod" term_id="pod">}})。 控制平面组件可以在集群中的任何节点上运行。 -然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件,并且不会在此计算机上运行用户容器。 -请参阅[构建高可用性集群](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/) -中对于多主机 VM 的设置示例。 +然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, +并且不会在此计算机上运行用户容器。 +请参阅[使用 kubeadm 构建高可用性集群](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/) +中关于多 VM 控制平面设置的示例。 ### kube-apiserver @@ -203,7 +206,8 @@ Kubernetes 启动的容器自动将此 DNS 服务器包含在其 DNS 搜索列 --> ### Web 界面(仪表盘) -[Dashboard](/zh/docs/tasks/access-application-cluster/web-ui-dashboard/) 是Kubernetes 集群的通用的、基于 Web 的用户界面。 +[Dashboard](/zh/docs/tasks/access-application-cluster/web-ui-dashboard/) +是Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。 ### 云提供商安全性 -如果您是在您自己的硬件或者其他不通的云提供商上运行 Kubernetes 集群, +如果您是在您自己的硬件或者其他不同的云提供商上运行 Kubernetes 集群, 请查阅相关文档来获取最好的安全实践。 下面是一些比较流行的云提供商的安全性文档链接: diff --git a/content/zh/docs/concepts/services-networking/dns-pod-service.md b/content/zh/docs/concepts/services-networking/dns-pod-service.md index 2672d4e7d0..50a6c47d86 100644 --- a/content/zh/docs/concepts/services-networking/dns-pod-service.md +++ b/content/zh/docs/concepts/services-networking/dns-pod-service.md @@ -3,12 +3,23 @@ title: Pod 与 Service 的 DNS content_type: concept weight: 20 --- + + -本页面提供 Kubernetes 对 DNS 的支持的概述。 +Kubernetes 为服务和 Pods 创建 DNS 记录。 +你可以使用一致的 DNS 名称而非 IP 地址来访问服务。 @@ -21,40 +32,93 @@ resolve DNS names. --> ## 介绍 -Kubernetes DNS 在群集上调度 DNS Pod 和服务,并配置 kubelet 以告知各个容器使用 DNS 服务的 IP 来解析 DNS 名称。 +Kubernetes DNS 在集群上调度 DNS Pod 和服务,并配置 kubelet 以告知各个容器 +使用 DNS 服务的 IP 来解析 DNS 名称。 +集群中定义的每个 Service (包括 DNS 服务器自身)都被赋予一个 DNS 名称。 +默认情况下,客户端 Pod 的 DNS 搜索列表会包含 Pod 自身的名字空间和集群 +的默认域。 -Assume a Service named `foo` in the Kubernetes namespace `bar`. A Pod running -in namespace `bar` can look up this service by simply doing a DNS query for -`foo`. A Pod running in namespace `quux` can look up this service by doing a -DNS query for `foo.bar`. + +### Service 的名字空间 + +DNS 查询可能因为执行查询的 Pod 所在的名字空间而返回不同的结果。 +不指定名字空间的 DNS 查询会被限制在 Pod 所在的名字空间内。 +要访问其他名字空间中的服务,需要在 DNS 查询中给出名字空间。 + +例如,假定名字空间 `test` 中存在一个 Pod,`prod` 名字空间中存在一个服务 +`data`。 + +Pod 查询 `data` 时没有返回结果,因为使用的是 Pod 的名字空间 `test`。 + +Pod 查询 `data.prod` 时则会返回预期的结果,因为查询中指定了名字空间。 + + +DNS 查询可以使用 Pod 中的 `/etc/resolv.conf` 展开。kubelet 会为每个 Pod +生成此文件。例如,对 `data` 的查询可能被展开为 `data.test.cluster.local`。 +`search` 选项的取值会被用来展开查询。要进一步了解 DNS 查询,可参阅 +[`resolv.conf` 手册页面](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html)。 + +``` +nameserver 10.32.0.10 +search .svc.cluster.local svc.cluster.local cluster.local +options ndots:5 +``` + + +概括起来,名字空间 `test` 中的 Pod 可以成功地解析 `data.prod` 或者 +`data.prod.cluster.local`。 + + +### DNS 记录 {#dns-records} + +哪些对象会获得 DNS 记录呢? + +1. Services +2. Pods + + -## 哪些对象会有 DNS 名字? {#what-things-get-dns-names} - -在集群中定义的每个 Service(包括 DNS 服务器自身)都会被指派一个 DNS 名称。 -默认,一个客户端 Pod 的 DNS 搜索列表将包含该 Pod 自己的名字空间和集群默认域。 -如下示例是一个很好的说明: - -假设在 Kubernetes 集群的名字空间 `bar` 中,定义了一个服务 `foo`。 -运行在名字空间 `bar` 中的 Pod 可以简单地通过 DNS 查询 `foo` 来找到该服务。 -运行在名字空间 `quux` 中的 Pod 可以通过 DNS 查询 `foo.bar` 找到该服务。 - -以下各节详细介绍了受支持的记录类型和支持的布局。 +以下各节详细介绍了被支持的 DNS 记录类型和被支持的布局。 其它布局、名称或者查询即使碰巧可以工作,也应视为实现细节, -将来很可能被更改而且不会因此出现警告。 +将来很可能被更改而且不会因此发出警告。 有关最新规范请查看 [Kubernetes 基于 DNS 的服务发现](https://github.com/kubernetes/dns/blob/master/docs/specification.md)。 @@ -301,7 +365,7 @@ If a Pod enables this feature and its FQDN is longer than 64 character, it will 如果 Pod 启用这一特性,而其 FQDN 超出 64 字符,Pod 的启动会失败。 Pod 会一直出于 `Pending` 状态(通过 `kubectl` 所看到的 `ContainerCreating`), -并产生错误事件,例如 +并产生错误事件,例如 "Failed to construct FQDN from pod hostname and cluster domain, FQDN `long-FQDN` is too long (64 characters is the max, 70 characters requested)." (无法基于 Pod 主机名和集群域名构造 FQDN,FQDN `long-FQDN` 过长,至多 64 diff --git a/content/zh/docs/concepts/services-networking/dual-stack.md b/content/zh/docs/concepts/services-networking/dual-stack.md index f01bd78038..e1d5516bec 100644 --- a/content/zh/docs/concepts/services-networking/dual-stack.md +++ b/content/zh/docs/concepts/services-networking/dual-stack.md @@ -26,46 +26,46 @@ weight: 70 -{{< feature-state for_k8s_version="v1.16" state="alpha" >}} +{{< feature-state for_k8s_version="v1.21" state="beta" >}} -IPv4/IPv6 双协议栈能够将 IPv4 和 IPv6 地址分配给 +IPv4/IPv6 双协议栈网络能够将 IPv4 和 IPv6 地址分配给 {{< glossary_tooltip text="Pod" term_id="pod" >}} 和 {{< glossary_tooltip text="Service" term_id="service" >}}。 -如果你为 Kubernetes 集群启用了 IPv4/IPv6 双协议栈网络, -则该集群将支持同时分配 IPv4 和 IPv6 地址。 +从 1.21 版本开始,Kubernetes 集群默认启用 IPv4/IPv6 双协议栈网络, +以支持同时分配 IPv4 和 IPv6 地址。 -## 支持的功能 +## 支持的功能 {#supported-features} -在 Kubernetes 集群上启用 IPv4/IPv6 双协议栈可提供下面的功能: +Kubernetes 集群的 IPv4/IPv6 双协议栈可提供下面的功能: - * 双协议栈 pod 网络 (每个 pod 分配一个 IPv4 和 IPv6 地址) - * IPv4 和 IPv6 启用的服务 - * Pod 的集群外出口通过 IPv4 和 IPv6 路由 +* 双协议栈 pod 网络 (每个 pod 分配一个 IPv4 和 IPv6 地址) +* IPv4 和 IPv6 启用的服务 +* Pod 的集群外出口通过 IPv4 和 IPv6 路由 -## 先决条件 +## 先决条件 {#prerequisites} - * Kubernetes 1.20 版本及更高版本,有关更早 Kubernetes 版本的使用双栈服务的信息,请参考那个版本的 Kubernetes 文档。 - * 提供商支持双协议栈网络(云提供商或其他提供商必须能够为 Kubernetes 节点提供可路由的 IPv4/IPv6 网络接口) - * 支持双协议栈的网络插件(如 Kubenet 或 Calico) +* Kubernetes 1.20 版本或更高版本,有关更早 Kubernetes 版本的使用双栈服务的信息, + 请参考对应版本的 Kubernetes 文档。 +* 提供商支持双协议栈网络(云提供商或其他提供商必须能够为 Kubernetes + 节点提供可路由的 IPv4/IPv6 网络接口) +* 支持双协议栈的网络插件(如 Kubenet 或 Calico) -## 启用 IPv4/IPv6 双协议栈 +## 配置 IPv4/IPv6 双协议栈 +要使用 IPv4/IPv6 双协议栈,确保为集群的相关组件启用 `IPv6DualStack` +[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/), +(从 1.21 版本开始,IPv4/IPv6 双协议栈默认是被启用的)。 + -要启用 IPv4/IPv6 双协议栈,为集群的相关组件启用 `IPv6DualStack` -[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/), -并且设置双协议栈的集群网络分配: - - * kube-apiserver: - * `--feature-gates="IPv6DualStack=true"` - * `--service-cluster-ip-range=,` - * kube-controller-manager: - * `--feature-gates="IPv6DualStack=true"` - * `--cluster-cidr=,` - * `--service-cluster-ip-range=,` - * `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` 对于 IPv4 默认为 /24,对于 IPv6 默认为 /64 - * kubelet: - * `--feature-gates="IPv6DualStack=true"` - * kube-proxy: - * `--cluster-cidr=,` - * `--feature-gates="IPv6DualStack=true"` +* kube-apiserver: + * `--service-cluster-ip-range=,` +* kube-controller-manager: + * `--cluster-cidr=,` + * `--service-cluster-ip-range=,` + * `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` 对于 IPv4 默认为 /24,对于 IPv6 默认为 /64 +* kube-proxy: + * `--cluster-cidr=,` +{{< note >}} -{{< note >}} - -IPv4 CIDR 的一个例子:`10.244.0.0/16`(尽管你会提供你自己的地址范围) - -IPv6 CIDR 的一个例子:`fdXY:IJKL:MNOP:15::/64`(这里演示的是格式而非有效地址 - 请看 [RFC 4193](https://tools.ietf.org/html/rfc4193)) +IPv4 CIDR 的一个例子:`10.244.0.0/16`(尽管你会提供你自己的地址范围)。 +IPv6 CIDR 的一个例子:`fdXY:IJKL:MNOP:15::/64` +(这里演示的是格式而非有效地址 - 请看 [RFC 4193](https://tools.ietf.org/html/rfc4193))。 + +从 1.21 开始 IPv4/IPv6 双协议栈默认为启用状态。 +你可以在必要的时候通过为 kube-apiserver、kube-controller-manager、kubelet +和 kube-proxy 命令行设置 `--feature-gates="IPv6DualStack=false"` 来禁用 +此特性。 {{< /note >}} -如果你的集群启用了 IPv4/IPv6 双协议栈网络,则可以使用 IPv4 或 IPv6 地址来创建 +你可以使用 IPv4 或 IPv6 地址来创建 {{< glossary_tooltip text="Service" term_id="service" >}}。 -服务的地址族默认为第一个服务集群 IP 范围的地址族(通过 kube-apiserver 的 `--service-cluster-ip-range` 参数配置)。 -当你定义服务时,可以选择将其配置为双栈。若要指定所需的行为,你可以设置 `.spec.ipFamilyPolicy` 字段为以下值之一: +服务的地址族默认为第一个服务集群 IP 范围的地址族(通过 kube-apiserver 的 +`--service-cluster-ip-range` 参数配置)。 +当你定义服务时,可以选择将其配置为双栈。若要指定所需的行为,你可以设置 +`.spec.ipFamilyPolicy` 字段为以下值之一: * `SingleStack`:单栈服务。控制面使用第一个配置的服务集群 IP 范围为服务分配集群 IP。 * `PreferDualStack`: - * 仅当集群启用了双栈时使用。为服务分配 IPv4 和 IPv6 集群 IP。 - * 如果集群没有启用双堆栈,则此设置与 `SingleStack` 行为相同。 + * 为服务分配 IPv4 和 IPv6 集群 IP 地址。 + (如果集群设置了 `--feature-gates="IPv6DualStack=false"`,则此设置的行为与 + `SingleStack` 设置相同。) * `RequireDualStack`:从 IPv4 和 IPv6 的地址范围分配服务的 `.spec.ClusterIPs` - * 从基于在 `.spec.ipFamilies` 数组中第一个元素的地址族的 `.spec.ClusterIPs` 列表中选择 `.spec.ClusterIP` - * 集群必须配置双栈网络 - + * 从基于在 `.spec.ipFamilies` 数组中第一个元素的地址族的 `.spec.ClusterIPs` + 列表中选择 `.spec.ClusterIP` + -如果你想要定义哪个 IP 族用于单栈或定义双栈 IP 族的顺序,可以通过设置服务上的可选字段 `.spec.ipFamilies` 来选择地址族。 +如果你想要定义哪个 IP 族用于单栈或定义双栈 IP 族的顺序,可以通过设置 +服务上的可选字段 `.spec.ipFamilies` 来选择地址族。 +{{< note >}} -{{< note >}} -`.spec.ipFamilies` 字段是不可变的,因为系统无法为已经存在的服务重新分配 `.spec.ClusterIP`。 -如果你想改变 `.spec.ipFamilies`,则需要删除并重新创建服务。 +`.spec.ipFamilies` 字段是不可变的,因为系统无法为已经存在的服务重新分配 +`.spec.ClusterIP`。如果你想改变 `.spec.ipFamilies`,则需要删除并重新创建服务。 {{< /note >}} - 你所列出的第一个地址族用于原来的 `.spec.ClusterIP` 字段。 - ### 双栈服务配置场景 以下示例演示多种双栈服务配置场景下的行为。 @@ -231,8 +232,8 @@ These examples demonstrate the behavior of various dual-stack Service configurat 1. 此服务规约中没有显式设定 `.spec.ipFamilyPolicy`。当你创建此服务时,Kubernetes 从所配置的第一个 `service-cluster-ip-range` 种为服务分配一个集群IP,并设置 `.spec.ipFamilyPolicy` 为 `SingleStack`。 - ([无选择算符的服务](/zh/docs/concepts/services-networking/service/#services-without-selectors)和 - [无头服务](/zh/docs/concepts/services-networking/service/#headless-services)的行为方式 + ([无选择算符的服务](/zh/docs/concepts/services-networking/service/#services-without-selectors) + 和[无头服务](/zh/docs/concepts/services-networking/service/#headless-services)的行为方式 与此相同。) {{< codenew file="service/networking/dual-stack-default-svc.yaml" >}} @@ -251,6 +252,13 @@ These examples demonstrate the behavior of various dual-stack Service configurat 字段 `.spec.ClusterIPs` 是主要字段,包含两个分配的 IP 地址;`.spec.ClusterIP` 是次要字段, 其取值从 `.spec.ClusterIPs` 计算而来。 + * 对于 `.spec.ClusterIP` 字段,控制面记录来自第一个服务集群 IP 范围 + 对应的地址族的 IP 地址。 + * 对于单协议栈的集群,`.spec.ClusterIPs` 和 `.spec.ClusterIP` 字段都 + 仅仅列出一个地址。 + * 对于启用了双协议栈的集群,将 `.spec.ipFamilyPolicy` 设置为 + `RequireDualStack` 时,其行为与 `PreferDualStack` 相同。 + {{< codenew file="service/networking/dual-stack-preferred-svc.yaml" >}} 下面示例演示了在服务已经存在的集群上新启用双栈时的默认行为。 +(将现有集群升级到 1.21 会启用双协议栈支持,除非设置了 +`--feature-gates="IPv6DualStack=false"`) -1. 在集群上启用双栈时,控制面会将现有服务(无论是 `IPv4` 还是 `IPv6`)配置 `.spec.ipFamilyPolicy` - 设置为 `SingleStack` 并设置 `.spec.ipFamilies` 为服务的当前地址族。 +1. 在集群上启用双栈时,控制面会将现有服务(无论是 `IPv4` 还是 `IPv6`)配置 + `.spec.ipFamilyPolicy` 为 `SingleStack` 并设置 `.spec.ipFamilies` + 为服务的当前地址族。 {{< codenew file="service/networking/dual-stack-default-svc.yaml" >}} @@ -322,7 +333,7 @@ These examples demonstrate the default behavior when dual-stack is newly enabled 2. 在集群上启用双栈时,带有选择算符的现有 [无头服务](/zh/docs/concepts/services-networking/service/#headless-services) 由控制面设置 `.spec.ipFamilyPolicy` 为 `SingleStack` - 并设置 `.spec.ipFamilies` 为第一个服务群集 IP 范围的地址族(通过配置 kube-apiserver 的 + 并设置 `.spec.ipFamilies` 为第一个服务集群 IP 范围的地址族(通过配置 kube-apiserver 的 `--service-cluster-ip-range` 参数),即使 `.spec.ClusterIP` 的设置值为 `None` 也如此。 {{< codenew file="service/networking/dual-stack-default-svc.yaml" >}} @@ -375,21 +386,25 @@ Services can be changed from single-stack to dual-stack and from dual-stack to s --> 1. 要将服务从单栈更改为双栈,根据需要将 `.spec.ipFamilyPolicy` 从 `SingleStack` 改为 `PreferDualStack` 或 `RequireDualStack`。 - 当你将此服务从单栈更改为双栈时,Kubernetes 将分配缺失的地址族,以便现在该服务具有 IPv4 和 IPv6 地址。 + 当你将此服务从单栈更改为双栈时,Kubernetes 将分配缺失的地址族,以便现在 + 该服务具有 IPv4 和 IPv6 地址。 编辑服务规约将 `.spec.ipFamilyPolicy` 从 `SingleStack` 改为 `PreferDualStack`。 之前: + ```yaml spec: ipFamilyPolicy: SingleStack ``` + 之后: + ```yaml spec: ipFamilyPolicy: PreferDualStack @@ -399,9 +414,10 @@ Services can be changed from single-stack to dual-stack and from dual-stack to s 1. To change a Service from dual-stack to single-stack, change `.spec.ipFamilyPolicy` from `PreferDualStack` or `RequireDualStack` to `SingleStack`. When you change this Service from dual-stack to single-stack, Kubernetes retains only the first element in the `.spec.ClusterIPs` array, and sets `.spec.ClusterIP` to that IP address and sets `.spec.ipFamilies` to the address family of `.spec.ClusterIPs`. --> -2. 要将服务从双栈更改为单栈,请将 `.spec.ipFamilyPolicy` 从 `PreferDualStack` 或 `RequireDualStack` - 改为 `SingleStack`。 - 当你将此服务从双栈更改为单栈时,Kubernetes 只保留 `.spec.ClusterIPs` 数组中的第一个元素,并设置 `.spec.ClusterIP` 为那个 IP 地址, +2. 要将服务从双栈更改为单栈,请将 `.spec.ipFamilyPolicy` 从 `PreferDualStack` 或 + `RequireDualStack` 改为 `SingleStack`。 + 当你将此服务从双栈更改为单栈时,Kubernetes 只保留 `.spec.ClusterIPs` + 数组中的第一个元素,并设置 `.spec.ClusterIP` 为那个 IP 地址, 并设置 `.spec.ipFamilies` 为 `.spec.ClusterIPs` 地址族。 对于[不带选择算符的无头服务](/zh/docs/concepts/services-networking/service/#without-selectors), -若没有显式设置 `.spec.ipFamilyPolicy`,则 `.spec.ipFamilyPolicy` 字段默认设置为 `RequireDualStack`。 +若没有显式设置 `.spec.ipFamilyPolicy`,则 `.spec.ipFamilyPolicy` +字段默认设置为 `RequireDualStack`。 - 要为你的服务提供双栈负载均衡器: - * 将 `.spec.type` 字段设置为 `LoadBalancer` - * 将 `.spec.ipFamilyPolicy` 字段设置为 `PreferDualStack` 或者 `RequireDualStack` +* 将 `.spec.type` 字段设置为 `LoadBalancer` +* 将 `.spec.ipFamilyPolicy` 字段设置为 `PreferDualStack` 或者 `RequireDualStack` + +{{< note >}} -{{< note >}} 为了使用双栈的负载均衡器类型服务,你的云驱动必须支持 IPv4 和 IPv6 的负载均衡器。 {{< /note >}} @@ -445,13 +462,16 @@ To use a dual-stack `LoadBalancer` type Service, your cloud provider must suppor -如果你要启用出口流量,以便使用非公开路由 IPv6 地址的 Pod 到达集群外地址(例如公网),则需要通过透明代理或 IP 伪装等机制使 Pod 使用公共路由的 IPv6 地址。 -[ip-masq-agent](https://github.com/kubernetes-sigs/ip-masq-agent)项目支持在双栈集群上进行 IP 伪装。 +如果你要启用出站流量,以便使用非公开路由 IPv6 地址的 Pod 到达集群外地址 +(例如公网),则需要通过透明代理或 IP 伪装等机制使 Pod 使用公共路由的 +IPv6 地址。 +[ip-masq-agent](https://github.com/kubernetes-sigs/ip-masq-agent)项目 +支持在双栈集群上进行 IP 伪装。 +{{< note >}} -{{< note >}} 确认你的 {{< glossary_tooltip text="CNI" term_id="cni" >}} 驱动支持 IPv6。 {{< /note >}} @@ -459,5 +479,7 @@ Ensure your {{< glossary_tooltip text="CNI" term_id="cni" >}} provider supports -* [验证 IPv4/IPv6 双协议栈](/zh/docs/tasks/network/validate-dual-stack)网络 \ No newline at end of file +* [验证 IPv4/IPv6 双协议栈](/zh/docs/tasks/network/validate-dual-stack)网络 +* [使用 kubeadm 启用双协议栈网络](/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support/) diff --git a/content/zh/docs/concepts/services-networking/endpoint-slices.md b/content/zh/docs/concepts/services-networking/endpoint-slices.md index bfd8019d3c..54d086ddb5 100644 --- a/content/zh/docs/concepts/services-networking/endpoint-slices.md +++ b/content/zh/docs/concepts/services-networking/endpoint-slices.md @@ -1,25 +1,27 @@ --- title: 端点切片(Endpoint Slices) content_type: concept -weight: 35 +weight: 45 --- -{{< feature-state for_k8s_version="v1.17" state="beta" >}} +{{< feature-state for_k8s_version="v1.21" state="stable" >}} -_端点切片(Endpoint Slices)_ 提供了一种简单的方法来跟踪 Kubernetes 集群中的网络端点 +_端点切片(EndpointSlices)_ 提供了一种简单的方法来跟踪 Kubernetes 集群中的网络端点 (network endpoints)。它们为 Endpoints 提供了一种可伸缩和可拓展的替代方案。 @@ -85,7 +87,7 @@ EndpointSlice 的名称必须是合法的 例如,下面是 Kubernetes 服务 `example` 的 EndpointSlice 资源示例。 ```yaml -apiVersion: discovery.k8s.io/v1beta1 +apiVersion: discovery.k8s.io/v1 kind: EndpointSlice metadata: name: example-abc @@ -102,9 +104,8 @@ endpoints: conditions: ready: true hostname: pod-1 - topology: - kubernetes.io/hostname: node-1 - topology.kubernetes.io/zone: us-west2-a + nodeName: node-1 + zone: us-west2-a ``` ### 拓扑信息 {#topology} -{{< feature-state for_k8s_version="v1.20" state="deprecated" >}} +EndpointSlice 中的每个端点都可以包含一定的拓扑信息。 +拓扑信息包括端点的位置,对应节点、可用区的信息。 +这些信息体现为 EndpointSlices 的如下端点字段: + + +* `nodeName` - 端点所在的 Node 名称; +* `zone` - 端点所处的可用区。 {{< note >}} -EndpointSlices 中的 topology 字段已被弃用,并将在以后的版本中删除。 -将使用新的 `nodeName` 字段代替在 topology 中设置 `kubernetes.io/hostname`。 -可以确定的是,其他覆盖区和域的拓扑字段用 EndpointSlice 标签来表达更合适, -该标签将应用于 EndpointSlice 内的所有端点。 + +在 v1 API 中,逐个端点设置的 `topology` 实际上被去除,以鼓励使用专用 +的字段 `nodeName` 和 `zone`。 + + +对 `EndpointSlice` 对象的 `endpoint` 字段设置任意的拓扑结构信息这一操作已被 +废弃,不再被 v1 API 所支持。取而代之的是 v1 API 所支持的 `nodeName` 和 `zone` +这些独立的字段。这些字段可以在不同的 API 版本之间自动完成转译。 +例如,v1beta1 API 中 `topology` 字段的 `topology.kubernetes.io/zone` 取值可以 +在 v1 API 中通过 `zone` 字段访问。 {{< /note >}} -EndpointSlice 中的每个端点都可以包含一定的拓扑信息。 -这一信息用来标明端点的位置,包含对应节点、可用区、区域的信息。 -当这些值可用时,控制面会为 EndpointSlice 设置如下拓扑标签: - - -* `kubernetes.io/hostname` - 端点所在的节点名称 -* `topology.kubernetes.io/zone` - 端点所处的可用区 -* `topology.kubernetes.io/region` - 端点所处的区域 - - -这些标签的值时根据与切片中各个端点相关联的资源来生成的。 -标签 `hostname` 代表的是对应的 Pod 的 NodeName 字段的取值。 -`zone` 和 `region` 标签则代表的是对应的节点所拥有的同名标签的值。 - ### 管理 {#management} -通常,控制面(尤其是端点切片的 {{< glossary_tooltip text="controller" term_id="controller" >}}) +通常,控制面(尤其是端点切片的 {{< glossary_tooltip text="控制器" term_id="controller" >}}) 会创建和管理 EndpointSlice 对象。EndpointSlice 对象还有一些其他使用场景, 例如作为服务网格(Service Mesh)的实现。这些场景都会导致有其他实体 或者控制器负责管理额外的 EndpointSlice 集合。 diff --git a/content/zh/docs/concepts/services-networking/ingress-controllers.md b/content/zh/docs/concepts/services-networking/ingress-controllers.md index a50312b63d..a2c9eaaae3 100644 --- a/content/zh/docs/concepts/services-networking/ingress-controllers.md +++ b/content/zh/docs/concepts/services-networking/ingress-controllers.md @@ -24,7 +24,8 @@ Kubernetes as a project supports and maintains [AWS](https://github.com/kubernet --> 为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。 -与作为 `kube-controller-manager` 可执行文件的一部分运行的其他类型的控制器不同,Ingress 控制器不是随集群自动启动的。 +与作为 `kube-controller-manager` 可执行文件的一部分运行的其他类型的控制器不同, +Ingress 控制器不是随集群自动启动的。 基于此页面,你可选择最适合你的集群的 ingress 控制器实现。 Kubernetes 作为一个项目,目前支持和维护 @@ -54,15 +55,18 @@ Kubernetes 作为一个项目,目前支持和维护 * [AKS 应用程序网关 Ingress 控制器](https://azure.github.io/application-gateway-kubernetes-ingress/) 是一个配置 [Azure 应用程序网关](https://docs.microsoft.com/azure/application-gateway/overview) 的 Ingress 控制器。 -* [Ambassador](https://www.getambassador.io/) API 网关是一个基于 [Envoy](https://www.envoyproxy.io) 的 Ingress +* [Ambassador](https://www.getambassador.io/) API 网关是一个基于 + [Envoy](https://www.envoyproxy.io) 的 Ingress 控制器。 -* [Apache APISIX Ingress 控制器](https://github.com/apache/apisix-ingress-controller) 是一个基于 [Apache APISIX 网关](https://github.com/apache/apisix) 的 Ingress 控制器。 +* [Apache APISIX Ingress 控制器](https://github.com/apache/apisix-ingress-controller) + 是一个基于 [Apache APISIX 网关](https://github.com/apache/apisix) 的 Ingress 控制器。 * [Avi Kubernetes Operator](https://github.com/vmware/load-balancer-and-ingress-services-for-kubernetes) 使用 [VMware NSX Advanced Load Balancer](https://avinetworks.com/) 提供第 4 到第 7 层的负载均衡。 * [Citrix Ingress 控制器](https://github.com/citrix/citrix-k8s-ingress-controller#readme) 可以用来与 Citrix Application Delivery Controller 一起使用。 -* [Contour](https://projectcontour.io/) 是一个基于 [Envoy](https://www.envoyproxy.io/) 的 Ingress 控制器。 +* [Contour](https://projectcontour.io/) 是一个基于 [Envoy](https://www.envoyproxy.io/) + 的 Ingress 控制器。 * [EnRoute](https://getenroute.io/) 是一个基于 [Envoy](https://www.envoyproxy.io) API 网关, 可以作为 Ingress 控制器来执行。 @@ -109,8 +115,11 @@ Kubernetes 作为一个项目,目前支持和维护 设计用来作为构造你自己的定制代理的库。 * [Traefik Kubernetes Ingress 提供程序](https://doc.traefik.io/traefik/providers/kubernetes-ingress/) 是一个用于 [Traefik](https://traefik.io/traefik/) 代理的 Ingress 控制器。 -* [Voyager](https://appscode.com/products/voyager) 是一个针对 [HAProxy](https://www.haproxy.org/#desc) - 的 Ingress 控制器。 +* [Tyk Operator](https://github.com/TykTechnologies/tyk-operator) + 使用自定义资源扩展 Ingress,为之带来 API 管理能力。Tyk Operator + 使用开源的 Tyk Gateway & Tyk Cloud 控制面。 +* [Voyager](https://appscode.com/products/voyager) 是一个针对 + [HAProxy](https://www.haproxy.org/#desc) 的 Ingress 控制器。 -IngressClass 资源包含一个可选的 `parameters` 字段,可用于为该类引用额外配置。 +IngressClass 资源包含一个可选的 `parameters` 字段,可用于为该类引用额外的、 +特定于具体实现的配置。 + + +#### 名字空间域的参数 + +{{< feature-state for_k8s_version="v1.21" state="alpha" >}} + + +`parameters` 字段有一个 `scope` 和 `namespace` 字段,可用来引用特定 +于名字空间的资源,对 Ingress 类进行配置。 +`scope` 字段默认为 `Cluster`,表示默认是集群作用域的资源。 +将 `scope` 设置为 `Namespace` 并设置 `namespace` 字段就可以引用某特定 +名字空间中的参数资源。 + +{{< codenew file="service/networking/namespaced-params.yaml" >}} 如果使用 `kubectl apply -f` 创建此 Ingress,则应该能够查看刚刚添加的 Ingress 的状态: diff --git a/content/zh/docs/concepts/services-networking/network-policies.md b/content/zh/docs/concepts/services-networking/network-policies.md index 8b38fa25d4..75631fb241 100644 --- a/content/zh/docs/concepts/services-networking/network-policies.md +++ b/content/zh/docs/concepts/services-networking/network-policies.md @@ -427,47 +427,138 @@ When the feature gate is enabled, you can set the `protocol` field of a NetworkP 来禁用 `SCTPSupport` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。 启用该特性门控后,用户可以将 NetworkPolicy 的 `protocol` 字段设置为 `SCTP`。 +{{< note >}} -{{< note >}} 你必须使用支持 SCTP 协议网络策略的 {{< glossary_tooltip text="CNI" term_id="cni" >}} 插件。 {{< /note >}} + +## 针对某个端口范围 {#targeting-a-range-of-ports} + +{{< feature-state for_k8s_version="v1.21" state="alpha" >}} + + +在编写 NetworkPolicy 时,你可以针对一个端口范围而不是某个固定端口。 + +这一目的可以通过使用 `endPort` 字段来实现,如下例所示: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: multi-port-egress + namespace: default +spec: + podSelector: + matchLabels: + role: db + policyTypes: + - Egress + egress: + - to: + - ipBlock: + cidr: 10.0.0.0/24 + ports: + - protocol: TCP + port: 32000 + endPort: 32768 +``` + + +上面的规则允许名字空间 `default` 中所有带有标签 `db` 的 Pod 使用 TCP 协议 +与 `10.0.0.0/24` 范围内的 IP 通信,只要目标端口介于 32000 和 32768 之间就可以。 + + +使用此字段时存在以下限制: + +* 作为一种 Alpha 阶段的特性,端口范围设定默认是被禁用的。要在整个集群 + 范围内允许使用 `endPort` 字段,你(或者你的集群管理员)需要为 API + 服务器设置 `-feature-gates=NetworkPolicyEndPort=true,...` 以启用 + `NetworkPolicyEndPort` + [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。 +* `endPort` 字段必须等于或者大于 `port` 字段的值。 +* 两个字段的设置值都只能是数字。 + +{{< note >}} + +你的集群所使用的 {{< glossary_tooltip text="CNI" term_id="cni" >}} 插件 +必须支持在 NetworkPolicy 规约中使用 `endPort` 字段。 +{{< /note >}} + + +## 基于名字指向某名字空间 {#targeting-a-namespace-by-its-name} + +{{< feature-state state="beta" for_k8s_version="1.21" >}} + + +只要 `NamespaceDefaultLabelName` +[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) +被启用,Kubernetes 控制面会在所有名字空间上设置一个不可变更的标签 +`kubernetes.io/metadata.name`。该标签的值是名字空间的名称。 + +如果 NetworkPolicy 无法在某些对象字段中指向某名字空间,你可以使用标准的 +标签方式来指向特定名字空间。 + -## 你通过网络策略(至少目前还)无法完成的工作 +## 通过网络策略(至少目前还)无法完成的工作 -到 Kubernetes v1.20 为止,NetworkPolicy API 还不支持以下功能,不过 +到 Kubernetes {{< skew latestVersion >}} 为止,NetworkPolicy API 还不支持以下功能,不过 你可能可以使用操作系统组件(如 SELinux、OpenVSwitch、IPTables 等等) 或者第七层技术(Ingress 控制器、服务网格实现)或准入控制器来实现一些 替代方案。 如果你对 Kubernetes 中的网络安全性还不太了解,了解使用 NetworkPolicy API 还无法实现下面的用户场景是很值得的。 -对这些用户场景中的一部分(而非全部)的讨论扔在进行,或许在将来 NetworkPolicy -API 中会给出一定支持。 - 强制集群内部流量经过某公用网关(这种场景最好通过服务网格或其他代理来实现); - 与 TLS 相关的场景(考虑使用服务网格或者 Ingress 控制器); - 特定于节点的策略(你可以使用 CIDR 来表达这一需求不过你无法使用节点在 Kubernetes 中的其他标识信息来辩识目标节点); -- 基于名字来选择名字空间或者服务(不过,你可以使用 {{< glossary_tooltip text="标签" term_id="label" >}} +- 基于名字来选择服务(不过,你可以使用 {{< glossary_tooltip text="标签" term_id="label" >}} 来选择目标 Pod 或名字空间,这也通常是一种可靠的替代方案); - 创建或管理由第三方来实际完成的“策略请求”; -{{< feature-state for_k8s_version="v1.17" state="alpha" >}} +{{< feature-state for_k8s_version="v1.21" state="deprecated" >}} + +{{< note >}} + +此功能特性,尤其是 Alpha 阶段的 `topologyKeys` API,在 Kubernetes v1.21 +版本中已被废弃。Kubernetes v1.21 版本中引入的 +[拓扑感知的提示](/zh/docs/concepts/services-networking/topology-aware-hints/), +提供类似的功能。 +{{}} -## 介绍 {#introduction} +## 拓扑感知的流量路由 -默认情况下,发往 `ClusterIP` 或者 `NodePort` 服务的流量可能会被路由到任意一个服务后端的地址上。 -从 Kubernetes 1.7 开始,可以将“外部”流量路由到节点上运行的 Pod 上,但不支持 `ClusterIP` 服务, -更复杂的拓扑 — 比如分区路由 — 也还不支持。 -通过允许 `Service` 创建者根据源 `Node` 和目的 `Node` 的标签来定义流量路由策略, -服务拓扑特性实现了服务流量的路由。 +默认情况下,发往 `ClusterIP` 或者 `NodePort` 服务的流量可能会被路由到 +服务的任一后端的地址。Kubernetes 1.7 允许将“外部”流量路由到接收到流量的 +节点上的 Pod。对于 `ClusterIP` 服务,无法完成同节点优先的路由,你也无法 +配置集群优选路由到同一可用区中的端点。 +通过在 Service 上配置 `topologyKeys`,你可以基于来源节点和目标节点的 +标签来定义流量路由策略。 -通过对源 `Node` 和目的 `Node` 标签的匹配,运营者可以使用任何符合运营者要求的度量值 -来指定彼此“较近”和“较远”的节点组。 -例如,对于在公有云上的运营者来说,更偏向于把流量控制在同一区域内, -因为区域间的流量是有费用成本的,而区域内的流量没有。 -其它常用需求还包括把流量路由到由 `DaemonSet` 管理的本地 Pod 上,或者 -把保持流量在连接同一机架交换机的 `Node` 上,以获得低延时。 + +通过对源和目的之间的标签匹配,作为集群操作者的你可以根据节点间彼此“较近”和“较远” +来定义节点集合。你可以基于符合自身需求的任何度量值来定义标签。 +例如,在公有云上,你可能更偏向于把流量控制在同一区内,因为区间流量是有费用成本的, +而区内流量则没有。 +其它常见需求还包括把流量路由到由 `DaemonSet` 管理的本地 Pod 上,或者 +把将流量转发到连接在同一机架交换机的节点上,以获得低延时。 - ## 约束条件 {#constraints} * 服务拓扑和 `externalTrafficPolicy=Local` 是不兼容的,所以 `Service` 不能同时使用这两种特性。 - 但是在同一个集群的不同 `Service` 上是可以分别使用这两种特性的,只要不在同一个 `Service` 上就可以。 + 但是在同一个集群的不同 `Service` 上是可以分别使用这两种特性的,只要不在同一个 + `Service` 上就可以。 * 有效的拓扑键目前只有:`kubernetes.io/hostname`、`topology.kubernetes.io/zone` 和 `topology.kubernetes.io/region`,但是未来会推广到其它的 `Node` 标签。 @@ -171,23 +180,21 @@ traffic as follows. ## 示例 - 以下是使用服务拓扑功能的常见示例。 ### 仅节点本地端点 - -仅路由到节点本地端点的一种服务。 如果节点上不存在端点,流量则被丢弃: +仅路由到节点本地端点的一种服务。如果节点上不存在端点,流量则被丢弃: ```yaml apiVersion: v1 @@ -207,12 +214,11 @@ spec: ### 首选节点本地端点 - 首选节点本地端点,如果节点本地端点不存在,则回退到集群范围端点的一种服务: ```yaml @@ -234,13 +240,13 @@ spec: -### 仅地域或区域端点 - -首选地域端点而不是区域端点的一种服务。 如果以上两种范围内均不存在端点,流量则被丢弃。 +### 仅地域或区域端点 +首选地域端点而不是区域端点的一种服务。 如果以上两种范围内均不存在端点, +流量则被丢弃。 ```yaml apiVersion: v1 @@ -261,13 +267,13 @@ spec: -### 优先选择节点本地端点,地域端点,然后是区域端点 - -优先选择节点本地端点,地域端点,然后是区域端点,然后才是集群范围端点的一种服务。 +### 优先选择节点本地端点、地域端点,然后是区域端点 + +优先选择节点本地端点,地域端点,然后是区域端点,最后才是集群范围端点的 +一种服务。 ```yaml apiVersion: v1 @@ -296,3 +302,4 @@ spec: --> * 阅读关于[启用服务拓扑](/zh/docs/tasks/administer-cluster/enabling-service-topology/) * 阅读[用服务连接应用程序](/zh/docs/concepts/services-networking/connect-applications-service/) + diff --git a/content/zh/docs/concepts/services-networking/service.md b/content/zh/docs/concepts/services-networking/service.md index 3497dd817d..78b16d6e13 100644 --- a/content/zh/docs/concepts/services-networking/service.md +++ b/content/zh/docs/concepts/services-networking/service.md @@ -312,12 +312,26 @@ selectors and uses DNS names instead. For more information, see the ExternalName Service 是 Service 的特例,它没有选择算符,但是使用 DNS 名称。 有关更多信息,请参阅本文档后面的[ExternalName](#externalname)。 + +### 超出容量的 Endpoints {#over-capacity-endpoints} + +如果某个 Endpoints 资源中包含的端点个数超过 1000,则 Kubernetes v1.21 版本 +(及更新版本)的集群会将为该 Endpoints 添加注解 +`endpoints.kubernetes.io/over-capacity: warning`。 +这一注解表明所影响到的 Endpoints 对象已经超出容量。 + ### EndpointSlice -{{< feature-state for_k8s_version="v1.17" state="beta" >}} +{{< feature-state for_k8s_version="v1.21" state="stable" >}} -### 应用程序协议 {#application-protocol} +### 应用协议 {#application-protocol} {{< feature-state for_k8s_version="v1.20" state="stable" >}} + `appProtocol` 字段提供了一种为每个 Service 端口指定应用协议的方式。 此字段的取值会被映射到对应的 Endpoints 和 EndpointSlices 对象。 @@ -1077,11 +1092,15 @@ The set of protocols that can be used for LoadBalancer type of Services is still {{< note >}} 可用于 LoadBalancer 类型服务的协议集仍然由云提供商决定。 {{< /note >}} + +### 禁用负载均衡器节点端口分配 {#load-balancer-nodeport-allocation} {{< feature-state for_k8s_version="v1.20" state="alpha" >}} + -### 禁用负载均衡器节点端口分配 {#load-balancer-nodeport-allocation} - -{{< feature-state for_k8s_version="v1.20" state="alpha" >}} - 从 v1.20 版本开始, 你可以通过设置 `spec.allocateLoadBalancerNodePorts` 为 `false` 对类型为 LoadBalancer 的服务禁用节点端口分配。 这仅适用于直接将流量路由到 Pod 而不是使用节点端口的负载均衡器实现。 默认情况下,`spec.allocateLoadBalancerNodePorts` 为 `true`, LoadBalancer 类型的服务继续分配节点端口。 -如果现有服务已被分配节点端口,将参数 `spec.allocateLoadBalancerNodePorts` 设置为 `false` 时, -这些服务上已分配置的节点端口不会被自动释放。 +如果现有服务已被分配节点端口,将参数 `spec.allocateLoadBalancerNodePorts` +设置为 `false` 时,这些服务上已分配置的节点端口不会被自动释放。 你必须显式地在每个服务端口中删除 `nodePorts` 项以释放对应端口。 你必须启用 `ServiceLBNodePortControl` 特性门控才能使用该字段。 + + +#### 设置负载均衡器实现的类别 {#load-balancer-class} + +{{< feature-state for_k8s_version="v1.21" state="alpha" >}} + + +从 v1.21 开始,你可以有选择地为 `LoadBalancer` 类型的服务设置字段 +`.spec.loadBalancerClass`,以指定其负载均衡器实现的类别。 +默认情况下,`.spec.loadBalancerClass` 的取值是 `nil`,`LoadBalancer` 类型 +服务会使用云提供商的默认负载均衡器实现。 +如果设置了 `.spec.loadBalancerClass`,则假定存在某个与所指定的类相匹配的 +负载均衡器实现在监视服务变化。 +所有默认的负载均衡器实现(例如,由云提供商所提供的)都会忽略设置了此字段 +的服务。`.spec.loadBalancerClass` 只能设置到类型为 `LoadBalancer` 的 Service +之上,而且一旦设置之后不可变更。 + + +`.spec.loadBalancerClass` 的值必须是一个标签风格的标识符, +可以有选择地带有类似 "`internal-vip`" 或 "`example.com/internal-vip`" 这类 +前缀。没有前缀的名字是保留给最终用户的。 +你必须启用 `ServiceLoadBalancerClass` 特性门控才能使用此字段。 + + + + +{{< feature-state for_k8s_version="v1.21" state="alpha" >}} + + +_拓扑感知提示_ 包含客户怎么使用服务端点的建议,从而实现了拓扑感知的路由功能。 +这种方法添加了元数据,以启用 EndpointSlice 和/或 Endpoints 对象的调用者, +这样,访问这些网络端点的请求流量就可以在它的发起点附近就近路由。 + +例如,你可以在一个地域内路由流量,以降低通信成本,或提高网络性能。 + + + + +## 动机 {#motivation} + + +Kubernetes 集群越来越多的部署到多区域环境中。 +_拓扑感知提示_ 提供了一种把流量限制在它的发起区域之内的机制。 +这个概念一般被称之为 “拓扑感知路由”。 +在计算 {{< glossary_tooltip term_id="Service" >}} 的端点时, +EndpointSlice 控制器会评估每一个端点的拓扑(地域和区域),填充提示字段,并将其分配到某个区域。 +集群组件,例如{{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}} +就可以使用这些提示信息,并用他们来影响流量的路由(倾向于拓扑上相邻的端点)。 + + +## 使用拓扑感知提示 {#using-topology-aware-hints} + + +如果你已经[启用](/zh/docs/tasks/administer-cluster/enabling-topology-aware-hints)了整个特性, +就可以通过把注解 `service.kubernetes.io/topology-aware-hints` 的值设置为 `auto`, +来激活服务的拓扑感知提示功能。 +这告诉 EndpointSlice 控制器在它认为安全的时候来设置拓扑提示。 +重要的是,这并不能保证总会设置提示(hints)。 + + +## 工作原理 {#implementation} + + +此特性启用的功能分为两个组件:EndpointSlice 控制器和 kube-proxy。 +本节概述每个组件如何实现此特性。 + + +### EndpointSlice 控制器 {#implementation-control-plane} + + +此特性开启后,EndpointSlice 控制器负责在 EndpointSlice 上设置提示信息。 +控制器按比例给每个区域分配一定比例数量的端点。 +这个比例来源于此区域中运行节点的 +[可分配](/zh/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable) +CPU 核心数。 +例如,如果一个区域拥有 2 CPU 核心,而另一个区域只有 1 CPU 核心, +那控制器将给那个有 2 CPU 的区域分配两倍数量的端点。 + + +以下示例展示了提供提示信息后 EndpointSlice 的样子: + +```yaml +apiVersion: discovery.k8s.io/v1 +kind: EndpointSlice +metadata: + name: example-hints + labels: + kubernetes.io/service-name: example-svc +addressType: IPv4 +ports: + - name: http + protocol: TCP + port: 80 +endpoints: + - addresses: + - "10.1.2.3" + conditions: + ready: true + hostname: pod-1 + zone: zone-a + hints: + forZones: + - name: "zone-a" +``` + +### kube-proxy {#implementation-kube-proxy} + + +kube-proxy 组件依据 EndpointSlice 控制器设置的提示,过滤由它负责路由的端点。 +在大多数场合,这意味着 kube-proxy 可以把流量路由到同一个区域的端点。 +有时,控制器从某个不同的区域分配端点,以确保在多个区域之间更平均的分配端点。 +这会导致部分流量被路由到其他区域。 + + +## 保护措施 {#safeguards} + + +Kubernetes 控制平面和每个节点上的 kube-proxy,在使用拓扑感知提示功能前,会应用一些保护措施规则。 +如果没有检出,kube-proxy 将无视区域限制,从集群中的任意节点上选择端点。 + + +1. **端点数量不足:** 如果一个集群中,端点数量少于区域数量,控制器不创建任何提示。 + + +2. **不可能实现均衡分配:** 在一些场合中,不可能实现端点在区域中的平衡分配。 + 例如,假设 zone-a 比 zone-b 大两倍,但只有 2 个端点, + 那分配到 zone-a 的端点可能收到比 zone-b多两倍的流量。 + 如果控制器不能确定此“期望的过载”值低于每一个区域可接受的阈值,控制器将不指派提示信息。 + 重要的是,这不是基于实时反馈。所以对于单独的端点仍有可能超载。 + + +3. **一个或多个节点信息不足:** 如果任一节点没有设置标签 `topology.kubernetes.io/zone`, + 或没有上报可分配的 CPU 数据,控制平面将不会设置任何拓扑感知提示, + 继而 kube-proxy 也就不能通过区域过滤端点。 + + +4. **一个或多个端点没有设置区域提示:** 当这类事情发生时, + kube-proxy 会假设这是正在执行一个从/到拓扑感知提示的转移。 + 在这种场合下过滤Service 的端点是有风险的,所以 kube-proxy 回撤为使用所有的端点。 + + +5. **不在提示中的区域:** 如果 kube-proxy 不能根据一个指示在它所在的区域中发现一个端点, + 它回撤为使用所有节点的端点。当你的集群新增一个新的区域时,这种情况发生概率很高。 + + +## 限制 {#constraints} + + +* 当 Service 的 `externalTrafficPolicy` 或 `internalTrafficPolicy` 设置值为 `Local` 时, + 拓扑感知提示功能不可用。 + 你可以在一个集群的不同服务中使用这两个特性,但不能在同一个服务中这么做。 + + +* 这种方法不适用于大部分流量来自于一部分区域的服务。 + 相反的,这里假设入站流量将根据每个区域中节点的服务能力按比例的分配。 + + +* EndpointSlice 控制器在计算每一个区域的容量比例时,会忽略未就绪的节点。 + 在大量节点未就绪的场景下,这样做会带来非预期的结果。 + + +* EndpointSlice 控制器在计算每一个区域的部署比例时,并不会考虑 + {{< glossary_tooltip text="容忍度" term_id="toleration" >}}。 + 如果服务后台的 Pod 被限制只能运行在集群节点的一个子集上,这些信息并不会被使用。 + + +* 这种方法和自动扩展机制之间不能很好的协同工作。例如,如果大量流量来源于一个区域, + 那只有分配到该区域的端点才可用来处理流量。这会导致 + {{< glossary_tooltip text="Pod 自动水平扩展" term_id="horizontal-pod-autoscaler" >}} + 要么不能拾取此事件,要么新增 Pod 被启动到其他区域。 + +## {{% heading "whatsnext" %}} + + +* 参阅[启用拓扑感知提示](/zh/docs/tasks/administer-cluster/enabling-topology-aware-hints/) +* 参阅[通过服务连通应用](/zh/docs/concepts/services-networking/connect-applications-service/) diff --git a/content/zh/docs/concepts/storage/ephemeral-volumes.md b/content/zh/docs/concepts/storage/ephemeral-volumes.md index c5195ac56d..7dee7ecab5 100644 --- a/content/zh/docs/concepts/storage/ephemeral-volumes.md +++ b/content/zh/docs/concepts/storage/ephemeral-volumes.md @@ -248,13 +248,17 @@ features: Example: --> -通用临时卷与 `emptyDir` 卷类似,因为它们为暂存数据提供了一个 per-pod 的目录,该目录通常在置备后为空。 -但他们可能还会有其他特征: +通用临时卷类似于 `emptyDir` 卷,因为它为每个 Pod 提供临时数据存放目录, +在最初制备完毕时一般为空。不过通用临时卷也有一些额外的功能特性: - 存储可以是本地的,也可以是网络连接的。 - 卷可以有固定的大小,pod不能超量使用。 - 卷可能有一些初始数据,这取决于驱动程序和参数。 -- 当驱动程序支持,卷上的典型操作将被支持,包括([快照](/zh/docs/concepts/storage/volume-snapshots/)、[克隆](/zh/docs/concepts/storage/volume-pvc-datasource/)、[调整大小](/zh/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims)和[存储容量跟踪](/zh/docs/concepts/storage/storage-capacity/))。 +- 当驱动程序支持,卷上的典型操作将被支持,包括 + ([快照](/zh/docs/concepts/storage/volume-snapshots/)、 + [克隆](/zh/docs/concepts/storage/volume-pvc-datasource/)、 + [调整大小](/zh/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims)和 + [存储容量跟踪](/zh/docs/concepts/storage/storage-capacity/))。 示例: @@ -375,8 +379,8 @@ Pods (a Pod "pod-a" with volume "scratch" and another Pod with name --> 这种确定性命名方式也引入了潜在的冲突, 比如在不同的 Pod 之间(名为 “Pod-a” 的 Pod 挂载名为 "scratch" 的卷, -名为 "pod" 的 Pod 挂载名为 “a-scratch” 的卷,这两者均会生成名为 "pod-a-scratch" 的PVC), -或者在 Pod 和手工创建的 PVC 之间。 +和名为 "pod" 的 Pod 挂载名为 “a-scratch” 的卷,这两者均会生成名为 +"pod-a-scratch" 的PVC),或者在 Pod 和手工创建的 PVC 之间。 - 通过特性门控显式禁用该特性。 -- 当`卷`列表不包含 `ephemeral` 卷类型时,使用 - [Pod 安全策略](/zh/docs/concepts/policy/pod-security-policy/) - (在 Kubernetes 1.21 中已弃用)。 -- 使用[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/) - 拒绝像 Pod 这样具有通用临时卷。 +- 当 `volumes` 列表不包含 `ephemeral` 卷类型时,使用 + [Pod 安全策略](/zh/docs/concepts/policy/pod-security-policy/)。 + (这一方式在 Kubernetes 1.21 版本已经弃用) +- 使用一个[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/) + 拒绝包含通用临时卷的 Pods。 -在一个命名空间中,用于 PVCs 的常规命名空间配额[用于 PVCs 的常规命名空间配额](/zh/docs/concepts/policy/resource-quotas/#storage-resource-quota)仍然适用, -因此即使允许用户使用这种新机制,他们也不能使用它来规避其他策略。 +[为 PVC 卷所设置的逐名字空间的配额](/zh/docs/concepts/policy/resource-quotas/#storage-resource-quota) +仍然有效,因此即使允许用户使用这种新机制,他们也不能使用它来规避其他策略。 ## {{% heading "whatsnext" %}} @@ -474,5 +479,5 @@ See [local ephemeral storage](/docs/concepts/configuration/manage-resources-cont - 有关设计的更多信息,参阅 [Generic ephemeral inline volumes KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/1698-generic-ephemeral-volumes/README.md)。 -- 本特性下一步开发的更多信息,参阅 - [enhancement tracking issue #1698](https://github.com/kubernetes/enhancements/issues/1698). +- 关于本特性下一步开发的更多信息,参阅 + [enhancement tracking issue #1698](https://github.com/kubernetes/enhancements/issues/1698)。 diff --git a/content/zh/docs/concepts/storage/storage-capacity.md b/content/zh/docs/concepts/storage/storage-capacity.md index b22847c24b..edb448babd 100644 --- a/content/zh/docs/concepts/storage/storage-capacity.md +++ b/content/zh/docs/concepts/storage/storage-capacity.md @@ -11,6 +11,7 @@ which a pod runs: network-attached storage might not be accessible by all nodes, or storage is local to a node to begin with. {{< feature-state for_k8s_version="v1.19" state="alpha" >}} +{{< feature-state for_k8s_version="v1.21" state="beta" >}} This page describes how Kubernetes keeps track of storage capacity and how the scheduler uses that information to schedule Pods onto nodes @@ -27,6 +28,7 @@ text="Container Storage Interface" term_id="csi" >}} (CSI) drivers and 网络存储可能并非所有节点都能够访问,或者对于某个节点存储是本地的。 {{< feature-state for_k8s_version="v1.19" state="alpha" >}} +{{< feature-state for_k8s_version="v1.21" state="beta" >}} 本页面描述了 Kubernetes 如何跟踪存储容量以及调度程序如何为了余下的尚未挂载的卷使用该信息将 Pod 调度到能够访问到足够存储容量的节点上。 @@ -156,64 +158,16 @@ to handle this automatically. ## 开启存储容量跟踪 -存储容量跟踪是一个 *alpha 特性*,只有当 `CSIStorageCapacity` -[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) -和 `storage.k8s.io/v1alpha1` {{< glossary_tooltip text="API 组" term_id="api-group" >}}启用时才能启用。 -更多详细信息,可以查看`--feature-gates` 和 `--runtime-config` -[kube-apiserver 参数](/zh/docs/reference/command-line-tools-reference/kube-apiserver/)。 - - -快速检查 Kubernetes 集群是否支持这个特性,可以通过下面命令列出 CSIStorageCapacity 对象: - -```shell -kubectl get csistoragecapacities --all-namespaces -``` - -如果集群支持 CSIStorageCapacity,就会返回 CSIStorageCapacity 的对象列表或者: -``` -No resources found -``` - - -如果不支持,下面这个错误就会被打印出来: - -``` -error: the server doesn't have a resource type "csistoragecapacities" -``` - -除了在集群中启用该功能外,CSI 驱动程序还必须支持它。有关详细信息,请参阅驱动程序的文档。 - +存储容量跟踪是一个 Beta 特性,从 Kubernetes 1.21 版本起在 Kubernetes 集群 +中默认被启用。除了在集群中启用此功能特性之外,还要求 CSI 驱动支持此特性。 +请参阅驱动的文档了解详细信息。 ## {{% heading "whatsnext" %}} @@ -225,6 +179,6 @@ error: the server doesn't have a resource type "csistoragecapacities" --> - 想要获得更多该设计的信息,查看 [Storage Capacity Constraints for Pod Scheduling KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/1472-storage-capacity-tracking/README.md)。 -- 有关此功能的进一步开发信息,查看 +- 有关此功能的下一步开发信息,查看 [enhancement tracking issue #1472](https://github.com/kubernetes/enhancements/issues/1472)。 - 学习 [Kubernetes 调度器](/zh/docs/concepts/scheduling-eviction/kube-scheduler/)。 diff --git a/content/zh/docs/concepts/storage/storage-classes.md b/content/zh/docs/concepts/storage/storage-classes.md index 57b58006b3..addf5deee9 100644 --- a/content/zh/docs/concepts/storage/storage-classes.md +++ b/content/zh/docs/concepts/storage/storage-classes.md @@ -5,6 +5,11 @@ weight: 30 --- -本文描述了 Kubernetes 中 StorageClass 的概念。建议先熟悉 [卷](/zh/docs/concepts/storage/volumes/) 和 -[持久卷](/zh/docs/concepts/storage/persistent-volumes) 的概念。 +本文描述了 Kubernetes 中 StorageClass 的概念。建议先熟悉 +[卷](/zh/docs/concepts/storage/volumes/)和 +[持久卷](/zh/docs/concepts/storage/persistent-volumes)的概念。 @@ -45,7 +51,7 @@ Each StorageClass contains the fields `provisioner`, `parameters`, and `reclaimPolicy`, which are used when a PersistentVolume belonging to the class needs to be dynamically provisioned. - --> +--> ## StorageClass 资源 每个 StorageClass 都包含 `provisioner`、`parameters` 和 `reclaimPolicy` 字段, @@ -61,12 +67,12 @@ StorageClass 对象的命名很重要,用户使用这个命名来请求生成 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数,一旦创建了对象就不能再对其更新。 -管理员可以为没有申请绑定到特定 StorageClass 的 PVC 指定一个默认的存储类 : +管理员可以为没有申请绑定到特定 StorageClass 的 PVC 指定一个默认的存储类: 更多详情请参阅 [PersistentVolumeClaim 章节](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。 @@ -103,8 +109,8 @@ for provisioning PVs. This field must be specified. | 卷插件 | 内置制备器 | 配置例子 | |:---------------------|:----------:|:-------------------------------------:| | AWSElasticBlockStore | ✓ | [AWS EBS](#aws-ebs) | -| AzureFile | ✓ | [Azure File](#azure-file) | -| AzureDisk | ✓ | [Azure Disk](#azure-disk) | +| AzureFile | ✓ | [Azure File](#azure-文件) | +| AzureDisk | ✓ | [Azure Disk](#azure-磁盘) | | CephFS | - | - | | Cinder | ✓ | [OpenStack Cinder](#openstack-cinder) | | FC | - | - | @@ -117,10 +123,10 @@ for provisioning PVs. This field must be specified. | NFS | - | - | | RBD | ✓ | [Ceph RBD](#ceph-rbd) | | VsphereVolume | ✓ | [vSphere](#vsphere) | -| PortworxVolume | ✓ | [Portworx Volume](#portworx-volume) | +| PortworxVolume | ✓ | [Portworx Volume](#portworx-卷) | | ScaleIO | ✓ | [ScaleIO](#scaleio) | | StorageOS | ✓ | [StorageOS](#storageos) | -| Local | - | [Local](#local) | +| Local | - | [Local](#本地) | -* `quobyteAPIServer`:Quobyte API 服务器的格式是 - `"http(s)://api-server:7860"` -* `registry`:用于挂载卷的 Quobyte registry。你可以指定 registry 为 ``:`` - 或者如果你想指定多个 registry,你只需要在他们之间添加逗号,例如 - ``:,:,:``。 +* `quobyteAPIServer`:Quobyte API 服务器的格式是 `"http(s)://api-server:7860"` +* `registry`:用于挂载卷的 Quobyte 仓库。你可以指定仓库为 `:` + 或者如果你想指定多个 registry,在它们之间添加逗号,例如 + `:,:,:`。 主机可以是一个 IP 地址,或者如果你有正在运行的 DNS,你也可以提供 DNS 名称。 -* `adminSecretNamespace`:`adminSecretName`的 namespace。 +* `adminSecretNamespace`:`adminSecretName` 的名字空间。 默认值是 "default"。 -* `adminSecretName`:保存关于 Quobyte 用户和密码的 secret,用于对 API 服务器进行身份验证。 - 提供的 secret 必须有值为 "kubernetes.io/quobyte" 的 type 参数 和 `user` 与 `password` 的键值, +* `adminSecretName`:保存关于 Quobyte 用户和密码的 Secret,用于对 API 服务器进行身份验证。 + 提供的 secret 必须有值为 "kubernetes.io/quobyte" 的 type 参数和 `user` + 与 `password` 的键值, 例如以这种方式创建: - ```shell - kubectl create secret generic quobyte-admin-secret \ - --type="kubernetes.io/quobyte" --from-literal=key='opensesame' \ - --namespace=kube-system - ``` + ```shell + kubectl create secret generic quobyte-admin-secret \ + --type="kubernetes.io/quobyte" --from-literal=key='opensesame' \ + --namespace=kube-system + ``` * `user`:对这个用户映射的所有访问权限。默认是 "root"。 * `group`:对这个组映射的所有访问权限。默认是 "nfsnobody"。 -* `quobyteConfig`:使用指定的配置来创建卷。你可以创建一个新的配置,或者,可以修改 Web console 或 - quobyte CLI 中现有的配置。默认是 "BASE"。 -* `quobyteTenant`:使用指定的租户 ID 创建/删除卷。这个 Quobyte 租户必须已经于 Quobyte。 - 默认是 "DEFAULT"。 +* `quobyteConfig`:使用指定的配置来创建卷。你可以创建一个新的配置, + 或者,可以修改 Web 控制台或 quobyte CLI 中现有的配置。默认是 "BASE"。 +* `quobyteTenant`:使用指定的租户 ID 创建/删除卷。这个 Quobyte 租户必须 + 已经于 Quobyte 中存在。默认是 "DEFAULT"。 * `skuName`:Azure 存储帐户 Sku 层。默认为空。 * `location`:Azure 存储帐户位置。默认为空。 -* `storageAccount`:Azure 存储帐户名称。如果提供存储帐户,它必须位于与集群相同的资源组中,并且 `location` 是被忽略的。如果未提供存储帐户,则会在与群集相同的资源组中创建新的存储帐户。 +* `storageAccount`:Azure 存储帐户名称。 + 如果提供存储帐户,它必须位于与集群相同的资源组中,并且 `location` + 是被忽略的。如果未提供存储帐户,则会在与群集相同的资源组中创建新的存储帐户。 -- Premium VM 可以同时添加 Standard_LRS 和 Premium_LRS 磁盘,而 Standard 虚拟机只能添加 Standard_LRS 磁盘。 +- Premium VM 可以同时添加 Standard_LRS 和 Premium_LRS 磁盘,而 Standard + 虚拟机只能添加 Standard_LRS 磁盘。 - 托管虚拟机只能连接托管磁盘,非托管虚拟机只能连接非托管磁盘。 StorageOS Kubernetes 卷插件可以使 Secret 对象来指定用于访问 StorageOS API 的端点和凭据。 只有当默认值已被更改时,这才是必须的。 -secret 必须使用 `kubernetes.io/storageos` 类型创建,如以下命令: +Secret 必须使用 `kubernetes.io/storageos` 类型创建,如以下命令: ```shell kubectl create secret generic storageos-secret \ diff --git a/content/zh/docs/concepts/storage/volume-pvc-datasource.md b/content/zh/docs/concepts/storage/volume-pvc-datasource.md index 96838d402e..00571f1511 100644 --- a/content/zh/docs/concepts/storage/volume-pvc-datasource.md +++ b/content/zh/docs/concepts/storage/volume-pvc-datasource.md @@ -5,6 +5,11 @@ weight: 30 --- -本文档介绍 Kubernetes 中克隆现有 CSI 卷的概念。阅读前建议先熟悉[卷](/zh/docs/concepts/storage/volumes)。 +本文档介绍 Kubernetes 中克隆现有 CSI 卷的概念。阅读前建议先熟悉 +[卷](/zh/docs/concepts/storage/volumes)。 @@ -24,7 +30,6 @@ This document describes the concept of cloning existing CSI Volumes in Kubernete The {{< glossary_tooltip text="CSI" term_id="csi" >}} Volume Cloning feature adds support for specifying existing {{< glossary_tooltip text="PVC" term_id="persistent-volume-claim" >}}s in the `dataSource` field to indicate a user would like to clone a {{< glossary_tooltip term_id="volume" >}}. --> - ## 介绍 {{< glossary_tooltip text="CSI" term_id="csi" >}} 卷克隆功能增加了通过在 @@ -35,16 +40,14 @@ The {{< glossary_tooltip text="CSI" term_id="csi" >}} Volume Cloning feature add - -克隆,意思是为已有的 Kubernetes 卷创建副本,它可以像任何其它标准卷一样被使用。 +克隆(Clone),意思是为已有的 Kubernetes 卷创建副本,它可以像任何其它标准卷一样被使用。 唯一的区别就是配置后,后端设备将创建指定完全相同的副本,而不是创建一个“新的”空卷。 - 从 Kubernetes API 的角度看,克隆的实现只是在创建新的 PVC 时, 增加了指定一个现有 PVC 作为数据源的能力。源 PVC 必须是 bound 状态且可用的(不在使用中)。 @@ -61,7 +64,6 @@ Users need to be aware of the following when using this feature: - Default storage class can be used and storageClassName omitted in the spec * Cloning can only be performed between two volumes that use the same VolumeMode setting (if you request a block mode volume, the source MUST also be block mode) --> - * 克隆支持(`VolumePVCDataSource`)仅适用于 CSI 驱动。 * 克隆支持仅适用于 动态供应器。 * CSI 驱动可能实现,也可能未实现卷克隆功能。 @@ -75,9 +77,9 @@ Users need to be aware of the following when using this feature: -## 供应 +## 制备 克隆卷与其他任何 PVC 一样配置,除了需要增加 dataSource 来引用同一命名空间中现有的 PVC。 @@ -99,19 +101,17 @@ spec: name: pvc-1 ``` +{{< note >}} - -{{< note >}} 你必须为 `spec.resources.requests.storage` 指定一个值,并且你指定的值必须大于或等于源卷的值。 {{< /note >}} - 结果是一个名称为 `clone-of-pvc-1` 的新 PVC 与指定的源 `pvc-1` 拥有相同的内容。 - -## 用法 +## 使用 一旦新的 PVC 可用,被克隆的 PVC 像其他 PVC 一样被使用。 可以预期的是,新创建的 PVC 是一个独立的对象。 diff --git a/content/zh/docs/concepts/storage/volumes.md b/content/zh/docs/concepts/storage/volumes.md index cd2c09bcb2..81e4ebf738 100644 --- a/content/zh/docs/concepts/storage/volumes.md +++ b/content/zh/docs/concepts/storage/volumes.md @@ -5,6 +5,11 @@ weight: 10 --- Kubernetes 支持很多类型的卷。 {{< glossary_tooltip term_id="pod" text="Pod" >}} 可以同时使用任意数目的卷类型。 临时卷类型的生命周期与 Pod 相同,但持久卷可以比 Pod 的存活期长。 -因此,卷的存在时间会超出 Pod 中运行的所有容器,并且在容器重新启动时数据也会得到保留。 -当 Pod 不再存在时,临时卷也将不再存在。但是持久卷会继续存在。 +当 Pod 不再存在时,Kubernetes 也会销毁临时卷;不过 Kubernetes 不会销毁 +持久卷。对于给定 Pod 中任何类型的卷,在容器重启期间数据都不会丢失。 -卷的核心是包含一些数据的一个目录,Pod 中的容器可以访问该目录。 +卷的核心是一个目录,其中可能存有数据,Pod 中的容器可以访问该目录中的数据。 所采用的特定的卷类型将决定该目录如何形成的、使用何种介质保存数据以及目录中存放 的内容。 @@ -269,9 +273,9 @@ For more details, see the [`azureFile` volume plugin](https://github.com/kuberne -#### CSI 迁移 {#azurefile-csi-migration} +#### azureFile CSI 迁移 {#azurefile-csi-migration} -{{< feature-state for_k8s_version="v1.15" state="alpha" >}} +{{< feature-state for_k8s_version="v1.21" state="beta" >}} 启用 `azureFile` 的 `CSIMigration` 功能后,所有插件操作将从现有的树内插件重定向到 -`file.csi.azure.com` 容器存储接口(CSI)驱动程序。 -要使用此功能,必须在集群中安装 [Azure 文件 CSI 驱动程序](https://github.com/kubernetes-sigs/azurefile-csi-driver), -并且 `CSIMigration` 和 `CSIMigrationAzureFile` Alpha 功能特性必须被启用。 +`file.csi.azure.com` 容器存储接口(CSI)驱动程序。要使用此功能,必须在集群中安装 +[Azure 文件 CSI 驱动程序](https://github.com/kubernetes-sigs/azurefile-csi-driver), +并且 `CSIMigration` 和 `CSIMigrationAzureFile` +[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) +必须被启用。 + + +Azure 文件 CSI 驱动尚不支持为同一卷设置不同的 fsgroup。 +如果 AzureFile CSI 迁移被启用,用不同的 fsgroup 来使用同一卷也是不被支持的。 ### cephfs {#cephfs} @@ -356,20 +368,29 @@ spec: --> #### OpenStack CSI 迁移 -{{< feature-state for_k8s_version="v1.18" state="beta" >}} +{{< feature-state for_k8s_version="v1.21" state="beta" >}} -启用 Cinder 的 `CSIMigration` 功能后,所有插件操作会从现有的树内插件重定向到 +Cinder 的 `CSIMigration` 功能在 Kubernetes 1.21 版本中是默认被启用的。 +此特性会将插件的所有操作从现有的树内插件重定向到 `cinder.csi.openstack.org` 容器存储接口(CSI)驱动程序。 -为了使用此功能,必须在集群中安装 [OpenStack Cinder CSI 驱动程序](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md), -并且 `CSIMigration` 和 `CSIMigrationOpenStack` Beta 功能必须被启用。 +为了使用此功能,必须在集群中安装 +[OpenStack Cinder CSI 驱动程序](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md), +你可以通过设置 `CSIMigrationOpenStack` +[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) +为 `false` 来禁止 Cinder CSI 迁移。 +如果你禁用了 `CSIMigrationOpenStack` 功能特性,则树内的 Cinder 卷插件 +会负责 Cinder 卷存储管理的方方面面。 ### configMap @@ -1516,7 +1537,8 @@ RBD 的一个特性是它可以同时被多个用户以只读方式挂载。 这意味着你可以用数据集预先填充卷,然后根据需要在尽可能多的 Pod 中并行地使用卷。 不幸的是,RBD 卷只能由单个使用者以读写模式安装。不允许同时写入。 -更多详情请参考 [RBD 示例](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/rbd)。 +更多详情请参考 +[RBD 示例](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/rbd)。 +拒绝所有的请求。由于它没有实际意义,已废弃。 + ### AlwaysPullImages {#alwayspullimages} -拒绝所有的请求。由于没有实际意义,已废弃。 - ### CertificateApproval +该准入控制器监测没有请求任何特定 Ingress 类的 `Ingress` 对象的创建,并自动向其添加默认 Ingress 类。 +这样,没有任何特殊 Ingress 类需求的用户根本不需要关心它们,它们将获得默认 Ingress 类。 + + +当未配置默认 Ingress 类时,此准入控制器不执行任何操作。如果将多个 Ingress 类标记为默认 Ingress 类, +它将拒绝任何创建 `Ingress` 的操作,并显示错误。 +要修复此错误,管理员必须重新检查其 `IngressClass` 对象,并仅将其中一个标记为默认(通过注解 +"ingressclass.kubernetes.io/is-default-class")。 +此准入控制器会忽略所有 `Ingress` 更新操作,仅响应创建操作。 + + +关于 Ingress 类以及如何将 Ingress 类标记为默认的更多信息,请参见 +[ingress](/zh/docs/concepts/services-networking/ingress/)。 + ### DefaultStorageClass {#defaultstorageclass} -该准入控制器为 Pod 设置默认的容忍度,在 5 分钟内容忍 `notready:NoExecute` 和 +该准入控制器基于 k8s-apiserver 输入参数 `default-not-ready-toleration-seconds` 和 +`default-unreachable-toleration-seconds` 为 Pod 设置默认的容忍度,以容忍 `notready:NoExecute` 和 `unreachable:NoExecute` 污点。 (如果 Pod 尚未容忍 `node.kubernetes.io/not-ready:NoExecute` 和 `node.kubernetes.io/unreachable:NoExecute` 污点的话) +`default-not-ready-toleration-seconds` 和 `default-unreachable-toleration-seconds` 的默认值是 5 分钟。 -### DenyExecOnPrivileged {#denyexeconprivileged} - -{{< feature-state for_k8s_version="v1.13" state="deprecated" >}} - - -如果一个 pod 拥有一个特权容器,该准入控制器将拦截所有在该 pod 中执行 exec 命令的请求。 - - -此功能已合并至 [DenyEscalatingExec](#denyescalatingexec)。 -而 DenyExecOnPrivileged 准入插件已被废弃,并将在 v1.18 被移除。 - - -建议使用基于策略的准入插件(例如 [PodSecurityPolicy](#podsecuritypolicy) 和自定义准入插件), -该插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。 - -### DenyEscalatingExec {#denyescalatingexec} +### DenyEscalatingExec {#denyescalatingexec} {{< feature-state for_k8s_version="v1.13" state="deprecated" >}} @@ -336,17 +346,64 @@ attach 命令。这包括在特权模式运行的 Pod,可以访问主机 IPC 和访问主机 PID 名字空间的 Pod 。 -DenyExecOnPrivileged 准入插件已被废弃,并将在 v1.18 被移除。 +DenyExecOnPrivileged 准入插件已被废弃。 建议使用基于策略的准入插件(例如 [PodSecurityPolicy](#podsecuritypolicy) 和自定义准入插件), 该插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。 +### DenyExecOnPrivileged {#denyexeconprivileged} + +{{< feature-state for_k8s_version="v1.13" state="deprecated" >}} + + +如果一个 pod 拥有一个特权容器,该准入控制器将拦截所有在该 pod 中执行 exec 命令的请求。 + + +此功能已合并至 [DenyEscalatingExec](#denyescalatingexec)。 +而 DenyExecOnPrivileged 准入插件已被废弃。 + + +建议使用基于策略的准入插件(例如 [PodSecurityPolicy](#podsecuritypolicy) 和自定义准入插件), +该插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。 + +### DenyServiceExternalIPs + + +该准入控制器拒绝 `Service` 字段 `externalIPs` 的所有新规使用。 此功能非常强大(允许网络流量拦截), +并且无法很好地受策略控制。 启用后,群集用户将无法创建使用 `externalIPs` 的新服务,也无法在现有 +`Service` 对象上向 `externalIPs` 添加新值。 `externalIPs` 的现有使用不受影响,用户可以从现有 +`Service` 对象上的 `externalIPs` 中删除值。 + + +大多数用户根本不需要此功能,集群管理员应考虑将其禁用。 +确实需要使用此功能的集群应考虑使用一些自定义策略来管理其的使用。 + ### EventRateLimit {#eventratelimit} {{< feature-state for_k8s_version="v1.13" state="alpha" >}} @@ -437,7 +494,7 @@ for more details. 如果你禁用了 MutatingAdmissionWebhook,那么还必须使用 `--runtime-config` 标志禁止 -`admissionregistration.k8s.io/v1beta1` 组/版本中的 `MutatingWebhookConfiguration` +`admissionregistration.k8s.io/v1` 组/版本中的 `MutatingWebhookConfiguration` 对象(版本 >=1.9 时,这两个对象都是默认启用的)。 +该准入控制器检查传入的 `PersistentVolumeClaim` 调整大小请求,对其执行额外的验证操作。 + +{{< note >}} + +对调整卷大小的支持是一种 Alpha 特性。管理员必须将特性门控 `ExpandPersistentVolumes` +设置为 `true` 才能启用调整大小。 +{{< /note >}} + + +启用 `ExpandPersistentVolumes` 特性门控之后,建议将 `PersistentVolumeClaimResize` +准入控制器也启用。除非 PVC 的 `StorageClass` 明确地将 `allowVolumeExpansion` 设置为 +`true` 来显式启用调整大小。否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整。 + +例如:由以下 `StorageClass` 创建的所有 `PersistentVolumeClaim` 都支持卷容量扩充: + +```yaml +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: gluster-vol-default +provisioner: kubernetes.io/glusterfs +parameters: + resturl: "http://192.168.10.100:8080" + restuser: "" + secretNamespace: "" + secretName: "" +allowVolumeExpansion: true +``` + + +关于持久化卷申领的更多信息,请参见 +[PersistentVolumeClaims](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。 + ### PersistentVolumeLabel {#persistentvolumelabel} {{< feature-state for_k8s_version="v1.13" state="deprecated" >}} @@ -959,10 +1060,12 @@ PersistentVolumeLabel 已被废弃,标记持久卷已由 ### PodNodeSelector {#podnodeselector} +{{< feature-state for_k8s_version="v1.5" state="alpha" >}} + -该准入控制器通过读取名字空间注解和全局配置,来为名字空间中可以可以使用的节点选择器 +该准入控制器通过读取名字空间注解和全局配置,来为名字空间中可以使用的节点选择器 设置默认值并实施限制。 1. 如果 `Namespace` 的注解带有键 `scheduler.alpha.kubernetes.io/node-selector`, @@ -1056,7 +1159,7 @@ Conflicts result in rejection. 2. 如果名字空间缺少此类注解,则使用 `PodNodeSelector` 插件配置文件中定义的 `clusterDefaultNodeSelector` 作为节点选择算符。 3. 评估 Pod 节点选择算符和名字空间节点选择算符是否存在冲突。存在冲突将导致拒绝。 -4. 评估 pod 节点选择算符和名字空间的白名单定义的插件配置文件是否存在冲突。 +4. 评估 Pod 节点选择算符和特定于名字空间的被允许的选择算符所定义的插件配置文件是否存在冲突。 存在冲突将导致拒绝。 {{< note >}} @@ -1068,55 +1171,6 @@ PodNodeSelector 允许 Pod 强制在特定标签的节点上运行。 另请参阅 PodTolerationRestriction 准入插件,该插件可防止 Pod 在特定污点的节点上运行。 {{< /note >}} -### PersistentVolumeClaimResize {#persistentvolumeclaimresize} - - -该准入控制器检查传入的 `PersistentVolumeClaim` 调整大小请求,对其执行额外的验证操作。 - -{{< note >}} - -对调整卷大小的支持是一种 Alpha 特性。管理员必须将特性门控 `ExpandPersistentVolumes` -设置为 `true` 才能启用调整大小。 -{{< /note >}} - - -启用 `ExpandPersistentVolumes` 特性门控之后,建议将 `PersistentVolumeClaimResize` -准入控制器也启用。除非 PVC 的 `StorageClass` 明确地将 `allowVolumeExpansion` 设置为 -`true` 来显式启用调整大小。否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整。 - -例如:由以下 `StorageClass` 创建的所有 `PersistentVolumeClaim` 都支持卷容量扩充: - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: gluster-vol-default -provisioner: kubernetes.io/glusterfs -parameters: - resturl: "http://192.168.10.100:8080" - restuser: "" - secretNamespace: "" - secretName: "" -allowVolumeExpansion: true -``` - - -关于持久化卷申领的更多信息,请参见 -[PersistentVolumeClaims](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。 - ### PodSecurityPolicy {#podsecuritypolicy} `StorageObjectInUseProtection` 插件将 `kubernetes.io/pvc-protection` 或 `kubernetes.io/pv-protection` finalizers 添加到新创建的持久化卷声明(PVC) @@ -1302,8 +1363,6 @@ This admission controller {{< glossary_tooltip text="taints" term_id="taint" >}} ### ValidatingAdmissionWebhook {#validatingadmissionwebhook} -{{< feature-state for_k8s_version="v1.13" state="beta" >}} - 如果你禁用了 ValidatingAdmissionWebhook,还必须通过 `--runtime-config` 标志来禁用 -`admissionregistration.k8s.io/v1beta1` 组/版本中的 `ValidatingWebhookConfiguration` +`admissionregistration.k8s.io/v1` 组/版本中的 `ValidatingWebhookConfiguration` 对象(默认情况下在 1.9 版和更高版本中均处于启用状态)。 diff --git a/content/zh/docs/reference/config-api/_index.md b/content/zh/docs/reference/config-api/_index.md new file mode 100644 index 0000000000..9e72af1b50 --- /dev/null +++ b/content/zh/docs/reference/config-api/_index.md @@ -0,0 +1,5 @@ +--- +title: 配置 API +weight: 65 +--- + diff --git a/content/zh/docs/reference/config-api/apiserver-audit.v1.md b/content/zh/docs/reference/config-api/apiserver-audit.v1.md new file mode 100644 index 0000000000..c2e4a37704 --- /dev/null +++ b/content/zh/docs/reference/config-api/apiserver-audit.v1.md @@ -0,0 +1,616 @@ +--- +title: kube-apiserver Audit Configuration (v1) +content_type: tool-reference +package: audit.k8s.io/v1 +auto_generated: true +--- + + +## Resource Types + + +- [Event](#audit-k8s-io-v1-Event) +- [EventList](#audit-k8s-io-v1-EventList) +- [Policy](#audit-k8s-io-v1-Policy) +- [PolicyList](#audit-k8s-io-v1-PolicyList) + + + + +## `Event` {#audit-k8s-io-v1-Event} + + + + +**Appears in:** + +- [EventList](#audit-k8s-io-v1-EventList) + + +Event captures all the information that can be included in an API audit log. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
audit.k8s.io/v1
kind
string
Event
level [Required]
+Level +
+ AuditLevel at which event was generated
auditID [Required]
+k8s.io/apimachinery/pkg/types.UID +
+ Unique audit ID, generated for each request.
stage [Required]
+Stage +
+ Stage of the request handling when this event instance was generated.
requestURI [Required]
+string +
+ RequestURI is the request URI as sent by the client to a server.
verb [Required]
+string +
+ Verb is the kubernetes verb associated with the request. +For non-resource requests, this is the lower-cased HTTP method.
user [Required]
+authentication/v1.UserInfo +
+ Authenticated user information.
impersonatedUser
+authentication/v1.UserInfo +
+ Impersonated user information.
sourceIPs
+[]string +
+ Source IPs, from where the request originated and intermediate proxies.
userAgent
+string +
+ UserAgent records the user agent string reported by the client. +Note that the UserAgent is provided by the client, and must not be trusted.
objectRef
+ObjectReference +
+ Object reference this request is targeted at. +Does not apply for List-type requests, or non-resource requests.
responseStatus
+meta/v1.Status +
+ The response status, populated even when the ResponseObject is not a Status type. +For successful responses, this will only include the Code and StatusSuccess. +For non-status type error responses, this will be auto-populated with the error Message.
requestObject
+k8s.io/apimachinery/pkg/runtime.Unknown +
+ API object from the request, in JSON format. The RequestObject is recorded as-is in the request +(possibly re-encoded as JSON), prior to version conversion, defaulting, admission or +merging. It is an external versioned object type, and may not be a valid object on its own. +Omitted for non-resource requests. Only logged at Request Level and higher.
responseObject
+k8s.io/apimachinery/pkg/runtime.Unknown +
+ API object returned in the response, in JSON. The ResponseObject is recorded after conversion +to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged +at Response Level.
requestReceivedTimestamp
+meta/v1.MicroTime +
+ Time the request reached the apiserver.
stageTimestamp
+meta/v1.MicroTime +
+ Time the request reached current audit stage.
annotations
+map[string]string +
+ Annotations is an unstructured key value map stored with an audit event that may be set by +plugins invoked in the request serving chain, including authentication, authorization and +admission plugins. Note that these annotations are for the audit event, and do not correspond +to the metadata.annotations of the submitted object. Keys should uniquely identify the informing +component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values +should be short. Annotations are included in the Metadata level.
+ + + +## `EventList` {#audit-k8s-io-v1-EventList} + + + + + +EventList is a list of audit Events. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
audit.k8s.io/v1
kind
string
EventList
metadata
+meta/v1.ListMeta +
+ No description provided. +
items [Required]
+[]Event +
+ No description provided. +
+ + + +## `Policy` {#audit-k8s-io-v1-Policy} + + + + +**Appears in:** + +- [PolicyList](#audit-k8s-io-v1-PolicyList) + + +Policy defines the configuration of audit logging, and the rules for how different request +categories are logged. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
audit.k8s.io/v1
kind
string
Policy
metadata
+meta/v1.ObjectMeta +
+ ObjectMeta is included for interoperability with API infrastructure.Refer to the Kubernetes API documentation for the fields of the metadata field.
rules [Required]
+[]PolicyRule +
+ Rules specify the audit Level a request should be recorded at. +A request may match multiple rules, in which case the FIRST matching rule is used. +The default audit level is None, but can be overridden by a catch-all rule at the end of the list. +PolicyRules are strictly ordered.
omitStages
+[]Stage +
+ OmitStages is a list of stages for which no events are created. Note that this can also +be specified per rule in which case the union of both are omitted.
+ + + +## `PolicyList` {#audit-k8s-io-v1-PolicyList} + + + + + +PolicyList is a list of audit Policies. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
audit.k8s.io/v1
kind
string
PolicyList
metadata
+meta/v1.ListMeta +
+ No description provided. +
items [Required]
+[]Policy +
+ No description provided. +
+ + + +## `GroupResources` {#audit-k8s-io-v1-GroupResources} + + + + +**Appears in:** + +- [PolicyRule](#audit-k8s-io-v1-PolicyRule) + + +GroupResources represents resource kinds in an API group. + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
group
+string +
+ Group is the name of the API group that contains the resources. +The empty string represents the core API group.
resources
+[]string +
+ Resources is a list of resources this rule applies to. + +For example: +'pods' matches pods. +'pods/log' matches the log subresource of pods. +'∗' matches all resources and their subresources. +'pods/∗' matches all subresources of pods. +'∗/scale' matches all scale subresources. + +If wildcard is present, the validation rule will ensure resources do not +overlap with each other. + +An empty list implies all resources and subresources in this API groups apply.
resourceNames
+[]string +
+ ResourceNames is a list of resource instance names that the policy matches. +Using this field requires Resources to be specified. +An empty list implies that every instance of the resource is matched.
+ + + +## `Level` {#audit-k8s-io-v1-Level} + +(Alias of `string`) + + +**Appears in:** + +- [Event](#audit-k8s-io-v1-Event) + +- [PolicyRule](#audit-k8s-io-v1-PolicyRule) + + +Level defines the amount of information logged during auditing + + + + + +## `ObjectReference` {#audit-k8s-io-v1-ObjectReference} + + + + +**Appears in:** + +- [Event](#audit-k8s-io-v1-Event) + + +ObjectReference contains enough information to let you inspect or modify the referred object. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
resource
+string +
+ No description provided. +
namespace
+string +
+ No description provided. +
name
+string +
+ No description provided. +
uid
+k8s.io/apimachinery/pkg/types.UID +
+ No description provided. +
apiGroup
+string +
+ APIGroup is the name of the API group that contains the referred object. +The empty string represents the core API group.
apiVersion
+string +
+ APIVersion is the version of the API group that contains the referred object.
resourceVersion
+string +
+ No description provided. +
subresource
+string +
+ No description provided. +
+ + + +## `PolicyRule` {#audit-k8s-io-v1-PolicyRule} + + + + +**Appears in:** + +- [Policy](#audit-k8s-io-v1-Policy) + + +PolicyRule maps requests based off metadata to an audit Level. +Requests must match the rules of every field (an intersection of rules). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
level [Required]
+Level +
+ The Level that requests matching this rule are recorded at.
users
+[]string +
+ The users (by authenticated user name) this rule applies to. +An empty list implies every user.
userGroups
+[]string +
+ The user groups this rule applies to. A user is considered matching +if it is a member of any of the UserGroups. +An empty list implies every user group.
verbs
+[]string +
+ The verbs that match this rule. +An empty list implies every verb.
resources
+[]GroupResources +
+ Resources that this rule matches. An empty list implies all kinds in all API groups.
namespaces
+[]string +
+ Namespaces that this rule matches. +The empty string "" matches non-namespaced resources. +An empty list implies every namespace.
nonResourceURLs
+[]string +
+ NonResourceURLs is a set of URL paths that should be audited. +∗s are allowed, but only as the full, final step in the path. +Examples: + "/metrics" - Log requests for apiserver metrics + "/healthz∗" - Log all health checks
omitStages
+[]Stage +
+ OmitStages is a list of stages for which no events are created. Note that this can also +be specified policy wide in which case the union of both are omitted. +An empty list means no restrictions will apply.
+ + + +## `Stage` {#audit-k8s-io-v1-Stage} + +(Alias of `string`) + + +**Appears in:** + +- [Event](#audit-k8s-io-v1-Event) + +- [Policy](#audit-k8s-io-v1-Policy) + +- [PolicyRule](#audit-k8s-io-v1-PolicyRule) + + +Stage defines the stages in request handling that audit events may be generated. diff --git a/content/zh/docs/reference/config-api/apiserver-webhookadmission.v1.md b/content/zh/docs/reference/config-api/apiserver-webhookadmission.v1.md new file mode 100644 index 0000000000..fb45ca7b1a --- /dev/null +++ b/content/zh/docs/reference/config-api/apiserver-webhookadmission.v1.md @@ -0,0 +1,46 @@ +--- +title: WebhookAdmission Configuration (v1) +content_type: tool-reference +package: apiserver.config.k8s.io/v1 +auto_generated: true +--- +Package v1 is the v1 version of the API. + +## Resource Types + + +- [WebhookAdmission](#apiserver-config-k8s-io-v1-WebhookAdmission) + + + + +## `WebhookAdmission` {#apiserver-config-k8s-io-v1-WebhookAdmission} + + + + + +WebhookAdmission provides configuration for the webhook admission controller. + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
apiserver.config.k8s.io/v1
kind
string
WebhookAdmission
kubeConfigFile [Required]
+string +
+ KubeConfigFile is the path to the kubeconfig file.
+ + diff --git a/content/zh/docs/reference/config-api/client-authentication.v1beta1.md b/content/zh/docs/reference/config-api/client-authentication.v1beta1.md new file mode 100644 index 0000000000..e78edd23f6 --- /dev/null +++ b/content/zh/docs/reference/config-api/client-authentication.v1beta1.md @@ -0,0 +1,252 @@ +--- +title: Client Authentication (v1beta1) +content_type: tool-reference +package: client.authentication.k8s.io/v1beta1 +auto_generated: true +--- + + +## Resource Types + + +- [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential) + + + + +## `ExecCredential` {#client-authentication-k8s-io-v1beta1-ExecCredential} + + + + + +ExecCredential is used by exec-based plugins to communicate credentials to +HTTP transports. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
client.authentication.k8s.io/v1beta1
kind
string
ExecCredential
spec [Required]
+ExecCredentialSpec +
+ Spec holds information passed to the plugin by the transport.
status
+ExecCredentialStatus +
+ Status is filled in by the plugin and holds the credentials that the transport +should use to contact the API.
+ + + +## `Cluster` {#client-authentication-k8s-io-v1beta1-Cluster} + + + + +**Appears in:** + +- [ExecCredentialSpec](#client-authentication-k8s-io-v1beta1-ExecCredentialSpec) + + +Cluster contains information to allow an exec plugin to communicate +with the kubernetes cluster being authenticated to. + +To ensure that this struct contains everything someone would need to communicate +with a kubernetes cluster (just like they would via a kubeconfig), the fields +should shadow "k8s.io/client-go/tools/clientcmd/api/v1".Cluster, with the exception +of CertificateAuthority, since CA data will always be passed to the plugin as bytes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
server [Required]
+string +
+ Server is the address of the kubernetes cluster (https://hostname:port).
tls-server-name
+string +
+ TLSServerName is passed to the server for SNI and is used in the client to +check server certificates against. If ServerName is empty, the hostname +used to contact the server is used.
insecure-skip-tls-verify
+bool +
+ InsecureSkipTLSVerify skips the validity check for the server's certificate. +This will make your HTTPS connections insecure.
certificate-authority-data
+[]byte +
+ CAData contains PEM-encoded certificate authority certificates. +If empty, system roots should be used.
proxy-url
+string +
+ ProxyURL is the URL to the proxy to be used for all requests to this +cluster.
config
+k8s.io/apimachinery/pkg/runtime.RawExtension +
+ Config holds additional config data that is specific to the exec +plugin with regards to the cluster being authenticated to. + +This data is sourced from the clientcmd Cluster object's +extensions[client.authentication.k8s.io/exec] field: + +clusters: +- name: my-cluster + cluster: + ... + extensions: + - name: client.authentication.k8s.io/exec # reserved extension name for per cluster exec config + extension: + audience: 06e3fbd18de8 # arbitrary config + +In some environments, the user config may be exactly the same across many clusters +(i.e. call this exec plugin) minus some details that are specific to each cluster +such as the audience. This field allows the per cluster config to be directly +specified with the cluster info. Using this field to store secret data is not +recommended as one of the prime benefits of exec plugins is that no secrets need +to be stored directly in the kubeconfig.
+ + + +## `ExecCredentialSpec` {#client-authentication-k8s-io-v1beta1-ExecCredentialSpec} + + + + +**Appears in:** + +- [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential) + + +ExecCredentialSpec holds request and runtime specific information provided by +the transport. + + + + + + + + + + + + + +
FieldDescription
cluster
+Cluster +
+ Cluster contains information to allow an exec plugin to communicate with the +kubernetes cluster being authenticated to. Note that Cluster is non-nil only +when provideClusterInfo is set to true in the exec provider config (i.e., +ExecConfig.ProvideClusterInfo).
+ + + +## `ExecCredentialStatus` {#client-authentication-k8s-io-v1beta1-ExecCredentialStatus} + + + + +**Appears in:** + +- [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential) + + +ExecCredentialStatus holds credentials for the transport to use. + +Token and ClientKeyData are sensitive fields. This data should only be +transmitted in-memory between client and exec plugin process. Exec plugin +itself should at least be protected via file permissions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
expirationTimestamp
+meta/v1.Time +
+ ExpirationTimestamp indicates a time when the provided credentials expire.
token [Required]
+string +
+ Token is a bearer token used by the client for request authentication.
clientCertificateData [Required]
+string +
+ PEM-encoded client TLS certificates (including intermediates, if any).
clientKeyData [Required]
+string +
+ PEM-encoded private key for the above certificate.
+ + diff --git a/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta1.md b/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta1.md new file mode 100644 index 0000000000..ac32e65674 --- /dev/null +++ b/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta1.md @@ -0,0 +1,2156 @@ +--- +title: kube-scheduler Configuration (v1beta1) +content_type: tool-reference +package: kubescheduler.config.k8s.io/v1 +auto_generated: true +--- + + +## Resource Types + + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) +- [DefaultPreemptionArgs](#kubescheduler-config-k8s-io-v1beta1-DefaultPreemptionArgs) +- [InterPodAffinityArgs](#kubescheduler-config-k8s-io-v1beta1-InterPodAffinityArgs) +- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration) +- [NodeAffinityArgs](#kubescheduler-config-k8s-io-v1beta1-NodeAffinityArgs) +- [NodeLabelArgs](#kubescheduler-config-k8s-io-v1beta1-NodeLabelArgs) +- [NodeResourcesFitArgs](#kubescheduler-config-k8s-io-v1beta1-NodeResourcesFitArgs) +- [NodeResourcesLeastAllocatedArgs](#kubescheduler-config-k8s-io-v1beta1-NodeResourcesLeastAllocatedArgs) +- [NodeResourcesMostAllocatedArgs](#kubescheduler-config-k8s-io-v1beta1-NodeResourcesMostAllocatedArgs) +- [PodTopologySpreadArgs](#kubescheduler-config-k8s-io-v1beta1-PodTopologySpreadArgs) +- [RequestedToCapacityRatioArgs](#kubescheduler-config-k8s-io-v1beta1-RequestedToCapacityRatioArgs) +- [ServiceAffinityArgs](#kubescheduler-config-k8s-io-v1beta1-ServiceAffinityArgs) +- [VolumeBindingArgs](#kubescheduler-config-k8s-io-v1beta1-VolumeBindingArgs) + + + + +## `Policy` {#kubescheduler-config-k8s-io-v1-Policy} + + + + + +Policy describes a struct for a policy resource used in api. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1
kind
string
Policy
predicates [Required]
+[]PredicatePolicy +
+ Holds the information to configure the fit predicate functions
priorities [Required]
+[]PriorityPolicy +
+ Holds the information to configure the priority functions
extenders [Required]
+[]LegacyExtender +
+ Holds the information to communicate with the extender(s)
hardPodAffinitySymmetricWeight [Required]
+int32 +
+ RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule +corresponding to every RequiredDuringScheduling affinity rule. +HardPodAffinitySymmetricWeight represents the weight of implicit PreferredDuringScheduling affinity rule, in the range 1-100.
alwaysCheckAllPredicates [Required]
+bool +
+ When AlwaysCheckAllPredicates is set to true, scheduler checks all +the configured predicates even after one or more of them fails. +When the flag is set to false, scheduler skips checking the rest +of the predicates after it finds one predicate that failed.
+ + + +## `ExtenderManagedResource` {#kubescheduler-config-k8s-io-v1-ExtenderManagedResource} + + + + +**Appears in:** + +- [Extender](#kubescheduler-config-k8s-io-v1beta1-Extender) + +- [LegacyExtender](#kubescheduler-config-k8s-io-v1-LegacyExtender) + + +ExtenderManagedResource describes the arguments of extended resources +managed by an extender. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name is the extended resource name.
ignoredByScheduler [Required]
+bool +
+ IgnoredByScheduler indicates whether kube-scheduler should ignore this +resource when applying predicates.
+ + + +## `ExtenderTLSConfig` {#kubescheduler-config-k8s-io-v1-ExtenderTLSConfig} + + + + +**Appears in:** + +- [Extender](#kubescheduler-config-k8s-io-v1beta1-Extender) + +- [LegacyExtender](#kubescheduler-config-k8s-io-v1-LegacyExtender) + + +ExtenderTLSConfig contains settings to enable TLS with extender + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
insecure [Required]
+bool +
+ Server should be accessed without verifying the TLS certificate. For testing only.
serverName [Required]
+string +
+ ServerName is passed to the server for SNI and is used in the client to check server +certificates against. If ServerName is empty, the hostname used to contact the +server is used.
certFile [Required]
+string +
+ Server requires TLS client certificate authentication
keyFile [Required]
+string +
+ Server requires TLS client certificate authentication
caFile [Required]
+string +
+ Trusted root certificates for server
certData [Required]
+[]byte +
+ CertData holds PEM-encoded bytes (typically read from a client certificate file). +CertData takes precedence over CertFile
keyData [Required]
+[]byte +
+ KeyData holds PEM-encoded bytes (typically read from a client certificate key file). +KeyData takes precedence over KeyFile
caData [Required]
+[]byte +
+ CAData holds PEM-encoded bytes (typically read from a root certificates bundle). +CAData takes precedence over CAFile
+ + + +## `LabelPreference` {#kubescheduler-config-k8s-io-v1-LabelPreference} + + + + +**Appears in:** + +- [PriorityArgument](#kubescheduler-config-k8s-io-v1-PriorityArgument) + + +LabelPreference holds the parameters that are used to configure the corresponding priority function + + + + + + + + + + + + + + + + + + +
FieldDescription
label [Required]
+string +
+ Used to identify node "groups"
presence [Required]
+bool +
+ This is a boolean flag +If true, higher priority is given to nodes that have the label +If false, higher priority is given to nodes that do not have the label
+ + + +## `LabelsPresence` {#kubescheduler-config-k8s-io-v1-LabelsPresence} + + + + +**Appears in:** + +- [PredicateArgument](#kubescheduler-config-k8s-io-v1-PredicateArgument) + + +LabelsPresence holds the parameters that are used to configure the corresponding predicate in scheduler policy configuration. + + + + + + + + + + + + + + + + + + +
FieldDescription
labels [Required]
+[]string +
+ The list of labels that identify node "groups" +All of the labels should be either present (or absent) for the node to be considered a fit for hosting the pod
presence [Required]
+bool +
+ The boolean flag that indicates whether the labels should be present or absent from the node
+ + + +## `LegacyExtender` {#kubescheduler-config-k8s-io-v1-LegacyExtender} + + + + +**Appears in:** + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + +LegacyExtender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, +it is assumed that the extender chose not to provide that extension. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
urlPrefix [Required]
+string +
+ URLPrefix at which the extender is available
filterVerb [Required]
+string +
+ Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender.
preemptVerb [Required]
+string +
+ Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender.
prioritizeVerb [Required]
+string +
+ Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender.
weight [Required]
+int64 +
+ The numeric multiplier for the node scores that the prioritize call generates. +The weight should be a positive integer
bindVerb [Required]
+string +
+ Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. +If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender +can implement this function.
enableHttps [Required]
+bool +
+ EnableHTTPS specifies whether https should be used to communicate with the extender
tlsConfig [Required]
+ExtenderTLSConfig +
+ TLSConfig specifies the transport layer security config
httpTimeout [Required]
+time.Duration +
+ HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize +timeout is ignored, k8s/other extenders priorities are used to select the node.
nodeCacheCapable [Required]
+bool +
+ NodeCacheCapable specifies that the extender is capable of caching node information, +so the scheduler should only send minimal information about the eligible nodes +assuming that the extender already cached full details of all nodes in the cluster
managedResources
+[]ExtenderManagedResource +
+ ManagedResources is a list of extended resources that are managed by +this extender. +- A pod will be sent to the extender on the Filter, Prioritize and Bind + (if the extender is the binder) phases iff the pod requests at least + one of the extended resources in this list. If empty or unspecified, + all pods will be sent to this extender. +- If IgnoredByScheduler is set to true for a resource, kube-scheduler + will skip checking the resource in predicates.
ignorable [Required]
+bool +
+ Ignorable specifies if the extender is ignorable, i.e. scheduling should not +fail when the extender returns an error or is not reachable.
+ + + +## `PredicateArgument` {#kubescheduler-config-k8s-io-v1-PredicateArgument} + + + + +**Appears in:** + +- [PredicatePolicy](#kubescheduler-config-k8s-io-v1-PredicatePolicy) + + +PredicateArgument represents the arguments to configure predicate functions in scheduler policy configuration. +Only one of its members may be specified + + + + + + + + + + + + + + + + + + +
FieldDescription
serviceAffinity [Required]
+ServiceAffinity +
+ The predicate that provides affinity for pods belonging to a service +It uses a label to identify nodes that belong to the same "group"
labelsPresence [Required]
+LabelsPresence +
+ The predicate that checks whether a particular node has a certain label +defined or not, regardless of value
+ + + +## `PredicatePolicy` {#kubescheduler-config-k8s-io-v1-PredicatePolicy} + + + + +**Appears in:** + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + +PredicatePolicy describes a struct of a predicate policy. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Identifier of the predicate policy +For a custom predicate, the name can be user-defined +For the Kubernetes provided predicates, the name is the identifier of the pre-defined predicate
argument [Required]
+PredicateArgument +
+ Holds the parameters to configure the given predicate
+ + + +## `PriorityArgument` {#kubescheduler-config-k8s-io-v1-PriorityArgument} + + + + +**Appears in:** + +- [PriorityPolicy](#kubescheduler-config-k8s-io-v1-PriorityPolicy) + + +PriorityArgument represents the arguments to configure priority functions in scheduler policy configuration. +Only one of its members may be specified + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
serviceAntiAffinity [Required]
+ServiceAntiAffinity +
+ The priority function that ensures a good spread (anti-affinity) for pods belonging to a service +It uses a label to identify nodes that belong to the same "group"
labelPreference [Required]
+LabelPreference +
+ The priority function that checks whether a particular node has a certain label +defined or not, regardless of value
requestedToCapacityRatioArguments [Required]
+RequestedToCapacityRatioArguments +
+ The RequestedToCapacityRatio priority function is parametrized with function shape.
+ + + +## `PriorityPolicy` {#kubescheduler-config-k8s-io-v1-PriorityPolicy} + + + + +**Appears in:** + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + +PriorityPolicy describes a struct of a priority policy. + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Identifier of the priority policy +For a custom priority, the name can be user-defined +For the Kubernetes provided priority functions, the name is the identifier of the pre-defined priority function
weight [Required]
+int64 +
+ The numeric multiplier for the node scores that the priority function generates +The weight should be non-zero and can be a positive or a negative integer
argument [Required]
+PriorityArgument +
+ Holds the parameters to configure the given priority function
+ + + +## `RequestedToCapacityRatioArguments` {#kubescheduler-config-k8s-io-v1-RequestedToCapacityRatioArguments} + + + + +**Appears in:** + +- [PriorityArgument](#kubescheduler-config-k8s-io-v1-PriorityArgument) + + +RequestedToCapacityRatioArguments holds arguments specific to RequestedToCapacityRatio priority function. + + + + + + + + + + + + + + + + + + +
FieldDescription
shape [Required]
+[]UtilizationShapePoint +
+ Array of point defining priority function shape.
resources [Required]
+[]ResourceSpec +
+ No description provided. +
+ + + +## `ResourceSpec` {#kubescheduler-config-k8s-io-v1-ResourceSpec} + + + + +**Appears in:** + +- [RequestedToCapacityRatioArguments](#kubescheduler-config-k8s-io-v1-RequestedToCapacityRatioArguments) + + +ResourceSpec represents single resource and weight for bin packing of priority RequestedToCapacityRatioArguments. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name of the resource to be managed by RequestedToCapacityRatio function.
weight [Required]
+int64 +
+ Weight of the resource.
+ + + +## `ServiceAffinity` {#kubescheduler-config-k8s-io-v1-ServiceAffinity} + + + + +**Appears in:** + +- [PredicateArgument](#kubescheduler-config-k8s-io-v1-PredicateArgument) + + +ServiceAffinity holds the parameters that are used to configure the corresponding predicate in scheduler policy configuration. + + + + + + + + + + + + + +
FieldDescription
labels [Required]
+[]string +
+ The list of labels that identify node "groups" +All of the labels should match for the node to be considered a fit for hosting the pod
+ + + +## `ServiceAntiAffinity` {#kubescheduler-config-k8s-io-v1-ServiceAntiAffinity} + + + + +**Appears in:** + +- [PriorityArgument](#kubescheduler-config-k8s-io-v1-PriorityArgument) + + +ServiceAntiAffinity holds the parameters that are used to configure the corresponding priority function + + + + + + + + + + + + + +
FieldDescription
label [Required]
+string +
+ Used to identify node "groups"
+ + + +## `UtilizationShapePoint` {#kubescheduler-config-k8s-io-v1-UtilizationShapePoint} + + + + +**Appears in:** + +- [RequestedToCapacityRatioArguments](#kubescheduler-config-k8s-io-v1-RequestedToCapacityRatioArguments) + + +UtilizationShapePoint represents single point of priority function shape. + + + + + + + + + + + + + + + + + + +
FieldDescription
utilization [Required]
+int32 +
+ Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100.
score [Required]
+int32 +
+ Score assigned to given utilization (y axis). Valid values are 0 to 10.
+ + + + + +## `ClientConnectionConfiguration` {#ClientConnectionConfiguration} + + + + +**Appears in:** + +- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration) + + +ClientConnectionConfiguration contains details for constructing a client. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
kubeconfig [Required]
+string +
+ kubeconfig is the path to a KubeConfig file.
acceptContentTypes [Required]
+string +
+ acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the +default value of 'application/json'. This field will control all connections to the server used by a particular +client.
contentType [Required]
+string +
+ contentType is the content type used when sending data to the server from this client.
qps [Required]
+float32 +
+ qps controls the number of queries per second allowed for this connection.
burst [Required]
+int32 +
+ burst allows extra queries to accumulate when a client is exceeding its rate.
+ +## `DebuggingConfiguration` {#DebuggingConfiguration} + + + + +**Appears in:** + +- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration) + + +DebuggingConfiguration holds configuration for Debugging related features. + + + + + + + + + + + + + + + + + + +
FieldDescription
enableProfiling [Required]
+bool +
+ enableProfiling enables profiling via web interface host:port/debug/pprof/
enableContentionProfiling [Required]
+bool +
+ enableContentionProfiling enables lock contention profiling, if +enableProfiling is true.
+ +## `LeaderElectionConfiguration` {#LeaderElectionConfiguration} + + + + +**Appears in:** + +- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration) + + +LeaderElectionConfiguration defines the configuration of leader election +clients for components that can run with leader election enabled. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
leaderElect [Required]
+bool +
+ leaderElect enables a leader election client to gain leadership +before executing the main loop. Enable this when running replicated +components for high availability.
leaseDuration [Required]
+meta/v1.Duration +
+ leaseDuration is the duration that non-leader candidates will wait +after observing a leadership renewal until attempting to acquire +leadership of a led but unrenewed leader slot. This is effectively the +maximum duration that a leader can be stopped before it is replaced +by another candidate. This is only applicable if leader election is +enabled.
renewDeadline [Required]
+meta/v1.Duration +
+ renewDeadline is the interval between attempts by the acting master to +renew a leadership slot before it stops leading. This must be less +than or equal to the lease duration. This is only applicable if leader +election is enabled.
retryPeriod [Required]
+meta/v1.Duration +
+ retryPeriod is the duration the clients should wait between attempting +acquisition and renewal of a leadership. This is only applicable if +leader election is enabled.
resourceLock [Required]
+string +
+ resourceLock indicates the resource object type that will be used to lock +during leader election cycles.
resourceName [Required]
+string +
+ resourceName indicates the name of resource object that will be used to lock +during leader election cycles.
resourceNamespace [Required]
+string +
+ resourceName indicates the namespace of resource object that will be used to lock +during leader election cycles.
+ +## `LoggingConfiguration` {#LoggingConfiguration} + + + + +**Appears in:** + +- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration) + + +LoggingConfiguration contains logging options +Refer [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) for more information. + + + + + + + + + + + + + + + + + + +
FieldDescription
format [Required]
+string +
+ Format Flag specifies the structure of log messages. +default value of format is `text`
sanitization [Required]
+bool +
+ [Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens). +Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.`)
+ + + + +## `DefaultPreemptionArgs` {#kubescheduler-config-k8s-io-v1beta1-DefaultPreemptionArgs} + + + + + +DefaultPreemptionArgs holds arguments used to configure the +DefaultPreemption plugin. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
DefaultPreemptionArgs
minCandidateNodesPercentage [Required]
+int32 +
+ MinCandidateNodesPercentage is the minimum number of candidates to +shortlist when dry running preemption as a percentage of number of nodes. +Must be in the range [0, 100]. Defaults to 10% of the cluster size if +unspecified.
minCandidateNodesAbsolute [Required]
+int32 +
+ MinCandidateNodesAbsolute is the absolute minimum number of candidates to +shortlist. The likely number of candidates enumerated for dry running +preemption is given by the formula: +numCandidates = max(numNodes ∗ minCandidateNodesPercentage, minCandidateNodesAbsolute) +We say "likely" because there are other factors such as PDB violations +that play a role in the number of candidates shortlisted. Must be at least +0 nodes. Defaults to 100 nodes if unspecified.
+ + + +## `InterPodAffinityArgs` {#kubescheduler-config-k8s-io-v1beta1-InterPodAffinityArgs} + + + + + +InterPodAffinityArgs holds arguments used to configure the InterPodAffinity plugin. + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
InterPodAffinityArgs
hardPodAffinityWeight [Required]
+int32 +
+ HardPodAffinityWeight is the scoring weight for existing pods with a +matching hard affinity to the incoming pod.
+ + + +## `KubeSchedulerConfiguration` {#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration} + + + + + +KubeSchedulerConfiguration configures a scheduler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
KubeSchedulerConfiguration
parallelism [Required]
+int32 +
+ Parallelism defines the amount of parallelism in algorithms for scheduling a Pods. Must be greater than 0. Defaults to 16
leaderElection [Required]
+LeaderElectionConfiguration +
+ LeaderElection defines the configuration of leader election client.
clientConnection [Required]
+ClientConnectionConfiguration +
+ ClientConnection specifies the kubeconfig file and client connection +settings for the proxy server to use when communicating with the apiserver.
healthzBindAddress [Required]
+string +
+ HealthzBindAddress is the IP address and port for the health check server to serve on, +defaulting to 0.0.0.0:10251
metricsBindAddress [Required]
+string +
+ MetricsBindAddress is the IP address and port for the metrics server to +serve on, defaulting to 0.0.0.0:10251.
DebuggingConfiguration [Required]
+DebuggingConfiguration +
(Members of DebuggingConfiguration are embedded into this type.) + DebuggingConfiguration holds configuration for Debugging related features +TODO: We might wanna make this a substruct like Debugging componentbaseconfigv1alpha1.DebuggingConfiguration
percentageOfNodesToScore [Required]
+int32 +
+ PercentageOfNodesToScore is the percentage of all nodes that once found feasible +for running a pod, the scheduler stops its search for more feasible nodes in +the cluster. This helps improve scheduler's performance. Scheduler always tries to find +at least "minFeasibleNodesToFind" feasible nodes no matter what the value of this flag is. +Example: if the cluster size is 500 nodes and the value of this flag is 30, +then scheduler stops finding further feasible nodes once it finds 150 feasible ones. +When the value is 0, default percentage (5%--50% based on the size of the cluster) of the +nodes will be scored.
podInitialBackoffSeconds [Required]
+int64 +
+ PodInitialBackoffSeconds is the initial backoff for unschedulable pods. +If specified, it must be greater than 0. If this value is null, the default value (1s) +will be used.
podMaxBackoffSeconds [Required]
+int64 +
+ PodMaxBackoffSeconds is the max backoff for unschedulable pods. +If specified, it must be greater than podInitialBackoffSeconds. If this value is null, +the default value (10s) will be used.
profiles [Required]
+[]KubeSchedulerProfile +
+ Profiles are scheduling profiles that kube-scheduler supports. Pods can +choose to be scheduled under a particular profile by setting its associated +scheduler name. Pods that don't specify any scheduler name are scheduled +with the "default-scheduler" profile, if present here.
extenders [Required]
+[]Extender +
+ Extenders are the list of scheduler extenders, each holding the values of how to communicate +with the extender. These extenders are shared by all scheduler profiles.
+ + + +## `NodeAffinityArgs` {#kubescheduler-config-k8s-io-v1beta1-NodeAffinityArgs} + + + + + +NodeAffinityArgs holds arguments to configure the NodeAffinity plugin. + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
NodeAffinityArgs
addedAffinity
+core/v1.NodeAffinity +
+ AddedAffinity is applied to all Pods additionally to the NodeAffinity +specified in the PodSpec. That is, Nodes need to satisfy AddedAffinity +AND .spec.NodeAffinity. AddedAffinity is empty by default (all Nodes +match). +When AddedAffinity is used, some Pods with affinity requirements that match +a specific Node (such as Daemonset Pods) might remain unschedulable.
+ + + +## `NodeLabelArgs` {#kubescheduler-config-k8s-io-v1beta1-NodeLabelArgs} + + + + + +NodeLabelArgs holds arguments used to configure the NodeLabel plugin. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
NodeLabelArgs
presentLabels [Required]
+[]string +
+ PresentLabels should be present for the node to be considered a fit for hosting the pod
absentLabels [Required]
+[]string +
+ AbsentLabels should be absent for the node to be considered a fit for hosting the pod
presentLabelsPreference [Required]
+[]string +
+ Nodes that have labels in the list will get a higher score.
absentLabelsPreference [Required]
+[]string +
+ Nodes that don't have labels in the list will get a higher score.
+ + + +## `NodeResourcesFitArgs` {#kubescheduler-config-k8s-io-v1beta1-NodeResourcesFitArgs} + + + + + +NodeResourcesFitArgs holds arguments used to configure the NodeResourcesFit plugin. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
NodeResourcesFitArgs
ignoredResources [Required]
+[]string +
+ IgnoredResources is the list of resources that NodeResources fit filter +should ignore.
ignoredResourceGroups [Required]
+[]string +
+ IgnoredResourceGroups defines the list of resource groups that NodeResources fit filter should ignore. +e.g. if group is ["example.com"], it will ignore all resource names that begin +with "example.com", such as "example.com/aaa" and "example.com/bbb". +A resource group name can't contain '/'.
+ + + +## `NodeResourcesLeastAllocatedArgs` {#kubescheduler-config-k8s-io-v1beta1-NodeResourcesLeastAllocatedArgs} + + + + + +NodeResourcesLeastAllocatedArgs holds arguments used to configure NodeResourcesLeastAllocated plugin. + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
NodeResourcesLeastAllocatedArgs
resources [Required]
+[]ResourceSpec +
+ Resources to be managed, if no resource is provided, default resource set with both +the weight of "cpu" and "memory" set to "1" will be applied. +Resource with "0" weight will not accountable for the final score.
+ + + +## `NodeResourcesMostAllocatedArgs` {#kubescheduler-config-k8s-io-v1beta1-NodeResourcesMostAllocatedArgs} + + + + + +NodeResourcesMostAllocatedArgs holds arguments used to configure NodeResourcesMostAllocated plugin. + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
NodeResourcesMostAllocatedArgs
resources [Required]
+[]ResourceSpec +
+ Resources to be managed, if no resource is provided, default resource set with both +the weight of "cpu" and "memory" set to "1" will be applied. +Resource with "0" weight will not accountable for the final score.
+ + + +## `PodTopologySpreadArgs` {#kubescheduler-config-k8s-io-v1beta1-PodTopologySpreadArgs} + + + + + +PodTopologySpreadArgs holds arguments used to configure the PodTopologySpread plugin. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
PodTopologySpreadArgs
defaultConstraints
+[]core/v1.TopologySpreadConstraint +
+ DefaultConstraints defines topology spread constraints to be applied to +Pods that don't define any in `pod.spec.topologySpreadConstraints`. +`.defaultConstraints[∗].labelSelectors` must be empty, as they are +deduced from the Pod's membership to Services, ReplicationControllers, +ReplicaSets or StatefulSets. +When not empty, .defaultingType must be "List".
defaultingType
+PodTopologySpreadConstraintsDefaulting +
+ DefaultingType determines how .defaultConstraints are deduced. Can be one +of "System" or "List". + +- "System": Use kubernetes defined constraints that spread Pods among + Nodes and Zones. +- "List": Use constraints defined in .defaultConstraints. + +Defaults to "List" if feature gate DefaultPodTopologySpread is disabled +and to "System" if enabled.
+ + + +## `RequestedToCapacityRatioArgs` {#kubescheduler-config-k8s-io-v1beta1-RequestedToCapacityRatioArgs} + + + + + +RequestedToCapacityRatioArgs holds arguments used to configure RequestedToCapacityRatio plugin. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
RequestedToCapacityRatioArgs
shape [Required]
+[]UtilizationShapePoint +
+ Points defining priority function shape
resources [Required]
+[]ResourceSpec +
+ Resources to be managed
+ + + +## `ServiceAffinityArgs` {#kubescheduler-config-k8s-io-v1beta1-ServiceAffinityArgs} + + + + + +ServiceAffinityArgs holds arguments used to configure the ServiceAffinity plugin. + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
ServiceAffinityArgs
affinityLabels [Required]
+[]string +
+ AffinityLabels are homogeneous for pods that are scheduled to a node. +(i.e. it returns true IFF this pod can be added to this node such that all other pods in +the same service are running on nodes with the exact same values for Labels).
antiAffinityLabelsPreference [Required]
+[]string +
+ AntiAffinityLabelsPreference are the labels to consider for service anti affinity scoring.
+ + + +## `VolumeBindingArgs` {#kubescheduler-config-k8s-io-v1beta1-VolumeBindingArgs} + + + + + +VolumeBindingArgs holds arguments used to configure the VolumeBinding plugin. + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1beta1
kind
string
VolumeBindingArgs
bindTimeoutSeconds [Required]
+int64 +
+ BindTimeoutSeconds is the timeout in seconds in volume binding operation. +Value must be non-negative integer. The value zero indicates no waiting. +If this value is nil, the default value (600) will be used.
+ + + +## `Extender` {#kubescheduler-config-k8s-io-v1beta1-Extender} + + + + +**Appears in:** + +- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration) + + +Extender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, +it is assumed that the extender chose not to provide that extension. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
urlPrefix [Required]
+string +
+ URLPrefix at which the extender is available
filterVerb [Required]
+string +
+ Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender.
preemptVerb [Required]
+string +
+ Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender.
prioritizeVerb [Required]
+string +
+ Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender.
weight [Required]
+int64 +
+ The numeric multiplier for the node scores that the prioritize call generates. +The weight should be a positive integer
bindVerb [Required]
+string +
+ Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. +If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender +can implement this function.
enableHTTPS [Required]
+bool +
+ EnableHTTPS specifies whether https should be used to communicate with the extender
tlsConfig [Required]
+ExtenderTLSConfig +
+ TLSConfig specifies the transport layer security config
httpTimeout [Required]
+meta/v1.Duration +
+ HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize +timeout is ignored, k8s/other extenders priorities are used to select the node.
nodeCacheCapable [Required]
+bool +
+ NodeCacheCapable specifies that the extender is capable of caching node information, +so the scheduler should only send minimal information about the eligible nodes +assuming that the extender already cached full details of all nodes in the cluster
managedResources
+[]ExtenderManagedResource +
+ ManagedResources is a list of extended resources that are managed by +this extender. +- A pod will be sent to the extender on the Filter, Prioritize and Bind + (if the extender is the binder) phases iff the pod requests at least + one of the extended resources in this list. If empty or unspecified, + all pods will be sent to this extender. +- If IgnoredByScheduler is set to true for a resource, kube-scheduler + will skip checking the resource in predicates.
ignorable [Required]
+bool +
+ Ignorable specifies if the extender is ignorable, i.e. scheduling should not +fail when the extender returns an error or is not reachable.
+ + + +## `KubeSchedulerProfile` {#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerProfile} + + + + +**Appears in:** + +- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerConfiguration) + + +KubeSchedulerProfile is a scheduling profile. + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
schedulerName [Required]
+string +
+ SchedulerName is the name of the scheduler associated to this profile. +If SchedulerName matches with the pod's "spec.schedulerName", then the pod +is scheduled with this profile.
plugins [Required]
+Plugins +
+ Plugins specify the set of plugins that should be enabled or disabled. +Enabled plugins are the ones that should be enabled in addition to the +default plugins. Disabled plugins are any of the default plugins that +should be disabled. +When no enabled or disabled plugin is specified for an extension point, +default plugins for that extension point will be used if there is any. +If a QueueSort plugin is specified, the same QueueSort Plugin and +PluginConfig must be specified for all profiles.
pluginConfig [Required]
+[]PluginConfig +
+ PluginConfig is an optional set of custom plugin arguments for each plugin. +Omitting config args for a plugin is equivalent to using the default config +for that plugin.
+ + + +## `Plugin` {#kubescheduler-config-k8s-io-v1beta1-Plugin} + + + + +**Appears in:** + +- [PluginSet](#kubescheduler-config-k8s-io-v1beta1-PluginSet) + + +Plugin specifies a plugin name and its weight when applicable. Weight is used only for Score plugins. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name defines the name of plugin
weight [Required]
+int32 +
+ Weight defines the weight of plugin, only used for Score plugins.
+ + + +## `PluginConfig` {#kubescheduler-config-k8s-io-v1beta1-PluginConfig} + + + + +**Appears in:** + +- [KubeSchedulerProfile](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerProfile) + + +PluginConfig specifies arguments that should be passed to a plugin at the time of initialization. +A plugin that is invoked at multiple extension points is initialized once. Args can have arbitrary structure. +It is up to the plugin to process these Args. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name defines the name of plugin being configured
args [Required]
+k8s.io/apimachinery/pkg/runtime.RawExtension +
+ Args defines the arguments passed to the plugins at the time of initialization. Args can have arbitrary structure.
+ + + +## `PluginSet` {#kubescheduler-config-k8s-io-v1beta1-PluginSet} + + + + +**Appears in:** + +- [Plugins](#kubescheduler-config-k8s-io-v1beta1-Plugins) + + +PluginSet specifies enabled and disabled plugins for an extension point. +If an array is empty, missing, or nil, default plugins at that extension point will be used. + + + + + + + + + + + + + + + + + + +
FieldDescription
enabled [Required]
+[]Plugin +
+ Enabled specifies plugins that should be enabled in addition to default plugins. +These are called after default plugins and in the same order specified here.
disabled [Required]
+[]Plugin +
+ Disabled specifies default plugins that should be disabled. +When all default plugins need to be disabled, an array containing only one "∗" should be provided.
+ + + +## `Plugins` {#kubescheduler-config-k8s-io-v1beta1-Plugins} + + + + +**Appears in:** + +- [KubeSchedulerProfile](#kubescheduler-config-k8s-io-v1beta1-KubeSchedulerProfile) + + +Plugins include multiple extension points. When specified, the list of plugins for +a particular extension point are the only ones enabled. If an extension point is +omitted from the config, then the default set of plugins is used for that extension point. +Enabled plugins are called in the order specified here, after default plugins. If they need to +be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
queueSort [Required]
+PluginSet +
+ QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
preFilter [Required]
+PluginSet +
+ PreFilter is a list of plugins that should be invoked at "PreFilter" extension point of the scheduling framework.
filter [Required]
+PluginSet +
+ Filter is a list of plugins that should be invoked when filtering out nodes that cannot run the Pod.
postFilter [Required]
+PluginSet +
+ PostFilter is a list of plugins that are invoked after filtering phase, no matter whether filtering succeeds or not.
preScore [Required]
+PluginSet +
+ PreScore is a list of plugins that are invoked before scoring.
score [Required]
+PluginSet +
+ Score is a list of plugins that should be invoked when ranking nodes that have passed the filtering phase.
reserve [Required]
+PluginSet +
+ Reserve is a list of plugins invoked when reserving/unreserving resources +after a node is assigned to run the pod.
permit [Required]
+PluginSet +
+ Permit is a list of plugins that control binding of a Pod. These plugins can prevent or delay binding of a Pod.
preBind [Required]
+PluginSet +
+ PreBind is a list of plugins that should be invoked before a pod is bound.
bind [Required]
+PluginSet +
+ Bind is a list of plugins that should be invoked at "Bind" extension point of the scheduling framework. +The scheduler call these plugins in order. Scheduler skips the rest of these plugins as soon as one returns success.
postBind [Required]
+PluginSet +
+ PostBind is a list of plugins that should be invoked after a pod is successfully bound.
+ + + +## `PodTopologySpreadConstraintsDefaulting` {#kubescheduler-config-k8s-io-v1beta1-PodTopologySpreadConstraintsDefaulting} + +(Alias of `string`) + + +**Appears in:** + +- [PodTopologySpreadArgs](#kubescheduler-config-k8s-io-v1beta1-PodTopologySpreadArgs) + + +PodTopologySpreadConstraintsDefaulting defines how to set default constraints +for the PodTopologySpread plugin. + + + + + +## `ResourceSpec` {#kubescheduler-config-k8s-io-v1beta1-ResourceSpec} + + + + +**Appears in:** + +- [NodeResourcesLeastAllocatedArgs](#kubescheduler-config-k8s-io-v1beta1-NodeResourcesLeastAllocatedArgs) + +- [NodeResourcesMostAllocatedArgs](#kubescheduler-config-k8s-io-v1beta1-NodeResourcesMostAllocatedArgs) + +- [RequestedToCapacityRatioArgs](#kubescheduler-config-k8s-io-v1beta1-RequestedToCapacityRatioArgs) + + +ResourceSpec represents single resource and weight for bin packing of priority RequestedToCapacityRatioArguments. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name of the resource to be managed by RequestedToCapacityRatio function.
weight [Required]
+int64 +
+ Weight of the resource.
+ + + +## `UtilizationShapePoint` {#kubescheduler-config-k8s-io-v1beta1-UtilizationShapePoint} + + + + +**Appears in:** + +- [RequestedToCapacityRatioArgs](#kubescheduler-config-k8s-io-v1beta1-RequestedToCapacityRatioArgs) + + +UtilizationShapePoint represents single point of priority function shape. + + + + + + + + + + + + + + + + + + +
FieldDescription
utilization [Required]
+int32 +
+ Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100.
score [Required]
+int32 +
+ Score assigned to given utilization (y axis). Valid values are 0 to 10.
+ + diff --git a/content/zh/docs/reference/config-api/kube-scheduler-policy-config.v1.md b/content/zh/docs/reference/config-api/kube-scheduler-policy-config.v1.md new file mode 100644 index 0000000000..e694f7ecbc --- /dev/null +++ b/content/zh/docs/reference/config-api/kube-scheduler-policy-config.v1.md @@ -0,0 +1,799 @@ +--- +title: kube-scheduler Policy Configuration (v1) +content_type: tool-reference +package: kubescheduler.config.k8s.io/v1 +auto_generated: true +--- + + +## Resource Types + + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + + + +## `Policy` {#kubescheduler-config-k8s-io-v1-Policy} + + + + + +Policy describes a struct for a policy resource used in api. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
kubescheduler.config.k8s.io/v1
kind
string
Policy
predicates [Required]
+[]PredicatePolicy +
+ Holds the information to configure the fit predicate functions
priorities [Required]
+[]PriorityPolicy +
+ Holds the information to configure the priority functions
extenders [Required]
+[]LegacyExtender +
+ Holds the information to communicate with the extender(s)
hardPodAffinitySymmetricWeight [Required]
+int32 +
+ RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule +corresponding to every RequiredDuringScheduling affinity rule. +HardPodAffinitySymmetricWeight represents the weight of implicit PreferredDuringScheduling affinity rule, in the range 1-100.
alwaysCheckAllPredicates [Required]
+bool +
+ When AlwaysCheckAllPredicates is set to true, scheduler checks all +the configured predicates even after one or more of them fails. +When the flag is set to false, scheduler skips checking the rest +of the predicates after it finds one predicate that failed.
+ + + +## `ExtenderManagedResource` {#kubescheduler-config-k8s-io-v1-ExtenderManagedResource} + + + + +**Appears in:** + +- [Extender](#kubescheduler-config-k8s-io-v1beta1-Extender) + +- [LegacyExtender](#kubescheduler-config-k8s-io-v1-LegacyExtender) + + +ExtenderManagedResource describes the arguments of extended resources +managed by an extender. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name is the extended resource name.
ignoredByScheduler [Required]
+bool +
+ IgnoredByScheduler indicates whether kube-scheduler should ignore this +resource when applying predicates.
+ + + +## `ExtenderTLSConfig` {#kubescheduler-config-k8s-io-v1-ExtenderTLSConfig} + + + + +**Appears in:** + +- [Extender](#kubescheduler-config-k8s-io-v1beta1-Extender) + +- [LegacyExtender](#kubescheduler-config-k8s-io-v1-LegacyExtender) + + +ExtenderTLSConfig contains settings to enable TLS with extender + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
insecure [Required]
+bool +
+ Server should be accessed without verifying the TLS certificate. For testing only.
serverName [Required]
+string +
+ ServerName is passed to the server for SNI and is used in the client to check server +certificates against. If ServerName is empty, the hostname used to contact the +server is used.
certFile [Required]
+string +
+ Server requires TLS client certificate authentication
keyFile [Required]
+string +
+ Server requires TLS client certificate authentication
caFile [Required]
+string +
+ Trusted root certificates for server
certData [Required]
+[]byte +
+ CertData holds PEM-encoded bytes (typically read from a client certificate file). +CertData takes precedence over CertFile
keyData [Required]
+[]byte +
+ KeyData holds PEM-encoded bytes (typically read from a client certificate key file). +KeyData takes precedence over KeyFile
caData [Required]
+[]byte +
+ CAData holds PEM-encoded bytes (typically read from a root certificates bundle). +CAData takes precedence over CAFile
+ + + +## `LabelPreference` {#kubescheduler-config-k8s-io-v1-LabelPreference} + + + + +**Appears in:** + +- [PriorityArgument](#kubescheduler-config-k8s-io-v1-PriorityArgument) + + +LabelPreference holds the parameters that are used to configure the corresponding priority function + + + + + + + + + + + + + + + + + + +
FieldDescription
label [Required]
+string +
+ Used to identify node "groups"
presence [Required]
+bool +
+ This is a boolean flag +If true, higher priority is given to nodes that have the label +If false, higher priority is given to nodes that do not have the label
+ + + +## `LabelsPresence` {#kubescheduler-config-k8s-io-v1-LabelsPresence} + + + + +**Appears in:** + +- [PredicateArgument](#kubescheduler-config-k8s-io-v1-PredicateArgument) + + +LabelsPresence holds the parameters that are used to configure the corresponding predicate in scheduler policy configuration. + + + + + + + + + + + + + + + + + + +
FieldDescription
labels [Required]
+[]string +
+ The list of labels that identify node "groups" +All of the labels should be either present (or absent) for the node to be considered a fit for hosting the pod
presence [Required]
+bool +
+ The boolean flag that indicates whether the labels should be present or absent from the node
+ + + +## `LegacyExtender` {#kubescheduler-config-k8s-io-v1-LegacyExtender} + + + + +**Appears in:** + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + +LegacyExtender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, +it is assumed that the extender chose not to provide that extension. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
urlPrefix [Required]
+string +
+ URLPrefix at which the extender is available
filterVerb [Required]
+string +
+ Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender.
preemptVerb [Required]
+string +
+ Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender.
prioritizeVerb [Required]
+string +
+ Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender.
weight [Required]
+int64 +
+ The numeric multiplier for the node scores that the prioritize call generates. +The weight should be a positive integer
bindVerb [Required]
+string +
+ Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. +If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender +can implement this function.
enableHttps [Required]
+bool +
+ EnableHTTPS specifies whether https should be used to communicate with the extender
tlsConfig [Required]
+ExtenderTLSConfig +
+ TLSConfig specifies the transport layer security config
httpTimeout [Required]
+time.Duration +
+ HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize +timeout is ignored, k8s/other extenders priorities are used to select the node.
nodeCacheCapable [Required]
+bool +
+ NodeCacheCapable specifies that the extender is capable of caching node information, +so the scheduler should only send minimal information about the eligible nodes +assuming that the extender already cached full details of all nodes in the cluster
managedResources
+[]ExtenderManagedResource +
+ ManagedResources is a list of extended resources that are managed by +this extender. +- A pod will be sent to the extender on the Filter, Prioritize and Bind + (if the extender is the binder) phases iff the pod requests at least + one of the extended resources in this list. If empty or unspecified, + all pods will be sent to this extender. +- If IgnoredByScheduler is set to true for a resource, kube-scheduler + will skip checking the resource in predicates.
ignorable [Required]
+bool +
+ Ignorable specifies if the extender is ignorable, i.e. scheduling should not +fail when the extender returns an error or is not reachable.
+ + + +## `PredicateArgument` {#kubescheduler-config-k8s-io-v1-PredicateArgument} + + + + +**Appears in:** + +- [PredicatePolicy](#kubescheduler-config-k8s-io-v1-PredicatePolicy) + + +PredicateArgument represents the arguments to configure predicate functions in scheduler policy configuration. +Only one of its members may be specified + + + + + + + + + + + + + + + + + + +
FieldDescription
serviceAffinity [Required]
+ServiceAffinity +
+ The predicate that provides affinity for pods belonging to a service +It uses a label to identify nodes that belong to the same "group"
labelsPresence [Required]
+LabelsPresence +
+ The predicate that checks whether a particular node has a certain label +defined or not, regardless of value
+ + + +## `PredicatePolicy` {#kubescheduler-config-k8s-io-v1-PredicatePolicy} + + + + +**Appears in:** + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + +PredicatePolicy describes a struct of a predicate policy. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Identifier of the predicate policy +For a custom predicate, the name can be user-defined +For the Kubernetes provided predicates, the name is the identifier of the pre-defined predicate
argument [Required]
+PredicateArgument +
+ Holds the parameters to configure the given predicate
+ + + +## `PriorityArgument` {#kubescheduler-config-k8s-io-v1-PriorityArgument} + + + + +**Appears in:** + +- [PriorityPolicy](#kubescheduler-config-k8s-io-v1-PriorityPolicy) + + +PriorityArgument represents the arguments to configure priority functions in scheduler policy configuration. +Only one of its members may be specified + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
serviceAntiAffinity [Required]
+ServiceAntiAffinity +
+ The priority function that ensures a good spread (anti-affinity) for pods belonging to a service +It uses a label to identify nodes that belong to the same "group"
labelPreference [Required]
+LabelPreference +
+ The priority function that checks whether a particular node has a certain label +defined or not, regardless of value
requestedToCapacityRatioArguments [Required]
+RequestedToCapacityRatioArguments +
+ The RequestedToCapacityRatio priority function is parametrized with function shape.
+ + + +## `PriorityPolicy` {#kubescheduler-config-k8s-io-v1-PriorityPolicy} + + + + +**Appears in:** + +- [Policy](#kubescheduler-config-k8s-io-v1-Policy) + + +PriorityPolicy describes a struct of a priority policy. + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Identifier of the priority policy +For a custom priority, the name can be user-defined +For the Kubernetes provided priority functions, the name is the identifier of the pre-defined priority function
weight [Required]
+int64 +
+ The numeric multiplier for the node scores that the priority function generates +The weight should be non-zero and can be a positive or a negative integer
argument [Required]
+PriorityArgument +
+ Holds the parameters to configure the given priority function
+ + + +## `RequestedToCapacityRatioArguments` {#kubescheduler-config-k8s-io-v1-RequestedToCapacityRatioArguments} + + + + +**Appears in:** + +- [PriorityArgument](#kubescheduler-config-k8s-io-v1-PriorityArgument) + + +RequestedToCapacityRatioArguments holds arguments specific to RequestedToCapacityRatio priority function. + + + + + + + + + + + + + + + + + + +
FieldDescription
shape [Required]
+[]UtilizationShapePoint +
+ Array of point defining priority function shape.
resources [Required]
+[]ResourceSpec +
+ No description provided. +
+ + + +## `ResourceSpec` {#kubescheduler-config-k8s-io-v1-ResourceSpec} + + + + +**Appears in:** + +- [RequestedToCapacityRatioArguments](#kubescheduler-config-k8s-io-v1-RequestedToCapacityRatioArguments) + + +ResourceSpec represents single resource and weight for bin packing of priority RequestedToCapacityRatioArguments. + + + + + + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+ Name of the resource to be managed by RequestedToCapacityRatio function.
weight [Required]
+int64 +
+ Weight of the resource.
+ + + +## `ServiceAffinity` {#kubescheduler-config-k8s-io-v1-ServiceAffinity} + + + + +**Appears in:** + +- [PredicateArgument](#kubescheduler-config-k8s-io-v1-PredicateArgument) + + +ServiceAffinity holds the parameters that are used to configure the corresponding predicate in scheduler policy configuration. + + + + + + + + + + + + + +
FieldDescription
labels [Required]
+[]string +
+ The list of labels that identify node "groups" +All of the labels should match for the node to be considered a fit for hosting the pod
+ + + +## `ServiceAntiAffinity` {#kubescheduler-config-k8s-io-v1-ServiceAntiAffinity} + + + + +**Appears in:** + +- [PriorityArgument](#kubescheduler-config-k8s-io-v1-PriorityArgument) + + +ServiceAntiAffinity holds the parameters that are used to configure the corresponding priority function + + + + + + + + + + + + + +
FieldDescription
label [Required]
+string +
+ Used to identify node "groups"
+ + + +## `UtilizationShapePoint` {#kubescheduler-config-k8s-io-v1-UtilizationShapePoint} + + + + +**Appears in:** + +- [RequestedToCapacityRatioArguments](#kubescheduler-config-k8s-io-v1-RequestedToCapacityRatioArguments) + + +UtilizationShapePoint represents single point of priority function shape. + + + + + + + + + + + + + + + + + + +
FieldDescription
utilization [Required]
+int32 +
+ Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100.
score [Required]
+int32 +
+ Score assigned to given utilization (y axis). Valid values are 0 to 10.
+ + diff --git a/content/zh/docs/reference/kubernetes-api/_index.md b/content/zh/docs/reference/kubernetes-api/_index.md index 3e7c037a66..4b22d72710 100644 --- a/content/zh/docs/reference/kubernetes-api/_index.md +++ b/content/zh/docs/reference/kubernetes-api/_index.md @@ -1,4 +1,8 @@ --- -title: API 参考 +title: Kubernetes API weight: 30 --- + + + +{{< glossary_definition term_id="kubernetes-api" length="all" >}} diff --git a/content/zh/docs/reference/kubernetes-api/api-index.md b/content/zh/docs/reference/kubernetes-api/api-index.md deleted file mode 100644 index a9fca7e581..0000000000 --- a/content/zh/docs/reference/kubernetes-api/api-index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: v1.20 -weight: 50 ---- - -[Kubernetes API v1.20](/docs/reference/generated/kubernetes-api/v1.20/) \ No newline at end of file diff --git a/content/zh/docs/reference/scheduling/config.md b/content/zh/docs/reference/scheduling/config.md index d817a74401..99c9557e57 100644 --- a/content/zh/docs/reference/scheduling/config.md +++ b/content/zh/docs/reference/scheduling/config.md @@ -30,11 +30,12 @@ by implementing one or more of these extension points. 你可以通过运行 `kube-scheduler --config ` 来设置调度模板, -配置文件使用组件配置的 API ([`v1alpha1`](https://pkg.go.dev/k8s.io/kube-scheduler@v0.19.0/config/v1beta1?tab=doc#KubeSchedulerConfiguration))。 +使用 [KubeSchedulerConfiguration (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/) 结构体。 最简单的配置如下: @@ -285,11 +286,20 @@ extension points: - `VolumeBinding`:检查节点是否有请求的卷,或是否可以绑定请求的卷。 - - 实现的扩展点: `PreFilter`,`Filter`,`Reserve`,`PreBind`。 + 实现的扩展点: `PreFilter`、`Filter`、`Reserve`、`PreBind` 和 `Score`。 + {{< note >}} + 当 `VolumeCapacityPriority` 特性被启用时,`Score` 扩展点也被启用。 + 它优先考虑可以满足所需卷大小的最小 PV。 + {{< /note >}} + -- `NodeResourceLimits`:选择满足 Pod 资源限制的节点。 - - 实现的扩展点:`PreScore`,`Score`。 - * 阅读 [kube-scheduler 参考](/zh/docs/reference/command-line-tools-reference/kube-scheduler/) * 了解[调度](/zh/docs/concepts/scheduling-eviction/kube-scheduler/) +* 阅读 [kube-scheduler 配置 (v1beta1)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta1/) 参考 + diff --git a/content/zh/docs/reference/scheduling/policies.md b/content/zh/docs/reference/scheduling/policies.md index 248e3a7f84..20a7ca04bf 100644 --- a/content/zh/docs/reference/scheduling/policies.md +++ b/content/zh/docs/reference/scheduling/policies.md @@ -25,11 +25,11 @@ respectively. You can set a scheduling policy by running `kube-scheduler --policy-config-file ` or `kube-scheduler --policy-configmap ` -and using the [Policy type](https://pkg.go.dev/k8s.io/kube-scheduler@v0.18.0/config/v1?tab=doc#Policy). +and using the [Policy type](/zh/docs/reference/config-api/kube-scheduler-policy-config.v1/). --> 你可以通过执行 `kube-scheduler --policy-config-file ` 或 `kube-scheduler --policy-configmap ` -设置并使用[调度策略](https://pkg.go.dev/k8s.io/kube-scheduler@v0.18.0/config/v1?tab=doc#Policy)。 +设置并使用[调度策略](/zh/docs/reference/config-api/kube-scheduler-policy-config.v1/)。 @@ -228,6 +228,10 @@ and using the [Policy type](https://pkg.go.dev/k8s.io/kube-scheduler@v0.18.0/con * 了解[调度](/zh/docs/concepts/scheduling-eviction/kube-scheduler/) -* 了解 [kube-scheduler 配置](/zh/docs/reference/scheduling/config/) \ No newline at end of file +* 了解 [kube-scheduler 配置](/zh/docs/reference/scheduling/config/) +* 阅读 [kube-scheduler 配置参考 (v1beta1)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta1) +* 阅读 [kube-scheduler 策略参考 (v1)](/zh/docs/reference/config-api/kube-scheduler-policy-config.v1/) diff --git a/content/zh/docs/reference/setup-tools/kubeadm/_index.md b/content/zh/docs/reference/setup-tools/kubeadm/_index.md index 60204dfa6d..7b8c2ac158 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/_index.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/_index.md @@ -13,19 +13,23 @@ card: -Kubeadm 是一个提供了 `kubeadm init` 和 `kubeadm join` 的工具,作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。 +Kubeadm 是一个提供了 `kubeadm init` 和 `kubeadm join` 的工具, +作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。 -kubeadm 通过执行必要的操作来启动和运行最小可用集群。按照设计,它只关注启动引导,而非配置机器。同样的,安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard, -监控方案,以及特定云平台的扩展,都不在讨论范围内。 +kubeadm 通过执行必要的操作来启动和运行最小可用集群。 +按照设计,它只关注启动引导,而非配置机器。同样的, +安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、 +监控方案、以及特定云平台的扩展,都不在讨论范围内。 -相反,我们希望在 kubeadm 之上构建更高级别以及更加合规的工具,理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。 +相反,我们希望在 kubeadm 之上构建更高级别以及更加合规的工具, +理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。 -要安装 kubeadm, 请查阅[安装指南](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/). +--> +要安装 kubeadm, 请查阅 +[安装指南](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/). ## {{% heading "whatsnext" %}} @@ -46,14 +51,30 @@ To install kubeadm, see the [installation guide](/docs/setup/production-environm * [kubeadm config](/docs/reference/setup-tools/kubeadm/kubeadm-config) if you initialized your cluster using kubeadm v1.7.x or lower, to configure your cluster for `kubeadm upgrade` * [kubeadm token](/docs/reference/setup-tools/kubeadm/kubeadm-token) to manage tokens for `kubeadm join` * [kubeadm reset](/docs/reference/setup-tools/kubeadm/kubeadm-reset) to revert any changes made to this host by `kubeadm init` or `kubeadm join` +* [kubeadm certs](/docs/reference/setup-tools/kubeadm/kubeadm-certs) to manage Kubernetes certificates +* [kubeadm kubeconfig](/docs/reference/setup-tools/kubeadm/kubeadm-kubeconfig) to manage kubeconfig files * [kubeadm version](/docs/reference/setup-tools/kubeadm/kubeadm-version) to print the kubeadm version * [kubeadm alpha](/docs/reference/setup-tools/kubeadm/kubeadm-alpha) to preview a set of features made available for gathering feedback from the community --> -* [kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init) 用于搭建控制平面节点 -* [kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join) 用于搭建工作节点并将其加入到集群中 -* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade) 用于升级 Kubernetes 集群到新版本 -* [kubeadm config](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config) 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 `kubeadm upgrade` 来配置你的集群 -* [kubeadm token](/zh/docs/reference/setup-tools/kubeadm/kubeadm-token) 用于管理 `kubeadm join` 使用的令牌 -* [kubeadm reset](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset) 用于恢复通过 `kubeadm init` 或者 `kubeadm join` 命令对节点进行的任何变更 -* [kubeadm version](/zh/docs/reference/setup-tools/kubeadm/kubeadm-version) 用于打印 kubeadm 的版本信息 -* [kubeadm alpha](/zh/docs/reference/setup-tools/kubeadm/kubeadm-alpha) 用于预览一组可用于收集社区反馈的特性 +* [kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init) + 用于搭建控制平面节点 +* [kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join) + 用于搭建工作节点并将其加入到集群中 +* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade) + 用于升级 Kubernetes 集群到新版本 +* [kubeadm config](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config) + 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 + `kubeadm upgrade` 来配置你的集群 +* [kubeadm token](/zh/docs/reference/setup-tools/kubeadm/kubeadm-token) + 用于管理 `kubeadm join` 使用的令牌 +* [kubeadm reset](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset) + 用于恢复通过 `kubeadm init` 或者 `kubeadm join` 命令对节点进行的任何变更 +* [kubeadm certs](/docs/reference/setup-tools/kubeadm/kubeadm-certs) + 用于管理 Kubernetes 证书 +* [kubeadm kubeconfig](/docs/reference/setup-tools/kubeadm/kubeadm-kubeconfig) + 用于管理 kubeconfig 文件 +* [kubeadm version](/zh/docs/reference/setup-tools/kubeadm/kubeadm-version) + 用于打印 kubeadm 的版本信息 +* [kubeadm alpha](/zh/docs/reference/setup-tools/kubeadm/kubeadm-alpha) + 用于预览一组可用于收集社区反馈的特性 + diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet.md deleted file mode 100644 index ac949750b1..0000000000 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet.md +++ /dev/null @@ -1,69 +0,0 @@ - - - -### 概要 - - - -此命令并非设计用来单独运行。请参阅可用子命令列表。 - - - -### 选项 - - ---- - - - - - - - - - - -
-h, --help
- -kubelet 操作的帮助命令 -
- - - -### 从父命令继承的选项 - - ---- - - - - - - - - - - -
--rootfs string
- -[实验] 指向 '真实' 宿主机的根目录。 -
- diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet_config.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet_config.md deleted file mode 100644 index 51ab7eb85d..0000000000 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet_config.md +++ /dev/null @@ -1,67 +0,0 @@ - - - -### 概要 - - - -此命令并非设计用来单独运行。请参阅可用子命令列表。 - - - -### 选项 - - ---- - - - - - - - - - - -
-h, --help
- -config 操作的帮助命令 -
- - - -### 从父命令继承的选项 - - ---- - - - - - - - - - - -
--rootfs string
- -[实验] 指向宿主机上的 '实际' 根文件系统的路径。 -
- diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet_config_enable-dynamic.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet_config_enable-dynamic.md deleted file mode 100644 index 9c5bd03582..0000000000 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_kubelet_config_enable-dynamic.md +++ /dev/null @@ -1,134 +0,0 @@ - - -### 概要 - - - -针对集群中的 kubelet-config-1.X ConfigMap 启用或更新节点的动态 kubelet 配置,其中 X 是所需 kubelet 版本的次要版本。 - - -警告:此功能仍处于试验阶段,默认情况下处于禁用状态。仅当知道自己在做什么时才启用它,因为在此阶段它可能会产生令人惊讶的副作用。 - - -Alpha 免责声明:此命令当前为 Alpha 功能。 - -``` -kubeadm alpha kubelet config enable-dynamic [flags] -``` - - -### 示例 - -``` - # 为节点启用动态 kubelet 配置。 - kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version 1.16.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. -``` - - -### 选项 - - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-h, --help
- -enable-dynamic 操作的帮助命令 -
- ---kubeconfig string     默认值: "/etc/kubernetes/admin.conf" -
- -与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在一组标准位置中搜索现有的 kubeconfig 文件。 -
--kubelet-version string
- -kubelet 所需版本 -
--node-name string
- -应该启用动态 kubelet 配置节点的名称 -
- - - -### 从父命令继承的选项 - - ---- - - - - - - - - - - -
--rootfs string
- -[实验] 指向 '真实' 宿主机的根目录。 -
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_selfhosting.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_selfhosting.md deleted file mode 100644 index d2f4bd71f6..0000000000 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_selfhosting.md +++ /dev/null @@ -1,68 +0,0 @@ - - - -### 概要 - - - -此命令并非设计用来单独运行。请参阅可用子命令列表。 - - - -### 选项 - - ---- - - - - - - - - - - -
-h, --help
- -selfhosting 操作的帮助命令 -
- - - -### 从父命令继承的选项 - - ---- - - - - - - - - - - -
--rootfs string
- -[实验] 指向 '真实' 宿主机的根目录。 -
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_selfhosting_pivot.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_selfhosting_pivot.md deleted file mode 100644 index 7f1a6a9fd5..0000000000 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_selfhosting_pivot.md +++ /dev/null @@ -1,171 +0,0 @@ - - - -### 概要 - - - -将用于控制平面组件的静态 Pod 文件转换为通过 Kubernetes API 配置的自托管 DaemonSet。 - - - -有关自托管的限制,请参阅相关文档。 - - - -Alpha 免责声明:此命令当前为 alpha 功能。 - - -``` -kubeadm alpha selfhosting pivot [flags] -``` - - - -### 示例 - - - -``` -# 将静态 Pod 托管的控制平面转换为自托管的控制平面。 - -kubeadm alpha phase self-hosting convert-from-staticpods -``` - - - -### 选项 - - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ---cert-dir string     默认值:"/etc/kubernetes/pki" -
- -证书存储的路径 -
--config string
- -kubeadm 配置文件的路径。 -
-f, --force
- -在不提示确认的情况下转换集群 -
-h, --help
- -pivot 操作的帮助命令 -
- ---kubeconfig string     默认值:"/etc/kubernetes/admin.conf" -
- -与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。 -
-s, --store-certs-in-secrets
- -启用 secret 存储证书 -
- - - -### 从父命令继承的选项 - - ---- - - - - - - - - - - -
--rootfs string
- -[实验] 到 '真实' 主机根文件系统的路径。 -
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md index a0ef1a5e1a..9132e3a04b 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md @@ -1,17 +1,30 @@ + + + +打印配置 - ### 概要 - -此命令显示所提供子命令的配置。 -有关详细信息,请参阅:https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 +此命令打印子命令所提供的配置信息。 +相关细节可参阅 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 ``` kubeadm config print [flags] @@ -20,7 +33,6 @@ kubeadm config print [flags] - ### 选项 @@ -34,22 +46,17 @@ kubeadm config print [flags] - +
-h, --help
- -print 操作的帮助命令 -

print 命令的帮助信息

- - -### 从父命令继承的选项 +### 从父命令继承而来的选项 @@ -59,33 +66,23 @@ print 操作的帮助命令 - + - + + - + +
- ---kubeconfig string     默认值:"/etc/kubernetes/admin.conf" ---kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
- -用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。 -

与集群通信时使用的 kubeconfig 文件。如此标志未设置,将在一组标准位置中搜索现有的kubeconfig 文件。

--rootfs string
- -[实验] 到 '真实' 主机根文件系统的路径。 -

[试验性] 指向“真实”宿主根文件系统的路径。

+ + + diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md deleted file mode 100644 index d3cc8d9041..0000000000 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md +++ /dev/null @@ -1,91 +0,0 @@ - - - -### 概要 - - - -使用此命令,可以查看 kubeadm 配置的集群中的 ConfigMap。 -该配置位于 "kube-system" 命名空间中的名为 "kubeadm-config" 的 ConfigMap 中。 - - -``` -kubeadm config view [flags] -``` - - - -### 选项 - - ---- - - - - - - - - - - -
-h, --help
- -view 操作的帮助命令 -
- - - -### 继承于父命令的选项 - - ---- - - - - - - - - - - - - - - - - - -
- ---kubeconfig string     默认值:"/etc/kubernetes/admin.conf" -
- -用于和集群通信的 KubeConfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。 -
--rootfs string
- -[实验] 到 '真实' 主机根文件系统的路径。 -
- diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md index 6cb9305b6c..363335f25c 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md @@ -10,8 +10,8 @@ During `kubeadm init`, kubeadm uploads the `ClusterConfiguration` object to your in a ConfigMap called `kubeadm-config` in the `kube-system` namespace. This configuration is then read during `kubeadm join`, `kubeadm reset` and `kubeadm upgrade`. To view this ConfigMap call `kubeadm config view`. --> -在 `kubeadm init` 执行期间,kubeadm 将 `ClusterConfiguration` 对象上传到你的集群的 `kube-system` 名字空间下 -名为 `kubeadm-config` 的 ConfigMap 对象中。 +在 `kubeadm init` 执行期间,kubeadm 将 `ClusterConfiguration` 对象上传 +到你的集群的 `kube-system` 名字空间下名为 `kubeadm-config` 的 ConfigMap 对象中。 然后在 `kubeadm join`、`kubeadm reset` 和 `kubeadm upgrade` 执行期间读取此配置。 要查看此 ConfigMap,请调用 `kubeadm config view`。 @@ -29,24 +29,33 @@ convert your old configuration files to a newer version. `kubeadm config images For more information navigate to [Using kubeadm init with a configuration file](/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) or [Using kubeadm join with a configuration file](/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file). - -In Kubernetes v1.13.0 and later to list/pull kube-dns images instead of the CoreDNS image -the `--config` method described [here](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) -has to be used. --> 更多信息请浏览[使用带配置文件的 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) 或[使用带配置文件的 kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file). + +你也可以在使用 `kubeadm init` 命令时配置若干 kubelet 配置选项。 +这些选项对于集群中所有节点而言都是相同的。 +参阅[使用 kubeadm 来配置集群中的各个 kubelet](/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration/) +了解详细信息。 + + 在 Kubernetes v1.13.0 及更高版本中,要列出/拉取 kube-dns 镜像而不是 CoreDNS 镜像, -必须使用[这里](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon)所描述的 `--config` 方法。 - - +必须使用[这里](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) +所描述的 `--config` 方法。 ## kubeadm config upload from-file {#cmd-config-from-file} -## kubeadm config view {#cmd-config-view} -{{< include "generated/kubeadm_config_view.md" >}} +## kubeadm config print{#cmd-config-view} +{{< include "generated/kubeadm_config_print.md" >}} ## kubeadm config print init-defaults {#cmd-config-print-init-defaults} {{< include "generated/kubeadm_config_print_init-defaults.md" >}} @@ -63,15 +72,13 @@ has to be used. ## kubeadm config images pull {#cmd-config-images-pull} {{< include "generated/kubeadm_config_images_pull.md" >}} - - ## {{% heading "whatsnext" %}} - -* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/) 将 Kubernetes 集群升级到更新版本 [kubeadm upgrade] +* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/) + 将 Kubernetes 集群升级到更新版本 [kubeadm upgrade] diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md index 2c70fe93e9..637024a9cd 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md @@ -301,7 +301,7 @@ requested Kubernetes version is a CI label (such as `ci/latest`) -你可以通过使用[带有配置文件的 kubeadm](#config-file)来重写此操作。 +你可以通过使用[带有配置文件的 kubeadm](#config-file) 来重写此操作。 注意这种搭建集群的方式在安全保证上会有一些宽松,因为这种方式不允许使用 `--discovery-token-ca-cert-hash` 来验证根 CA 的哈希值(因为当配置节点的时候,它还没有被生成)。 -更多信息请参阅 [kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/)文档。 +更多信息请参阅 [kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/) 文档。 ## {{% heading "whatsnext" %}} diff --git a/content/zh/docs/reference/tools.md b/content/zh/docs/reference/tools.md deleted file mode 100644 index 1ad75ba98f..0000000000 --- a/content/zh/docs/reference/tools.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -reviewers: -- janetkuo -title: 工具 -content_type: concept ---- - - - - - -Kubernetes 包含一些内置工具,可以帮助用户更好的使用 Kubernetes 系统。 - - -## Kubectl - - -[`kubectl`](/zh/docs/tasks/tools/install-kubectl/) 是 Kubernetes 命令行工具, -可以用来操控 Kubernetes 集群。 - -## Kubeadm - - -[`kubeadm`](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) 是一个命令行工具, -可以用来在物理机、云服务器或虚拟机(目前处于 alpha 阶段) -上轻松部署一个安全可靠的 Kubernetes 集群。 - -## Minikube - - -[`minikube`](https://minikube.sigs.k8s.io/docs/) 是一个可以方便用户 -在其工作站点本地部署一个单节点 Kubernetes 集群的工具,用于开发和测试。 - -## Dashboard - - -[`Dashboard`](/zh/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/kompose) 一个转换工具, -用来帮助 Docker Compose 用户迁移至 Kubernetes。 - - -使用 Kompose: - -* 将一个 Docker Compose 文件解释成 Kubernetes 对象 -* 将本地 Docker 开发 转变成通过 Kubernetes 来管理 -* 转换 v1 或 v2 Docker Compose `yaml` 文件 或 - [已发布的应用程序包](https://docs.docker.com/compose/bundles/) - diff --git a/content/zh/docs/setup/best-practices/cluster-large.md b/content/zh/docs/setup/best-practices/cluster-large.md index 4a27b867e1..d2c6d8fcb9 100644 --- a/content/zh/docs/setup/best-practices/cluster-large.md +++ b/content/zh/docs/setup/best-practices/cluster-large.md @@ -1,173 +1,136 @@ --- -title: 创建大型集群 +title: 大规模集群的注意事项 weight: 20 --- - -## 支持 -在 {{< param "version" >}} 版本中, Kubernetes 支持的最大节点数为 5000。更具体地说,我们支持满足以下*所有*条件的配置: +集群是运行 Kubernetes 代理的、 +由{{< glossary_tooltip text="控制平面" term_id="control-plane" >}}管理的一组 +{{< glossary_tooltip text="节点" term_id="node" >}}(物理机或虚拟机)。 +Kubernetes {{< param "version" >}} 支持的最大节点数为 5000。 +更具体地说,Kubernetes旨在适应满足以下*所有*标准的配置: - +* 每个节点的 Pod 数量不超过 100 * 节点数不超过 5000 * Pod 总数不超过 150000 * 容器总数不超过 300000 -* 每个节点的 pod 数量不超过 100 -
- -{{< toc >}} - - -## 设定 +你可以通过添加或删除节点来扩展集群。集群扩缩的方式取决于集群的部署方式。 - -集群是一组运行着 Kubernetes 代理的节点(物理机或者虚拟机),这些节点由主控节点(集群级控制面)控制。 + -通常,集群中的节点数由特定于云平台的配置文件 `config-default.sh` -(可以参考 [GCE 平台的 `config-default.sh`](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/gce/config-default.sh)) -中的 `NUM_NODES` 参数控制。 - - -但是,在许多云供应商的平台上,仅将该值更改为非常大的值,可能会导致安装脚本运行失败。例如,在 GCE,由于配额问题,集群会启动失败。 - - -因此,在创建大型 Kubernetes 集群时,必须考虑以下问题。 - - -### 配额问题 - - -为了避免遇到云供应商配额问题,在创建具有大规模节点的集群时,请考虑: - - -* 增加诸如 CPU,IP 等资源的配额。 - * 例如,在 [GCE](https://cloud.google.com/compute/docs/resource-quotas),您需要增加以下资源的配额: +## 云供应商资源配额 {#quota-issues} + +为避免遇到云供应商配额问题,在创建具有大规模节点的集群时,请考虑以下事项: +* 请求增加云资源的配额,例如: + * 计算实例 * CPUs - * VM 实例 - * 永久磁盘总量 + * 存储卷 * 使用中的 IP 地址 - * 防火墙规则 - * 转发规则 - * 路由 - * 目标池 -* 由于某些云供应商会对虚拟机的创建进行流控,因此需要对设置脚本进行更改,使其以较小的批次启动新的节点,并且之间有等待时间。 + * 数据包过滤规则集 + * 负载均衡数量 + * 网络子网 + * 日志流 +* 由于某些云供应商限制了创建新实例的速度,因此通过分批启动新节点来控制集群扩展操作,并在各批之间有一个暂停。 - -### Etcd 存储 +## 控制面组件 - -为了提高大规模集群的性能,我们将事件存储在专用的 etcd 实例中。 +你应该在每个故障区域至少应运行一个实例,以提供容错能力。 +Kubernetes 节点不会自动将流量引向相同故障区域中的控制平面端点。 +但是,你的云供应商可能有自己的机制来执行此操作。 + +例如,使用托管的负载均衡器时,你可以配置负载均衡器发送源自故障区域 _A_ 中的 kubelet 和 Pod 的流量, +并将该流量仅定向到也位于区域 _A_ 中的控制平面主机。 +如果单个控制平面主机或端点故障区域 _A_ 脱机,则意味着区域 _A_ 中的节点的所有控制平面流量现在都在区域之间发送。 +在每个区域中运行多个控制平面主机能降低出现这种结果的可能性。 +### etcd 存储 + + +为了提高大规模集群的性能,你可以将事件对象存储在单独的专用 etcd 实例中。 + + -在创建集群时,现有 salt 脚本可以: +在创建集群时,你可以(使用自定义工具): -* 启动并配置其它 etcd 实例 -* 配置 API 服务器以使用 etcd 存储事件 - - -### 主控节点大小和主控组件 - - -在 GCE/Google Kubernetes Engine 和 AWS 上,`kube-up` 会根据节点数量自动为您集群中的 master 节点配置适当的虚拟机大小。在其它云供应商的平台上,您将需要手动配置它。作为参考,我们在 GCE 上使用的规格为: - - -* 1-5 个节点:n1-standard-1 -* 6-10 个节点:n1-standard-2 -* 11-100 个节点:n1-standard-4 -* 101-250 个节点:n1-standard-8 -* 251-500 个节点:n1-standard-16 -* 超过 500 节点:n1-standard-32 - - -在 AWS 上使用的规格为 - -* 1-5 个节点:m3.medium -* 6-10 个节点:m3.large -* 11-100 个节点:m3.xlarge -* 101-250 个节点:m3.2xlarge -* 251-500 个节点:c4.4xlarge -* 超过 500 节点:c4.8xlarge - -{{< note >}} - -在 Google Kubernetes Engine 上,主控节点的大小会根据集群的大小自动调整。更多有关信息,请参阅 [此博客文章](https://cloudplatform.googleblog.com/2017/11/Cutting-Cluster-Management-Fees-on-Google-Kubernetes-Engine.html)。 - - -在 AWS 上,主控节点的规格是在集群启动时设置的,并且,即使以后通过手动删除或添加节点的方式使集群缩容或扩容,主控节点的大小也不会更改。 -{{< /note >}} +* 启动并配置额外的 etcd 实例 +* 配置 {{< glossary_tooltip term_id="kube-apiserver" text="API 服务器" >}},将它用于存储事件 -为了防止内存泄漏或 [集群插件](https://releases.k8s.io/{{}}/cluster/addons) -中的其它资源问题导致节点上所有可用资源被消耗,Kubernetes 限制了插件容器可以消耗的 CPU 和内存资源 -(请参阅 PR [#10653](http://pr.k8s.io/10653/files) 和 [#10778](http://pr.k8s.io/10778/files))。 +Kubernetes [resource limits](/docs/concepts/configuration/manage-resources-containers/) +help to minimize the impact of memory leaks and other ways that pods and containers can +impact on other components. These resource limits apply to +{{< glossary_tooltip text="addon" term_id="addons" >}} resources just as they apply to application workloads. -例如: + For example, you can set CPU and memory limits for a logging component: +--> +Kubernetes [资源限制](/zh/docs/concepts/configuration/manage-resources-containers/) +有助于最大程度地减少内存泄漏的影响以及 Pod 和容器可能对其他组件的其他方式的影响。 +这些资源限制适用于{{< glossary_tooltip text="插件" term_id="addons" >}}资源, +就像它们适用于应用程序工作负载一样。 + +例如,你可以对日志组件设置 CPU 和内存限制 ```yaml + ... containers: - name: fluentd-cloud-logging - image: k8s.gcr.io/fluentd-gcp:1.16 + image: fluent/fluentd-kubernetes-daemonset:v1 resources: limits: cpu: 100m memory: 200Mi ``` - -除了 Heapster 之外,这些限制都是静态的,并且限制是基于 4 节点集群上运行的插件数据得出的(请参阅 [#10335](http://issue.k8s.io/10335#issuecomment-117861225))。在大规模集群上运行时,插件会消耗大量资源(请参阅 [#5880](http://issue.k8s.io/5880#issuecomment-113984085))。因此,如果在不调整这些值的情况下部署了大规模集群,插件容器可能会由于达到限制而不断被杀死。 +插件的默认限制通常基于从中小规模 Kubernetes 集群上运行每个插件的经验收集的数据。 +插件在大规模集群上运行时,某些资源消耗常常比其默认限制更多。 +如果在不调整这些值的情况下部署了大规模集群,则插件可能会不断被杀死,因为它们不断达到内存限制。 +或者,插件可能会运行,但由于 CPU 时间片的限制而导致性能不佳。 - 为避免遇到集群插件资源问题,在创建大规模集群时,请考虑以下事项: - -* 根据集群的规模,如果使用了以下插件,提高其内存和 CPU 上限(每个插件都有一个副本处理整个群集,因此内存和 CPU 使用率往往与集群的规模/负载成比例增长) : - * [InfluxDB 和 Grafana](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/cluster-monitoring/influxdb/influxdb-grafana-controller.yaml) - * [kubedns、dnsmasq 和 sidecar](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/kube-dns/kube-dns.yaml.in) - * [Kibana](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/kibana-deployment.yaml) -* 根据集群的规模,如果使用了以下插件,调整其副本数量(每个插件都有多个副本,增加副本数量有助于处理增加的负载,但是,由于每个副本的负载也略有增加,因此也请考虑增加 CPU/内存限制): - * [elasticsearch](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/es-statefulset.yaml) -* 根据集群的规模,如果使用了以下插件,限制其内存和 CPU 上限(这些插件在每个节点上都有一个副本,但是 CPU/内存使用量也会随集群负载/规模而略有增加): - * [FluentD 和 ElasticSearch 插件](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml) - * [FluentD 和 GCP 插件](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml) +* 部分垂直扩展插件 —— 总有一个插件副本服务于整个集群或服务于整个故障区域。 + 对于这些附加组件,请在扩大集群时加大资源请求和资源限制。 +* 许多水平扩展插件 —— 你可以通过运行更多的 Pod 来增加容量——但是在大规模集群下, + 可能还需要稍微提高 CPU 或内存限制。 + VerticalPodAutoscaler 可以在 _recommender_ 模式下运行, + 以提供有关请求和限制的建议数字。 +* 一些插件在每个节点上运行一个副本,并由 DaemonSet 控制: + 例如,节点级日志聚合器。与水平扩展插件的情况类似, + 你可能还需要稍微提高 CPU 或内存限制。 - -Heapster 的资源限制与您集群的初始大小有关(请参阅 [#16185](https://issue.k8s.io/16185) -和 [#22940](http://issue.k8s.io/22940))。如果您发现 Heapster 资源不足,您应该调整堆内存请求的计算公式(有关详细信息,请参阅相关 PR)。 + -关于如何检测插件容器是否达到资源限制,参见 -[计算资源的故障排除](/zh/docs/concepts/configuration/manage-resources-containers/#troubleshooting) 部分。 +`VerticalPodAutoscaler` is a custom resource that you can deploy into your cluster +to help you manage resource requests and limits for pods. +Visit [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#readme) +to learn more about `VerticalPodAutoscaler` and how you can use it to scale cluster +components, including cluster-critical addons. - -[未来](https://issue.k8s.io/13048),我们期望根据集群规模大小来设置所有群集附加资源限制,并在集群扩缩容时动态调整它们。 -我们欢迎您来实现这些功能。 +## {{% heading "whatsnext" %}} - -### 允许启动时次要节点失败 +`VerticalPodAutoscaler` 是一种自定义资源,你可以将其部署到集群中,帮助你管理资源请求和 Pod 的限制。 +访问 [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#readme) +以了解有关 `VerticalPodAutoscaler` 的更多信息, +以及如何使用它来扩展集群组件(包括对集群至关重要的插件)的信息。 - -出于各种原因(更多详细信息,请参见 [#18969](https://github.com/kubernetes/kubernetes/issues/18969)), -在 `kube-up.sh` 中设置很大的 `NUM_NODES` 时,可能会由于少数节点无法正常启动而失败。 -此时,您有两个选择:重新启动集群(运行 `kube-down.sh`,然后再运行 `kube-up.sh`),或者在运行 `kube-up.sh` 之前将环境变量 `ALLOWED_NOTREADY_NODES` 设置为您认为合适的任何值。采取后者时,即使运行成功的节点数量少于 `NUM_NODES`,`kube-up.sh` 仍可以运行成功。根据失败的原因,这些节点可能会稍后加入集群,又或者群集的大小保持在 `NUM_NODES-ALLOWED_NOTREADY_NODES`。 +[集群自动扩缩器](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#readme) +与许多云供应商集成在一起,帮助你在你的集群中,按照资源需求级别运行正确数量的节点。 \ No newline at end of file diff --git a/content/zh/docs/setup/best-practices/multiple-zones.md b/content/zh/docs/setup/best-practices/multiple-zones.md index b36b607781..76dac538fc 100644 --- a/content/zh/docs/setup/best-practices/multiple-zones.md +++ b/content/zh/docs/setup/best-practices/multiple-zones.md @@ -38,7 +38,7 @@ one zone also impairs services in another zone. ## 背景 Kubernetes 从设计上允许同一个 Kubernetes 集群跨多个失效区来运行, -通常这些去位于某个称作 _区域(region)_ 逻辑分组中。 +通常这些区位于某个称作 _区域(region)_ 逻辑分组中。 主要的云提供商都将区域定义为一组失效区的集合(也称作 _可用区(Availability Zones)_), 能够提供一组一致的功能特性:每个区域内,各个可用区提供相同的 API 和服务。 diff --git a/content/zh/docs/setup/production-environment/container-runtimes.md b/content/zh/docs/setup/production-environment/container-runtimes.md index c0a8a66b5e..8536b7a74b 100644 --- a/content/zh/docs/setup/production-environment/container-runtimes.md +++ b/content/zh/docs/setup/production-environment/container-runtimes.md @@ -136,7 +136,7 @@ Install and configure prerequisites: --> 本节包含使用 containerd 作为 CRI 运行时的必要步骤。 -使用以下命令在系统上安装容器: +使用以下命令在系统上安装 Containerd: 安装和配置的先决条件: diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md b/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md index 5ef25cbc90..ef32594c16 100644 --- a/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md +++ b/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md @@ -26,7 +26,7 @@ control plane nodes and etcd members are separated. --> 本文讲述了使用 kubeadm 设置一个高可用的 Kubernetes 集群的两种不同方式: -- 使用堆控制平面节点。这种方法所需基础设施较少。etcd 成员和控制平面节点位于同一位置。 +- 使用具有堆叠的控制平面节点。这种方法所需基础设施较少。etcd 成员和控制平面节点位于同一位置。 - 使用外部集群。这种方法所需基础设施较多。控制平面的节点和 etcd 成员是分开的。 - - - - -### 自托管 Kubernetes 控制平台 {#self-hosting} - - -kubeadm 允许您实验性地创建 _self-hosted_ Kubernetes 控制平面。 -这意味着 API 服务器,控制管理器和调度程序之类的关键组件将通过配置 Kubernetes API 以 -[DaemonSet Pods](/zh/docs/concepts/workloads/controllers/daemonset/) 的身份运行, -而不是通过静态文件在 kubelet 中配置[静态 Pods](/zh/docs/tasks/configure-pod-container/static-pod/)。 - - -要创建自托管集群,请参见 -[kubeadm alpha selfhosting pivot](/zh/docs/reference/setup-tools/kubeadm/kubeadm-alpha/#cmd-selfhosting) -命令。 - - - - -#### 警告 - - -{{< caution >}} -此功能将您的集群设置为不受支持的状态,从而使 kubeadm 无法再管理您的集群。 -这包括 `kubeadm 升级` 。 -{{< /caution >}} - - -1. 1.8及更高版本中的自托管功能有一些重要限制。 - 特别是,自托管集群在没有人工干预的情况下_无法从控制平面节点的重新启动中恢复_ 。 - - -2. 默认情况下,自托管的控制平面 Pod 依赖于从 - [`hostPath`](/zh/docs/concepts/storage/volumes/#hostpath) 卷加载的凭据。 - 除初始创建外,这些凭据不由 kubeadm 管理。 - - -3. 控制平面的自托管部分不包括 etcd,后者仍作为静态 Pod 运行。 - - -#### 过程 - -自托管引导过程描述于 [kubeadm 设计文档](https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.9.md#optional-self-hosting) 中。 - - -总体而言,`kubeadm alpha 自托管` 的工作原理如下: - - - 1. 等待此引导静态控制平面运行且良好。 - 这与没有自我托管的 `kubeadm init` 过程相同。 - - 2. 使用静态控制平面 Pod 清单来构造一组 DaemonSet 清单,这些清单将运行自托管的控制平面。 - 它还会在必要时修改这些清单,例如添加新的 secrets 卷。 - - - 3. 在 `kube-system` 名称空间中创建 DaemonSets ,并等待生成的 Pod 运行。 - - - 4. 自托管 Pod 运行后,将删除其关联的静态 Pod,然后 kubeadm 继续安装下一个组件。 - 这将触发 kubelet 停止那些静态 Pod 。 - - - 5. 当原始静态控制平面停止时,新的自托管控制平面能够绑定到侦听端口并变为活动状态。 - - diff --git a/content/zh/docs/setup/production-environment/tools/kubespray.md b/content/zh/docs/setup/production-environment/tools/kubespray.md index 0120acd20c..f77ed09e74 100644 --- a/content/zh/docs/setup/production-environment/tools/kubespray.md +++ b/content/zh/docs/setup/production-environment/tools/kubespray.md @@ -44,7 +44,7 @@ Kubespray 提供: * 支持大多数流行的 Linux 发行版 * Ubuntu 16.04、18.04、20.04 * CentOS / RHEL / Oracle Linux 7、8 - * Debian Buster,Jessie,Stretch,Wheezy + * Debian Buster、Jessie、Stretch、Wheezy * Fedora 31、32 * Fedora CoreOS * openSUSE Leap 15 diff --git a/content/zh/docs/tasks/access-application-cluster/access-cluster.md b/content/zh/docs/tasks/access-application-cluster/access-cluster.md index be848efce8..52099d3a2a 100644 --- a/content/zh/docs/tasks/access-application-cluster/access-cluster.md +++ b/content/zh/docs/tasks/access-application-cluster/access-cluster.md @@ -381,7 +381,7 @@ You have several options for connecting to nodes, pods and services from outside - Use a service with type `NodePort` or `LoadBalancer` to make the service reachable outside the cluster. See the [services](/docs/user-guide/services) and [kubectl expose](/docs/reference/generated/kubectl/kubectl-commands/#expose) documentation. - - Depending on your cluster environment, this may just expose the service to your corporate network, + - Depending on your cluster environment, this may only expose the service to your corporate network, or it may expose it to the internet. Think about whether the service being exposed is secure. Does it do its own authentication? - Place pods behind services. To access one specific pod from a set of replicas, such as for debugging, @@ -482,10 +482,10 @@ at `https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-l #### 手动构建 apiserver 代理 URL {#manually-constructing-apiserver-proxy-urls} 如上所述,你可以使用 `kubectl cluster-info` 命令来获得服务的代理 URL。 -要创建包含服务端点、后缀和参数的代理 URL,只需添加到服务的代理 URL: +要创建包含服务端点、后缀和参数的代理 URL,需添加到服务的代理 URL: `http://`*`kubernetes_master_address`*`/api/v1/namespaces/`*`namespace_name`*`/services/`*`service_name[:port_name]`*`/proxy` 如果尚未为端口指定名称,则不必在 URL 中指定 *port_name*。 +对于已命名和未命名的端口,也可以使用端口号代替 *port_name*。 默认情况下,API server 使用 HTTP 代理你的服务。 要使用 HTTPS,请在服务名称前加上 `https:`: @@ -512,9 +513,9 @@ The supported formats for the name segment of the URL are: URL 名称段支持的格式为: * `` - 使用 http 代理到默认或未命名的端口 -* `:` - 使用 http 代理到指定的端口 +* `:` - 使用 http 代理到指定的端口名称或端口号 * `https::` - 使用 https 代理到默认或未命名的端口(注意后面的冒号) -* `https::` - 使用 https 代理到指定的端口 +* `https::` - 使用 https 代理到指定的端口名称或端口号 3. [kube proxy](/zh/docs/concepts/services-networking/service/#ips-and-vips): 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 index 4219ca4f20..d52d2e5233 100644 --- 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 @@ -12,35 +12,35 @@ weight: 40 本文展示如何使用 `kubectl port-forward` 连接到在 Kubernetes 集群中 -运行的 Redis 服务。这种类型的连接对数据库调试很有用。 +运行的 MongoDB 服务。这种类型的连接对数据库调试很有用。 ## {{% heading "prerequisites" %}} * {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -* 安装 [redis-cli](http://redis.io/topics/rediscli)。 +* 安装 [MongoDB Shell](https://www.mongodb.com/try/download/shell)。 -## 创建 Redis deployment 和服务 +## 创建 MongoDB deployment 和服务 -1. 创建一个 Redis deployment: +1. 创建一个运行 MongoDB 的 deployment: ```shell - kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-deployment.yaml + kubectl apply -f https://k8s.io/examples/application/guestbook/mongo-deployment.yaml ``` - 查看 deployment 状态: + 查看 Deployment 状态: ```shell kubectl get deployment ``` - 输出显示创建的 deployment: + 输出显示创建的 Deployment: ``` - NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE - redis-master 1 1 1 1 55s + NAME READY UP-TO-DATE AVAILABLE AGE + mongo 1/1 1 1 2m21s ``` - 查看 replicaset 状态: + Deployment 自动管理 ReplicaSet。 + 查看 ReplicaSet 状态: ```shell - kubectl get rs + kubectl get replicaset ``` - 输出显示创建的 replicaset: + 输出显示创建的 ReplicaSet: ``` - NAME DESIRED CURRENT READY AGE - redis-master-765d459796 1 1 1 1m + NAME DESIRED CURRENT READY AGE + mongo-75f59d57f4 1 1 1 3m12s ``` -2. 创建一个 Redis 服务: +2. 创建一个在网络上公开的 MongoDB 服务: ```shell - kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-service.yaml + kubectl apply -f https://k8s.io/examples/application/guestbook/mongo-service.yaml ``` - 查看输出是否成功,以验证是否成功创建 service: + 查看输出是否成功,以验证是否成功创建 Service: ``` - service/redis-master created + service/mongo created ``` - 检查 service 是否创建: + 检查 Service 是否创建: ```shell - kubectl get svc | grep redis + kubectl get service mongo ``` - 输出显示创建的 service: + 输出显示创建的 Service: ``` - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE - redis-master ClusterIP 10.0.0.213 6379/TCP 27s + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + mongo ClusterIP 10.96.41.183 27017/TCP 11s ``` -3. 验证 Redis 服务是否运行在 pod 中并且监听 6379 端口: +3. 验证 MongoDB 服务是否运行在 Pod 中并且监听 27017 端口: ```shell - kubectl get pods redis-master-765d459796-258hz \ - --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' + # Change mongo-75f59d57f4-4nd6q to the name of the Pod + kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' ``` + - 输出应该显示端口: + 输出应该显示 Pod 中 MongoDB 的端口: ``` - 6379 + 27017 ``` + + (这是 Internet 分配给 MongoDB 的 TCP 端口)。 + -## 转发一个本地端口到 pod 端口 +## 转发一个本地端口到 Pod 端口 -1. 从 Kubernetes v1.10 开始,`kubectl port-forward` 允许使用资源名称 +1. `kubectl port-forward` 允许使用资源名称 (例如 pod 名称)来选择匹配的 pod 来进行端口转发。 ```shell - kubectl port-forward redis-master-765d459796-258hz 7000:6379 + # Change mongo-75f59d57f4-4nd6q to the name of the Pod + kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017 ``` + 这相当于 ```shell - kubectl port-forward pods/redis-master-765d459796-258hz 7000:6379 + kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017 ``` 或者 ```shell - kubectl port-forward deployment/redis-master 7000:6379 + kubectl port-forward deployment/mongo 28015:27017 ``` 或者 ```shell - kubectl port-forward rs/redis-master 7000:6379 + kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017 ``` 或者 - ``` - kubectl port-forward svc/redis-master 7000:redis + ```shell + kubectl port-forward service/mongo 28015:27017 ``` -2. 启动 Redis 命令行接口: +2. 启动 MongoDB 命令行接口: ```shell - redis-cli -p 7000 + mongosh --port 28015 ``` -3. 在 Redis 命令行提示符下,输入 `ping` 命令: +3. 在 MongoDB 命令行提示符下,输入 `ping` 命令: ``` - ping + db.runCommand( { ping: 1 } ) ``` @@ -270,43 +281,54 @@ the slightly simpler syntax: 以便你不需要管理本地端口冲突。该命令使用稍微不同的语法: ```shell -kubectl port-forward deployment/redis-master :6379 +kubectl port-forward deployment/mongo :27017 ``` + + +输出应该类似于: + +``` +Forwarding from 127.0.0.1:63753 -> 27017 +Forwarding from [::1]:63753 -> 27017 +``` + -`kubectl` 工具会找到一个未被使用的本地端口号(避免使用低段位的端口号,因为他们可能会被其他应用程序使用)。输出应该类似于: +`kubectl` 工具会找到一个未被使用的本地端口号(避免使用低段位的端口号,因为他们可能会被其他应用程序使用)。 +输出应该类似于: ``` -Forwarding from 127.0.0.1:62162 -> 6379 -Forwarding from [::1]:62162 -> 6379 +Forwarding from 127.0.0.1:63753 -> 27017 +Forwarding from [::1]:63753 -> 27017 ``` - ## 讨论 {#discussion} -与本地 7000 端口建立的连接将转发到运行 Redis 服务器的 pod 的 6379 端口。 -通过此连接,您可以使用本地工作站来调试在 pod 中运行的数据库。 +与本地 28015 端口建立的连接将转发到运行 MongoDB 服务器的 Pod 的 27017 端口。 +通过此连接,您可以使用本地工作站来调试在 Pod 中运行的数据库。 {{< warning >}} -由于已知的限制,目前的端口转发仅适用于 TCP 协议。 +`kubectl port-forward` 仅适用于 TCP 端口。 在 [issue 47862](https://github.com/kubernetes/kubernetes/issues/47862) -中正在跟踪对 UDP 协议的支持。 +中跟踪了对 UDP 协议的支持。 {{< /warning >}} ## {{% heading "whatsnext" %}} diff --git a/content/zh/docs/tasks/administer-cluster/enabling-endpointslices.md b/content/zh/docs/tasks/administer-cluster/enabling-endpointslices.md deleted file mode 100644 index 80ac9f50ce..0000000000 --- a/content/zh/docs/tasks/administer-cluster/enabling-endpointslices.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -reviewers: -title: 启用 EndpointSlices -content_type: task ---- - - - - - - -本页提供启用 Kubernetes EndpointSlice 的总览。 - -## {{% heading "prerequisites" %}} - -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} - - - - -## 介绍 - -EndpointSlice (端点切片)为 Kubernetes Endpoints 提供了可伸缩和可扩展的替代方案。 -它们建立在 Endpoints 提供的功能基础之上,并以可伸缩的方式进行扩展。 -当 Service 具有大量(>100)网络端点时,它们将被分成多个较小的 EndpointSlice 资源, -而不是单个大型 Endpoints 资源。 - - -## 启用 EndpointSlice - -{{< feature-state for_k8s_version="v1.17" state="beta" >}} - -{{< note >}} - -EndpointSlice 资源旨在解决较早资源:Endpoints 中的缺点。一些 Kubernetes 组件和第三方应用程序 -继续使用并依赖 Endpoints。既然情况如此,应该将 EndpointSlices 视为集群中 Endpoints 的补充,而不是 -彻底替代。 -{{< /note >}} - - -Kubernetes 中的 EndpointSlice 功能包含若干不同组件。它们中的大部分都是 -默认被启用的: - - -* _EndpointSlice API_:EndpointSlice 隶属于 `discovery.k8s.io/v1beta1` API。 - 此 API 处于 Beta 阶段,从 Kubernetes 1.17 开始默认被启用。 - 下面列举的所有组件都依赖于此 API 被启用。 -* _EndpointSlice 控制器_:此 {{< glossary_tooltip text="控制器" term_id="controller" >}} - 为 Service 维护 EndpointSlice 及其引用的 Pods。 - 此控制器通过 `EndpointSlice` 特性门控控制。自从 Kubernetes 1.18 起, - 该特性门控默认被启用。 - - -* _EndpointSliceMirroring 控制器_:此 {{< glossary_tooltip text="控制器" term_id="controller" >}} - 将自定义的 Endpoints 映射为 EndpointSlice。 - 控制器受 `EndpointSlice` 特性门控控制。该特性门控自 1.19 开始被默认启用。 -* _kube-proxy_:当 {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy">}} - 被配置为使用 EndpointSlice 时,它会支持更大数量的 Service 端点。 - 此功能在 Linux 上受 `EndpointSliceProxying` 特性门控控制;在 Windows 上受 - `WindowsEndpointSliceProxying` 特性门控控制。 - 在 Linux 上,从 Kubernetes 1.19 版本起自动启用。目前尚未在 Windows 节点 - 上默认启用。 - 要在 Windows 节点上配置 kube-proxy 使用 EndpointSlice,你需要为 kube-proxy 启用 - `WindowsEndpointSliceProxying` - [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。 - - - -## API 字段 - -EndpointSlice API 中的某些字段有对应的特性门控控制。 - -- `EndpointSliceNodeName` 特性门控控制对 `nodeName` 字段的访问。这是默认情况下禁用的 Alpha 功能。 -- `EndpointSliceTerminating` 特性门控控制对 `serving` 和 `terminating` 状况字段的访问。这是默认情况下禁用的 Alpha 功能。 - - -## 使用 EndpointSlice - -在集群中完全启用 EndpointSlice 的情况下,你应该看到对应于每个 -Endpoints 资源的 EndpointSlice 资源。除了支持现有的 Endpoints 功能外, -EndpointSlices 将允许集群中网络端点更好的可伸缩性和可扩展性。 - - -## {{% heading "whatsnext" %}} - - -* 参阅 [EndpointSlices](/zh/docs/concepts/services-networking/endpoint-slices/) -* 参阅[将应用程序与服务连接](/zh/docs/concepts/services-networking/connect-applications-service/) diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md b/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md new file mode 100644 index 0000000000..3d55a4f2ee --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md @@ -0,0 +1,240 @@ +--- +title: 配置 cgroup 驱动 +content_type: task +weight: 10 +--- + + + + + +本页阐述如何配置 kubelet 的 cgroup 驱动以匹配 kubeadm 集群中的容器运行时的 cgroup 驱动。 + +## {{% heading "prerequisites" %}} + + +你应该熟悉 Kubernetes 的[容器运行时需求](/zh/docs/setup/production-environment/container-runtimes)。 + + + +## 配置容器运行时 cgroup 驱动 {#configuring-the-container-runtime-cgroup-driver} + + +[容器运行时](/zh/docs/setup/production-environment/container-runtimes)页面提到: +由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装, +我们推荐使用 `systemd` 驱动,不推荐 `cgroupfs` 驱动。 + + +此页还详述了如何安装若干不同的容器运行时,并将 `systemd` 设为其默认驱动。 + + +## 配置 kubelet 的 cgroup 驱动 + + +kubeadm 支持在执行 `kubeadm init` 时,传递一个 `KubeletConfiguration` 结构体。 +`KubeletConfiguration` 包含 `cgroupDriver` 字段,可用于控制 kubelet 的 cgroup 驱动。 + + + +{{< feature-state for_k8s_version="v1.21" state="stable" >}} + +{{< note >}} +如果用户没有在 `KubeletConfiguration` 中设置 `cgroupDriver` 字段, +`kubeadm init` 会将它设置为默认值 `systemd`。 +{{< /note >}} + + +这是一个最小化的示例,其中显式的配置了此字段: + +```yaml +# kubeadm-config.yaml +kind: ClusterConfiguration +apiVersion: kubeadm.k8s.io/v1beta2 +kubernetesVersion: v1.21.0 +--- +kind: KubeletConfiguration +apiVersion: kubelet.config.k8s.io/v1beta1 +cgroupDriver: systemd +``` + + +这样一个配置文件就可以传递给 kubeadm 命令了: + +```shell +kubeadm init --config kubeadm-config.yaml +``` + + +{{< note >}} +Kubeadm 对集群所有的节点,使用相同的 `KubeletConfiguration`。 +`KubeletConfiguration` 存放于 `kube-system` 命名空间下的某个 +[ConfigMap](/zh/docs/concepts/configuration/configmap) 对象中。 + +执行 `init`、`join` 和 `upgrade` 等子命令会促使 kubeadm +将 `KubeletConfiguration` 写入到文件 `/var/lib/kubelet/config.yaml` 中, +继而把它传递给本地节点的 kubelet。 + +{{< /note >}} + + +# 使用 `cgroupfs` 驱动 + + +正如本指南阐述的:不推荐与 kubeadm 一起使用 `cgroupfs` 驱动。 + +如仍需使用 `cgroupfs`, +且要防止 `kubeadm upgrade` 修改现有系统中 `KubeletConfiguration` 的 cgroup 驱动, +你必须显式声明它的值。 +此方法应对的场景为:在将来某个版本的 kubeadm 中,你不想使用默认的 `systemd` 驱动。 + + +参阅以下章节“修改 kubelet 的 ConfigMap”,了解显式设置该值的方法。 + +如果你希望配置容器运行时来使用 `cgroupfs` 驱动, +则必须参考所选容器运行时的文档。 + + +## 迁移到 `systemd` 驱动 + + +要将现有 kubeadm 集群的 cgroup 驱动就地升级为 `systemd`, +需要执行一个与 kubelet 升级类似的过程。 +该过程必须包含下面两个步骤: + + +{{< note >}} +还有一种方法,可以用已配置了 `systemd` 的新节点替换掉集群中的老节点。 +按这种方法,在加入新节点、确保工作负载可以安全迁移到新节点、及至删除旧节点这一系列操作之前, +只需执行以下第一个步骤。 +{{< /note >}} + + +### 修改 kubelet 的 ConfigMap + + +- 用命令 `kubectl get cm -n kube-system | grep kubelet-config` 找到 kubelet 的 ConfigMap 名称。 +- 运行 `kubectl edit cm kubelet-config-x.yy -n kube-system` (把 `x.yy` 替换为 Kubernetes 版本)。 +- 修改现有 `cgroupDriver` 的值,或者新增如下式样的字段: + + ```yaml + cgroupDriver: systemd + ``` + + 该字段必须出现在 ConfigMap 的 `kubelet:` 小节下。 + + +### 更新所有节点的 cgroup 驱动 + + +对于集群中的每一个节点: + +- 执行命令 `kubectl drain --ignore-daemonsets`,以 + [腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node) +- 执行命令 `systemctl stop kubelet`,以停止 kubelet +- 停止容器运行时 +- 修改容器运行时 cgroup 驱动为 `systemd` +- 在文件 `/var/lib/kubelet/config.yaml` 中添加设置 `cgroupDriver: systemd` +- 启动容器运行时 +- 执行命令 `systemctl start kubelet`,以启动 kubelet +- 执行命令 `kubectl uncordon `,以 + [取消节点隔离](/zh/docs/tasks/administer-cluster/safely-drain-node) + + +在节点上依次执行上述步骤,确保工作负载有充足的时间被调度到其他节点。 + +流程完成后,确认所有节点和工作负载均健康如常。 diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md index 4a2006bfa5..ab0372b1a9 100644 --- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md @@ -61,10 +61,9 @@ and kubeadm will use this CA for signing the rest of the certificates. `/etc/kubernetes/pki/ca.key` 中,而 kubeadm 将使用此 CA 对其余证书进行签名。 -否则, kubeadm 将独立运行 controller-manager,附加一个 `--controllers=csrsigner` 的参数,并且指明 CA 证书和密钥。 +否则, kubeadm 将独立运行 controller-manager,附加一个 +`--controllers=csrsigner` 的参数,并且指明 CA 证书和密钥。 -[PKI证书和要求](/zh/docs/setup/best-practices/certificates/)包括集群使用外部CA的设置指南。 - - -[PKI 证书和要求](/zh/docs/setup/best-practices/certificates/)包括关于用外部 CA 设置集群的指南。 +[PKI 证书和要求](/zh/docs/setup/best-practices/certificates/)包括集群使用外部 CA 的设置指南。 +## 启用已签名的 kubelet 服务证书 {#kubelet-serving-certs} + +默认情况下,kubeadm 所部署的 kubelet 服务证书是自签名(Self-Signed))。 +这意味着从 [metrics-server](https://github.com/kubernetes-sigs/metrics-server) +这类外部服务发起向 kubelet 的链接时无法使用 TLS 来完成保护。 + +要在新的 kubeadm 集群中配置 kubelet 以使用被正确签名的服务证书, +你必须向 `kubeadm init` 传递如下最小配置数据: + +```yaml +apiVersion: kubeadm.k8s.io/v1beta2 +kind: ClusterConfiguration +--- +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +serverTLSBootstrap: true +``` + + +如果你已经创建了集群,你必须通过执行下面的操作来完成适配: + +- 找到 `kube-system` 名字空间中名为 `kubelet-config-{{< skew latestVersion >}}` + 的 ConfigMap 并编辑之。 + 在该 ConfigMap 中,`config` 键下面有一个 + [KubeletConfiguration](/zh/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration) + 文档作为其取值。编辑该 KubeletConfiguration 文档以设置 + `serverTLSBootstrap: true`。 +- 在每个节点上,在 `/var/lib/kubelet/config.yaml` 文件中添加 + `serverTLSBootstrap: true` 字段,并使用 `systemctl restart kubelet` + 来重启 kubelet。 + + +字段 `serverTLSBootstrap` 将允许启动引导 kubelet 的服务证书,方式 +是从 `certificates.k8s.io` API 处读取。这种方式的一种局限在于这些 +证书的 CSR(证书签名请求)不能被 kube-controller-manager 中默认的 +签名组件 +[`kubernetes.io/kubelet-serving`](/zh/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers) +批准。需要用户或者第三方控制器来执行此操作。 + +可以使用下面的命令来查看 CSR: + +```shell +kubectl get csr +``` + +```none +NAME AGE SIGNERNAME REQUESTOR CONDITION +csr-9wvgt 112s kubernetes.io/kubelet-serving system:node:worker-1 Pending +csr-lz97v 1m58s kubernetes.io/kubelet-serving system:node:control-plane-1 Pending +``` + + +你可以执行下面的操作来批准这些请求: + +```shell +kubectl certificate approve +``` + + +默认情况下,这些服务证书上会在一年后过期。 +kubeadm 将 `KubeletConfiguration` 的 `rotateCertificates` 字段设置为 +`true`;这意味着证书快要过期时,会生成一组针对服务证书的新的 CSR,而 +这些 CSR 也要被批准才能完成证书轮换。 +要进一步了解这里的细节,可参阅 +[证书轮换](/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#certificate-rotation) +文档。 + + +如果你在寻找一种能够自动批准这些 CSR 的解决方案,建议你与你的云提供商 +联系,询问他们是否有 CSR 签名组件,用来以带外(out-of-band)的方式检查 +节点的标识符。 + +{{% thirdparty-content %}} + + +也可以使用第三方定制的控制器: + +- [kubelet-rubber-stamp](https://github.com/kontena/kubelet-rubber-stamp) + +除非既能够验证 CSR 中的 CommonName,也能检查请求的 IP 和域名, +这类控制器还算不得安全的机制。 +只有完成彻底的检查,才有可能避免有恶意的、能够访问 kubelet 客户端证书的第三方 +为任何 IP 或域名请求服务证书。 + diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md index c90700aec1..81623a6b4c 100644 --- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md @@ -585,10 +585,10 @@ and post-upgrade manifest file for a certain component, a backup file for it wil - Makes sure the control plane images are available or available to pull to the machine. - Generates replacements and/or uses user supplied overwrites if component configs require version upgrades. - 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 makes sure that all necessary RBAC rules are created. +- Applies the new `CoreDNS` and `kube-proxy` manifests and makes sure 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. --> -## 工作原理 +## 工作原理 {#how-it-works} `kubeadm upgrade apply` 做了以下工作: @@ -600,7 +600,7 @@ and post-upgrade manifest file for a certain component, a backup file for it wil - 确保控制面的镜像是可用的或可拉取到服务器上。 - 如果组件配置要求版本升级,则生成替代配置与/或使用用户提供的覆盖版本配置。 - 升级控制面组件或回滚(如果其中任何一个组件无法启动)。 -- 应用新的 `kube-dns` 和 `kube-proxy` 清单,并强制创建所有必需的 RBAC 规则。 +- 应用新的 `CoreDNS` 和 `kube-proxy` 清单,并强制创建所有必需的 RBAC 规则。 - 如果旧文件在 180 天后过期,将创建 API 服务器的新证书和密钥文件并备份旧文件。 @@ -248,8 +248,8 @@ data: ## 清理 {#clean-up} - -删除你刚才创建的 Secret: + +删除你创建的 Secret: ```shell kubectl delete secret mysecret @@ -260,7 +260,7 @@ kubectl delete secret mysecret - 进一步阅读 [Secret 概念](/zh/docs/concepts/configuration/secret/) - 了解如何[使用 `kubectl` 命令管理 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/) diff --git a/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md b/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md index 7aaf473337..a4be3c9d04 100644 --- a/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md +++ b/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md @@ -5,7 +5,7 @@ weight: 10 description: 使用 kubectl 命令行创建 Secret 对象。 --- -上面两个命令中的 `-n` 标志确保生成的文件在文本末尾不包含额外的换行符。 +在这些命令中,`-n` 标志确保生成的文件在文本末尾不包含额外的换行符。 这一点很重要,因为当 `kubectl` 读取文件并将内容编码为 base64 字符串时,多余的换行符也会被编码。 默认密钥名称是文件名。 你可以选择使用 `--from-file=[key=]source` 来设置密钥名称。例如: @@ -78,10 +78,10 @@ kubectl create secret generic db-user-pass \ ``` -你无需转义文件(`--from-file`)中的密码的特殊字符。 +你不需要对文件中包含的密码字符串中的特殊字符进行转义。 你还可以使用 `--from-literal==` 标签提供 Secret 数据。 可以多次使用此标签,提供多个键值对。 -请注意,特殊字符(例如:`$`,`\`,`*`,`=` 和 `!`)由你的 [shell](https://en.wikipedia.org/wiki/Shell_(computing)) 解释执行,而且需要转义。 +请注意,特殊字符(例如:`$`,`\`,`*`,`=` 和 `!`)由你的 [shell](https://en.wikipedia.org/wiki/Shell_(computing)) +解释执行,而且需要转义。 + 在大多数 shell 中,转义密码最简便的方法是用单引号括起来。 比如,如果你的密码是 `S!B\*d$zDsb=`, 可以像下面一样执行命令: @@ -109,8 +112,8 @@ kubectl create secret generic dev-db-secret \ ## 验证 Secret {#verify-the-secret} - -你可以检查 secret 是否已创建: + +检查 secret 是否已创建: ```shell kubectl get secrets @@ -151,19 +154,18 @@ username: 5 bytes `kubectl get` 和 `kubectl describe` 命令默认不显示 `Secret` 的内容。 -这是为了防止 `Secret` 被意外暴露给旁观者或存储在终端日志中。 +这是为了防止 `Secret` 被意外暴露或存储在终端日志中。 ## 解码 Secret {#decoding-secret} -要查看我们刚刚创建的 Secret 的内容,可以运行以下命令: +要查看创建的 Secret 的内容,运行以下命令: ```shell kubectl get secret db-user-pass -o jsonpath='{.data}' @@ -195,8 +197,8 @@ echo 'MWYyZDFlMmU2N2Rm' | base64 --decode ## 清理 {#clean-up} - -删除刚刚创建的 Secret: + +删除创建的 Secret: ```shell kubectl delete secret db-user-pass @@ -208,8 +210,8 @@ kubectl delete secret db-user-pass - 进一步阅读 [Secret 概念](/zh/docs/concepts/configuration/secret/) - 了解如何[使用配置文件管理 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-config-file/) diff --git a/content/zh/docs/tasks/configmap-secret/managing-secret-using-kustomize.md b/content/zh/docs/tasks/configmap-secret/managing-secret-using-kustomize.md index d1a17280ed..d3527510eb 100644 --- a/content/zh/docs/tasks/configmap-secret/managing-secret-using-kustomize.md +++ b/content/zh/docs/tasks/configmap-secret/managing-secret-using-kustomize.md @@ -125,7 +125,7 @@ kubectl describe secrets/db-user-pass-96mffmfh4k 输出类似于: ``` -Name: db-user-pass +Name: db-user-pass-96mffmfh4k Namespace: default Labels: Annotations: @@ -154,8 +154,8 @@ To check the actual content of the encoded data, please refer to ## 清理 {#clean-up} - -删除你刚才创建的 Secret: + +删除你创建的 Secret: ```shell kubectl delete secret db-user-pass-96mffmfh4k diff --git a/content/zh/docs/tasks/configure-pod-container/assign-cpu-resource.md b/content/zh/docs/tasks/configure-pod-container/assign-cpu-resource.md index cc8d90cc88..df1636c8dd 100644 --- a/content/zh/docs/tasks/configure-pod-container/assign-cpu-resource.md +++ b/content/zh/docs/tasks/configure-pod-container/assign-cpu-resource.md @@ -166,9 +166,9 @@ kubectl top pod cpu-demo --namespace=cpu-example -此示例输出显示 Pod 使用的是 974 milliCPU,即仅略低于 Pod 配置中指定的 1 个 CPU 的限制。 +此示例输出显示 Pod 使用的是 974 milliCPU,即略低于 Pod 配置中指定的 1 个 CPU 的限制。 ``` NAME CPU(cores) MEMORY(bytes) diff --git a/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md b/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md index 95a80ea123..3687f9b918 100644 --- a/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md +++ b/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md @@ -479,7 +479,7 @@ If you add the `lifecycle` section show above to your Pod spec, the Pod will exe ## GMSA 的局限 {#gmsa-limitations} diff --git a/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md index a55821b51f..7355e5c11e 100644 --- a/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md +++ b/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md @@ -8,10 +8,10 @@ weight: 110 这篇文章介绍如何给容器配置存活、就绪和启动探测器。 @@ -22,12 +22,12 @@ despite bugs. 这样的情况下重启容器有助于让应用程序在有问题的情况下更可用。 @@ -56,7 +56,7 @@ Many applications running for long periods of time eventually transition to broken states, and cannot recover except by being restarted. Kubernetes provides liveness probes to detect and remedy such situations. -In this exercise, you create a Pod that runs a Container based on the +In this exercise, you create a Pod that runs a container based on the `k8s.gcr.io/busybox` image. Here is the configuration file for the Pod: --> ## 定义存活命令 {#define-a-liveness-command} @@ -70,16 +70,16 @@ Kubernetes 提供了存活探测器来发现并补救这种情况。 {{< codenew file="pods/probe/exec-liveness.yaml" >}} 在这个配置文件中,可以看到 Pod 中只有一个容器。 `periodSeconds` 字段指定了 kubelet 应该每 5 秒执行一次存活探测。 @@ -95,7 +95,7 @@ kubelet 在容器内执行命令 `cat /tmp/healthy` 来进行探测。 ``` 在这个配置文件中,可以看到 Pod 也只有一个容器。 @@ -217,14 +217,14 @@ Any code greater than or equal to 200 and less than 400 indicates success. Any other code indicates failure. You can see the source code for the server in -[server.go](https://github.com/kubernetes/kubernetes/blob/master/test/images/agnhost/liveness/server.go). +[server.go](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/test/images/agnhost/liveness/server.go). -For the first 10 seconds that the Container is alive, the `/healthz` handler +For the first 10 seconds that the container is alive, the `/healthz` handler returns a status of 200. After that, the handler returns a status of 500. --> 任何大于或等于 200 并且小于 400 的返回代码标示成功,其它返回代码都标示失败。 -可以在这里看服务的源码 [server.go](https://github.com/kubernetes/kubernetes/blob/master/test/images/agnhost/liveness/server.go)。 +可以在这里看服务的源码 [server.go](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/test/images/agnhost/liveness/server.go)。 容器存活的最开始 10 秒中,`/healthz` 处理程序返回一个 200 的状态码。之后处理程序返回 500 的状态码。 @@ -242,9 +242,9 @@ http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { ``` @@ -259,7 +259,7 @@ kubectl apply -f https://k8s.io/examples/pods/probe/http-liveness.yaml 10 秒之后,通过看 Pod 事件来检测存活探测器已经失败了并且容器被重新启动了。 @@ -269,7 +269,7 @@ kubectl describe pod liveness-http +{{< caution >}} +活跃性探测器 *不等待* 就绪性探测器成功。 +如果要在执行活跃性探测器之前等待,应该使用 initialDelaySeconds 或 startupProbe。 +{{< /caution >}} + +### 探测器级别 `terminationGracePeriodSeconds` + +{{< feature-state for_k8s_version="v1.21" state="alpha" >}} + + +在 1.21 版之前,pod 级别的 `terminationGracePeriodSeconds` 被用来终止 +未能成功处理活跃性探测或启动探测的容器。 +这种耦合是意料之外的,可能会导致在设置了 pod 级别的 `terminationGracePeriodSeconds` 后, +需要很长的时间来重新启动失败的容器。 + + +在1.21中,启用特性标志 `ProbeTerminationGracePeriod` 后, +用户可以指定一个探测器级别的 `terminationGracePeriodSeconds` 作为探测器规格的一部分。 +当该特性标志被启用时,若同时设置了 Pod 级别和探测器级别的 `terminationGracePeriodSeconds`, +kubelet 将使用探测器级的值。 + +例如, + +```yaml +spec: + terminationGracePeriodSeconds: 3600 # pod-level + containers: + - name: test + image: ... + + ports: + - name: liveness-port + containerPort: 8080 + hostPort: 8080 + + livenessProbe: + httpGet: + path: /healthz + port: liveness-port + failureThreshold: 1 + periodSeconds: 60 + # Override pod-level terminationGracePeriodSeconds # + terminationGracePeriodSeconds: 60 +``` + + +探测器级别的 `terminationGracePeriodSeconds` 不能用于设置就绪态探针。 +它将被 API 服务器拒绝。 + ## {{% heading "whatsnext" %}} -### 参考 {#reference} +你也可以阅读以下的 API 参考资料: * [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core) * [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) diff --git a/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md index 2399e89ad7..ddbf118dbc 100644 --- a/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md +++ b/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md @@ -293,8 +293,17 @@ how.nice.to.look=fairlyNice ``` +当 `kubectl` 基于非 ASCII 或 UTF-8 的输入创建 ConfigMap 时, +该工具将这些输入放入 ConfigMap 的 `binaryData` 字段,而不是 `data` 中。 +同一个 ConfigMap 中可同时包含文本数据和二进制数据源。 +如果你想查看 ConfigMap 中的 `binaryData` 键(及其值), +你可以运行 `kubectl get configmap -o jsonpath='{.binaryData}' `。 + 使用 `--from-env-file` 选项从环境文件创建 ConfigMap,例如: 那么你就能看到系统已经自动创建了一个令牌并且被服务账户所引用。 @@ -198,7 +198,7 @@ field of a pod to the name of the service account you wish to use. 你可以使用授权插件来 [设置服务账户的访问许可](/zh/docs/reference/access-authn-authz/rbac/#service-account-permissions)。 -要使用非默认的服务账户,只需简单的将 Pod 的 `spec.serviceAccountName` 字段设置为你想用的服务账户名称。 +要使用非默认的服务账户,将 Pod 的 `spec.serviceAccountName` 字段设置为你想用的服务账户名称。 ## 发现服务账号分发者 -{{< feature-state for_k8s_version="v1.20" state="beta" >}} +{{< feature-state for_k8s_version="v1.21" state="stable" >}} -通过启用 `ServiceAccountIssuerDiscovery` -[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates), -并按[前文所述](#service-account-token-volume-projection)启用服务账号令牌投射, -可以启用发现服务账号分发者(Service Account Issuer Discovery)这一功能特性。 +当启用服务账号令牌投射时启用发现服务账号分发者(Service Account Issuer Discovery)这一功能特性, +如[上文所述](#service-account-token-volume-projection)。 -特性被启用时,集群也会配置名为 `system:service-account-issuer-discovery` -的默认 RBAC ClusterRole,但默认情况下不提供角色绑定对象。 +集群包括一个默认的 RBAC ClusterRole, +名为 `system:service-account-issuer-discovery`。 +默认情况下不提供角色绑定对象。 举例而言,管理员可以根据其安全性需要以及期望集成的外部系统选择是否将该角色绑定到 `system:authenticated` 或 `system:unauthenticated`。 diff --git a/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md b/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md index f9e4389762..6ddd85537b 100644 --- a/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md +++ b/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md @@ -109,7 +109,8 @@ kubectl create secret docker-registry regcred \ ## 检查 Secret `regcred` @@ -231,7 +232,8 @@ janedoe/jdoe-private:v1 diff --git a/content/zh/docs/tasks/configure-pod-container/static-pod.md b/content/zh/docs/tasks/configure-pod-container/static-pod.md index 582e94616d..a202caf1b5 100644 --- a/content/zh/docs/tasks/configure-pod-container/static-pod.md +++ b/content/zh/docs/tasks/configure-pod-container/static-pod.md @@ -27,6 +27,7 @@ The kubelet automatically tries to create a {{< glossary_tooltip text="mirror Po on the Kubernetes API server for each static Pod. This means that the Pods running on a node are visible on the API server, but cannot be controlled from there. +The Pod names will suffixed with the node hostname with a leading hyphen {{< note >}} If you are running clustered Kubernetes and are using static @@ -40,6 +41,7 @@ instead. kubelet 会尝试通过 Kubernetes API 服务器为每个静态 Pod 自动创建一个 {{< glossary_tooltip text="镜像 Pod" term_id="mirror-pod" >}}。 这意味着节点上运行的静态 Pod 对 API 服务来说是可见的,但是不能通过 API 服务器来控制。 +Pod 名称将把以连字符开头的节点主机名作为后缀。 {{< note >}} 如果你在运行一个 Kubernetes 集群,并且在每个节点上都运行一个静态 Pod, @@ -48,7 +50,6 @@ kubelet 会尝试通过 Kubernetes API 服务器为每个静态 Pod 自动创建 ## {{% heading "prerequisites" %}} - {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} 3. 配置这个节点上的 kubelet,使用这个参数执行 `--pod-manifest-path=/etc/kubelet.d/`。 在 Fedora 上编辑 `/etc/kubernetes/kubelet` 以包含下行: @@ -161,16 +165,16 @@ For example, this is how to start a simple web server as a static Pod: ``` KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/" ``` - 或者在 [Kubelet配置文件](/zh/docs/tasks/administer-cluster/kubelet-config-file/) + 或者在 [Kubelet 配置文件](/zh/docs/reference/config-api/kubelet-config.v1beta1/) 中添加 `staticPodPath: <目录>`字段。 4. 重启 kubelet。Fedora 上使用下面的命令: diff --git a/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md b/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md index 23577048b2..8c5bb67da5 100644 --- a/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md +++ b/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md @@ -106,7 +106,7 @@ sudo yum -y install kompose {{% tab name="Fedora package" %}} Kompose 位于 Fedora 24、25 和 26 的代码仓库。你可以像安装其他软件包一样安装 Kompose。 @@ -135,7 +135,7 @@ brew install kompose ## 使用 Kompose 再需几步,我们就把你从 Docker Compose 带到 Kubernetes。 diff --git a/content/zh/docs/tasks/debug-application-cluster/audit.md b/content/zh/docs/tasks/debug-application-cluster/audit.md index 1e8f12388c..595d4d66e2 100644 --- a/content/zh/docs/tasks/debug-application-cluster/audit.md +++ b/content/zh/docs/tasks/debug-application-cluster/audit.md @@ -82,22 +82,34 @@ Each request can be recorded with an associated _stage_. The defined stages are: - `ResponseComplete` - 当响应消息体完成并且没有更多数据需要传输的时候。 - `Panic` - 当 panic 发生时生成。 + +{{< note >}} +[审计事件配置](/zh/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Event) +的配置与 [Event](/zh/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#event-v1-core) +API 对象不同。 +{{< /note >}} + -{{< note >}} 审计日志记录功能会增加 API server 的内存消耗,因为需要为每个请求存储审计所需的某些上下文。 此外,内存消耗取决于审计日志记录的配置。 -{{< /note >}} @@ -105,7 +117,7 @@ _audit level_ of the event. The defined audit levels are: 审计政策定义了关于应记录哪些事件以及应包含哪些数据的规则。 审计策略对象结构定义在 -[`audit.k8s.io` API 组](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1/types.go) +[`audit.k8s.io` API 组](/zh/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy) 处理事件时,将按顺序与规则列表进行比较。第一个匹配规则设置事件的 _审计级别(Audit Level)_。已定义的审计级别有: @@ -158,12 +170,18 @@ rules: If you're crafting your own audit profile, you can use the audit profile for Google Container-Optimized OS as a starting point. You can check the [configure-helper.sh](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/cluster/gce/gci/configure-helper.sh) script, which generates the audit policy file. You can see most of the audit policy file by looking directly at the script. + +You can also refer to the [`Policy` configuration reference](/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy) +for details about the fields defined. --> 如果你在打磨自己的审计配置文件,你可以使用为 Google Container-Optimized OS 设计的审计配置作为出发点。你可以参考 [configure-helper.sh](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/cluster/gce/gci/configure-helper.sh) 脚本,该脚本能够生成审计策略文件。你可以直接在脚本中看到审计策略的绝大部份内容。 +你也可以参考 [`Policy` 配置参考](/zh/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy) +以获取有关已定义字段的详细信息。 + ## 审计后端 {#audit-backends} @@ -186,9 +202,9 @@ API is at version - Log 后端,将事件写入到文件系统 - Webhook 后端,将事件发送到外部 HTTP API -在这两种情况下,审计事件结构均由 `audit.k8s.io` API 组中的 API 定义。 -对于 Kubernetes {{< param "fullversion" >}},该 API 的当前版本是 -[`v1`](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1/types.go). +在这所有情况下,审计事件均遵循 Kubernetes API 在 +[`audit.k8s.io` API 组](/zh/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Event) +中定义的结构。 要纠正这种情况,可以使用 `kubectl scale` 更新 Deployment,以指定 4 个或更少的副本。 (或者你可以让 Pod 继续保持这个状态,这是无害的。) diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-application.md b/content/zh/docs/tasks/debug-application-cluster/debug-application.md index 10c7264e4f..d2e95ab2b4 100644 --- a/content/zh/docs/tasks/debug-application-cluster/debug-application.md +++ b/content/zh/docs/tasks/debug-application-cluster/debug-application.md @@ -265,42 +265,18 @@ kubectl get pods --selector=name=nginx,type=frontend ``` -如果 Pod 列表符合预期,但是 Endpoints 仍然为空,那么可能暴露的端口不正确。 -如果服务指定了 `containerPort`,但是所选中的 Pod 没有列出该端口,这些 Pod -不会被添加到 Endpoints 列表。 - 验证 Pod 的 `containerPort` 与服务的 `targetPort` 是否匹配。 #### 网络流量未被转发 -如果你可以连接到服务上,但是连接立即被断开了,并且在 Endpoints 列表中有末端表项, -可能是代理无法连接到 Pod。 - -要检查的有以下三项: - -* Pod 工作是否正常? 看一下重启计数,并参阅[调试 Pod](#debugging-pods); -* 是否可以直接连接到 Pod?获取 Pod 的 IP 地址,然后尝试直接连接到该 IP; -* 应用是否在配置的端口上进行服务?Kubernetes 不进行端口重映射,所以如果应用在 - 8080 端口上服务,那么 `containerPort` 字段就要设定为 8080。 +请参阅[调试 service](/zh/docs/tasks/debug-application-cluster/debug-service/) 了解更多信息。 ## {{% heading "whatsnext" %}} diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md index 8792bf89fb..d3de42728c 100644 --- a/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md +++ b/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md @@ -87,7 +87,7 @@ case you can try several things: will never be scheduled. You can check node capacities with the `kubectl get nodes -o ` - command. Here are some example command lines that extract just the necessary + command. Here are some example command lines that extract the necessary information: --> #### 资源不足 diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md b/content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md index 8029504a80..3889cdf701 100644 --- a/content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md +++ b/content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md @@ -143,7 +143,7 @@ kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never ``` This section use the `pause` container image in examples because it does not -contain userland debugging utilities, but this method works with all container +contain debugging utilities, but this method works with all container images. --> ## 使用临时容器来调试的例子 {#ephemeral-container-example} @@ -162,7 +162,7 @@ kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never ``` {{< note >}} -本节示例中使用 `pause` 容器镜像,因为它不包含任何用户级调试程序,但是这个方法适用于所有容器镜像。 +本节示例中使用 `pause` 容器镜像,因为它不包含调试程序,但是这个方法适用于所有容器镜像。 {{< /note >}} ## 在 Pod 中运行命令 对于这里的许多步骤,你可能希望知道运行在集群中的 Pod 看起来是什么样的。 -最简单的方法是运行一个交互式的 alpine Pod: +最简单的方法是运行一个交互式的 busybox Pod: ```none -$ kubectl run -it --rm --restart=Never alpine --image=alpine sh +kubectl run -it --rm --restart=Never busybox --image=gcr.io/google-containers/busybox sh ``` -用于本教程的示例容器仅通过 HTTP 在端口 9376 上提供其自己的主机名, +用于本教程的示例容器通过 HTTP 在端口 9376 上提供其自己的主机名, 但是如果要调试自己的应用程序,则需要使用你的 Pod 正在侦听的端口号。 在 Pod 内运行: @@ -260,9 +260,9 @@ service/hostnames exposed ``` -重新运行查询命令,确认没有问题: +重新运行查询命令: ```shell kubectl get svc hostnames @@ -608,14 +608,13 @@ Earlier you saw that the Pods were running. You can re-check that: kubectl get pods -l app=hostnames ``` ```none -NAME READY STATUS RESTARTS AGE +NAME READY STATUS RESTARTS AGE hostnames-632524106-bbpiw 1/1 Running 0 1h hostnames-632524106-ly40y 1/1 Running 0 1h hostnames-632524106-tlaok 1/1 Running 0 1h ``` -`-l app=hostnames` 参数是一个标签选择算符 - 和我们 Service 中定义的一样。 +`-l app=hostnames` 参数是在 Service 上配置的标签选择器。 "AGE" 列表明这些 Pod 已经启动一个小时了,这意味着它们运行良好,而未崩溃。 @@ -899,7 +898,7 @@ iptables-save | grep hostnames ``` 当集群中有 Stackdriver 日志机制的 `DaemonSet` 时,你只需修改其 spec 中的 -`template` 字段,daemonset 控制器将为你更新 Pod。 +`template` 字段,DaemonSet 控制器将为你管理 Pod。 例如,假设你按照上面的描述已经安装了 Stackdriver 日志机制。 现在,你想更改内存限制,来给 fluentd 提供的更多内存,从而安全地处理更多日志。 diff --git a/content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md b/content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md index b34d1040d9..4e81fd8567 100644 --- a/content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md +++ b/content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md @@ -3,159 +3,131 @@ content_type: task title: 节点健康监测 --- -*节点问题探测器* 是一个 [DaemonSet](/zh/docs/concepts/workloads/controllers/daemonset/), -用来监控节点健康。它从各种守护进程收集节点问题,并以 +*节点问题检测器(Node Problem Detector)*是一个守护程序,用于监视和报告节点的健康状况。 +你可以将节点问题探测器以 `DaemonSet` 或独立守护程序运行。 +节点问题检测器从各种守护进程收集节点问题,并以 [NodeCondition](/zh/docs/concepts/architecture/nodes/#condition) 和 [Event](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#event-v1-core) 的形式报告给 API 服务器。 - -它现在支持一些已知的内核问题检测,并将随着时间的推移,检测更多节点问题。 - - -目前,Kubernetes 不会对节点问题检测器监测到的节点状态和事件采取任何操作。 -将来可能会引入一个补救系统来处理这些节点问题。 - - -更多信息请参阅 [这里](https://github.com/kubernetes/node-problem-detector)。 +要了解如何安装和使用节点问题检测器,请参阅 +[节点问题探测器项目文档](https://github.com/kubernetes/node-problem-detector)。 ## {{% heading "prerequisites" %}} -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +{{< include "task-tutorial-prereqs.md" >}} ## 局限性 {#limitations} -* 节点问题检测器的内核问题检测现在只支持基于文件类型的内核日志。 +* 节点问题检测器只支持基于文件类型的内核日志。 它不支持像 journald 这样的命令行日志工具。 +* 节点问题检测器使用内核日志格式来报告内核问题。 + 要了解如何扩展内核日志格式,请参阅[添加对另一个日志格式的支持](#support-other-log-format)。 -* 节点问题检测器的内核问题检测对内核日志格式有一定要求,现在它只适用于 Ubuntu 和 Debian。 - 不过将其扩展为[支持其它日志格式](#support-other-log-format) 也很容易。 +## 启用节点问题检测器 + +一些云供应商将节点问题检测器以{{< glossary_tooltip text="插件" term_id="addons" >}}形式启用。 +你还可以使用 `kubectl` 或创建插件 Pod 来启用节点问题探测器。 -## 在 GCE 集群中启用/禁用 +## 使用 kubectl 启用节点问题检测器 {#using-kubectl} -节点问题检测器在 gce 集群中以 -[集群插件的形式](/zh/docs/setup/best-practices/cluster-large/#addon-resources) -默认启用。 +`kubectl` 提供了节点问题探测器最灵活的管理。 +你可以覆盖默认配置使其适合你的环境或检测自定义节点问题。例如: -你可以在运行 `kube-up.sh` 之前,以设置环境变量 `KUBE_ENABLE_NODE_PROBLEM_DETECTOR` 的形式启用/禁用它。 +1. 创建类似于 `node-strought-detector.yaml` 的节点问题检测器配置: + {{< codenew file="debug/node-problem-detector.yaml" >}} + + {{< note >}} + 你应该检查系统日志目录是否适用于操作系统发行版本。 + {{< /note >}} + +1. 使用 `kubectl` 启动节点问题检测器: + + ```shell + kubectl apply -f https://k8s.io/examples/debug/node-problem-detector.yaml + ``` -## 在其它环境中使用 {#use-in-other-environment} +### 使用插件 pod 启用节点问题检测器 {#using-addon-pod} -要在 GCE 之外的其他环境中启用节点问题检测器,你可以使用 `kubectl` 或插件 pod。 +如果你使用的是自定义集群引导解决方案,不需要覆盖默认配置, +可以利用插件 Pod 进一步自动化部署。 - -### Kubectl - -这是在 GCE 之外启动节点问题检测器的推荐方法。 -它的管理更加灵活,例如覆盖默认配置以使其适合你的环境或检测自定义节点问题。 - - -* **步骤 1:** `node-problem-detector.yaml`: - -{{< codenew file="debug/node-problem-detector.yaml" >}} - - -***请注意保证你的系统日志路径与你的 OS 发行版相对应。*** - - -* **步骤 2:** 执行 `kubectl` 来启动节点问题检测器: - -```shell - kubectl create -f https://k8s.io/examples/debug/node-problem-detector.yaml -``` - - -### 插件 Pod {#addon-pod} - -这适用于拥有自己的集群引导程序解决方案的用户,并且不需要覆盖默认配置。 -他们可以利用插件 Pod 进一步自动化部署。 - - -只需创建 `node-problem-detector.yaml`,并将其放在主节点上的插件 pod 目录 -`/etc/kubernetes/addons/node-problem-detector` 下。 +创建 `node-strick-detector.yaml`,并在控制平面节点上保存配置到插件 Pod 的目录 +`/etc/kubernetes/addons/node-problem-detector`。 ## 覆盖配置文件 @@ -163,73 +135,97 @@ is embedded when building the docker image of node problem detector. [默认配置](https://github.com/kubernetes/node-problem-detector/tree/v0.1/config)。 -不过,你可以像下面这样使用 [ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) +不过,你可以像下面这样使用 [`ConfigMap`](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) 将其覆盖: -* **步骤 1:** 在 `config/` 中更改配置文件。 -* **步骤 2:** 使用 `kubectl create configmap node-problem-detector-config --from-file=config/` 创建 `node-problem-detector-config` 。 -* **步骤 3:** 更改 `node-problem-detector.yaml` 以使用 ConfigMap: +1. 更改 `config/` 中的配置文件 +1. 创建 `ConfigMap` `node-strick-detector-config`: + + ```shell + kubectl create configmap node-problem-detector-config --from-file=config/ + ``` -{{< codenew file="debug/node-problem-detector-configmap.yaml" >}} +1. 更改 `node-problem-detector.yaml` 以使用 ConfigMap: + + {{< codenew file="debug/node-problem-detector-configmap.yaml" >}} - -* **步骤 4:** 使用新的 yaml 文件重新创建节点问题检测器: +{{< note >}} +此方法仅适用于通过 `kubectl` 启动的节点问题检测器。 +{{< /note >}} -```shell - kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml # If you have a node-problem-detector running - kubectl create -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml -``` - - -***请注意,此方法仅适用于通过 `kubectl` 启动的节点问题检测器。*** - - -由于插件管理器不支持ConfigMap,因此现在不支持对于作为集群插件运行的节点问题检测器的配置进行覆盖。 +如果节点问题检测器作为集群插件运行,则不支持覆盖配置。 +插件管理器不支持 `ConfigMap`。 ## 内核监视器 -*内核监视器* 是节点问题检测器中的问题守护进程。它监视内核日志并按照预定义规则检测已知内核问题。 +*内核监视器(Kernel Monitor)*是节点问题检测器中支持的系统日志监视器守护进程。 +内核监视器观察内核日志并根据预定义规则检测已知的内核问题。 -内核监视器根据 [`config/kernel-monitor.json`](https://github.com/kubernetes/node-problem-detector/blob/v0.1/config/kernel-monitor.json) 中的一组预定义规则列表匹配内核问题。 +内核监视器根据 [`config/kernel-monitor.json`](https://github.com/kubernetes/node-problem-detector/blob/v0.1/config/kernel-monitor.json) +中的一组预定义规则列表匹配内核问题。 规则列表是可扩展的,你始终可以通过覆盖配置来扩展它。 ### 添加新的 NodeCondition -你可以使用新的状态描述来扩展 `config/kernel-monitor.json` 中的 `conditions` 字段以支持新的节点状态。 +要支持新的 `NodeCondition`,请在 `config/kernel-monitor.json` 中的 +`conditions` 字段中创建一个条件定义: ```json { @@ -240,14 +236,14 @@ To support new node conditions, you can extend the `conditions` field in ``` ### 检测新的问题 -你可以使用新的规则描述来扩展 `config/kernel-monitor.json` 中的 `rules` 字段以检测新问题。 +你可以使用新的规则描述来扩展 `config/kernel-monitor.json` 中的 `rules` 字段以检测新问题: ```json { @@ -259,51 +255,57 @@ with new rule definition: ``` -### 更改日志路径 +### 配置内核日志设备的路径 {#kernel-log-device-path} -不同操作系统发行版的内核日志的可能不同。 `config/kernel-monitor.json` 中的 `log` 字段是容器内的日志路径。你始终可以修改配置使其与你的 OS 发行版匹配。 +检查你的操作系统(OS)发行版本中的内核日志路径位置。 +Linux 内核[日志设备](https://www.kernel.org/doc/documentation/abi/testing/dev-kmsg) +通常呈现为 `/dev/kmsg`。 +但是,日志路径位置因 OS 发行版本而异。 +`config/kernel-monitor.json` 中的 `log` 字段表示容器内的日志路径。 +你可以配置 `log` 字段以匹配节点问题检测器所示的设备路径。 -### 支持其它日志格式 {#support-other-log-format} +### 添加对其它日志格式的支持 {#support-other-log-format} -内核监视器使用 [`Translator`] 插件将内核日志转换为内部数据结构。 -我们可以很容易为新的日志格式实现新的翻译器。 +内核监视器使用 +[`Translator`](https://github.com/kubernetes/node-problem-detector/blob/v0.1/pkg/kernelmonitor/translator.go) +插件转换内核日志的内部数据结构。 +你可以为新的日志格式实现新的转换器。 -## 注意事项 {#caveats} - -我们建议在集群中运行节点问题检测器来监视节点运行状况。 -但是,你应该知道这将在每个节点上引入额外的资源开销。一般情况下没有影响,因为: - - -* 内核日志生成相对较慢。 -* 节点问题检测器有资源限制。 -* 即使在高负载下,资源使用也是可以接受的。 -(参阅 [基准测试结果](https://github.com/kubernetes/node-problem-detector/issues/2#issuecomment-220255629)) +## 建议和限制 +建议在集群中运行节点问题检测器以监控节点运行状况。 +运行节点问题检测器时,你可以预期每个节点上的额外资源开销。 +通常这是可接受的,因为: +* 内核日志增长相对缓慢。 +* 已经为节点问题检测器设置了资源限制。 +* 即使在高负载下,资源使用也是可接受的。有关更多信息,请参阅节点问题检测器 + [基准结果](https://github.com/kubernetes/node-problem-detector/issues/2.suecomment-220255629)。 diff --git a/content/zh/docs/tasks/extend-kubectl/kubectl-plugins.md b/content/zh/docs/tasks/extend-kubectl/kubectl-plugins.md index cf671cdf50..72235b1601 100644 --- a/content/zh/docs/tasks/extend-kubectl/kubectl-plugins.md +++ b/content/zh/docs/tasks/extend-kubectl/kubectl-plugins.md @@ -16,7 +16,7 @@ content_type: task 本指南演示了如何为 [kubectl](/zh/docs/reference/kubectl/kubectl/) 安装和编写扩展。 通过将核心 `kubectl` 命令看作与 Kubernetes 集群交互的基本构建块, @@ -35,12 +35,12 @@ You need to have a working `kubectl` binary installed. ## 安装 kubectl 插件 -插件只不过是一个独立的可执行文件,名称以 `kubectl-` 开头。 -要安装插件,只需将此可执行文件移动到 PATH 中的任何位置。 +插件是一个独立的可执行文件,名称以 `kubectl-` 开头。 +要安装插件,将其可执行文件移动到 `PATH` 中的任何位置。 不需要安装插件或预加载,插件可执行程序从 `kubectl` 二进制文件接收继承的环境, 插件根据其名称确定它希望实现的命令路径。 -例如,一个插件想要提供一个新的命令 `kubectl foo`,它将被简单地命名为 `kubectl-foo`, -并且位于用户 PATH 的某个位置。 +例如,名为 `kubectl-foo` 的插件提供了命令 `kubectl foo`。 +必须将插件的可执行文件安装在 `PATH` 中的某个位置。 -要使用上面的插件,只需使其可执行: +要使用某插件,先要使其可执行: -``` +```shell sudo chmod +x ./kubectl-foo ``` @@ -165,7 +165,7 @@ and place it anywhere in your PATH: --> 并将它放在你的 PATH 中的任何地方: -``` +```shell sudo mv ./kubectl-foo /usr/local/bin ``` @@ -174,9 +174,10 @@ You may now invoke your plugin as a `kubectl` command: --> 你现在可以调用你的插件作为 `kubectl` 命令: -``` +```shell kubectl foo ``` + ``` I am a plugin named kubectl-foo ``` @@ -186,9 +187,10 @@ All args and flags are passed as-is to the executable: --> 所有参数和标记按原样传递给可执行文件: -``` +```shell kubectl foo version ``` + ``` 1.0.0 ``` @@ -202,6 +204,7 @@ All environment variables are also passed as-is to the executable: export KUBECONFIG=~/.kube/config kubectl foo config ``` + ``` /home//.kube/config ``` @@ -209,6 +212,7 @@ kubectl foo config ```shell KUBECONFIG=/etc/kube/config kubectl foo config ``` + ``` /etc/kube/config ``` @@ -584,7 +588,6 @@ installs easier. * In case of any questions, feel free to reach out to the [CLI SIG team](https://github.com/kubernetes/community/tree/master/sig-cli). * Read about [Krew](https://krew.dev/), a package manager for kubectl plugins. --> - * 查看 CLI 插件库示例,查看用 Go 编写的插件的[详细示例](https://github.com/kubernetes/sample-cli-plugin) * 如有任何问题,请随时联系 [SIG CLI ](https://github.com/kubernetes/community/tree/master/sig-cli) * 了解 [Krew](https://krew.dev/),一个 kubectl 插件管理器。 diff --git a/content/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers.md b/content/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers.md index 8c4a150ffd..37f0beb2e5 100644 --- a/content/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers.md +++ b/content/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers.md @@ -15,26 +15,25 @@ weight: 20 Kubernetes 自带了一个默认调度器,其详细描述请查阅 [这里](/zh/docs/reference/command-line-tools-reference/kube-scheduler/)。 如果默认调度器不适合你的需求,你可以实现自己的调度器。 -不仅如此,你甚至可以和默认调度器一起同时运行多个调度器,并告诉 Kubernetes 为每个 +而且,你甚至可以和默认调度器一起同时运行多个调度器,并告诉 Kubernetes 为每个 Pod 使用哪个调度器。 让我们通过一个例子讲述如何在 Kubernetes 中运行多个调度器。 关于实现调度器的具体细节描述超出了本文范围。 请参考 kube-scheduler 的实现,规范示例代码位于 @@ -50,15 +49,15 @@ canonical example. ## Package the scheduler Package your scheduler binary into a container image. For the purposes of this example, -let's just use the default scheduler (kube-scheduler) as our second scheduler as well. -Clone the [Kubernetes source code from Github](https://github.com/kubernetes/kubernetes) +you can use the default scheduler (kube-scheduler) as your second scheduler. +Clone the [Kubernetes source code from GitHub](https://github.com/kubernetes/kubernetes) and build the source. --> ## 打包调度器 -将调度器可执行文件打包到容器镜像中。出于示例目的,我们就使用默认调度器 -(kube-scheduler)作为我们的第二个调度器。 -克隆 [Github 上 Kubernetes 源代码](https://github.com/kubernetes/kubernetes), +将调度器可执行文件打包到容器镜像中。出于示例目的,可以使用默认调度器 +(kube-scheduler)作为第二个调度器。 +克隆 [GitHub 上 Kubernetes 源代码](https://github.com/kubernetes/kubernetes), 并编译构建源代码。 ```shell @@ -68,13 +67,14 @@ make ``` 创建一个包含 kube-scheduler 二进制文件的容器镜像。用于构建镜像的 `Dockerfile` 内容如下: ```docker FROM busybox -ADD ./_output/dockerized/bin/linux/amd64/kube-scheduler /usr/local/bin/kube-scheduler +ADD ./_output/local/bin/linux/amd64/kube-scheduler /usr/local/bin/kube-scheduler ``` ## 为调度器定义 Kubernetes Deployment -现在我们将调度器放在容器镜像中,我们可以为它创建一个 Pod 配置,并在我们的 Kubernetes 集群中 +现在将调度器放在容器镜像中,为它创建一个 Pod 配置,并在 Kubernetes 集群中 运行它。但是与其在集群中直接创建一个 Pod,不如使用 [Deployment](/zh/docs/concepts/workloads/controllers/deployment/)。 Deployment 管理一个 [ReplicaSet](/zh/docs/concepts/workloads/controllers/replicaset/), @@ -134,18 +134,22 @@ Note also that we created a dedicated service account `my-scheduler` and bind th 绑定到它,以便它可以获得与 `kube-scheduler` 相同的权限。 -请参阅 [kube-scheduler 文档](/docs/reference/command-line-tools-reference/kube-scheduler/)以获取其他命令行参数的详细说明。 +请参阅 [kube-scheduler 文档](/docs/reference/command-line-tools-reference/kube-scheduler/) +以获取其他命令行参数的详细说明。 ## 在集群中运行第二个调度器 -为了在 Kubernetes 集群中运行我们的第二个调度器,只需在 Kubernetes 集群中创建上面配置中指定的 Deployment: +为了在 Kubernetes 集群中运行我们的第二个调度器,在 Kubernetes 集群中创建上面配置中指定的 Deployment: ```shell kubectl create -f my-scheduler.yaml @@ -170,7 +174,8 @@ my-scheduler-lnf4s-4744f 1/1 Running 0 2m ``` 此列表中,除了默认的 `kube-scheduler` Pod 之外,你应该还能看到处于 “Running” 状态的 `my-scheduler` Pod。 @@ -190,14 +195,24 @@ First, update the following fields in your YAML file: 首先,更新上述 Deployment YAML(my-scheduler.yaml)文件中的以下字段: * `--leader-elect=true` -* `--lock-object-namespace=lock-object-namespace` -* `--lock-object-name=lock-object-name` +* `--lock-object-namespace=` +* `--lock-object-name=` + +{{< note >}} + +控制平面会为你创建锁对象,但是命名空间必须已经存在。 +你可以使用 `kube-system` 命名空间。 +{{< /note >}} 如果在集群上启用了 RBAC,则必须更新 `system:kube-scheduler` 集群角色。 -将调度器名称添加到应用于端点资源的规则的 resourceNames,如以下示例所示: +将调度器名称添加到应用了 `endpoints` 和 `leases` 资源的规则的 resourceNames 中,如以下示例所示: ```shell kubectl edit clusterrole system:kube-scheduler @@ -211,11 +226,13 @@ kubectl edit clusterrole system:kube-scheduler ## 为 Pod 指定调度器 -现在我们的第二个调度器正在运行,让我们创建一些 Pod,并指定它们由默认调度器或我们刚部署的 -调度器进行调度。 -为了使用特定的调度器调度给定的 Pod,我们在那个 Pod 的规约中指定调度器的名称。让我们看看三个例子。 +现在第二个调度器正在运行,创建一些 Pod,并指定它们由默认调度器或部署的调度器进行调度。 +为了使用特定的调度器调度给定的 Pod,在那个 Pod 的 spec 中指定调度器的名称。让我们看看三个例子。 如果未提供调度器名称,则会使用 default-scheduler 自动调度 pod。 @@ -246,7 +264,8 @@ Now that our second scheduler is running, let's create some pods, and direct the {{< codenew file="admin/sched/pod2.yaml" >}} 通过将调度器名称作为 `spec.schedulerName` 参数的值来指定调度器。 在这种情况下,我们提供默认调度器的名称,即 `default-scheduler`。 @@ -268,10 +287,9 @@ Now that our second scheduler is running, let's create some pods, and direct the {{< codenew file="admin/sched/pod3.yaml" >}} 在这种情况下,我们指定此 pod 使用我们部署的 `my-scheduler` 来调度。 请注意,`spec.schedulerName` 参数的值应该与 Deployment 中配置的提供给 @@ -287,13 +305,13 @@ Now that our second scheduler is running, let's create some pods, and direct the ``` -确认所有三个 pod 都在运行。 + 确认所有三个 pod 都在运行。 -```shell -kubectl get pods -``` + ```shell + kubectl get pods + ``` @@ -303,7 +321,14 @@ kubectl get pods ### 验证是否使用所需的调度器调度了 pod 为了更容易地完成这些示例,我们没有验证 Pod 实际上是使用所需的调度程序调度的。 我们可以通过更改 Pod 的顺序和上面的部署配置提交来验证这一点。 @@ -313,7 +338,8 @@ In order to make it easier to work through these examples, we did not verify tha 一旦我们提交调度器部署配置并且我们的新调度器开始运行,注解了 `annotation-second-scheduler` 的 pod 就能被调度。 或者,可以查看事件日志中的 “Scheduled” 条目,以验证是否由所需的调度器调度了 Pod。 @@ -321,3 +347,11 @@ Alternatively, one could just look at the "Scheduled" entries in the event logs kubectl get events ``` + +你也可以使用[自定义调度器配置](/zh/docs/reference/scheduling/config/#multiple-profiles) +或自定义容器镜像,用于集群的主调度器,方法是在相关控制平面节点上修改其静态 pod 清单。 + diff --git a/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md b/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md index 9a03e0f89e..a575bc57cf 100644 --- a/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md +++ b/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md @@ -131,7 +131,7 @@ after upgrading the objects to a new stored version. Removing an old version: 1. Ensure all clients are fully migrated to the new version. The kube-apiserver - logs can reviewed to help identify any clients that are still accessing via + logs can be reviewed to help identify any clients that are still accessing via the old version. 1. Set `served` to `false` for the old version in the `spec.versions` list. If any clients are still unexpectedly using the old version they may begin reporting @@ -608,14 +608,14 @@ how to [authenticate API servers](/docs/reference/access-authn-authz/extensible- A conversion webhook must not mutate anything inside of `metadata` of the converted object other than `labels` and `annotations`. Attempted changes to `name`, `UID` and `namespace` are rejected and fail the request -which caused the conversion. All other changes are just ignored. +which caused the conversion. All other changes are ignored. --> #### 被允许的变更 转换 Webhook 不可以更改被转换对象的 `metadata` 中除 `labels` 和 `annotations` 之外的任何属性。 尝试更改 `name`、`UID` 和 `namespace` 时都会导致引起转换的请求失败。 -所有其他变更只是被忽略而已。 +所有其他变更都被忽略。 url 以标准 URL 形式给出 Webhook 的位置(`scheme://host:port/path`)。 `host` 不应引用集群中运行的服务,而应通过指定 `service` 字段来提供 @@ -851,8 +850,7 @@ url 以标准 URL 形式给出 Webhook 的位置(`scheme://host:port/path`) 请注意,除非你非常小心地在所有运行着可能调用 Webhook 的 API 服务器的 主机上运行此 Webhook,否则将 `localhost` 或 `127.0.0.1` 用作 `host` -是风险很大的。这样的安装很可能是不可移植的,即很难在新集群中启用。 - +是风险很大的。这样的安装可能是不可移植的,或者不容易在一个新的集群中运行。 *Finalizer* 能够让控制器实现异步的删除前(Pre-delete)回调。 -定制对象和内置对象一样支持 Finalizer。 +与内置对象类似,定制对象也支持 Finalizer。 你可以像下面一样为定制对象添加 Finalizer: diff --git a/content/zh/docs/tasks/extend-kubernetes/setup-extension-api-server.md b/content/zh/docs/tasks/extend-kubernetes/setup-extension-api-server.md index 6071bf45fe..21ef9ae2f9 100644 --- a/content/zh/docs/tasks/extend-kubernetes/setup-extension-api-server.md +++ b/content/zh/docs/tasks/extend-kubernetes/setup-extension-api-server.md @@ -77,14 +77,14 @@ Alternatively, you can use an existing 3rd party solution, such as [apiserver-bu 1. Make sure that your extension-apiserver loads those certs from that volume and that they are used in the HTTPS handshake. 1. Create a Kubernetes service account in your namespace. 1. Create a Kubernetes cluster role for the operations you want to allow on your resources. -1. Create a Kubernetes cluster role binding from the service account in your namespace to the cluster role you just created. +1. Create a Kubernetes cluster role binding from the service account in your namespace to the cluster role you created. 1. Create a Kubernetes cluster role binding from the service account in your namespace to the `system:auth-delegator` cluster role to delegate auth decisions to the Kubernetes core API server. 1. Create a Kubernetes role binding from the service account in your namespace to the `extension-apiserver-authentication-reader` role. This allows your extension api-server to access the `extension-apiserver-authentication` configmap. --> 8. 确保你的扩展 apiserver 从该卷中加载了那些证书,并在 HTTPS 握手过程中使用它们。 9. 在你的命令空间中创建一个 Kubernetes 服务账号。 10. 为资源允许的操作创建 Kubernetes 集群角色。 -11. 用你命令空间中的服务账号创建一个 Kubernetes 集群角色绑定,绑定到你刚创建的角色上。 +11. 用你命令空间中的服务账号创建一个 Kubernetes 集群角色绑定,绑定到你创建的角色上。 12. 用你命令空间中的服务账号创建一个 Kubernetes 集群角色绑定,绑定到 `system:auth-delegator` 集群角色,以将 auth 决策委派给 Kubernetes 核心 API 服务器。 13. 以你命令空间中的服务账号创建一个 Kubernetes 集群角色绑定,绑定到 diff --git a/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md b/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md index de9f1e8a53..2103b34cf2 100644 --- a/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md +++ b/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md @@ -39,18 +39,18 @@ that run in the Pod. To set environment variables, include the `env` or 本示例中,将创建一个只包含单个容器的 Pod。Pod 的配置文件中设置环境变量的名称为 `DEMO_GREETING`, -其值为 `"Hello from the environment"`。下面是 Pod 的配置文件内容: +其值为 `"Hello from the environment"`。下面是 Pod 的配置清单: {{< codenew file="pods/inject/envars.yaml" >}} -1. 基于 YAML 文件创建一个 Pod: +1. 基于配置清单创建一个 Pod: ```shell kubectl apply -f https://k8s.io/examples/pods/inject/envars.yaml @@ -59,7 +59,7 @@ Pod: -1. 获取一下当前正在运行的 Pods 信息: +2. 获取一下当前正在运行的 Pods 信息: ```shell kubectl get pods -l purpose=demonstrate-envars @@ -69,8 +69,8 @@ Pod: The output is similar to this: --> 查询结果应为: - - ```shell + + ``` NAME READY STATUS RESTARTS AGE envar-demo 1/1 Running 0 9s ``` @@ -78,8 +78,8 @@ Pod: -1. 列出 Pod 容器的环境变量: - +3. 列出 Pod 容器的环境变量: + ```shell kubectl exec envar-demo -- printenv ``` @@ -88,8 +88,8 @@ Pod: The output is similar to this: --> 打印结果应为: - - ```shell + + ``` NODE_VERSION=4.4.2 EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237 HOSTNAME=envar-demo @@ -101,25 +101,44 @@ Pod: {{< note >}} 通过 `env` 或 `envFrom` 字段设置的环境变量将覆盖容器镜像中指定的所有环境变量。 {{< /note >}} + +{{< note >}} +环境变量可以互相引用,但是顺序很重要。 +使用在相同上下文中定义的其他变量的变量必须在列表的后面。 +同样,请避免使用循环引用。 {{< /note >}} ## 在配置中使用环境变量 -您在 Pod 的配置中定义的环境变量可以在配置的其他地方使用,例如可用在为 Pod 的容器设置的命令和参数中。在下面的示例配置中,环境变量 `GREETING` ,`HONORIFIC` 和 `NAME` 分别设置为 `Warm greetings to` ,`The Most Honorable` 和 `Kubernetes`。然后这些环境变量在传递给容器 `env-print-demo` 的 CLI 参数中使用。 +您在 Pod 的配置中定义的环境变量可以在配置的其他地方使用, +例如可用在为 Pod 的容器设置的命令和参数中。 +在下面的示例配置中,环境变量 `GREETING` ,`HONORIFIC` 和 `NAME` 分别设置为 `Warm greetings to` , +`The Most Honorable` 和 `Kubernetes`。然后这些环境变量在传递给容器 `env-print-demo` 的 CLI 参数中使用。 ```yaml apiVersion: v1 diff --git a/content/zh/docs/tasks/job/coarse-parallel-processing-work-queue.md b/content/zh/docs/tasks/job/coarse-parallel-processing-work-queue.md index 0259283757..33690a938e 100644 --- a/content/zh/docs/tasks/job/coarse-parallel-processing-work-queue.md +++ b/content/zh/docs/tasks/job/coarse-parallel-processing-work-queue.md @@ -2,7 +2,7 @@ title: 使用工作队列进行粗粒度并行处理 min-kubernetes-server-version: v1.8 content_type: task -weight: 30 +weight: 20 --- @@ -28,7 +28,7 @@ Here is an overview of the steps in this example: 1. **Start a message queue service.** In this example, we use RabbitMQ, but you could use another one. In practice you would set up a message queue service once and reuse it for many jobs. 1. **Create a queue, and fill it with messages.** Each message represents one task to be done. In - this example, a message is just an integer that we will do a lengthy computation on. + this example, a message is an integer that we will do a lengthy computation on. 1. **Start a Job that works on tasks from the queue**. The Job starts several pods. Each pod takes one task from the message queue, processes it, and repeats until the end of the queue is reached. --> @@ -63,7 +63,7 @@ non-parallel, use of [Job](/docs/concepts/jobs/run-to-completion-finite-workload ## 启动消息队列服务 -本例使用了 RabbitMQ,使用其他 AMQP 类型的消息服务应该比较容易。 +本例使用了 RabbitMQ,但你可以更改该示例,使用其他 AMQP 类型的消息服务。 在实际工作中,在集群中一次性部署某个消息队列服务,之后在很多 Job 中复用,包括需要长期运行的服务。 @@ -225,17 +225,17 @@ root@temp-loe07:/# -最后一个命令中, `amqp-consume` 工具从队列中取走了一个消息,并把该消息传递给了随机命令的标准输出。在这种情况下,`cat` 只会打印它从标准输入或得的内容,echo 只会添加回车符以便示例可读。 +最后一个命令中, `amqp-consume` 工具从队列中取走了一个消息,并把该消息传递给了随机命令的标准输出。 +在这种情况下,`cat` 会打印它从标准输入中读取的字符,echo 会添加回车符以便示例可读。 @@ -45,10 +45,10 @@ Here is an overview of the steps in this example: 2. **创建一个队列,然后向其中填充消息。** 每个消息表示一个将要被处理的工作任务。 - 在这个例子中,消息只是一个我们将用于进行长度计算的整数。 + 在这个例子中,消息是一个我们将用于进行长度计算的整数。 ## 使用任务填充队列 -现在,让我们往队列里添加一些“任务”。在这个例子中,我们的任务只是一些将被打印出来的字符串。 +现在,让我们往队列里添加一些“任务”。在这个例子中,我们的任务是一些将被打印出来的字符串。 启动一个临时的可交互的 pod 用于运行 Redis 命令行界面。 diff --git a/content/zh/docs/tasks/job/parallel-processing-expansion.md b/content/zh/docs/tasks/job/parallel-processing-expansion.md index 071fca97cb..7dd67cb239 100644 --- a/content/zh/docs/tasks/job/parallel-processing-expansion.md +++ b/content/zh/docs/tasks/job/parallel-processing-expansion.md @@ -2,13 +2,13 @@ title: 使用展开的方式进行并行处理 content_type: task min-kubernetes-server-version: v1.8 -weight: 20 +weight: 50 --- @@ -19,7 +19,7 @@ based on a common template. You can use this approach to process batches of work parallel. For this example there are only three items: _apple_, _banana_, and _cherry_. -The sample Jobs process each item simply by printing a string then pausing. +The sample Jobs process each item by printing a string then pausing. See [using Jobs in real workloads](#using-jobs-in-real-workloads) to learn about how this pattern fits more realistic use cases. @@ -29,7 +29,8 @@ this pattern fits more realistic use cases. 你可以用这种方法来并行执行批处理任务。 在本任务示例中,只有三个工作条目:_apple_、_banana_ 和 _cherry_。 -示例任务处理每个条目时仅仅是打印一个字符串之后结束。 +示例任务处理每个条目时打印一个字符串之后结束。 + 参考[在真实负载中使用 Job](#using-jobs-in-real-workloads)了解更适用于真实使用场景的模式。 ## {{% heading "prerequisites" %}} diff --git a/content/zh/docs/tasks/manage-daemon/rollback-daemon-set.md b/content/zh/docs/tasks/manage-daemon/rollback-daemon-set.md index b3efaa83d1..da87cb6015 100644 --- a/content/zh/docs/tasks/manage-daemon/rollback-daemon-set.md +++ b/content/zh/docs/tasks/manage-daemon/rollback-daemon-set.md @@ -38,7 +38,7 @@ You should already know how to [perform a rolling update on a ### Step 1: Find the DaemonSet revision you want to roll back to -You can skip this step if you just want to roll back to the last revision. +You can skip this step if you only want to roll back to the last revision. List all revisions of a DaemonSet: --> diff --git a/content/zh/docs/tasks/manage-daemon/update-daemon-set.md b/content/zh/docs/tasks/manage-daemon/update-daemon-set.md index 15631cf688..1b889c0aa6 100644 --- a/content/zh/docs/tasks/manage-daemon/update-daemon-set.md +++ b/content/zh/docs/tasks/manage-daemon/update-daemon-set.md @@ -191,7 +191,7 @@ kubectl edit ds/fluentd-elasticsearch -n kube-system ##### 只更新容器镜像 @@ -295,10 +295,10 @@ DaemonSet rollout won't progress. (通常由于拼写错误),就会发生 DaemonSet 滚动更新中断。 -要解决此问题,只需再次更新 DaemonSet 模板即可。以前不健康的滚动更新不会阻止新的滚动更新。 +要解决此问题,需再次更新 DaemonSet 模板。新的滚动更新不会被以前的不健康的滚动更新阻止。 -安装 [`kubectl`](/zh/docs/tasks/tools/install-kubectl/)。 +安装 [`kubectl`](/zh/docs/tasks/tools/)。 {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} diff --git a/content/zh/docs/tasks/manage-kubernetes-objects/imperative-command.md b/content/zh/docs/tasks/manage-kubernetes-objects/imperative-command.md index 4b3c73ebd2..f84ab15b2e 100644 --- a/content/zh/docs/tasks/manage-kubernetes-objects/imperative-command.md +++ b/content/zh/docs/tasks/manage-kubernetes-objects/imperative-command.md @@ -21,9 +21,9 @@ Kubernetes 对象。本文档解释这些命令的组织方式以及如何使用 ## {{% heading "prerequisites" %}} -安装[`kubectl`](/zh/docs/tasks/tools/install-kubectl/)。 +安装[`kubectl`](/zh/docs/tasks/tools/)。 {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} diff --git a/content/zh/docs/tasks/manage-kubernetes-objects/imperative-config.md b/content/zh/docs/tasks/manage-kubernetes-objects/imperative-config.md index 89ac905101..654ea24d64 100644 --- a/content/zh/docs/tasks/manage-kubernetes-objects/imperative-config.md +++ b/content/zh/docs/tasks/manage-kubernetes-objects/imperative-config.md @@ -21,9 +21,9 @@ This document explains how to define and manage objects using configuration file ## {{% heading "prerequisites" %}} -安装 [`kubectl`](/zh/docs/tasks/tools/install-kubectl/) 。 +安装 [`kubectl`](/zh/docs/tasks/tools/) 。 {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} diff --git a/content/zh/docs/tasks/manage-kubernetes-objects/kustomization.md b/content/zh/docs/tasks/manage-kubernetes-objects/kustomization.md index 07cda09588..605e9113fe 100644 --- a/content/zh/docs/tasks/manage-kubernetes-objects/kustomization.md +++ b/content/zh/docs/tasks/manage-kubernetes-objects/kustomization.md @@ -43,9 +43,9 @@ kubectl apply -k ## {{% heading "prerequisites" %}} -安装 [`kubectl`](/zh/docs/tasks/tools/install-kubectl/). +安装 [`kubectl`](/zh/docs/tasks/tools/). {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} @@ -132,6 +132,57 @@ metadata: name: example-configmap-1-8mbdf7882g ``` + +要从 env 文件生成 ConfigMap,请在 `configMapGenerator` 中的 `envs` 列表中添加一个条目。 +下面是一个用来自 `.env` 文件的数据生成 ConfigMap 的例子: + +```shell +# 创建一个 .env 文件 +cat <.env +FOO=Bar +EOF + +cat <./kustomization.yaml +configMapGenerator: +- name: example-configmap-1 + envs: + - .env +EOF +``` + + +可以使用以下命令检查生成的 ConfigMap: + +```shell +kubectl kustomize ./ +``` + + +生成的 ConfigMap 为: + +```yaml +apiVersion: v1 +data: + FOO=Bar +kind: ConfigMap +metadata: + name: example-configmap-1-8mbdf7882g +``` + + +{{< note >}} +`.env` 文件中的每个变量在生成的 ConfigMap 中成为一个单独的键。 +这与之前的示例不同,前一个示例将一个名为 `.properties` 的文件(及其所有条目)嵌入到同一个键的值中。 +{{< /note >}} + @@ -171,6 +222,110 @@ metadata: name: example-configmap-2-g2hdhfc6tk ``` + +要在 Deployment 中使用生成的 ConfigMap,使用 configMapGenerator 的名称对其进行引用。 +Kustomize 将自动使用生成的名称替换该名称。 + +这是使用生成的 ConfigMap 的 deployment 示例: + +```yaml +# 创建一个 application.properties 文件 +cat <application.properties +FOO=Bar +EOF + +cat <deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app + labels: + app: my-app +spec: + selector: + matchLabels: + app: my-app + template: + metadata: + labels: + app: my-app + spec: + containers: + - name: app + image: my-app + volumeMount: + - name: config + mountPath: /config + volumes: + - name: config + configMap: + name: example-configmap-1 +EOF + +cat <./kustomization.yaml +resources: +- deployment.yaml +configMapGenerator: +- name: example-configmap-1 + files: + - application.properties +EOF +``` + + +生成 ConfigMap 和 Deployment: + +```shell +kubectl kustomize ./ +``` + + +生成的 Deployment 将通过名称引用生成的 ConfigMap: + +```yaml +apiVersion: v1 +data: + application.properties: | + FOO=Bar +kind: ConfigMap +metadata: + name: example-configmap-1-g4hk9g2ff8 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: my-app + name: my-app +spec: + selector: + matchLabels: + app: my-app + template: + metadata: + labels: + app: my-app + spec: + containers: + - image: my-app + name: app + volumeMount: + - mountPath: /config + name: config + volumes: + - configMap: + name: example-configmap-1-g4hk9g2ff8 + name: config +``` + #### secretGenerator +与 ConfigMaps 一样,生成的 Secrets 可以通过引用 secretGenerator 的名称在部署中使用: + +```shell +# 创建一个 password.txt 文件 +cat <./password.txt +username=admin +password=secret +EOF + +cat <deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app + labels: + app: my-app +spec: + selector: + matchLabels: + app: my-app + template: + metadata: + labels: + app: my-app + spec: + containers: + - name: app + image: my-app + volumeMount: + - name: password + mountPath: /secrets + volumes: + - name: password + secret: + secretName: example-secret-1 +EOF + +cat <./kustomization.yaml +resources: +- deployment.yaml +secretGenerator: +- name: example-secret-1 + files: + - password.txt +EOF +``` + #### generatorOptions @@ -1043,14 +1248,14 @@ deployment.apps "dev-my-nginx" deleted | commonLabels | map[string]string | 要添加到所有资源和选择算符的标签 | | commonAnnotations | map[string]string | 要添加到所有资源的注解 | | resources | []string | 列表中的每个条目都必须能够解析为现有的资源配置文件 | -| configmapGenerator | [][ConfigMapArgs](https://github.com/kubernetes-sigs/kustomize/blob/release-kustomize-v4.0/api/types/kustomization.go#L99) | 列表中的每个条目都会生成一个 ConfigMap | -| secretGenerator | [][SecretArgs](https://github.com/kubernetes-sigs/kustomize/blob/release-kustomize-v4.0/api/types/kustomization.go#L106) | 列表中的每个条目都会生成一个 Secret | -| generatorOptions | [GeneratorOptions](https://github.com/kubernetes-sigs/kustomize/blob/release-kustomize-v4.0/api/types/kustomization.go#L109) | 更改所有 ConfigMap 和 Secret 生成器的行为 | +| configMapGenerator | [][ConfigMapArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/configmapargs.go#L7) | 列表中的每个条目都会生成一个 ConfigMap | +| secretGenerator | [][SecretArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/secretargs.go#L7) | 列表中的每个条目都会生成一个 Secret | +| generatorOptions | [GeneratorOptions](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/generatoroptions.go#L7) | 更改所有 ConfigMap 和 Secret 生成器的行为 | | bases | []string | 列表中每个条目都应能解析为一个包含 kustomization.yaml 文件的目录 | | patchesStrategicMerge | []string | 列表中每个条目都能解析为某 Kubernetes 对象的策略性合并补丁 | -| patchesJson6902 | [][Json6902](https://github.com/kubernetes-sigs/kustomize/blob/release-kustomize-v4.0/api/types/patchjson6902.go#L8) | 列表中每个条目都能解析为一个 Kubernetes 对象和一个 JSON 补丁 | -| vars | [][Var](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/var.go#L31) | 每个条目用来从某资源的字段来析取文字 | -| images | [][Image](https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/image.go#L23) | 每个条目都用来更改镜像的名称、标记与/或摘要,不必生成补丁 | +| patchesJson6902 | [][Patch](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/patch.go#L10) | 列表中每个条目都能解析为一个 Kubernetes 对象和一个 JSON 补丁 | +| vars | [][Var](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/var.go#L19) | 每个条目用来从某资源的字段来析取文字 | +| images | [][Image](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/image.go#L8) | 每个条目都用来更改镜像的名称、标记与/或摘要,不必生成补丁 | | configurations | []string | 列表中每个条目都应能解析为一个包含 [Kustomize 转换器配置](https://github.com/kubernetes-sigs/kustomize/tree/master/examples/transformerconfigs) 的文件 | | crds | []string | 列表中每个条目都赢能够解析为 Kubernetes 类别的 OpenAPI 定义文件 | diff --git a/content/zh/docs/tasks/service-catalog/install-service-catalog-using-helm.md b/content/zh/docs/tasks/service-catalog/install-service-catalog-using-helm.md index 66f0dd1e1e..a8c6988d83 100644 --- a/content/zh/docs/tasks/service-catalog/install-service-catalog-using-helm.md +++ b/content/zh/docs/tasks/service-catalog/install-service-catalog-using-helm.md @@ -27,7 +27,7 @@ Use [Helm](https://helm.sh/) to install Service Catalog on your Kubernetes clust * You must have a Kubernetes cluster with cluster DNS enabled. * If you are using a cloud-based Kubernetes cluster or {{< glossary_tooltip text="Minikube" term_id="minikube" >}}, you may already have cluster DNS enabled. * If you are using `hack/local-up-cluster.sh`, ensure that the `KUBE_ENABLE_CLUSTER_DNS` environment variable is set, then run the install script. -* [Install and setup kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) v1.7 or higher. Make sure it is configured to connect to the Kubernetes cluster. +* [Install and setup kubectl](/docs/tasks/tools/) v1.7 or higher. Make sure it is configured to connect to the Kubernetes cluster. * Install [Helm](http://helm.sh/) v2.7.0 or newer. * Follow the [Helm install instructions](https://github.com/kubernetes/helm/blob/master/docs/install.md). * If you already have an appropriate version of Helm installed, execute `helm init` to install Tiller, the server-side component of Helm. @@ -37,7 +37,7 @@ Use [Helm](https://helm.sh/) to install Service Catalog on your Kubernetes clust * 你必须启用 Kubernetes 集群的 DNS 功能。 * 如果使用基于云的 Kubernetes 集群或 {{< glossary_tooltip text="Minikube" term_id="minikube" >}},则可能已经启用了集群 DNS。 * 如果你正在使用 `hack/local-up-cluster.sh`,请确保设置了 `KUBE_ENABLE_CLUSTER_DNS` 环境变量,然后运行安装脚本。 -* [安装和设置 v1.7 或更高版本的 kubectl](/zh/docs/tasks/tools/install-kubectl/),确保将其配置为连接到 Kubernetes 集群。 +* [安装和设置 v1.7 或更高版本的 kubectl](/zh/docs/tasks/tools/),确保将其配置为连接到 Kubernetes 集群。 * 安装 v2.7.0 或更高版本的 [Helm](https://helm.sh/)。 * 遵照 [Helm 安装说明](https://helm.sh/docs/intro/install/)。 * 如果已经安装了适当版本的 Helm,请执行 `helm init` 来安装 Helm 的服务器端组件 Tiller。 @@ -53,7 +53,7 @@ Once Helm is installed, add the *service-catalog* Helm repository to your local 安装 Helm 后,通过执行以下命令将 *service-catalog* Helm 存储库添加到本地计算机: ```shell -helm repo add svc-cat https://svc-catalog-charts.storage.googleapis.com +helm repo add svc-cat https://kubernetes-sigs.github.io/service-catalog ``` -使用[服务目录安装程序](https://github.com/GoogleCloudPlatform/k8s-service-catalog#installation) -工具可以轻松地在 Kubernetes 集群上安装或卸载服务目录。 -这个 CLI 工具以 `sc` 命令形式被安装在您的本地环境中。 +You can use the GCP [Service Catalog Installer](https://github.com/GoogleCloudPlatform/k8s-service-catalog#installation) +tool to easily install or uninstall Service Catalog on your Kubernetes cluster, linking it to +Google Cloud projects. +Service Catalog can work with any kind of managed service, not only Google Cloud. +--> +使用 GCP [服务目录安装程序](https://github.com/GoogleCloudPlatform/k8s-service-catalog#installation) +工具可以轻松地在 Kubernetes 集群上安装或卸载服务目录,并将其链接到 Google Cloud 项目。 + +服务目录不仅可以与 Google Cloud 一起使用,还可以与任何类型的托管服务一起使用。 ## {{% heading "prerequisites" %}} @@ -30,7 +34,7 @@ Use the [Service Catalog Installer](https://github.com/GoogleCloudPlatform/k8s-s * Install [Go 1.6+](https://golang.org/dl/) and set the `GOPATH`. * Install the [cfssl](https://github.com/cloudflare/cfssl) tool needed for generating SSL artifacts. * Service Catalog requires Kubernetes version 1.7+. -* [Install and setup kubectl](/docs/tasks/tools/install-kubectl/) so that it is configured to connect to a Kubernetes v1.7+ cluster. +* [Install and setup kubectl](/docs/tasks/tools/) so that it is configured to connect to a Kubernetes v1.7+ cluster. * The kubectl user must be bound to the *cluster-admin* role for it to install Service Catalog. To ensure that this is true, run the following command: kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user= @@ -40,7 +44,7 @@ Use the [Service Catalog Installer](https://github.com/GoogleCloudPlatform/k8s-s * 安装 [Go 1.6+](https://golang.org/dl/) 以及设置 `GOPATH`。 * 安装生成 SSL 工件所需的 [cfssl](https://github.com/cloudflare/cfssl) 工具。 * 服务目录需要 Kubernetes 1.7+ 版本。 -* [安装和设置 kubectl](/zh/docs/tasks/tools/install-kubectl/), +* [安装和设置 kubectl](/zh/docs/tasks/tools/), 以便将其配置为连接到 Kubernetes v1.7+ 集群。 * 要安装服务目录,kubectl 用户必须绑定到 *cluster-admin* 角色。 为了确保这是正确的,请运行以下命令: @@ -53,20 +57,24 @@ Use the [Service Catalog Installer](https://github.com/GoogleCloudPlatform/k8s-s ## 在本地环境中安装 `sc` -使用 `go get` 命令安装 `sc` CLI 工具: +安装程序在你的本地计算机上以 CLI 工具的形式运行,名为 `sc`。 -```Go +使用 `go get` 安装: + +```shell go get github.com/GoogleCloudPlatform/k8s-service-catalog/installer/cmd/sc ``` -执行上述命令后,`sc` 应被安装在 `GOPATH/bin` 目录中了。 +现在,`sc` 应该已经被安装在 `GOPATH/bin` 目录中了。 diff --git a/content/zh/docs/tasks/tools/install-kubectl.md b/content/zh/docs/tasks/tools/install-kubectl.md deleted file mode 100644 index e67a7dcb21..0000000000 --- a/content/zh/docs/tasks/tools/install-kubectl.md +++ /dev/null @@ -1,1070 +0,0 @@ ---- -title: 安装并配置 kubectl -content_type: task -weight: 10 -card: - name: tasks - weight: 20 - title: 安装 kubectl ---- - - - - -使用 Kubernetes 命令行工具 [kubectl](/zh/docs/reference/kubectl/kubectl/), -你可以在 Kubernetes 上运行命令。 -使用 kubectl,你可以部署应用、检视和管理集群资源、查看日志。 -要了解 kubectl 操作的完整列表,请参阅 -[kubectl 概览](/zh/docs/reference/kubectl/overview/)。 - -## {{% heading "prerequisites" %}} - - -你必须使用与集群小版本号差别为一的 kubectl 版本。 -例如,1.2 版本的客户端应该与 1.1 版本、1.2 版本和 1.3 版本的主节点一起使用。 -使用最新版本的 kubectl 有助于避免无法预料的问题。 - - - - -## 在 Linux 上安装 kubectl {#install-kubectl-on-linux} - -### 在 Linux 上使用 curl 安装 kubectl 可执行文件 - - -1. 使用下面命令下载最新的发行版本: - - ```bash - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - ``` - - - 要下载特定版本,将命令中的 `$(curl -L -s https://dl.k8s.io/release/stable.txt)` - 部分替换为指定版本。 - - 例如,要下载 Linux 上的版本 {{< param "fullversion" >}},输入: - - ``` - curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl - ``` - - -2. 验证可执行文件(可选步骤): - - - 下载 kubectl 校验和文件: - - ```bash - curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" - ``` - - - 使用校验和文件检查 kubectl 可执行二进制文件: - - ```bash - echo "$( - 如果合法,则输出为: - - ```bash - kubectl: OK - ``` - - - 如果检查失败,则 `sha256` 退出且状态值非 0 并打印类似如下输出: - - ```bash - kubectl: FAILED - sha256sum: WARNING: 1 computed checksum did NOT match - ``` - - {{< note >}} - - 所下载的二进制可执行文件和校验和文件须是同一版本。 - {{< /note >}} - - - -3. 安装 kubectl - - ```bash - sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl - ``` - - - 如果你并不拥有目标系统的 root 访问权限,你仍可以将 kubectl 安装到 - `~/.local/bin` 目录下: - - ```bash - mkdir -p ~/.local/bin/kubectl - mv ./kubectl ~/.local/bin/kubectl - # 之后将 ~/.local/bin/kubectl 添加到环境变量 $PATH 中 - ``` - - -4. 测试你所安装的版本是最新的: - - ``` - kubectl version --client - ``` - - -### 使用原生包管理器安装 {#install-using-native-package-management} - -{{< tabs name="kubectl_install" >}} -{{< tab name="Ubuntu、Debian 或 HypriotOS" codelang="bash" >}} -sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl -curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list -sudo apt-get update -sudo apt-get install -y kubectl -{{< /tab >}} - -{{< tab name="CentOS、RHEL 或 Fedora" codelang="bash" >}} -cat < /etc/yum.repos.d/kubernetes.repo -[kubernetes] -name=Kubernetes -baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 -enabled=1 -gpgcheck=1 -repo_gpgcheck=1 -gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg -EOF -yum install -y kubectl -{{< /tab >}} -{{< /tabs >}} - - -### 使用其他包管理器安装 {#install-using-other-package-management} - -{{< tabs name="other_kubectl_install" >}} -{{% tab name="Snap" %}} - -如果你使用 Ubuntu 或者其他支持 [snap](https://snapcraft.io/docs/core/install) -包管理器的 Linux 发行版,kubeclt 可以作为 [Snap](https://snapcraft.io) -应用来安装: - -```shell -snap install kubectl --classic - -kubectl version --client -``` - -{{% /tab %}} - -{{% tab name="Homebrew" %}} - -如果你在使用 Linux 且使用 [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) 包管理器, -kubectl 也可以用这种方式[安装](https://docs.brew.sh/Homebrew-on-Linux#install)。 - -```shell -brew install kubectl - -kubectl version --client -``` - -{{% /tab %}} - -{{< /tabs >}} - - -## 在 macOS 上安装 kubectl - -### 在 macOS 上使用 curl 安装 kubectl 可执行文件 - - -1. 下载最新发行版本: - - ```bash - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl" - ``` - - - 要下载特定版本,可将上面命令中的 `$(curl -L -s https://dl.k8s.io/release/stable.txt)` - 部分替换成你想要的版本。 - - 例如,要在 macOS 上安装版本 {{< param "fullversion" >}},输入: - - ```bash - curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl - ``` - - -2. 检查二进制可执行文件(可选操作) - - - 下载 kubectl 校验和文件: - - ```bash - curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256" - ``` - - - 使用校验和文件检查 kubectl 二进制可执行文件: - - ```bash - echo "$( - 如果合法,则输出为: - - ```bash - kubectl: OK - ``` - - - 如果检查失败,则 `shasum` 退出且状态值为非 0,并打印类似如下的输出: - - ```bash - kubectl: FAILED - shasum: WARNING: 1 computed checksum did NOT match - ``` - - {{< note >}} - - 下载的二进制可执行文件和校验和文件须为同一版本。 - {{< /note >}} - - -3. 设置 kubectl 二进制文件为可执行模式 - - ```bash - chmod +x ./kubectl - ``` - - -4. 将 kubectl 二进制文件移动到系统 `PATH` 环境变量中的某个位置: - - ```bash - sudo mv ./kubectl /usr/local/bin/kubectl && \ - sudo chown root: /usr/local/bin/kubectl - ``` - - -5. 测试以确保所安装的版本是最新的: - - ```bash - kubectl version --client - ``` - - -### 在 macOS 上使用 Homebrew 安装 {#install-with-homebrew-on-macos} - -如果你使用的是 macOS 系统且使用 [Homebrew](https://brew.sh/) 包管理器, -你可以使用 Homebrew 来安装 kubectl。 - - -1. 运行安装命令: - - ```bash - brew install kubectl - ``` - - - 或者 - - ```bash - brew install kubernetes-cli - ``` - - -2. 测试以确保你安装的版本是最新的: - - ```bash - kubectl version --client - ``` - - -### 在 macOS 上用 Macports 安装 kubectl - -如果你使用的是 macOS 系统并使用 [Macports](https://macports.org/) 包管理器, -你可以通过 Macports 安装 kubectl。 - - -1. 运行安装命令: - - ```bash - sudo port selfupdate - sudo port install kubectl - ``` - - -2. 测试以确保你安装的版本是最新的: - - ```bash - kubectl version --client - ``` - - -## 在 Windows 上安装 kubectl {#install-kubectl-on-windows} - -### 在 Windows 上使用 curl 安装 kubectl 二进制文件 - - -1. 下载[最新发行版本 {{< param "fullversion" >}}](https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe)。 - - 或者如何你安装了 `curl`,使用下面的命令: - - ```bash - curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe - ``` - - - 要了解哪个是最新的稳定版本(例如,出于脚本编写目的),可查看 - [https://dl.k8s.io/release/stable.txt](https://dl.k8s.io/release/stable.txt)。 - - -2. 验证二进制可执行文件(可选操作) - - - 下载 kubectl 校验和文件: - - ```powershell - curl -LO https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe.sha256 - ``` - - - 使用校验和文件验证 kubectl 可执行二进制文件: - - - - 使用命令行提示符(Commmand Prompt)来手动比较 `CertUtil` 的输出与 - 所下载的校验和文件: - - ```cmd - CertUtil -hashfile kubectl.exe SHA256 - type kubectl.exe.sha256 - ``` - - - - 使用 PowerShell 的 `-eq` 操作符来自动完成校验操作,获得 `True` 或 `False` 结果: - - ```powershell - $($(CertUtil -hashfile .\kubectl.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl.exe.sha256) - ``` - - -3. 将可执行文件放到 PATH 目录下。 - - -4. 测试以确定所下载的 `kubectl` 版本是正确的的: - - ```cmd - kubectl version --client - ``` - - -{{< note >}} -[Docker Desktop for Windows](https://docs.docker.com/docker-for-windows/#kubernetes) -会将自己的 `kubectl` 程序添加到 PATH 中。 -如果你之前安装过 Docker Desktop,你可能需要将新安装的 PATH 项放到 Docker Desktop -安装程序所添加的目录之前,或者干脆删除 Docker Desktop 所安装的 `kubectl`。 -{{< /note >}} - - -## 使用 PowerShell 从 PSGallery 安装 kubectl - -如果你使用的是 Windows 系统并使用 [Powershell Gallery](https://www.powershellgallery.com/) -软件包管理器,你可以使用 PowerShell 安装和更新 kubectl。 - - -1. 运行安装命令(确保指定 `DownloadLocation`): - - ```powershell - Install-Script -Name 'install-kubectl' -Scope CurrentUser -Force - install-kubectl.ps1 [-DownloadLocation <路径名>] - ``` - - - {{< note >}} - 如果你没有指定 `DownloadLocation`,那么 `kubectl` 将安装在用户的 `temp` 目录中。 - {{< /note >}} - - - 安装程序创建 `$HOME/.kube` 目录,并指示它创建配置文件 - - -2. 测试以确保你安装的版本是最新的: - - ```powershell - kubectl version --client - ``` - - -{{< note >}} -通过重新运行步骤 1 中列出的两个命令可以更新安装。 -{{< /note >}} - - -### 在 Windows 系统上用 Chocolatey 或者 Scoop 安装 - - -1. 要在 Windows 上用 [Chocolatey](https://chocolatey.org) 或者 - [Scoop](https://scoop.sh) 命令行安装程序安装 kubectl: - - {{< tabs name="kubectl_win_install" >}} - {{% tab name="choco" %}} - ```powershell - choco install kubernetes-cli - ``` - {{% /tab %}} - {{% tab name="scoop" %}} - ```powershell - scoop install kubectl - ``` - {{% /tab %}} - {{< /tabs >}} - - -2. 测试以确保你安装的版本是最新的: - - ``` - kubectl version --client - ``` - - -3. 切换到你的 HOME 目录: - - ```powershell - # 如果你在使用 cmd.exe,运行 cd %USERPROFILE% - cd ~ - ``` - - -4. 创建 `.kube` 目录: - - ```powershell - mkdir .kube - ``` - - -5. 进入到刚刚创建的 `.kube` 目录: - - ```powershell - cd .kube - ``` - - -6. 配置 kubectl 以使用远程 Kubernetes 集群: - - ```powershell - New-Item config -type file - ``` - - -{{< note >}} -使用你喜欢的文本编辑器,例如 Notepad,编辑此配置文件。 -{{< /note >}} - - - -## 将 kubectl 作为 Google Cloud SDK 的一部分下载 - -kubectl 可以作为 Google Cloud SDK 的一部分进行安装。 - - -1. 安装 [Google Cloud SDK](https://cloud.google.com/sdk/)。 - -2. 运行以下命令安装 `kubectl`: - - ```shell - gcloud components install kubectl - ``` - - -3. 测试以确保你安装的版本是最新的: - - ```shell - kubectl version --client - ``` - - -## 验证 kubectl 配置 {#verifying-kubectl-configuration} - -kubectl 需要一个 -[kubeconfig 配置文件](/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/) -使其找到并访问 Kubernetes 集群。当你使用 -[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh) -创建 Kubernetes 集群或者使用已经部署好的 Minikube 集群时, -会自动生成 kubeconfig 配置文件。 -默认情况下,kubectl 的配置文件位于 `~/.kube/config`。 - - -通过获取集群状态检查 kubectl 是否被正确配置: - -```shell -kubectl cluster-info -``` - - -如果你看到一个 URL 被返回,那么 kubectl 已经被正确配置, -能够正常访问你的 Kubernetes 集群。 - -如果你看到类似以下的信息被返回,那么 kubectl 没有被正确配置, -无法正常访问你的 Kubernetes 集群。 - -``` -The connection to the server was refused - did you specify the right host or port? -``` - - -例如,如果你打算在笔记本电脑(本地)上运行 Kubernetes 集群,则需要首先安装 -minikube 等工具,然后重新运行上述命令。 - -如果 kubectl cluster-info 能够返回 URL 响应,但你无法访问你的集群,可以使用 -下面的命令检查配置是否正确: - -```shell -kubectl cluster-info dump -``` - - -## 可选的 kubectl 配置 - -### 启用 shell 自动补全功能 - -kubectl 为 Bash 和 Zsh 支持自动补全功能,可以节省大量输入! - -下面是设置 Bash 与 Zsh 下自动补齐的过程(包括 Linux 与 macOS 的差异)。 - -{{< tabs name="kubectl_autocompletion" >}} - -{{% tab name="Linux 上的 Bash" %}} - - -#### 介绍 - -用于 Bash 的 kubectl 自动补齐脚本可以用 `kubectl completion bash` 命令生成。 -在 Shell 环境中引用自动补齐脚本就可以启用 kubectl 自动补齐。 - -不过,补齐脚本依赖于 [**bash-completion**](https://github.com/scop/bash-completion) 软件包, -这意味着你必须先安装 bash-completion(你可以通过运行 `type _init_completion`)来测试是否 -你已经安装了这个软件)。 - - -### 安装 bash-completion - -很多包管理器都提供 bash-completion(参见[这里](https://github.com/scop/bash-completion#installation))。 -你可以通过 `apt-get install bash-completion` 或 `yum install bash-completion` 来安装。 - -上述命令会创建 `/usr/share/bash-completion/bash_completion`,也就是 bash-completion 的主脚本。 -取决于所用的包管理器,你可能必须在你的 `~/.bashrc` 中通过 `source` 源引此文件。 - -要搞清楚这一点,可以重新加载你的 Shell 并运行 `type _init_completion`。 -如果命令成功,一切就绪;否则你就需要将下面的内容添加到你的 `~/.bashrc` -文件中: - -```bash -source /usr/share/bash-completion/bash_completion -``` - -之后,重新加载你的 Shell 并运行 `type _init_completion` 来检查 bash-completion 是否已 -正确安装。 - - -### 启用 kubectl 自动补齐 - -你现在需要确定在你的所有 Shell 会话中都源引了 kubectl 自动补齐脚本。 -实现这点有两种方式: - - -- 在 `~/.bashrc` 文件中源引自动补齐脚本 - - ```bash - echo 'source <(kubectl completion bash)' >>~/.bashrc - ``` - - -- 将自动补齐脚本添加到目录 `/etc/bash_completion.d`: - - ```bash - kubectl completion bash >/etc/bash_completion.d/kubectl - ``` - - -如果你为 kubectl 命令设置了别名(alias),你可以扩展 Shell 补齐,使之能够与别名一起使用: - -```bash -echo 'alias k=kubectl' >>~/.bashrc -echo 'complete -F __start_kubectl k' >>~/.bashrc -``` - - - - -{{< note >}} -bash-completion 会自动源引 `/etc/bash_completion.d` 下的所有自动补齐脚本。 -{{< /note >}} - - -两种方法是等价的。重新加载 Shell 之后,kubectl 的自动补齐应该能够使用了。 - -{{% /tab %}} - -{{% tab name="macOS 上的 Bash" %}} - - -### 介绍 - -用于 Bash 的 kubectl 自动补齐脚本可以用 `kubectl completion bash` 命令生成。 -在 Shell 环境中引用自动补齐脚本就可以启用 kubectl 自动补齐。 -不过,补齐脚本依赖于 [**bash-completion**](https://github.com/scop/bash-completion) 软件包, -你必须预先安装。 - - -{{< warning>}} -`bash-completion` 有两个版本,v1 和 v2。 -v1 是用于 Bash 3.2 版本的(macOS 上的默认配置),v2 是用于 Bash 4.1 以上版本的。 -`kubectl` 补齐脚本 *无法* 在 v1 版本的 bash-completion 和 Bash 3.2 上使用, -需要 **bash-completion v2** 和 **Bash 4.1 以上版本**。 -因此,为了在 macOS 上正常使用 kubectl 自动补齐,你需要安装并使用 Bash 4.1+ -版本([*相关指南*](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba))。 -下面的指令假定你在使用 Bash 4.1+(也就是说 Bash 4.1 及以上版本)。 -{{< /warning >}} - - -### 升级 Bash {#upgrade-bash} - -这里的命令假定你使用的是 Bash 4.1+。你可以通过下面的命令来检查 Bash 版本: - -```bash -echo $BASH_VERSION -``` - - -如果版本很老,你可以使用 Homebrew 来安装或升级: - -```bash -brew install bash -``` - - -重新加载 Shell 并验证你使用的版本是期望的版本: - -```bash -echo $BASH_VERSION $SHELL -``` - - -Homebrew 通常安装 Bash 到 `/usr/local/bin/bash`。 - - -### 安装 bash-completion - -{{< note >}} -如前所述,这里的指令假定你使用的是 Bash 4.1+,这意味着你会安装 bash-completion -的 v2 版本(与此相对,在 Bash 3.2 版本中的 bash-completion v1 是 kubectl -无法使用的。 -{{< /note >}} - -你可以通过输入 `type _init_completion` 来测试是否 bash-completion v2 已经安装。 -如果没有,可以用 Homebrew 来安装: - -```bash -brew install bash-completion@2 -``` - - -就像命令的输出所提示的,你应该将下面的内容添加到 `~/.bash_profile` 文件中: - -```bash -export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d" -[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh" -``` - - -重新加载你的 Shell 并运行 `type _init_completion`,验证 bash-completion v2 -被正确安装。 - - -### 启用 kubectl 自动补齐 - -你现在需要确保在你的所有 Shell 会话中都源引了 kubectl 自动补齐脚本。 -实现这点有两种方式: - - -- 在 `~/.bash_profile` 文件中源引自动补齐脚本 - - ```bash - echo 'source <(kubectl completion bash)' >>~/.bash_profile - ``` - - -- 将自动补齐脚本添加到目录 `/usr/local/etc/bash_completion.d`: - - ```bash - kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl - ``` - - -- 如果你为 kubectl 命令设置了别名(alias),你可以扩展 Shell 补齐,使之能够与别名一起使用: - - ```bash - echo 'alias k=kubectl' >>~/.bash_profile - echo 'complete -F __start_kubectl k' >>~/.bash_profile - ``` - - -- 如果你是所有 Homebrew 来安装 kubectl(如[前文](#install-with-homebrew-on-macos)所述), - kubectl 补齐脚本应该已经位于 `/usr/local/etc/bash_completion.d/kubectl` 目录下。 - 在这种情况下,你就不用做任何操作了。 - - -{{< note >}} -Homebrew 安装 bash-completion v2 时会源引 `BASH_COMPLETION_COMPAT_DIR` 目录下的所有 -文件,这是为什么后面两种方法也可行的原因。 -{{< /note >}} - - -在任何一种情况下,重新加载 Shell 之后,kubectl 的自动补齐应该可以工作了。 - -{{% /tab %}} - -{{% tab name="Zsh" %}} - - -Zsh 的 kubectl 补齐脚本可通过 `kubectl completion zsh` 命令来生成。 -在 Shell 环境中引用自动补齐脚本就可以启用 kubectl 自动补齐。 - -```zsh -source <(kubectl completion zsh) -``` - - -如果你为 kubectl 命令设置了别名(alias),你可以扩展 Shell 补齐,使之能够与别名一起使用: - -```zsh -echo 'alias k=kubectl' >>~/.zshrc -echo 'complete -F __start_kubectl k' >>~/.zshrc -``` - - -重新加载 Shell 之后,kubectl 的自动补齐应该可以工作了。 - - -如果你看到类似 `complete:13: command not found: compdef` 这种错误信息, -可以将下面的命令添加到你的 `~/.zshrc` 文件的文件头: - -```zsh -autoload -Uz compinit -compinit -``` - -{{% /tab %}} - -{{< /tabs >}} - -## {{% heading "whatsnext" %}} - - -* [安装 Minikube](https://minikube.sigs.k8s.io/docs/start/) -* 参阅[入门指南](/zh/docs/setup/),了解创建集群相关的信息 -* 了解如何[启动和暴露你的应用](/zh/docs/tasks/access-application-cluster/service-access-application-cluster/) -* 如果你需要访问别人创建的集群,参考 - [共享集群访问文档](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) -* 阅读 [kubectl 参考文档](/zh/docs/reference/kubectl/kubectl/) - diff --git a/content/zh/docs/tutorials/stateful-application/basic-stateful-set.md b/content/zh/docs/tutorials/stateful-application/basic-stateful-set.md index 4fe30daece..d3717c3e44 100644 --- a/content/zh/docs/tutorials/stateful-application/basic-stateful-set.md +++ b/content/zh/docs/tutorials/stateful-application/basic-stateful-set.md @@ -19,7 +19,8 @@ This tutorial provides an introduction to managing applications with demonstrates how to create, delete, scale, and update the Pods of StatefulSets. --> -本教程介绍如何了使用 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 来管理应用。演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。 +本教程介绍如何了使用 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) 来管理应用。 +演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。 @@ -71,7 +72,8 @@ After this tutorial, you will be familiar with the following. * How to update a StatefulSet's Pods --> -StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而在 Kubernetes 上管理有状态应用和分布式系统是一个宽泛而复杂的话题。为了演示 StatefulSet 的基本特性,并且不使前后的主题混淆,你将会使用 StatefulSet 部署一个简单的 web 应用。 +StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而在 Kubernetes 上管理有状态应用和分布式系统是一个宽泛而复杂的话题。 +为了演示 StatefulSet 的基本特性,并且不使前后的主题混淆,你将会使用 StatefulSet 部署一个简单的 web 应用。 在阅读本教程后,你将熟悉以下内容: @@ -86,10 +88,21 @@ StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而 + + ## 创建 StatefulSet -作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中的示例相似。它创建了一个 [Headless Service](/zh/docs/user-guide/services/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。 +作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) 概念中的示例相似。 +它创建了一个 [Headless Service](/zh/docs/concepts/services-networking/service/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。 {{< codenew file="application/web/web.yaml" >}} @@ -104,7 +117,7 @@ of the StatefulSet's Pods. 下载上面的例子并保存为文件 `web.yaml`。 -你需要使用两个终端窗口。在第一个终端中,使用 [`kubectl get`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。 +你需要使用两个终端窗口。 在第一个终端中,使用 [`kubectl get`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。 ```shell kubectl get pods -w -l app=nginx @@ -132,7 +145,8 @@ The command above creates two Pods, each running an `web` StatefulSet to verify that they were created successfully. --> -上面的命令创建了两个 Pod,每个都运行了一个 [NGINX](https://www.nginx.com) web 服务器。获取 `nginx` Service 和 `web` StatefulSet 来验证是否成功的创建了它们。 +上面的命令创建了两个 Pod,每个都运行了一个 [NGINX](https://www.nginx.com) web 服务器。 +获取 `nginx` Service 和 `web` StatefulSet 来验证是否成功的创建了它们。 ```shell kubectl get service nginx @@ -166,7 +180,8 @@ look like the example below. ### 顺序创建 Pod -对于一个拥有 N 个副本的 StatefulSet,Pod 被部署时是按照 {0 …… N-1} 的序号顺序创建的。在第一个终端中使用 `kubectl get` 检查输出。这个输出最终将看起来像下面的样子。 +对于一个拥有 N 个副本的 StatefulSet,Pod 被部署时是按照 {0 …… N-1} 的序号顺序创建的。 +在第一个终端中使用 `kubectl get` 检查输出。这个输出最终将看起来像下面的样子。 ```shell kubectl get pods -w -l app=nginx @@ -235,7 +250,11 @@ Each Pod has a stable hostname based on its ordinal index. Use `hostname` command in each Pod. --> -如同 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中所提到的,StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标志。这个标志基于 StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。Pod 的名称的形式为`-`。`web`StatefulSet 拥有两个副本,所以它创建了两个 Pod:`web-0`和`web-1`。 +如同 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) 概念中所提到的, +StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标志。 +这个标志基于 StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。 +Pod 的名称的形式为`-`。 +`web`StatefulSet 拥有两个副本,所以它创建了两个 Pod:`web-0`和`web-1`。 ### 使用稳定的网络身份标识 @@ -256,7 +275,9 @@ Using `nslookup` on the Pods' hostnames, you can examine their in-cluster DNS addresses. --> -使用 [`kubectl run`](/zh/docs/reference/generated/kubectl/kubectl-commands/#run) 运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。 +使用 [`kubectl run`](/zh/docs/reference/generated/kubectl/kubectl-commands/#run) +运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。 +通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。 ```shell kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm @@ -296,7 +317,8 @@ contain the Pods' IP addresses. In one terminal, watch the StatefulSet's Pods. --> -headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready 状态的 Pod)。SRV 记录指向一个包含 Pod IP 地址的记录表项。 +headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready 状态的 Pod)。 +SRV 记录指向一个包含 Pod IP 地址的记录表项。 在一个终端中查看 StatefulSet 的 Pod。 @@ -409,10 +431,12 @@ application will be able to discover the Pods' addresses when they transition to Running and Ready. --> -Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址可能发生了改变。在本教程中使用的集群中它们就改变了。这就是为什么不要在其他应用中使用 StatefulSet 中的 Pod 的 IP 地址进行连接,这点很重要。 +Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址可能发生了改变。 +在本教程中使用的集群中它们就改变了。这就是为什么不要在其他应用中使用 StatefulSet 中的 Pod 的 IP 地址进行连接,这点很重要。 -如果你需要查找并连接一个 StatefulSet 的活动成员,你应该查询 Headless Service 的 CNAME。和 CNAME 相关联的 SRV 记录只会包含 StatefulSet 中处于 Running 和 Ready 状态的 Pod。 +如果你需要查找并连接一个 StatefulSet 的活动成员,你应该查询 Headless Service 的 CNAME。 +和 CNAME 相关联的 SRV 记录只会包含 StatefulSet 中处于 Running 和 Ready 状态的 Pod。 如果你的应用已经实现了用于测试 liveness 和 readiness 的连接逻辑,你可以使用 Pod 的 SRV 记录(`web-0.nginx.default.svc.cluster.local`, @@ -459,7 +483,8 @@ webservers serve the hostnames. StatefulSet 控制器创建了两个 PersistentVolumeClaims,绑定到两个 [PersistentVolumes](/zh/docs/concepts/storage/volumes/)。由于本教程使用的集群配置为动态提供 PersistentVolume,所有的 PersistentVolume 都是自动创建和绑定的。 -NGINX web 服务器默认会加载位于 `/usr/share/nginx/html/index.html` 的 index 文件。StatefulSets `spec` 中的 `volumeMounts` 字段保证了 `/usr/share/nginx/html` 文件夹由一个 PersistentVolume 支持。 +NGINX web 服务器默认会加载位于 `/usr/share/nginx/html/index.html` 的 index 文件。 +StatefulSets `spec` 中的 `volumeMounts` 字段保证了 `/usr/share/nginx/html` 文件夹由一个 PersistentVolume 支持。 将 Pod 的主机名写入它们的`index.html`文件并验证 NGINX web 服务器使用该主机名提供服务。 @@ -572,12 +597,15 @@ This is accomplished by updating the `replicas` field. You can use either In one terminal window, watch the Pods in the StatefulSet. --> -虽然 `web-0` 和 `web-1` 被重新调度了,但它们仍然继续监听各自的主机名,因为和它们的 PersistentVolumeClaim 相关联的 PersistentVolume 被重新挂载到了各自的 `volumeMount` 上。不管 `web-0` 和 `web-1` 被调度到了哪个节点上,它们的 PersistentVolumes 将会被挂载到合适的挂载点上。 +虽然 `web-0` 和 `web-1` 被重新调度了,但它们仍然继续监听各自的主机名,因为和它们的 PersistentVolumeClaim 相关联的 PersistentVolume 被重新挂载到了各自的 `volumeMount` 上。 +不管 `web-0` 和 `web-1` 被调度到了哪个节点上,它们的 PersistentVolumes 将会被挂载到合适的挂载点上。 ## 扩容/缩容 StatefulSet -扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。你可以使用[`kubectl scale`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#scale) 或者[`kubectl patch`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。 +扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。 +你可以使用[`kubectl scale`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#scale) +或者[`kubectl patch`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。 ### 扩容 @@ -642,7 +670,8 @@ subsequent Pod. In one terminal, watch the StatefulSet's Pods. --> -StatefulSet 控制器扩展了副本的数量。如同[创建 StatefulSet](#顺序创建pod) 所述,StatefulSet 按序号索引顺序的创建每个 Pod,并且会等待前一个 Pod 变为 Running 和 Ready 才会启动下一个 Pod。 +StatefulSet 控制器扩展了副本的数量。 +如同[创建 StatefulSet](#顺序创建pod) 所述,StatefulSet 按序号索引顺序的创建每个 Pod,并且会等待前一个 Pod 变为 Running 和 Ready 才会启动下一个 Pod。 ### 缩容 @@ -738,13 +767,17 @@ StatefulSet. There are two valid update strategies, `RollingUpdate` and `RollingUpdate` update strategy is the default for StatefulSets. --> -五个 PersistentVolumeClaims 和五个 PersistentVolumes 仍然存在。查看 Pod 的 [稳定存储](#stable-storage),我们发现当删除 StatefulSet 的 Pod 时,挂载到 StatefulSet 的 Pod 的 PersistentVolumes 不会被删除。当这种删除行为是由 StatefulSet 缩容引起时也是一样的。 +五个 PersistentVolumeClaims 和五个 PersistentVolumes 仍然存在。 +查看 Pod 的 [稳定存储](#stable-storage),我们发现当删除 StatefulSet 的 Pod 时,挂载到 StatefulSet 的 Pod 的 PersistentVolumes 不会被删除。 +当这种删除行为是由 StatefulSet 缩容引起时也是一样的。 ## 更新 StatefulSet -Kubernetes 1.7 版本的 StatefulSet 控制器支持自动更新。更新策略由 StatefulSet API Object 的`spec.updateStrategy` 字段决定。这个特性能够用来更新一个 StatefulSet 中的 Pod 的 container images,resource requests,以及 limits,labels 和 annotations。`RollingUpdate`滚动更新是 StatefulSets 默认策略。 +Kubernetes 1.7 版本的 StatefulSet 控制器支持自动更新。 +更新策略由 StatefulSet API Object 的`spec.updateStrategy` 字段决定。这个特性能够用来更新一个 StatefulSet 中的 Pod 的 container images,resource requests,以及 limits,labels 和 annotations。 +`RollingUpdate`滚动更新是 StatefulSets 默认策略。 -StatefulSet 里的 Pod 采用和序号相反的顺序更新。在更新下一个 Pod 前,StatefulSet 控制器终止每个 Pod 并等待它们变成 Running 和 Ready。请注意,虽然在顺序后继者变成 Running 和 Ready 之前 StatefulSet 控制器不会更新下一个 Pod,但它仍然会重建任何在更新过程中发生故障的 Pod,使用的是它们当前的版本。已经接收到更新请求的 Pod 将会被恢复为更新的版本,没有收到请求的 Pod 则会被恢复为之前的版本。像这样,控制器尝试继续使应用保持健康并在出现间歇性故障时保持更新的一致性。 +StatefulSet 里的 Pod 采用和序号相反的顺序更新。在更新下一个 Pod 前,StatefulSet 控制器终止每个 Pod 并等待它们变成 Running 和 Ready。 +请注意,虽然在顺序后继者变成 Running 和 Ready 之前 StatefulSet 控制器不会更新下一个 Pod,但它仍然会重建任何在更新过程中发生故障的 Pod,使用的是它们当前的版本。 +已经接收到更新请求的 Pod 将会被恢复为更新的版本,没有收到请求的 Pod 则会被恢复为之前的版本。 +像这样,控制器尝试继续使应用保持健康并在出现间歇性故障时保持更新的一致性。 获取 Pod 来查看他们的容器镜像。 @@ -882,7 +918,8 @@ StatefulSet 中的所有 Pod 现在都在运行之前的容器镜像。 #### 分段更新 -你可以使用 `RollingUpdate` 更新策略的 `partition` 参数来分段更新一个 StatefulSet。分段的更新将会使 StatefulSet 中的其余所有 Pod 保持当前版本的同时仅允许改变 StatefulSet 的 `.spec.template`。 +你可以使用 `RollingUpdate` 更新策略的 `partition` 参数来分段更新一个 StatefulSet。 +分段的更新将会使 StatefulSet 中的其余所有 Pod 保持当前版本的同时仅允许改变 StatefulSet 的 `.spec.template`。 Patch `web` StatefulSet 来对 `updateStrategy` 字段添加一个分区。 @@ -963,7 +1000,8 @@ you specified [above](#staging-an-update). Patch the StatefulSet to decrement the partition. --> -请注意,虽然更新策略是 `RollingUpdate`,StatefulSet 控制器还是会使用原始的容器恢复 Pod。这是因为 Pod 的序号比 `updateStrategy` 指定的 `partition` 更小。 +请注意,虽然更新策略是 `RollingUpdate`,StatefulSet 控制器还是会使用原始的容器恢复 Pod。 +这是因为 Pod 的序号比 `updateStrategy` 指定的 `partition` 更小。 #### 灰度发布 @@ -1089,12 +1127,14 @@ update. The partition is currently set to `2`. Set the partition to `0`. --> -`web-1` 被按照原来的配置恢复,因为 Pod 的序号小于分区。当指定了分区时,如果更新了 StatefulSet 的 `.spec.template`,则所有序号大于或等于分区的 Pod 都将被更新。如果一个序号小于分区的 Pod 被删除或者终止,它将被按照原来的配置恢复。 +`web-1` 被按照原来的配置恢复,因为 Pod 的序号小于分区。当指定了分区时,如果更新了 StatefulSet 的 `.spec.template`,则所有序号大于或等于分区的 Pod 都将被更新。 +如果一个序号小于分区的 Pod 被删除或者终止,它将被按照原来的配置恢复。 #### 分阶段的发布 -你可以使用类似[灰度发布](#灰度发布)的方法执行一次分阶段的发布(例如一次线性的、等比的或者指数形式的发布)。要执行一次分阶段的发布,你需要设置 `partition` 为希望控制器暂停更新的序号。 +你可以使用类似[灰度发布](#灰度发布)的方法执行一次分阶段的发布(例如一次线性的、等比的或者指数形式的发布)。 +要执行一次分阶段的发布,你需要设置 `partition` 为希望控制器暂停更新的序号。 分区当前为`2`。请将分区设置为`0`。 @@ -1179,7 +1219,8 @@ In one terminal window, watch the Pods in the StatefulSet. ### On Delete 策略 -`OnDelete` 更新策略实现了传统(1.7 之前)行为,它也是默认的更新策略。当你选择这个更新策略并修改 StatefulSet 的 `.spec.template` 字段时,StatefulSet 控制器将不会自动的更新 Pod。 +`OnDelete` 更新策略实现了传统(1.7 之前)行为,它也是默认的更新策略。 +当你选择这个更新策略并修改 StatefulSet 的 `.spec.template` 字段时,StatefulSet 控制器将不会自动的更新 Pod。 ## 删除 StatefulSet @@ -1203,7 +1244,8 @@ command. This parameter tells Kubernetes to only delete the StatefulSet, and to not delete any of its Pods. --> -使用 [`kubectl delete`](/zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet。请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。 +使用 [`kubectl delete`](/zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet。 +请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。 ```shell kubectl delete statefulset web --cascade=false @@ -1358,7 +1400,9 @@ PersistentVolume was remounted. In one terminal window, watch the Pods in the StatefulSet. --> -尽管你同时删除了 StatefulSet 和 `web-0` Pod,但它仍然使用最初写入 `index.html` 文件的主机名进行服务。这是因为 StatefulSet 永远不会删除和一个 Pod 相关联的 PersistentVolumes。当你重建这个 StatefulSet 并且重新启动了 `web-0` 时,它原本的 PersistentVolume 会被重新挂载。 +尽管你同时删除了 StatefulSet 和 `web-0` Pod,但它仍然使用最初写入 `index.html` 文件的主机名进行服务。 +这是因为 StatefulSet 永远不会删除和一个 Pod 相关联的 PersistentVolumes。 +当你重建这个 StatefulSet 并且重新启动了 `web-0` 时,它原本的 PersistentVolume 会被重新挂载。 ### 级联删除 @@ -1422,7 +1466,8 @@ it will not delete the Headless Service associated with the StatefulSet. You must delete the `nginx` Service manually. --> -如同你在[缩容](#ordered-pod-termination)一节看到的,Pod 按照和他们序号索引相反的顺序每次终止一个。在终止一个 Pod 前,StatefulSet 控制器会等待 Pod 后继者被完全终止。 +如同你在[缩容](#ordered-pod-termination)一节看到的,Pod 按照和他们序号索引相反的顺序每次终止一个。 +在终止一个 Pod 前,StatefulSet 控制器会等待 Pod 后继者被完全终止。 请注意,虽然级联删除会删除 StatefulSet 和它的 Pod,但它并不会删除和 StatefulSet 关联的 Headless Service。你必须手动删除`nginx` Service。 @@ -1522,6 +1567,7 @@ Pod. This option only affects the behavior for scaling operations. Updates are n ## Pod 管理策略 + 对于某些分布式系统来说,StatefulSet 的顺序性保证是不必要和/或者不应该的。 这些系统仅仅要求唯一性和身份标志。为了解决这个问题,在 Kubernetes 1.7 中 我们针对 StatefulSet API 对象引入了 `.spec.podManagementPolicy`。 diff --git a/content/zh/examples/admin/konnectivity/egress-selector-configuration.yaml b/content/zh/examples/admin/konnectivity/egress-selector-configuration.yaml index 6659ff3fbb..c85f25ea51 100644 --- a/content/zh/examples/admin/konnectivity/egress-selector-configuration.yaml +++ b/content/zh/examples/admin/konnectivity/egress-selector-configuration.yaml @@ -18,4 +18,4 @@ egressSelections: # The other supported transport is "tcp". You will need to set up TLS # config to secure the TCP transport. uds: - udsName: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket + udsName: /etc/kubernetes/konnectivity-server/konnectivity-server.socket diff --git a/content/zh/examples/admin/konnectivity/konnectivity-agent.yaml b/content/zh/examples/admin/konnectivity/konnectivity-agent.yaml index c3dc71040b..0eb47e1c58 100644 --- a/content/zh/examples/admin/konnectivity/konnectivity-agent.yaml +++ b/content/zh/examples/admin/konnectivity/konnectivity-agent.yaml @@ -22,7 +22,7 @@ spec: - key: "CriticalAddonsOnly" operator: "Exists" containers: - - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent:v0.0.8 + - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent:v0.0.16 name: konnectivity-agent command: ["/proxy-agent"] args: [ @@ -32,6 +32,8 @@ spec: # this is the IP address of the master machine. "--proxy-server-host=35.225.206.7", "--proxy-server-port=8132", + "--admin-server-port=8133", + "--health-server-port=8134", "--service-account-token-path=/var/run/secrets/tokens/konnectivity-agent-token" ] volumeMounts: @@ -39,7 +41,7 @@ spec: name: konnectivity-agent-token livenessProbe: httpGet: - port: 8093 + port: 8134 path: /healthz initialDelaySeconds: 15 timeoutSeconds: 15 diff --git a/content/zh/examples/admin/konnectivity/konnectivity-server.yaml b/content/zh/examples/admin/konnectivity/konnectivity-server.yaml index 730c26c66a..f1f378431a 100644 --- a/content/zh/examples/admin/konnectivity/konnectivity-server.yaml +++ b/content/zh/examples/admin/konnectivity/konnectivity-server.yaml @@ -8,34 +8,33 @@ spec: hostNetwork: true containers: - name: konnectivity-server-container - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-server:v0.0.8 + image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-server:v0.0.16 command: ["/proxy-server"] args: [ - "--log-file=/var/log/konnectivity-server.log", - "--logtostderr=false", - "--log-file-max-size=0", + "--logtostderr=true", # This needs to be consistent with the value set in egressSelectorConfiguration. - "--uds-name=/etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket", + "--uds-name=/etc/kubernetes/konnectivity-server/konnectivity-server.socket", # The following two lines assume the Konnectivity server is # deployed on the same machine as the apiserver, and the certs and # key of the API Server are at the specified location. - "--cluster-cert=/etc/srv/kubernetes/pki/apiserver.crt", - "--cluster-key=/etc/srv/kubernetes/pki/apiserver.key", + "--cluster-cert=/etc/kubernetes/pki/apiserver.crt", + "--cluster-key=/etc/kubernetes/pki/apiserver.key", # This needs to be consistent with the value set in egressSelectorConfiguration. "--mode=grpc", "--server-port=0", "--agent-port=8132", "--admin-port=8133", + "--health-port=8134", "--agent-namespace=kube-system", "--agent-service-account=konnectivity-agent", - "--kubeconfig=/etc/srv/kubernetes/konnectivity-server/kubeconfig", + "--kubeconfig=/etc/kubernetes/konnectivity-server.conf", "--authentication-audience=system:konnectivity-server" ] livenessProbe: httpGet: scheme: HTTP host: 127.0.0.1 - port: 8133 + port: 8134 path: /healthz initialDelaySeconds: 30 timeoutSeconds: 60 @@ -46,25 +45,28 @@ spec: - name: adminport containerPort: 8133 hostPort: 8133 + - name: healthport + containerPort: 8134 + hostPort: 8134 volumeMounts: - - name: varlogkonnectivityserver - mountPath: /var/log/konnectivity-server.log - readOnly: false - - name: pki - mountPath: /etc/srv/kubernetes/pki + - name: k8s-certs + mountPath: /etc/kubernetes/pki + readOnly: true + - name: kubeconfig + mountPath: /etc/kubernetes/konnectivity-server.conf readOnly: true - name: konnectivity-uds - mountPath: /etc/srv/kubernetes/konnectivity-server + mountPath: /etc/kubernetes/konnectivity-server readOnly: false volumes: - - name: varlogkonnectivityserver + - name: k8s-certs hostPath: - path: /var/log/konnectivity-server.log + path: /etc/kubernetes/pki + - name: kubeconfig + hostPath: + path: /etc/kubernetes/konnectivity-server.conf type: FileOrCreate - - name: pki - hostPath: - path: /etc/srv/kubernetes/pki - name: konnectivity-uds hostPath: - path: /etc/srv/kubernetes/konnectivity-server + path: /etc/kubernetes/konnectivity-server type: DirectoryOrCreate diff --git a/content/zh/examples/application/job/cronjob.yaml b/content/zh/examples/application/job/cronjob.yaml index 816d682f28..da905a9048 100644 --- a/content/zh/examples/application/job/cronjob.yaml +++ b/content/zh/examples/application/job/cronjob.yaml @@ -1,4 +1,4 @@ -apiVersion: batch/v1beta1 +apiVersion: batch/v1 kind: CronJob metadata: name: hello diff --git a/content/zh/examples/service/networking/namespaced-params.yaml b/content/zh/examples/service/networking/namespaced-params.yaml new file mode 100644 index 0000000000..dd56724787 --- /dev/null +++ b/content/zh/examples/service/networking/namespaced-params.yaml @@ -0,0 +1,12 @@ +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + name: external-lb +spec: + controller: example.com/ingress-controller + parameters: + apiGroup: k8s.example.com + kind: IngressParameters + name: external-lb + namespace: external-configuration + scope: Namespace diff --git a/data/i18n/de/OWNERS b/data/i18n/de/OWNERS new file mode 100644 index 0000000000..63d33cd516 --- /dev/null +++ b/data/i18n/de/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for German. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-de-reviews + +approvers: +- sig-docs-de-owners + +labels: +- language/de diff --git a/data/i18n/de/de.toml b/data/i18n/de/de.toml new file mode 100644 index 0000000000..cd4c3d7924 --- /dev/null +++ b/data/i18n/de/de.toml @@ -0,0 +1,203 @@ +# i18n strings for the German (main) site. + +[deprecation_warning] +other = " Die Dokumentation wird nicht mehr aktiv gepflegt. Die aktuell angezeigte Version ist eine statische Momentaufnahme. Aktuelle Dokumentation finden Sie unter " + +[deprecation_file_warning] +other = "Veraltet" + +[objectives_heading] +other = "Ziele" + +[cleanup_heading] +other = "Aufräumen" + +[prerequisites_heading] +other = "Bevor Sie beginnen" + +[subscribe_button] +other = "Abonnieren" + +[whatsnext_heading] +other = "Nächste Schritte" + +[feedback_heading] +other = "Feedback" + +[feedback_question] +other = "War diese Seite hilfreich?" + +[feedback_yes] +other = "Ja" + +[feedback_no] +other = "Nein" + +[latest_version] +other = "aktuelle Version." + +[version_check_mustbe] +other = "Ihr Kubernetes-Server benötigt die Version " + +[version_check_mustbeorlater] +other = "Ihr Kubernetes-Server benötigt mindestens die Version " + +[version_check_tocheck] +other = "Um die Version zu überprüfen, geben Sie Folgendes ein " + +[caution] +other = "Achtung:" + +[note] +other = "Hinweis:" + +[warning] +other = "Warnung:" + +[main_read_about] +other = "Mehr Informationen" + +[main_read_more] +other = "Weiterlesen" + +[main_github_invite] +other = "Interested in hacking on the core Kubernetes code base?" + +[main_github_view_on] +other = "Auf GitHub ansehen" + +[main_github_create_an_issue] +other = "Problem berichten" + +[main_community_explore] +other = "Entdecke die Community" + +[main_kubernetes_features] +other = "Kubernetes Features" + +[main_cncf_project] +other = """Wir sind ein CNCF Abschlussprojekt

""" + +[main_kubeweekly_baseline] +other = "Möchten Sie die neuesten Nachrichten von Kubernetes erhalten? Melden Sie sich für KubeWeekly an." + +[main_kubernetes_past_link] +other = "Frühere Newsletter anzeigen" + +[main_kubeweekly_signup] +other = "Abonnieren" + +[main_contribute] +other = "Contribute" + +[main_edit_this_page] +other = "Diese Seite bearbeiten" + +[main_page_history] +other ="Seitenverlauf" + +[main_page_last_modified_on] +other = "Letzte Änderung am" + +[main_by] +other = "durch" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "Dokumention durchsuchen" + +[docs_label_contributors] +other = "Mitwirkende" + +[docs_label_users] +other = "Users" + +[docs_label_i_am] +other = "ICH BIN..." + + +# layouts > blog > pager + +[layouts_blog_pager_prev] +other = "<< Zurück" + +[layouts_blog_pager_next] +other = "Vor >>" + +# layouts > blog > list + +[layouts_case_studies_list_tell] +other = "Erzählen Sie Ihre Geschichte" + +# layouts > docs > glossary + +[layouts_docs_glossary_description] +other = "Dieses Glossar soll eine umfassende, standardisierte Liste der Kubernetes-Terminologie darstellen. Es enthält technische Begriffe, die für K8 spezifisch sind, sowie allgemeinere Begriffe, die einen nützlichen Kontext bieten." + +[layouts_docs_glossary_filter] +other = "Begriffe nach ihren Tags filtern" + +[layouts_docs_glossary_select_all] +other = "Alle auswählen" + +[layouts_docs_glossary_deselect_all] +other = "Alle abwählen" + +[layouts_docs_glossary_aka] +other = "Auch bekannt als" + +[layouts_docs_glossary_click_details_before] +other = "Klicken Sie auf die" + +[layouts_docs_glossary_click_details_after] +other = "Indikatoren unten, um eine längere Erklärung für einen bestimmten Begriff zu erhalten." + +# layouts > docs > search + +[layouts_docs_search_fetching] +other = "Ergebnisse werden abgerufen..." + +# layouts > partial > feedback + +[layouts_docs_partials_feedback_thanks] +other = "Danke für die Rückmeldung. Wenn Sie eine spezifische, beantwortbare Frage zur Verwendung von Kubernetes haben, stellen Sie diese unter " + +[layouts_docs_partials_feedback_issue] +other = "Öffnen Sie ein Problem im GitHub-Repo, wenn Sie möchten " + +[layouts_docs_partials_feedback_problem] +other = "Ein Problem melden" + +[layouts_docs_partials_feedback_or] +other = "oder" + +[layouts_docs_partials_feedback_improvement] +other = "Eine Verbesserung vorschlagen" + + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Forum" +[community_events_calendar] +other = "Veranstaltungskalender" + +# UI elements +[ui_search_placeholder] +other = "Suchen" + +[input_placeholder_email_address] +other = "E-Mail-Addresse" \ No newline at end of file diff --git a/data/i18n/en/OWNERS b/data/i18n/en/OWNERS new file mode 100644 index 0000000000..39cf7550c6 --- /dev/null +++ b/data/i18n/en/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Upstream (English) localized strings. +# 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/data/i18n/en/en.toml b/data/i18n/en/en.toml new file mode 100644 index 0000000000..3eebea4ebb --- /dev/null +++ b/data/i18n/en/en.toml @@ -0,0 +1,238 @@ +# i18n strings for the English (main) site. +# NOTE: Please keep the entries in alphabetical order when editing +[caution] +other = "Caution:" + +[cleanup_heading] +other = "Cleaning up" + +[community_events_calendar] +other = "Events Calendar" + +[community_forum_name] +other = "Forum" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_title] +other = "You are viewing documentation for Kubernetes version:" + +[deprecation_warning] +other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " + +[deprecation_file_warning] +other = "Deprecated" + +[docs_label_browse] +other = "Browse Docs" + +[docs_label_contributors] +other = "Contributors" + +[docs_label_i_am] +other = "I AM..." + +[docs_label_users] +other = "Users" + +[docs_version_current] +other = "(this documentation)" + +[docs_version_latest_heading] +other = "Latest version" + +[docs_version_other_heading] +other = "Older versions" + +[end_of_life] +other = "End of Life:" + +[error_404_were_you_looking_for] +other = "Were you looking for:" + +[examples_heading] +other = "Examples" + +[feedback_heading] +other = "Feedback" + +[feedback_no] +other = "No" + +[feedback_question] +other = "Was this page helpful?" + +[feedback_yes] +other = "Yes" + +[inline_list_separator] +other = "," + +[input_placeholder_email_address] +other = "email address" + +[latest_release] +other = "Latest Release:" + +[latest_version] +other = "latest version." + +[layouts_blog_pager_prev] +other = "<< Prev" + +[layouts_blog_pager_next] +other = "Next >>" + +[layouts_case_studies_list_tell] +other = "Tell your story" + +[layouts_docs_glossary_aka] +other = "Also known as" + +[layouts_docs_glossary_description] +other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." + +[layouts_docs_glossary_deselect_all] +other = "Deselect all" + +[layouts_docs_glossary_click_details_after] +other = "indicators below to get a longer explanation for any particular term." + +[layouts_docs_glossary_click_details_before] +other = "Click on the" + +[layouts_docs_glossary_filter] +other = "Filter terms according to their tags" + +[layouts_docs_glossary_select_all] +other = "Select all" + +[layouts_docs_partials_feedback_improvement] +other = "suggest an improvement" + +[layouts_docs_partials_feedback_issue] +other = "Open an issue in the GitHub repo if you want to " + +[layouts_docs_partials_feedback_or] +other = "or" + +[layouts_docs_partials_feedback_problem] +other = "report a problem" + +[layouts_docs_partials_feedback_thanks] +other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" + +[layouts_docs_search_fetching] +other = "Fetching results..." + +[main_by] +other = "by" + +[main_cncf_project] +other = """We are a CNCF graduated project

""" + +[main_community_explore] +other = "Explore the community" + +[main_contribute] +other = "Contribute" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_github_invite] +other = "Interested in hacking on the core Kubernetes code base?" + +[main_github_view_on] +other = "View On GitHub" + +[main_kubernetes_features] +other = "Kubernetes Features" + +[main_kubeweekly_baseline] +other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." + +[main_kubernetes_past_link] +other = "View past newsletters" + +[main_kubeweekly_signup] +other = "Subscribe" + +[main_page_history] +other ="Page History" + +[main_page_last_modified_on] +other = "Page last modified on" + +[main_read_about] +other = "Read about" + +[main_read_more] +other = "Read more" + +[note] +other = "Note:" + +[objectives_heading] +other = "Objectives" + +[options_heading] +other = "Options" + +[post_create_issue] +other = "Create an issue" + +[prerequisites_heading] +other = "Before you begin" + +[previous_patches] +other = "Patch Releases:" + +[seealso_heading] +other = "See Also" + +[subscribe_button] +other = "Subscribe" + +[synopsis_heading] +other = "Synopsis" + +[thirdparty_message] +other = """This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects. This page follows CNCF website guidelines by listing projects alphabetically. To add a project to this list, read the content guide before submitting a change.""" + +[ui_search_placeholder] +other = "Search" + +[version_check_mustbe] +other = "Your Kubernetes server must be version " + +[version_check_mustbeorlater] +other = "Your Kubernetes server must be at or later than version " + +[version_check_tocheck] +other = "To check the version, enter " + +[version_menu] +other = "Versions" + +[warning] +other = "Warning:" + +[whatsnext_heading] +other = "What's next" \ No newline at end of file diff --git a/data/i18n/es/OWNERS b/data/i18n/es/OWNERS new file mode 100644 index 0000000000..40b7c2ebd5 --- /dev/null +++ b/data/i18n/es/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Spanish. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-es-reviews + +approvers: +- sig-docs-es-owners + +labels: +- language/es diff --git a/data/i18n/es/es.toml b/data/i18n/es/es.toml new file mode 100644 index 0000000000..c232ce7c27 --- /dev/null +++ b/data/i18n/es/es.toml @@ -0,0 +1,203 @@ +# i18n strings for the Spanish (main) site. + +[deprecation_warning] +other = " ya no mantiene activamente la documentación. La versión que está viendo actualmente es una instantánea estática. Para la documentación actualizada, visita la " + +[deprecation_file_warning] +other = "Descontinuado" + +[objectives_heading] +other = "Objetivos" + +[cleanup_heading] +other = "Limpieza de recursos" + +[prerequisites_heading] +other = "Antes de empezar" + +[subscribe_button] +other = "Suscribir" + +[whatsnext_heading] +other = "Siguientes pasos" + +[feedback_heading] +other = "Comentarios" + +[feedback_question] +other = "¿Esta página le ha sido de ayuda?" + +[feedback_yes] +other = "Sí" + +[feedback_no] +other = "No" + +[latest_version] +other = "última versión." + +[version_check_mustbe] +other = "Su versión de Kubernetes debe ser " + +[version_check_mustbeorlater] +other = "Su versión de Kubernetes debe ser como mínimo " + +[version_check_tocheck] +other = "Para comprobar la versión, introduzca " + +[caution] +other = "Precaución:" + +[note] +other = "Nota:" + +[warning] +other = "Advertencia:" + +[main_read_about] +other = "Leer" + +[main_read_more] +other = "Leer más" + +[main_github_invite] +other = "¿Está interesado en participar en el código base de Kubernetes?" + +[main_github_view_on] +other = "Ver en GitHub" + +[main_github_create_an_issue] +other = "Abrir un Issue" + +[main_community_explore] +other = "Explorar la comunidad" + +[main_kubernetes_features] +other = "Características de Kubernetes" + +[main_cncf_project] +other = """Somos un proyecto graduado de la CNCF

""" + +[main_kubeweekly_baseline] +other = "¿Interesado en recibir las últimas noticias de Kubernetes? Suscríbase a KubeWeekly." + +[main_kubernetes_past_link] +other = "Ver boletines anteriores" + +[main_kubeweekly_signup] +other = "Suscríbase" + +[main_contribute] +other = "Contribuir" + +[main_edit_this_page] +other = "Editar esta página" + +[main_page_history] +other ="Historial cambios" + +[main_page_last_modified_on] +other = "Página modificada por última vez el " + +[main_by] +other = "por" + +[main_documentation_license] +other = """Los autores de Kubernetes | Documentación distribuida bajo CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. Todos los derechos reservados. The Linux Foundation tiene marcas registradas y utiliza marcas registradas. Para obtener una lista de marcas registradas por The Linux Foundation, visita Trademark Usage page""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "Explorar la documentación" + +[docs_label_contributors] +other = "Contribuidores" + +[docs_label_users] +other = "Usuarios" + +[docs_label_i_am] +other = "Yo soy..." + +# layouts > blog > pager + +[layouts_blog_pager_prev] +other = "<< Anterior" + +[layouts_blog_pager_next] +other = "Siguiente >>" + +# layouts > blog > list + +[layouts_case_studies_list_tell] +other = "Cuéntanos tu historia" + +# layouts > docs > glossary + +[layouts_docs_glossary_description] +other = "Este glosario tiene la intención de ser una lista completa y estandarizada de la terminología de Kubernetes. Incluye términos técnicos que son específicos de k8s, así como términos más generales que proporcionan un contexto." + +[layouts_docs_glossary_filter] +other = "Filtrar terminos por categoría:" + +[layouts_docs_glossary_select_all] +other = "Seleccionar todos" + +[layouts_docs_glossary_deselect_all] +other = "Elmininar selección" + +[layouts_docs_glossary_aka] +other = "Also known as" + +[layouts_docs_glossary_click_details_before] +other = "Haz click en el símbolo" + +[layouts_docs_glossary_click_details_after] +other = "para obtener información detallada sobre el término." + +# layouts > docs > search + +[layouts_docs_search_fetching] +other = "Obteniendo resultados.." + +# layouts > partial > feedback + +[layouts_docs_partials_feedback_thanks] +other = "Muchas gracias por el feedback. Si tienes alguna pregunta específica sobre como usar Kubernetes, puedes preguntar en" + +[layouts_docs_partials_feedback_issue] +other = "Abre un issue en el repositorio de GitHub si quieres" + +[layouts_docs_partials_feedback_problem] +other = "reportar un problema" + +[layouts_docs_partials_feedback_or] +other = "o" + +[layouts_docs_partials_feedback_improvement] +other = "sugerir alguna mejora" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Foro" +[community_events_calendar] +other = "Calendario de eventos" +[community_youtube_name] +other = "YouTube" + +# UI elements +[ui_search_placeholder] +other = "Buscar" + +[input_placeholder_email_address] +other = "dirección de correo electrónico" \ No newline at end of file diff --git a/data/i18n/fr/OWNERS b/data/i18n/fr/OWNERS new file mode 100644 index 0000000000..baeda53bd4 --- /dev/null +++ b/data/i18n/fr/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for French. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-fr-reviews + +approvers: +- sig-docs-fr-owners + +labels: +- language/fr diff --git a/data/i18n/fr/fr.toml b/data/i18n/fr/fr.toml new file mode 100644 index 0000000000..4cfc419cb7 --- /dev/null +++ b/data/i18n/fr/fr.toml @@ -0,0 +1,143 @@ +# i18n strings for the French (main) site. + +[deprecation_warning] +other = " documentation non maintenue. Vous consultez une version statique. Pour une documentation à jour, veuillez consulter: " + +[objectives_heading] +other = "Objectifs" + +[cleanup_heading] +other = "Cleanup" + +[prerequisites_heading] +other = "Pré-requis" + +[subscribe_button] +other = "Souscrire" + +[whatsnext_heading] +other = "A suivre" + +[feedback_heading] +other = "Feedback" + +[feedback_question] +other = "Cette page est elle utile ?" + +[feedback_yes] +other = "Oui" + +[feedback_no] +other = "Non" + +[latest_version] +other = "dernière version." + +[version_check_mustbe] +other = "Votre serveur Kubernetes doit être version " + +[version_check_mustbeorlater] +other = "Votre serveur Kubernetes doit être au moins à la version " + +[version_check_tocheck] +other = "Pour consulter la version, entrez " + +[caution] +other = "Avertissement:" + +[note] +other = "Note:" + +[warning] +other = "Attention:" + +[main_read_about] +other = "A propos" + +[main_read_more] +other = "Autres ressources" + +[main_github_invite] +other = "Souhaitez vous contribuer au code de Kubernetes ?" + +[main_github_view_on] +other = "Voir sur GitHub" + +[main_github_create_an_issue] +other = "Ouvrez un ticket" + +[main_community_explore] +other = "Explorez la communauté" + +[main_kubernetes_features] +other = "Fonctionnalités Kubernetes" + +[main_cncf_project] +other = """Nous sommes un projet CNCF diplômé

""" + +[main_kubeweekly_baseline] +other = "Intéressez pour recevoir les dernières informations sur Kubernetes ? Abonnez-vous à KubeWeekly." + +[main_kubernetes_past_link] +other = "Voir les newsletters précédentes" + +[main_kubeweekly_signup] +other = "S'abonner" + +[main_contribute] +other = "Contribuer" + +[main_edit_this_page] +other = "Editez cette page" + +[main_page_history] +other ="Historique" + +[main_page_last_modified_on] +other = "Dernière modification le" + +[main_by] +other = "de" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "Parcourir la documentation" + +[docs_label_contributors] +other = "Contributeurs" + +[docs_label_users] +other = "Utilisateurs" + +[docs_label_i_am] +other = "JE SUIS..." + +[examples_heading] +other = "Exemples" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Forum" +[community_events_calendar] +other = "Calendrier" + +# UI elements +[ui_search_placeholder] +other = "Recherche" + +[input_placeholder_email_address] +other = "adresse email" diff --git a/data/i18n/hi/OWNERS b/data/i18n/hi/OWNERS new file mode 100644 index 0000000000..4e43a2939e --- /dev/null +++ b/data/i18n/hi/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Hindi. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-hi-reviews + +approvers: +- sig-docs-hi-owners + +labels: +- language/hi diff --git a/data/i18n/hi/hi.toml b/data/i18n/hi/hi.toml new file mode 100644 index 0000000000..2e5d6ad331 --- /dev/null +++ b/data/i18n/hi/hi.toml @@ -0,0 +1,195 @@ +# i18n strings for the English (main) site. + +[deprecation_warning] +other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " + +[deprecation_file_warning] +other = "Deprecated" + +[objectives_heading] +other = "Objectives" + +[cleanup_heading] +other = "Cleaning up" + +[prerequisites_heading] +other = "Before you begin" + +[whatsnext_heading] +other = "What's next" + +[feedback_heading] +other = "Feedback" + +[feedback_question] +other = "Was this page helpful?" + +[feedback_yes] +other = "Yes" + +[feedback_no] +other = "No" + +[latest_version] +other = "latest version." + +[version_check_mustbe] +other = "Your Kubernetes server must be version " + +[version_check_mustbeorlater] +other = "Your Kubernetes server must be at or later than version " + +[version_check_tocheck] +other = "To check the version, enter " + +[caution] +other = "Caution:" + +[note] +other = "Note:" + +[warning] +other = "Warning:" + +[main_read_about] +other = "Read about" + +[main_read_more] +other = "Read more" + +[main_github_invite] +other = "Interested in hacking on the core Kubernetes code base?" + +[main_github_view_on] +other = "View On GitHub" + +[main_github_create_an_issue] +other = "Create an Issue" + +[main_community_explore] +other = "Explore the community" + +[main_kubernetes_features] +other = "Kubernetes Features" + +[main_cncf_project] +other = """We are a CNCF graduated project

""" + +[main_kubeweekly_baseline] +other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." + +[main_kubernetes_past_link] +other = "View past newsletters" + +[main_kubeweekly_signup] +other = "Subscribe" + +[main_contribute] +other = "Contribute" + +[main_edit_this_page] +other = "Edit This Page" + +[main_page_history] +other ="Page History" + +[main_page_last_modified_on] +other = "Page last modified on" + +[main_by] +other = "by" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our 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..." + +# layouts > blog > pager + +[layouts_blog_pager_prev] +other = "<< Prev" + +[layouts_blog_pager_next] +other = "Next >>" + +# layouts > blog > list + +[layouts_case_studies_list_tell] +other = "Tell your story" + +# layouts > docs > glossary + +[layouts_docs_glossary_description] +other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to K8s, as well as more general terms that provide useful context." + +[layouts_docs_glossary_filter] +other = "Filter terms according to their tags" + +[layouts_docs_glossary_select_all] +other = "Select all" + +[layouts_docs_glossary_deselect_all] +other = "Deselect all" + +[layouts_docs_glossary_aka] +other = "Also known as" + +[layouts_docs_glossary_click_details_before] +other = "Click on the" + +[layouts_docs_glossary_click_details_after] +other = "indicators below to get a longer explanation for any particular term." + +# layouts > docs > search + +[layouts_docs_search_fetching] +other = "Fetching results.." + +# layouts > partial > feedback + +[layouts_docs_partials_feedback_thanks] +other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" + +[layouts_docs_partials_feedback_issue] +other = "Open an issue in the GitHub repo if you want to " + +[layouts_docs_partials_feedback_problem] +other = "report a problem" + +[layouts_docs_partials_feedback_or] +other = "or" + +[layouts_docs_partials_feedback_improvement] +other = "suggest an improvement" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Forum" +[community_events_calendar] +other = "Events Calendar" + +# UI elements +[ui_search_placeholder] +other = "Search" diff --git a/data/i18n/id/OWNERS b/data/i18n/id/OWNERS new file mode 100644 index 0000000000..98a4ead779 --- /dev/null +++ b/data/i18n/id/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Bahasa. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-id-reviews + +approvers: +- sig-docs-id-owners + +labels: +- language/id diff --git a/data/i18n/id/id.toml b/data/i18n/id/id.toml new file mode 100644 index 0000000000..101ea071ff --- /dev/null +++ b/data/i18n/id/id.toml @@ -0,0 +1,227 @@ +# i18n strings for the Indonesian version of the site (https://kubernetes.io/id/) +# NOTE: Please keep the entries in alphabetical order when editing + +[caution] +other = "Perhatian:" + +[cleanup_heading] +other = "Bersihkan" + +[community_events_calendar] +other = "Kalender Acara" + +[community_forum_name] +other = "Forum" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_title] +other = "Kamu sedang menampilkan dokumentasi untuk Kubernetes versi:" + +[deprecation_warning] +other = " dokumentasi sudah tidak dirawat lagi. Versi yang kamu lihat ini hanyalah snapshot statis. Untuk dokumentasi terkini, lihat " + +[deprecation_file_warning] +other = "Sudah usang" + +[docs_label_browse] +other = "Telusuri Dokumentasi" + +[docs_label_contributors] +other = "Kontributor" + +[docs_label_i_am] +other = "AKU..." + +[docs_label_users] +other = "Pengguna" + +[docs_version_current] +other = "(dokumentasi ini)" + +[docs_version_latest_heading] +other = "Versi terbaru" + +[docs_version_other_heading] +other = "Versi lama" + +[error_404_were_you_looking_for] +other = "Apakah kamu sedang mencari:" + +[examples_heading] +other = "Contoh" + +[feedback_heading] +other = "Masukan" + +[feedback_no] +other = "Tidak" + +[feedback_question] +other = "Apakah halaman ini membantu?" + +[feedback_yes] +other = "Ya" + +[input_placeholder_email_address] +other = "alamat email" + +[latest_version] +other = "versi terbaru." + +[layouts_blog_pager_prev] +other = "<< Sebelumnya" + +[layouts_blog_pager_next] +other = "Selanjutnya >>" + +[layouts_case_studies_list_tell] +other = "Ceritakan kisahmu" + +[layouts_docs_glossary_aka] +other = "Dikenal juga sebagai" + +[layouts_docs_glossary_description] +other = "Glosarium ini dimaksudkan sebagai daftar terminologi Kubernetes yang komprehensif dan terstandardisasi. Glosarium ini mencakup istilah-istilah teknis yang spesifik digunakan di Kubernetes, serta beberapa istilah umum untuk membantu memberikan konteks." + +[layouts_docs_glossary_deselect_all] +other = "Hapus semua pilihan" + +[layouts_docs_glossary_click_details_after] +other = "indikator di bawah ini untuk mendapatkan penjelasan yang lebih lengkap untuk istilah tertentu." + +[layouts_docs_glossary_click_details_before] +other = "Klik pada" + +[layouts_docs_glossary_filter] +other = "Filter istilah sesuai dengan penandanya" + +[layouts_docs_glossary_select_all] +other = "Pilih semua" + +[layouts_docs_partials_feedback_improvement] +other = "beri saran perbaikan" + +[layouts_docs_partials_feedback_issue] +other = "Buat isu di repositori GitHub jika kamu ingin " + +[layouts_docs_partials_feedback_or] +other = "atau" + +[layouts_docs_partials_feedback_problem] +other = "laporkan problem" + +[layouts_docs_partials_feedback_thanks] +other = "Terima kasih atas masukannya. Jika kamu mempunyai pertanyaan yang spesifik terkait bagaimana menggunakan Kubernetes, tanyakanlah di " + +[layouts_docs_search_fetching] +other = "Mengambil hasil..." + +[main_by] +other = "oleh" + +[main_cncf_project] +other = """Kami merupakan proyek yang lulus dari CNCF

""" + +[main_community_explore] +other = "Jelajahi komunitas" + +[main_contribute] +other = "Bantu" + +[main_copyright_notice] +other = """Linux Foundation ®. Hak cipta dilindungi. Linux Foundation telah mendaftarkan merek dagang dan pengunaannya. Perinciannya bisa dilihat pada halaman penggunaan merek dagang""" + +[main_documentation_license] +other = """Para Pencipta Kubernetes | Dokumentasi didistribusikan di bawah CC BY 4.0""" + +[main_github_invite] +other = "Tertarik untuk mengulik kode dari Kubernetes?" + +[main_github_view_on] +other = "Lihat di GitHub" + +[main_kubernetes_features] +other = "Fitur Kubernetes" + +[main_kubeweekly_baseline] +other = "Tertarik untuk mendapatkan info terbaru tentang Kubernetes? Daftarkan dirimu ke KubeWeekly." + +[main_kubernetes_past_link] +other = "Lihat buletin edisi sebelumnya" + +[main_kubeweekly_signup] +other = "Langganan" + +[main_page_history] +other ="Riwayat laman" + +[main_page_last_modified_on] +other = "Halaman diubah terakhir kali pada" + +[main_read_about] +other = "Baca tentang" + +[main_read_more] +other = "Baca lebih lanjut" + +[note] +other = "Catatan:" + +[objectives_heading] +other = "Tujuan" + +[options_heading] +other = "Opsi" + +[post_create_issue] +other = "Buat isu" + +[prerequisites_heading] +other = "Sebelum kamu memulai" + +[seealso_heading] +other = "Lihat juga" + +[subscribe_button] +other = "Langganan" + +[synopsis_heading] +other = "Sinopsis" + +[thirdparty_message] +other = """Bagian ini tertaut ke proyek-proyek pihak ketiga yang menyediakan fungsionalitas yang dibutuhkan oleh Kubernetes. Pencipta proyek Kubernetes tidak bertanggung jawab atas proyek-proyek tersebut. Laman ini mengikuti pedoman website CNCF dengan membuat daftar proyek menurut abjad. Untuk menambakan proyek ke dalam daftar ini, bacalah panduan sebelum mengirimkan perubahan.""" + +[ui_search_placeholder] +other = "Cari" + +[version_check_mustbe] +other = "Kubernetes servermu harus dalam versi " + +[version_check_mustbeorlater] +other = "Kubernetes servermu harus dalam versi yang sama atau lebih baru dari " + +[version_check_tocheck] +other = "Untuk melihat versi, tekan " + +[version_menu] +other = "Versi" + +[warning] +other = "Peringatan:" + +[whatsnext_heading] +other = "Selanjutnya" diff --git a/data/i18n/it/OWNERS b/data/i18n/it/OWNERS new file mode 100644 index 0000000000..e2a59b255f --- /dev/null +++ b/data/i18n/it/OWNERS @@ -0,0 +1,11 @@ +# Localized strings for Italian. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-it-reviews + +approvers: +- sig-docs-it-owners + +labels: +- language/it \ No newline at end of file diff --git a/data/i18n/it/it.toml b/data/i18n/it/it.toml new file mode 100644 index 0000000000..7c0970dfaa --- /dev/null +++ b/data/i18n/it/it.toml @@ -0,0 +1,197 @@ +# i18n strings for the Italian site. +# NOTE: Please keep the entries in alphabetical order when editing + +[caution] +other = "Attenzione: " + +[cleanup_heading] +other = "In pulizia" + +[community_events_calendar] +other = "Calendario Eventi" + +[community_forum_name] +other = "Forum" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_warning] +other = " documentazione non è più manutenuta. La versione che stai visualizzando in questo momento è archiviata. Per una versione aggiornata, guarda " + +[deprecation_file_warning] +other = "Deprecata" + +[docs_label_browse] +other = "Sfoglia documenti" + +[docs_label_contributors] +other = "Contributors" + +[docs_label_i_am] +other = "Io Sono..." + +[docs_label_users] +other = "Utenti" + +[feedback_heading] +other = "Feedback" + +[feedback_no] +other = "No" + +[feedback_question] +other = "Questa pagina è stata di aiuto?" + +[feedback_yes] +other = "Sì" + +[input_placeholder_email_address] +other = "indirizzo email" + +[latest_version] +other = "ultima versione." + +[layouts_blog_pager_prev] +other = "<< Precedente" + +[layouts_blog_pager_next] +other = "Succesiva >>" + +[layouts_case_studies_list_tell] +other = "Racconta il tuo use case" + +[layouts_docs_glossary_aka] +other = "Anche noto come" + +[layouts_docs_glossary_description] +other = "Questo glossario vuole essere un aiuto per standardizzare la terminologia usata per Kubernetes. Include termini tecnici che sono specifici di Kubernetes, così come termini più generali che sono utili per dare un contesto." + +[layouts_docs_glossary_deselect_all] +other = "Deseleziona tutto" + +[layouts_docs_glossary_click_details_after] +other = "per il significato di questo termine." + +[layouts_docs_glossary_click_details_before] +other = "Fare click sull'icona" + +[layouts_docs_glossary_filter] +other = "Filtra i termini sulla base delle loro etichette" + +[layouts_docs_glossary_select_all] +other = "Seleziona tutto" + +[layouts_docs_partials_feedback_improvement] +other = "suggerire un miglioramento" + +[layouts_docs_partials_feedback_issue] +other = "Apri un issue sul repository GitHub se vuoi " + +[layouts_docs_partials_feedback_or] +other = "o" + +[layouts_docs_partials_feedback_problem] +other = "riportare un problema" + +[layouts_docs_partials_feedback_thanks] +other = "Grazie per il feedback. Se hai una domanda specifica su Kubernetes, chiedi su" + +[layouts_docs_search_fetching] +other = "Caricando i risultati..." + +[main_by] +other = "di" + +[main_cncf_project] +other = """Kubernetes è un progetto CNCF

""" + +[main_community_explore] +other = "Explora la community" + +[main_contribute] +other = "Contribuire" + +[main_copyright_notice] +other = """The Linux Foundation ®. Tutti i diritti riservati. The Linux Foundation ha marchi registrati e utilizza marchi commerciali. Per un elenco dei marchi di Linux Foundation, consulta la pagina sull'utilizzo dei marchi""" + +[main_documentation_license] +other = """Gli autori di Kubernetes | Documentazione distribuita sotto CC BY 4.0""" + +[main_edit_this_page] +other = "Modifica questa pagina" + +[main_github_create_an_issue] +other = "Crea un issue" + +[main_github_invite] +other = "Sei interessato a contribuire a Kubernetes?" + +[main_github_view_on] +other = "Visualizza su GitHub" + +[main_kubernetes_features] +other = "Caratteristiche di Kubernetes" + +[main_kubeweekly_baseline] +other = "Sei interessato a ricevere le ultime notizie su Kubernetes? Registrati alla newsletter KubeWeekly." + +[main_kubernetes_past_link] +other = "Vedi le precedenti mail della newsletter" + +[main_kubeweekly_signup] +other = "Iscriviti" + +[main_page_history] +other = "Storico della Pagina" + +[main_page_last_modified_on] +other = "Ultima modifica alla pagina" + +[main_read_about] +other = "Leggi" + +[main_read_more] +other = "Leggi di più" + +[note] +other = "Nota:" + +[objectives_heading] +other = "Obbiettivi" + +[prerequisites_heading] +other = "Prima di cominciare" + +[subscribe_button] +other = "Iscriviti" + +[ui_search_placeholder] +other = "Cerca" + +[version_check_mustbe] +other = "La tua installazione Kubernetes deve avere la versione " + +[version_check_mustbeorlater] +other = "La tua installazione Kubernetes deve avere almeno la versione " + +[version_check_tocheck] +other = "Per verificare la versione, esegui " + +[warning] +other = "Attenzione:" + +[whatsnext_heading] +other = "Voci correlate" diff --git a/data/i18n/ja/OWNERS b/data/i18n/ja/OWNERS new file mode 100644 index 0000000000..c8da00076d --- /dev/null +++ b/data/i18n/ja/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings 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/data/i18n/ja/ja.toml b/data/i18n/ja/ja.toml new file mode 100644 index 0000000000..a7a103f435 --- /dev/null +++ b/data/i18n/ja/ja.toml @@ -0,0 +1,203 @@ +# i18n strings for the English (main) site. +# NOTE: Please keep the entries in alphabetical order when editing + +[caution] +other = "注意:" + +[cleanup_heading] +other = "クリーンアップ" + +[community_events_calendar] +other = "イベントカレンダー" + +[community_forum_name] +other = "フォーラム" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_file_warning] +other = "廃止予定" + +[deprecation_title] +other = "現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン:" + +[deprecation_warning] +other = " のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: " + +[docs_label_browse] +other = "ドキュメントの参照" + +[docs_label_contributors] +other = "コントリビューター" + +[docs_label_i_am] +other = "私は..." + +[docs_label_users] +other = "ユーザー" + +[feedback_heading] +other = "フィードバック" + +[feedback_no] +other = "いいえ" + +[feedback_question] +other = "このページは役に立ちましたか?" + +[feedback_yes] +other = "はい" + +[input_placeholder_email_address] +other = "メールアドレス" + +[latest_version] +other = "最新バージョン" + +[layouts_blog_pager_prev] +other = "<< 前" + +[layouts_blog_pager_next] +other = "次 >>" + +[layouts_case_studies_list_tell] +other = "あなたの話を聞かせてください" + +[layouts_docs_glossary_aka] +other = "またの名を" + +[layouts_docs_glossary_description] +other = "この用語集は、Kubernetesの用語の包括的で標準化されたリストを対象としています。これには、Kubernetesに固有で有用なコンテキストを提供しつつも、より一般的な技術用語が含まれています。" + +[layouts_docs_glossary_deselect_all] +other = "すべての選択を解除" + +[layouts_docs_glossary_click_details_after] +other = "特定の用語の詳細な説明を取得するには、以下のインジケータを使用します。" + +[layouts_docs_glossary_click_details_before] +other = "Click on the" # TODO: Translate me + +[layouts_docs_glossary_filter] +other = "タグに従って用語をフィルタ" + +[layouts_docs_glossary_select_all] +other = "すべてを選択" + +[layouts_docs_partials_feedback_improvement] +other = "改善を提案" + +[layouts_docs_partials_feedback_issue] +other = "Open an issue in the GitHub repo if you want to " # TODO: Translate me + +[layouts_docs_partials_feedback_or] +other = "or" # TODO: Translate me + +[layouts_docs_partials_feedback_problem] +other = "問題を報告する" + +[layouts_docs_partials_feedback_thanks] +other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" # TODO: Translate me + +[layouts_docs_search_fetching] +other = "結果を取得しています..." + +[main_by] +other = "by" + +[main_cncf_project] +other = """私達はCNCF graduated プロジェクトです

""" + +[main_community_explore] +other = "コミュニティを探す" + +[main_contribute] +other = "コントリビュート" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_edit_this_page] +other = "ページ編集" + +[main_github_invite] +other = "Kubernetesのコードを編集することに興味がありますか?" + +[main_github_create_an_issue] +other = "Issue作成" + +[main_github_view_on] +other = "GitHubで参照する" + +[main_kubernetes_features] +other = "Kubernetesの機能" + +[main_kubeweekly_baseline] +other = "最新のKubernetesのニュースを受け取りたいですか? KubeWeeklyにサインアップしてください。" + +[main_kubernetes_past_link] +other = "過去のニュースレターを見る" + +[main_kubeweekly_signup] +other = "登録" + +[main_page_history] +other ="ページ履歴" + +[main_page_last_modified_on] +other = "ページの最終更新" + +[main_read_about] +other = "Read about" #other = "について参照する" TODO: Translate me + +[main_read_more] +other = "続きを読む" + +[note] +other = "備考:" + +[objectives_heading] +other = "目標" + +[prerequisites_heading] +other = "始める前に" + +[subscribe_button] +other = "購読する" + +[ui_search_placeholder] +other = "検索" + +[version_check_mustbe] +other = "作業するKubernetesサーバーは次のバージョンである必要があります: " + +[version_check_mustbeorlater] +other = "作業するKubernetesサーバーは次のバージョン以降のものである必要があります: " + +[version_check_tocheck] +other = "バージョンを確認するには次のコマンドを実行してください: " + +[version_menu] +other = "バージョン" + +[warning] +other = "警告:" + +[whatsnext_heading] +other = "次の項目" diff --git a/data/i18n/ko/OWNERS b/data/i18n/ko/OWNERS new file mode 100644 index 0000000000..8dfae5d770 --- /dev/null +++ b/data/i18n/ko/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings 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/data/i18n/ko/ko.toml b/data/i18n/ko/ko.toml new file mode 100644 index 0000000000..f79f689b88 --- /dev/null +++ b/data/i18n/ko/ko.toml @@ -0,0 +1,232 @@ +# i18n strings for the Korean translation. +# NOTE: Please keep the entries in alphabetical order when editing +[announcement_title] +other = "Black lives matter." + +[announcement_message] +other = "우리는 흑인 공동체를 지지합니다.
인종차별은 용납될 수 없습니다.
인종차별은 [쿠버네티스 프로젝트의 핵심 가치](https://git.k8s.io/community/values.md)에 상충되며 우리 공동체는 이를 용인하지 않습니다." + +[caution] +other = "주의:" + +[cleanup_heading] +other = "정리하기" + +[community_events_calendar] +other = "이벤트 캘린더" + +[community_forum_name] +other = "Forum" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_title] +other = "해당 문서의 쿠버네티스 버전:" + +[deprecation_warning] +other = " 문서는 더 이상 적극적으로 관리되지 않음. 현재 보고있는 문서는 정적 스냅샷임. 최신 문서를 위해서는, 다음을 참고. " + +[deprecation_file_warning] +other = "사용 중단됨(deprecated)" + +[docs_label_browse] +other = "문서 둘러보기" + +[docs_label_contributors] +other = "컨트리뷰터" + +[docs_label_i_am] +other = "나는..." + +[docs_label_users] +other = "사용자" + +[docs_version_current] +other = "(현재 문서)" + +[docs_version_latest_heading] +other = "최신 버전" + +[docs_version_other_heading] +other = "이전 버전" + +[error_404_were_you_looking_for] +other = "무엇과 관련된 정보를 찾으시나요?" + +[examples_heading] +other = "예시" + +[feedback_heading] +other = "피드백" + +[feedback_question] +other = "이 페이지가 도움이 되었나요?" + +[feedback_yes] +other = "네" + +[feedback_no] +other = "아니요" + +[input_placeholder_email_address] +other = "전자 우편 주소" + +[latest_version] +other = "최신 버전." + +[layouts_blog_pager_prev] +other = "<< 이전" + +[layouts_blog_pager_next] +other = "다음 >>" + +[layouts_case_studies_list_tell] +other = "당신의 이야기를 들려주세요." + +[layouts_docs_glossary_aka] +other = "별칭" + +[layouts_docs_glossary_description] +other = "이 용어집은 쿠버네티스 용어의 종합적이고 표준화된 리스트를 제공한다. 용어집은 K8s 고유의 기술 용어 뿐만 아니라, 맥락을 이해하는데 유용한 더 일반적인 용어도 포함한다. " + +[layouts_docs_glossary_deselect_all] +other = "모두 선택 해제" + +[layouts_docs_glossary_click_details_after] +other = "표시를 클릭하면 각 용어에 대한 더 자세한 설명을 볼 수 있다." + +[layouts_docs_glossary_click_details_before] +other = "다음" + +[layouts_docs_glossary_filter] +other = "태그에 따라 용어 필터링" + +[layouts_docs_glossary_select_all] +other = "모두 선택" + +[layouts_docs_partials_feedback_improvement] +other = "개선 제안이 가능합니다." + +[layouts_docs_partials_feedback_issue] +other = "원한다면 GitHub 리포지터리에 이슈를 열어서" + +[layouts_docs_partials_feedback_or] +other = "또는" + +[layouts_docs_partials_feedback_problem] +other = "문제 리포트" + +[layouts_docs_partials_feedback_thanks] +other = "피드백 감사합니다. 쿠버네티스 사용 방법에 대해서 구체적이고 답변 가능한 질문이 있다면, 다음 링크에서 질문하십시오." + +[layouts_docs_search_fetching] +other = "결과를 가져오는 중.." + +[main_by] +other = ", 다음 변경에 의해서:" + +[main_cncf_project] +other = """쿠버네티스는 CNCF graduated 프로젝트입니다.

""" + +[main_community_explore] +other = "커뮤니티 둘러보기" + +[main_contribute] +other = "기여하기" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_github_invite] +other = "쿠버네티스 핵심 코드 베이스를 살펴보는데 관심이 있으십니까?" + +[main_github_view_on] +other = "GitHub에서 보기" + +[main_kubernetes_features] +other = "쿠버네티스 기능" + +[main_kubeweekly_baseline] +other = "최신 쿠버네티스 뉴스 수신에 관심이 있으십니까? KubeWeekly를 신청하세요." + +[main_kubernetes_past_link] +other = "과거 뉴스레터 보기" + +[main_kubeweekly_signup] +other = "구독하기" + +[main_page_history] +other ="페이지 변경 이력" + +[main_page_last_modified_on] +other = "최종 수정일시" + +[main_read_about] +other = "읽어 보기" + +[main_read_more] +other = "더 읽기" + +[note] +other = "참고:" + +[objectives_heading] +other = "목적" + +[options_heading] +other = "옵션" + +[post_create_issue] +other = "이슈 생성" + +[prerequisites_heading] +other = "시작하기 전에" + +[seealso_heading] +other = "더 보기" + +[subscribe_button] +other = "구독" + +[synopsis_heading] +other = "시놉시스" + +[thirdparty_message] +other = """이 섹션은 쿠버네티스에 필요한 기능을 제공하는 써드파티 프로젝트와 관련이 있다. 쿠버네티스 프로젝트 작성자는 써드파티 프로젝트에 책임이 없다. 이 페이지는 CNCF 웹사이트 가이드라인에 따라 프로젝트를 알파벳 순으로 나열한다. 이 목록에 프로젝트를 추가하려면 변경사항을 제출하기 전에 콘텐츠 가이드를 읽어본다.""" + +[ui_search_placeholder] +other = "검색하기" + +[version_check_mustbe] +other = "쿠버네티스 서버의 버전은 다음과 같아야 함. 버전: " + +[version_check_mustbeorlater] +other = "쿠버네티스 서버의 버전은 다음과 같거나 더 높아야 함. 버전: " + +[version_check_tocheck] +other = "버전 확인을 위해서, 다음 커맨드를 실행 " + +[version_menu] +other = "버전" + +[warning] +other = "경고:" + +[whatsnext_heading] +other = "다음 내용" diff --git a/data/i18n/nl/nl.toml b/data/i18n/nl/nl.toml new file mode 100644 index 0000000000..a0aa6faee4 --- /dev/null +++ b/data/i18n/nl/nl.toml @@ -0,0 +1,197 @@ +# i18n strings for the Dutch (main) site. + +[deprecation_warning] +other = " documentatie wordt niet langer actief onderhouden. De versie die u momenteel bekijkt is een statische momentopname. Zie voor bijgewerkte documentatie " + +[deprecation_file_warning] +other = "Verouderd" + +[objectives_heading] +other = "Doelen" + +[cleanup_heading] +other = "Opschonen" + +[prerequisites_heading] +other = "Voordat je begint" + +[whatsnext_heading] +other = "Wat nu volgt" + +[feedback_heading] +other = "Feedback" + +[feedback_question] +other = "Was deze pagina nuttig?" + +[feedback_yes] +other = "Ja" + +[feedback_no] +other = "Nee" + +[latest_version] +other = "laatste versie." + +[version_check_mustbe] +other = "Je Kubernetes server moet op de volgende versie zitten " + +[version_check_mustbeorlater] +other = "Je Kubernetes server moet op de volgende of latere versie zitten " + +[version_check_tocheck] +other = "Voer het volgende in om de versie te controleren " + +[caution] +other = "Voorzichtig:" + +[note] +other = "Opmerking:" + +[warning] +other = "Opletten:" + +[main_read_about] +other = "Lees over" + +[main_read_more] +other = "Lees meer" + +[main_github_invite] +other = "Geïnteresseerd om aan de core Kubernetes code base te werken?" + +[main_github_view_on] +other = "Bekijk op GitHub" + +[main_github_create_an_issue] +other = "Maak een Issue" + +[main_community_explore] +other = "Verken de community" + +[main_kubernetes_features] +other = "Kubernetes functies" + +[main_cncf_project] +other = """We zijn een CNCF project

""" + +[main_kubeweekly_baseline] +other = "Wil je het laatste Kubernates nieuws ontvangen? Abonneer je op KubeWeekly." + +[main_kubernetes_past_link] +other = "Eerdere nieuwsbrieven bekijken" + +[main_kubeweekly_signup] +other = "Abonneren" + +[main_contribute] +other = "Bijdragen" + +[main_edit_this_page] +other = "Bewerk deze pagina" + +[main_page_history] +other ="Pagina geschiedenis" + +[main_page_last_modified_on] +other = "Pagina laatst gewijzigd op" + +[main_by] +other = "door" + +[main_documentation_license] +other = """De Kubernetes auteurs | Documentatie verspreid onder CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. Alle rechten voorbehouden. De Linux Foundation heeft handelsmerken geregistreerd en handelsmerken. gebruikt Voor een lijst met handelsmerken van The Linux Foundation raadpleegt u onzeHandelsmerkgebruikspagina""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "Bladeren door documenten" + +[docs_label_contributors] +other = "Bijdragers" + +[docs_label_users] +other = "Gebruikers" + +[docs_label_i_am] +other = "IK BEN..." + +# layouts > blog > pager + +[layouts_blog_pager_prev] +other = "<< Vorige" + +[layouts_blog_pager_next] +other = "Volgende >>" + +# layouts > blog > list + +[layouts_case_studies_list_tell] +other = "Vertel jouw verhaal" + +# layouts > docs > glossary + +[layouts_docs_glossary_description] +other = "Deze verklarende woordenlijst is bedoeld als een uitgebreide, gestandaardiseerde lijst van Kubernetes-terminologie. Het bevat technische termen die specifiek zijn voor K8s, evenals meer algemene termen die een bruikbare context bieden." + +[layouts_docs_glossary_filter] +other = "Filter termen op basis van hun tags" + +[layouts_docs_glossary_select_all] +other = "Alles selecteren" + +[layouts_docs_glossary_deselect_all] +other = "Alles deselecteren" + +[layouts_docs_glossary_aka] +other = "Ook bekend als" + +[layouts_docs_glossary_click_details_before] +other = "Klik op de" + +[layouts_docs_glossary_click_details_after] +other = "onderstaande indicatoren om een ​​langere verklaring voor een bepaalde term te krijgen." + +# layouts > docs > search + +[layouts_docs_search_fetching] +other = "Resultaten ophalen.." + +# layouts > partial > feedback + +[layouts_docs_partials_feedback_thanks] +other = "Bedankt voor de feedback. Als je een specifieke vraag hebt, die beantwoord moet worden, over het gebruik van Kubernetes, vraag het dan op" + +[layouts_docs_partials_feedback_issue] +other = "Open een probleem in de GitHub-repo " + +[layouts_docs_partials_feedback_problem] +other = "meld een probleem" + +[layouts_docs_partials_feedback_or] +other = "of" + +[layouts_docs_partials_feedback_improvement] +other = "doe een suggestie voor een verbetering" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Forum" +[community_events_calendar] +other = "Evenementenkalender" +[community_youtube_name] +other = "YouTube" + +# UI elements +[ui_search_placeholder] +other = "Zoeken" diff --git a/data/i18n/no/no.toml b/data/i18n/no/no.toml new file mode 100644 index 0000000000..ff786d7d35 --- /dev/null +++ b/data/i18n/no/no.toml @@ -0,0 +1,68 @@ +# i18n strings for the Norwegian translation. + +[main_read_about] +other = "Les om" + +[main_read_more] +other = "Les mer" + +[main_github_invite] +other = "Interessert kode i Kubernetes?" + +[main_github_view_on] +other = "Åpne på GitHub" + +[main_github_create_an_issue] +other = "Opprett en issue" + +[main_community_explore] +other = "Utforsk folkene bak Kubernetes" + +[main_kubernetes_features] +other = "Egenskaper i Kubernetes" + +[main_cncf_project] +other = """Vi er et CNCF-prosjekt

""" + +[main_contribute] +other = "Bidra" + +[main_edit_this_page] +other = "Endre denne siden" + +[main_page_history] +other ="Side-historikk" + +[main_page_last_modified_on] +other = "Side sist endret" + +[main_by] +other = "av" + +[main_documentation_license] +other = """Kubernetes-forfatterene | Dokumentasjonen er utgitt med CC BY 4.0-lisens""" + +[main_copyright_notice] +other = """The Linux Foundation ®. Alle retter er reservert. The Linux Foundation har registrerte varemerker. For en oversikt, se Bruk av varemerker""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "All dokumentasjon" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Forum" +[community_events_calendar] +other = "Kalender" + +# UI elements +[ui_search_placeholder] +other = "Søk" \ No newline at end of file diff --git a/data/i18n/pl/OWNERS b/data/i18n/pl/OWNERS new file mode 100644 index 0000000000..020de30383 --- /dev/null +++ b/data/i18n/pl/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Polish. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-pl-reviews + +approvers: +- sig-docs-pl-owners + +labels: +- language/pl diff --git a/data/i18n/pl/pl.toml b/data/i18n/pl/pl.toml new file mode 100644 index 0000000000..9621301a49 --- /dev/null +++ b/data/i18n/pl/pl.toml @@ -0,0 +1,197 @@ +# i18n strings for the Polish site. +# NOTE: Please keep the entries in alphabetical order when editing + +[caution] +other = "Ostrzeżenie:" + +[cleanup_heading] +other = "Sprzątamy po sobie" + +[community_events_calendar] +other = "Kalendarz wydarzeń" + +[community_forum_name] +other = "Forum" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_warning] +other = " dokumentacja nie jest już aktualizowana. Wyświetlona jest wersja archiwalna. Po aktualną dokumentację zajrzyj na" + +[deprecation_file_warning] +other = "Przestarzały" + +[docs_label_browse] +other = "Przeglądaj dokumentację" + +[docs_label_contributors] +other = "Współautorzy" + +[docs_label_i_am] +other = "Jestem..." + +[docs_label_users] +other = "Użytkownicy" + +[feedback_heading] +other = "Twoja opinia" + +[feedback_no] +other = "Nie" + +[feedback_question] +other = "Czy ta strona była przydatna?" + +[feedback_yes] +other = "Tak" + +[input_placeholder_email_address] +other = "adres e-mail" + +[latest_version] +other = "to najnowsza wersja." + +[layouts_blog_pager_prev] +other = "<< Poprzedni" + +[layouts_blog_pager_next] +other = "Następny >>" + +[layouts_case_studies_list_tell] +other = "Opowiedz swoją historię" + +[layouts_docs_glossary_aka] +other = "Znany też jako" + +[layouts_docs_glossary_description] +other = "Celem tego słownika jest przedstawienie wszechstronnej, ujednoliconej listy terminologii związanej z projektem Kubernetes. Słownik zawiera terminy specyficzne dla Kubernetesa, a także pojęcia bardziej ogólne, umożliwiające lepsze zrozumienie kontekstu." + +[layouts_docs_glossary_deselect_all] +other = "Odznacz wszystko" + +[layouts_docs_glossary_click_details_after] +other = "po dokładniejsze wytłumaczenie." + +[layouts_docs_glossary_click_details_before] +other = "Kliknij w" + +[layouts_docs_glossary_filter] +other = "Znajdź pojęcia według etykiet" + +[layouts_docs_glossary_select_all] +other = "Zaznacz wszystko" + +[layouts_docs_partials_feedback_improvement] +other = "zaproponować poprawkę" + +[layouts_docs_partials_feedback_issue] +other = "Otwórz zgłoszenie w repozytorium GitHub, jeśli chcesz " + +[layouts_docs_partials_feedback_or] +other = "lub" + +[layouts_docs_partials_feedback_problem] +other = "zgłosić problem" + +[layouts_docs_partials_feedback_thanks] +other = "Dziękujemy za informację zwrotną. Jeśli masz konkretne pytanie dotyczące użycia Kubernetesa, odwiedź" + +[layouts_docs_search_fetching] +other = "Pobieram wyniki.." + +[main_by] +other = "przez" + +[main_cncf_project] +other = """Nasz projekt jest uznany przez CNCF za dojrzały

""" + +[main_community_explore] +other = "Poznaj społeczność" + +[main_contribute] +other = "Wnieś swój wkład" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_edit_this_page] +other = "Edytuj stronę" + +[main_github_create_an_issue] +other = "Zgłoś problem" + +[main_github_invite] +other = "Chcesz zacząć współtworzyć kod Kubernetesa?" + +[main_github_view_on] +other = "Zajrzyj na GitHub" + +[main_kubernetes_features] +other = "Funkcjonalności Kubernetesa" + +[main_kubeweekly_baseline] +other = "Zapisz się na KubeWeekly, jeśli jesteś zainteresowany najnowszymi wiadomościami o Kubernetesie." + +[main_kubernetes_past_link] +other = "Poprzednie newslettery" + +[main_kubeweekly_signup] +other = "Zapisz się" + +[main_page_history] +other ="Historia strony" + +[main_page_last_modified_on] +other = "Ostatnia modyfikacja strony" + +[main_read_about] +other = "Przeczytaj o" + +[main_read_more] +other = "Przeczytaj więcej" + +[note] +other = "Informacja:" + +[objectives_heading] +other = "Cele" + +[prerequisites_heading] +other = "Nim zaczniesz" + +[subscribe_button] +other = "Subskrybuj" + +[ui_search_placeholder] +other = "Szukaj" + +[version_check_mustbe] +other = "Twój serwer Kubernetes musi być w wersji " + +[version_check_mustbeorlater] +other = "Twój serwer Kubernetes musi być co najmniej w wersji " + +[version_check_tocheck] +other = "Aby sprawdzić wersję, wpisz " + +[warning] +other = "Uwaga:" + +[whatsnext_heading] +other = "Następne:" diff --git a/data/i18n/pt/OWNERS b/data/i18n/pt/OWNERS new file mode 100644 index 0000000000..6c71975765 --- /dev/null +++ b/data/i18n/pt/OWNERS @@ -0,0 +1,11 @@ +# Localized strings for Portuguese. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-pt-reviews + +approvers: +- sig-docs-pt-owners + +labels: +- language/pt diff --git a/data/i18n/pt/pt-br.toml b/data/i18n/pt/pt-br.toml new file mode 100644 index 0000000000..3f55a665b3 --- /dev/null +++ b/data/i18n/pt/pt-br.toml @@ -0,0 +1,240 @@ + # i18n strings for the Portuguese (main) site. +[caution] +other = "Cuidado:" + +[cleanup_heading] +other = "Limpando" + +[community_events_calendar] +other = "Calendário de Eventos" + +[community_forum_name] +other = "Fórum" + +[community_github_name] +other = "GitHub" + +# Community links + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[deprecation_file_warning] +other = "Descontinuado" + +[deprecation_title] +other = "Você está vendo a documentação do Kubernetes versão:" + +[deprecation_warning] +other = " a documentação não é mais mantida ativamente. A versão que você está visualizando no momento é uma captura instantânea estática. Para obter documentação atualizada, consulte " + +[docs_label_browse] +other = "Procurar documentos" + +[docs_label_contributors] +other = "Colaboradores" + +[docs_label_i_am] +other = "Eu sou..." + +[docs_label_users] +other = "Usuários" + +[docs_version_current] +other = "(esta documentação)" + +[docs_version_latest_heading] +other = "Versão mais recente" + +[docs_version_other_heading] +other = "Versões mais antigas" + +[error_404_were_you_looking_for] +other = "Talvez você estivesse procurando por:" + +[examples_heading] +other = "Exemplos" + +[feedback_heading] +other = "Comentários" + +[feedback_no] +other = "Não" + +[feedback_question] +other = "Esta página foi útil?" + +[feedback_yes] +other = "Sim" + +[input_placeholder_email_address] +other = "endereço de e-mail" + +[latest_version] +other = "última versão." + +[layouts_blog_pager_next] +other = "Próximo >>" + +[layouts_blog_pager_prev] +other = "<< Anterior" + +[layouts_case_studies_list_tell] +other = "Conte seu caso" + +[layouts_docs_glossary_aka] +other = "Também conhecido como" + +[layouts_docs_glossary_click_details_after] +other = "indicadores abaixo para uma maior explicação sobre um termo em particular." + +[layouts_docs_glossary_click_details_before] +other = "Clique nos" + +[layouts_docs_glossary_description] +other = "Este glossário pretende ser uma lista padronizada e abrangente da terminologia do Kubernetes. Inclui termos técnicos específicos dos K8s, além de termos mais gerais que fornecem um contexto útil." + +[layouts_docs_glossary_deselect_all] +other = "Desmarcar tudo" + +[layouts_docs_glossary_filter] +other = "Filtrar termos de acordo com suas tags" + +[layouts_docs_glossary_select_all] +other = "Selecionar tudo" + +[layouts_docs_partials_feedback_improvement] +other = "sugerir uma melhoria" + +[layouts_docs_partials_feedback_issue] +other = "Abra um bug no repositório do GitHub se você deseja " + +[layouts_docs_partials_feedback_or] +other = "ou" + +[layouts_docs_partials_feedback_problem] +other = "reportar um problema" + +[layouts_docs_partials_feedback_thanks] +other = "Obrigado pelo feedback. Se você tiver uma pergunta específica sobre como utilizar o Kubernetes, faça em" + +[layouts_docs_search_fetching] +other = "Buscando resultados.." + +# Main page localization + +[main_by] +other = "por" + +[main_cncf_project] +other = """Nós somos uma CNCF projeto graduado

""" + +[main_community_explore] +other = "Explore a comunidade" + +[main_contribute] +other = "Contribuir" + +[main_copyright_notice] +other = """A Fundação Linux ®. Todos os direitos reservados. A Linux Foundation tem marcas registradas e usa marcas registradas. Para uma lista de marcas registradas da The Linux Foundation, por favor, veja nossa Página de uso de marca registrada""" + +[main_documentation_license] +other = """Os autores do Kubernetes | Documentação Distribuída sob CC BY 4.0""" + +[main_edit_this_page] +other = "Edite essa página" + +[main_github_create_an_issue] +other = "Abra um bug" + +[main_github_invite] +other = "Interessado em mergulhar na base de código do Kubernetes?" + +[main_github_view_on] +other = "Veja no Github" + +[main_kubernetes_features] +other = "Recursos do Kubernetes" + +[main_kubernetes_past_link] +other = "Veja boletins passados" + +[main_kubeweekly_baseline] +other = "Interessado em receber as últimas novidades sobre Kubernetes? Inscreva-se no KubeWeekly." + +[main_kubeweekly_signup] +other = "Se inscrever" + +[main_page_history] +other ="História da página" + +[main_page_last_modified_on] +other = "Última modificação da página em" + +[main_read_about] +other = "Ler sobre" + +[main_read_more] +other = "Consulte Mais informação" + +# Miscellaneous + +[note] +other = "Nota:" + +[objectives_heading] +other = "Objetivos" + +[options_heading] +other = "Opções" + +[post_create_issue] +other = "Abra um bug" + +[prerequisites_heading] +other = "Antes de você começar" + +[subscribe_button] +other = "Se inscrever" + +[thirdparty_message] +other = """Esta seção tem links para projetos de terceiros que fornecem a funcionalidade exigida pelo Kubernetes. Os autores do projeto Kubernetes não são responsáveis por esses projetos. Esta página obedece as diretrizes de conteúdo do site CNCF, listando os itens em ordem alfabética. Para adicionar um projeto a esta lista, leia o guia de conteúdo antes de enviar sua alteração.""" + +[ui_search_placeholder] +other = "Procurar" + +[version_check_mustbeorlater] +other = "O seu servidor Kubernetes deve estar em ou depois da versão " + +[version_check_mustbe] +other = "Seu servidor Kubernetes deve ser versão" + +[version_check_tocheck] +other = "Para verificar a versão, digite " + +[version_menu] +other = "Versões" + +[warning] +other = "Aviso:" + +[whatsnext_heading] +other = "Qual é o próximo" + +[print_printable_section] +other = "Essa é a versão completa de impressão dessa seção" + +[print_click_to_print] +other = "Clique aqui para imprimir" + +[print_show_regular] +other = "Retornar à visualização normal" + +[print_entire_section] +other = "Imprimir toda essa seção" diff --git a/data/i18n/pt/pt.toml b/data/i18n/pt/pt.toml new file mode 100644 index 0000000000..808c82679d --- /dev/null +++ b/data/i18n/pt/pt.toml @@ -0,0 +1,225 @@ + # i18n strings for the Portuguese (main) site. +[caution] +other = "Cuidado:" + +[cleanup_heading] +other = "Limpando" + +[community_events_calendar] +other = "Calendário de Eventos" + +[community_forum_name] +other = "Fórum" + +[community_github_name] +other = "GitHub" + +# Community links + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[deprecation_file_warning] +other = "Descontinuado" + +[deprecation_title] +other = "Você está vendo a documentação do Kubernetes versão:" + +[deprecation_warning] +other = " a documentação não é mais mantida ativamente. A versão que você está visualizando no momento é uma captura instantânea estática. Para obter documentação atualizada, consulte " + +[docs_label_browse] +other = "Procurar documentos" + +[docs_label_contributors] +other = "Colaboradores" + +[docs_label_i_am] +other = "Eu sou..." + +[docs_label_users] +other = "Usuários" + +[docs_version_current] +other = "(esta documentação)" + +[docs_version_latest_heading] +other = "Versão mais recente" + +[docs_version_other_heading] +other = "Versões mais antigas" + +[error_404_were_you_looking_for] +other = "Talvez você estivesse procurando por:" + +[examples_heading] +other = "Exemplos" + +[feedback_heading] +other = "Comentários" + +[feedback_no] +other = "Não" + +[feedback_question] +other = "Esta página foi útil?" + +[feedback_yes] +other = "Sim" + +[input_placeholder_email_address] +other = "endereço de e-mail" + +[latest_version] +other = "última versão." + +[layouts_blog_pager_next] +other = "Próximo >>" + +[layouts_blog_pager_prev] +other = "<< Anterior" + +[layouts_case_studies_list_tell] +other = "Conte seu caso" + +[layouts_docs_glossary_aka] +other = "Também conhecido como" + +[layouts_docs_glossary_click_details_after] +other = "indicadores abaixo para uma maior explicação sobre um termo em particular." + +[layouts_docs_glossary_click_details_before] +other = "Clique nos" + +[layouts_docs_glossary_description] +other = "Este glossário pretende ser uma lista padronizada e abrangente da terminologia do Kubernetes. Inclui termos técnicos específicos dos K8s, além de termos mais gerais que fornecem um contexto útil." + +[layouts_docs_glossary_deselect_all] +other = "Desmarcar tudo" + +[layouts_docs_glossary_filter] +other = "Filtrar termos de acordo com suas tags" + +[layouts_docs_glossary_select_all] +other = "Selecionar tudo" + +[layouts_docs_partials_feedback_improvement] +other = "sugerir uma melhoria" + +[layouts_docs_partials_feedback_issue] +other = "Abra um bug no repositório do GitHub se você deseja " + +[layouts_docs_partials_feedback_or] +other = "ou" + +[layouts_docs_partials_feedback_problem] +other = "reportar um problema" + +[layouts_docs_partials_feedback_thanks] +other = "Obrigado pelo feedback. Se você tiver uma pergunta específica sobre como utilizar o Kubernetes, faça em" + +[layouts_docs_search_fetching] +other = "Buscando resultados.." + +# Main page localization + +[main_by] +other = "por" + +[main_cncf_project] +other = """Nós somos uma CNCF projeto graduado

""" + +[main_community_explore] +other = "Explore a comunidade" + +[main_contribute] +other = "Contribuir" + +[main_copyright_notice] +other = """A Fundação Linux ®. Todos os direitos reservados. A Linux Foundation tem marcas registradas e usa marcas registradas. Para uma lista de marcas registradas da The Linux Foundation, por favor, veja nossa Página de uso de marca registrada""" + +[main_documentation_license] +other = """Os autores do Kubernetes | Documentação Distribuída sob CC BY 4.0""" + +[main_edit_this_page] +other = "Edite essa página" + +[main_github_create_an_issue] +other = "Abra um bug" + +[main_github_invite] +other = "Interessado em mergulhar na base de código do Kubernetes?" + +[main_github_view_on] +other = "Veja no Github" + +[main_kubernetes_features] +other = "Recursos do Kubernetes" + +[main_kubernetes_past_link] +other = "Veja boletins passados" + +[main_kubeweekly_baseline] +other = "Interessado em receber as últimas novidades sobre Kubernetes? Inscreva-se no KubeWeekly." + +[main_kubeweekly_signup] +other = "Se inscrever" + +[main_page_history] +other ="História da página" + +[main_page_last_modified_on] +other = "Última modificação da página em" + +[main_read_about] +other = "Ler sobre" + +[main_read_more] +other = "Consulte Mais informação" + +# Miscellaneous + +[note] +other = "Nota:" + +[objectives_heading] +other = "Objetivos" + +[options_heading] +other = "Opções" + +[post_create_issue] +other = "Abra um bug" + +[prerequisites_heading] +other = "Antes de você começar" + +[subscribe_button] +other = "Se inscrever" + +[thirdparty_message] +other = """Esta seção tem links para projetos de terceiros que fornecem a funcionalidade exigida pelo Kubernetes. Os autores do projeto Kubernetes não são responsáveis por esses projetos. Esta página obedece as diretrizes de conteúdo do site CNCF, listando os itens em ordem alfabética. Para adicionar um projeto a esta lista, leia o guia de conteúdo antes de enviar sua alteração.""" + +[ui_search_placeholder] +other = "Procurar" + +[version_check_mustbeorlater] +other = "O seu servidor Kubernetes deve estar em ou depois da versão " + +[version_check_mustbe] +other = "Seu servidor Kubernetes deve ser versão" + +[version_check_tocheck] +other = "Para verificar a versão, digite " + +[warning] +other = "Aviso:" + +[whatsnext_heading] +other = "Qual é o próximo" diff --git a/data/i18n/ru/OWNERS b/data/i18n/ru/OWNERS new file mode 100644 index 0000000000..2c3a37935b --- /dev/null +++ b/data/i18n/ru/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Russian. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-ru-reviews + +approvers: +- sig-docs-ru-owners + +labels: +- language/ru diff --git a/data/i18n/ru/ru.toml b/data/i18n/ru/ru.toml new file mode 100644 index 0000000000..37447c0cad --- /dev/null +++ b/data/i18n/ru/ru.toml @@ -0,0 +1,201 @@ +# i18n strings for the Russian (main) site. + +[deprecation_warning] +other = " документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Актуальную документацию вы можете найти " + +[deprecation_file_warning] +other = "Устаревшая" + +[objectives_heading] +other = "Цели" + +[cleanup_heading] +other = "Очистка" + +[prerequisites_heading] +other = "Подготовка к работе" + +[subscribe_button] +other = "Подписаться" + +[whatsnext_heading] +other = "Что дальше" + +[feedback_heading] +other = "Обратная связь" + +[feedback_question] +other = "Была ли эта страница полезной?" + +[feedback_yes] +other = "Да" + +[feedback_no] +other = "Нет" + +[latest_version] +other = "последняя версия." + +[version_check_mustbe] +other = "Ваш сервер Kubernetes должен быть версии " + +[version_check_mustbeorlater] +other = "Ваш сервер Kubernetes должен быть версии или позже, чем версия " + +[version_check_tocheck] +other = "Чтобы проверить версию, введите " + +[caution] +other = "Внимание:" + +[note] +other = "Заметка:" + +[warning] +other = "Предупреждение:" + +[main_read_about] +other = "Прочитать о" + +[main_read_more] +other = "Прочитать больше" + +[main_github_invite] +other = "Хотите взломать ядро кодовой базы Kubernetes?" + +[main_github_view_on] +other = "Посмотреть на GitHub" + +[main_github_create_an_issue] +other = "Сообщить о проблеме" + +[main_community_explore] +other = "Познакомиться с сообществом" + +[main_kubernetes_features] +other = "Возможности Kubernetes" + +[main_cncf_project] +other = """Мы являемся проектом CNCF

""" + +[main_kubeweekly_baseline] +other = "Интересуетесь последними новостями Kubernetes? Зарегистрируйтесь в KubeWeekly." + +[main_kubernetes_past_link] +other = "Посмотреть последние новости" + +[main_kubeweekly_signup] +other = "Подписаться" + +[main_contribute] +other = "Помочь проекту" + +[main_edit_this_page] +other = "Редактировать эту страницу" + +[main_page_history] +other ="История страницы" + +[main_page_last_modified_on] +other = "Последний раз страница редактировалась" + +[main_by] +other = "by" + +[main_documentation_license] +other = """Авторы Kubernetes | Документация распространяется под лицензией CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. Все права защищены. The Linux Foundation является зарегистрированной торговой маркой. Список торговых марок The Linux Foundation приведен на странице использования торговых марок""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "Просмотр документации" + +[docs_label_contributors] +other = "Участники сообщества" + +[docs_label_users] +other = "Пользователи" + +[docs_label_i_am] +other = "Я ..." + +# layouts > blog > pager + +[layouts_blog_pager_prev] +other = "<< Назад" + +[layouts_blog_pager_next] +other = "Вперёд >>" + +# layouts > blog > list + +[layouts_case_studies_list_tell] +other = "Расскажите свою историю" + +# layouts > docs > glossary + +[layouts_docs_glossary_description] +other = "Данный глоссарий должен стать исчерпывающим стандартизированным списком терминологии в Kubernetes. Он включает технические термины, специфичные для K8s, а также более общие термины, которые полезно знать." + +[layouts_docs_glossary_filter] +other = "Фильтрация терминов по тегам" + +[layouts_docs_glossary_select_all] +other = "Выделить всё" + +[layouts_docs_glossary_deselect_all] +other = "Отменить выбор всех тегов" + +[layouts_docs_glossary_aka] +other = "Также известный как" + +[layouts_docs_glossary_click_details_before] +other = "Нажмите на значок" + +[layouts_docs_glossary_click_details_after] +other = "для получения более подробное объяснения по интересующему термину." + +# layouts > docs > search + +[layouts_docs_search_fetching] +other = "Получение результатов.." + +# layouts > partial > feedback + +[layouts_docs_partials_feedback_thanks] +other = "Спасибо за отзыв! Если у вас есть конкретный вопрос об использовании Kubernetes, спрашивайте" + +[layouts_docs_partials_feedback_issue] +other = "Сообщите о проблеме в репозитории GitHub, если вы хотите " + +[layouts_docs_partials_feedback_problem] +other = "сообщить о проблеме" + +[layouts_docs_partials_feedback_or] +other = "или" + +[layouts_docs_partials_feedback_improvement] +other = "предложить улучшение" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Форум" +[community_events_calendar] +other = "Календарь событий" + +# UI elements +[ui_search_placeholder] +other = "Поиск" + +[input_placeholder_email_address] +other = "адрес электронной почты" \ No newline at end of file diff --git a/data/i18n/uk/OWNERS b/data/i18n/uk/OWNERS new file mode 100644 index 0000000000..3175dc7d48 --- /dev/null +++ b/data/i18n/uk/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Ukrainian. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-uk-reviews + +approvers: +- sig-docs-uk-owners + +labels: +- language/uk diff --git a/data/i18n/uk/uk.toml b/data/i18n/uk/uk.toml new file mode 100644 index 0000000000..ec60865783 --- /dev/null +++ b/data/i18n/uk/uk.toml @@ -0,0 +1,255 @@ +# i18n strings for the Ukrainian (main) site. + +[caution] +# other = "Caution:" +other = "Увага:" + +[cleanup_heading] +# other = "Cleaning up" +other = "Очистка" + +[community_events_calendar] +# other = "Events Calendar" +other = "Календар подій" + +[community_forum_name] +# other = "Forum" +other = "Форум" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_warning] +# other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " +other = " документація більше не підтримується. Версія, яку ви зараз переглядаєте, є статичною. Для перегляду актуальної документації дивіться " + +[deprecation_file_warning] +# other = "Deprecated" +other = "Застаріла версія" + +[docs_label_browse] +# other = "Browse Docs" +other = "Переглянути документацію" + +[docs_label_contributors] +# other = "Contributors" +other = "Контриб'ютори" + +[docs_label_i_am] +# other = "I AM..." +other = "Я..." + +[docs_label_users] +# other = "Users" +other = "Користувачі" + +[feedback_heading] +# other = "Feedback" +other = "Ваша думка" + +[feedback_no] +# other = "No" +other = "Ні" + +[feedback_question] +# other = "Was this page helpful?" +other = "Чи була ця сторінка корисною?" + +[feedback_yes] +# other = "Yes" +other = "Так" + +[input_placeholder_email_address] +# other = "email address" +other = "електронна адреса" + +[latest_version] +# other = "latest version." +other = "остання версія." + +[layouts_blog_pager_prev] +# other = "<< Prev" +other = "<< Назад" + +[layouts_blog_pager_next] +# other = "Next >>" +other = "Далі >>" + +[layouts_case_studies_list_tell] +# other = "Tell your story" +other = "Розкажіть свою історію" + +[layouts_docs_glossary_aka] +# other = "Also known as" +other = "Також відомий як" + +[layouts_docs_glossary_description] +# other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." +other = "Даний словник створений як повний стандартизований список термінології Kubernetes. Він включає в себе технічні терміни, специфічні для Kubernetes, а також більш загальні терміни, необхідні для кращого розуміння контексту." + +[layouts_docs_glossary_deselect_all] +# other = "Deselect all" +other = "Очистити вибір" + +[layouts_docs_glossary_click_details_after] +# other = "indicators below to get a longer explanation for any particular term." +other = "для отримання розширеного пояснення конкретного терміна." + +[layouts_docs_glossary_click_details_before] +# other = "Click on the" +other = "Натисність на" + +[layouts_docs_glossary_filter] +# other = "Filter terms according to their tags" +other = "Відфільтрувати терміни за тегами" + +[layouts_docs_glossary_select_all] +# other = "Select all" +other = "Вибрати все" + +[layouts_docs_partials_feedback_improvement] +# other = "suggest an improvement" +other = "запропонувати покращення" + +[layouts_docs_partials_feedback_issue] +# other = "Open an issue in the GitHub repo if you want to " +other = "Створіть issue в GitHub репозиторії, якщо ви хочете " + +[layouts_docs_partials_feedback_or] +# other = "or" +other = "або" + +[layouts_docs_partials_feedback_problem] +# other = "report a problem" +other = "повідомити про проблему" + +[layouts_docs_partials_feedback_thanks] +# other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" +other = "Дякуємо за ваш відгук. Якщо ви маєте конкретне запитання щодо використання Kubernetes, ви можете поставити його" + +[layouts_docs_search_fetching] +# other = "Fetching results..." +other = "Отримання результатів..." + +[main_by] +other = "by" + +[main_cncf_project] +# other = """We are a CNCF graduated project

""" +other = """Ми є проектом CNCF

""" + +[main_community_explore] +# other = "Explore the community" +other = "Познайомитись із спільнотою" + +[main_contribute] +# other = "Contribute" +other = "Допомогти проекту" + +[main_copyright_notice] +# other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" +other = """The Linux Foundation ®. Всі права застережено. The Linux Foundation є зареєстрованою торговою маркою. Перелік торгових марок The Linux Foundation ви знайдете на нашій сторінці Використання торгових марок""" + +[main_documentation_license] +# other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" +other = """Автори Kubernetes | Документація розповсюджується під ліцензією CC BY 4.0""" + +[main_edit_this_page] +# other = "Edit This Page" +other = "Редагувати цю сторінку" + +[main_github_create_an_issue] +# other = "Create an Issue" +other = "Створити issue" + +[main_github_invite] +# other = "Interested in hacking on the core Kubernetes code base?" +other = "Хочете зламати основну кодову базу Kubernetes?" + +[main_github_view_on] +# other = "View On GitHub" +other = "Переглянути у GitHub" + +[main_kubernetes_features] +# other = "Kubernetes Features" +other = "Функціональні можливості Kubernetes" + +[main_kubeweekly_baseline] +# other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." +other = "Хочете отримувати останні новини Kubernetes? Підпишіться на KubeWeekly." + +[main_kubernetes_past_link] +# other = "View past newsletters" +other = "Переглянути попередні інформаційні розсилки" + +[main_kubeweekly_signup] +# other = "Subscribe" +other = "Підписатися" + +[main_page_history] +# other ="Page History" +other ="Історія сторінки" + +[main_page_last_modified_on] +# other = "Page last modified on" +other = "Сторінка востаннє редагувалася" + +[main_read_about] +# other = "Read about" +other = "Прочитати про" + +[main_read_more] +# other = "Read more" +other = "Прочитати більше" + +[note] +# other = "Note:" +other = "Примітка:" + +[objectives_heading] +# other = "Objectives" +other = "Цілі" + +[prerequisites_heading] +# other = "Before you begin" +other = "Перш ніж ви розпочнете" + +[subscribe_button] +# other = "Subscribe" +other = "Підписатися" + +[ui_search_placeholder] +# other = "Search" +other = "Пошук" + +[version_check_mustbe] +# other = "Your Kubernetes server must be version " +other = "Версія вашого Kubernetes сервера має бути " + +[version_check_mustbeorlater] +# other = "Your Kubernetes server must be at or later than version " +other = "Версія вашого Kubernetes сервера має дорівнювати або бути молодшою ніж " + +[version_check_tocheck] +# other = "To check the version, enter " +other = "Для перевірки версії введіть " + +[warning] +# other = "Warning:" +other = "Попередження:" + +[whatsnext_heading] +# other = "What's next" +other = "Що далі" diff --git a/data/i18n/vi/OWNERS b/data/i18n/vi/OWNERS new file mode 100644 index 0000000000..932adeb73f --- /dev/null +++ b/data/i18n/vi/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Vietnamese. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-vi-reviews + +approvers: +- sig-docs-vi-owners + +labels: +- language/vi diff --git a/data/i18n/vi/vi.toml b/data/i18n/vi/vi.toml new file mode 100644 index 0000000000..d65c07a720 --- /dev/null +++ b/data/i18n/vi/vi.toml @@ -0,0 +1,197 @@ +# i18n strings for the Vietnamese (main) site. + +[caution] +other = "Chú ý:" + +[cleanup_heading] +other = "Cleaning up" + +[community_events_calendar] +other = "Lịch sự kiện" + +[community_forum_name] +other = "Diễn đàn" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_warning] +other = " tài liệu này không còn được duy trì. Phiên bản đang xem hiện tại là một snapshot tĩnh. Để rõ hơn về tài liệu bản cập nhật, xem " + +[deprecation_file_warning] +other = "Không dùng nữa" + +[docs_label_browse] +other = "Duyệt tài liệu" + +[docs_label_contributors] +other = "Người đóng góp" + +[docs_label_i_am] +other = "TÔI LÀ..." + +[docs_label_users] +other = "Users" + +[feedback_heading] +other = "Phản hồi" + +[feedback_no] +other = "Không" + +[feedback_question] +other = "Trang này có hữu ích?" + +[feedback_yes] +other = "Có" + +[input_placeholder_email_address] +other = "địa chỉ email" + +[latest_version] +other = "phiên bản mới nhất." + +[layouts_blog_pager_prev] +other = "<< Trước" + +[layouts_blog_pager_next] +other = "Sau >>" + +[layouts_case_studies_list_tell] +other = "Kể câu chuyện của bạn" + +[layouts_docs_glossary_aka] +other = "Cũng được biết đến như là" + +[layouts_docs_glossary_description] +other = "Bảng chú giải này được kì vọng là một danh sách hoàn thiện, được chuẩn hóa về thuật ngữ Kubernetes. Nó bao gồm các thuật ngữ kỹ thuật dành riêng cho Kubernetes, cũng như các thuật ngữ chung hơn cung cấp ngữ cảnh hữu ích" + +[layouts_docs_glossary_deselect_all] +other = "Bỏ chọn tất cả" + +[layouts_docs_glossary_click_details_after] +other = "danh mục dưới đây để giải thích rõ hơn cho các thuật ngữ cụ thể" + +[layouts_docs_glossary_click_details_before] +other = "Click vào" + +[layouts_docs_glossary_filter] +other = "Lọc các thuật ngữ theo tags" + +[layouts_docs_glossary_select_all] +other = "Chọn tất cả" + +[layouts_docs_partials_feedback_improvement] +other = "đề xuất cải tiến" + +[layouts_docs_partials_feedback_issue] +other = "Tạo một issue trên Github repo nến bạn muốn " + +[layouts_docs_partials_feedback_or] +other = "hoặc" + +[layouts_docs_partials_feedback_problem] +other = "báo cáo một vấn đề" + +[layouts_docs_partials_feedback_thanks] +other = "Cảm ơn vì đã phản hồi. Nếu bạn có một câu hỏi cụ thể, có thể trả lời về cách sử dụng Kubernetes, hãy hỏi nó trên" + +[layouts_docs_search_fetching] +other = "Đang lấy kết quả..." + +[main_by] +other = "bởi" + +[main_cncf_project] +other = """Chúng tôi là một dự án CNCF

""" + +[main_community_explore] +other = "Khám phá cộng đồng" + +[main_contribute] +other = "Đóng góp" + +[main_copyright_notice] +other = """The Linux Foundation ®. Đã đăng ký Bản quyền. The Linux Foundation đã đăng ký và sử dụng nhãn hiệu. Để biết danh sách các nhãn hiệu của The Linux Foundation, xem Trademark Usage page""" + +[main_documentation_license] +other = """Các tác giả Kubernetes | Tài liệu được phân phối theo CC BY 4.0""" + +[main_edit_this_page] +other = "Sửa trang này" + +[main_github_create_an_issue] +other = "Tạo một Issue" + +[main_github_invite] +other = "Quan tâm đến việc hacking mã nguồn Kubernetes?" + +[main_github_view_on] +other = "Xem trên GitHub" + +[main_kubernetes_features] +other = "Các tính năng của Kubernetes" + +[main_kubeweekly_baseline] +other = "Muốn nhận những tin tức Kubernetes mới nhất? Đăng kí KubeWeekly." + +[main_kubernetes_past_link] +other = "Xem các bản tin trước đây" + +[main_kubeweekly_signup] +other = "Đăng kí" + +[main_page_history] +other ="Lịch sử trang" + +[main_page_last_modified_on] +other = "Trang được sửa lần cuồi vào" + +[main_read_about] +other = "Đọc về" + +[main_read_more] +other = "Đọc thêm" + +[note] +other = "Ghi chú:" + +[objectives_heading] +other = "Mục tiêu" + +[prerequisites_heading] +other = "Trước khi bắt đầu" + +[subscribe_button] +other = "Đăng ký" + +[ui_search_placeholder] +other = "Tìm kiếm" + +[version_check_mustbe] +other = "Server Kubernetes của bạn phải ở phiên bản " + +[version_check_mustbeorlater] +other = "Server Kubernetes của bạn ở phiên bản mới hơn hoặc tại phiên bản " + +[version_check_tocheck] +other = "Để kiểm tra phiên bản, nhập " + +[warning] +other = "Cảnh báo:" + +[whatsnext_heading] +other = "Có gì tiếp theo" + diff --git a/data/i18n/zh/OWNERS b/data/i18n/zh/OWNERS new file mode 100644 index 0000000000..3bb5f8ebe5 --- /dev/null +++ b/data/i18n/zh/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings 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/data/i18n/zh/zh.toml b/data/i18n/zh/zh.toml new file mode 100644 index 0000000000..dcf32839f8 --- /dev/null +++ b/data/i18n/zh/zh.toml @@ -0,0 +1,230 @@ +# i18n strings for the Chinese version of the site (https://kubernetes.io/zh/) +# 注意:修改此文件时请维持字符串名称的字母顺序并与英文版保持一致 + +[caution] +other = "注意:" + +[cleanup_heading] +other = "清理现场" + +[community_events_calendar] +other = "事件日历" + +[community_forum_name] +other = "论坛" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_title] +other = "您正在查看 Kubernetes 版本的文档:" + +[deprecation_warning] +other = " 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击" + +[deprecation_file_warning] +other = "已过时" + +[docs_label_browse] +other = "浏览文档" + +[docs_label_contributors] +other = "贡献者" + +[docs_label_i_am] +other = "我是..." + +[docs_label_users] +other = "用户" + +[examples_heading] +other = "示例" + +[feedback_heading] +other = "反馈" + +[feedback_no] +other = "否" + +[feedback_question] +other = "此页是否对您有帮助?" + +[feedback_yes] +other = "是" + +[input_placeholder_email_address] +other = "电子邮件地址" + +[latest_version] +other = "最新版本。" + +[layouts_blog_pager_prev] +other = "<< 前一篇" + +[layouts_blog_pager_next] +other = "后一篇 >>" + +[layouts_case_studies_list_tell] +other = "分享您的故事" + +[layouts_docs_glossary_aka] +other = "亦称作" + +[layouts_docs_glossary_description] +other = "此术语表旨在提供 Kubernetes 术语的完整、标准列表。其中包含特定于 Kubernetes 的技术术语以及能够构造有用的语境的一般性术语。" + +[layouts_docs_glossary_deselect_all] +other = "全不选" + +[layouts_docs_glossary_click_details_after] +other = "下面的指示符号获取特定术语的更为完整的描述。" + +[layouts_docs_glossary_click_details_before] +other = "点击" + +[layouts_docs_glossary_filter] +other = "根据标签过滤术语" + +[layouts_docs_glossary_select_all] +other = "全选" + +[layouts_docs_partials_feedback_improvement] +other = "提出改进建议" + +[layouts_docs_partials_feedback_issue] +other = "在 GitHub 仓库上登记新的问题" + +[layouts_docs_partials_feedback_or] +other = "或者" + +[layouts_docs_partials_feedback_problem] +other = "报告问题" + +[layouts_docs_partials_feedback_thanks] +other = "感谢反馈。如果您有一个关于如何使用 Kubernetes 的特定的、需要答案的问题,可以访问" + +[layouts_docs_search_fetching] +other = "检索结果中.." + +[main_by] +other = "由:" + +[main_cncf_project] +other = """我们是 CNCF 毕业项目

""" + +[main_community_explore] +other = "了解社区" + +[main_contribute] +other = "贡献" + +[main_copyright_notice] +other = """Linux 基金会®。保留所有权利。Linux 基金会已注册并使用商标。如需了解 Linux 基金会的商标列表,请访问商标使用页面""" + +[main_documentation_license] +other = """The Kubernetes 作者 | 文档发布基于 CC BY 4.0 授权许可""" + +[main_edit_this_page] +other = "修改本页面" + +[main_github_create_an_issue] +other = "报告 GitHub 问题" + +[main_github_invite] +other = "想要修改 Kubernetes 的核心源代码?" + +[main_github_view_on] +other = "在 GitHub 上查看" + +[main_kubernetes_features] +other = "Kubernetes 特性" + +[main_kubeweekly_baseline] +other = "想要获取最新的 Kubernetes 新闻么?请订阅 KubeWeekly。" + +[main_kubernetes_past_link] +other = "浏览往期的周报" + +[main_kubeweekly_signup] +other = "订阅" + +[main_page_history] +other ="页面历史" + +[main_page_last_modified_on] +other = "页面最后一次修改于" + +[main_read_about] +other = "了解" + +[main_read_more] +other = "了解更多" + +[note] +other = "说明:" + +[objectives_heading] +other = "教程目标" + +[options_heading] +other = "选项" + +[post_create_child_page] +other = "创建子页面" + +[prerequisites_heading] +other = "准备开始" + +[seealso_heading] +other = "另请参见" + +[subscribe_button] +other = "订阅" + +[synopsis_heading] +other = "简介" + +[thirdparty_message] +other = """本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南。""" + +[ui_search_placeholder] +other = "搜索" + +[version_check_mustbe] +other = "您的 Kubernetes 服务器版本必须是 " + +[version_check_mustbeorlater] +other = "您的 Kubernetes 服务器版本必须不低于版本 " + +[version_check_tocheck] +other = "要获知版本信息,请输入 " + +[version_menu] +other = "版本列表" + +[warning] +other = "警告:" + +[whatsnext_heading] +other = "接下来" + +[docs_version_latest_heading] +other = "当前版本" + +[docs_version_other_heading] +other = "往期版本" + +[docs_version_current] +other = "(此文档)" diff --git a/data/releases/OWNERS b/data/releases/OWNERS new file mode 100644 index 0000000000..25d2d0a271 --- /dev/null +++ b/data/releases/OWNERS @@ -0,0 +1,17 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# 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 + - release-engineering-reviewers + +approvers: + - sig-docs-en-owners + - sig-release-leads + - release-engineering-approvers + +labels: +- sig/release +- area/release-eng diff --git a/data/releases/schedule.yaml b/data/releases/schedule.yaml new file mode 100644 index 0000000000..6b2c3c1a8f --- /dev/null +++ b/data/releases/schedule.yaml @@ -0,0 +1,76 @@ +schedules: +- release: 1.21 + next: 1.21.2 + cherryPickDeadline: 2021-06-12 + targetDate: 2021-06-16 + endOfLifeDate: 2022-04-30 + previousPatches: + - release: 1.21.1 + cherryPickDeadline: 2021-05-07 + targetDate: 2021-05-12 +- release: 1.20 + next: 1.20.8 + cherryPickDeadline: 2021-06-12 + targetDate: 2021-06-16 + endOfLifeDate: 2021-12-30 + previousPatches: + - release: 1.20.7 + cherryPickDeadline: 2021-05-07 + targetDate: 2021-05-12 + - release: 1.20.6 + cherryPickDeadline: 2021-04-09 + targetDate: 2021-04-14 + - release: 1.20.5 + cherryPickDeadline: 2021-03-12 + targetDate: 2021-03-17 + - release: 1.20.4 + cherryPickDeadline: 2021-02-12 + targetDate: 2021-02-18 + - release: 1.20.3 + cherryPickDeadline: "Conformance Tests Issue https://groups.google.com/g/kubernetes-dev/c/oUpY9vWgzJo" + targetDate: 2021-02-17 + - release: 1.20.2 + cherryPickDeadline: 2021-01-08 + targetDate: 2021-01-13 + - release: 1.20.1 + cherryPickDeadline: "Tagging Issue https://groups.google.com/g/kubernetes-dev/c/dNH2yknlCBA" + targetDate: 2020-12-18 +- release: 1.19 + next: 1.19.12 + cherryPickDeadline: 2021-06-12 + targetDate: 2021-06-16 + endOfLifeDate: 2021-09-30 + previousPatches: + - release: 1.19.11 + cherryPickDeadline: 2021-05-07 + targetDate: 2021-05-12 + - release: 1.19.10 + cherryPickDeadline: 2021-04-09 + targetDate: 2021-04-14 + - release: 1.19.9 + cherryPickDeadline: 2021-03-12 + targetDate: 2021-03-17 + - release: 1.19.8 + cherryPickDeadline: 2021-02-12 + targetDate: 2021-02-17 + - release: 1.19.7 + cherryPickDeadline: 2021-01-08 + targetDate: 2021-01-13 + - release: 1.19.6 + cherryPickDeadline: "Tagging Issue https://groups.google.com/g/kubernetes-dev/c/dNH2yknlCBA" + targetDate: 2020-12-18 + - release: 1.19.5 + cherryPickDeadline: 2020-12-04 + targetDate: 2020-12-09 + - release: 1.19.4 + cherryPickDeadline: 2020-11-06 + targetDate: 2020-11-11 + - release: 1.19.3 + cherryPickDeadline: 2020-10-09 + targetDate: 2020-10-14 + - release: 1.19.2 + cherryPickDeadline: 2020-09-11 + targetDate: 2020-09-16 + - release: 1.19.1 + cherryPickDeadline: 2020-09-04 + targetDate: 2020-09-09 diff --git a/i18n/OWNERS b/i18n/OWNERS new file mode 100644 index 0000000000..83c9158cd2 --- /dev/null +++ b/i18n/OWNERS @@ -0,0 +1,2 @@ +# No owner overrides here +# See data/i18n/*/OWNERS instead diff --git a/i18n/de.toml b/i18n/de.toml deleted file mode 100644 index cd4c3d7924..0000000000 --- a/i18n/de.toml +++ /dev/null @@ -1,203 +0,0 @@ -# i18n strings for the German (main) site. - -[deprecation_warning] -other = " Die Dokumentation wird nicht mehr aktiv gepflegt. Die aktuell angezeigte Version ist eine statische Momentaufnahme. Aktuelle Dokumentation finden Sie unter " - -[deprecation_file_warning] -other = "Veraltet" - -[objectives_heading] -other = "Ziele" - -[cleanup_heading] -other = "Aufräumen" - -[prerequisites_heading] -other = "Bevor Sie beginnen" - -[subscribe_button] -other = "Abonnieren" - -[whatsnext_heading] -other = "Nächste Schritte" - -[feedback_heading] -other = "Feedback" - -[feedback_question] -other = "War diese Seite hilfreich?" - -[feedback_yes] -other = "Ja" - -[feedback_no] -other = "Nein" - -[latest_version] -other = "aktuelle Version." - -[version_check_mustbe] -other = "Ihr Kubernetes-Server benötigt die Version " - -[version_check_mustbeorlater] -other = "Ihr Kubernetes-Server benötigt mindestens die Version " - -[version_check_tocheck] -other = "Um die Version zu überprüfen, geben Sie Folgendes ein " - -[caution] -other = "Achtung:" - -[note] -other = "Hinweis:" - -[warning] -other = "Warnung:" - -[main_read_about] -other = "Mehr Informationen" - -[main_read_more] -other = "Weiterlesen" - -[main_github_invite] -other = "Interested in hacking on the core Kubernetes code base?" - -[main_github_view_on] -other = "Auf GitHub ansehen" - -[main_github_create_an_issue] -other = "Problem berichten" - -[main_community_explore] -other = "Entdecke die Community" - -[main_kubernetes_features] -other = "Kubernetes Features" - -[main_cncf_project] -other = """Wir sind ein CNCF Abschlussprojekt

""" - -[main_kubeweekly_baseline] -other = "Möchten Sie die neuesten Nachrichten von Kubernetes erhalten? Melden Sie sich für KubeWeekly an." - -[main_kubernetes_past_link] -other = "Frühere Newsletter anzeigen" - -[main_kubeweekly_signup] -other = "Abonnieren" - -[main_contribute] -other = "Contribute" - -[main_edit_this_page] -other = "Diese Seite bearbeiten" - -[main_page_history] -other ="Seitenverlauf" - -[main_page_last_modified_on] -other = "Letzte Änderung am" - -[main_by] -other = "durch" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" - -# Labels for the docs portal home page. -[docs_label_browse] -other = "Dokumention durchsuchen" - -[docs_label_contributors] -other = "Mitwirkende" - -[docs_label_users] -other = "Users" - -[docs_label_i_am] -other = "ICH BIN..." - - -# layouts > blog > pager - -[layouts_blog_pager_prev] -other = "<< Zurück" - -[layouts_blog_pager_next] -other = "Vor >>" - -# layouts > blog > list - -[layouts_case_studies_list_tell] -other = "Erzählen Sie Ihre Geschichte" - -# layouts > docs > glossary - -[layouts_docs_glossary_description] -other = "Dieses Glossar soll eine umfassende, standardisierte Liste der Kubernetes-Terminologie darstellen. Es enthält technische Begriffe, die für K8 spezifisch sind, sowie allgemeinere Begriffe, die einen nützlichen Kontext bieten." - -[layouts_docs_glossary_filter] -other = "Begriffe nach ihren Tags filtern" - -[layouts_docs_glossary_select_all] -other = "Alle auswählen" - -[layouts_docs_glossary_deselect_all] -other = "Alle abwählen" - -[layouts_docs_glossary_aka] -other = "Auch bekannt als" - -[layouts_docs_glossary_click_details_before] -other = "Klicken Sie auf die" - -[layouts_docs_glossary_click_details_after] -other = "Indikatoren unten, um eine längere Erklärung für einen bestimmten Begriff zu erhalten." - -# layouts > docs > search - -[layouts_docs_search_fetching] -other = "Ergebnisse werden abgerufen..." - -# layouts > partial > feedback - -[layouts_docs_partials_feedback_thanks] -other = "Danke für die Rückmeldung. Wenn Sie eine spezifische, beantwortbare Frage zur Verwendung von Kubernetes haben, stellen Sie diese unter " - -[layouts_docs_partials_feedback_issue] -other = "Öffnen Sie ein Problem im GitHub-Repo, wenn Sie möchten " - -[layouts_docs_partials_feedback_problem] -other = "Ein Problem melden" - -[layouts_docs_partials_feedback_or] -other = "oder" - -[layouts_docs_partials_feedback_improvement] -other = "Eine Verbesserung vorschlagen" - - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Forum" -[community_events_calendar] -other = "Veranstaltungskalender" - -# UI elements -[ui_search_placeholder] -other = "Suchen" - -[input_placeholder_email_address] -other = "E-Mail-Addresse" \ No newline at end of file diff --git a/i18n/de.toml b/i18n/de.toml new file mode 120000 index 0000000000..4435a0f16c --- /dev/null +++ b/i18n/de.toml @@ -0,0 +1 @@ +../data/i18n/de/de.toml \ No newline at end of file diff --git a/i18n/en.toml b/i18n/en.toml deleted file mode 100644 index c6f24f8e2e..0000000000 --- a/i18n/en.toml +++ /dev/null @@ -1,226 +0,0 @@ -# i18n strings for the English (main) site. -# NOTE: Please keep the entries in alphabetical order when editing -[caution] -other = "Caution:" - -[cleanup_heading] -other = "Cleaning up" - -[community_events_calendar] -other = "Events Calendar" - -[community_forum_name] -other = "Forum" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_title] -other = "You are viewing documentation for Kubernetes version:" - -[deprecation_warning] -other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " - -[deprecation_file_warning] -other = "Deprecated" - -[docs_label_browse] -other = "Browse Docs" - -[docs_label_contributors] -other = "Contributors" - -[docs_label_i_am] -other = "I AM..." - -[docs_label_users] -other = "Users" - -[docs_version_current] -other = "(this documentation)" - -[docs_version_latest_heading] -other = "Latest version" - -[docs_version_other_heading] -other = "Older versions" - -[error_404_were_you_looking_for] -other = "Were you looking for:" - -[examples_heading] -other = "Examples" - -[feedback_heading] -other = "Feedback" - -[feedback_no] -other = "No" - -[feedback_question] -other = "Was this page helpful?" - -[feedback_yes] -other = "Yes" - -[input_placeholder_email_address] -other = "email address" - -[latest_version] -other = "latest version." - -[layouts_blog_pager_prev] -other = "<< Prev" - -[layouts_blog_pager_next] -other = "Next >>" - -[layouts_case_studies_list_tell] -other = "Tell your story" - -[layouts_docs_glossary_aka] -other = "Also known as" - -[layouts_docs_glossary_description] -other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." - -[layouts_docs_glossary_deselect_all] -other = "Deselect all" - -[layouts_docs_glossary_click_details_after] -other = "indicators below to get a longer explanation for any particular term." - -[layouts_docs_glossary_click_details_before] -other = "Click on the" - -[layouts_docs_glossary_filter] -other = "Filter terms according to their tags" - -[layouts_docs_glossary_select_all] -other = "Select all" - -[layouts_docs_partials_feedback_improvement] -other = "suggest an improvement" - -[layouts_docs_partials_feedback_issue] -other = "Open an issue in the GitHub repo if you want to " - -[layouts_docs_partials_feedback_or] -other = "or" - -[layouts_docs_partials_feedback_problem] -other = "report a problem" - -[layouts_docs_partials_feedback_thanks] -other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" - -[layouts_docs_search_fetching] -other = "Fetching results..." - -[main_by] -other = "by" - -[main_cncf_project] -other = """We are a CNCF graduated project

""" - -[main_community_explore] -other = "Explore the community" - -[main_contribute] -other = "Contribute" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_github_invite] -other = "Interested in hacking on the core Kubernetes code base?" - -[main_github_view_on] -other = "View On GitHub" - -[main_kubernetes_features] -other = "Kubernetes Features" - -[main_kubeweekly_baseline] -other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." - -[main_kubernetes_past_link] -other = "View past newsletters" - -[main_kubeweekly_signup] -other = "Subscribe" - -[main_page_history] -other ="Page History" - -[main_page_last_modified_on] -other = "Page last modified on" - -[main_read_about] -other = "Read about" - -[main_read_more] -other = "Read more" - -[note] -other = "Note:" - -[objectives_heading] -other = "Objectives" - -[options_heading] -other = "Options" - -[post_create_issue] -other = "Create an issue" - -[prerequisites_heading] -other = "Before you begin" - -[seealso_heading] -other = "See Also" - -[subscribe_button] -other = "Subscribe" - -[synopsis_heading] -other = "Synopsis" - -[thirdparty_message] -other = """This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects. This page follows CNCF website guidelines by listing projects alphabetically. To add a project to this list, read the content guide before submitting a change.""" - -[ui_search_placeholder] -other = "Search" - -[version_check_mustbe] -other = "Your Kubernetes server must be version " - -[version_check_mustbeorlater] -other = "Your Kubernetes server must be at or later than version " - -[version_check_tocheck] -other = "To check the version, enter " - -[version_menu] -other = "Versions" - -[warning] -other = "Warning:" - -[whatsnext_heading] -other = "What's next" diff --git a/i18n/en.toml b/i18n/en.toml new file mode 120000 index 0000000000..a13dbc01ce --- /dev/null +++ b/i18n/en.toml @@ -0,0 +1 @@ +../data/i18n/en/en.toml \ No newline at end of file diff --git a/i18n/es.toml b/i18n/es.toml deleted file mode 100644 index c232ce7c27..0000000000 --- a/i18n/es.toml +++ /dev/null @@ -1,203 +0,0 @@ -# i18n strings for the Spanish (main) site. - -[deprecation_warning] -other = " ya no mantiene activamente la documentación. La versión que está viendo actualmente es una instantánea estática. Para la documentación actualizada, visita la " - -[deprecation_file_warning] -other = "Descontinuado" - -[objectives_heading] -other = "Objetivos" - -[cleanup_heading] -other = "Limpieza de recursos" - -[prerequisites_heading] -other = "Antes de empezar" - -[subscribe_button] -other = "Suscribir" - -[whatsnext_heading] -other = "Siguientes pasos" - -[feedback_heading] -other = "Comentarios" - -[feedback_question] -other = "¿Esta página le ha sido de ayuda?" - -[feedback_yes] -other = "Sí" - -[feedback_no] -other = "No" - -[latest_version] -other = "última versión." - -[version_check_mustbe] -other = "Su versión de Kubernetes debe ser " - -[version_check_mustbeorlater] -other = "Su versión de Kubernetes debe ser como mínimo " - -[version_check_tocheck] -other = "Para comprobar la versión, introduzca " - -[caution] -other = "Precaución:" - -[note] -other = "Nota:" - -[warning] -other = "Advertencia:" - -[main_read_about] -other = "Leer" - -[main_read_more] -other = "Leer más" - -[main_github_invite] -other = "¿Está interesado en participar en el código base de Kubernetes?" - -[main_github_view_on] -other = "Ver en GitHub" - -[main_github_create_an_issue] -other = "Abrir un Issue" - -[main_community_explore] -other = "Explorar la comunidad" - -[main_kubernetes_features] -other = "Características de Kubernetes" - -[main_cncf_project] -other = """Somos un proyecto graduado de la CNCF

""" - -[main_kubeweekly_baseline] -other = "¿Interesado en recibir las últimas noticias de Kubernetes? Suscríbase a KubeWeekly." - -[main_kubernetes_past_link] -other = "Ver boletines anteriores" - -[main_kubeweekly_signup] -other = "Suscríbase" - -[main_contribute] -other = "Contribuir" - -[main_edit_this_page] -other = "Editar esta página" - -[main_page_history] -other ="Historial cambios" - -[main_page_last_modified_on] -other = "Página modificada por última vez el " - -[main_by] -other = "por" - -[main_documentation_license] -other = """Los autores de Kubernetes | Documentación distribuida bajo CC BY 4.0""" - -[main_copyright_notice] -other = """The Linux Foundation ®. Todos los derechos reservados. The Linux Foundation tiene marcas registradas y utiliza marcas registradas. Para obtener una lista de marcas registradas por The Linux Foundation, visita Trademark Usage page""" - -# Labels for the docs portal home page. -[docs_label_browse] -other = "Explorar la documentación" - -[docs_label_contributors] -other = "Contribuidores" - -[docs_label_users] -other = "Usuarios" - -[docs_label_i_am] -other = "Yo soy..." - -# layouts > blog > pager - -[layouts_blog_pager_prev] -other = "<< Anterior" - -[layouts_blog_pager_next] -other = "Siguiente >>" - -# layouts > blog > list - -[layouts_case_studies_list_tell] -other = "Cuéntanos tu historia" - -# layouts > docs > glossary - -[layouts_docs_glossary_description] -other = "Este glosario tiene la intención de ser una lista completa y estandarizada de la terminología de Kubernetes. Incluye términos técnicos que son específicos de k8s, así como términos más generales que proporcionan un contexto." - -[layouts_docs_glossary_filter] -other = "Filtrar terminos por categoría:" - -[layouts_docs_glossary_select_all] -other = "Seleccionar todos" - -[layouts_docs_glossary_deselect_all] -other = "Elmininar selección" - -[layouts_docs_glossary_aka] -other = "Also known as" - -[layouts_docs_glossary_click_details_before] -other = "Haz click en el símbolo" - -[layouts_docs_glossary_click_details_after] -other = "para obtener información detallada sobre el término." - -# layouts > docs > search - -[layouts_docs_search_fetching] -other = "Obteniendo resultados.." - -# layouts > partial > feedback - -[layouts_docs_partials_feedback_thanks] -other = "Muchas gracias por el feedback. Si tienes alguna pregunta específica sobre como usar Kubernetes, puedes preguntar en" - -[layouts_docs_partials_feedback_issue] -other = "Abre un issue en el repositorio de GitHub si quieres" - -[layouts_docs_partials_feedback_problem] -other = "reportar un problema" - -[layouts_docs_partials_feedback_or] -other = "o" - -[layouts_docs_partials_feedback_improvement] -other = "sugerir alguna mejora" - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Foro" -[community_events_calendar] -other = "Calendario de eventos" -[community_youtube_name] -other = "YouTube" - -# UI elements -[ui_search_placeholder] -other = "Buscar" - -[input_placeholder_email_address] -other = "dirección de correo electrónico" \ No newline at end of file diff --git a/i18n/es.toml b/i18n/es.toml new file mode 120000 index 0000000000..8bbbc64bd6 --- /dev/null +++ b/i18n/es.toml @@ -0,0 +1 @@ +../data/i18n/es/es.toml \ No newline at end of file diff --git a/i18n/fr.toml b/i18n/fr.toml deleted file mode 100644 index 4cfc419cb7..0000000000 --- a/i18n/fr.toml +++ /dev/null @@ -1,143 +0,0 @@ -# i18n strings for the French (main) site. - -[deprecation_warning] -other = " documentation non maintenue. Vous consultez une version statique. Pour une documentation à jour, veuillez consulter: " - -[objectives_heading] -other = "Objectifs" - -[cleanup_heading] -other = "Cleanup" - -[prerequisites_heading] -other = "Pré-requis" - -[subscribe_button] -other = "Souscrire" - -[whatsnext_heading] -other = "A suivre" - -[feedback_heading] -other = "Feedback" - -[feedback_question] -other = "Cette page est elle utile ?" - -[feedback_yes] -other = "Oui" - -[feedback_no] -other = "Non" - -[latest_version] -other = "dernière version." - -[version_check_mustbe] -other = "Votre serveur Kubernetes doit être version " - -[version_check_mustbeorlater] -other = "Votre serveur Kubernetes doit être au moins à la version " - -[version_check_tocheck] -other = "Pour consulter la version, entrez " - -[caution] -other = "Avertissement:" - -[note] -other = "Note:" - -[warning] -other = "Attention:" - -[main_read_about] -other = "A propos" - -[main_read_more] -other = "Autres ressources" - -[main_github_invite] -other = "Souhaitez vous contribuer au code de Kubernetes ?" - -[main_github_view_on] -other = "Voir sur GitHub" - -[main_github_create_an_issue] -other = "Ouvrez un ticket" - -[main_community_explore] -other = "Explorez la communauté" - -[main_kubernetes_features] -other = "Fonctionnalités Kubernetes" - -[main_cncf_project] -other = """Nous sommes un projet CNCF diplômé

""" - -[main_kubeweekly_baseline] -other = "Intéressez pour recevoir les dernières informations sur Kubernetes ? Abonnez-vous à KubeWeekly." - -[main_kubernetes_past_link] -other = "Voir les newsletters précédentes" - -[main_kubeweekly_signup] -other = "S'abonner" - -[main_contribute] -other = "Contribuer" - -[main_edit_this_page] -other = "Editez cette page" - -[main_page_history] -other ="Historique" - -[main_page_last_modified_on] -other = "Dernière modification le" - -[main_by] -other = "de" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" - -# Labels for the docs portal home page. -[docs_label_browse] -other = "Parcourir la documentation" - -[docs_label_contributors] -other = "Contributeurs" - -[docs_label_users] -other = "Utilisateurs" - -[docs_label_i_am] -other = "JE SUIS..." - -[examples_heading] -other = "Exemples" - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Forum" -[community_events_calendar] -other = "Calendrier" - -# UI elements -[ui_search_placeholder] -other = "Recherche" - -[input_placeholder_email_address] -other = "adresse email" diff --git a/i18n/fr.toml b/i18n/fr.toml new file mode 120000 index 0000000000..1bb0befdcb --- /dev/null +++ b/i18n/fr.toml @@ -0,0 +1 @@ +../data/i18n/fr/fr.toml \ No newline at end of file diff --git a/i18n/hi.toml b/i18n/hi.toml deleted file mode 100644 index 2e5d6ad331..0000000000 --- a/i18n/hi.toml +++ /dev/null @@ -1,195 +0,0 @@ -# i18n strings for the English (main) site. - -[deprecation_warning] -other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " - -[deprecation_file_warning] -other = "Deprecated" - -[objectives_heading] -other = "Objectives" - -[cleanup_heading] -other = "Cleaning up" - -[prerequisites_heading] -other = "Before you begin" - -[whatsnext_heading] -other = "What's next" - -[feedback_heading] -other = "Feedback" - -[feedback_question] -other = "Was this page helpful?" - -[feedback_yes] -other = "Yes" - -[feedback_no] -other = "No" - -[latest_version] -other = "latest version." - -[version_check_mustbe] -other = "Your Kubernetes server must be version " - -[version_check_mustbeorlater] -other = "Your Kubernetes server must be at or later than version " - -[version_check_tocheck] -other = "To check the version, enter " - -[caution] -other = "Caution:" - -[note] -other = "Note:" - -[warning] -other = "Warning:" - -[main_read_about] -other = "Read about" - -[main_read_more] -other = "Read more" - -[main_github_invite] -other = "Interested in hacking on the core Kubernetes code base?" - -[main_github_view_on] -other = "View On GitHub" - -[main_github_create_an_issue] -other = "Create an Issue" - -[main_community_explore] -other = "Explore the community" - -[main_kubernetes_features] -other = "Kubernetes Features" - -[main_cncf_project] -other = """We are a CNCF graduated project

""" - -[main_kubeweekly_baseline] -other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." - -[main_kubernetes_past_link] -other = "View past newsletters" - -[main_kubeweekly_signup] -other = "Subscribe" - -[main_contribute] -other = "Contribute" - -[main_edit_this_page] -other = "Edit This Page" - -[main_page_history] -other ="Page History" - -[main_page_last_modified_on] -other = "Page last modified on" - -[main_by] -other = "by" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our 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..." - -# layouts > blog > pager - -[layouts_blog_pager_prev] -other = "<< Prev" - -[layouts_blog_pager_next] -other = "Next >>" - -# layouts > blog > list - -[layouts_case_studies_list_tell] -other = "Tell your story" - -# layouts > docs > glossary - -[layouts_docs_glossary_description] -other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to K8s, as well as more general terms that provide useful context." - -[layouts_docs_glossary_filter] -other = "Filter terms according to their tags" - -[layouts_docs_glossary_select_all] -other = "Select all" - -[layouts_docs_glossary_deselect_all] -other = "Deselect all" - -[layouts_docs_glossary_aka] -other = "Also known as" - -[layouts_docs_glossary_click_details_before] -other = "Click on the" - -[layouts_docs_glossary_click_details_after] -other = "indicators below to get a longer explanation for any particular term." - -# layouts > docs > search - -[layouts_docs_search_fetching] -other = "Fetching results.." - -# layouts > partial > feedback - -[layouts_docs_partials_feedback_thanks] -other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" - -[layouts_docs_partials_feedback_issue] -other = "Open an issue in the GitHub repo if you want to " - -[layouts_docs_partials_feedback_problem] -other = "report a problem" - -[layouts_docs_partials_feedback_or] -other = "or" - -[layouts_docs_partials_feedback_improvement] -other = "suggest an improvement" - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Forum" -[community_events_calendar] -other = "Events Calendar" - -# UI elements -[ui_search_placeholder] -other = "Search" diff --git a/i18n/hi.toml b/i18n/hi.toml new file mode 120000 index 0000000000..36d4a3bf76 --- /dev/null +++ b/i18n/hi.toml @@ -0,0 +1 @@ +../data/i18n/hi/hi.toml \ No newline at end of file diff --git a/i18n/id.toml b/i18n/id.toml deleted file mode 100644 index 101ea071ff..0000000000 --- a/i18n/id.toml +++ /dev/null @@ -1,227 +0,0 @@ -# i18n strings for the Indonesian version of the site (https://kubernetes.io/id/) -# NOTE: Please keep the entries in alphabetical order when editing - -[caution] -other = "Perhatian:" - -[cleanup_heading] -other = "Bersihkan" - -[community_events_calendar] -other = "Kalender Acara" - -[community_forum_name] -other = "Forum" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_title] -other = "Kamu sedang menampilkan dokumentasi untuk Kubernetes versi:" - -[deprecation_warning] -other = " dokumentasi sudah tidak dirawat lagi. Versi yang kamu lihat ini hanyalah snapshot statis. Untuk dokumentasi terkini, lihat " - -[deprecation_file_warning] -other = "Sudah usang" - -[docs_label_browse] -other = "Telusuri Dokumentasi" - -[docs_label_contributors] -other = "Kontributor" - -[docs_label_i_am] -other = "AKU..." - -[docs_label_users] -other = "Pengguna" - -[docs_version_current] -other = "(dokumentasi ini)" - -[docs_version_latest_heading] -other = "Versi terbaru" - -[docs_version_other_heading] -other = "Versi lama" - -[error_404_were_you_looking_for] -other = "Apakah kamu sedang mencari:" - -[examples_heading] -other = "Contoh" - -[feedback_heading] -other = "Masukan" - -[feedback_no] -other = "Tidak" - -[feedback_question] -other = "Apakah halaman ini membantu?" - -[feedback_yes] -other = "Ya" - -[input_placeholder_email_address] -other = "alamat email" - -[latest_version] -other = "versi terbaru." - -[layouts_blog_pager_prev] -other = "<< Sebelumnya" - -[layouts_blog_pager_next] -other = "Selanjutnya >>" - -[layouts_case_studies_list_tell] -other = "Ceritakan kisahmu" - -[layouts_docs_glossary_aka] -other = "Dikenal juga sebagai" - -[layouts_docs_glossary_description] -other = "Glosarium ini dimaksudkan sebagai daftar terminologi Kubernetes yang komprehensif dan terstandardisasi. Glosarium ini mencakup istilah-istilah teknis yang spesifik digunakan di Kubernetes, serta beberapa istilah umum untuk membantu memberikan konteks." - -[layouts_docs_glossary_deselect_all] -other = "Hapus semua pilihan" - -[layouts_docs_glossary_click_details_after] -other = "indikator di bawah ini untuk mendapatkan penjelasan yang lebih lengkap untuk istilah tertentu." - -[layouts_docs_glossary_click_details_before] -other = "Klik pada" - -[layouts_docs_glossary_filter] -other = "Filter istilah sesuai dengan penandanya" - -[layouts_docs_glossary_select_all] -other = "Pilih semua" - -[layouts_docs_partials_feedback_improvement] -other = "beri saran perbaikan" - -[layouts_docs_partials_feedback_issue] -other = "Buat isu di repositori GitHub jika kamu ingin " - -[layouts_docs_partials_feedback_or] -other = "atau" - -[layouts_docs_partials_feedback_problem] -other = "laporkan problem" - -[layouts_docs_partials_feedback_thanks] -other = "Terima kasih atas masukannya. Jika kamu mempunyai pertanyaan yang spesifik terkait bagaimana menggunakan Kubernetes, tanyakanlah di " - -[layouts_docs_search_fetching] -other = "Mengambil hasil..." - -[main_by] -other = "oleh" - -[main_cncf_project] -other = """Kami merupakan proyek yang lulus dari CNCF

""" - -[main_community_explore] -other = "Jelajahi komunitas" - -[main_contribute] -other = "Bantu" - -[main_copyright_notice] -other = """Linux Foundation ®. Hak cipta dilindungi. Linux Foundation telah mendaftarkan merek dagang dan pengunaannya. Perinciannya bisa dilihat pada halaman penggunaan merek dagang""" - -[main_documentation_license] -other = """Para Pencipta Kubernetes | Dokumentasi didistribusikan di bawah CC BY 4.0""" - -[main_github_invite] -other = "Tertarik untuk mengulik kode dari Kubernetes?" - -[main_github_view_on] -other = "Lihat di GitHub" - -[main_kubernetes_features] -other = "Fitur Kubernetes" - -[main_kubeweekly_baseline] -other = "Tertarik untuk mendapatkan info terbaru tentang Kubernetes? Daftarkan dirimu ke KubeWeekly." - -[main_kubernetes_past_link] -other = "Lihat buletin edisi sebelumnya" - -[main_kubeweekly_signup] -other = "Langganan" - -[main_page_history] -other ="Riwayat laman" - -[main_page_last_modified_on] -other = "Halaman diubah terakhir kali pada" - -[main_read_about] -other = "Baca tentang" - -[main_read_more] -other = "Baca lebih lanjut" - -[note] -other = "Catatan:" - -[objectives_heading] -other = "Tujuan" - -[options_heading] -other = "Opsi" - -[post_create_issue] -other = "Buat isu" - -[prerequisites_heading] -other = "Sebelum kamu memulai" - -[seealso_heading] -other = "Lihat juga" - -[subscribe_button] -other = "Langganan" - -[synopsis_heading] -other = "Sinopsis" - -[thirdparty_message] -other = """Bagian ini tertaut ke proyek-proyek pihak ketiga yang menyediakan fungsionalitas yang dibutuhkan oleh Kubernetes. Pencipta proyek Kubernetes tidak bertanggung jawab atas proyek-proyek tersebut. Laman ini mengikuti pedoman website CNCF dengan membuat daftar proyek menurut abjad. Untuk menambakan proyek ke dalam daftar ini, bacalah panduan sebelum mengirimkan perubahan.""" - -[ui_search_placeholder] -other = "Cari" - -[version_check_mustbe] -other = "Kubernetes servermu harus dalam versi " - -[version_check_mustbeorlater] -other = "Kubernetes servermu harus dalam versi yang sama atau lebih baru dari " - -[version_check_tocheck] -other = "Untuk melihat versi, tekan " - -[version_menu] -other = "Versi" - -[warning] -other = "Peringatan:" - -[whatsnext_heading] -other = "Selanjutnya" diff --git a/i18n/id.toml b/i18n/id.toml new file mode 120000 index 0000000000..250debab53 --- /dev/null +++ b/i18n/id.toml @@ -0,0 +1 @@ +../data/i18n/id/id.toml \ No newline at end of file diff --git a/i18n/it.toml b/i18n/it.toml deleted file mode 100644 index 7c0970dfaa..0000000000 --- a/i18n/it.toml +++ /dev/null @@ -1,197 +0,0 @@ -# i18n strings for the Italian site. -# NOTE: Please keep the entries in alphabetical order when editing - -[caution] -other = "Attenzione: " - -[cleanup_heading] -other = "In pulizia" - -[community_events_calendar] -other = "Calendario Eventi" - -[community_forum_name] -other = "Forum" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_warning] -other = " documentazione non è più manutenuta. La versione che stai visualizzando in questo momento è archiviata. Per una versione aggiornata, guarda " - -[deprecation_file_warning] -other = "Deprecata" - -[docs_label_browse] -other = "Sfoglia documenti" - -[docs_label_contributors] -other = "Contributors" - -[docs_label_i_am] -other = "Io Sono..." - -[docs_label_users] -other = "Utenti" - -[feedback_heading] -other = "Feedback" - -[feedback_no] -other = "No" - -[feedback_question] -other = "Questa pagina è stata di aiuto?" - -[feedback_yes] -other = "Sì" - -[input_placeholder_email_address] -other = "indirizzo email" - -[latest_version] -other = "ultima versione." - -[layouts_blog_pager_prev] -other = "<< Precedente" - -[layouts_blog_pager_next] -other = "Succesiva >>" - -[layouts_case_studies_list_tell] -other = "Racconta il tuo use case" - -[layouts_docs_glossary_aka] -other = "Anche noto come" - -[layouts_docs_glossary_description] -other = "Questo glossario vuole essere un aiuto per standardizzare la terminologia usata per Kubernetes. Include termini tecnici che sono specifici di Kubernetes, così come termini più generali che sono utili per dare un contesto." - -[layouts_docs_glossary_deselect_all] -other = "Deseleziona tutto" - -[layouts_docs_glossary_click_details_after] -other = "per il significato di questo termine." - -[layouts_docs_glossary_click_details_before] -other = "Fare click sull'icona" - -[layouts_docs_glossary_filter] -other = "Filtra i termini sulla base delle loro etichette" - -[layouts_docs_glossary_select_all] -other = "Seleziona tutto" - -[layouts_docs_partials_feedback_improvement] -other = "suggerire un miglioramento" - -[layouts_docs_partials_feedback_issue] -other = "Apri un issue sul repository GitHub se vuoi " - -[layouts_docs_partials_feedback_or] -other = "o" - -[layouts_docs_partials_feedback_problem] -other = "riportare un problema" - -[layouts_docs_partials_feedback_thanks] -other = "Grazie per il feedback. Se hai una domanda specifica su Kubernetes, chiedi su" - -[layouts_docs_search_fetching] -other = "Caricando i risultati..." - -[main_by] -other = "di" - -[main_cncf_project] -other = """Kubernetes è un progetto CNCF

""" - -[main_community_explore] -other = "Explora la community" - -[main_contribute] -other = "Contribuire" - -[main_copyright_notice] -other = """The Linux Foundation ®. Tutti i diritti riservati. The Linux Foundation ha marchi registrati e utilizza marchi commerciali. Per un elenco dei marchi di Linux Foundation, consulta la pagina sull'utilizzo dei marchi""" - -[main_documentation_license] -other = """Gli autori di Kubernetes | Documentazione distribuita sotto CC BY 4.0""" - -[main_edit_this_page] -other = "Modifica questa pagina" - -[main_github_create_an_issue] -other = "Crea un issue" - -[main_github_invite] -other = "Sei interessato a contribuire a Kubernetes?" - -[main_github_view_on] -other = "Visualizza su GitHub" - -[main_kubernetes_features] -other = "Caratteristiche di Kubernetes" - -[main_kubeweekly_baseline] -other = "Sei interessato a ricevere le ultime notizie su Kubernetes? Registrati alla newsletter KubeWeekly." - -[main_kubernetes_past_link] -other = "Vedi le precedenti mail della newsletter" - -[main_kubeweekly_signup] -other = "Iscriviti" - -[main_page_history] -other = "Storico della Pagina" - -[main_page_last_modified_on] -other = "Ultima modifica alla pagina" - -[main_read_about] -other = "Leggi" - -[main_read_more] -other = "Leggi di più" - -[note] -other = "Nota:" - -[objectives_heading] -other = "Obbiettivi" - -[prerequisites_heading] -other = "Prima di cominciare" - -[subscribe_button] -other = "Iscriviti" - -[ui_search_placeholder] -other = "Cerca" - -[version_check_mustbe] -other = "La tua installazione Kubernetes deve avere la versione " - -[version_check_mustbeorlater] -other = "La tua installazione Kubernetes deve avere almeno la versione " - -[version_check_tocheck] -other = "Per verificare la versione, esegui " - -[warning] -other = "Attenzione:" - -[whatsnext_heading] -other = "Voci correlate" diff --git a/i18n/it.toml b/i18n/it.toml new file mode 120000 index 0000000000..bf4e0e004c --- /dev/null +++ b/i18n/it.toml @@ -0,0 +1 @@ +../data/i18n/it/it.toml \ No newline at end of file diff --git a/i18n/ja.toml b/i18n/ja.toml deleted file mode 100644 index a7a103f435..0000000000 --- a/i18n/ja.toml +++ /dev/null @@ -1,203 +0,0 @@ -# i18n strings for the English (main) site. -# NOTE: Please keep the entries in alphabetical order when editing - -[caution] -other = "注意:" - -[cleanup_heading] -other = "クリーンアップ" - -[community_events_calendar] -other = "イベントカレンダー" - -[community_forum_name] -other = "フォーラム" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_file_warning] -other = "廃止予定" - -[deprecation_title] -other = "現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン:" - -[deprecation_warning] -other = " のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: " - -[docs_label_browse] -other = "ドキュメントの参照" - -[docs_label_contributors] -other = "コントリビューター" - -[docs_label_i_am] -other = "私は..." - -[docs_label_users] -other = "ユーザー" - -[feedback_heading] -other = "フィードバック" - -[feedback_no] -other = "いいえ" - -[feedback_question] -other = "このページは役に立ちましたか?" - -[feedback_yes] -other = "はい" - -[input_placeholder_email_address] -other = "メールアドレス" - -[latest_version] -other = "最新バージョン" - -[layouts_blog_pager_prev] -other = "<< 前" - -[layouts_blog_pager_next] -other = "次 >>" - -[layouts_case_studies_list_tell] -other = "あなたの話を聞かせてください" - -[layouts_docs_glossary_aka] -other = "またの名を" - -[layouts_docs_glossary_description] -other = "この用語集は、Kubernetesの用語の包括的で標準化されたリストを対象としています。これには、Kubernetesに固有で有用なコンテキストを提供しつつも、より一般的な技術用語が含まれています。" - -[layouts_docs_glossary_deselect_all] -other = "すべての選択を解除" - -[layouts_docs_glossary_click_details_after] -other = "特定の用語の詳細な説明を取得するには、以下のインジケータを使用します。" - -[layouts_docs_glossary_click_details_before] -other = "Click on the" # TODO: Translate me - -[layouts_docs_glossary_filter] -other = "タグに従って用語をフィルタ" - -[layouts_docs_glossary_select_all] -other = "すべてを選択" - -[layouts_docs_partials_feedback_improvement] -other = "改善を提案" - -[layouts_docs_partials_feedback_issue] -other = "Open an issue in the GitHub repo if you want to " # TODO: Translate me - -[layouts_docs_partials_feedback_or] -other = "or" # TODO: Translate me - -[layouts_docs_partials_feedback_problem] -other = "問題を報告する" - -[layouts_docs_partials_feedback_thanks] -other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" # TODO: Translate me - -[layouts_docs_search_fetching] -other = "結果を取得しています..." - -[main_by] -other = "by" - -[main_cncf_project] -other = """私達はCNCF graduated プロジェクトです

""" - -[main_community_explore] -other = "コミュニティを探す" - -[main_contribute] -other = "コントリビュート" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_edit_this_page] -other = "ページ編集" - -[main_github_invite] -other = "Kubernetesのコードを編集することに興味がありますか?" - -[main_github_create_an_issue] -other = "Issue作成" - -[main_github_view_on] -other = "GitHubで参照する" - -[main_kubernetes_features] -other = "Kubernetesの機能" - -[main_kubeweekly_baseline] -other = "最新のKubernetesのニュースを受け取りたいですか? KubeWeeklyにサインアップしてください。" - -[main_kubernetes_past_link] -other = "過去のニュースレターを見る" - -[main_kubeweekly_signup] -other = "登録" - -[main_page_history] -other ="ページ履歴" - -[main_page_last_modified_on] -other = "ページの最終更新" - -[main_read_about] -other = "Read about" #other = "について参照する" TODO: Translate me - -[main_read_more] -other = "続きを読む" - -[note] -other = "備考:" - -[objectives_heading] -other = "目標" - -[prerequisites_heading] -other = "始める前に" - -[subscribe_button] -other = "購読する" - -[ui_search_placeholder] -other = "検索" - -[version_check_mustbe] -other = "作業するKubernetesサーバーは次のバージョンである必要があります: " - -[version_check_mustbeorlater] -other = "作業するKubernetesサーバーは次のバージョン以降のものである必要があります: " - -[version_check_tocheck] -other = "バージョンを確認するには次のコマンドを実行してください: " - -[version_menu] -other = "バージョン" - -[warning] -other = "警告:" - -[whatsnext_heading] -other = "次の項目" diff --git a/i18n/ja.toml b/i18n/ja.toml new file mode 120000 index 0000000000..6b08e1f22f --- /dev/null +++ b/i18n/ja.toml @@ -0,0 +1 @@ +../data/i18n/ja/ja.toml \ No newline at end of file diff --git a/i18n/ko.toml b/i18n/ko.toml deleted file mode 100644 index f79f689b88..0000000000 --- a/i18n/ko.toml +++ /dev/null @@ -1,232 +0,0 @@ -# i18n strings for the Korean translation. -# NOTE: Please keep the entries in alphabetical order when editing -[announcement_title] -other = "Black lives matter." - -[announcement_message] -other = "우리는 흑인 공동체를 지지합니다.
인종차별은 용납될 수 없습니다.
인종차별은 [쿠버네티스 프로젝트의 핵심 가치](https://git.k8s.io/community/values.md)에 상충되며 우리 공동체는 이를 용인하지 않습니다." - -[caution] -other = "주의:" - -[cleanup_heading] -other = "정리하기" - -[community_events_calendar] -other = "이벤트 캘린더" - -[community_forum_name] -other = "Forum" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_title] -other = "해당 문서의 쿠버네티스 버전:" - -[deprecation_warning] -other = " 문서는 더 이상 적극적으로 관리되지 않음. 현재 보고있는 문서는 정적 스냅샷임. 최신 문서를 위해서는, 다음을 참고. " - -[deprecation_file_warning] -other = "사용 중단됨(deprecated)" - -[docs_label_browse] -other = "문서 둘러보기" - -[docs_label_contributors] -other = "컨트리뷰터" - -[docs_label_i_am] -other = "나는..." - -[docs_label_users] -other = "사용자" - -[docs_version_current] -other = "(현재 문서)" - -[docs_version_latest_heading] -other = "최신 버전" - -[docs_version_other_heading] -other = "이전 버전" - -[error_404_were_you_looking_for] -other = "무엇과 관련된 정보를 찾으시나요?" - -[examples_heading] -other = "예시" - -[feedback_heading] -other = "피드백" - -[feedback_question] -other = "이 페이지가 도움이 되었나요?" - -[feedback_yes] -other = "네" - -[feedback_no] -other = "아니요" - -[input_placeholder_email_address] -other = "전자 우편 주소" - -[latest_version] -other = "최신 버전." - -[layouts_blog_pager_prev] -other = "<< 이전" - -[layouts_blog_pager_next] -other = "다음 >>" - -[layouts_case_studies_list_tell] -other = "당신의 이야기를 들려주세요." - -[layouts_docs_glossary_aka] -other = "별칭" - -[layouts_docs_glossary_description] -other = "이 용어집은 쿠버네티스 용어의 종합적이고 표준화된 리스트를 제공한다. 용어집은 K8s 고유의 기술 용어 뿐만 아니라, 맥락을 이해하는데 유용한 더 일반적인 용어도 포함한다. " - -[layouts_docs_glossary_deselect_all] -other = "모두 선택 해제" - -[layouts_docs_glossary_click_details_after] -other = "표시를 클릭하면 각 용어에 대한 더 자세한 설명을 볼 수 있다." - -[layouts_docs_glossary_click_details_before] -other = "다음" - -[layouts_docs_glossary_filter] -other = "태그에 따라 용어 필터링" - -[layouts_docs_glossary_select_all] -other = "모두 선택" - -[layouts_docs_partials_feedback_improvement] -other = "개선 제안이 가능합니다." - -[layouts_docs_partials_feedback_issue] -other = "원한다면 GitHub 리포지터리에 이슈를 열어서" - -[layouts_docs_partials_feedback_or] -other = "또는" - -[layouts_docs_partials_feedback_problem] -other = "문제 리포트" - -[layouts_docs_partials_feedback_thanks] -other = "피드백 감사합니다. 쿠버네티스 사용 방법에 대해서 구체적이고 답변 가능한 질문이 있다면, 다음 링크에서 질문하십시오." - -[layouts_docs_search_fetching] -other = "결과를 가져오는 중.." - -[main_by] -other = ", 다음 변경에 의해서:" - -[main_cncf_project] -other = """쿠버네티스는 CNCF graduated 프로젝트입니다.

""" - -[main_community_explore] -other = "커뮤니티 둘러보기" - -[main_contribute] -other = "기여하기" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_github_invite] -other = "쿠버네티스 핵심 코드 베이스를 살펴보는데 관심이 있으십니까?" - -[main_github_view_on] -other = "GitHub에서 보기" - -[main_kubernetes_features] -other = "쿠버네티스 기능" - -[main_kubeweekly_baseline] -other = "최신 쿠버네티스 뉴스 수신에 관심이 있으십니까? KubeWeekly를 신청하세요." - -[main_kubernetes_past_link] -other = "과거 뉴스레터 보기" - -[main_kubeweekly_signup] -other = "구독하기" - -[main_page_history] -other ="페이지 변경 이력" - -[main_page_last_modified_on] -other = "최종 수정일시" - -[main_read_about] -other = "읽어 보기" - -[main_read_more] -other = "더 읽기" - -[note] -other = "참고:" - -[objectives_heading] -other = "목적" - -[options_heading] -other = "옵션" - -[post_create_issue] -other = "이슈 생성" - -[prerequisites_heading] -other = "시작하기 전에" - -[seealso_heading] -other = "더 보기" - -[subscribe_button] -other = "구독" - -[synopsis_heading] -other = "시놉시스" - -[thirdparty_message] -other = """이 섹션은 쿠버네티스에 필요한 기능을 제공하는 써드파티 프로젝트와 관련이 있다. 쿠버네티스 프로젝트 작성자는 써드파티 프로젝트에 책임이 없다. 이 페이지는 CNCF 웹사이트 가이드라인에 따라 프로젝트를 알파벳 순으로 나열한다. 이 목록에 프로젝트를 추가하려면 변경사항을 제출하기 전에 콘텐츠 가이드를 읽어본다.""" - -[ui_search_placeholder] -other = "검색하기" - -[version_check_mustbe] -other = "쿠버네티스 서버의 버전은 다음과 같아야 함. 버전: " - -[version_check_mustbeorlater] -other = "쿠버네티스 서버의 버전은 다음과 같거나 더 높아야 함. 버전: " - -[version_check_tocheck] -other = "버전 확인을 위해서, 다음 커맨드를 실행 " - -[version_menu] -other = "버전" - -[warning] -other = "경고:" - -[whatsnext_heading] -other = "다음 내용" diff --git a/i18n/ko.toml b/i18n/ko.toml new file mode 120000 index 0000000000..093839dd5d --- /dev/null +++ b/i18n/ko.toml @@ -0,0 +1 @@ +../data/i18n/ko/ko.toml \ No newline at end of file diff --git a/i18n/nl.toml b/i18n/nl.toml deleted file mode 100644 index a0aa6faee4..0000000000 --- a/i18n/nl.toml +++ /dev/null @@ -1,197 +0,0 @@ -# i18n strings for the Dutch (main) site. - -[deprecation_warning] -other = " documentatie wordt niet langer actief onderhouden. De versie die u momenteel bekijkt is een statische momentopname. Zie voor bijgewerkte documentatie " - -[deprecation_file_warning] -other = "Verouderd" - -[objectives_heading] -other = "Doelen" - -[cleanup_heading] -other = "Opschonen" - -[prerequisites_heading] -other = "Voordat je begint" - -[whatsnext_heading] -other = "Wat nu volgt" - -[feedback_heading] -other = "Feedback" - -[feedback_question] -other = "Was deze pagina nuttig?" - -[feedback_yes] -other = "Ja" - -[feedback_no] -other = "Nee" - -[latest_version] -other = "laatste versie." - -[version_check_mustbe] -other = "Je Kubernetes server moet op de volgende versie zitten " - -[version_check_mustbeorlater] -other = "Je Kubernetes server moet op de volgende of latere versie zitten " - -[version_check_tocheck] -other = "Voer het volgende in om de versie te controleren " - -[caution] -other = "Voorzichtig:" - -[note] -other = "Opmerking:" - -[warning] -other = "Opletten:" - -[main_read_about] -other = "Lees over" - -[main_read_more] -other = "Lees meer" - -[main_github_invite] -other = "Geïnteresseerd om aan de core Kubernetes code base te werken?" - -[main_github_view_on] -other = "Bekijk op GitHub" - -[main_github_create_an_issue] -other = "Maak een Issue" - -[main_community_explore] -other = "Verken de community" - -[main_kubernetes_features] -other = "Kubernetes functies" - -[main_cncf_project] -other = """We zijn een CNCF project

""" - -[main_kubeweekly_baseline] -other = "Wil je het laatste Kubernates nieuws ontvangen? Abonneer je op KubeWeekly." - -[main_kubernetes_past_link] -other = "Eerdere nieuwsbrieven bekijken" - -[main_kubeweekly_signup] -other = "Abonneren" - -[main_contribute] -other = "Bijdragen" - -[main_edit_this_page] -other = "Bewerk deze pagina" - -[main_page_history] -other ="Pagina geschiedenis" - -[main_page_last_modified_on] -other = "Pagina laatst gewijzigd op" - -[main_by] -other = "door" - -[main_documentation_license] -other = """De Kubernetes auteurs | Documentatie verspreid onder CC BY 4.0""" - -[main_copyright_notice] -other = """The Linux Foundation ®. Alle rechten voorbehouden. De Linux Foundation heeft handelsmerken geregistreerd en handelsmerken. gebruikt Voor een lijst met handelsmerken van The Linux Foundation raadpleegt u onzeHandelsmerkgebruikspagina""" - -# Labels for the docs portal home page. -[docs_label_browse] -other = "Bladeren door documenten" - -[docs_label_contributors] -other = "Bijdragers" - -[docs_label_users] -other = "Gebruikers" - -[docs_label_i_am] -other = "IK BEN..." - -# layouts > blog > pager - -[layouts_blog_pager_prev] -other = "<< Vorige" - -[layouts_blog_pager_next] -other = "Volgende >>" - -# layouts > blog > list - -[layouts_case_studies_list_tell] -other = "Vertel jouw verhaal" - -# layouts > docs > glossary - -[layouts_docs_glossary_description] -other = "Deze verklarende woordenlijst is bedoeld als een uitgebreide, gestandaardiseerde lijst van Kubernetes-terminologie. Het bevat technische termen die specifiek zijn voor K8s, evenals meer algemene termen die een bruikbare context bieden." - -[layouts_docs_glossary_filter] -other = "Filter termen op basis van hun tags" - -[layouts_docs_glossary_select_all] -other = "Alles selecteren" - -[layouts_docs_glossary_deselect_all] -other = "Alles deselecteren" - -[layouts_docs_glossary_aka] -other = "Ook bekend als" - -[layouts_docs_glossary_click_details_before] -other = "Klik op de" - -[layouts_docs_glossary_click_details_after] -other = "onderstaande indicatoren om een ​​langere verklaring voor een bepaalde term te krijgen." - -# layouts > docs > search - -[layouts_docs_search_fetching] -other = "Resultaten ophalen.." - -# layouts > partial > feedback - -[layouts_docs_partials_feedback_thanks] -other = "Bedankt voor de feedback. Als je een specifieke vraag hebt, die beantwoord moet worden, over het gebruik van Kubernetes, vraag het dan op" - -[layouts_docs_partials_feedback_issue] -other = "Open een probleem in de GitHub-repo " - -[layouts_docs_partials_feedback_problem] -other = "meld een probleem" - -[layouts_docs_partials_feedback_or] -other = "of" - -[layouts_docs_partials_feedback_improvement] -other = "doe een suggestie voor een verbetering" - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Forum" -[community_events_calendar] -other = "Evenementenkalender" -[community_youtube_name] -other = "YouTube" - -# UI elements -[ui_search_placeholder] -other = "Zoeken" diff --git a/i18n/nl.toml b/i18n/nl.toml new file mode 120000 index 0000000000..181ed9aedb --- /dev/null +++ b/i18n/nl.toml @@ -0,0 +1 @@ +../data/i18n/nl/nl.toml \ No newline at end of file diff --git a/i18n/no.toml b/i18n/no.toml deleted file mode 100644 index ff786d7d35..0000000000 --- a/i18n/no.toml +++ /dev/null @@ -1,68 +0,0 @@ -# i18n strings for the Norwegian translation. - -[main_read_about] -other = "Les om" - -[main_read_more] -other = "Les mer" - -[main_github_invite] -other = "Interessert kode i Kubernetes?" - -[main_github_view_on] -other = "Åpne på GitHub" - -[main_github_create_an_issue] -other = "Opprett en issue" - -[main_community_explore] -other = "Utforsk folkene bak Kubernetes" - -[main_kubernetes_features] -other = "Egenskaper i Kubernetes" - -[main_cncf_project] -other = """Vi er et CNCF-prosjekt

""" - -[main_contribute] -other = "Bidra" - -[main_edit_this_page] -other = "Endre denne siden" - -[main_page_history] -other ="Side-historikk" - -[main_page_last_modified_on] -other = "Side sist endret" - -[main_by] -other = "av" - -[main_documentation_license] -other = """Kubernetes-forfatterene | Dokumentasjonen er utgitt med CC BY 4.0-lisens""" - -[main_copyright_notice] -other = """The Linux Foundation ®. Alle retter er reservert. The Linux Foundation har registrerte varemerker. For en oversikt, se Bruk av varemerker""" - -# Labels for the docs portal home page. -[docs_label_browse] -other = "All dokumentasjon" - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Forum" -[community_events_calendar] -other = "Kalender" - -# UI elements -[ui_search_placeholder] -other = "Søk" \ No newline at end of file diff --git a/i18n/no.toml b/i18n/no.toml new file mode 120000 index 0000000000..d27b699464 --- /dev/null +++ b/i18n/no.toml @@ -0,0 +1 @@ +../data/i18n/no/no.toml \ No newline at end of file diff --git a/i18n/pl.toml b/i18n/pl.toml deleted file mode 100644 index 9621301a49..0000000000 --- a/i18n/pl.toml +++ /dev/null @@ -1,197 +0,0 @@ -# i18n strings for the Polish site. -# NOTE: Please keep the entries in alphabetical order when editing - -[caution] -other = "Ostrzeżenie:" - -[cleanup_heading] -other = "Sprzątamy po sobie" - -[community_events_calendar] -other = "Kalendarz wydarzeń" - -[community_forum_name] -other = "Forum" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_warning] -other = " dokumentacja nie jest już aktualizowana. Wyświetlona jest wersja archiwalna. Po aktualną dokumentację zajrzyj na" - -[deprecation_file_warning] -other = "Przestarzały" - -[docs_label_browse] -other = "Przeglądaj dokumentację" - -[docs_label_contributors] -other = "Współautorzy" - -[docs_label_i_am] -other = "Jestem..." - -[docs_label_users] -other = "Użytkownicy" - -[feedback_heading] -other = "Twoja opinia" - -[feedback_no] -other = "Nie" - -[feedback_question] -other = "Czy ta strona była przydatna?" - -[feedback_yes] -other = "Tak" - -[input_placeholder_email_address] -other = "adres e-mail" - -[latest_version] -other = "to najnowsza wersja." - -[layouts_blog_pager_prev] -other = "<< Poprzedni" - -[layouts_blog_pager_next] -other = "Następny >>" - -[layouts_case_studies_list_tell] -other = "Opowiedz swoją historię" - -[layouts_docs_glossary_aka] -other = "Znany też jako" - -[layouts_docs_glossary_description] -other = "Celem tego słownika jest przedstawienie wszechstronnej, ujednoliconej listy terminologii związanej z projektem Kubernetes. Słownik zawiera terminy specyficzne dla Kubernetesa, a także pojęcia bardziej ogólne, umożliwiające lepsze zrozumienie kontekstu." - -[layouts_docs_glossary_deselect_all] -other = "Odznacz wszystko" - -[layouts_docs_glossary_click_details_after] -other = "po dokładniejsze wytłumaczenie." - -[layouts_docs_glossary_click_details_before] -other = "Kliknij w" - -[layouts_docs_glossary_filter] -other = "Znajdź pojęcia według etykiet" - -[layouts_docs_glossary_select_all] -other = "Zaznacz wszystko" - -[layouts_docs_partials_feedback_improvement] -other = "zaproponować poprawkę" - -[layouts_docs_partials_feedback_issue] -other = "Otwórz zgłoszenie w repozytorium GitHub, jeśli chcesz " - -[layouts_docs_partials_feedback_or] -other = "lub" - -[layouts_docs_partials_feedback_problem] -other = "zgłosić problem" - -[layouts_docs_partials_feedback_thanks] -other = "Dziękujemy za informację zwrotną. Jeśli masz konkretne pytanie dotyczące użycia Kubernetesa, odwiedź" - -[layouts_docs_search_fetching] -other = "Pobieram wyniki.." - -[main_by] -other = "przez" - -[main_cncf_project] -other = """Nasz projekt jest uznany przez CNCF za dojrzały

""" - -[main_community_explore] -other = "Poznaj społeczność" - -[main_contribute] -other = "Wnieś swój wkład" - -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" - -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" - -[main_edit_this_page] -other = "Edytuj stronę" - -[main_github_create_an_issue] -other = "Zgłoś problem" - -[main_github_invite] -other = "Chcesz zacząć współtworzyć kod Kubernetesa?" - -[main_github_view_on] -other = "Zajrzyj na GitHub" - -[main_kubernetes_features] -other = "Funkcjonalności Kubernetesa" - -[main_kubeweekly_baseline] -other = "Zapisz się na KubeWeekly, jeśli jesteś zainteresowany najnowszymi wiadomościami o Kubernetesie." - -[main_kubernetes_past_link] -other = "Poprzednie newslettery" - -[main_kubeweekly_signup] -other = "Zapisz się" - -[main_page_history] -other ="Historia strony" - -[main_page_last_modified_on] -other = "Ostatnia modyfikacja strony" - -[main_read_about] -other = "Przeczytaj o" - -[main_read_more] -other = "Przeczytaj więcej" - -[note] -other = "Informacja:" - -[objectives_heading] -other = "Cele" - -[prerequisites_heading] -other = "Nim zaczniesz" - -[subscribe_button] -other = "Subskrybuj" - -[ui_search_placeholder] -other = "Szukaj" - -[version_check_mustbe] -other = "Twój serwer Kubernetes musi być w wersji " - -[version_check_mustbeorlater] -other = "Twój serwer Kubernetes musi być co najmniej w wersji " - -[version_check_tocheck] -other = "Aby sprawdzić wersję, wpisz " - -[warning] -other = "Uwaga:" - -[whatsnext_heading] -other = "Następne:" diff --git a/i18n/pl.toml b/i18n/pl.toml new file mode 120000 index 0000000000..e4ecf8192e --- /dev/null +++ b/i18n/pl.toml @@ -0,0 +1 @@ +../data/i18n/pl/pl.toml \ No newline at end of file diff --git a/i18n/pt-br.toml b/i18n/pt-br.toml deleted file mode 100644 index 3f55a665b3..0000000000 --- a/i18n/pt-br.toml +++ /dev/null @@ -1,240 +0,0 @@ - # i18n strings for the Portuguese (main) site. -[caution] -other = "Cuidado:" - -[cleanup_heading] -other = "Limpando" - -[community_events_calendar] -other = "Calendário de Eventos" - -[community_forum_name] -other = "Fórum" - -[community_github_name] -other = "GitHub" - -# Community links - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[deprecation_file_warning] -other = "Descontinuado" - -[deprecation_title] -other = "Você está vendo a documentação do Kubernetes versão:" - -[deprecation_warning] -other = " a documentação não é mais mantida ativamente. A versão que você está visualizando no momento é uma captura instantânea estática. Para obter documentação atualizada, consulte " - -[docs_label_browse] -other = "Procurar documentos" - -[docs_label_contributors] -other = "Colaboradores" - -[docs_label_i_am] -other = "Eu sou..." - -[docs_label_users] -other = "Usuários" - -[docs_version_current] -other = "(esta documentação)" - -[docs_version_latest_heading] -other = "Versão mais recente" - -[docs_version_other_heading] -other = "Versões mais antigas" - -[error_404_were_you_looking_for] -other = "Talvez você estivesse procurando por:" - -[examples_heading] -other = "Exemplos" - -[feedback_heading] -other = "Comentários" - -[feedback_no] -other = "Não" - -[feedback_question] -other = "Esta página foi útil?" - -[feedback_yes] -other = "Sim" - -[input_placeholder_email_address] -other = "endereço de e-mail" - -[latest_version] -other = "última versão." - -[layouts_blog_pager_next] -other = "Próximo >>" - -[layouts_blog_pager_prev] -other = "<< Anterior" - -[layouts_case_studies_list_tell] -other = "Conte seu caso" - -[layouts_docs_glossary_aka] -other = "Também conhecido como" - -[layouts_docs_glossary_click_details_after] -other = "indicadores abaixo para uma maior explicação sobre um termo em particular." - -[layouts_docs_glossary_click_details_before] -other = "Clique nos" - -[layouts_docs_glossary_description] -other = "Este glossário pretende ser uma lista padronizada e abrangente da terminologia do Kubernetes. Inclui termos técnicos específicos dos K8s, além de termos mais gerais que fornecem um contexto útil." - -[layouts_docs_glossary_deselect_all] -other = "Desmarcar tudo" - -[layouts_docs_glossary_filter] -other = "Filtrar termos de acordo com suas tags" - -[layouts_docs_glossary_select_all] -other = "Selecionar tudo" - -[layouts_docs_partials_feedback_improvement] -other = "sugerir uma melhoria" - -[layouts_docs_partials_feedback_issue] -other = "Abra um bug no repositório do GitHub se você deseja " - -[layouts_docs_partials_feedback_or] -other = "ou" - -[layouts_docs_partials_feedback_problem] -other = "reportar um problema" - -[layouts_docs_partials_feedback_thanks] -other = "Obrigado pelo feedback. Se você tiver uma pergunta específica sobre como utilizar o Kubernetes, faça em" - -[layouts_docs_search_fetching] -other = "Buscando resultados.." - -# Main page localization - -[main_by] -other = "por" - -[main_cncf_project] -other = """Nós somos uma CNCF projeto graduado

""" - -[main_community_explore] -other = "Explore a comunidade" - -[main_contribute] -other = "Contribuir" - -[main_copyright_notice] -other = """A Fundação Linux ®. Todos os direitos reservados. A Linux Foundation tem marcas registradas e usa marcas registradas. Para uma lista de marcas registradas da The Linux Foundation, por favor, veja nossa Página de uso de marca registrada""" - -[main_documentation_license] -other = """Os autores do Kubernetes | Documentação Distribuída sob CC BY 4.0""" - -[main_edit_this_page] -other = "Edite essa página" - -[main_github_create_an_issue] -other = "Abra um bug" - -[main_github_invite] -other = "Interessado em mergulhar na base de código do Kubernetes?" - -[main_github_view_on] -other = "Veja no Github" - -[main_kubernetes_features] -other = "Recursos do Kubernetes" - -[main_kubernetes_past_link] -other = "Veja boletins passados" - -[main_kubeweekly_baseline] -other = "Interessado em receber as últimas novidades sobre Kubernetes? Inscreva-se no KubeWeekly." - -[main_kubeweekly_signup] -other = "Se inscrever" - -[main_page_history] -other ="História da página" - -[main_page_last_modified_on] -other = "Última modificação da página em" - -[main_read_about] -other = "Ler sobre" - -[main_read_more] -other = "Consulte Mais informação" - -# Miscellaneous - -[note] -other = "Nota:" - -[objectives_heading] -other = "Objetivos" - -[options_heading] -other = "Opções" - -[post_create_issue] -other = "Abra um bug" - -[prerequisites_heading] -other = "Antes de você começar" - -[subscribe_button] -other = "Se inscrever" - -[thirdparty_message] -other = """Esta seção tem links para projetos de terceiros que fornecem a funcionalidade exigida pelo Kubernetes. Os autores do projeto Kubernetes não são responsáveis por esses projetos. Esta página obedece as diretrizes de conteúdo do site CNCF, listando os itens em ordem alfabética. Para adicionar um projeto a esta lista, leia o guia de conteúdo antes de enviar sua alteração.""" - -[ui_search_placeholder] -other = "Procurar" - -[version_check_mustbeorlater] -other = "O seu servidor Kubernetes deve estar em ou depois da versão " - -[version_check_mustbe] -other = "Seu servidor Kubernetes deve ser versão" - -[version_check_tocheck] -other = "Para verificar a versão, digite " - -[version_menu] -other = "Versões" - -[warning] -other = "Aviso:" - -[whatsnext_heading] -other = "Qual é o próximo" - -[print_printable_section] -other = "Essa é a versão completa de impressão dessa seção" - -[print_click_to_print] -other = "Clique aqui para imprimir" - -[print_show_regular] -other = "Retornar à visualização normal" - -[print_entire_section] -other = "Imprimir toda essa seção" diff --git a/i18n/pt-br.toml b/i18n/pt-br.toml new file mode 120000 index 0000000000..b76a47d58e --- /dev/null +++ b/i18n/pt-br.toml @@ -0,0 +1 @@ +../data/i18n/pt/pt-br.toml \ No newline at end of file diff --git a/i18n/ru.toml b/i18n/ru.toml deleted file mode 100644 index 37447c0cad..0000000000 --- a/i18n/ru.toml +++ /dev/null @@ -1,201 +0,0 @@ -# i18n strings for the Russian (main) site. - -[deprecation_warning] -other = " документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Актуальную документацию вы можете найти " - -[deprecation_file_warning] -other = "Устаревшая" - -[objectives_heading] -other = "Цели" - -[cleanup_heading] -other = "Очистка" - -[prerequisites_heading] -other = "Подготовка к работе" - -[subscribe_button] -other = "Подписаться" - -[whatsnext_heading] -other = "Что дальше" - -[feedback_heading] -other = "Обратная связь" - -[feedback_question] -other = "Была ли эта страница полезной?" - -[feedback_yes] -other = "Да" - -[feedback_no] -other = "Нет" - -[latest_version] -other = "последняя версия." - -[version_check_mustbe] -other = "Ваш сервер Kubernetes должен быть версии " - -[version_check_mustbeorlater] -other = "Ваш сервер Kubernetes должен быть версии или позже, чем версия " - -[version_check_tocheck] -other = "Чтобы проверить версию, введите " - -[caution] -other = "Внимание:" - -[note] -other = "Заметка:" - -[warning] -other = "Предупреждение:" - -[main_read_about] -other = "Прочитать о" - -[main_read_more] -other = "Прочитать больше" - -[main_github_invite] -other = "Хотите взломать ядро кодовой базы Kubernetes?" - -[main_github_view_on] -other = "Посмотреть на GitHub" - -[main_github_create_an_issue] -other = "Сообщить о проблеме" - -[main_community_explore] -other = "Познакомиться с сообществом" - -[main_kubernetes_features] -other = "Возможности Kubernetes" - -[main_cncf_project] -other = """Мы являемся проектом CNCF

""" - -[main_kubeweekly_baseline] -other = "Интересуетесь последними новостями Kubernetes? Зарегистрируйтесь в KubeWeekly." - -[main_kubernetes_past_link] -other = "Посмотреть последние новости" - -[main_kubeweekly_signup] -other = "Подписаться" - -[main_contribute] -other = "Помочь проекту" - -[main_edit_this_page] -other = "Редактировать эту страницу" - -[main_page_history] -other ="История страницы" - -[main_page_last_modified_on] -other = "Последний раз страница редактировалась" - -[main_by] -other = "by" - -[main_documentation_license] -other = """Авторы Kubernetes | Документация распространяется под лицензией CC BY 4.0""" - -[main_copyright_notice] -other = """The Linux Foundation ®. Все права защищены. The Linux Foundation является зарегистрированной торговой маркой. Список торговых марок The Linux Foundation приведен на странице использования торговых марок""" - -# Labels for the docs portal home page. -[docs_label_browse] -other = "Просмотр документации" - -[docs_label_contributors] -other = "Участники сообщества" - -[docs_label_users] -other = "Пользователи" - -[docs_label_i_am] -other = "Я ..." - -# layouts > blog > pager - -[layouts_blog_pager_prev] -other = "<< Назад" - -[layouts_blog_pager_next] -other = "Вперёд >>" - -# layouts > blog > list - -[layouts_case_studies_list_tell] -other = "Расскажите свою историю" - -# layouts > docs > glossary - -[layouts_docs_glossary_description] -other = "Данный глоссарий должен стать исчерпывающим стандартизированным списком терминологии в Kubernetes. Он включает технические термины, специфичные для K8s, а также более общие термины, которые полезно знать." - -[layouts_docs_glossary_filter] -other = "Фильтрация терминов по тегам" - -[layouts_docs_glossary_select_all] -other = "Выделить всё" - -[layouts_docs_glossary_deselect_all] -other = "Отменить выбор всех тегов" - -[layouts_docs_glossary_aka] -other = "Также известный как" - -[layouts_docs_glossary_click_details_before] -other = "Нажмите на значок" - -[layouts_docs_glossary_click_details_after] -other = "для получения более подробное объяснения по интересующему термину." - -# layouts > docs > search - -[layouts_docs_search_fetching] -other = "Получение результатов.." - -# layouts > partial > feedback - -[layouts_docs_partials_feedback_thanks] -other = "Спасибо за отзыв! Если у вас есть конкретный вопрос об использовании Kubernetes, спрашивайте" - -[layouts_docs_partials_feedback_issue] -other = "Сообщите о проблеме в репозитории GitHub, если вы хотите " - -[layouts_docs_partials_feedback_problem] -other = "сообщить о проблеме" - -[layouts_docs_partials_feedback_or] -other = "или" - -[layouts_docs_partials_feedback_improvement] -other = "предложить улучшение" - -# Community links -[community_twitter_name] -other = "Twitter" -[community_github_name] -other = "GitHub" -[community_slack_name] -other = "Slack" -[community_stack_overflow_name] -other = "Stack Overflow" -[community_forum_name] -other = "Форум" -[community_events_calendar] -other = "Календарь событий" - -# UI elements -[ui_search_placeholder] -other = "Поиск" - -[input_placeholder_email_address] -other = "адрес электронной почты" \ No newline at end of file diff --git a/i18n/ru.toml b/i18n/ru.toml new file mode 120000 index 0000000000..4e9327662b --- /dev/null +++ b/i18n/ru.toml @@ -0,0 +1 @@ +../data/i18n/ru/ru.toml \ No newline at end of file diff --git a/i18n/uk.toml b/i18n/uk.toml deleted file mode 100644 index ec60865783..0000000000 --- a/i18n/uk.toml +++ /dev/null @@ -1,255 +0,0 @@ -# i18n strings for the Ukrainian (main) site. - -[caution] -# other = "Caution:" -other = "Увага:" - -[cleanup_heading] -# other = "Cleaning up" -other = "Очистка" - -[community_events_calendar] -# other = "Events Calendar" -other = "Календар подій" - -[community_forum_name] -# other = "Forum" -other = "Форум" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_warning] -# other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " -other = " документація більше не підтримується. Версія, яку ви зараз переглядаєте, є статичною. Для перегляду актуальної документації дивіться " - -[deprecation_file_warning] -# other = "Deprecated" -other = "Застаріла версія" - -[docs_label_browse] -# other = "Browse Docs" -other = "Переглянути документацію" - -[docs_label_contributors] -# other = "Contributors" -other = "Контриб'ютори" - -[docs_label_i_am] -# other = "I AM..." -other = "Я..." - -[docs_label_users] -# other = "Users" -other = "Користувачі" - -[feedback_heading] -# other = "Feedback" -other = "Ваша думка" - -[feedback_no] -# other = "No" -other = "Ні" - -[feedback_question] -# other = "Was this page helpful?" -other = "Чи була ця сторінка корисною?" - -[feedback_yes] -# other = "Yes" -other = "Так" - -[input_placeholder_email_address] -# other = "email address" -other = "електронна адреса" - -[latest_version] -# other = "latest version." -other = "остання версія." - -[layouts_blog_pager_prev] -# other = "<< Prev" -other = "<< Назад" - -[layouts_blog_pager_next] -# other = "Next >>" -other = "Далі >>" - -[layouts_case_studies_list_tell] -# other = "Tell your story" -other = "Розкажіть свою історію" - -[layouts_docs_glossary_aka] -# other = "Also known as" -other = "Також відомий як" - -[layouts_docs_glossary_description] -# other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." -other = "Даний словник створений як повний стандартизований список термінології Kubernetes. Він включає в себе технічні терміни, специфічні для Kubernetes, а також більш загальні терміни, необхідні для кращого розуміння контексту." - -[layouts_docs_glossary_deselect_all] -# other = "Deselect all" -other = "Очистити вибір" - -[layouts_docs_glossary_click_details_after] -# other = "indicators below to get a longer explanation for any particular term." -other = "для отримання розширеного пояснення конкретного терміна." - -[layouts_docs_glossary_click_details_before] -# other = "Click on the" -other = "Натисність на" - -[layouts_docs_glossary_filter] -# other = "Filter terms according to their tags" -other = "Відфільтрувати терміни за тегами" - -[layouts_docs_glossary_select_all] -# other = "Select all" -other = "Вибрати все" - -[layouts_docs_partials_feedback_improvement] -# other = "suggest an improvement" -other = "запропонувати покращення" - -[layouts_docs_partials_feedback_issue] -# other = "Open an issue in the GitHub repo if you want to " -other = "Створіть issue в GitHub репозиторії, якщо ви хочете " - -[layouts_docs_partials_feedback_or] -# other = "or" -other = "або" - -[layouts_docs_partials_feedback_problem] -# other = "report a problem" -other = "повідомити про проблему" - -[layouts_docs_partials_feedback_thanks] -# other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" -other = "Дякуємо за ваш відгук. Якщо ви маєте конкретне запитання щодо використання Kubernetes, ви можете поставити його" - -[layouts_docs_search_fetching] -# other = "Fetching results..." -other = "Отримання результатів..." - -[main_by] -other = "by" - -[main_cncf_project] -# other = """We are a CNCF graduated project

""" -other = """Ми є проектом CNCF

""" - -[main_community_explore] -# other = "Explore the community" -other = "Познайомитись із спільнотою" - -[main_contribute] -# other = "Contribute" -other = "Допомогти проекту" - -[main_copyright_notice] -# other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" -other = """The Linux Foundation ®. Всі права застережено. The Linux Foundation є зареєстрованою торговою маркою. Перелік торгових марок The Linux Foundation ви знайдете на нашій сторінці Використання торгових марок""" - -[main_documentation_license] -# other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" -other = """Автори Kubernetes | Документація розповсюджується під ліцензією CC BY 4.0""" - -[main_edit_this_page] -# other = "Edit This Page" -other = "Редагувати цю сторінку" - -[main_github_create_an_issue] -# other = "Create an Issue" -other = "Створити issue" - -[main_github_invite] -# other = "Interested in hacking on the core Kubernetes code base?" -other = "Хочете зламати основну кодову базу Kubernetes?" - -[main_github_view_on] -# other = "View On GitHub" -other = "Переглянути у GitHub" - -[main_kubernetes_features] -# other = "Kubernetes Features" -other = "Функціональні можливості Kubernetes" - -[main_kubeweekly_baseline] -# other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." -other = "Хочете отримувати останні новини Kubernetes? Підпишіться на KubeWeekly." - -[main_kubernetes_past_link] -# other = "View past newsletters" -other = "Переглянути попередні інформаційні розсилки" - -[main_kubeweekly_signup] -# other = "Subscribe" -other = "Підписатися" - -[main_page_history] -# other ="Page History" -other ="Історія сторінки" - -[main_page_last_modified_on] -# other = "Page last modified on" -other = "Сторінка востаннє редагувалася" - -[main_read_about] -# other = "Read about" -other = "Прочитати про" - -[main_read_more] -# other = "Read more" -other = "Прочитати більше" - -[note] -# other = "Note:" -other = "Примітка:" - -[objectives_heading] -# other = "Objectives" -other = "Цілі" - -[prerequisites_heading] -# other = "Before you begin" -other = "Перш ніж ви розпочнете" - -[subscribe_button] -# other = "Subscribe" -other = "Підписатися" - -[ui_search_placeholder] -# other = "Search" -other = "Пошук" - -[version_check_mustbe] -# other = "Your Kubernetes server must be version " -other = "Версія вашого Kubernetes сервера має бути " - -[version_check_mustbeorlater] -# other = "Your Kubernetes server must be at or later than version " -other = "Версія вашого Kubernetes сервера має дорівнювати або бути молодшою ніж " - -[version_check_tocheck] -# other = "To check the version, enter " -other = "Для перевірки версії введіть " - -[warning] -# other = "Warning:" -other = "Попередження:" - -[whatsnext_heading] -# other = "What's next" -other = "Що далі" diff --git a/i18n/uk.toml b/i18n/uk.toml new file mode 120000 index 0000000000..7066896b8c --- /dev/null +++ b/i18n/uk.toml @@ -0,0 +1 @@ +../data/i18n/uk/uk.toml \ No newline at end of file diff --git a/i18n/vi.toml b/i18n/vi.toml deleted file mode 100644 index d65c07a720..0000000000 --- a/i18n/vi.toml +++ /dev/null @@ -1,197 +0,0 @@ -# i18n strings for the Vietnamese (main) site. - -[caution] -other = "Chú ý:" - -[cleanup_heading] -other = "Cleaning up" - -[community_events_calendar] -other = "Lịch sự kiện" - -[community_forum_name] -other = "Diễn đàn" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_warning] -other = " tài liệu này không còn được duy trì. Phiên bản đang xem hiện tại là một snapshot tĩnh. Để rõ hơn về tài liệu bản cập nhật, xem " - -[deprecation_file_warning] -other = "Không dùng nữa" - -[docs_label_browse] -other = "Duyệt tài liệu" - -[docs_label_contributors] -other = "Người đóng góp" - -[docs_label_i_am] -other = "TÔI LÀ..." - -[docs_label_users] -other = "Users" - -[feedback_heading] -other = "Phản hồi" - -[feedback_no] -other = "Không" - -[feedback_question] -other = "Trang này có hữu ích?" - -[feedback_yes] -other = "Có" - -[input_placeholder_email_address] -other = "địa chỉ email" - -[latest_version] -other = "phiên bản mới nhất." - -[layouts_blog_pager_prev] -other = "<< Trước" - -[layouts_blog_pager_next] -other = "Sau >>" - -[layouts_case_studies_list_tell] -other = "Kể câu chuyện của bạn" - -[layouts_docs_glossary_aka] -other = "Cũng được biết đến như là" - -[layouts_docs_glossary_description] -other = "Bảng chú giải này được kì vọng là một danh sách hoàn thiện, được chuẩn hóa về thuật ngữ Kubernetes. Nó bao gồm các thuật ngữ kỹ thuật dành riêng cho Kubernetes, cũng như các thuật ngữ chung hơn cung cấp ngữ cảnh hữu ích" - -[layouts_docs_glossary_deselect_all] -other = "Bỏ chọn tất cả" - -[layouts_docs_glossary_click_details_after] -other = "danh mục dưới đây để giải thích rõ hơn cho các thuật ngữ cụ thể" - -[layouts_docs_glossary_click_details_before] -other = "Click vào" - -[layouts_docs_glossary_filter] -other = "Lọc các thuật ngữ theo tags" - -[layouts_docs_glossary_select_all] -other = "Chọn tất cả" - -[layouts_docs_partials_feedback_improvement] -other = "đề xuất cải tiến" - -[layouts_docs_partials_feedback_issue] -other = "Tạo một issue trên Github repo nến bạn muốn " - -[layouts_docs_partials_feedback_or] -other = "hoặc" - -[layouts_docs_partials_feedback_problem] -other = "báo cáo một vấn đề" - -[layouts_docs_partials_feedback_thanks] -other = "Cảm ơn vì đã phản hồi. Nếu bạn có một câu hỏi cụ thể, có thể trả lời về cách sử dụng Kubernetes, hãy hỏi nó trên" - -[layouts_docs_search_fetching] -other = "Đang lấy kết quả..." - -[main_by] -other = "bởi" - -[main_cncf_project] -other = """Chúng tôi là một dự án CNCF

""" - -[main_community_explore] -other = "Khám phá cộng đồng" - -[main_contribute] -other = "Đóng góp" - -[main_copyright_notice] -other = """The Linux Foundation ®. Đã đăng ký Bản quyền. The Linux Foundation đã đăng ký và sử dụng nhãn hiệu. Để biết danh sách các nhãn hiệu của The Linux Foundation, xem Trademark Usage page""" - -[main_documentation_license] -other = """Các tác giả Kubernetes | Tài liệu được phân phối theo CC BY 4.0""" - -[main_edit_this_page] -other = "Sửa trang này" - -[main_github_create_an_issue] -other = "Tạo một Issue" - -[main_github_invite] -other = "Quan tâm đến việc hacking mã nguồn Kubernetes?" - -[main_github_view_on] -other = "Xem trên GitHub" - -[main_kubernetes_features] -other = "Các tính năng của Kubernetes" - -[main_kubeweekly_baseline] -other = "Muốn nhận những tin tức Kubernetes mới nhất? Đăng kí KubeWeekly." - -[main_kubernetes_past_link] -other = "Xem các bản tin trước đây" - -[main_kubeweekly_signup] -other = "Đăng kí" - -[main_page_history] -other ="Lịch sử trang" - -[main_page_last_modified_on] -other = "Trang được sửa lần cuồi vào" - -[main_read_about] -other = "Đọc về" - -[main_read_more] -other = "Đọc thêm" - -[note] -other = "Ghi chú:" - -[objectives_heading] -other = "Mục tiêu" - -[prerequisites_heading] -other = "Trước khi bắt đầu" - -[subscribe_button] -other = "Đăng ký" - -[ui_search_placeholder] -other = "Tìm kiếm" - -[version_check_mustbe] -other = "Server Kubernetes của bạn phải ở phiên bản " - -[version_check_mustbeorlater] -other = "Server Kubernetes của bạn ở phiên bản mới hơn hoặc tại phiên bản " - -[version_check_tocheck] -other = "Để kiểm tra phiên bản, nhập " - -[warning] -other = "Cảnh báo:" - -[whatsnext_heading] -other = "Có gì tiếp theo" - diff --git a/i18n/vi.toml b/i18n/vi.toml new file mode 120000 index 0000000000..cc26ca1c86 --- /dev/null +++ b/i18n/vi.toml @@ -0,0 +1 @@ +../data/i18n/vi/vi.toml \ No newline at end of file diff --git a/i18n/zh.toml b/i18n/zh.toml deleted file mode 100644 index dcf32839f8..0000000000 --- a/i18n/zh.toml +++ /dev/null @@ -1,230 +0,0 @@ -# i18n strings for the Chinese version of the site (https://kubernetes.io/zh/) -# 注意:修改此文件时请维持字符串名称的字母顺序并与英文版保持一致 - -[caution] -other = "注意:" - -[cleanup_heading] -other = "清理现场" - -[community_events_calendar] -other = "事件日历" - -[community_forum_name] -other = "论坛" - -[community_github_name] -other = "GitHub" - -[community_slack_name] -other = "Slack" - -[community_stack_overflow_name] -other = "Stack Overflow" - -[community_twitter_name] -other = "Twitter" - -[community_youtube_name] -other = "YouTube" - -[deprecation_title] -other = "您正在查看 Kubernetes 版本的文档:" - -[deprecation_warning] -other = " 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击" - -[deprecation_file_warning] -other = "已过时" - -[docs_label_browse] -other = "浏览文档" - -[docs_label_contributors] -other = "贡献者" - -[docs_label_i_am] -other = "我是..." - -[docs_label_users] -other = "用户" - -[examples_heading] -other = "示例" - -[feedback_heading] -other = "反馈" - -[feedback_no] -other = "否" - -[feedback_question] -other = "此页是否对您有帮助?" - -[feedback_yes] -other = "是" - -[input_placeholder_email_address] -other = "电子邮件地址" - -[latest_version] -other = "最新版本。" - -[layouts_blog_pager_prev] -other = "<< 前一篇" - -[layouts_blog_pager_next] -other = "后一篇 >>" - -[layouts_case_studies_list_tell] -other = "分享您的故事" - -[layouts_docs_glossary_aka] -other = "亦称作" - -[layouts_docs_glossary_description] -other = "此术语表旨在提供 Kubernetes 术语的完整、标准列表。其中包含特定于 Kubernetes 的技术术语以及能够构造有用的语境的一般性术语。" - -[layouts_docs_glossary_deselect_all] -other = "全不选" - -[layouts_docs_glossary_click_details_after] -other = "下面的指示符号获取特定术语的更为完整的描述。" - -[layouts_docs_glossary_click_details_before] -other = "点击" - -[layouts_docs_glossary_filter] -other = "根据标签过滤术语" - -[layouts_docs_glossary_select_all] -other = "全选" - -[layouts_docs_partials_feedback_improvement] -other = "提出改进建议" - -[layouts_docs_partials_feedback_issue] -other = "在 GitHub 仓库上登记新的问题" - -[layouts_docs_partials_feedback_or] -other = "或者" - -[layouts_docs_partials_feedback_problem] -other = "报告问题" - -[layouts_docs_partials_feedback_thanks] -other = "感谢反馈。如果您有一个关于如何使用 Kubernetes 的特定的、需要答案的问题,可以访问" - -[layouts_docs_search_fetching] -other = "检索结果中.." - -[main_by] -other = "由:" - -[main_cncf_project] -other = """我们是 CNCF 毕业项目

""" - -[main_community_explore] -other = "了解社区" - -[main_contribute] -other = "贡献" - -[main_copyright_notice] -other = """Linux 基金会®。保留所有权利。Linux 基金会已注册并使用商标。如需了解 Linux 基金会的商标列表,请访问商标使用页面""" - -[main_documentation_license] -other = """The Kubernetes 作者 | 文档发布基于 CC BY 4.0 授权许可""" - -[main_edit_this_page] -other = "修改本页面" - -[main_github_create_an_issue] -other = "报告 GitHub 问题" - -[main_github_invite] -other = "想要修改 Kubernetes 的核心源代码?" - -[main_github_view_on] -other = "在 GitHub 上查看" - -[main_kubernetes_features] -other = "Kubernetes 特性" - -[main_kubeweekly_baseline] -other = "想要获取最新的 Kubernetes 新闻么?请订阅 KubeWeekly。" - -[main_kubernetes_past_link] -other = "浏览往期的周报" - -[main_kubeweekly_signup] -other = "订阅" - -[main_page_history] -other ="页面历史" - -[main_page_last_modified_on] -other = "页面最后一次修改于" - -[main_read_about] -other = "了解" - -[main_read_more] -other = "了解更多" - -[note] -other = "说明:" - -[objectives_heading] -other = "教程目标" - -[options_heading] -other = "选项" - -[post_create_child_page] -other = "创建子页面" - -[prerequisites_heading] -other = "准备开始" - -[seealso_heading] -other = "另请参见" - -[subscribe_button] -other = "订阅" - -[synopsis_heading] -other = "简介" - -[thirdparty_message] -other = """本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南。""" - -[ui_search_placeholder] -other = "搜索" - -[version_check_mustbe] -other = "您的 Kubernetes 服务器版本必须是 " - -[version_check_mustbeorlater] -other = "您的 Kubernetes 服务器版本必须不低于版本 " - -[version_check_tocheck] -other = "要获知版本信息,请输入 " - -[version_menu] -other = "版本列表" - -[warning] -other = "警告:" - -[whatsnext_heading] -other = "接下来" - -[docs_version_latest_heading] -other = "当前版本" - -[docs_version_other_heading] -other = "往期版本" - -[docs_version_current] -other = "(此文档)" diff --git a/i18n/zh.toml b/i18n/zh.toml new file mode 120000 index 0000000000..e4758b4160 --- /dev/null +++ b/i18n/zh.toml @@ -0,0 +1 @@ +../data/i18n/zh/zh.toml \ No newline at end of file diff --git a/layouts/partials/blog-sidebar.html b/layouts/partials/blog-sidebar.html index f1d7b1aac0..bbdbd82330 100644 --- a/layouts/partials/blog-sidebar.html +++ b/layouts/partials/blog-sidebar.html @@ -5,6 +5,13 @@ sidebar-tree in use elsewhere on the site. */}} {{ $shouldDelayActive := ge (len .Site.Pages) 2000 }}
+ + +