diff --git a/content/zh/docs/reference/access-authn-authz/admission-controllers.md b/content/zh/docs/reference/access-authn-authz/admission-controllers.md index b5f0976fcd..7b2457eb00 100644 --- a/content/zh/docs/reference/access-authn-authz/admission-controllers.md +++ b/content/zh/docs/reference/access-authn-authz/admission-controllers.md @@ -167,7 +167,7 @@ In the current version, the default ones are: 在目前版本中,它们是: ```shell -CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook +CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, PodSecurity, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook ``` 详情请参见 -[事件速率限制提案](https://git.k8s.io/community/contributors/design-proposals/api-machinery/admission_control_event_rate_limit.md)。 +[EventRateLimit 配置文档(v1alpha1)](/zh/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/)。 ### ExtendedResourceToleration {#extendedresourcetoleration} @@ -548,8 +545,6 @@ Reference the ImagePolicyWebhook configuration file from the file provided to th 从文件中引用 ImagePolicyWebhook 的配置文件,并将其提供给 API 服务器命令标志 `--admission-control-config-file`: -{{< tabs name="imagepolicywebhook_example1" >}} -{{% tab name="apiserver.config.k8s.io/v1" %}} ```yaml apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration @@ -558,27 +553,12 @@ plugins: path: imagepolicyconfig.yaml ... ``` -{{% /tab %}} -{{% tab name="apiserver.k8s.io/v1alpha1" %}} -```yaml -# v1.17 中已废弃以鼓励使用 apiserver.config.k8s.io/v1 -apiVersion: apiserver.k8s.io/v1alpha1 -kind: AdmissionConfiguration -plugins: -- name: ImagePolicyWebhook - path: imagepolicyconfig.yaml -... -``` -{{% /tab %}} -{{< /tabs >}} 或者,你也可以直接将配置嵌入到文件中: -{{< tabs name="imagepolicywebhook_example2" >}} -{{% tab name="apiserver.config.k8s.io/v1" %}} ```yaml apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration @@ -592,24 +572,6 @@ plugins: retryBackoff: 500 defaultAllow: true ``` -{{% /tab %}} -{{% tab name="apiserver.k8s.io/v1alpha1" %}} -```yaml -# v1.17 中已废弃以鼓励使用 apiserver.config.k8s.io/v1 -apiVersion: apiserver.k8s.io/v1alpha1 -kind: AdmissionConfiguration -plugins: -- name: ImagePolicyWebhook - configuration: - imagePolicy: - kubeConfigFile: - allowTTL: 50 - denyTTL: 50 - retryBackoff: 500 - defaultAllow: true -``` -{{% /tab %}} -{{< /tabs >}} -kubeconfig 文件的 cluster 字段需要指向远端服务,user 字段需要包含已返回的授权者。 +kubeconfig 文件的 `cluster` 字段需要指向远端服务,user 字段需要包含已返回的授权者。 注意,Webhook API 对象与其他 Kubernetes API 对象一样受制于相同的版本控制兼容性规则。 实现者应该知道对 alpha 对象的更宽松的兼容性,并检查请求的 "apiVersion" 字段, @@ -718,10 +680,10 @@ An example request body: ``` 远程服务将填充请求的 `ImageReviewStatus` 字段,并返回允许或不允许访问的响应。 -响应体的 "spec" 字段会被忽略,并且可以省略。一个允许访问应答会返回: +响应体的 `spec` 字段会被忽略,并且可以省略。一个允许访问应答会返回: ```json { @@ -782,10 +744,9 @@ Examples of information you might put here are: * 向策略服务器提供一个提示,用于提供镜像的 imageID,以方便它进行查找。 在任何情况下,注解都是由用户提供的,并不会被 Kubernetes 以任何方式进行验证。 -在将来,如果一个注解确定将被广泛使用,它可能会被提升为 ImageReviewSpec 的一个命名字段。 ### LimitPodHardAntiAffinityTopology {#limitpodhardantiaffinitytopology} @@ -800,11 +761,12 @@ This admission controller denies any pod that defines `AntiAffinity` topology ke ### LimitRanger {#limitranger} 该准入控制器会观察传入的请求,并确保它不会违反 `Namespace` 中 `LimitRange` 对象枚举的任何约束。 @@ -815,11 +777,12 @@ LimitRanger 还可以用于将默认资源请求应用到没有指定任何内 0.1 CPU 的需求。 请查看 -[limitRange 设计文档](https://git.k8s.io/community/contributors/design-proposals/resource-management/admission_control_limit_range.md) +[limitRange 设计文档](/zh/docs/reference/kubernetes-api/policy-resources/limit-range-v1/) 和 [LimitRange 例子](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/) 以了解更多细节。 @@ -903,9 +866,10 @@ If the namespace referenced from a request doesn't exist, the request is rejecte ### NamespaceLifecycle {#namespacelifecycle} 该准入控制器禁止在一个正在被终止的 `Namespace` 中创建新对象,并确保 使用不存在的 `Namespace` 的请求被拒绝。 @@ -913,8 +877,9 @@ three system reserved namespaces `default`, `kube-system`, `kube-public`. `kube-system` 和 `kube-public`。 删除 `Namespace` 会触发删除该名字空间中所有对象(Pod、Service 等)的一系列操作。 为了确保这个过程的完整性,我们强烈建议启用这个准入控制器。 @@ -932,16 +897,15 @@ Such kubelets will only be allowed to modify their own `Node` API object, and on 这样,kubelet 只可修改自己的 `Node` API 对象,只能修改绑定到节点本身的 Pod 对象。 -在 Kubernetes 1.11+ 的版本中,不允许 kubelet 从 `Node` API 对象中更新或删除污点。 +不允许 kubelet 在 `Node` API 对象上更新或删除污点。 -在 Kubernetes 1.13+ 的版本中,`NodeRestriction` 准入插件可防止 kubelet 删除 -`Node` API 对象,并对 `kubernetes.io/` 或 `k8s.io/` 前缀标签的 kubelet -强制进行如下修改: +`NodeRestriction` 准入插件可防止 kubelet 删除`Node` API 对象, +并对 `kubernetes.io/` 或 `k8s.io/` 前缀标签的 kubelet 强制进行如下修改: 该准入控制器检查传入的 `PersistentVolumeClaim` 调整大小请求,对其执行额外的验证操作。 -{{< note >}} -对调整卷大小的支持是一种 Beta 特性。作为集群管理员,你必须确保特性门控 `ExpandPersistentVolumes` -设置为 `true` 才能启用调整大小。 -{{< /note >}} - - -启用 `ExpandPersistentVolumes` 特性门控之后,建议将 `PersistentVolumeClaimResize` -准入控制器也启用。除非 PVC 的 `StorageClass` 明确地将 `allowVolumeExpansion` 设置为 +建议启用 `PersistentVolumeClaimResize` 准入控制器。除非 PVC 的 `StorageClass` 明确地将 `allowVolumeExpansion` 设置为 `true` 来显式启用调整大小。否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整。 例如:由以下 `StorageClass` 创建的所有 `PersistentVolumeClaim` 都支持卷容量扩充: @@ -1099,8 +1053,6 @@ Reference the `PodNodeSelector` configuration file from the file provided to the 基于提供给 API 服务器命令行标志 `--admission-control-config-file` 的文件名, 从文件中引用 `PodNodeSelector` 配置文件: -{{< tabs name="podnodeselector_example1" >}} -{{% tab name="apiserver.config.k8s.io/v1" %}} ```yaml apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration @@ -1109,19 +1061,6 @@ plugins: path: podnodeselector.yaml ... ``` -{{% /tab %}} -{{% tab name="apiserver.k8s.io/v1alpha1" %}} -```yaml -# 在 v1.17 中废弃,以鼓励使用 apiserver.config.k8s.io/v1 -apiVersion: apiserver.k8s.io/v1alpha1 -kind: AdmissionConfiguration -plugins: -- name: PodNodeSelector - path: podnodeselector.yaml -... -``` -{{% /tab %}} -{{< /tabs >}} 请查看 -[resourceQuota 设计文档](https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md)和 [Resource Quota 例子](/zh/docs/concepts/policy/resource-quotas/) -了解更多细节。 +[resourceQuota API 参考](/zh/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/) +和 [Resource Quota 例子](/zh/docs/concepts/policy/resource-quotas/)了解更多细节。 -`--admission-control` 在 1.10 中已废弃,由 `--enable-admission-plugins` 取代。 -{{< /note >}} - diff --git a/content/zh/docs/reference/kubectl/cheatsheet.md b/content/zh/docs/reference/kubectl/cheatsheet.md index 4bd973b8bd..1b424d1e3c 100644 --- a/content/zh/docs/reference/kubectl/cheatsheet.md +++ b/content/zh/docs/reference/kubectl/cheatsheet.md @@ -1,6 +1,7 @@ --- title: kubectl 备忘单 content_type: concept +weight: 10 card: name: reference weight: 30 @@ -12,6 +13,7 @@ reviewers: - krousey - clove content_type: concept +weight: 10 # highlight it card: name: reference weight: 30 @@ -70,6 +72,18 @@ source <(kubectl completion zsh) # 在 zsh 中设置当前 shell 的自动补 echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # 在您的 zsh shell 中永久的添加自动补全 ``` + +### 关于 --all-namespaces 的一点说明 + + +我们经常用到 `--all-namespaces` 参数,你应该要知道它的简写: + +```kubectl -A``` + ```bash @@ -140,6 +158,11 @@ kubectl config set-context gce --user=cluster-admin --namespace=foo \ && kubectl config use-context gce kubectl config unset users.foo # 删除用户 foo + +# 设置或显示 context / namespace 的短别名 +# (仅适用于 bash 和 bash 兼容的 shell,在使用 kn 设置命名空间之前要先设置 current-context) +alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f' +alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f' ``` ```bash @@ -390,8 +416,8 @@ kubectl get pods --selector=app=cassandra -o \ kubectl get configmap myconfig \ -o jsonpath='{.data.ca\.crt}' -# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/master' 的结果) -kubectl get node --selector='!node-role.kubernetes.io/master' +# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/control-plane' 的结果) +kubectl get node --selector='!node-role.kubernetes.io/control-plane' # 获取当前命名空间中正在运行的 Pods kubectl get pods --field-selector=status.phase=Running @@ -429,14 +455,17 @@ kubectl diff -f ./my-manifest.yaml # 生成一个句点分隔的树,其中包含为节点返回的所有键 # 在复杂的嵌套JSON结构中定位键时非常有用 -kubectl get nodes -o json | jq -c 'path(..)|[.[]|tostring]|join(".")' +kubectl get nodes -o json | jq -c 'paths|join(".")' # 生成一个句点分隔的树,其中包含为pod等返回的所有键 -kubectl get pods -o json | jq -c 'path(..)|[.[]|tostring]|join(".")' +kubectl get pods -o json | jq -c 'paths|join(".")' # 假设你的 Pods 有默认的容器和默认的名字空间,并且支持 'env' 命令,可以使用以下脚本为所有 Pods 生成 ENV 变量。 # 该脚本也可用于在所有的 Pods 里运行任何受支持的命令,而不仅仅是 'env'。 for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod -- env; done + +# 获取一个 Deployment 的 status 子资源 +kubectl get deployment nginx-deployment --subresource=status ``` ```bash @@ -529,6 +561,9 @@ kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", " # 在带位置数组中添加元素 kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]' + +# 通过修正 scale 子资源来更新 Deployment 的副本数 +kubectl patch deployment nginx-deployment --subresource='scale' --type='merge' -p '{"spec":{"replicas":2}}' ``` +## 从容器中复制文件和目录 + + +```bash +kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # 将 /tmp/foo_dir 本地目录复制到远程当前命名空间中 Pod 中的 /tmp/bar_dir +kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # 将 /tmp/foo 本地文件复制到远程 Pod 中特定容器的 /tmp/bar 下 +kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间内指定 Pod 中的 /tmp/bar +kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # 将 /tmp/foo 从远程 Pod 复制到本地 /tmp/bar +``` + + +{{< note >}} +`kubectl cp` 要求容器镜像中存在 “tar” 二进制文件。如果 “tar” 不存在,`kubectl cp` 将失败。 +对于进阶用例,例如符号链接、通配符扩展或保留文件权限,请考虑使用 `kubectl exec`。 +{{< /note >}} + + +```bash +tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间中 pod 中的 /tmp/bar +kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # 将 /tmp/foo 从远程 pod 复制到本地 /tmp/bar @@ -794,7 +866,7 @@ kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr. # All fields under metadata regardless of name kubectl get pods -A -o=custom-columns='DATA:metadata.*' -More examples in the kubectl [reference documentation](/docs/reference/kubectl/overview/#custom-columns). +More examples in the kubectl [reference documentation](/docs/reference/kubectl/#custom-columns). ``` --> 使用 `-o=custom-columns` 的示例: @@ -813,7 +885,7 @@ kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr. kubectl get pods -A -o=custom-columns='DATA:metadata.*' ``` -有关更多示例,请参看 kubectl [参考文档](/zh/docs/reference/kubectl/overview/#custom-columns)。 +有关更多示例,请参看 kubectl [参考文档](/zh/docs/reference/kubectl/#custom-columns)。 -* 参阅 [kubectl 概述](/zh/docs/reference/kubectl/overview/),进一步了解[JsonPath](/zh/docs/reference/kubectl/jsonpath)。 +* 参阅 [kubectl 概述](/zh/docs/reference/kubectl/),进一步了解 [JsonPath](/zh/docs/reference/kubectl/jsonpath)。 * 参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 选项。 * 参阅 [kubectl 使用约定](/zh/docs/reference/kubectl/conventions/)来理解如何在可复用的脚本中使用它。 * 查看社区中其他的 [kubectl 备忘单](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)。