From ede7013dc777740069a4b6e9397b0dfe2c4c6365 Mon Sep 17 00:00:00 2001
From: Dohyun Jung
Date: Mon, 14 Feb 2022 19:24:54 +0900
Subject: [PATCH 001/119] Update namespaces.md
Delete content that doesn't exist in the English version.
---
.../ko/docs/concepts/overview/working-with-objects/namespaces.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/content/ko/docs/concepts/overview/working-with-objects/namespaces.md b/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
index 03597eee50..3a74152a07 100644
--- a/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
@@ -61,7 +61,6 @@ kube-system Active 1d
* `default` 다른 네임스페이스가 없는 오브젝트를 위한 기본 네임스페이스
* `kube-system` 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스
* `kube-public` 이 네임스페이스는 자동으로 생성되며 모든 사용자(인증되지 않은 사용자 포함)가 읽기 권한으로 접근할 수 있다. 이 네임스페이스는 주로 전체 클러스터 중에 공개적으로 드러나서 읽을 수 있는 리소스를 위해 예약되어 있다. 이 네임스페이스의 공개적인 성격은 단지 관례이지 요구 사항은 아니다.
- * `kube-node-lease` 클러스터가 스케일링될 때 노드 하트비트의 성능을 향상시키는 각 노드와 관련된 리스(lease) 오브젝트에 대한 네임스페이스
* `kube-node-lease` 이 네임스페이스는 각 노드와 연관된 [리스](/docs/reference/kubernetes-api/cluster-resources/lease-v1/)
오브젝트를 갖는다. 노드 리스는 kubelet이 [하트비트](/ko/docs/concepts/architecture/nodes/#하트비트)를
보내서 컨트롤 플레인이 노드의 장애를 탐지할 수 있게 한다.
From ef297288fa7dbf9ac0b3a0d1efda28116bf2fdc1 Mon Sep 17 00:00:00 2001
From: Amit Sharma
Date: Sat, 12 Mar 2022 14:13:06 +0530
Subject: [PATCH 002/119] Updated
configure-liveness-readiness-startup-probes.md
We don't need to pass -r flag with rm command to delete a file.
---
.../configure-liveness-readiness-startup-probes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index f0fefe975a..6762acad34 100644
--- a/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -59,7 +59,7 @@ and restarts it.
When the container starts, it executes this command:
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
For the first 30 seconds of the container's life, there is a `/tmp/healthy` file.
From a60e9203e053fd69fd90054ec8a431b98066f056 Mon Sep 17 00:00:00 2001
From: Amit Sharma
Date: Sat, 12 Mar 2022 14:42:48 +0530
Subject: [PATCH 003/119] Update exec-liveness.yaml
---
content/en/examples/pods/probe/exec-liveness.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/en/examples/pods/probe/exec-liveness.yaml b/content/en/examples/pods/probe/exec-liveness.yaml
index 07bf75f85c..6a9c9b3213 100644
--- a/content/en/examples/pods/probe/exec-liveness.yaml
+++ b/content/en/examples/pods/probe/exec-liveness.yaml
@@ -11,7 +11,7 @@ spec:
args:
- /bin/sh
- -c
- - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
+ - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
From 3f0f56f0f220be91e631c422e39767efdf0a9d1e Mon Sep 17 00:00:00 2001
From: Nir Rosenthal <32959392+nirroz93@users.noreply.github.com>
Date: Fri, 18 Mar 2022 00:06:10 +0200
Subject: [PATCH 004/119] Changing note about limits without requests
this is true for all limits (not only CPU and memory but also ephemeral storage)
https://github.com/kubernetes/kubernetes/blob/4d08582d1fa21e1f5887e73380001ac827371553/pkg/apis/core/v1/defaults.go#L159
---
.../docs/concepts/configuration/manage-resources-containers.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/en/docs/concepts/configuration/manage-resources-containers.md b/content/en/docs/concepts/configuration/manage-resources-containers.md
index 18f2fc5cb5..72d47f3d3e 100644
--- a/content/en/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/en/docs/concepts/configuration/manage-resources-containers.md
@@ -49,7 +49,7 @@ runtimes can have different ways to implement the same restrictions.
{{< note >}}
If a container specifies its own memory limit, but does not specify a memory request, Kubernetes
automatically assigns a memory request that matches the limit. Similarly, if a container specifies its own
-CPU limit, but does not specify a CPU request, Kubernetes automatically assigns a CPU request that matches
+CPU limit (or any other resource limit), but does not specify a CPU request, Kubernetes automatically assigns a CPU request that matches
the limit.
{{< /note >}}
From 76e78444ef662f6369ad270e3dce44dfc8b844ec Mon Sep 17 00:00:00 2001
From: Nir Rosenthal <32959392+nirroz93@users.noreply.github.com>
Date: Sat, 19 Mar 2022 17:39:59 +0200
Subject: [PATCH 005/119] per
https://github.com/kubernetes/website/pull/32326#discussion_r830493057
---
.../concepts/configuration/manage-resources-containers.md | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/content/en/docs/concepts/configuration/manage-resources-containers.md b/content/en/docs/concepts/configuration/manage-resources-containers.md
index 72d47f3d3e..49d86e4c4c 100644
--- a/content/en/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/en/docs/concepts/configuration/manage-resources-containers.md
@@ -47,10 +47,9 @@ or by enforcement (the system prevents the container from ever exceeding the lim
runtimes can have different ways to implement the same restrictions.
{{< note >}}
-If a container specifies its own memory limit, but does not specify a memory request, Kubernetes
-automatically assigns a memory request that matches the limit. Similarly, if a container specifies its own
-CPU limit (or any other resource limit), but does not specify a CPU request, Kubernetes automatically assigns a CPU request that matches
-the limit.
+If you specify a limit for a resource, but do not specify any request, and no admission-time
+mechanism has applied a default request for that resource, then Kubernetes copies the limit
+you specified and uses it as the requested value for the resource.
{{< /note >}}
## Resource types
From 00a6dc0c10eb198a2faf5454a1a6e2427138a61f Mon Sep 17 00:00:00 2001
From: Tim Allclair
Date: Wed, 13 Apr 2022 17:09:02 -0700
Subject: [PATCH 006/119] [ru] Clean up various broken links
---
content/ru/docs/concepts/cluster-administration/addons.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/ru/docs/concepts/cluster-administration/addons.md b/content/ru/docs/concepts/cluster-administration/addons.md
index 7e93ef82b2..5c6d6446b6 100644
--- a/content/ru/docs/concepts/cluster-administration/addons.md
+++ b/content/ru/docs/concepts/cluster-administration/addons.md
@@ -29,7 +29,7 @@ content_type: concept
* [OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin) - это подключаемый модуль контроллера CNI на основе OVN для обеспечения облачной цепочки сервисных функций (SFC), несколько наложенных сетей OVN, динамического создания подсети, динамического создания виртуальных сетей, сети поставщика VLAN, сети прямого поставщика и подключаемого к другим Multi Сетевые плагины, идеально подходящие для облачных рабочих нагрузок на периферии в сети с несколькими кластерами.
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) плагин для контейнера (NCP) обеспечивающий интеграцию между VMware NSX-T и контейнерами оркестраторов, таких как Kubernetes, а так же интеграцию между NSX-T и контейнеров на основе платформы CaaS/PaaS, таких как Pivotal Container Service (PKS) и OpenShift.
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst) - эта платформа SDN, которая обеспечивает сетевое взаимодействие на основе политик между Kubernetes подами и не Kubernetes окружением, с отображением и мониторингом безопасности.
-* [Romana](https://romana.io) - это сетевое решение уровня 3 для сетей подов, которое также поддерживает [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Подробности установки Kubeadm доступны [здесь](https://github.com/romana/romana/tree/master/containerize).
+* [Romana](https://github.com/romana/romana) - это сетевое решение уровня 3 для сетей подов, которое также поддерживает [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Подробности установки Kubeadm доступны [здесь](https://github.com/romana/romana/tree/master/containerize).
* [Weave Net](https://www.weave.works/docs/net/latest/kubernetes/kube-addon/) предоставляет сеть и обеспечивает сетевую политику, будет работать на обеих сторонах сетевого раздела и не требует внешней базы данных.
## Обнаружение служб
From 62e61461d9ba46f22392080b3c0c24e5b26f0894 Mon Sep 17 00:00:00 2001
From: Humberto <85humberto@gmail.com>
Date: Wed, 20 Apr 2022 11:22:52 -0300
Subject: [PATCH 007/119] Update components.md
---
content/pt-br/docs/concepts/overview/components.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/pt-br/docs/concepts/overview/components.md b/content/pt-br/docs/concepts/overview/components.md
index b03946c4ae..892be1a922 100644
--- a/content/pt-br/docs/concepts/overview/components.md
+++ b/content/pt-br/docs/concepts/overview/components.md
@@ -59,7 +59,7 @@ O cloud-controller-manager executa apenas controladores que são específicos pa
Se você estiver executando o Kubernetes em suas próprias instalações ou em um ambiente de aprendizagem dentro de seu
próprio PC, o cluster não possui um gerenciador de controlador de nuvem.
-Tal como acontece com o kube-controller-manager, o cloud-controller-manager combina vários ciclos de controle logicamente independentes em um binário único que você executa como um processo único. Você pode escalar horizontalmente (exectuar mais de uma cópia) para melhorar o desempenho ou para auxiliar na tolerância a falhas.
+Tal como acontece com o kube-controller-manager, o cloud-controller-manager combina vários ciclos de controle logicamente independentes em um binário único que você executa como um processo único. Você pode escalar horizontalmente (executar mais de uma cópia) para melhorar o desempenho ou para auxiliar na tolerância a falhas.
Os seguintes controladores podem ter dependências de provedor de nuvem:
From 88403cfc775ef54a24bf19f692dff7f0dc909d3b Mon Sep 17 00:00:00 2001
From: "Mr. Erlison"
Date: Thu, 21 Apr 2022 13:27:28 -0300
Subject: [PATCH 008/119] Add
content/pt-br/docs/reference/glossary/annotation.md
---
.../docs/reference/glossary/annotation.md | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 content/pt-br/docs/reference/glossary/annotation.md
diff --git a/content/pt-br/docs/reference/glossary/annotation.md b/content/pt-br/docs/reference/glossary/annotation.md
new file mode 100644
index 0000000000..ae54f3c86a
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/annotation.md
@@ -0,0 +1,21 @@
+---
+title: Anotação
+id: annotation
+date: 2018-04-12
+full_link: /docs/concepts/overview/working-with-objects/annotations
+short_description: >
+ Um par de chave-valor (key-value) é usado para anexar metadados arbitrários não identificáveis a objetos.
+
+aka:
+tags:
+- fundamental
+---
+ Um par de chave-valor (key-value) é usado para anexar metadados arbitrários não identificáveis a objetos.
+
+
+
+Os metadados em uma anotação podem ser pequenos ou grandes, estruturados ou não estruturados, e podem incluir caracteres não permitidos pelos {{< glossary_tooltip text="rótulos" term_id="label" >}}. Clientes como ferramentas e bibliotecas podem recuperar esses metadados.
+
+
+
+ [-]
\ No newline at end of file
From 5dc71848c349e59e68e8f7d695e268f5a2d20d30 Mon Sep 17 00:00:00 2001
From: "Mr. Erlison"
Date: Thu, 21 Apr 2022 19:34:57 -0300
Subject: [PATCH 009/119] Removed final line with this [-]
---
content/pt-br/docs/reference/glossary/annotation.md | 3 ---
1 file changed, 3 deletions(-)
diff --git a/content/pt-br/docs/reference/glossary/annotation.md b/content/pt-br/docs/reference/glossary/annotation.md
index ae54f3c86a..5e3ca07b31 100644
--- a/content/pt-br/docs/reference/glossary/annotation.md
+++ b/content/pt-br/docs/reference/glossary/annotation.md
@@ -16,6 +16,3 @@ tags:
Os metadados em uma anotação podem ser pequenos ou grandes, estruturados ou não estruturados, e podem incluir caracteres não permitidos pelos {{< glossary_tooltip text="rótulos" term_id="label" >}}. Clientes como ferramentas e bibliotecas podem recuperar esses metadados.
-
-
- [-]
\ No newline at end of file
From 7f7f53dc5378159447182ae39ad2caf8c4faf1b1 Mon Sep 17 00:00:00 2001
From: Qiming Teng
Date: Sun, 24 Apr 2022 21:14:20 +0800
Subject: [PATCH 010/119] [zh] Resync crictl
---
.../tasks/debug-application-cluster/crictl.md | 329 +++++++++---------
1 file changed, 160 insertions(+), 169 deletions(-)
diff --git a/content/zh/docs/tasks/debug-application-cluster/crictl.md b/content/zh/docs/tasks/debug-application-cluster/crictl.md
index f8e126f281..d928d1d0c5 100644
--- a/content/zh/docs/tasks/debug-application-cluster/crictl.md
+++ b/content/zh/docs/tasks/debug-application-cluster/crictl.md
@@ -45,8 +45,8 @@ Kubernetes node. `crictl` and its source are hosted in the
-`crictl` 默认连接到 `unix:///var/run/dockershim.sock`。
-对于其他的运行时,你可以用多种不同的方法设置端点:
+你可以用以下方法之一来为 `crictl` 设置端点:
-- 通过设置参数 `--runtime-endpoint` 和 `--image-endpoint`
-- 通过设置环境变量 `CONTAINER_RUNTIME_ENDPOINT` 和 `IMAGE_SERVICE_ENDPOINT`
-- 通过在配置文件中设置端点 `--config=/etc/crictl.yaml`
+- 设置参数 `--runtime-endpoint` 和 `--image-endpoint`。
+- 设置环境变量 `CONTAINER_RUNTIME_ENDPOINT` 和 `IMAGE_SERVICE_ENDPOINT`。
+- 在配置文件 `--config=/etc/crictl.yaml` 中设置端点。
+ 要设置不同的文件,可以在运行 `crictl` 时使用 `--config=PATH_TO_FILE` 标志。
要查看或编辑当前配置,请查看或编辑 `/etc/crictl.yaml` 的内容。
+例如,使用 `containerd` 容器运行时的配置会类似于这样:
-```shell
-cat /etc/crictl.yaml
```
-```
-runtime-endpoint: unix:///var/run/dockershim.sock
-image-endpoint: unix:///var/run/dockershim.sock
+runtime-endpoint: unix:///var/run/containerd/containerd.sock
+image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: true
```
+
+要进一步了解 `crictl`,参阅
+[`crictl` 文档](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md)。
+
+输出类似于:
+
+```
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
926f1b5a1d33a About a minute ago Ready sh-84d7dcf559-4r2gq default 0
4dccb216c4adb About a minute ago Ready nginx-65899c769f-wv2gp default 0
@@ -157,7 +169,12 @@ List pods by name:
crictl pods --name nginx-65899c769f-wv2gp
```
-```none
+
+输出类似于这样:
+
+```
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
4dccb216c4adb 2 minutes ago Ready nginx-65899c769f-wv2gp default 0
```
@@ -170,6 +187,12 @@ List pods by label:
```shell
crictl pods --label run=nginx
```
+
+
+输出类似于这样:
+
```none
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
4dccb216c4adb 2 minutes ago Ready nginx-65899c769f-wv2gp default 0
@@ -187,6 +210,12 @@ List all images:
```shell
crictl images
```
+
+
+输出类似于这样:
+
```none
IMAGE TAG IMAGE ID SIZE
busybox latest 8c811b4aec35f 1.15MB
@@ -203,6 +232,12 @@ List images by repository:
```shell
crictl images nginx
```
+
+
+输出类似于这样:
+
```none
IMAGE TAG IMAGE ID SIZE
nginx latest cd5239a0906a6 109MB
@@ -216,6 +251,12 @@ Only list image IDs:
```shell
crictl images -q
```
+
+
+输出类似于这样:
+
```none
sha256:8c811b4aec35f259572d0f79207bc0678df4c736eeec50bc9fec37ed936a472a
sha256:e179bbfe5d238de6069f3b03fccbecc3fb4f2019af741bfff1233c4d7b2970c5
@@ -235,6 +276,12 @@ List all containers:
```shell
crictl ps -a
```
+
+
+输出类似于这样:
+
```none
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
1f73f2d81bf98 busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47 7 minutes ago Running sh 1
@@ -251,6 +298,12 @@ List running containers:
```shell
crictl ps
```
+
+
+输出类似于这样:
+
```none
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
1f73f2d81bf98 busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47 6 minutes ago Running sh 1
@@ -266,6 +319,12 @@ CONTAINER ID IMAGE
```shell
crictl exec -i -t 1f73f2d81bf98 ls
```
+
+
+输出类似于这样:
+
```none
bin dev etc home proc root sys tmp usr var
```
@@ -282,6 +341,12 @@ Get all container logs:
```shell
crictl logs 87d3992f84f74
```
+
+
+输出类似于这样:
+
```none
10.240.0.96 - - [06/Jun/2018:02:45:49 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
10.240.0.96 - - [06/Jun/2018:02:45:50 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
@@ -296,6 +361,12 @@ Get only the latest `N` lines of logs:
```shell
crictl logs --tail=1 87d3992f84f74
```
+
+
+输出类似于这样:
+
```none
10.240.0.96 - - [06/Jun/2018:02:45:51 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
```
@@ -312,8 +383,10 @@ deleted by the Kubelet.
用 `crictl` 运行 Pod 沙盒对容器运行时排错很有帮助。
在运行的 Kubernetes 集群中,沙盒会随机地被 kubelet 停止和删除。
-1.
- 编写下面的 JSON 文件:
+
+1. 编写下面的 JSON 文件:
```json
{
@@ -329,14 +402,18 @@ deleted by the Kubelet.
}
```
-2.
- 使用 `crictl runp` 命令应用 JSON 文件并运行沙盒。
+
+2. 使用 `crictl runp` 命令应用 JSON 文件并运行沙盒。
```shell
crictl runp pod-config.json
```
-
+
返回了沙盒的 ID。
- 拉取 busybox 镜像
+
+1. 拉取 busybox 镜像
- ```bash
+ ```shell
crictl pull busybox
+ ```
+ ```none
Image is up to date for busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
```
-2.
- 创建 Pod 和容器的配置:
+
+2. 创建 Pod 和容器的配置:
-
+
**Pod 配置**:
- ```yaml
+
+ ```json
{
"metadata": {
"name": "nginx-sandbox",
@@ -378,9 +464,12 @@ deleted by the Kubelet.
}
```
-
+
**容器配置**:
- ```yaml
+
+ ```json
{
"metadata": {
"name": "busybox"
@@ -397,22 +486,31 @@ deleted by the Kubelet.
}
```
-3.
- 创建容器,传递先前创建的 Pod 的 ID、容器配置文件和 Pod 配置文件。返回容器的 ID。
+ returned.
+-->
+3. 创建容器,传递先前创建的 Pod 的 ID、容器配置文件和 Pod 配置文件。返回容器的 ID。
```bash
crictl create f84dd361f8dc51518ed291fbadd6db537b0496536c1d2d6c05ff943ce8c9a54f container-config.json pod-config.json
```
-4.
- 查询所有容器并确认新创建的容器状态为 `Created`。
+
+4. 查询所有容器并确认新创建的容器状态为 `Created`。
```bash
crictl ps -a
```
+
+ 输出类似于这样:
+
```none
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
3e025dd50a72d busybox 32 seconds ago Created busybox 0
@@ -430,7 +528,13 @@ To start a container, pass its ID to `crictl start`:
```shell
crictl start 3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
```
-```none
+
+
+输出类似于这样:
+
+```
3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
```
@@ -442,136 +546,23 @@ Check the container has its state set to `Running`.
```shell
crictl ps
```
-```none
-CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
-3e025dd50a72d busybox About a minute ago Running busybox 0
+
+
+输出类似于这样:
+
```
-
+CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
+3e025dd50a72d busybox About a minute ago Running busybox 0
+```
+
+## {{% heading "whatsnext" %}}
-更多信息请参考 [kubernetes-sigs/cri-tools](https://github.com/kubernetes-sigs/cri-tools)。
+* [进一步了解 `crictl`](https://github.com/kubernetes-sigs/cri-tools).
+* [将 `docker` CLI 命令映射到 `crictl`](/zh/docs/reference/tools/map-crictl-dockercli/).
-
-## Docker CLI 和 crictl 的映射
-
-
-以下的映射表格只适用于 Docker CLI v1.40 和 crictl v1.19.0 版本。
-请注意该表格并不详尽。例如,其中不包含 Docker CLI 的实验性命令。
-
-
-{{< note >}}
-尽管有些命令的输出缺少了一些数据列,CRICTL 的输出格式与 Docker CLI 是类似的。
-如果你的脚本程序需要解析命令的输出,请确认检查该特定命令的输出。
-{{< /note >}}
-
-
-### 获取调试信息
-
-{{< table caption="Docker CLI 和 crictl 的映射 - 获取调试信息" >}}
-
-docker cli | crictl | 描述 | 不支持的功能
--- | -- | -- | --
-`attach` | `attach` | 连接到一个运行中的容器 | `--detach-keys`, `--sig-proxy`
-`exec` | `exec` | 在运行中的容器里运行一个命令 | `--privileged`, `--user`, `--detach-keys`
-`images` | `images` | 列举镜像 |
-`info` | `info` | 显示系统级的信息 |
-`inspect` | `inspect`, `inspecti` | 返回容器、镜像或者任务的详细信息 |
-`logs` | `logs` | 获取容器的日志 | `--details`
-`ps` | `ps` | 列举容器 |
-`stats` | `stats` | 实时显示容器的资源使用统计信息 | 列:NET/BLOCK I/O, PIDs
-`version` | `version` | 显示运行时(Docker、ContainerD、或者其他) 的版本信息 |
-{{< /table >}}
-
-
-### 进行改动
-
-{{< table caption="Docker CLI 和 crictl 的映射 - 进行改动" >}}
-
-docker cli | crictl | 描述 | 不支持的功能
--- | -- | -- | --
-`create` | `create` | 创建一个新的容器 |
-`kill` | `stop` (timeout=0) | 杀死一个或多个正在运行的容器 | `--signal`
-`pull` | `pull` | 从镜像仓库拉取镜像或者代码仓库 | `--all-tags`, `--disable-content-trust`
-`rm` | `rm` | 移除一个或多个容器 |
-`rmi` | `rmi` | 移除一个或多个镜像 |
-`run` | `run` | 在新容器里运行一个命令 |
-`start` | `start` | 启动一个或多个停止的容器 | `--detach-keys`
-`stop` | `stop` | 停止一个或多个正运行的容器 |
-`update` | `update` | 更新一个或多个容器的配置 | CRI 不支持 `--restart`、`--blkio-weight` 以及一些其他的资源限制选项。
-{{< /table >}}
-
-
-### 仅 crictl 支持
-
-{{< table caption="Docker CLI 和 crictl 的映射 - 仅 crictl 支持" >}}
-
-crictl | 描述
--- | --
-`imagefsinfo` | 返回镜像的文件系统信息
-`inspectp` | 显示一个或多个 Pod 的状态
-`port-forward` | 转发本地端口到 Pod
-`pods` | 列举 Pod
-`runp` | 运行一个新的 Pod
-`rmp` | 移除一个或多个 Pod
-`stopp` | 停止一个或多个正运行的 Pod
-{{< /table >}}
From 190bd0b9021c8b228ef48d325f8c230ec9ba101f Mon Sep 17 00:00:00 2001
From: "wei.wang"
Date: Mon, 25 Apr 2022 01:45:02 +0800
Subject: [PATCH 011/119] [zh]Remove
content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md
---
.../kubeadm/generated/kubeadm_alpha.md | 69 -------------------
1 file changed, 69 deletions(-)
delete mode 100644 content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md
deleted file mode 100644
index f6978fcb6d..0000000000
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-### 概要
-
-
-
-kubeadm 实验子命令
-
-
-
-### 选项
-
-
-
-
-
-
-
-
-
-
-h, --help
-
-
-
-
-alpha 操作的帮助命令
-
-
-
-
-
-
-
-
-### 从父命令继承的选项
-
-
-
-
-
-
-
-
-
-
--rootfs string
-
-
-
-
-[实验] 指向 '真实' 宿主机的根文件系统的路径。
-
-
-
-
-
-
From 5fbba61bbc48579301ea76f75208906a0a0cfaab Mon Sep 17 00:00:00 2001
From: "xin.li"
Date: Mon, 25 Apr 2022 21:39:18 +0800
Subject: [PATCH 012/119] [zh] Update
docs/reference/glossary/pod-security-policy.md
Signed-off-by: xin.li
---
.../zh/docs/reference/glossary/pod-security-policy.md | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/content/zh/docs/reference/glossary/pod-security-policy.md b/content/zh/docs/reference/glossary/pod-security-policy.md
index 5c8475292f..6f29aa8d5a 100644
--- a/content/zh/docs/reference/glossary/pod-security-policy.md
+++ b/content/zh/docs/reference/glossary/pod-security-policy.md
@@ -2,7 +2,7 @@
title: Pod 安全策略
id: pod-security-policy
date: 2018-04-12
-full_link: /zh/docs/concepts/policy/pod-security-policy/
+full_link: /zh/docs/concepts/security/pod-security-policy/
short_description: >
为 Pod 的创建和更新操作启用细粒度的授权。
@@ -17,7 +17,7 @@ tags:
title: Pod Security Policy
id: pod-security-policy
date: 2018-04-12
-full_link: /docs/concepts/policy/pod-security-policy/
+full_link: /docs/concepts/security/pod-security-policy/
short_description: >
Enables fine-grained authorization of pod creation and updates.
@@ -43,4 +43,9 @@ A cluster-level resource that controls security sensitive aspects of the Pod spe
Pod 安全策略是集群级别的资源,它控制着 Pod 规约中的安全性敏感的内容。
`PodSecurityPolicy`对象定义了一组条件以及相关字段的默认值,Pod 运行时必须满足这些条件。Pod 安全策略控制实现上体现为一个可选的准入控制器。
+
+PodSecurityPolicy 自 Kubernetes v1.21 起已弃用,并将在 v1.25 中删除。
+我们建议迁移到 [Pod 安全准入](/zh/docs/concepts/security/pod-security-admission/) 或第三方准入插件。
From 36f3fedebb72f320a56bda599a1497d6412d8647 Mon Sep 17 00:00:00 2001
From: zaunist
Date: Mon, 25 Apr 2022 01:25:52 +0800
Subject: [PATCH 013/119] docs: Rsyc kubeadm-upgrade.md
---
.../kubeadm/kubeadm-upgrade.md | 110 ++++++++++--------
1 file changed, 63 insertions(+), 47 deletions(-)
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 25f10b0fed..fdad20dfc4 100644
--- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
+++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
@@ -72,16 +72,36 @@ The upgrade workflow at high level is the following:
+
### 附加信息
-- 在对 kubelet 作次版本升版时需要[腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
- 对于控制面节点,其上可能运行着 CoreDNS Pods 或者其它非常重要的负载。
+- 下述说明了在升级过程中何时腾空每个节点。如果你正在对任何 kubelet 进行小版本升级,
+ 你需要先腾空待升级的节点(或多个节点)。对于控制面节点,其上可能运行着 CoreDNS Pods
+ 或者其它非常重要的负载。更多信息见[腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
- 升级后,因为容器规约的哈希值已更改,所有容器都会被重新启动。
+
+
+- 要验证 kubelet 服务在升级后是否成功重启,可以执行 `systemctl status kubelet`
+ 或 `journalctl -xeu kubelet` 查看服务日志。
+- 不建议使用 `kubeadm upgrade` 的 `--config 参数和 [kubeadm 配置 API 类型](/zh/docs/reference/config-api/kubeadm-config.v1beta3)
+ 来重新配置集群,这样会产生意想不到的结果。请按照[重新配置 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure)
+ 中的步骤来进行。
+
一旦该命令结束,你应该会看到:
- ```
+ ```console
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v{{< skew currentVersion >}}.x". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
@@ -259,7 +283,7 @@ Same as the first control plane node but use:
-->
与第一个控制面节点相同,但是使用:
-```
+```shell
sudo kubeadm upgrade node
```
@@ -268,7 +292,7 @@ instead of:
-->
而不是:
-```
+```shell
sudo kubeadm upgrade apply
```
@@ -299,34 +323,33 @@ Also calling `kubeadm upgrade plan` and upgrading the CNI provider plugin is no
### 升级 kubelet 和 kubectl
-- 升级 kubelet 和 kubectl
+- 升级 kubelet 和 kubectl:
{{< tabs name="k8s_install_kubelet" >}}
{{% tab name="Ubuntu、Debian 或 HypriotOS" %}}
-
+
+ ```shell
+ # 用最新的补丁版本号替换 {{< skew currentVersion >}}.x-00 中的 x
+ yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+
{{% /tab %}}
{{< /tabs >}}
+
-`STATUS` 应显示所有节点为 `Ready` 状态,并且版本号已经被更新。
+`STATUS` 应显示所有节点为 `Ready` 状态,并且版本号已经被更新。
`kubeadm upgrade node` 在工作节点上完成以下工作:
-- 从集群取回 kubeadm `ClusterConfiguration`。
+- 从集群取回 kubeadm `ClusterConfiguration`。
- 为本节点升级 kubelet 配置。
-
From 5e46c9bac27425830687be7c8b12f232033390ef Mon Sep 17 00:00:00 2001
From: "wei.wang"
Date: Tue, 26 Apr 2022 13:15:50 +0800
Subject: [PATCH 014/119] [zh]Update
content/zh/docs/concepts/architecture/nodes.md
---
.../zh/docs/concepts/architecture/nodes.md | 24 ++++++++++---------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/content/zh/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md
index 68ffb345b1..57774d7cd1 100644
--- a/content/zh/docs/concepts/architecture/nodes.md
+++ b/content/zh/docs/concepts/architecture/nodes.md
@@ -570,26 +570,28 @@ controller deletes the node from its list of nodes.
The third is monitoring the nodes' health. The node controller is
responsible for:
-- In the case that a node becomes unreachable, updating the NodeReady condition
- of within the Node's `.status`. In this case the node controller sets the
- NodeReady condition to `ConditionUnknown`.
+- In the case that a node becomes unreachable, updating the `Ready` condition
+ in the Node's `.status` field. In this case the node controller sets the
+ `Ready` condition to `Unknown`.
- If a node remains unreachable: triggering
[API-initiated eviction](/docs/concepts/scheduling-eviction/api-eviction/)
for all of the Pods on the unreachable node. By default, the node controller
- waits 5 minutes between marking the node as `ConditionUnknown` and submitting
+ waits 5 minutes between marking the node as `Unknown` and submitting
the first eviction request.
-The node controller checks the state of each node every `-node-monitor-period` seconds.
+By default, the node controller checks the state of each node every 5 seconds.
+This period can be configured using the `--node-monitor-period` flag on the
+`kube-controller-manager` component.
-->
第三个是监控节点的健康状况。节点控制器负责:
-- 在节点不可达的情况下,在 Node 的 `.status` 中更新 NodeReady 状况。
+- 在节点不可达的情况下,在 Node 的 `.status` 中更新 `Ready` 状况。
在这种情况下,节点控制器将 NodeReady 状况更新为 `Unknown` 。
- 如果节点仍然无法访问:对于不可达节点上的所有 Pod 触发
[API-发起的逐出](/zh/docs/concepts/scheduling-eviction/api-eviction/)。
默认情况下,节点控制器在将节点标记为 `Unknown` 后等待 5 分钟提交第一个驱逐请求。
-节点控制器每隔 `--node-monitor-period` 秒检查每个节点的状态。
+默认情况下,节点控制器每5秒检查一次节点状态,可以使用 `kube-controller-manager` 组件上的 `--node-monitor-period` 参数来配置周期。
当一个可用区域(Availability Zone)中的节点变为不健康时,节点的驱逐行为将发生改变。
-节点控制器会同时检查可用区域中不健康(NodeReady 状况为 `Unknown` 或 `False`)
+节点控制器会同时检查可用区域中不健康(`Ready` 状况为 `Unknown` 或 `False`)
的节点的百分比:
## 节点拓扑 {#node-topology}
-{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
+{{< feature-state state="beta" for_k8s_version="v1.18" >}}
注意,默认情况下,下面描述的两个配置选项,`ShutdownGracePeriod` 和
From 32b87c471aa34fee1f3da80aa9893f9bec248d1a Mon Sep 17 00:00:00 2001
From: "xin.li"
Date: Tue, 26 Apr 2022 20:49:42 +0800
Subject: [PATCH 015/119] [zh] Add examples/tls
Signed-off-by: xin.li
---
.../zh/examples/tls/server-signing-config.json | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 content/zh/examples/tls/server-signing-config.json
diff --git a/content/zh/examples/tls/server-signing-config.json b/content/zh/examples/tls/server-signing-config.json
new file mode 100644
index 0000000000..86860d7369
--- /dev/null
+++ b/content/zh/examples/tls/server-signing-config.json
@@ -0,0 +1,15 @@
+{
+ "signing": {
+ "default": {
+ "usages": [
+ "digital signature",
+ "key encipherment",
+ "server auth"
+ ],
+ "expiry": "876000h",
+ "ca_constraint": {
+ "is_ca": false
+ }
+ }
+ }
+}
\ No newline at end of file
From 38aada60dbbf8545b3e908b3dafe1ba9af900426 Mon Sep 17 00:00:00 2001
From: "xin.li"
Date: Tue, 26 Apr 2022 20:54:03 +0800
Subject: [PATCH 016/119] [zh] Create examples/mongodb
Signed-off-by: xin.li
---
.../application/mongodb/mongo-deployment.yaml | 31 +++++++++++++++++++
.../application/mongodb/mongo-service.yaml | 14 +++++++++
2 files changed, 45 insertions(+)
create mode 100644 content/zh/examples/application/mongodb/mongo-deployment.yaml
create mode 100644 content/zh/examples/application/mongodb/mongo-service.yaml
diff --git a/content/zh/examples/application/mongodb/mongo-deployment.yaml b/content/zh/examples/application/mongodb/mongo-deployment.yaml
new file mode 100644
index 0000000000..04908ce25b
--- /dev/null
+++ b/content/zh/examples/application/mongodb/mongo-deployment.yaml
@@ -0,0 +1,31 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: mongo
+ labels:
+ app.kubernetes.io/name: mongo
+ app.kubernetes.io/component: backend
+spec:
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: mongo
+ app.kubernetes.io/component: backend
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: mongo
+ app.kubernetes.io/component: backend
+ spec:
+ containers:
+ - name: mongo
+ image: mongo:4.2
+ args:
+ - --bind_ip
+ - 0.0.0.0
+ resources:
+ requests:
+ cpu: 100m
+ memory: 100Mi
+ ports:
+ - containerPort: 27017
diff --git a/content/zh/examples/application/mongodb/mongo-service.yaml b/content/zh/examples/application/mongodb/mongo-service.yaml
new file mode 100644
index 0000000000..b9cef607bc
--- /dev/null
+++ b/content/zh/examples/application/mongodb/mongo-service.yaml
@@ -0,0 +1,14 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: mongo
+ labels:
+ app.kubernetes.io/name: mongo
+ app.kubernetes.io/component: backend
+spec:
+ ports:
+ - port: 27017
+ targetPort: 27017
+ selector:
+ app.kubernetes.io/name: mongo
+ app.kubernetes.io/component: backend
From e0e1b3095ce233272a13c8f04b2080acf772d44e Mon Sep 17 00:00:00 2001
From: kinzhi
Date: Tue, 26 Apr 2022 21:03:04 +0800
Subject: [PATCH 017/119] Update content/zh/docs/concepts/architecture/nodes.md
Co-authored-by: Qiming Teng
---
content/zh/docs/concepts/architecture/nodes.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/content/zh/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md
index 57774d7cd1..1676e635d8 100644
--- a/content/zh/docs/concepts/architecture/nodes.md
+++ b/content/zh/docs/concepts/architecture/nodes.md
@@ -591,7 +591,8 @@ This period can be configured using the `--node-monitor-period` flag on the
[API-发起的逐出](/zh/docs/concepts/scheduling-eviction/api-eviction/)。
默认情况下,节点控制器在将节点标记为 `Unknown` 后等待 5 分钟提交第一个驱逐请求。
-默认情况下,节点控制器每5秒检查一次节点状态,可以使用 `kube-controller-manager` 组件上的 `--node-monitor-period` 参数来配置周期。
+默认情况下,节点控制器每 5 秒检查一次节点状态,可以使用 `kube-controller-manager`
+组件上的 `--node-monitor-period` 参数来配置周期。
## 使用 Mermaid 来可视化
你可以使用 [Mermaid JS](https://mermaidjs.github.io) 来进行可视化展示。
-Mermaid JS 版本在 [/layouts/partials/head.html](https://github.com/kubernetes/website/blob/master/layouts/partials/head.html)
+Mermaid JS 版本在 [/layouts/partials/head.html](https://github.com/kubernetes/website/blob/main/layouts/partials/head.html)
中设置。
对于控制平面节点,执行额外的步骤:
@@ -78,8 +76,6 @@ For control-plane nodes additional steps are performed:
1. 添加新的本地 etcd 成员。
-1. 将此节点添加到 kubeadm 集群的 ClusterStatus。
-
@@ -123,6 +119,13 @@ For example:
sudo kubeadm join --skip-phases=preflight --config=config.yaml
```
+{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+
+
+或者,你可以使用 `JoinConfiguration` 中的 `skipPhases` 字段。
+
@@ -523,11 +526,11 @@ the [kubeadm config migrate](/docs/reference/setup-tools/kubeadm/kubeadm-config/
命令转换。
-有关配置的字段和用法的更多信息,你可以导航到我们的 API 参考页
-并从[列表]中选择一个版本(https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#pkg-subdirectories)。
+有关配置的字段和用法的更多信息,你可以导航到我们的
+[API 参考页](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。
## {{% heading "whatsnext" %}}
From a9c422d8169ce04eaeaad618f477444674e5020a Mon Sep 17 00:00:00 2001
From: Qiming Teng
Date: Wed, 27 Apr 2022 09:12:38 +0800
Subject: [PATCH 025/119] Fix dockershim alias
---
content/zh/blog/_posts/2020-12-02-dockershim-faq.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/zh/blog/_posts/2020-12-02-dockershim-faq.md b/content/zh/blog/_posts/2020-12-02-dockershim-faq.md
index 5b8d896a96..e0c683255f 100644
--- a/content/zh/blog/_posts/2020-12-02-dockershim-faq.md
+++ b/content/zh/blog/_posts/2020-12-02-dockershim-faq.md
@@ -3,7 +3,7 @@ layout: blog
title: "弃用 Dockershim 的常见问题"
date: 2020-12-02
slug: dockershim-faq
-aliases: [ '/dockershim' ]
+aliases: [ '/zh/dockershim' ]
---
+
+
+
From 10e566a222a139d326440ccea639bcbaedd48104 Mon Sep 17 00:00:00 2001
From: chengleqi
Date: Wed, 27 Apr 2022 12:15:30 +0800
Subject: [PATCH 028/119] Update configure-projected-volume-storage.md
---
.../configure-projected-volume-storage.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md b/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
index d0ff476b38..66230434d9 100644
--- a/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
+++ b/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
@@ -59,7 +59,7 @@ Here is the configuration file for the Pod:
```shell
# 创建包含用户名和密码的文件:
echo -n "admin" > ./username.txt
- echo -n "1f2d1e2e67df" > ./password.txt-->
+ echo -n "1f2d1e2e67df" > ./password.txt
# 将上述文件引用到 Secret:
kubectl create secret generic user --from-file=./username.txt
From 446de63a6cfd2d29e5c3b2f267c1caf7cdaaab78 Mon Sep 17 00:00:00 2001
From: Qiming Teng
Date: Sat, 23 Apr 2022 11:07:09 +0800
Subject: [PATCH 029/119] [zh] Update controlplane to node communication page
---
.../control-plane-node-communication.md | 36 +++++++++----------
1 file changed, 18 insertions(+), 18 deletions(-)
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 3e2beaafd9..8cf742e272 100644
--- a/content/zh/docs/concepts/architecture/control-plane-node-communication.md
+++ b/content/zh/docs/concepts/architecture/control-plane-node-communication.md
@@ -30,9 +30,9 @@ One or more forms of [authorization](/docs/reference/access-authn-authz/authoriz
## 节点到控制面
Kubernetes 采用的是中心辐射型(Hub-and-Spoke)API 模式。
-所有从集群(或所运行的 Pods)发出的 API 调用都终止于 apiserver。
+所有从集群(或所运行的 Pods)发出的 API 调用都终止于 API 服务器。
其它控制面组件都没有被设计为可暴露远程服务。
-apiserver 被配置为在一个安全的 HTTPS 端口(通常为 443)上监听远程连接请求,
+API 服务器被配置为在一个安全的 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)
@@ -41,7 +41,7 @@ apiserver 被配置为在一个安全的 HTTPS 端口(通常为 443)上监
-应该使用集群的公共根证书开通节点,这样它们就能够基于有效的客户端凭据安全地连接 apiserver。
+应该使用集群的公共根证书开通节点,这样它们就能够基于有效的客户端凭据安全地连接 API 服务器。
一种好的方法是以客户端证书的形式将客户端凭据提供给 kubelet。
请查看 [kubelet TLS 启动引导](/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/)
以了解如何自动提供 kubelet 客户端证书。
@@ -52,12 +52,12 @@ The `kubernetes` service (in `default` namespace) is configured with a virtual I
The control plane components also communicate with the cluster apiserver over the secure port.
-->
-想要连接到 apiserver 的 Pod 可以使用服务账号安全地进行连接。
+想要连接到 API 服务器的 Pod 可以使用服务账号安全地进行连接。
当 Pod 被实例化时,Kubernetes 自动把公共根证书和一个有效的持有者令牌注入到 Pod 里。
`kubernetes` 服务(位于 `default` 名字空间中)配置了一个虚拟 IP 地址,用于(通过 kube-proxy)转发
-请求到 apiserver 的 HTTPS 末端。
+请求到 API 服务器的 HTTPS 末端。
-控制面组件也通过安全端口与集群的 apiserver 通信。
+控制面组件也通过安全端口与集群的 API 服务器通信。
## 控制面到节点
-从控制面(apiserver)到节点有两种主要的通信路径。
-第一种是从 apiserver 到集群中每个节点上运行的 kubelet 进程。
-第二种是从 apiserver 通过它的代理功能连接到任何节点、Pod 或者服务。
+从控制面(API 服务器)到节点有两种主要的通信路径。
+第一种是从 API 服务器到集群中每个节点上运行的 kubelet 进程。
+第二种是从 API 服务器通过它的代理功能连接到任何节点、Pod 或者服务。
### API 服务器到 kubelet
-从 apiserver 到 kubelet 的连接用于:
+从 API 服务器到 kubelet 的连接用于:
* 获取 Pod 日志
* 挂接(通过 kubectl)到运行中的 Pod
* 提供 kubelet 的端口转发功能。
这些连接终止于 kubelet 的 HTTPS 末端。
-默认情况下,apiserver 不检查 kubelet 的服务证书。这使得此类连接容易受到中间人攻击,
+默认情况下,API 服务器不检查 kubelet 的服务证书。这使得此类连接容易受到中间人攻击,
在非受信网络或公开网络上运行也是 **不安全的**。
-为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 apiserver
-提供一个根证书包,用于 kubelet 的服务证书。
+为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 API
+服务器提供一个根证书包,用于 kubelet 的服务证书。
-如果无法实现这点,又要求避免在非受信网络或公共网络上进行连接,可在 apiserver 和
+如果无法实现这点,又要求避免在非受信网络或公共网络上进行连接,可在 API 服务器和
kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。
最后,应该启用
@@ -122,9 +122,9 @@ 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 和服务
+### API 服务器到节点、Pod 和服务
-从 apiserver 到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。
+从 API 服务器到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。
这些连接可通过给 API URL 中的节点、Pod 或服务名称添加前缀 `https:` 来运行在安全的 HTTPS 连接上。
不过这些连接既不会验证 HTTPS 末端提供的证书,也不会提供客户端证书。
因此,虽然连接是加密的,仍无法提供任何完整性保证。
@@ -140,8 +140,8 @@ SSH tunnels are currently deprecated so you shouldn't opt to use them unless you
-->
### SSH 隧道 {#ssh-tunnels}
-Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,apiserver
-建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务)
+Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,API
+服务器建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务)
并通过这个隧道传输所有到 kubelet、节点、Pod 或服务的请求。
这一隧道保证通信不会被暴露到集群节点所运行的网络之外。
From 3c54dacb3e7e755db99aa654694396c21076c919 Mon Sep 17 00:00:00 2001
From: nasa9084
Date: Sat, 23 Apr 2022 03:17:17 +0900
Subject: [PATCH 030/119] Update README-ja.md
Update README-ja.md
Co-authored-by: Toshiaki Inukai <82919057+t-inu@users.noreply.github.com>
fix anchor
---
README-ja.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 50 insertions(+), 2 deletions(-)
diff --git a/README-ja.md b/README-ja.md
index 91e624c610..c4acd30d84 100644
--- a/README-ja.md
+++ b/README-ja.md
@@ -4,6 +4,9 @@
このリポジトリには、[KubernetesのWebサイトとドキュメント](https://kubernetes.io/)をビルドするために必要な全アセットが格納されています。貢献に興味を持っていただきありがとうございます!
+- [ドキュメントに貢献する](#contributing-to-the-docs)
+- [翻訳された`README.md`一覧](#localization-readmemds)
+
# リポジトリの使い方
Hugo(Extended version)を使用してWebサイトをローカルで実行することも、コンテナランタイムで実行することもできます。コンテナランタイムを使用することを強くお勧めします。これにより、本番Webサイトとのデプロイメントの一貫性が得られます。
@@ -56,6 +59,43 @@ make serve
これで、Hugoのサーバーが1313番ポートを使って開始します。お使いのブラウザにて http://localhost:1313 にアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。
+## API reference pagesをビルドする
+
+`content/en/docs/reference/kubernetes-api`に配置されているAPIリファレンスページはを使ってSwagger仕様書からビルドされています。
+
+新しいKubernetesリリースのためにリファレンスページをアップデートするには、次の手順を実行します:
+
+1. `api-ref-generator`サブモジュールをプルする:
+
+ ```bash
+ git submodule update --init --recursive --depth 1
+ ```
+
+2. Swagger仕様書を更新する:
+
+ ```bash
+ curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json
+ ```
+
+3. 新しいリリースの変更を反映するため、`api-ref-assets/config/`で`toc.yaml`と`fields.yaml`を適用する。
+
+4. 次に、ページをビルドする:
+
+ ```bash
+ make api-reference
+ ```
+
+ コンテナイメージからサイトを作成・サーブする事でローカルで結果をテストすることができます:
+
+ ```bash
+ make container-image
+ make container-serve
+ ```
+
+ APIリファレンスを見るために、ブラウザでを開いてください。
+
+5. 新しいコントラクトのすべての変更が設定ファイル`toc.yaml`と`fields.yaml`に反映されたら、新しく生成されたAPIリファレンスページとともにPull Requestを作成します。
+
## トラブルシューティング
### error: failed to transform resource: TOCSS: failed to transform "scss/main.scss" (text/x-scss): this feature is not available in your current Hugo version
@@ -107,7 +147,7 @@ sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
- [Slack](https://kubernetes.slack.com/messages/kubernetes-docs-ja)
- [メーリングリスト](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)
-## ドキュメントに貢献する
+## ドキュメントに貢献する {#contributing-to-the-docs}
GitHubの画面右上にある**Fork**ボタンをクリックすると、お使いのGitHubアカウントに紐付いた本リポジトリのコピーが作成され、このコピーのことを*フォーク*と呼びます。フォークリポジトリの中ではお好きなように変更を加えていただいて構いません。加えた変更をこのリポジトリに追加したい任意のタイミングにて、フォークリポジトリからPull Reqeustを作成してください。
@@ -124,7 +164,15 @@ Kubernetesのドキュメントへの貢献に関する詳細については以
* [ドキュメントのスタイルガイド](https://kubernetes.io/docs/contribute/style/style-guide/)
* [Kubernetesドキュメントの翻訳方法](https://kubernetes.io/docs/contribute/localization/)
-## 翻訳された`README.md`一覧
+### New Contributor Ambassadors
+
+コントリビュートする時に何か助けが必要なら、[New Contributor Ambassadors](https://kubernetes.io/docs/contribute/advanced/#serve-as-a-new-contributor-ambassador)に聞いてみると良いでしょう。彼らはSIG Docsのapproverで、最初の数回のPull Requestを通して新しいコントリビューターを指導し助けることを責務としています。New Contributors Ambassadorsにコンタクトするには、[Kubernetes Slack](https://slack.k8s.io)が最適な場所です。現在のSIG DocsのNew Contributor Ambassadorは次の通りです:
+
+| 名前 | Slack | GitHub |
+| -------------------------- | -------------------------- | -------------------------- |
+| Arsh Sharma | @arsh | @RinkiyaKeDad |
+
+## 翻訳された`README.md`一覧 {#localization-readmemds}
| Language | Language |
|---|---|
From a9a1b0d2b6d0884b8cd2e9903656f6e76bb1e566 Mon Sep 17 00:00:00 2001
From: "xin.li"
Date: Wed, 27 Apr 2022 15:50:21 +0800
Subject: [PATCH 031/119] [zh] Sync booz-allen
Signed-off-by: xin.li
---
.../booz-allen/booz-allen-featured-logo.svg | 1 +
.../booz-allen/booz-allen_featured_logo.png | Bin 0 -> 1989 bytes
content/zh/case-studies/booz-allen/index.html | 80 ++++++++++++++++++
3 files changed, 81 insertions(+)
create mode 100644 content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg
create mode 100644 content/zh/case-studies/booz-allen/booz-allen_featured_logo.png
create mode 100644 content/zh/case-studies/booz-allen/index.html
diff --git a/content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg b/content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg
new file mode 100644
index 0000000000..3ce58c68f7
--- /dev/null
+++ b/content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/zh/case-studies/booz-allen/booz-allen_featured_logo.png b/content/zh/case-studies/booz-allen/booz-allen_featured_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9bc64ba3bd2bb30fec26ad2c1d3f5d216a32bb9
GIT binary patch
literal 1989
zcmciD=RX^Y9tLpLT2VE^anL%gEe8>Mwzx)P#;QG%N>WG7C}M;*O;N=at-X5GC@NG@
zdqim@r9~-@O&rvUAVs;(%lil1`{MU|KA-31^X8ijv$fy@hy&Qz*!ZBgO&!j2;{4*d
z+0XwTtQ&qFV&P`4;f}$m@JM(VlFisJ7=gSF4TPhS4oJ8kHk5)iU}NJ#LrsmHqNcv*
zDTfO~h0Wpo)jcKnZoCm!#yx>#&W9EWa_k!1f8JdbEPqghaGnOgtw4ZOVs(Kq-)&+=BSOovdUTYKhLsh+st9RSoPnzOhpb5Gn
z^JqVS>C!nus@(Zn?P6Dav!f0adv+SvQGwdg+1319@!Kt2`-6?~6LGH!fP|!BG?TGn
zMdZ_MuLPE+r=|V9otm1;#V`5S`_R%u5Qjh?osLp8GMwv*4+a3m*WE(UgFgK{y7_Rj
z(a{?j``DhIDIr|1ujl+ln;kKtf4zJ@;aUz)MV`)1yO_y4S6rD7c7#Q(D^Qi=JcQJET*b8D
z(j5IeDBLy+(T{p}gXcO0PkKIT?+-lF(Ju!sPF~iv2B{@gTxRL%jQIebg=QJ5O>$5i
zW5oZ(s42;~Wj+tJh7a0mS-LO&{u{Ri0G8vTHkGvGZ3cI?`pkLQMX->e_0-(ltwhh;)fwDdNClWa
zSqg~=DpW;;Q;eVm57d&TDkD?_Kljnb)B+>IIQ>gI`JB^mik;e|x
z2xHi;(poWz^$2zH*tk}%KF|cX$~0SRtM}B&c{%F&Q>I7pWm-jJ2GIZ1M=@Sf~&P2Ds8}_Yn#}QY8
zxYF&9;^2jr{SkebBJe>Ped+gd?!g~js
z{36a9!^&$3>X}(?WhvnvWYD11^aX|c^C!3JN?mm@}mCw8wt@cMu3U=
z!-5w(jVk}9Ws9ndI-+)4qO2hh=~bFK|1zoIbkEf=|9erG;0WBXakoWR%56RRy8Nt-
z#c1dX?EYGdfU|6d-yc?Xqog%;A^xlzO1Kpslv$~)Lcg+?dx5F)j;wK1(vGAA9%
zR2#p>4No-aX8p=nw1r^HWP~?<5Pia08c5$&kgmGwSG(J!oGnF@V429M6Rot|&FQ7-
zVQjh8N>eKst@2Ax>-;i|LVoemDBgUt`O%f2JWc95ItFUnfZT
zP8nIIOPNh6GF2a?8mBJU3TcR$&bvNgb4Z8@80GyyET5Tu7Dn|syuJ2TP6t8?#i+LP
zsXIko$i1^b(2Q~?oMBFU0{#IfgkzcRzwZLhPNFue2xI;q`uvx7rXo*4!uEu70#E7S
b3!H4hpZ3Gs$thgtF0(<+Y)xxTd>{P>_Mg9c
literal 0
HcmV?d00001
diff --git a/content/zh/case-studies/booz-allen/index.html b/content/zh/case-studies/booz-allen/index.html
new file mode 100644
index 0000000000..7b53dc01ae
--- /dev/null
+++ b/content/zh/case-studies/booz-allen/index.html
@@ -0,0 +1,80 @@
+---
+title: Booz Allen Case Study
+linkTitle: Booz Allen Hamilton
+case_study_styles: true
+cid: caseStudies
+logo: booz-allen-featured-logo.svg
+featured: true
+weight: 2
+quote: >
+ Kubernetes is a great solution for us. It allows us to rapidly iterate on our clients' demands.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/booz-allen/banner4.jpg
+heading_title_text: Booz Allen Hamilton
+use_gradient_overlay: true
+subheading: >
+ How Booz Allen Hamilton Is Helping Modernize the Federal Government with Kubernetes
+case_study_details:
+ - Company: Booz Allen Hamilton
+ - Location: United States
+ - Industry: Government
+---
+
+
Challenge
+
+
In 2017, Booz Allen Hamilton's Strategic Innovation Group worked with the federal government to relaunch the decade-old recreation.gov website, which provides information and real-time booking for more than 100,000 campsites and facilities on federal lands across the country. The infrastructure needed to be agile, reliable, and scalable—as well as repeatable for the other federal agencies that are among Booz Allen Hamilton's customers.
+
+
Solution
+
+
"The only way that we thought we could be successful with this problem across all the different agencies is to create a microservice architecture and containers, so that we could be very dynamic and very agile to any given agency for whatever requirements that they may have," says Booz Allen Hamilton Senior Lead Technologist Martin Folkoff. To meet those requirements, Folkoff's team looked to Kubernetes for orchestration.
+
+
Impact
+
+
With the recreation.gov Kubernetes platform, changes can be implemented in about 30 minutes, compared to the multiple hours or even days legacy government applications require to review the code, get approval, and deploy the fix. Recreation.gov deploys to production on average 10 times a day. With monitoring, security, and logging built in, developers can create and publish new services to production within a week. Additionally, Folkoff says, "supporting the large, existing monoliths in the government is extremely expensive," and migrating into a more modern platform has resulted in perhaps 50% cost savings.
+
+{{< case-studies/quote
+ image="/images/case-studies/booz-allen/banner2.jpg"
+ author="JOSH BOYD, CHIEF TECHNOLOGIST AT BOOZ ALLEN HAMILTON"
+>}}
+"When there's a regulatory change in an agency, or a legislative change in Congress, or an executive order that changes the way you do business, how do I deploy that and get that out to the people who need it rapidly? At the end of the day, that's the problem we're trying to help the government solve with tools like Kubernetes."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+The White House launched an IT modernization effort in 2017, and in addition to improving cybersecurity and shifting to the public cloud and a consolidated IT model, "the federal government is looking to provide a better experience to citizens in every way that we interact with the government through every channel," says Booz Allen Hamilton Senior Lead Technologist Martin Folkoff.
+{{< /case-studies/lead >}}
+
+
To that end, Folkoff's Strategic Innovation Group worked with the federal government last year to relaunch the decade-old recreation.gov website, which provides information and real-time booking for more than 100,000 campsites and facilities on federal lands across the country.
+
+
The infrastructure needed to be agile, reliable, and scalable—as well as repeatable for the other federal agencies that are among Booz Allen Hamilton's customers. "The only way that we thought we could be successful with this problem across all the different agencies is to create a microservice architecture, so that we could be very dynamic and very agile to any given agency for whatever requirements that they may have," says Folkoff.
+
+{{< case-studies/quote author="MARTIN FOLKOFF, SENIOR LEAD TECHNOLOGIST AT BOOZ ALLEN HAMILTON" >}}
+"With CNCF, there's a lot of focus on scale, and so there's a lot of comfort knowing that as the project grows, we're going to be comfortable using that tool set."
+{{< /case-studies/quote >}}
+
+
Booz Allen Hamilton, which has provided consulting services to the federal government for more than a century, introduced microservices, Docker containers, and AWS to its federal agency clients about five years ago. The next logical step was Kubernetes for orchestration. "Knowing that we had to be really agile and really reliable and scalable, we felt that the only technology that we know that can enable those kinds of things are the ones the CNCF provides," Folkoff says. "One of the things that is always important for the government is to make sure that the things that we build really endure. Using technology that is supported across multiple different companies and has strong governance gives people a lot of confidence."
+
+
Kubernetes was also aligned with the government's open source and IT modernization initiatives, so there has been an uptick in its usage at federal agencies over the past two years. "Now that Kubernetes is becoming offered as a service by the cloud providers like AWS and Microsoft, we're starting to see even more interest," says Chief Technologist Josh Boyd. Adds Folkoff: "With CNCF, there's a lot of focus on scale, and so there's a lot of comfort knowing that as the project grows, we're going to be comfortable using that tool set."
+
+
The greenfield recreation.gov project allowed the team to build a new Kubernetes-enabled site running on AWS, and the migration lasted only a week, when the old site didn't take bookings. "For the actual transition, we just swapped a DNS server, and it only took about 35 seconds between the old site being down and our new site being up and available," Folkoff adds.
+
+{{< case-studies/quote
+ image="/images/case-studies/booz-allen/banner1.png"
+ author="MARTIN FOLKOFF, SENIOR LEAD TECHNOLOGIST AT BOOZ ALLEN HAMILTON"
+>}}
+"Kubernetes alone enables a dramatic reduction in cost as resources are prioritized to the day's event"
+{{< /case-studies/quote >}}
+
+
In addition to its work with the Department of Interior for recreation.gov, Booz Allen Hamilton has brought Kubernetes to various Defense, Intelligence, and civilian agencies. Says Boyd: "When there's a regulatory change in an agency, or a legislative change in Congress, or an executive order that changes the way you do business, how do I deploy that and get that out to the people who need it rapidly? At the end of the day, that's the problem we're trying to help the government solve with tools like Kubernetes."
+
+
For recreation.gov, the impact was clear and immediate. With the Kubernetes platform, Folkoff says, "if a new requirement for a permit comes out, we have the ability to design and develop and implement that completely independently of reserving a campsite. It provides a much better experience to users." Today, changes can be implemented in about 30 minutes, compared to the multiple hours or even days legacy government applications require to review the code, get approval, and deploy the fix. Recreation.gov deploys to production on average 10 times a day.
+
+
Developer velocity has been improved. "When I want to do monitoring or security or logging, I don't have to do anything to my services or my application to enable that anymore," says Boyd. "I get all of this magic just by being on the Kubernetes platform." With all of those things built in, developers can create and publish new services to production within one week.
+
+
Additionally, Folkoff says, "supporting the large, existing monoliths in the government is extremely expensive," and migrating into a more modern platform has resulted in perhaps 50% cost savings. "Kubernetes alone enables a dramatic reduction in cost as resources are prioritized to the day's event," he says. "For example, during a popular campsite release, camping-related services are scaled out while permit services are scaled down."
+
+
So far, "Kubernetes is a great solution for us," says Folkoff. "It allows us to rapidly iterate on our clients' demands." Looking ahead, the team sees further adoption of the Kubernetes platform across federal agencies. Says Boyd: "You get the ability for the rapid delivery of business value for your customers. You now have observability into everything that you're doing. You don't have these onesies and twosies unicorn servers anymore. Now everything that you deploy is deployed in the same way, it's all instrumented the same way, and it's all built and deployed the same way through our CI/CD processes."
+
+
They also see a push toward re-platforming. "There's still a lot of legacy workloads out there," says Boyd. "We've got the new challenges of greenfield development and integration with legacy systems, but also that brown field of 'Hey, how do I take this legacy monolith and get it onto a platform where now it's instrumented with all the magic of the Kubernetes platform without having to do a whole lot to my application?' I think re-platforming is a pretty big use case for the government right now."
+
+
And given the success that they've had with Kubernetes so far, Boyd says, "I think at this point that technology is becoming pretty easy to sell." Adds Folkoff: "People are really excited about being able to deploy, scale, be reliable, and do cheaper maintenance of all of this."
DENSO Corporation is one of the biggest automotive components suppliers in the world. With the advent of connected cars, the company launched a Digital Innovation Department to expand into software, working on vehicle edge and vehicle cloud products. But there were several technical challenges to creating an integrated vehicle edge/cloud platform: "the amount of computing resources, the occasional lack of mobile signal, and an enormous number of distributed vehicles," says R&D Product Manager Seiichi Koizumi.
+
+
Solution
+
+
Koizumi's team realized that because mobility services evolve every day, they needed the flexibility of the cloud native ecosystem for their platform. After considering other orchestrators, DENSO went with Kubernetes for orchestration and added Prometheus, Fluentd, Envoy, Istio, and Helm to the platform. Today, DENSO is using a vehicle edge computer, a private Kubernetes cloud, and managed Kubernetes (GKE, EKS, AKS).
+
+
Impact
+
+
Critical layer features can take 2-3 years to implement in the traditional, waterfall model of development at DENSO. With the Kubernetes platform and agile methods, there's a 2-month development cycle for non-critical software. Now, ten new applications are released a year, and a new prototype is introduced every week. "By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation," says Koizumi.
+
+{{< case-studies/quote
+ image="/images/case-studies/denso/banner1.png"
+ author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO"
+>}}
+"Another disruptive innovation is coming, so to survive in this situation, we need to change our culture."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+Spun off from Toyota in 1949, DENSO Corporation is one of the top automotive suppliers in the world today, with consolidated net revenue of $48.3 billion.
+{{< /case-studies/lead >}}
+
+
The company's mission is "contributing to a better world by creating value together with a vision for the future"—and part of that vision in recent years has been development on the vehicle edge and vehicle cloud.
+
+
With the advent of connected cars, DENSO established a Digital Innovation Department to expand its business beyond the critical layer of the engine, braking systems, and other automotive parts into the non-critical analytics and entertainment layer. Comparing connected cars to smartphones, R&D Product Manager Seiichi Koizumi says DENSO wants the ability to quickly and easily develop and install apps for the "blank slate" of the car, and iterate them based on the driver's preferences. Thus "we need a flexible application platform," he says.
+
+
But working on vehicle edge and vehicle cloud products meant there were several technical challenges: "the amount of computing resources, the occasional lack of mobile signal, and an enormous number of distributed vehicles," says Koizumi. "We are tackling these challenges to create an integrated vehicle edge/cloud platform."
+
+{{< case-studies/quote author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO" >}}
+"We got Kubernetes experts involved on our team, and it dramatically accelerated development speed."
+{{< /case-studies/quote >}}
+
+
Koizumi's team realized that because mobility services evolve every day, they needed the flexibility of the cloud native ecosystem for their platform. As they evaluated technologies, they were led by these criteria: Because their service-enabler business needed to support multiple cloud and on-premise environments, the solution needed to be cloud agnostic, with no vendor lock-in and open governance. It also had to support an edge-cloud integrated environment.
+
+
After considering other orchestrators, DENSO went with Kubernetes for orchestration and added Prometheus, Fluentd, Envoy, Istio, and Helm to the platform. During implementation, the team used "design thinking to clarify use cases and their value proposition," says Koizumi. Next, an agile development team worked on a POC, then an MVP, in DevOps style. "Even in the development phase, we are keeping a channel to end users," he adds.
+
+
One lesson learned during this process was the value of bringing in experts. "We tried to learn Kubernetes and cloud native technologies from scratch, but it took more time than expected," says Koizumi. "We got Kubernetes experts involved on our team, and it dramatically accelerated development speed."
+
+{{< case-studies/quote
+ image="/images/case-studies/denso/banner4.jpg"
+ author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO"
+>}}
+"By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation."
+{{< /case-studies/quote >}}
+
+
Today, DENSO is using a vehicle edge computer, a private Kubernetes cloud, and managed Kubernetes on GKE, EKS, and AKS. "We are developing a vehicle edge/cloud integrated platform based on a microservice and service mesh architecture," says Koizumi. "We extend cloud into multiple vehicle edges and manage it as a unified platform."
+
+
Cloud native has enabled DENSO to deliver applications via its new dash cam, which has a secure connection that collects data to the cloud. "It's like a smartphone," he says. "We are installing new applications and getting the data through the cloud, and we can keep updating new applications all through the dash cam."
+
+
The unified cloud native platform, combined with agile development, has had a positive impact on productivity. Critical layer features—those involving engines or braking systems, for example—can take 2-3 years to implement at DENSO, because of the time needed to test safety, but also because of the traditional, waterfall model of development. With the Kubernetes platform and agile methods, there's a 2-month development cycle for non-critical software. Now, ten new applications are released a year, and with the department's scrum-style development, a new prototype is introduced every week.
+
+
Application portability has also led to greater developer efficiency. "There's no need to care about differences in the multi-cloud platform anymore," says Koizumi. Now, "we are also trying to have the same portability between vehicle edge and cloud platform."
+
+
Another improvement: Automotive Tier-1 suppliers like DENSO always have multiple Tier-2 suppliers. "To provide automotive-grade high-availability services, we tried to do the same thing on a multi-cloud platform," says Koizumi. Before Kubernetes, maintaining two different systems simultaneously was difficult. "By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation," he says.
+
+
Cloud native has also profoundly changed the culture at DENSO. The Digital Innovation Department is known as "Noah's Ark," and it has grown from 2 members to 70—with plans to more than double in the next year. The way they operate is completely different from the traditional Japanese automotive culture. But just as the company embraced change brought by hybrid cars in the past decade, Koizumi says, they're doing it again now, as technology companies have moved into the connected car space. "Another disruptive innovation is coming," he says, "so to survive in this situation, we need to change our culture."
+
+
Looking ahead, Koizumi and his team are expecting serverless and zero-trust security architecture to be important enhancements of Kubernetes. They are glad DENSO has come along for the ride. "Mobility service businesses require agility and flexibility," he says. "DENSO is trying to bring cloud native flexibility into the vehicle infrastructure."
From 7f57114949be450b4cb826f8277aee89c1c40f3f Mon Sep 17 00:00:00 2001
From: Arhell
Date: Wed, 27 Apr 2022 12:39:02 +0300
Subject: [PATCH 035/119] [id] Update external provisioner specification
reference
---
content/id/docs/concepts/storage/storage-classes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/id/docs/concepts/storage/storage-classes.md b/content/id/docs/concepts/storage/storage-classes.md
index a3684755af..e5f3265768 100644
--- a/content/id/docs/concepts/storage/storage-classes.md
+++ b/content/id/docs/concepts/storage/storage-classes.md
@@ -89,7 +89,7 @@ Kamu tidak dibatasi untuk hanya menggunakan _provisioner_ internal yang disediak
pada list yang tersedia (yang memiliki nama dengan prefix "kubernetes.io" dan
didistribusikan bersamaan dengan Kubernetes). Kamu juga dapat menjalankan dan
mendefinisikan _provisioner_ eksternal yang merupakan program independen selama
-program tersebut menerapkan [spesifikasi](https://git.k8s.io/community/contributors/design-proposals/storage/volume-provisioning.md)
+program tersebut menerapkan [spesifikasi](https://github.com/kubernetes/design-proposals-archive/blob/main/storage/volume-provisioning.md)
yang didefinisikan oleh Kubernetes. Penulis dari _provisioner_ eksternal Kubernetes
memiliki kuasa penuh akan tempat dimana kode sumber yang mereka tulis, bagaimana
mekanisme penyediaan (_provisioning_) dilakukan, serta bagaimana hal tersebut dapat dijalankan,
From 511c74564d2466c4677e8daf5e0f6680dab88850 Mon Sep 17 00:00:00 2001
From: Jens-Uwe Walther
Date: Wed, 27 Apr 2022 12:14:03 +0200
Subject: [PATCH 036/119] Remove gp3 from supported EBS volume types
gp3 is not supported for the in-tree plugin "kubernetes.io/aws-ebs", only for external EBS CSI driver. So we have to remove it here
See following issue which shows that it does not work:
https://github.com/kubernetes/website/issues/33036#issuecomment-1110766774
---
content/en/docs/concepts/storage/storage-classes.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/content/en/docs/concepts/storage/storage-classes.md b/content/en/docs/concepts/storage/storage-classes.md
index 788f592abe..53ee88a2e7 100644
--- a/content/en/docs/concepts/storage/storage-classes.md
+++ b/content/en/docs/concepts/storage/storage-classes.md
@@ -49,7 +49,7 @@ metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
- type: gp3
+ type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
@@ -271,9 +271,9 @@ parameters:
fsType: ext4
```
-* `type`: `io1`, `gp2`, `gp3`, `sc1`, `st1`. See
+* `type`: `io1`, `gp2`, `sc1`, `st1`. See
[AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
- for details. Default: `gp3`.
+ for details. Default: `gp2`.
* `zone` (Deprecated): AWS zone. If neither `zone` nor `zones` is specified, volumes are
generally round-robin-ed across all active zones where Kubernetes cluster
has a node. `zone` and `zones` parameters must not be used at the same time.
From 107ff07d789731fb85635400e0e211f64762394d Mon Sep 17 00:00:00 2001
From: "xin.li"
Date: Wed, 27 Apr 2022 18:14:39 +0800
Subject: [PATCH 037/119] [zh] Update case-studies/ing
Signed-off-by: xin.li
---
content/zh/case-studies/ing/index.html | 78 +++++++++++++++++++
.../zh/case-studies/ing/ing_featured_logo.svg | 1 +
2 files changed, 79 insertions(+)
create mode 100644 content/zh/case-studies/ing/index.html
create mode 100644 content/zh/case-studies/ing/ing_featured_logo.svg
diff --git a/content/zh/case-studies/ing/index.html b/content/zh/case-studies/ing/index.html
new file mode 100644
index 0000000000..037ba9775d
--- /dev/null
+++ b/content/zh/case-studies/ing/index.html
@@ -0,0 +1,78 @@
+---
+title: ING Case Study
+linkTitle: ING
+case_study_styles: true
+cid: caseStudies
+weight: 50
+featured: true
+quote: >
+ The big cloud native promise to our business is the ability to go from idea to production within 48 hours. We are some years away from this, but that's quite feasible to us.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/ing/banner1.jpg
+heading_title_logo: /images/ing_logo.png
+subheading: >
+ Driving Banking Innovation with Cloud Native
+case_study_details:
+ - Company: ING
+ - Location: Amsterdam, Netherlands
+ - Industry: Finance
+---
+
+
Challenge
+
+
After undergoing an agile transformation, ING realized it needed a standardized platform to support the work their developers were doing. "Our DevOps teams got empowered to be autonomous," says Infrastructure Architect Thijs Ebbers. "It has benefits; you get all kinds of ideas. But a lot of teams are going to devise the same wheel. Teams started tinkering with Docker, Docker Swarm, Kubernetes, Mesos. Well, it's not really useful for a company to have one hundred wheels, instead of one good wheel.
+
+
Solution
+
+
Using Kubernetes for container orchestration and Docker for containerization, the ING team began building an internal public cloud for its CI/CD pipeline and green-field applications. The pipeline, which has been built on Mesos Marathon, will be migrated onto Kubernetes. The bank-account management app Yolt in the U.K. (and soon France and Italy) market already is live hosted on a Kubernetes framework. At least two greenfield projects currently on the Kubernetes framework will be going into production later this year. By the end of 2018, the company plans to have converted a number of APIs used in the banking customer experience to cloud native APIs and host these on the Kubernetes-based platform.
+
+
Impact
+
+
"Cloud native technologies are helping our speed, from getting an application to test to acceptance to production," says Infrastructure Architect Onno Van der Voort. "If you walk around ING now, you see all these DevOps teams, doing stand-ups, demoing. They try to get new functionality out there really fast. We held a hackathon for one of our existing components and basically converted it to cloud native within 2.5 days, though of course the tail takes more time before code is fully production ready."
+
+{{< case-studies/quote author="Thijs Ebbers, Infrastructure Architect, ING">}}
+"The big cloud native promise to our business is the ability to go from idea to production within 48 hours. We are some years away from this, but that's quite feasible to us."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+ING has long embraced innovation in banking, launching the internet-based ING Direct in 1997.
+{{< /case-studies/lead >}}
+
+
In that same spirit, the company underwent an agile transformation a few years ago. "Our DevOps teams got empowered to be autonomous," says Infrastructure Architect Thijs Ebbers. "It has benefits; you get all kinds of ideas. But a lot of teams are going to devise the same wheel. Teams started tinkering with Docker, Docker Swarm, Kubernetes, Mesos. Well, it's not really useful for a company to have one hundred wheels, instead of one good wheel."
+
+
Looking to standardize the deployment process within the company's strict security guidelines, the team looked at several solutions and found that in the past year, "Kubernetes won the container management framework wars," says Ebbers. "We decided to standardize ING on a Kubernetes framework." Everything is run on premise due to banking regulations, he adds, but "we will be building an internal public cloud. We are trying to get on par with what public clouds are doing. That's one of the reasons we got Kubernetes."
+
+
They also embraced Docker to address a major pain point in ING's CI/CD pipeline. Before containerization, "Every development team had to order a VM, and it was quite a heavy delivery model for them," says Infrastructure Architect Onno Van der Voort. "Another use case for containerization is when the application travels through the pipeline, they fire up Docker containers to do test work against the applications and after they've done the work, the containers get killed again."
+
+{{< case-studies/quote
+ image="/images/case-studies/ing/banner3.jpg"
+ author="Thijs Ebbers, Infrastructure Architect, ING"
+>}}
+"We decided to standardize ING on a Kubernetes framework." Everything is run on premise due to banking regulations, he adds, but "we will be building an internal public cloud. We are trying to get on par with what public clouds are doing. That's one of the reasons we got Kubernetes."
+{{< /case-studies/quote >}}
+
+
Because of industry regulations, applications are only allowed to go through the pipeline, where compliance is enforced, rather than be deployed directly into a container. "We have to run the complete platform of services we need, many routing from different places," says Van der Voort. "We need this Kubernetes framework for deploying the containers, with all those components, monitoring, logging. It's complex." For that reason, ING has chosen to start on the OpenShift Origin Kubernetes distribution.
+
+
Already, "cloud native technologies are helping our speed, from getting an application to test to acceptance to production," says Van der Voort. "If you walk around ING now, you see all these DevOps teams, doing stand-ups, demoing. They try to get new functionality out there really fast. We held a hackathon for one of our existing components and basically converted it to cloud native within 2.5 days, though of course the tail takes more time before code is fully production ready."
+
+
The pipeline, which has been built on Mesos Marathon, will be migrated onto Kubernetes. Some legacy applications are also being rewritten as cloud native in order to run on the framework. At least two smaller greenfield projects built on Kubernetes will go into production this year. By the end of 2018, the company plans to have converted a number of APIs used in the banking customer experience to cloud native APIs and host these on the Kubernetes-based platform.
+
+{{< case-studies/quote
+ image="/images/case-studies/ing/banner4.jpg"
+ author="Onno Van der Voort, Infrastructure Architect, ING"
+>}}
+"We have to run the complete platform of services we need, many routing from different places. We need this Kubernetes framework for deploying the containers, with all those components, monitoring, logging. It's complex."
+{{< /case-studies/quote >}}
+
+
The team, however, doesn't see the bank's back-end systems going onto the Kubernetes platform. "Our philosophy is it only makes sense to move things to cloud if they are cloud native," says Van der Voort. "If you have traditional architecture, build traditional patterns, it doesn't hold any value to go to the cloud." Adds Cloud Platform Architect Alfonso Fernandez-Barandiaran: "ING has a strategy about where we will go, in order to improve our agility. So it's not about how cool this technology is, it's about finding the right technology and the right approach."
+
+
The Kubernetes framework will be hosting some greenfield projects that are high priority for ING: applications the company is developing in response to PSD2, the European Commission directive requiring more innovative online and mobile payments that went into effect at the beginning of 2018. For example, a bank-account management app called Yolt, serving the U.K. market (and soon France and Italy), was built on a Kubernetes platform and has gone into production. ING is also developing blockchain-enabled applications that will live on the Kubernetes platform. "We've been contacted by a lot of development teams that have ideas with what they want to do with containers," says Ebbers.
+
+{{< case-studies/quote author="Alfonso Fernandez-Barandiaran, Cloud Platform Architect, ING" >}}
+Even with the particular requirements that come in banking, ING has managed to take a lead in technology and innovation. "Every time we have constraints, we look for maybe a better way that we can use this technology."
+{{< /case-studies/quote >}}
+
+
Even with the particular requirements that come in banking, ING has managed to take a lead in technology and innovation. "Every time we have constraints, we look for maybe a better way that we can use this technology," says Fernandez-Barandiaran.
+
+
The results, after all, are worth the effort. "The big cloud native promise to our business is the ability to go from idea to production within 48 hours," says Ebbers. "That would require all these projects to be mature. We are some years away from this, but that's quite feasible to us."
diff --git a/content/zh/case-studies/ing/ing_featured_logo.svg b/content/zh/case-studies/ing/ing_featured_logo.svg
new file mode 100644
index 0000000000..5a2df497c7
--- /dev/null
+++ b/content/zh/case-studies/ing/ing_featured_logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
From 4993a0d743cd4bdd934ac92ee143f3cf20030d76 Mon Sep 17 00:00:00 2001
From: "xin.li"
Date: Wed, 27 Apr 2022 19:03:39 +0800
Subject: [PATCH 038/119] [zh] Update workloads/pods/_index.md
Signed-off-by: xin.li
---
.../zh/docs/concepts/workloads/pods/_index.md | 50 +++++++++++++++----
1 file changed, 39 insertions(+), 11 deletions(-)
diff --git a/content/zh/docs/concepts/workloads/pods/_index.md b/content/zh/docs/concepts/workloads/pods/_index.md
index 4689f0aca3..5eec324a1a 100644
--- a/content/zh/docs/concepts/workloads/pods/_index.md
+++ b/content/zh/docs/concepts/workloads/pods/_index.md
@@ -92,6 +92,37 @@ Pod 的共享上下文包括一组 Linux 名字空间、控制组(cgroup)和
+## 使用 Pod {#using-pods}
+
+下面是一个 Pod 示例,它由一个运行镜像 `nginx:1.14.2` 的容器组成。
+
+{{< codenew file="pods/simple-pod.yaml" >}}
+
+要创建上面显示的 Pod,请运行以下命令:
+
+```shell
+kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml
+```
+
+
+Pod 通常不是直接创建的,而是使用工作负载资源创建的。
+有关如何将 Pod 用于工作负载资源的更多信息,请参阅 [使用 Pod](#working-with-pods)。
+
+### 用于管理 pod 的工作负载资源
+
+
-## 使用 Pod {#using-pods}
-
通常你不需要直接创建 Pod,甚至单实例 Pod。
相反,你会使用诸如
{{< glossary_tooltip text="Deployment" term_id="deployment" >}} 或
@@ -187,9 +216,9 @@ that updates those files from a remote source, as in the following diagram:
-->
例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的
-“sidecar(挂斗)”容器负责从远端更新这些文件,如下图所示:
+"边车 (sidercar)" 容器负责从远端更新这些文件,如下图所示:
-{{< figure src="/images/docs/pod.svg" alt="example pod diagram" width="50%" >}}
+{{< figure src="/images/docs/pod.svg" alt="Pod creation diagram" class="diagram-medium" >}}
-在节点上,{{< glossary_tooltip term_id="kubelet" text="kubelet" >}}并不直接监测
+在节点上,{{< glossary_tooltip term_id="kubelet" text="kubelet" >}} 并不直接监测
或管理与 Pod 模版相关的细节或模版的更新,这些细节都被抽象出来。
这种抽象和关注点分离简化了整个系统的语义,并且使得用户可以在不改变现有代码的
前提下就能扩展集群的行为。
@@ -412,7 +441,7 @@ Kubernetes 并不禁止你直接管理 Pod。对运行中的 Pod 的某些字段
Pods enable data sharing and communication among their constituent
containters.
-->
-### 资源共享和通信 {#resource-sharing-and-communication}
+### 资源共享和通信 {#resource-sharing-and-communication}
Pod 使它的成员容器间能够进行数据共享和通信。
@@ -459,14 +488,13 @@ can find each other via `localhost`. The containers in a Pod can also communicat
with each other using standard inter-process communications like SystemV semaphores
or POSIX shared memory. Containers in different Pods have distinct IP addresses
and can not communicate by IPC without
-[special configuration](/docs/concepts/policy/pod-security-policy/).
+and can not communicate by OS-level IPC without special configuration.
Containers that want to interact with a container running in a different Pod can
use IP networking to communicate.
-->
在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,并且可以通过 `localhost` 发现对方。
他们也能通过如 SystemV 信号量或 POSIX 共享内存这类标准的进程间通信方式互相通信。
-不同 Pod 中的容器的 IP 地址互不相同,没有
-[特殊配置](/zh/docs/concepts/policy/pod-security-policy/) 就不能使用 IPC 进行通信。
+不同 Pod 中的容器的 IP 地址互不相同,没有特殊配置,无法通过 OS 级 IPC 进行通信就不能使用 IPC 进行通信。
如果某容器希望与运行于其他 Pod 中的容器通信,可以通过 IP 联网的方式实现。
你不限于指定此处列出的 "内置" 制备器(其名称前缀为 "kubernetes.io" 并打包在 Kubernetes 中)。
你还可以运行和指定外部制备器,这些独立的程序遵循由 Kubernetes 定义的
-[规范](https://git.k8s.io/community/contributors/design-proposals/storage/volume-provisioning.md)。
+[规范](https://github.com/kubernetes/design-proposals-archive/blob/main/storage/volume-provisioning.md)。
外部供应商的作者完全可以自由决定他们的代码保存于何处、打包方式、运行方式、使用的插件(包括 Flex)等。
代码仓库 [kubernetes-sigs/sig-storage-lib-external-provisioner](https://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner)
包含一个用于为外部制备器编写功能实现的类库。你可以访问代码仓库
From 3660d10034d7cb583506dbeca022bc9b8784c8ae Mon Sep 17 00:00:00 2001
From: Qiming Teng
Date: Sat, 23 Apr 2022 11:00:54 +0800
Subject: [PATCH 043/119] [zh] Update the nodes concept page
---
.../zh/docs/concepts/architecture/nodes.md | 62 +++++++++----------
1 file changed, 28 insertions(+), 34 deletions(-)
diff --git a/content/zh/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md
index 1676e635d8..625c114df4 100644
--- a/content/zh/docs/concepts/architecture/nodes.md
+++ b/content/zh/docs/concepts/architecture/nodes.md
@@ -63,7 +63,7 @@ valid. For example, if you try to create a Node from the following JSON manifest
1. 节点上的 `kubelet` 向控制面执行自注册;
2. 你,或者别的什么人,手动添加一个 Node 对象。
-在你创建了 Node {{< glossary_tooltip text="object" term_id="object" >}}或者节点上的
+在你创建了 Node {{< glossary_tooltip text="对象" term_id="object" >}}或者节点上的
`kubelet` 执行了自注册操作之后,控制面会检查新的 Node 对象是否合法。
例如,如果你尝试使用下面的 JSON 对象来创建 Node 对象:
@@ -100,10 +100,9 @@ it becomes healthy.
You, or a {{< glossary_tooltip term_id="controller" text="controller">}}, must explicitly
delete the Node object to stop that health checking.
-->
-Kubernetes 会一直保存着非法节点对应的对象,并持续检查该节点是否已经
-变得健康。
-你,或者某个{{< glossary_tooltip term_id="controller" text="控制器">}}必需显式地
-删除该 Node 对象以停止健康检查操作。
+Kubernetes 会一直保存着非法节点对应的对象,并持续检查该节点是否已经变得健康。
+你,或者某个{{< glossary_tooltip term_id="controller" text="控制器">}}必须显式地删除该
+Node 对象以停止健康检查操作。
{{< /note >}}
### 节点名称唯一性 {#node-name-uniqueness}
-节点的[名称](/docs/concepts/overview/working-with-objects/names#names)用来标识 Node 对象。
+节点的[名称](/zh/docs/concepts/overview/working-with-objects/names#names)用来标识 Node 对象。
没有两个 Node 可以同时使用相同的名称。 Kubernetes 还假定名字相同的资源是同一个对象。
就 Node 而言,隐式假定使用相同名称的实例会具有相同的状态(例如网络配置、根磁盘内容)
和类似节点标签这类属性。这可能在节点被更改但其名称未变时导致系统状态不一致。
@@ -177,8 +176,8 @@ When the [Node authorization mode](/docs/reference/access-authn-authz/node/) and
kubelets are only authorized to create/modify their own Node resource.
-->
启用[Node 鉴权模式](/zh/docs/reference/access-authn-authz/node/)和
-[NodeRestriction 准入插件](/zh/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
-时,仅授权 `kubelet` 创建或修改其自己的节点资源。
+[NodeRestriction 准入插件](/zh/docs/reference/access-authn-authz/admission-controllers/#noderestriction)时,
+仅授权 `kubelet` 创建或修改其自己的节点资源。
{{< note >}}
-更多细节参考[安全腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
+更多细节参考[安全地腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
{{< note >}}
### 状况 {#condition}
-`conditions` 字段描述了所有 `Running` 节点的状态。状况的示例包括:
+`conditions` 字段描述了所有 `Running` 节点的状况。状况的示例包括:
节点控制器在确认 Pod 在集群中已经停止运行前,不会强制删除它们。
-你可以看到这些可能在无法访问的节点上运行的 Pod 处于 `Terminating` 或者 `Unknown` 状态。
+你可以看到可能在这些无法访问的节点上运行的 Pod 处于 `Terminating` 或者 `Unknown` 状态。
如果 kubernetes 不能基于下层基础设施推断出某节点是否已经永久离开了集群,
集群管理员可能需要手动删除该节点对象。
从 Kubernetes 删除节点对象将导致 API 服务器删除节点上所有运行的 Pod 对象并释放它们的名字。
@@ -480,7 +479,7 @@ the Kubernetes API.
### 信息(Info) {#info}
Info 指的是节点的一般信息,如内核版本、Kubernetes 版本(`kubelet` 和 `kube-proxy` 版本)、
-容器运行时详细信息,以及 节点使用的操作系统。
+容器运行时详细信息,以及节点使用的操作系统。
`kubelet` 从节点收集这些信息并将其发布到 Kubernetes API。
## 心跳 {#heartbeats}
+
Kubernetes 节点发送的心跳帮助你的集群确定每个节点的可用性,并在检测到故障时采取行动。
对于节点,有两种形式的心跳:
@@ -504,7 +504,7 @@ Kubernetes 节点发送的心跳帮助你的集群确定每个节点的可用性
Each Node has an associated Lease object.
-->
* 更新节点的 `.status`
-* `kube-node-lease` {{}}中的
+* `kube-node-lease` {{}}中的
[Lease(租约)](/docs/reference/kubernetes-api/cluster-resources/lease-v1/)对象。
每个节点都有一个关联的 Lease 对象。
@@ -588,7 +588,7 @@ This period can be configured using the `--node-monitor-period` flag on the
- 在节点不可达的情况下,在 Node 的 `.status` 中更新 `Ready` 状况。
在这种情况下,节点控制器将 NodeReady 状况更新为 `Unknown` 。
- 如果节点仍然无法访问:对于不可达节点上的所有 Pod 触发
- [API-发起的逐出](/zh/docs/concepts/scheduling-eviction/api-eviction/)。
+ [API 发起的逐出](/zh/docs/concepts/scheduling-eviction/api-eviction/)操作。
默认情况下,节点控制器在将节点标记为 `Unknown` 后等待 5 分钟提交第一个驱逐请求。
默认情况下,节点控制器每 5 秒检查一次节点状态,可以使用 `kube-controller-manager`
@@ -772,8 +772,8 @@ Note that by default, both configuration options described below,
thus not activating the graceful node shutdown functionality.
To activate the feature, the two kubelet config settings should be configured appropriately and set to non-zero values.
-->
-注意,默认情况下,下面描述的两个配置选项,`ShutdownGracePeriod` 和
-`ShutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活体面节点关闭功能。
+注意,默认情况下,下面描述的两个配置选项,`shutdownGracePeriod` 和
+`shutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活体面节点关闭功能。
要激活此功能特性,这两个 kubelet 配置选项要适当配置,并设置为非零值。
-例如,如果设置了 `ShutdownGracePeriod=30s` 和 `ShutdownGracePeriodCriticalPods=10s`,
+例如,如果设置了 `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)。
@@ -820,11 +820,6 @@ reserved for terminating [critical pods](/docs/tasks/administer-cluster/guarante
When pods were evicted during the graceful node shutdown, they are marked as failed.
Running `kubectl get pods` shows the status of the the evicted pods as `Shutdown`.
And `kubectl describe pod` indicates that the pod was evicted because of node shutdown:
-
-```
-Reason: Terminated
-Message: Pod was terminated in response to imminent node shutdown.
-```
-->
{{< note >}}
当 Pod 在正常节点关闭期间被驱逐时,它们会被标记为已经失败(Failed)。
@@ -973,8 +968,8 @@ containing the pod priority class values and their respective shutdown periods.
-->
如果此功能特性被启用,但没有提供配置数据,则不会出现排序操作。
-使用此功能特性需要启用 `GracefulNodeShutdownBasedOnPodPriority` 功能特性,
-并将 kubelet 配置中的 `ShutdownGracePeriodByPodPriority` 设置为期望的配置,
+使用此功能特性需要启用 `GracefulNodeShutdownBasedOnPodPriority` 特性门控,
+并将 kubelet 配置中的 `shutdownGracePeriodByPodPriority` 设置为期望的配置,
其中包含 Pod 的优先级类数值以及对应的关闭期限。
要在节点上启用交换内存,必须启用kubelet 的 `NodeSwap` 特性门控,
同时使用 `--fail-swap-on` 命令行参数或者将 `failSwapOn`
-[配置](/zh/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-设置为 false。
+[配置](/zh/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)设置为 false。
+
+
+生成证书密钥
certificate-key 操作的帮助命令
+
@@ -64,10 +81,12 @@ certificate-key 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
From bf5afce482aa3c7fdd33f1ffea750d8fc123324a Mon Sep 17 00:00:00 2001
From: howieyuen
Date: Thu, 28 Apr 2022 11:47:18 +0800
Subject: [PATCH 045/119] [zh]resync tls task: Manage TLS Certificates in a
Cluster
---
.../tasks/tls/managing-tls-in-a-cluster.md | 382 +++++++++++++-----
1 file changed, 285 insertions(+), 97 deletions(-)
diff --git a/content/zh/docs/tasks/tls/managing-tls-in-a-cluster.md b/content/zh/docs/tasks/tls/managing-tls-in-a-cluster.md
index 3c0605c60c..f6204c527f 100644
--- a/content/zh/docs/tasks/tls/managing-tls-in-a-cluster.md
+++ b/content/zh/docs/tasks/tls/managing-tls-in-a-cluster.md
@@ -29,49 +29,78 @@ Kubernetes 提供 `certificates.k8s.io` API,可让你配置由你控制的证
{{< note >}}
-使用 `certificates.k8s.io` API 创建的证书由指定 CA 颁发。将集群配置为使用集群根目录
-CA 可以达到这个目的,但是你永远不要依赖这一假定。不要以为
-这些证书将针对群根目录 CA 进行验证。
+使用 `certificates.k8s.io` API 创建的证书由指定 [CA](#a-note-to-cluster-administrators) 颁发。
+将集群配置为使用集群根目录 CA 可以达到这个目的,但是你永远不要依赖这一假定。
+不要以为这些证书将针对群根目录 CA 进行验证。
{{< /note >}}
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
+
+
+你需要 `cfssl` 工具。
+你可以从 [https://github.com/cloudflare/cfssl/releases](https://github.com/cloudflare/cfssl/releases)
+下载 `cfssl`。
+
+本文中某些步骤使用 `jq` 工具。如果你没有 `jq`,你可以通过操作系统的软件源安装,
+或者从 [https://stedolan.github.io/jq/](https://stedolan.github.io/jq/) 获取。
## 集群中的 TLS 信任
-信任 Pod 中运行的应用程序所提供的 CA 通常需要一些额外的应用程序配置。
+信任 Pod 中运行的应用程序所提供的[自定义 CA](#a-note-to-cluster-administrators) 通常需要一些额外的应用程序配置。
你需要将 CA 证书包添加到 TLS 客户端或服务器信任的 CA 证书列表中。
例如,你可以使用 Golang TLS 配置通过解析证书链并将解析的证书添加到
-[`tls.Config`](https://godoc.org/crypto/tls#Config) 结构中的 `RootCAs`
+[`tls.Config`](https://pkg.go.dev/crypto/tls#Config) 结构中的 `RootCAs`
字段中。
-你可以用你的应用能够访问到的
-[ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap)
-的形式来发布 CA 证书。
+{{< note >}}
+
+即使自定义 CA 证书可能包含在文件系统中(在 ConfigMap `kube-root-ca.crt` 中),
+除了验证内部 Kubernetes 端点之外,你不应将该证书颁发机构用于任何目的。
+内部 Kubernetes 端点的一个示例是默认命名空间中名为 `kubernetes` 的服务。
+
+如果你想为你的工作负载使用自定义证书颁发机构,你应该单独生成该 CA,
+并使用你的 Pod 有读权限的 [ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap)
+分发该 CA 证书。
+{{< /note >}}
-## 下载并安装 CFSSL
-
-本例中使用的 cfssl 工具可以在 [github.com/cloudflare/cfssl/releases](https://github.com/cloudflare/cfssl/releases) 下载。
-
-
其中 `192.0.2.24` 是服务的集群 IP,`my-svc.my-namespace.svc.cluster.local`
是服务的 DNS 名称,`10.0.34.2` 是 Pod 的 IP,而
`my-pod.my-namespace.pod.cluster.local` 是 Pod 的 DNS 名称。
-你能看到以下的输出:
+你能看到的输出类似于:
```
-2017/03/21 06:48:17 [INFO] generate received request
-2017/03/21 06:48:17 [INFO] received CSR
-2017/03/21 06:48:17 [INFO] generating key: ecdsa-256
-2017/03/21 06:48:17 [INFO] encoded CSR
+2022/02/01 11:45:32 [INFO] generate received request
+2022/02/01 11:45:32 [INFO] received CSR
+2022/02/01 11:45:32 [INFO] generating key: ecdsa-256
+2022/02/01 11:45:32 [INFO] encoded CSR
```
此命令生成两个文件;它生成包含 PEM 编码
-[pkcs#10](https://tools.ietf.org/html/rfc2986) 证书请求的 `server.csr`,
+[PKCS#10](https://tools.ietf.org/html/rfc2986) 证书请求的 `server.csr`,
以及 PEM 编码密钥的 `server-key.pem`,用于待生成的证书。
-## 创建证书签名请求对象发送到 Kubernetes API
+## 创建证书签名请求(CSR)对象发送到 Kubernetes API
使用以下命令创建 CSR YAML 文件,并发送到 API 服务器:
@@ -178,7 +192,7 @@ metadata:
name: my-svc.my-namespace
spec:
request: $(cat server.csr | base64 | tr -d '\n')
- signerName: kubernetes.io/kubelet-serving
+ signerName: example.com/serving
usages:
- digital signature
- key encipherment
@@ -188,9 +202,9 @@ EOF
请注意,在步骤 1 中创建的 `server.csr` 文件是 base64 编码并存储在
-`.spec.request` 字段中的。我们还要求提供 “digital signature(数字签名)”,
+`.spec.request` 字段中的。你还要求提供 “digital signature(数字签名)”,
“密钥加密(key encipherment)” 和 “服务器身份验证(server auth)” 密钥用途,
-由 `kubernetes.io/kubelet-serving` 签名程序签名的证书。
+由 `example.com/serving` 示例签名程序签名的证书。
你也可以要求使用特定的 `signerName`。更多信息可参阅
[支持的签署者名称](/zh/docs/reference/access-authn-authz/certificate-signing-requests/#signers)。
@@ -215,28 +229,30 @@ kubectl describe csr my-svc.my-namespace
Name: my-svc.my-namespace
Labels:
Annotations:
-CreationTimestamp: Tue, 21 Mar 2017 07:03:51 -0700
+CreationTimestamp: Tue, 01 Feb 2022 11:49:15 -0500
Requesting User: yourname@example.com
+Signer: example.com/serving
Status: Pending
Subject:
- Common Name: my-svc.my-namespace.svc.cluster.local
+ Common Name: my-pod.my-namespace.pod.cluster.local
Serial Number:
Subject Alternative Names:
- DNS Names: my-svc.my-namespace.svc.cluster.local
+ DNS Names: my-pod.my-namespace.pod.cluster.local
+ my-svc.my-namespace.svc.cluster.local
IP Addresses: 192.0.2.24
10.0.34.2
Events:
```
-## 批准证书签名请求
+## 批准证书签名请求(CSR) {#get-the-certificate-signing-request-approved}
[证书签名请求](/zh/docs/reference/access-authn-authz/certificate-signing-requests/)
的批准或者是通过自动批准过程完成的,或由集群管理员一次性完成。
@@ -250,29 +266,167 @@ kubectl certificate approve my-svc.my-namespace
certificatesigningrequest.certificates.k8s.io/my-svc.my-namespace approved
```
-
-## 下载证书并使用它
-
-CSR 被签署并获得批准后,你应该看到以下内容:
+
+你现在应该能看到如下输出:
```shell
kubectl get csr
```
```none
-NAME AGE REQUESTOR CONDITION
-my-svc.my-namespace 10m yourname@example.com Approved,Issued
+NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
+my-svc.my-namespace 10m example.com/serving yourname@example.com Approved
+```
+
+
+这意味着证书请求已被批准,并正在等待请求的签名者对其签名。
+
+
+## 签名证书签名请求(CSR) {#sign-the-certificate-signing-request}
+
+接下来,你将扮演证书签署者的角色,颁发证书并将其上传到 API 服务器。
+
+签名者通常会使用其 `signerName` 查看对象的 CertificateSigningRequest API,
+检查它们是否已被批准,为这些请求签署证书,并使用已颁发的证书更新 API 对象状态。
+
+
+### 创建证书颁发机构
+
+你需要授权在新证书上提供数字签名。
+
+首先,通过运行以下命令创建签名证书:
+
+```shell
+cat <
+你应该看到类似于以下的输出:
+
+```none
+2022/02/01 11:50:39 [INFO] generating a new CA key and certificate from CSR
+2022/02/01 11:50:39 [INFO] generate received request
+2022/02/01 11:50:39 [INFO] received CSR
+2022/02/01 11:50:39 [INFO] generating key: rsa-2048
+2022/02/01 11:50:39 [INFO] encoded CSR
+2022/02/01 11:50:39 [INFO] signed certificate with serial number 263983151013686720899716354349605500797834580472
+```
+
+
+这会产生一个证书颁发机构密钥文件(`ca-key.pem`)和证书(`ca.pem`)。
+
+
+
+### 颁发证书
+
+{{< codenew file="tls/server-signing-config.json" >}}
+
+
+使用 `server-signing-config.json` 签名配置、证书颁发机构密钥文件和证书来签署证书请求:
+
+```shell
+kubectl get csr my-svc.my-namespace -o jsonpath='{.spec.request}' | \
+ base64 --decode | \
+ cfssl sign -ca ca.pem -ca-key ca-key.pem -config server-signing-config.json - | \
+ cfssljson -bare ca-signed-server
+```
+
+
+你应该看到类似于以下的输出:
+
+```
+2022/02/01 11:52:26 [INFO] signed certificate with serial number 576048928624926584381415936700914530534472870337
+```
+
+
+这会生成一个签名的服务证书文件,`ca-signed-server.pem`。
+
+
+
+### 上传签名证书
+
+最后,在 API 对象的状态中填充签名证书:
+
+```shell
+kubectl get csr my-svc.my-namespace -o json | \
+ jq '.status.certificate = "'$(base64 ca-signed-server.pem | tr -d '\n')'"' | \
+ kubectl replace --raw /apis/certificates.k8s.io/v1/certificatesigningrequests/my-svc.my-namespace/status -f -
+```
+
+{{< note >}}
+
+这使用命令行工具 [`jq`](https://stedolan.github.io/jq/)
+在 `.status.certificate` 字段中填充 base64 编码的内容。
+如果你没有 `jq` 工具,你还可以将 JSON 输出保存到文件中,手动填充此字段,然后上传结果文件。
+{{< /note >}}
+
+
+批准 CSR 并上传签名证书后,运行:
+
+```shell
+kubectl get csr
+```
+
+
+输入类似于:
+
+```none
+NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
+my-svc.my-namespace 20m example.com/serving yourname@example.com Approved,Issued
```
-你可以通过运行以下命令下载颁发的证书并将其保存到 `server.crt` 文件中:
+## 下载证书并使用它
+
+现在,作为请求用户,你可以通过运行以下命令下载颁发的证书并将其保存到 `server.crt` 文件中:
+
+CSR 被签署并获得批准后,你应该看到以下内容:
```shell
kubectl get csr my-svc.my-namespace -o jsonpath='{.status.certificate}' \
@@ -280,31 +434,74 @@ kubectl get csr my-svc.my-namespace -o jsonpath='{.status.certificate}' \
```
-现在你可以将 `server.crt` 和 `server-key.pem` 作为键值对来启动 HTTPS 服务器。
+现在你可以将 `server.crt` 和 `server-key.pem` 填充到
+{{}} 中,
+稍后你可以将其挂载到 Pod 中(例如,用于提供 HTTPS 的网络服务器)。
+
+```shell
+kubectl create secret tls server --cert server.crt --key server-key.pem
+```
+
+```none
+secret/server created
+```
+
+
+最后,你可以将 `ca.pem` 填充到
+{{}}
+并将其用作信任根来验证服务证书:
+
+```shell
+kubectl create configmap example-serving-ca --from-file ca.crt=ca.pem
+```
+
+```none
+configmap/example-serving-ca created
+```
-## 批准证书签名请求
+## 批准证书签名请求(CSR) {#approving-certificate-signing-requests}
Kubernetes 管理员(具有适当权限)可以使用 `kubectl certificate approve` 和
-`kubectl certificate deny` 命令手动批准(或拒绝)证书签名请求。
+`kubectl certificate deny` 命令手动批准(或拒绝)证书签名请求(CSR)。
但是,如果你打算大量使用此 API,则可以考虑编写自动化的证书控制器。
+{{< caution >}}
+
+批准证书 CSR 的能力决定了在你的环境中谁信任谁。
+不应广泛或轻率地授予批准 CSR 的能力。
+
+在授予 `approve` 权限之前,你应该确保自己充分了解批准人的验证要求**和**颁发特定证书的后果。
+{{< /caution >}}
+
-无论上述机器或人使用 kubectl,批准者的作用是验证 CSR 满足如下两个要求:
+无论上述机器或人使用 kubectl,“批准者”的作用是验证 CSR 满足如下两个要求:
当且仅当满足这两个要求时,审批者应该批准 CSR,否则拒绝 CSR。
-
-## 关于批准权限的警告
-
-批准 CSR 的能力决定了群集中的信任关系。这也包括 Kubernetes API 所信任的人。
-批准 CSR 的能力不能过于广泛和轻率。
-在给予本许可之前,应充分了解上一节中提到的挑战和发布特定证书的后果。
+有关证书批准和访问控制的更多信息,
+请阅读[证书签名请求](/zh/docs/reference/access-authn-authz/certificate-signing-requests/)参考页。
## 给集群管理员的一个建议
-本教程假设已经为 certificates API 配置了签名者。Kubernetes 控制器管理器
-提供了一个签名者的默认实现。要启用它,请为控制器管理器设置
+本页面假设已经为 certificates API 配置了签名者。
+Kubernetes 控制器管理器提供了一个签名者的默认实现。要启用它,请为控制器管理器设置
`--cluster-signing-cert-file` 和 `--cluster-signing-key-file` 参数,
使之取值为你的证书机构的密钥对的路径。
-
From b00a8192a1006730532cd747b19f9402f789eb88 Mon Sep 17 00:00:00 2001
From: Craig Box
Date: Thu, 28 Apr 2022 23:19:49 +1200
Subject: [PATCH 046/119] Add 1.23 blog post
---
...04-29-kubernetes-1.23-release-interview.md | 319 ++++++++++++++++++
1 file changed, 319 insertions(+)
create mode 100644 content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
diff --git a/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
new file mode 100644
index 0000000000..3b62c25477
--- /dev/null
+++ b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
@@ -0,0 +1,319 @@
+---
+layout: blog
+title: "Frontiers, fsGroups and frogs: the Kubernetes 1.23 release interview"
+date: 2022-04-29
+---
+
+**Author**: Craig Box (Google)
+
+One of the highlights of hosting the weekly [Kubernetes Podcast from Google](https://kubernetespodcast.com/) is talking to the release managers for each new Kubernetes version. The release team is constantly refreshing. Many working their way from small documentation fixes, step up to shadow roles, and then eventually lead a release.
+
+As we prepare for the 1.24 release next week, [in accordance with long-standing tradition](https://www.google.com/search?q=%22release+interview%22+site%3Akubernetes.io%2Fblog), I'm pleased to bring you a look back at the story of 1.23. The release was led by [Rey Lejano](https://twitter.com/reylejano), a Field Engineer at SUSE. [I spoke to Rey](https://kubernetespodcast.com/episode/167-kubernetes-1.23/) in December, as he was awaiting the birth of his first child.
+
+Make sure you [subscribe, wherever you get your podcasts](https://kubernetespodcast.com/subscribe/), so you hear all our stories from the Cloud Native community, including the story of 1.24 next week.
+
+*This transcript has been lightly edited and condensed for clarity.*
+
+---
+
+**CRAIG BOX: I'd like to start with what is, of course, on top of everyone's mind at the moment. Let's talk African clawed frogs!**
+
+REY LEJANO: [CHUCKLES] Oh, you mean [Xenopus lavis](https://en.wikipedia.org/wiki/African_clawed_frog), the scientific name for the African clawed frog?
+
+**CRAIG BOX: Of course.**
+
+REY LEJANO: Not many people know, but my background and my degree is actually in microbiology, from the University of California Davis. I did some research for about four years in biochemistry, in a biochemistry lab, and I [do have a research paper published](https://www.sciencedirect.com/science/article/pii/). It's actually on glycoproteins, particularly something called "cortical granule lectin". We used frogs, because they generate lots and lots of eggs, from which we can extract the protein. That protein prevents polyspermy. When the sperm goes into the egg, the egg releases a glycoprotein, cortical granule lectin, to the membrane, and prevents any other sperm from going inside the egg.
+
+**CRAIG BOX: Were you able to take anything from the testing that we did on frogs and generalize that to higher-order mammals, perhaps?**
+
+REY LEJANO: Yes. Since mammals also have cortical granule lectin, we were able to analyze both the convergence and the evolutionary pattern, not just from multiple species of frogs, but also into mammals as well.
+
+**CRAIG BOX: Now, there's a couple of different threads to unravel here. When you were young, what led you into the fields of biology, and perhaps more the technical side of it?**
+
+REY LEJANO: I think it was mostly from family, since I do have a family history in the medical field that goes back generations. So I kind of felt like that was the natural path going into college.
+
+**CRAIG BOX: Now, of course, you're working in a more abstract tech field. What led you out of microbiology?**
+
+REY LEJANO: [CHUCKLES] Well, I've always been interested in tech. Taught myself a little programming when I was younger, before high school, did some web dev stuff. Just kind of got burnt out being in a lab. I was literally in the basement. I had a great opportunity to join a consultancy that specialized in [ITIL](https://en.wikipedia.org/wiki/ITIL). I actually started off with application performance management, went into monitoring, went into operation management and also ITIL, which is aligning your IT asset management and service managements with business services. Did that for a good number of years, actually.
+
+**CRAIG BOX: It's very interesting, as people describe the things that they went through and perhaps the technologies that they worked on, you can pretty much pinpoint how old they might be. There's a lot of people who come into tech these days that have never heard of ITIL. They have no idea what it is. It's basically just SRE with more process.**
+
+REY LEJANO: Yes, absolutely. It's not very cloud native. [CHUCKLES]
+
+**CRAIG BOX: Not at all.**
+
+REY LEJANO: You don't really hear about it in the cloud native landscape. Definitely, you can tell someone's been in the field for a little bit, if they specialize or have worked with ITIL before.
+
+**CRAIG BOX: You mentioned that you wanted to get out of the basement. That is quite often where people put the programmers. Did they just give you a bit of light in the new basement?**
+
+REY LEJANO: [LAUGHS] They did give us much better lighting. Able to get some vitamin D sometimes, as well.
+
+**CRAIG BOX: To wrap up the discussion about your previous career — over the course of the last year, with all of the things that have happened in the world, I could imagine that microbiology skills may be more in demand than perhaps they were when you studied them?**
+
+REY LEJANO: Oh, absolutely. I could definitely see a big increase of numbers of people going into the field. Also, reading what's going on with the world currently kind of brings back all the education I've learned in the past, as well.
+
+**CRAIG BOX: Do you keep in touch with people you went through school with?**
+
+REY LEJANO: Just some close friends, but not in the microbiology field.
+
+**CRAIG BOX: One thing that I think will probably happen as a result of the pandemic is a renewed interest in some of these STEM fields. It will be interesting to see what impact that has on society at large.**
+
+REY LEJANO: Yeah. I think that'll be great.
+
+**CRAIG BOX: You mentioned working at a consultancy doing IT management, application performance monitoring, and so on. When did Kubernetes come into your professional life?**
+
+REY LEJANO: One of my good friends at the company I worked at, left in mid-2015. He went on to a company that was pretty heavily into Docker. He taught me a little bit. I did my first "docker run" around 2015, maybe 2016. Then, one of the applications we were using for the ITIL framework was containerized around 2018 or so, also in Kubernetes. At that time, it was pretty buggy. That was my initial introduction to Kubernetes and containerised applications.
+
+Then I left that company, and I actually joined my friend over at [RX-M](https://rx-m.com/), which is a cloud native consultancy and training firm. They specialize in Docker and Kubernetes. I was able to get my feet wet. I got my CKD, got my CKA as well. And they were really, really great at encouraging us to learn more about Kubernetes and also to be involved in the community.
+
+**CRAIG BOX: You will have seen, then, the life cycle of people adopting Kubernetes and containerization at large, through your own initial journey and then through helping customers. How would you characterize how that journey has changed from the early days to perhaps today?**
+
+REY LEJANO: I think the early days, there was a lot of questions of, why do I have to containerize? Why can't I just stay with virtual machines?
+
+**CRAIG BOX: It's a line item on your CV.**
+
+REY LEJANO: [CHUCKLES] It is. And nowadays, I think people know the value of using containers, of orchestrating containers with Kubernetes. I don't want to say "jumping on the bandwagon", but it's become the de-facto standard to orchestrate containers.
+
+**CRAIG BOX: It's not something that a consultancy needs to go out and pitch to customers that they should be doing. They're just taking it as, that will happen, and starting a bit further down the path, perhaps.**
+
+REY LEJANO: Absolutely.
+
+**CRAIG BOX: Working at a consultancy like that, how much time do you get to work on improving process, perhaps for multiple customers, and then looking at how you can upstream that work, versus paid work that you do for just an individual customer at a time?**
+
+REY LEJANO: Back then, it would vary. They helped me introduce myself, and I learned a lot about the cloud native landscape and Kubernetes itself. They helped educate me as to how the cloud native landscape, and the tools around it, can be used together. My boss at that company, Randy, he actually encouraged us to start contributing upstream, and encouraged me to join the release team. He just said, this is a great opportunity. Definitely helped me with starting with the contributions early on.
+
+**CRAIG BOX: Was the release team the way that you got involved with upstream Kubernetes contribution?**
+
+REY LEJANO: Actually, no. My first contribution was with SIG Docs. I met Taylor Dolezal — he was the release team lead for 1.19, but he is involved with SIG Docs as well. I met him at KubeCon 2019, I sat at his table during a luncheon. I remember Paris Pittman was hosting this luncheon at the Marriott. Taylor says he was involved with SIG Docs. He encouraged me to join. I started joining into meetings, started doing a few drive-by PRs. That's what we call them — drive-by — little typo fixes. Then did a little bit more, started to send better or higher quality pull requests, and also reviewing PRs.
+
+**CRAIG BOX: When did you first formally take your release team role?**
+
+REY LEJANO: That was in [1.18](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.18/release_team.md), in December. My boss at the time encouraged me to apply. I did, was lucky enough to get accepted for the release notes shadow. Then from there, stayed in with release notes for a few cycles, then went into Docs, naturally then led Docs, then went to Enhancements, and now I'm the release lead for 1.23.
+
+**CRAIG BOX: I don't know that a lot of people think about what goes into a good release note. What would you say does?**
+
+REY LEJANO: [CHUCKLES] You have to tell the end user what has changed or what effect that they might see in the release notes. It doesn't have to be highly technical. It could just be a few lines, and just saying what has changed, what they have to do if they have to do anything as well.
+
+**CRAIG BOX: As you moved through the process of shadowing, how did you learn from the people who were leading those roles?**
+
+REY LEJANO: I said this a few times when I was the release lead for this cycle. You get out of the release team as much as you put in, or it directly aligns to how much you put in. I learned a lot. I went into the release team having that mindset of learning from the role leads, learning from the other shadows, as well. That's actually a saying that my first role lead told me. I still carry it to heart, and that was back in 1.18. That was Eddie, in the very first meeting we had, and I still carry it to heart.
+
+**CRAIG BOX: You, of course, were [the release lead for 1.23](https://github.com/kubernetes/sig-release/tree/master/releases/release-1.23). First of all, congratulations on the release.**
+
+REY LEJANO: Thank you very much.
+
+**CRAIG BOX: The theme for this release is [The Next Frontier](https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/). Tell me the story of how we came to the theme and then the logo.**
+
+REY LEJANO: The Next Frontier represents a few things. It not only represents the next enhancements in this release, but Kubernetes itself also has a history of Star Trek references. The original codename for Kubernetes was Project Seven, a reference to Seven of Nine, originally from Star Trek Voyager. Also the seven spokes in the helm in the logo of Kubernetes as well. And, of course, Borg, the predecessor to Kubernetes.
+
+The Next Frontier continues that Star Trek reference. It's a fusion of two titles in the Star Trek universe. One is [Star Trek V, the Final Frontier](https://en.wikipedia.org/wiki/Star_Trek_V:_The_Final_Frontier), and the Star Trek: The Next Generation.
+
+**CRAIG BOX: Do you have any opinion on the fact that Star Trek V was an odd-numbered movie, and they are [canonically referred to as being lesser than the even-numbered ones](https://screenrant.com/star-trek-movies-odd-number-curse-explained/)?**
+
+REY LEJANO: I can't say, because I am such a sci-fi nerd that I love all of them even though they're bad. Even the post-Next Generation movies, after the series, I still liked all of them, even though I know some weren't that great.
+
+**CRAIG BOX: Am I right in remembering that Star Trek V was the one directed by William Shatner?**
+
+REY LEJANO: Yes, that is correct.
+
+**CRAIG BOX: I think that says it all.**
+
+REY LEJANO: [CHUCKLES] Yes.
+
+**CRAIG BOX: Now, I understand that the theme comes from a part of the [SIG Release charter](https://github.com/kubernetes/community/blob/master/sig-release/charter.md)?**
+
+REY LEJANO: Yes. There's a line in the SIG Release charter, "ensure there is a consistent group of community members in place to support the release process across time." With the release team, we have new shadows that join every single release cycle. With this, we're growing with this community. We're growing the release team members. We're growing SIG Release. We're growing the Kubernetes community itself. For a lot of people, this is their first time contributing to open source, so that's why I say it's their new open source frontier.
+
+**CRAIG BOX: And the logo is obviously very Star Trek-inspired. It sort of surprised me that it took that long for someone to go this route.**
+
+REY LEJANO: I was very surprised as well. I had to relearn Adobe Illustrator to create the logo.
+
+**CRAIG BOX: This your own work, is it?**
+
+REY LEJANO: This is my own work.
+
+**CRAIG BOX: It's very nice.**
+
+REY LEJANO: Thank you very much. Funny, the galaxy actually took me the longest time versus the ship. Took me a few days to get that correct. I'm always fine-tuning it, so there might be a final change when this is actually released.
+
+**CRAIG BOX: No frontier is ever truly final.**
+
+REY LEJANO: True, very true.
+
+**CRAIG BOX: Moving now from the theme of the release to the substance, perhaps, what is new in 1.23?**
+
+REY LEJANO: We have 47 enhancements. I'm going to run through most of the stable ones, if not all of them, some of the key Beta ones, and a few of the Alpha enhancements for 1.23.
+
+One of the key enhancements is [dual-stack IPv4/IPv6](https://github.com/kubernetes/enhancements/issues/563), which went GA in 1.23.
+
+Some background info: dual-stack was introduced as Alpha in 1.15. You probably saw a keynote at KubeCon 2019. Back then, the way dual-stack worked was that you needed two services — you needed a service per IP family. You would need a service for IPv4 and a service for IPv6. It was refactored in 1.20. In 1.21, it was in Beta; clusters were enabled to be dual-stack by default.
+
+And then in 1.23 we did remove the IPv6 dual-stack feature flag. It's not mandatory to use dual-stack. It's actually not "default" still. The pods, the services still default to single-stack. There are some requirements to be able to use dual-stack. The nodes have to be routable on IPv4 and IPv6 network interfaces. You need a CNI plugin that supports dual-stack. The pods themselves have to be configured to be dual-stack. And the services need the ipFamilyPolicy field to specify prefer dual-stack, or require dual-stack.
+
+**CRAIG BOX: This sounds like there's an implication in this that v4 is still required. Do you see a world where we can actually move to v6-only clusters?**
+
+REY LEJANO: I think we'll be talking about IPv4 and IPv6 for many, many years to come. I remember a long time ago, they kept saying "it's going to be all IPv6", and that was decades ago.
+
+**CRAIG BOX: I think I may have mentioned on the show before, but there was [a meeting in London that Vint Cerf attended](https://www.youtube.com/watch?v=AEaJtZVimqs), and he gave a public presentation at the time to say, now is the time of v6. And that was 10 years ago at least. It's still not the time of v6, and my desktop still doesn't have Linux on it. One day.**
+
+REY LEJANO: [LAUGHS] In my opinion, that's one of the big key features that went stable for 1.23.
+
+One of the other highlights of 1.23 is [pod security admission](https://kubernetes.io/docs/concepts/security/pod-security-admission/) going to Beta. I know this feature is going to Beta, but I highlight this because as some people might know, PodSecurityPolicy, which was deprecated in 1.21, is targeted to be removed in 1.25. Pod security admission replaces pod security policy. It's an admission controller. It evaluates the pods against a predefined set of pod security standards to either admit or deny the pod for running.
+
+There's three levels of pod security standards. Privileged, that's totally open. Baseline, known privileges escalations are minimized. Or Restricted, which is hardened. And you could set pod security standards either to run in three modes, which is enforce: reject any pods that are in violation; to audit: pods are allowed to be created, but the violations are recorded; or warn: it will send a warning message to the user, and the pod is allowed.
+
+**CRAIG BOX: You mentioned there that PodSecurityPolicy is due to be deprecated in two releases' time. Are we lining up these features so that pod security admission will be GA at that time?**
+
+REY LEJANO: Yes. Absolutely. I'll talk about that for another feature in a little bit as well. There's also another feature that went to GA. It was an API that went to GA, and therefore the Beta API is now deprecated. I'll talk about that a little bit.
+
+**CRAIG BOX: All right. Let's talk about what's next on the list.**
+
+REY LEJANO: Let's move on to more stable enhancements. One is the [TTL controller](https://github.com/kubernetes/enhancements/issues/592). This cleans up jobs and pods after the jobs are finished. There is a TTL timer that starts when the job or pod is finished. This TTL controller watches all the jobs, and ttlSecondsAfterFinished needs to be set. The controller will see if the ttlSecondsAfterFinished, combined with the last transition time, if it's greater than now. If it is, then it will delete the job and the pods of that job.
+
+**CRAIG BOX: Loosely, it could be called a garbage collector?**
+
+REY LEJANO: Yes. Garbage collector for pods and jobs, or jobs and pods.
+
+**CRAIG BOX: If Kubernetes is truly becoming a programming language, it of course has to have a garbage collector implemented.**
+
+REY LEJANO: Yeah. There's another one, too, coming in Alpha. [CHUCKLES]
+
+**CRAIG BOX: Tell me about that.**
+
+REY LEJANO: That one is coming in in Alpha. It's actually one of my favorite features, because there's only a few that I'm going to highlight today. [PVCs for StafeulSet will be cleaned up](https://github.com/kubernetes/enhancements/issues/1847). It will auto-delete PVCs created by StatefulSets, when you delete that StatefulSet.
+
+**CRAIG BOX: What's next on our tour of stable features?**
+
+REY LEJANO: Next one is, [skip volume ownership change goes to stable](https://github.com/kubernetes/enhancements/issues/695). This is from SIG Storage. There are times when you're running a stateful application, like many databases, they're sensitive to permission bits changing underneath. Currently, when a volume is bind mounted inside the container, the permissions of that volume will change recursively. It might take a really long time.
+
+Now, there's a field, the fsGroupChangePolicy, which allows you, as a user, to tell Kubernetes how you want the permission and ownership change for that volume to happen. You can set it to always, to always change permissions, or just on mismatch, to only do it when the permission ownership changes at the top level is different from what is expected.
+
+**CRAIG BOX: It does feel like a lot of these enhancements came from a very particular use case where someone said, "hey, this didn't work for me and I've plumbed in a feature that works with exactly the thing I need to have".**
+
+REY LEJANO: Absolutely. People create issues for these, then create Kubernetes enhancement proposals, and then get targeted for releases.
+
+**CRAIG BOX: Another GA feature in this release — ephemeral volumes.**
+
+REY LEJANO: We've always been able to use empty dir for ephemeral volumes, but now we could actually have [ephemeral inline volumes](https://github.com/kubernetes/enhancements/issues/1698), meaning that you could take your standard CSI driver and be able to use ephemeral volumes with it.
+
+**CRAIG BOX: And, a long time coming, [CronJobs](https://github.com/kubernetes/enhancements/issues/19).**
+
+REY LEJANO: CronJobs is a funny one, because it was stable before 1.23. For 1.23, it was still tracked,but it was just cleaning up some of the old controller. With CronJobs, there's a v2 controller. What was cleaned up in 1.23 is just the old v1 controller.
+
+**CRAIG BOX: Were there any other duplications or major cleanups of note in this release?**
+
+REY LEJANO: Yeah. There were a few you might see in the major themes. One's a little tricky, around FlexVolumes. This is one of the efforts from SIG Storage. They have an effort to migrate in-tree plugins to CSI drivers. This is a little tricky, because FlexVolumes were actually deprecated in November 2020. We're [formally announcing it in 1.23](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md#kubernetes-volume-plugin-faq-for-storage-vendors).
+
+**CRAIG BOX: FlexVolumes, in my mind, predate CSI as a concept. So it's about time to get rid of them.**
+
+REY LEJANO: Yes, it is. There's another deprecation, just some [klog specific flags](https://kubernetes.io/docs/concepts/cluster-administration/system-logs/#klog), but other than that, there are no other big deprecations in 1.23.
+
+**CRAIG BOX: The buzzword of the last KubeCon, and in some ways the theme of the last 12 months, has been secure software supply chain. What work is Kubernetes doing to improve in this area?**
+
+REY LEJANO: For 1.23, Kubernetes is now SLSA compliant at Level 1, which means that provenance attestation files that describe the staging and release phases of the release process are satisfactory for the SLSA framework.
+
+**CRAIG BOX: What needs to happen to step up to further levels?**
+
+REY LEJANO: Level 1 means a few things — that the build is scripted; that the provenance is available, meaning that the artifacts are verified and they're handed over from one phase to the next; and describes how the artifact is produced. Level 2 means that the source is version-controlled, which it is, provenance is authenticated, provenance is service-generated, and there is a build service. There are four levels of SLSA compliance.
+
+**CRAIG BOX: It does seem like the levels were largely influenced by what it takes to build a big, secure project like this. It doesn't seem like it will take a lot of extra work to move up to verifiable provenance, for example. There's probably just a few lines of script required to meet many of those requirements.**
+
+REY LEJANO: Absolutely. I feel like we're almost there; we'll see what will come out of 1.24. And I do want to give a big shout-out to SIG Release and Release Engineering, primarily to Adolfo García Veytia, who is aka Puerco on GitHub and on Slack. He's been driving this forward.
+
+**CRAIG BOX: You've mentioned some APIs that are being graduated in time to replace their deprecated version. Tell me about the new HPA API.**
+
+REY LEJANO: The [horizontal pod autoscaler v2 API](https://github.com/kubernetes/enhancements/issues/2702), is now stable, which means that the v2beta2 API is deprecated. Just for everyone's knowledge, the v1 API is not being deprecated. The difference is that v2 adds support for multiple and custom metrics to be used for HPA.
+
+**CRAIG BOX: There's also now a facility to validate my CRDs with an expression language.**
+
+REY LEJANO: Yeah. You can use the [Common Expression Language, or CEL](https://github.com/google/cel-spec), to validate your CRDs, so you no longer need to use webhooks. This also makes the CRDs more self-contained and declarative, because the rules are now kept within the CRD object definition.
+
+**CRAIG BOX: What new features, perhaps coming in Alpha or Beta, have taken your interest?**
+
+REY LEJANO: Aside from pod security policies, I really love [ephemeral containers](https://github.com/kubernetes/enhancements/issues/277) supporting kubectl debug. It launches an ephemeral container and a running pod, shares those pod namespaces, and you can do all your troubleshooting with just running kubectl debug.
+
+**CRAIG BOX: There's also been some interesting changes in the way that events are handled with kubectl.**
+
+REY LEJANO: Yeah. kubectl events has always had some issues, like how things weren't sorted. [kubectl events improved](https://github.com/kubernetes/enhancements/issues/1440) that so now you can do --watch, and it will also sort with the --watch option as well. That is something new. You can actually combine fields and custom columns. And also, you can list events in the timeline with doing the last N number of minutes. And you can also sort events using other criteria as well.
+
+**CRAIG BOX: You are a field engineer at SUSE. Are there any things that are coming in that your individual customers that you deal with are looking out for?**
+
+REY LEJANO: More of what I look out for to help the customers.
+
+**CRAIG BOX: Right.**
+
+REY LEJANO: I really love kubectl events. Really love the PVCs being cleaned up with StatefulSets. Most of it's for selfish reasons that it will improve troubleshooting efforts. [CHUCKLES]
+
+**CRAIG BOX: I have always hoped that a release team lead would say to me, "yes, I have selfish reasons. And I finally got something I wanted in."**
+
+REY LEJANO: [LAUGHS]
+
+**CRAIG BOX: Perhaps I should run to be release team lead, just so I can finally get init containers fixed once and for all.**
+
+REY LEJANO: Oh, init containers, I've been looking for that for a while. I've actually created animated GIFs on how init containers will be run with that Kubernetes enhancement proposal, but it's halted currently.
+
+**CRAIG BOX: One day.**
+
+REY LEJANO: One day. Maybe I shouldn't stay halted.
+
+**CRAIG BOX: You mentioned there are obviously the things you look out for. Are there any things that are coming down the line, perhaps Alpha features or maybe even just proposals you've seen lately, that you're personally really looking forward to seeing which way they go?**
+
+REY LEJANO: Yeah. Oone is a very interesting one, it affects the whole community, so it's not just for personal reasons. As you may have known, Dockershim is deprecated. And we did release a blog that it will be removed in 1.24.
+
+**CRAIG BOX: Scared a bunch of people.**
+
+REY LEJANO: Scared a bunch of people. From a survey, we saw that a lot of people are still using Docker and Dockershim. One of the enhancements for 1.23 is, [kubelet CRI goes to Beta](https://github.com/kubernetes/enhancements/issues/2040). This promotes the CRI API, which is required. This had to be in Beta for Dockershim to be removed in 1.24.
+
+**CRAIG BOX: Now, in the last release team lead interview, [we spoke with Savitha Raghunathan](https://kubernetespodcast.com/episode/157-kubernetes-1.22/), and she talked about what she would advise you as her successor. It was to look out for the mental health of the team members. How were you able to take that advice on board?**
+
+REY LEJANO: That was great advice from Savitha. A few things I've made note of with each release team meeting. After each release team meeting, I stop the recording, because we do record all the meetings and post them on YouTube. And I open up the floor to anyone who wants to say anything that's not recorded, that's not going to be on the agenda. Also, I tell people not to work on weekends. I broke this rule once, but other than that, I told people it could wait. Just be mindful of your mental health.
+
+**CRAIG BOX: It's just been announced that [James Laverack from Jetstack](https://twitter.com/JamesLaverack/status/1466834312993644551) will be the release team lead for 1.24. James and I shared an interesting Mexican dinner at the last KubeCon in San Diego.**
+
+REY LEJANO: Oh, nice. I didn't know you knew James.
+
+**CRAIG BOX: The British tech scene. We're a very small world. What will your advice to James be?**
+
+REY LEJANO: What I would tell James for 1.24 is use teachable moments in the release team meetings. When you're a shadow for the first time, it's very daunting. It's very difficult, because you don't know the repos. You don't know the release process. Everyone around you seems like they know the release process, and very familiar with what the release process is. But as a first-time shadow, you don't know all the vernacular for the community. I just advise to use teachable moments. Take a few minutes in the release team meetings to make it a little easier for new shadows to ramp up and to be familiar with the release process.
+
+**CRAIG BOX: Has there been major evolution in the process in the time that you've been involved? Or do you think that it's effectively doing what it needs to do?**
+
+REY LEJANO: It's always evolving. I remember my first time in release notes, 1.18, we said that our goal was to automate and program our way out so that we don't have a release notes team anymore. That's changed [CHUCKLES] quite a bit. Although there's been significant advancements in the release notes process by Adolfo and also James, they've created a subcommand in krel to generate release notes.
+
+But nowadays, all their release notes are richer. Still not there at the automation process yet. Every release cycle, there is something a little bit different. For this release cycle, we had a production readiness review deadline. It was a soft deadline. A production readiness review is a review by several people in the community. It's actually been required since 1.21, and it ensures that the enhancements are observable, scalable, supportable, and it's safe to operate in production, and could also be disabled or rolled back. In 1.23, we had a deadline to have the production readiness review completed by a specific date.
+
+**CRAIG BOX: How have you found the change of schedule to three releases per year rather than four?**
+
+REY LEJANO: Moving to three releases a year from four, in my opinion, has been an improvement, because we support the last three releases, and now we can actually support the last releases in a calendar year instead of having 9 months out of 12 months of the year.
+
+**CRAIG BOX: The next event on the calendar is a [Kubernetes contributor celebration](https://www.kubernetes.dev/events/kcc2021/) starting next Monday. What can we expect from that event?**
+
+REY LEJANO: This is our second time running this virtual event. It's a virtual celebration to recognize the whole community and all of our accomplishments of the year, and also contributors. There's a number of events during this week of celebration. It starts the week of December 13.
+
+There's events like the Kubernetes Contributor Awards, where SIGs honor and recognize the hard work of the community and contributors. There's also a DevOps party game as well. There is a cloud native bake-off. I do highly suggest people to go to [kubernetes.dev/celebration](https://www.kubernetes.dev/events/past-events/2021/kcc2021/) to learn more.
+
+**CRAIG BOX: How exactly does one judge a virtual bake-off?**
+
+REY LEJANO: That I don't know. [CHUCKLES]
+
+**CRAIG BOX: I tasted my scones. I think they're the best. I rate them 10 out of 10.**
+
+REY LEJANO: Yeah. That is very difficult to do virtually. I would have to say, probably what the dish is, how closely it is tied with Kubernetes or open source or to CNCF. There's a few judges. I know Josh Berkus and Rin Oliver are a few of the judges running the bake-off.
+
+**CRAIG BOX: Yes. We spoke with Josh about his love of the kitchen, and so he seems like a perfect fit for that role.**
+
+REY LEJANO: He is.
+
+**CRAIG BOX: Finally, your wife and yourself are expecting your first child in January. Have you had a production readiness review for that?**
+
+REY LEJANO: I think we failed that review. [CHUCKLES]
+
+**CRAIG BOX: There's still time.**
+
+REY LEJANO: We are working on refactoring. We're going to refactor a little bit in December, and "--apply" again.
+
+---
+
+_[Rey Lejano](https://twitter.com/reylejano) is a field engineer at SUSE, by way of Rancher Labs, and was the release team lead for Kubernetes 1.23. He is now also a co-chair for SIG Docs. His son Liam is now 3 and a half months old._
+
+_You can find the [Kubernetes Podcast from Google](http://www.kubernetespodcast.com/) at [@KubernetesPod](https://twitter.com/KubernetesPod) on Twitter, and you can [subscribe](https://kubernetespodcast.com/subscribe/) so you never miss an episode._
From f5e420e226299879af510c78722e0522c6044efa Mon Sep 17 00:00:00 2001
From: Craig Box
Date: Thu, 28 Apr 2022 23:26:53 +1200
Subject: [PATCH 047/119] You know, I actually wanted some --s
---
.../_posts/2022-04-29-kubernetes-1.23-release-interview.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
index 3b62c25477..cc8cad881b 100644
--- a/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
+++ b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
@@ -234,7 +234,7 @@ REY LEJANO: Aside from pod security policies, I really love [ephemeral container
**CRAIG BOX: There's also been some interesting changes in the way that events are handled with kubectl.**
-REY LEJANO: Yeah. kubectl events has always had some issues, like how things weren't sorted. [kubectl events improved](https://github.com/kubernetes/enhancements/issues/1440) that so now you can do --watch, and it will also sort with the --watch option as well. That is something new. You can actually combine fields and custom columns. And also, you can list events in the timeline with doing the last N number of minutes. And you can also sort events using other criteria as well.
+REY LEJANO: Yeah. kubectl events has always had some issues, like how things weren't sorted. [kubectl events improved](https://github.com/kubernetes/enhancements/issues/1440) that so now you can do `--watch`, and it will also sort with the `--watch` option as well. That is something new. You can actually combine fields and custom columns. And also, you can list events in the timeline with doing the last N number of minutes. And you can also sort events using other criteria as well.
**CRAIG BOX: You are a field engineer at SUSE. Are there any things that are coming in that your individual customers that you deal with are looking out for?**
@@ -310,7 +310,7 @@ REY LEJANO: I think we failed that review. [CHUCKLES]
**CRAIG BOX: There's still time.**
-REY LEJANO: We are working on refactoring. We're going to refactor a little bit in December, and "--apply" again.
+REY LEJANO: We are working on refactoring. We're going to refactor a little bit in December, and `--apply` again.
---
From 279fbc658d89898531ff38713acbcbd66d79368f Mon Sep 17 00:00:00 2001
From: SataQiu
Date: Thu, 28 Apr 2022 19:53:21 +0800
Subject: [PATCH 048/119] Update
content/en/docs/reference/labels-annotations-taints/audit-annotations.md
Signed-off-by: SataQiu
---
.../reference/labels-annotations-taints/audit-annotations.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/en/docs/reference/labels-annotations-taints/audit-annotations.md b/content/en/docs/reference/labels-annotations-taints/audit-annotations.md
index a0ef3a1531..18714f43df 100644
--- a/content/en/docs/reference/labels-annotations-taints/audit-annotations.md
+++ b/content/en/docs/reference/labels-annotations-taints/audit-annotations.md
@@ -68,7 +68,7 @@ See [Auditing](/docs/tasks/debug-application-cluster/audit/) for more informatio
## authorization.k8s.io/reason
-Example: `authorization.k8s.io/decision: "Human-readable reason for the decision"`
+Example: `authorization.k8s.io/reason: "Human-readable reason for the decision"`
This annotation gives reason for the [decision](#authorization-k8s-io-decision) in Kubernetes audit logs.
From 0e56bf9cae76bf36c91d6948927797940771f28e Mon Sep 17 00:00:00 2001
From: Patrick Ohly
Date: Wed, 30 Mar 2022 19:14:36 +0200
Subject: [PATCH 049/119] blog: storage capacity GA
---
.../2022-05-06-storage-capacity-GA/index.md | 79 +++++++++++++++++++
1 file changed, 79 insertions(+)
create mode 100644 content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md
diff --git a/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md b/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md
new file mode 100644
index 0000000000..35d6838f51
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md
@@ -0,0 +1,79 @@
+---
+layout: blog
+title: "Storage Capacity Tracking reaches GA in Kubernetes 1.24"
+date: 2022-05-06
+slug: storage-capacity-ga
+---
+
+ **Authors:** Patrick Ohly (Intel)
+
+The v1.24 release of Kubernetes brings [storage capacity](/docs/concepts/storage/storage-capacity/)
+tracking as a generally available feature.
+
+## Problems we have solved
+
+As explained in more detail in the [previous blog post about this
+feature](/blog/2021/04/14/local-storage-features-go-beta/), storage capacity
+tracking allows a CSI driver to publish information about remaining
+capacity. The kube-scheduler then uses that information to pick suitable nodes
+for a Pod when that Pod has volumes that still need to be provisioned.
+
+Without this information, a Pod may get stuck without ever being scheduled onto
+a suitable node because kube-scheduler has to choose blindly and always ends up
+picking a node for which the volume cannot be provisioned because the
+underlying storage system managed by the CSI driver does not have sufficient
+capacity left.
+
+Because CSI drivers publish storage capacity information that gets used at a
+later time when it might not be up-to-date anymore, it can still happen that a
+node is picked that doesn't work out after all. Volume provisioning recovers
+from that by informing the scheduler that it needs to try again with a
+different node.
+
+[Load
+tests](https://github.com/kubernetes-csi/csi-driver-host-path/blob/master/docs/storage-capacity-tracking.md)
+that were done again for promotion to GA confirmed that all storage in a
+cluster can be consumed by Pods with storage capacity tracking whereas Pods got
+stuck without it.
+
+## Problems we have *not* solved
+
+Recovery from a failed volume provisioning attempt has one known limitation: if a Pod
+uses two volumes and only one of them could be provisioned, then all future
+scheduling decisions are limited by the already provisioned volume. If that
+volume is local to a node and the other volume cannot be provisioned there, the
+Pod is stuck. This problem pre-dates storage capacity tracking and while the
+additional information makes it less likely to occur, it cannot be avoided in
+all cases, except of course by only using one volume per Pod.
+
+An idea for solving this was proposed in a [KEP
+draft](https://github.com/kubernetes/enhancements/pull/1703): volumes that were
+provisioned and haven't been used yet cannot have any valuable data and
+therefore could be freed and provisioned again elsewhere. SIG Storage is
+looking for interested developers who want to continue working on this.
+
+Also not solved is support in Cluster Autoscaler for Pods with volumes. For CSI
+drivers with storage capacity tracking, a prototype was developed and discussed
+in [a PR](https://github.com/kubernetes/autoscaler/pull/3887). It was meant to
+work with arbitrary CSI drivers, but that flexibility made it hard to configure
+and slowed down scale up operations: because autoscaler was unable to simulate
+volume provisioning, it only scaled the cluster by one node at a time, which
+was seen as insufficient.
+
+Therefore that PR was not merged and a different approach with tighter coupling
+between autoscaler and CSI driver will be needed. For this a better
+understanding is needed about which local storage CSI drivers are used in
+combination with cluster autoscaling. Should this lead to a new KEP, then users
+will have to try out an implementation in practice before it can move to beta
+or GA. So please reach out to SIG Storage if you have an interest in this
+topic.
+
+## Acknowledgements
+
+Thanks a lot to the members of the community who have contributed to this
+feature or given feedback including members of [SIG
+Scheduling](https://github.com/kubernetes/community/tree/master/sig-scheduling),
+[SIG
+Autoscaling](https://github.com/kubernetes/community/tree/master/sig-autoscaling),
+and of course [SIG
+Storage](https://github.com/kubernetes/community/tree/master/sig-storage)!
From 78a765f16c4155a44db1f3ae76c3d6a01a2cb41f Mon Sep 17 00:00:00 2001
From: Ricardo Katz
Date: Thu, 28 Apr 2022 11:37:50 -0300
Subject: [PATCH 050/119] Add Ingress NGINX v1.2.0 blogpost (#32965)
* Add Ingress NGINX v1.2.0 blogpost
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Apply suggestions from code review
Co-authored-by: Tim Bannister
* Apply suggestions from code review
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Update content/en/blog/_posts/2022-04-15-Increasing-the-security-bar-in-Ingress-NGINX/index.md
Co-authored-by: Tim Bannister
* Fix some reviews
* Change publishing date
Co-authored-by: Tim Bannister
---
.../index.md | 155 ++++++++++++++++++
.../ingress-post-chroot.png | Bin 0 -> 60860 bytes
.../ingress-pre-chroot.png | Bin 0 -> 51860 bytes
3 files changed, 155 insertions(+)
create mode 100644 content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md
create mode 100644 content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-post-chroot.png
create mode 100644 content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-pre-chroot.png
diff --git a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md
new file mode 100644
index 0000000000..7fc83cad03
--- /dev/null
+++ b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md
@@ -0,0 +1,155 @@
+---
+layout: blog
+title: 'Increasing the security bar in Ingress-NGINX v1.2.0'
+date: 2022-04-28
+slug: ingress-nginx-1-2-0
+---
+
+**Authors:** Ricardo Katz (VMware), James Strong (Chainguard)
+
+The [Ingress](/docs/concepts/services-networking/ingress/) may be one of the most targeted components
+of Kubernetes. An Ingress typically defines an HTTP reverse proxy, exposed to the Internet, containing
+multiple websites, and with some privileged access to Kubernetes API (such as to read Secrets relating to
+TLS certificates and their private keys).
+
+While it is a risky component in your architecture, it is still the most popular way to properly expose your services.
+
+Ingress-NGINX has been part of security assessments that figured out we have a big problem: we don't
+do all proper sanitization before turning the configuration into an `nginx.conf` file, which may lead to information
+disclosure risks.
+
+While we understand this risk and the real need to fix this, it's not an easy process to do, so we took another approach to reduce (but not remove!) this risk in the current (v1.2.0) release.
+
+## Meet Ingress NGINX v1.2.0 and the chrooted NGINX process
+
+One of the main challenges is that Ingress-NGINX runs the web proxy server (NGINX) alongside the Ingress
+controller (the component that has access to Kubernetes API that and that creates the `nginx.conf` file).
+
+So, NGINX does have the same access to the filesystem of the controller (and Kubernetes service account token, and other configurations from the container). While splitting those components is our end goal, the project needed a fast response; that lead us to the idea of using `chroot()`.
+
+Let's take a look into what an Ingress-NGINX container looked like before this change:
+
+
+
+As we can see, the same container (not the Pod, the container!) that provides HTTP Proxy is the one that watches Ingress objects and writes the Container Volume
+
+Now, meet the new architecture:
+
+
+
+What does all of this mean? A basic summary is: that we are isolating the NGINX service as a container inside the
+controller container.
+
+While this is not strictly true, to understand what was done here, it's good to understand how
+Linux containers (and underlying mechanisms such as kernel namespaces) work.
+You can read about cgroups in the Kubernetes glossary: [`cgroup`](https://kubernetes.io/docs/reference/glossary/?fundamental=true#term-cgroup) and learn more about cgroups interact with namespaces in the NGINX project article
+[What Are Namespaces and cgroups, and How Do They Work?](https://www.nginx.com/blog/what-are-namespaces-cgroups-how-do-they-work/).
+(As you read that, bear in mind that Linux kernel namespaces are a different thing from
+[Kubernetes namespaces](h/docs/concepts/overview/working-with-objects/namespaces/)).
+
+## Skip the talk, what do I need to use this new approach?
+
+While this increases the security, we made this feature an opt-in in this release so you can have
+time to make the right adjustments in your environment(s). This new feature is only available from
+release v1.2.0 of the Ingress-NGINX controller.
+
+There are two required changes in your deployments to use this feature:
+* Append the suffix "-chroot" to the container image name. For example: `gcr.io/k8s-staging-ingress-nginx/controller-chroot:v1.2.0`
+* In your Pod template for the Ingress controller, find where you add the capability `NET_BIND_SERVICE` and add the capability `SYS_CHROOT`. After you edit the manifest, you'll see a snippet like:
+
+```yaml
+capabilities:
+ drop:
+ - ALL
+ add:
+ - NET_BIND_SERVICE
+ - SYS_CHROOT
+```
+
+If you deploy the controller using the official Helm chart then change the following setting in
+`values.yaml`:
+
+```yaml
+controller:
+ image:
+ chroot: true
+```
+
+Ingress controllers are normally set up cluster-wide (the IngressClass API is cluster scoped). If you manage the
+Ingress-NGINX controller but you're not the overall cluster operator, then check with your cluster admin about
+whether you can use the `SYS_CHROOT` capability, **before** you enable it in your deployment.
+
+## OK, but how does this increase the security of my Ingress controller?
+
+Take the following configuration snippet and imagine, for some reason it was added to your `nginx.conf`:
+```
+location /randomthing/ {
+ alias /;
+ autoindex on;
+}
+```
+
+If you deploy this configuration, someone can call `http://website.example/randomthing` and get some listing (and access) to the whole filesystem of the Ingress controller.
+
+Now, can you spot the difference between chrooted and non chrooted Nginx on the listings below?
+
+| Without extra `chroot()` | With extra `chroot()` |
+|----------------------------|--------|
+| `bin` | `bin` |
+| `dev` | `dev` |
+| `etc` | `etc` |
+| `home` | |
+| `lib` | `lib` |
+| `media` | |
+| `mnt` | |
+| `opt` | `opt` |
+| `proc` | `proc` |
+| `root` | |
+| `run` | `run` |
+| `sbin` | |
+| `srv` | |
+| `sys` | |
+| `tmp` | `tmp` |
+| `usr` | `usr` |
+| `var` | `var` |
+| `dbg` | |
+| `nginx-ingress-controller` | |
+| `wait-shutdown` | |
+
+The one in left side is not chrooted. So NGINX has full access to the filesystem. The one in right side is chrooted, so a new filesystem with only the required files to make NGINX work is created.
+
+## What about other security improvements in this release?
+
+We know that the new `chroot()` mechanism helps address some portion of the risk, but still, someone
+can try to inject commands to read, for example, the `nginx.conf` file and extract sensitive information.
+
+So, another change in this release (this is opt-out!) is the _deep inspector_.
+We know that some directives or regular expressions may be dangerous to NGINX, so the deep inspector
+checks all fields from an Ingress object (during its reconciliation, and also with a
+[validating admission webhook](/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook))
+to verify if any fields contains these dangerous directives.
+
+The ingress controller already does this for annotations, and our goal is to move this existing validation to happen inside
+deep inspection as part of a future release.
+
+You can take a look into the existing rules in [https://github.com/kubernetes/ingress-nginx/blob/main/internal/ingress/inspector/rules.go](https://github.com/kubernetes/ingress-nginx/blob/main/internal/ingress/inspector/rules.go).
+
+Due to the nature of inspecting and matching all strings within relevant Ingress objects, this new feature may consume a bit more CPU. You can disable it by running the ingress controller with the command line argument `--deep-inspect=false`.
+
+## What's next?
+
+This is not our final goal. Our final goal is to split the control plane and the data plane processes.
+In fact, doing so will help us also achieve a [Gateway](https://gateway-api.sigs.k8s.io/) API implementation,
+as we may have a different controller as soon as it "knows" what to provide to the data plane
+(we need some help here!!)
+
+Some other projects in Kubernetes already take this approach
+(like [KPNG](https://github.com/kubernetes-sigs/kpng), the proposed replacement for `kube-proxy`),
+and we plan to align with them and get the same experience for Ingress-NGINX.
+
+## Further reading
+
+If you want to take a look into how chrooting was done in Ingress NGINX, take a look
+into [https://github.com/kubernetes/ingress-nginx/pull/8337](https://github.com/kubernetes/ingress-nginx/pull/8337)
+The release v1.2.0 containing all the changes can be found at
+[https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.2.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.2.0)
diff --git a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-post-chroot.png b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-post-chroot.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5d588a3bb61ce4db5f593f8ef69fe35fd35a07f
GIT binary patch
literal 60860
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