K8S 生態週報| Helm v3.8 OCI 支援正式 GA,Docker 新版本修復多個嚴重 bug

張晉濤發表於2022-03-14
「K8S 生態週報」內容主要包含我所接觸到的 K8S 生態相關的每週值得推薦的一些資訊。歡迎訂閱知乎專欄「k8s生態」

KIND v0.12.0 釋出

KIND(Kubernetes In Docker)是我很喜歡,也是一直在參與的一個開源專案。
在我之前的文章中有過多次介紹,可以參考[]()
我基本上每天都會用到它,非常的方便。

距離上個大版本,v0.11 已經過了近十個月,我們來看看這個新版本帶來哪些值得關注的特性吧:

目前 v0.12.0 預設使用的 Kubernetes 版本為 v1.23.4 版本。如果升級 KIND 的話,會重新拉取最新的映象,映象託管在 Docker Hub 上,
可能會比較耗時,建議確保網路順暢。

在 v0.12.0 中專門優化了對多架構的支援,預設的所有已釋出映象都包含了 amd64 和 arm64 的支援。
在映象中也對相關元件都做了升級:

  • containerd v1.5.10
  • crictl 1.23.0
  • CNI plugin v1.1.0

此外,也修復了 Docker + cgroup2 + rootless 環境下的支援,和 WSL2 環境下的支援。建議大家進行升級。

更多詳細資訊請參考其 ReleaseNote

Docker v20.10.13 釋出

本週 Docker 釋出了 v20.10.13 版本,是的,你沒有看錯,現在釋出的版本還是在給 v20.10 打 patch 。
實際上當前 Docker 倉庫中最新的程式碼比 v20.10 已經多了很多功能特性,只不過尚未達到釋出一個全新的大版本的目標,所以一直沒有釋出新的大版本。

這個版本中主要是進行了一些 bugfix 和打包相關的變更。其中包括:

  • 將 buildx 升級到了 v0.8.0 版本。
  • #43165 修復了當使用 local 日誌驅動時,如果迅速產生大量日誌,可能會產生 OOM 的問題。 如果有在使用 local 日誌驅動的小夥伴,建議進行升級
  • #43147 修復了 fluentd 日誌驅動配合 fluentd-async-connect=true 使用,並且遠端服務不可用時,可能會導致 docker daemon 發生 crash 。
  • #43333 當 pull image 的時候,如果在 image-manifests 時遇到網路連線失敗,則進行重試。

所以,如果有使用 localfluentd 等日誌驅動的小夥伴,請儘量進行 Docker 的升級。其餘場景可自行判斷。

更多詳細資訊請參考其 ReleaseNote

Helm v3.8 釋出

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 使用的。

其他一些變更

  • Thanos v0.25 釋出
  • Knative v1.3 釋出
  • CNI plugins v1.1.0 釋出

歡迎訂閱我的文章公眾號【MoeLove】

TheMoeLove

相關文章