0
点赞
收藏
分享

微信扫一扫

使用AKS+ACI实现容器快速扩容

dsysama 03-06 23:00 阅读 2

概述

简介

今天分享的还是关于AKS快速扩缩容的内容,之前其实刚介绍过使用Artifact streaming加速AKS容器部署,主要讲的是通过Artifact streaming加快拉取image的时间,而这次分享的主要是如何快速实现container的扩容,也就是scale out,主要采用的方法是使用虚拟节点的方式,结合Azure Container instance,将container部署到虚拟节点中,以container instance的方式提供服务。

优势

传统情况下,当container扩容时,如果node资源不足,而我们又设置了node的auto scale的话,需要等待node scale out之后,将新的container部署到新的node中,这种方式相对来说效率会低一些,因为node毕竟还是虚拟机,扩容需要一定时间,而通过虚拟节点(virtual node),我们不需要等待物理节点的扩容,因为新的container是直接部署到ACI(Azure container instance)中的,扩容速度相对传统方式会快一些

限制

Virtual Node不支持的方案或者部署注意事项

  • 使用服务主体拉取 ACR 映像。 解决方法是使用 Kubernetes 机密
  • 虚拟网络限制包括 VNet 对等互连、Kubernetes 网络策略和网络安全组发送到 Internet 的出站流量。
  • 初始化容器(Init containers)
  • 主机别名(Init containers)
  • ACI 中的 exec 的参数
  • DaemonSet 不会将 Pod 部署到虚拟节点
  • 为了将 Windows Server 容器调度到 ACI,需要手动安装开源 Virtual Kubelet ACI 提供程序。
  • 虚拟节点需要那些具有 Azure CNI 网络的 AKS 群集。
  • 对 AKS 使用 API 服务器授权的 IP 范围。
  • 卷装载 Azure 文件共享支持常规用途 V2 和常规用途 V1。 但虚拟节点当前不支持 永久性卷 和 永久性卷声明。 按照说明装载带有 Azure 文件共享的卷作为内联卷。
  • 不支持使用 IPv6。
  • 虚拟节点不支持容器挂钩功能。

配置

创建AKS

创建resource group

az group create --name ACI `
				--location eastasia

使用AKS+ACI实现容器快速扩容_ACI

创建AKS,注意参考上边列出来的限制,virtual node只支持AzureCNI,所以必须要部署AzureCNI的cluster

$subnet_id=az network vnet subnet show -g Work --vnet-name work-vnet --name default --query id -o tsv
az aks create -g ACI `
			    -n ACIAKS `
				--node-osdisk-size 128 `
				--admin-username azureuser `
				--kubernetes-version 1.27.7 `
				--location eastasia `
				--network-plugin azure `
				--node-count 1  `
				--node-vm-size Standard_D2S_v3 `
				--nodepool-name nodepool `
				--service-cidr 10.10.1.0/24 `
				--dns-service-ip 10.10.1.10 `
				--vnet-subnet-id $subnet_id `
				--load-balancer-sku Standard `
				--max-pods 30

使用AKS+ACI实现容器快速扩容_Azure_02


开启addon

接下来就需要准备开启virtual node了,virtual node在AKS里本质上只是个addon,所以开启的步骤相对简单,在开启addon之前,需要先准备一个网段,因为之前说过virtual node是基于ACI的,我们需要为ACI准备一个单独的网段,这个网段之后会自动设置delegation

az network vnet subnet create --resource-group Work `
							  --vnet-name Work-vnet `
							  --name ACISubnet `
							  --address-prefixes 10.24.0.0/24

使用AKS+ACI实现容器快速扩容_Azure_03

之后就可以enable addon了

az aks enable-addons --resource-group ACI `
					 --name ACIAKS `
					 --addons virtual-node `
					 --subnet-name ACISubnet

使用AKS+ACI实现容器快速扩容_ACI_04

可以看到virtual node实际上会在集群中部署一个pod,观察发现这个pod部署后一直没有正常启动

kubectl get po -A

使用AKS+ACI实现容器快速扩容_云_05

查看log可以发现,这里报的是一个权限的错误

kubectl logs aci-connector-linux-5b74bf66d4-w7wqq -n kube-system

使用AKS+ACI实现容器快速扩容_云_06

开启addon之后,会自动创建一个ACI的system identity,这个identity需要具有对AKS网络的管理权限

使用AKS+ACI实现容器快速扩容_ACI_07

权限的添加本身是自动完成的,但是需要一段时间来生效

使用AKS+ACI实现容器快速扩容_ACI_08

等一段时间后,就可以看到第二个node了

kubectl get node

使用AKS+ACI实现容器快速扩容_Azure_09

部署sample应用

之后就可以部署一个sample的应用了

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aci-helloworld
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aci-helloworld
  template:
    metadata:
      labels:
        app: aci-helloworld
    spec:
      containers:
      - name: aci-helloworld
        image: mcr.microsoft.com/azuredocs/aci-helloworld
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/role: agent
        beta.kubernetes.io/os: linux
        type: virtual-kubelet
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Exists
      - key: azure.com/aci
        effect: NoSchedule

之后将这个deployment scale out到50个实例

kubectl scale --replicas=50 deployment/aci-helloworld

使用AKS+ACI实现容器快速扩容_ACI_10

可以看到等待一段时间后,container都部署出来了,而我们并没有设置node的自动扩缩容,新的container都是部署到virtual node上的,也就是以ACI的形式部署的

kubectl get po -w

使用AKS+ACI实现容器快速扩容_K8S_11

而在portal上也可以看到这些新的ACI了

使用AKS+ACI实现容器快速扩容_ACI_12

举报

相关推荐

0 条评论