本文提供一些關於 Azure Kubernetes Service (AKS) 常見問題的解答。
支援
AKS 是否提供服務等級協定?
AKS 在標準定價層中提供服務等級協定 (SLA) 保證, 並提供運行時間 SLA 功能。
什麼是平台支援?其包含哪些內容?
平台支援是不支持 n-3 版本叢集的縮減支持計劃。 平台支援僅包含 Azure 基礎結構支援。
如需詳細資訊,請參閱 平臺支持原則。
AKS 是否會自動升級不支援的叢集?
是,AKS 會起始不支援叢集的自動升級。 當 n-3 版本的叢集(其中 n 是正式推出的最新支援的 AKS 次要版本)即將降至 n-4 時,AKS 會自動將叢集升級為 n-2,以保留在 AKS 支持原則中。
如需詳細資訊,請參閱 支援的 Kubernetes 版本、 計劃性維護時段和 自動升級。
我是否可以在 AKS 上執行 Windows Server 容器?
是,AKS 支援 Windows Server 容器。 如需詳細資訊,請參閱 AKS 上的 Windows Server 常見問題。
我可以將 Azure 保留折扣套用到我的 AKS 代理程式節點嗎?
AKS 代理程式節點會以標準 Azure 虛擬機 (VM) 計費。 如果您已針對在 AKS 中使用的 VM 大小購買 Azure 保留,即會自動套用那些折扣。
業務
我可以在 Azure 租使用者之間移動或移轉叢集嗎?
否。 目前不支援在租用戶之間移動 AKS 叢集。
我可以在訂用帳戶之間移動或移轉叢集嗎?
否。 目前不支援在訂用帳戶之間移動 AKS 叢集。
我可以將 AKS 叢集或 AKS 基礎結構資源移至其他資源群組或重新命名嗎?
否。 不支援移動或重新命名 AKS 叢集及其相關聯的資源。
我可以在刪除叢集之後還原叢集嗎?
否。 刪除叢集之後,就無法還原叢集。 當您刪除叢集時,也會刪除節點資源群組及其所有資源。
如果您想要保留任何資源,請先將其移至另一個資源群組,再刪除叢集。 如果您想要防止意外刪除,您可以使用 節點資源群組鎖定來鎖定裝載叢集資源的 AKS 受控資源群組。
我可以將 AKS 叢集調整為零嗎?
您可以完全 停止執行中的 AKS 叢集 ,或 調整或自動調整所有或特定 User
節點集區 為零。
您無法將系統節點集區直接調整為零。
我可以使用虛擬機擴展集 API 手動調整嗎?
否。 不支援使用虛擬機擴展集 API 的調整作業。 您可以使用 AKS API (az aks scale
)。
我可以使用虛擬機擴展集手動調整為零節點嗎?
否。 不支援使用虛擬機擴展集 API 的調整作業。 您可以使用 AKS API 將非系統節點集區調整為零,或改為 停止叢集 。
我可以停止或解除分配所有 VM 嗎?
否。 此設定不受支援。 請改為停止您的叢集。
為何會使用 AKS 建立兩個資源群組?
AKS 以許多 Azure 基礎結構資源為基礎,包括虛擬機擴展集、虛擬網路和受控磁碟。 這些整合可讓您在 AKS 所提供的受控 Kubernetes 環境中,套用 Azure 平台的許多核心功能。 例如,您可以直接搭配 AKS 使用大部分的 Azure VM 類型,而且您可以使用 Azure 保留來自動接收這些資源的折扣。
為了啟用此架構,每個 AKS 部署皆會跨越兩個資源群組:
- 您會建立第一個資源群組。 此群組僅包含 Kubernetes 服務資源。 AKS 資源提供者會在部署期間自動建立第二個資源群組。 第二個資源群組的範例是 MC_myResourceGroup_myAKSCluster_eastus。 如需如何指定這第二個資源群組名稱的相關資訊,請參閱下一節。
- 第二個資源群組 (稱為「節點資源群組」) 包含所有與該叢集相關聯的基礎結構資源。 這些資源包括 Kubernetes 節點 VM、虛擬網路和儲存體。 根據預設,節點資源群組具有類似 MC_myResourceGroup_myAKSCluster_eastus 的名稱。 每當刪除叢集時,AKS 會自動刪除節點資源群組。 只針對共用叢集生命週期的資源使用此資源群組。
注意
修改 AKS 叢集中節點資源群組下的任何資源是不支援的動作,而且會導致叢集作業失敗。 您可以防止對節點資源群組進行變更。 封鎖使用者修改 AKS 叢集所管理的資源。
是否可自訂 AKS 節點資源群組名稱?
根據預設,AKS 會將節點資源群組 命名為MC_resourcegroupname_clustername_location,但您可以提供自己的名稱。
若要指定您自己的資源群組名稱,請安裝 aks-preview Azure CLI 延伸模組 0.3.2 版或更新版本。 當您使用 az aks create
命令建立 AKS 叢集時,請使用 --node-resource-group
參數並指定資源群組的名稱。 如果您使用 Azure Resource Manager 範本 來部署 AKS 叢集,您可以使用 屬性來定義資源組名 nodeResourceGroup
。
- AKS 資源提供者會自動建立第二個資源群組。
- 您只能在建立叢集時指定自訂資源組名。
當您使用節點資源群組時,無法:
- 指定現有的資源群組做為節點資源群組。
- 為節點資源群組指定不同的訂閱。
- 建立叢集之後,請變更節點資源組名。
- 指定節點資源群組內受控資源的名稱。
- 修改或刪除節點資源群組內由 Azure 建立的受控資源標籤。
我可以修改節點資源群組中 AKS 資源的標記和其他屬性嗎?
如果您修改或刪除節點資源群組中 Azure 所建立的標記和其他資源屬性,可能就會得到非預期的結果,例如,調整和升級錯誤。 AKS 可讓您建立和修改使用者所建立的自定義標籤,而且您可以在 建立節點集區時新增這些標籤。 例如,您可以建立或修改自訂標記,以指派業務單位或成本中心。 另一個選項是在受控資源群組上建立具有範圍的 Azure 原則。
Azure 建立的標籤會為其各自的 Azure 服務建立,而且您應該一律允許它們。 針對 AKS,有 aks-managed
和 k8s-azure
標記。 在 AKS 叢集中的節點資源群組底下,修改資源上任何 Azure 建立的標記是不支援的動作,其會中斷服務層級目標 (SLO)。
注意
過去,標記名稱 Owner
已保留給 AKS,以管理負載平衡器前端 IP 上指派的公用 IP。 現在,服務會使用前置 aks-managed
詞。 針對舊版資源,請勿使用 Azure 原則來套用 Owner
標籤名稱。 否則,AKS 叢集部署和更新作業上的所有資源都會中斷。 這項限制不適用於新建立的資源。
為什麼我在叢集上看到 Aks 管理的前置 Helm 版本,以及其修訂計數為何會持續增加?
AKS 會使用 Helm 將元件傳遞至您的叢集。 您可以放心地忽略 aks-managed
前置 Helm 版本。 持續增加這些 Helm 版本的修訂是預期且安全的。
配額、限制和區域可用性
哪些 Azure 區域目前提供 AKS?
如需可用區域的完整清單,請參閱 AKS 區域和可用性。
我可以跨區域散佈 AKS 叢集嗎?
否。 AKS 叢集是區域資源,無法跨越區域。 如需如何建立包含多個區域的架構的指引,請參閱 商務持續性和災害復原的最佳做法。
我可以在可用性區域之間散佈 AKS 叢集嗎?
是,您可以在支援 AKS 的區域中,跨一或多個可用性區域部署 AKS 叢集。
單一叢集中是否可以有不同的 VM 大小?
是,您可以藉由建立 多個節點集區,在 AKS 叢集中使用不同的 VM 大小。
AKS 中容器影像的大小限制為何?
AKS 不會設定容器映像大小的限制。 但影像越大,記憶體需求就越高。 大小更大,可能會超過資源限制或背景工作節點的整體可用記憶體。 根據預設,AKS 叢集的 VM 大小 Standard_DS2_v2 記憶體會設定為 7 GiB。
當容器映像太大時,如同在 TB (TB) 範圍中,kubelet 可能無法將它從容器登錄提取到節點,因為磁碟空間不足。
針對 Windows Server 節點,Windows Update 不會自動執行並套用最新的更新。 您應該在 AKS 叢集中的叢集和 Windows Server 節點集區上執行升級。 根據 Windows Update 發行週期和您自己的驗證程式,遵循一般排程。 此升級程式會建立執行最新 Windows Server 映像和修補程式的節點,然後移除較舊的節點。 如需此程序的詳細資訊,請參閱在 AKS 中升級節點集區。
是否需要以根目錄身分執行 AKS 映像?
下列映像具有以根目錄身分執行的功能需求,而且必須針對任何原則提出例外狀況:
- mcr.microsoft.com/oss/kubernetes/coredns
- mcr.microsoft.com/azuremonitor/containerinsights/ciprod
- mcr.microsoft.com/oss/calico/node
- mcr.microsoft.com/oss/kubernetes-csi/azuredisk-csi
安全性、存取和身分識別
我可以限制有權存取 Kubernetes API 伺服器的人員嗎?
是,有兩個選項可用來限制對 API 伺服器的存取:
- 如果您想要維護 API 伺服器的公用端點,但限制存取一組受信任的 IP 範圍,請使用 API 伺服器授權的 IP 範圍。
- 如果您想要限制只能從虛擬網路內部存取 API 伺服器,請使用私人叢集。
安全性更新是否會套用至 AKS 代理程式節點?
AKS 修補程式會每周修正 廠商的 CVE。 沒有修正的 CVE 正在等待廠商修正,才能進行補救。 AKS 映像會在30天內自動更新。 建議您在一般頻率上套用更新的節點映像,以確保已套用最新的修補映像和 OS 修補程式和目前版本。 您可以執行此工作:
我是否應該注意以 AKS 為目標的安全性威脅?
Microsoft提供其他動作的指引,您可以採取這些動作,透過 適用於容器的 Microsoft Defender 等服務來保護工作負載。 如需與 AKS 和 Kubernetes 相關的安全性威脅資訊,請參閱 新的大規模行銷活動目標 Kubeflow (2021 年 6 月 8 日)。
AKS 是否將任何客戶資料儲存在叢集區域之外?
否。 所有數據都會儲存在叢集的區域。
如何在磁碟區有大量檔案時避免許可權擁有權設定緩慢的問題?
傳統上,如果您的 Pod 是以非根使用者身分執行,您必須在 Pod 的安全性內容內指定 fsGroup
參數,讓該磁碟區可供 Pod 讀取和寫入。 如需此需求的詳細資訊,請參閱 設定 Pod 或容器的安全性內容。
設定 fsGroup
的副作用是,每次掛接磁碟區時,Kubernetes 都必須以遞歸方式針對磁碟區內的所有檔案和目錄使用 chown()
和 chmod()
命令(但有幾個例外)。 即使磁碟區的群組擁有權已經符合要求 fsGroup
的參數,也會發生此案例。 對於大量小型檔案的大型磁碟區而言,此設定可能很昂貴,這可能會導致 Pod 啟動需要很長的時間。 此案例在 v1.20 之前是已知問題。 因應措施是將Pod設定為以root身分執行:
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 0
fsGroup: 0
此問題已透過 Kubernetes 1.20 版解決。 如需詳細資訊,請參閱 Kubernetes 1.20:細微控制磁碟區許可權變更。
網路
受控控制平面如何與我的節點通訊?
AKS 會使用安全通道通訊來允許 api-server
和個別節點 Kubelets 進行通訊,即使在個別的虛擬網路上也是如此。 通道會透過相互傳輸層安全性加密來保護。 AKS 所使用的目前主要通道是 Konnectivity,先前稱為 apiserver-network-proxy。 確認所有網路規則都遵循 Azure 所需的網路規則和完整功能變數名稱(FQDN)。
我的 Pod 可以使用 API 伺服器 FQDN 而不是叢集 IP 嗎?
是,您可以將註釋 kubernetes.azure.com/set-kube-service-host-fqdn
新增至 Pod,將 KUBERNETES_SERVICE_HOST
變數設定為 API 伺服器的功能變數名稱,而不是叢集中服務 IP。 這項修改適用於透過第7層防火牆完成叢集輸出的情況。 例如,當您搭配應用程式規則使用 Azure 防火牆時。
我可以使用 AKS 設定 NSG 嗎?
AKS 不會將網路安全組 (NSG) 套用至其子網,也不會修改與該子網相關聯的任何 NSG。 AKS 只會修改網路介面 NSG 設定。 如果您使用容器網路介面 (CNI),您也必須確定 NSG 中的安全性規則允許節點與 Pod 無類別間路由 (CIDR) 範圍的流量。 如果您使用 kubenet,您也必須確定 NSG 中的安全性規則允許節點與 Pod CIDR 之間的流量。 如需詳細資訊,請參閱網路安全性群組。
時間同步處理如何在 AKS 中運作?
AKS 節點會執行 Chrony 服務,從本機主機提取時間。 在 Pod 上執行的容器會從 AKS 節點取得時間。 在容器內開啟的應用程式,會從 Pod 的容器使用時間。
附加元件、擴充功能和整合工具
我可以使用自訂 VM 延伸模組嗎?
否。 AKS 是受控服務。 不支援作基礎結構即服務 (IaaS) 資源。 若要安裝自訂元件,請使用 Kubernetes API 和機制。 例如,使用 DaemonSets 來安裝任何必要的元件。
AKS 支援哪些 Kubernetes 許可控制器? 是否可以新增或移除許可控制器?
AKS 支援下列許可控制器:
NamespaceLifecycle
LimitRanger
ServiceAccount
DefaultIngressClass
DefaultStorageClass
DefaultTolerationSeconds
MutatingAdmissionWebhook
ValidatingAdmissionWebhook
ResourceQuota
PodNodeSelector
PodTolerationRestriction
ExtendedResourceToleration
您目前無法修改 AKS 中的許可控制器清單。
我可以在 AKS 上使用許可控制站 Webhook 嗎?
是,您可以在 AKS 上使用許可控制站 Webhook。 建議您排除以標籤標示 control-plane
的內部 AKS 命名空間。 例如:
namespaceSelector:
matchExpressions:
- key: control-plane
operator: DoesNotExist
AKS 會防火牆 API 伺服器輸出,讓您的許可控制器 Webhook 必須可從叢集中存取。
許可控制器 Webhook 會影響 kube-system 和內部 AKS 命名空間嗎?
為了保護系統的穩定性,並防止自定義許可控制器影響命名空間中的 kube-system
內部服務,AKS 具有自動排除 kube-system
和 AKS 內部命名空間的許可強制執行程式。 此服務可確保自定義許可控制器不會影響 在 中 kube-system
執行的服務。
如果您在支援自定義許可 Webhook 的情況下 kube-system
部署某些專案的重要使用案例,您可以新增下列卷標或批註,讓許可強制執行者忽略它:
- 標籤:
"admissions.enforcer/disabled": "true"
- 註解:
"admissions.enforcer/disabled": true
Azure Key Vault 是否會與 AKS 整合?
適用於秘密存放區 CSI 驅動程式的 Azure Key Vault 提供者 提供 Azure Key Vault 與 AKS 的原生整合。
我可以在 AKS 部署時使用 FIPS 密碼編譯程式庫嗎?
Linux 型節點集區現在支援使用聯邦資訊處理標準 (FIPS) 啟用的節點。 如需詳細資訊,請參閱新增已啟用 FIPS 的節點集區。
AKS 附加元件如何更新?
任何修補檔 (包括安全性修補檔) 都會自動套用至 AKS 叢集。 比修補程式更大的任何專案,例如主要或次要版本變更(如果有已部署物件的重大變更),當您更新叢集時,如果有新版本可用,就會更新。 如需新版本可用時間的資訊,請參閱 AKS 版本資訊。
我在 Linux 虛擬機擴展集實例上看到的 AKS Linux 擴充功能用途為何?
AKS Linux 擴充功能是 Azure VM 擴充功能,可在 Kubernetes 背景工作節點上安裝和設定監視工具。 擴充功能會安裝在所有新的和現有的 Linux 節點上。 其會設定下列監控工具:
- 節點導出工具:從 VM 收集硬體遙測,並使用計量端點加以提供。 然後,Prometheus 等監視工具可以取消這些計量。
-
節點問題偵測器:旨在讓叢集管理堆疊中的上游層看到各種節點問題。 這是在每一個節點上執行的 systemd 單位,會偵測節點問題,並使用 和
NodeConditions
將其報告給叢集的 API 伺服器Events
。 - ig:這是一個 eBPF 支援的開放原始碼架構,可用於偵錯和觀察Linux和 Kubernetes 系統。 它提供一組工具(或小工具),可收集用戶可用來識別效能問題、當機或其他異常原因的相關信息。 值得注意的是,其獨立於 Kubernetes,因此使用者也能將其用於偵錯控制平面的問題。
這些工具有助於提供許多節點健康情況相關問題的可觀察性,例如:
- 基礎結構精靈問題: NTP 服務關閉
- 硬體問題: CPU、記憶體或磁碟不正確
- 核心問題: 核心死結、文件系統損毀
- 容器運行時間問題: 沒有回應的運行時間精靈
延伸模組不需要對記載 AKS 輸出需求以外的任何 URL、IP 位址或埠進行額外的輸出存取。 其不需要在 Azure 中授與任何特殊權限。 它會使用 kubeconfig
連線到 API 伺服器來傳送所收集的監視數據。
疑難排解叢集問題
為什麼刪除叢集需要這麼久的時間?
大部分的叢集都會在使用者要求下刪除。 在某些情況下,特別是您攜帶自己的資源群組或執行跨資源群組工作的情況,刪除可能需要更多時間,甚至失敗。 如果您有刪除問題,請仔細檢查資源群組上沒有鎖定。 也請確定資源群組以外的任何資源都與資源群組解除關聯。
為什麼建立或更新叢集需要這麼久的時間?
如果您在建立和更新叢集時遇到問題,請確定您沒有任何指派的原則或服務條件約束,可能會封鎖 AKS 叢集管理 VM、負載平衡器或標籤等資源。
如果我在 NodeLost 或未知狀態中有 Pod 或部署,我仍然可以升級叢集嗎?
可以,但是不建議您這麼做。 當叢集的狀態為已知且狀況良好時,執行更新。
如果我有一或多個節點處於狀況不良狀態的叢集,或者如果它已關閉,我可以執行升級嗎?
否。 在您升級之前,刪除或移除處於失敗狀態或從叢集移除的任何節點。
我嘗試刪除叢集,但我看到錯誤「[Errno 11001] getaddrinfo 失敗。
最常見的情況是,如果您有一或多個 NSG 使用中仍與叢集相關聯的 NSG,就會發生此錯誤。 請移除它們,然後再次嘗試刪除叢集。