“「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。”
KIND(Kubernetes In Docker)是我很喜欢,也是一直在参与的一个开源项目。在我之前的文章中有过多次介绍,可以参考 使用 Kind 在离线环境创建 K8S 集群 我基本上每天都会用到它,非常的方便。
距离上个大版本,v0.11 已经过了近十个月,我们来看看这个新版本带来哪些值得关注的特性吧:
目前 v0.12.0 默认使用的 Kubernetes 版本为 v1.23.4 版本。如果升级 KIND 的话,会重新拉取最新的镜像,镜像托管在 Docker Hub 上, 可能会比较耗时,建议确保网络顺畅。
在 v0.12.0 中专门优化了对多架构的支持,默认的所有已发布镜像都包含了 amd64 和 arm64 的支持。在镜像中也对相关组件都做了升级:
此外,也修复了 Docker + cgroup2 + rootless 环境下的支持,和 WSL2 环境下的支持。建议大家进行升级。
更多详细信息请参考其 ReleaseNote
本周 Docker 发布了 v20.10.13 版本,是的,你没有看错,现在发布的版本还是在给 v20.10 打 patch 。实际上当前 Docker 仓库中最新的代码比 v20.10 已经多了很多功能特性,只不过尚未达到发布一个全新的大版本的目标,所以一直没有发布新的大版本。
这个版本中主要是进行了一些 bugfix 和打包相关的变更。其中包括:
local
日志驱动时,如果迅速产生大量日志,可能会产生 OOM 的问题。如果有在使用 local
日志驱动的小伙伴,建议进行升级 。fluentd-async-connect=true
使用,并且远端服务不可用时,可能会导致 docker daemon 发生 crash 。所以,如果有使用 local
或 fluentd
等日志驱动的小伙伴,请尽量进行 Docker 的升级。其余场景可自行判断。
更多详细信息请参考其 ReleaseNote
Helm v3.8 是一个特性版本,在这个版本中最大的变化就是对 OCI registry 的支持达到 GA。
如果想要登陆一个 OCI registry 的话,可以使用类似 Docker CLI 的用法,使用 helm registry login 镜像仓库
进行操作。
例如,可以使用如下命令登陆 GitHub 的镜像仓库地址:
➜ (MoeLove) ~ helm registry login ghcr.io
Username: tao12345666333
Password:
Login Succeeded
它实际参考了 Docker CLI 的做法,包括配置文件的结构等都与 Docker CLI 保持一致。
如果想要将 Helm chart 提交到 GitHub 镜像仓库的话,可以进行如下操作:
(MoeLove) ➜ helm create foo
Creating foo
(MoeLove) ➜ helm package foo
Successfully packaged chart and saved it to: /tmp/foo-0.1.0.tgz
(MoeLove) ➜ helm push foo-0.1.0.tgz oci://ghcr.io/tao12345666333/foo-chart
Pushed: ghcr.io/tao12345666333/foo-chart/foo:0.1.0
Digest: sha256:1b0a889b4e0fee5b5679512182fc6c2e802f39bdc5ba9d11fff0affb962b9b49
也可以通过如下命令完成 Chart 的 pull 操作:
# Pull chart
(MoeLove) ➜ helm pull oci://ghcr.io/tao12345666333/foo-chart/foo --version 0.1.0
Pulled: ghcr.io/tao12345666333/foo-chart/foo:0.1.0
Digest: sha256:1b0a889b4e0fee5b5679512182fc6c2e802f39bdc5ba9d11fff0affb962b9b49
或者安装操作:
# Install
(MoeLove) ➜ helm install foo oci://ghcr.io/tao12345666333/foo-chart/foo --version 0.1.0
NAME: foo
LAST DEPLOYED: Sun Mar 13 16:52:55 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=foo,app.kubernetes.io/instance=foo" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
这次 OCI 支持达到 GA 最大的好处就在于,我们不再需要分别维护容器镜像仓库和 Helm chart 的仓库了。可以直接使用同一个,维护成本可以降低。
#108309 · kubernetes/kubernetes 这是 KEP-2799: Reduction of Secret-based Service Account Tokens 的实现,主要原因是由于 Kubernetes 默认情况下的 Service Account Token 的机制,如果 Pod 引用了某个 Service Account,则默认会为其挂载对应的 Token。当然,我们也可以通过配置 automountServiceAccountToken: false
来避免此行为。
在这个 PR 中,将 LegacyServiceAccountTokenNoAutoGeneration
特性设置为 beta 级别,并且在 Kubernetes v1.24 版本中将默认启用。届时,所有新创建的 ServiceAccount 默认不会获取到 Token 信息。这是需要额外注意的,当然,这个变更并不会影响到 Pod 使用的。
[1]k8s生态: https://zhuanlan.zhihu.com/container