IDC 的资源有限,当需要应对业务突发流量,IDC 内的算力资源不足以应对时,可以选择使用公有云资源应对临时流量。TKE Resilience Chart 利用 TKE Serverless 容器服务,基于自定义的调度策略,通过添加超级节点的方式,将用户集群中的工作负载弹性上云,使用户 IDC 集群获得极大的弹性拓展能力,优势如下:
TKE Resilience Chart 主要是由超级节点管理器,调度器,容忍控制器3部分组成,如表格所示:
简称 | 组件名称 | 描述 |
---|---|---|
eklet | 超级节点管理器 | 负责 Podsandbox 生命周期的管理,并对外提供原生 kubelet 与节点相关的接口。 |
tke-scheduler | 调度器 | 负责根据调度策略将 workload 弹性上云,仅会安装在非 TKE 发行版的 K8S 集群上,TKE 发行版集群不会安装此组件。其中 TKE 发行版(TKE Kubernetes Distro)是由腾讯云 TKE 发布的 K8S 发行版本,用于帮助用户创建与云上 TKE 完全一致的 K8S 集群,目前 TKE 发行版集群已经在 GitHub 开源,详情见 TKE Kubernetes Distro。 |
admission-controller | 容忍控制器 | 负责为处于 pending 状态的 Pod 添加容忍,使其可以调度到超级节点上。 |
AUTO_SCALE_EKS=true|false
分为全局开关和局部开关,用来控制 workload 在 pending
的情况下是否弹性调度到腾讯云 EKS,如表格所示:kubectl get cm -n kube-system eks-config
中 AUTO_SCALE_EKS
,默认开启。spec.template.metadata.annotations ['AUTO_SCALE_EKS']
全局开关 | 局部开关 | 行为 |
---|---|---|
AUTO_SCALE_EKS=true | AUTO_SCALE_EKS=false | 调度成功 |
AUTO_SCALE_EKS=true | 未定义 | 调度成功 |
AUTO_SCALE_EKS=true | AUTO_SCALE_EKS=true | 调度成功 |
AUTO_SCALE_EKS=false | AUTO_SCALE_EKS=false | 调度失败 |
AUTO_SCALE_EKS=false | 未定义 | 调度失败 |
AUTO_SCALE_EKS=false | AUTO_SCALE_EKS=true | 调度成功 |
未定义 | AUTO_SCALE_EKS=false | 调度成功 |
未定义 | 未定义 | 调度成功 |
未定义 | AUTO_SCALE_EKS=true | 调度成功 |
tke-scheduler
,TKE 发行版 K8S 则不需要指定调度器。LOCAL_REPLICAS: N
。pending
的 workload 将扩容到腾讯云 EKS。pending
的 workload 将扩容到 TKE Serverless 集群。DaemonsetForbidden
。eks.tke.cloud.tencent.com/resolv-conf
的 annotation 后,生成的 cxm 子机里的 /etc/resolv.conf 就会被更新成用户定义的内容。
注意:会覆盖原来超级节点的 dns 配置,最终以用户的配置为准。
eks.tke.cloud.tencent.com/resolv-conf: |
nameserver 4.4.4.4
nameserver 8.8.8.8
git clone https://github.com/tkestack/charts.git
编辑 charts/incubator/tke-resilience/values.yaml,配置以下信息:
cloud:
appID: "{腾讯云账号 APPID}"
ownerUIN: "{腾讯云用户账号 ID}"
secretID: "{腾讯云账号 secretID}"
secretKey: "{腾讯云账号 secretKey}"
vpcID: "{EKS Pod 放置的 VPC ID}"
regionShort: "{EKS Pod 放置的 region 简称}"
regionLong: "{EKS Pod 放置的 region 全称}"
subnets:
- id: "{EKS Pod 放置的子网 ID}"
zone: "{EKS Pod 放置的可用区}"
eklet:
PodUsedApiserver: "{当前集群的 API Server 地址}"
说明:TKE Serverless 容器服务支持售卖的地域和可用区请参见 地域和可用区。
您可通过 本地 Helm 客户端连接集群。
执行以下命令,在第三方集群中通过 Helm Chart 安装 TKE Resilience Chart。
helm install tke-resilience --namespace kube-system ./tke-resilience --debug
执行以下命令,确认 Helm 应用中组件是否安装完成。本文以 TKE 发行版的集群为例,未安装 tke-scheduler。
# kubectl get Pod -n kube-system | grep resilience
eklet-tke-resilience-5f9dcd99df-rgsmc 1/1 Running 0 43h
eks-admission-tke-resilience-5bb588dc44-9hvhs 1/1 Running 0 44h
查看集群中已经部署了1个超级节点。
# kubectl get node
NAME STATUS ROLES AGE VERSION
10.0.1.xx Ready <none> 2d4h v1.20.4-tke.1
10.0.1.xx Ready master 2d4h v1.20.4-tke.1
eklet-subnet-xxxxxxxx Ready <none> 43h v2.4.6
创建 demo 应用 nginx-deployment
,该应用有4个副本,其中3个在 TKE Serverless 集群,1个在本地集群,Yaml 示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 4
strategy:
type: RollingUpdate
selector:
matchLabels:
app: nginx
template:
metadata:
annotations:
AUTO_SCALE_EKS: "true"
LOCAL_REPLICAS: "1" #设置本地集群运行的副本数为 1
labels:
app: nginx
spec:
#schedulerName: tke-scheduler 如果是第三方集群则需要执行调度器为 tke-scheduler
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
验证副本的状态以及分布,符合预期。
# kubectl get Pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-77b9b9bc97-cq9ds 1/1 Running 0 27s 10.232.1.88 10.0.1.xxx <none> <none>
nginx-deployment-77b9b9bc97-s9vzc 1/1 Running 0 27s 10.0.1.118 eklet-subnet-xxxxxxxx <none> <none>
nginx-deployment-77b9b9bc97-sd4z5 1/1 Running 0 27s 10.0.1.7 eklet-subnet-xxxxxxxx <none> <none>
nginx-deployment-77b9b9bc97-z86tx 1/1 Running 0 27s 10.0.1.133 eklet-subnet-xxxxxxxx <none> <none>
并验证缩容的特性,由于使用的是 TKE 发行版的集群,会优先缩容 TKE Serverless 集群的实例。这里应用的副本数从4调整为3。
# kubectl scale deployment nginx-deployment --replicas=3
由以下结果可以看出,优先缩容了云上的副本,符合预期。
# kubectl get Pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-77b9b9bc97-cq9ds 1/1 Running 0 7m38s 10.232.1.88 10.0.1.xxx <none> <none>
nginx-deployment-77b9b9bc97-s9vzc 1/1 Running 0 7m38s 10.0.1.118 eklet-subnet-xxxxxxxx <none> <none>
nginx-deployment-77b9b9bc97-sd4z5 1/1 Running 0 7m38s 10.0.1.7 eklet-subnet-xxxxxxxx <none> <none>
本页内容是否解决了您的问题?