疑難排解

疑難排解

我收到關於「無法從「stable」圖表儲存庫取得更新」的警告

執行 helm repo list。如果它顯示您的 stable 儲存庫指向 storage.googleapis.com URL,您需要更新該儲存庫。在 2020 年 11 月 13 日,Helm 圖表儲存庫在經過一年的棄用期後 不再受支援。已在 https://charts.helm.sh/stable 提供一個檔案庫,但將不再接收更新。

您可以執行以下命令來修復您的儲存庫

$ helm repo add stable https://charts.helm.sh/stable --force-update  

incubator 儲存庫也是如此,它有一個檔案庫位於 https://charts.helm.sh/incubator。您可以執行以下命令來修復它

$ helm repo add incubator https://charts.helm.sh/incubator --force-update  

我收到警告「警告:「kubernetes-charts.storage.googleapis.com」已棄用「stable」,並將於 2020 年 11 月 13 日刪除。」

舊的 Google helm 圖表儲存庫已被新的 Helm 圖表儲存庫取代。

執行以下命令以永久修復此問題

$ helm repo add stable https://charts.helm.sh/stable --force-update  

如果您收到 incubator 的類似錯誤,請執行此命令

$ helm repo add incubator https://charts.helm.sh/incubator --force-update  

當我新增 Helm 儲存庫時,我收到錯誤「錯誤:儲存庫「https://kubernetes-charts.storage.googleapis.com」不再可用」

Helm 圖表儲存庫在 一年的棄用期 後不再受支援。這些儲存庫的檔案庫位於 https://charts.helm.sh/stablehttps://charts.helm.sh/incubator,但它們將不再接收更新。除非您指定 --use-deprecated-repos,否則 helm repo add 命令將不允許您新增舊的 URL。

在 GKE(Google Container Engine)上,我收到「目前沒有開啟任何 SSH 隧道」

Error: Error forwarding ports: error upgrading connection: No SSH tunnels currently open. Were the targets able to accept an ssh-key for user "gke-[redacted]"?

錯誤訊息的另一種變體是

Unable to connect to the server: x509: certificate signed by unknown authority

問題是您的本機 Kubernetes 設定檔必須具有正確的憑證。

當您在 GKE 上建立叢集時,它會提供您憑證,包括 SSL 憑證和憑證授權單位。這些需要儲存在 Kubernetes 設定檔(預設值:~/.kube/config)中,以便 kubectlhelm 可以存取它們。

從 Helm 2 遷移後,helm list 只顯示我的部分(或沒有)發行版本

您可能忽略了 Helm 3 現在在整個叢集命名空間中使用範圍發行版本的事實。這表示對於所有參考發行版本的命令,您必須

  • 依賴作用中 kubernetes 上下文中的當前命名空間(如 kubectl config view --minify 命令所述),
  • 使用 --namespace/-n 旗標指定正確的命名空間,或
  • 對於 helm list 命令,指定 --all-namespaces/-A 旗標

這適用於 helm lshelm uninstall 和所有其他參考發行版本的 helm 命令。

在 macOS 上,會存取檔案 /etc/.mdns_debug。為什麼?

我們知道在 macOS 上有一個案例,Helm 會嘗試存取名為 /etc/.mdns_debug 的檔案。如果該檔案存在,Helm 會在執行期間保持檔案控制代碼開啟。

這是由 macOS 的 MDNS 函式庫引起的。它會嘗試載入該檔案以讀取除錯設定(如果已啟用)。檔案控制代碼可能不應該保持開啟,並且已向 Apple 報告此問題。但是,這是 macOS 而不是 Helm 導致這種行為。

如果您不希望 Helm 載入此檔案,您可以嘗試將 Helm 編譯為不使用主機網路堆疊的靜態函式庫。這樣做會增加 Helm 的二進位檔案大小,但可以防止檔案被開啟。

此問題最初被標記為潛在的安全問題。但後來確定此行為沒有造成任何缺陷或漏洞。

helm repo add 失敗,以前可以正常運作

在 helm 3.3.1 及更早版本中,如果您嘗試新增已存在的儲存庫,則命令 helm repo add <儲存庫名稱> <網址> 將不會有任何輸出。如果儲存庫已註冊,則旗標 --no-update 將會引發錯誤。

在 helm 3.3.2 及之後版本中,嘗試新增現有儲存庫將會出錯

錯誤:儲存庫名稱(儲存庫名稱)已存在,請指定不同的名稱

現在預設行為已反轉。--no-update 現在會被忽略,而如果您想要取代(覆蓋)現有的儲存庫,則可以使用 --force-update

這是由於安全性修復的重大變更,如 Helm 3.3.2 發行說明 中所述。

啟用 Kubernetes 用戶端記錄

可以使用 klog 旗標啟用用於除錯 Kubernetes 用戶端的列印記錄訊息。在大多数情况下,使用 -v 旗標設定詳細資訊級別就足夠了。

例如

helm list -v 6

Tiller 安裝停止運作,並且存取被拒絕

Helm 發行版本以前可從 https://storage.googleapis.com/kubernetes-helm/ 取得。如 「宣布 get.helm.sh」 中所述,官方位置已在 2019 年 6 月變更。GitHub Container Registry 提供所有舊的 Tiller 映像檔。

如果您嘗試從過去使用的儲存貯體下載舊版本的 Helm,您可能會發現它們遺失了

<Error>
    <Code>AccessDenied</Code>
    <Message>Access denied.</Message>
    <Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.</Details>
</Error>

舊版 Tiller 映像檔位置 已於 2021 年 8 月開始移除映像檔。我們已在 GitHub Container Registry 位置提供這些映像檔。例如,要下載版本 v2.17.0,請將

https://storage.googleapis.com/kubernetes-helm/helm-v2.17.0-linux-amd64.tar.gz

取代為

https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz

要使用 Helm v2.17.0 初始化

helm init —upgrade

或者,如果需要不同的版本,請使用 --tiller-image 旗標覆蓋預設位置並安裝特定的 Helm v2 版本

helm init --tiller-image ghcr.io/helm/tiller:v2.16.9

注意:Helm 維護人員建議遷移到目前支援的 Helm 版本。Helm v2.17.0 是 Helm v2 的最終版本;Helm v2 自 2020 年 11 月起不再受支援,詳情請參閱 Helm 2 和 Charts 專案現在已不受支援。從那以後,Helm 上已標記許多 CVE,並且這些漏洞已在 Helm v3 中修補,但永遠不會在 Helm v2 中修補。請參閱 已發布的 Helm 諮詢的當前列表,並制定計劃立即 遷移到 Helm v3