Azure Container Service(ACS)簡介

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

注意,AKS (預覽版)是 ACS 的下一代產品,提供了一個託管的 Kubernetes 集群,並且集群管理本身是免費的。AKS未來會提供更豐富的功能和更完善的用戶體驗,比如

  • 簡單一致的使用體驗,包括CLI、PowerShell、Rest API、Dashboard等
  • 支持自定義VNET
  • 支持持久化存儲
  • 支持 Linux 容器和 Windows 容器
  • Azure managed applications 集成

ACS 目前支持的 Swarm 和 DC/OS 未來還會繼續支持,並且它們會進入 Azure Marketplace 中。而現有的 Kubernetes 集群也將可以通過 heptio/Ark 等工具遷移到 AKS。

由於 ACS 未來會被 AKS 所取代,這裡就不再詳細介紹 ACS 的原理了。其使用也是比較簡單的

# 創建集群az acs create --orchestrator-type kubernetes --resource-group myResourceGroup --name myK8sCluster --generate-ssh-keys# 安裝 kubectl 命令行工具az acs kubernetes install-cli # 配置 kubectl 用戶和證書az acs kubernetes get-credentials --resource-group=myResourceGroup --name=myK8sCluster# 然後就可以正常使用了kubectl get nodes

acs-engine

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

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

{ "apiVersion": "vlabs", "properties": { "orchestratorProfile": { "orchestratorType": "Kubernetes" }, "masterProfile": { "count": 1, "dnsPrefix": "", "vmSize": "Standard_D2_v2" }, "agentPoolProfiles": [ { "name": "agentpool1", "count": 3, "vmSize": "Standard_D2_v2", "availabilityProfile": "AvailabilitySet" } ], "linuxProfile": { "adminUsername": "azureuser", "ssh": { "publicKeys": [ { "keyData": "" } ] } }, "servicePrincipalProfile": { "clientId": "", "secret": "" } }}

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

  • Kubernetes
  • Swarm
  • DCOS

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

# create a new resource group.az group create --name myResourceGroup --location "centralus"# start deploy the kubernetesacs-engine deploy --resource-group myResourceGroup --subscription-id <subscription-id> --auto-suffix --api-model kubernetes.json# setup kubectlexport KUBECONFIG="$(pwd)/_output/<name-with-suffix>/kubeconfig/kubeconfig.centralus.json"kubectl get node

開啟RBAC

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

"kubernetesConfig": { "enableRbac": true }

自定義Kubernetes版本

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

"kubernetesConfig": { "customHyperkubeImage": "docker.io/dockerhubid/hyperkube-amd64:sometag"}

添加Windows節點

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

"agentPoolProfiles": [ { "name": "windowspool2", "count": 2, "vmSize": "Standard_D2_v2", "availabilityProfile": "AvailabilitySet", "osType": "Windows" } ], "windowsProfile": { "adminUsername": "azureuser", "adminPassword": "replacepassword1234$" },

使用GPU

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

自定義網路插件

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

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

"properties": { "orchestratorProfile": { "orchestratorType": "Kubernetes", "kubernetesConfig": { "networkPolicy": "azure" } }}

也可以使用calico網路插件

"properties": { "orchestratorProfile": { "orchestratorType": "Kubernetes", "kubernetesConfig": { "networkPolicy": "calico" } }}

參考文檔

  • AKS – Managed Kubernetes on Azure
  • Azure Container Service (AKS)
  • Azure/acs-engine Github
  • acs-engine/examples

推薦閱讀:

容器編排之Kubernetes安裝與配置
PPT收藏|KubeCon北美峰會幹貨直播培訓課
Kubernetes中的用戶與身份認證授權
梁勝關於容器的年終總結,沒再提Docker
一周IT博文精選TOP10(第八期)

TAG:Kubernetes | Azure | Docker |