Azure

Azure 容器服務 (AKS) 是 Microsoft Azure 最近發佈的一個託管的 Kubernetes 服務(預覽版),它獨立於現有的 Azure Container Service (ACS)。藉助 AKS 用戶無需具備容器業務流程的專業知識就可以快速、輕鬆的部署和管理容器化的應用程序。AKS 支持自動升級和自動故障修復,按需自動擴展或縮放資源池,消除了用戶管理和維護 Kubernetes 集群的負擔。並且集群管理本身是免費的,Azure 只收取容器底層的虛擬機的費用。

ACS 是 Microsoft Azure 在 2015 年推出的容器服務,支持 Kubernetes、DCOS 以及 Dockers Swarm 等多種容器編排工具。並且 ACS 的核心功能是開源的,用戶可以通過 https://github.com/Azure/acs-engine 來查看和下載使用。

AKS

基本使用

以下文檔假設用戶已經安裝好了 Azure CLI ,如未安裝可以參考 這裏 操作。

在創建 AKS 集群之前,首先需要開啓容器服務

# Enable AKS
az provider register -n Microsoft.ContainerService

然後創建一個資源組(Resource Group)用來管理所有相關資源

# Create Resource Group
az group create --name group1 --location centralus

接下來就可以創建 AKS 集群了

# Create aks
az aks create --resource-group group1 --name myK8sCluster --node-count 3 --generate-ssh-keys

稍等一會,集群創建好後安裝並配置 kubectl

# Install kubectl
az aks install-cli

# Configure kubectl
az aks get-credentials --resource-group=group1 --name=myK8sCluster

注意使用 azure-cli 2.0.24 版本時,az aks get-credentials 命令可能會失敗,解決方法是升級到更新版本,或回退到 2.0.23 版本。

訪問 Dashboard

手動擴展或收縮集群

升級集群

下圖動態展示了一個部署 v1.7.7 版本集群並升級到 v1.8.1 的過程:

使用 Helm

當然也可以使用其他 Kubernetes 社區提供的工具和服務,比如使用 Helm 部署 Nginx Ingress 控制器

刪除集群

當集群不再需要時,可以刪除集群

acs-engine

雖然未來 AKS 是 Azure 容器服務的下一代主打產品,但用戶可能還是希望可以自己管理容器集群以保證足夠的靈活性(比如自定義 master 服務等)。這時用戶可以使用開源的 acs-engine 來創建和管理自己的集群。acs-engine 其實就是 ACS 的核心部分,提供了一個部署和管理 Kubernetes、Swarm 和 DC/OS 集群的命令行工具。它通過將容器集群描述文件轉化爲一組 ARM(Azure Resource Manager)模板來建立容器集群。

在 acs-engine 中,每個集群都通過一個 json 文件來描述,比如一個 Kubernetes 集群可以描述爲

orchestratorType 指定了部署集群的類型,目前支持三種

  • Kubernetes

  • Swarm

  • DCOS

而創建集群的步驟也很簡單

開啓 RBAC

RBAC 默認是不可以開啓的,可以通過設置 enableRbac 開啓

自定義 Kubernetes 版本

acs-engine 基於 hyperkube 來部署 Kubernetes 服務,所以只需要使用自定義的 hyperkube 鏡像即可。

hyperkube 鏡像可以從 Kubernetes 源碼編譯,編譯步驟爲

添加 Windows 節點

可以通過設置 osType 來添加 Windows 節點(完整示例見 這裏

使用 GPU

設置 vmSize 爲 Standard_NC*Standard_NV* 會自動配置 GPU,並自動安裝所需要的 NVDIA 驅動。

自定義網絡插件

acs-engine 默認使用 kubenet 網絡插件,並通過用戶自定義的路由以及 IP-forwarding 轉發 Pod 網絡。此時,Pod 網絡與 Node 網絡在不同的子網中,Pod 不受 VNET 管理。

用戶還可以使用 Azure CNI plugin 插件將 Pod 連接到 Azure VNET 中

也可以使用 calico 網絡插件

Azure Container Registry

在 AKS 預覽版發佈的同時,Azure 還同時發佈了 Azure Container Registry(ACR)服務,用於託管用戶的私有鏡像。

Virtual Kubelet

Azure 容器實例(ACI)提供了在 Azure 中運行容器的最簡捷方式,它不需要用戶配置任何虛擬機或其它高級服務。ACI 適用於快速突發式增長和資源調整的業務,但其本身的功能相對比較簡單。 Virtual Kubelet 可以將 ACI 作爲 Kubernetes 集群的一個無限 Node 使用,這樣就無需考慮 Node 數量的問題,ACI 會根據運行容器自動管理集群資源。

可以使用 Helm 來部署 Virtual Kubelet:

在開啓 RBAC 的集群中,還需要給 virtual-kubelet 開啓對應的權限。最簡單的方法是給 service account kube-system:default 設置 admin 權限(不推薦生產環境這麼設置,應該設置具體的權限),比如

部署成功後,會發現集群中會出現一個新的名爲 aci 的 Node:

此時,就可以通過 指定 nodeName 或者容忍 taint azure.com/aci=NoSchedule 調度 到 ACI 上面。比如

參考文檔

Last updated