Azure Managed Kubernetes (AKS) 简介

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 还在预览版,现阶段建议用户还是继续使用 ACS 来管理容器应用程序。

使用方法

以下文档假设用户已经安装好了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 --agent-count 3 --generate-ssh-keys

稍等一会,集群创建好后安装并配置 kubectl

# Install kubectl
az aks install-cli

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

运行容器应用

创建一个 azure-vote.yaml文件,内容为

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      containers:
      - name: azure-vote-back
        image: redis
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      containers:
      - name: azure-vote-front
        image: microsoft/azure-vote-front:redis-v1
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

然后执行下面的命令创建和访问该vote示例应用:

# 创建部署
kubectl create -f azure-vote.yaml

# 查询 vote 前端应用的公网IP,需要稍等一下,然后就可以通过获得的公网IP来访问了
kubectl get service azure-vote-front --watch

# 还可以配置 Pod 的自动扩展
kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10

高级功能

访问 Dashboard

# Create dashboard
az aks browse --resource-group group1 --name myK8SCluster

手动扩展或收缩集群

az aks scale --resource-group=group1 --name=myK8SCluster --agent-count 5

升级集群

# 查询当前集群的版本以及可升级的版本
az aks get-versions --name myK8sCluster --resource-group group1 --output table

# 升级到 1.8.1 版本
az aks upgrade --name myK8sCluster --resource-group group1 --kubernetes-version 1.8.1

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

helm init --client-only
helm install stable/nginx-ingress

当集群不在使用时,可以删除集群

az group delete --name group1 --yes --no-wait

下图动态展示了一个部署 v1.7.7 版本集群并升级到 v1.8.1 的过程:

Azure Container Registry

在 AKS 预览版发布的同时,Azure 还同时发布了 Azure Container Registry(ACR)服务,用于托管用户的私有镜像。

# Create ACR
az acr create --resource-group myResourceGroup --name <acrName> --sku Basic --admin-enabled true

# Login
az acr login --name <acrName>

# Tag the image.
az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table
docker tag azure-vote-front <acrLoginServer>/azure-vote-front:redis-v1

# push image
docker push <acrLoginServer>/azure-vote-front:redis-v1

# List images.
az acr repository list --name <acrName> --output table

结语

AKS 的发布也一度让很多 ACS 的老用户感到迷惑,但 ACS 肯定还会继续支持下去,并且当前来看,ACS 要比 AKS 稳定的多(ACS是稳定版,而AKS只是预览版)。

为此,Brendan BurnsGabe Monroy 还将在本周五 9:00 (PT时间,北京时间周六早上 1:00)举行一个 Reddit AMA 活动,解释和回答用于关于 AKS 的疑问。欢迎到时参加。

Related Articles

comments powered by Disqus