Kubernetes边缘场景下常见的容器应用管理方案是什么

发布时间:2022-01-11 17:48:55 作者:iii
来源:亿速云 阅读:111

这篇文章主要介绍“Kubernetes边缘场景下常见的容器应用管理方案是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Kubernetes边缘场景下常见的容器应用管理方案是什么”文章能帮助大家解决问题。

1. 边缘简单服务场景

Kubernetes边缘场景下常见的容器应用管理方案是什么

在笔者接触过的边缘需求中部分用户业务场景比较简单,如:拨测服务。这种场景的特点是用户希望在每个节点部署相同的服务,并且每个节点起一个 pod 即可,这种场景一般推荐用户直接使用 daemonset 部署。关于 daemonset 的特点和使用方式读者可以阅读 kubernetes 官方文档。

2.边缘单站点部署微服务场景

Kubernetes边缘场景下常见的容器应用管理方案是什么

第二种场景是部署边缘 SAAS 服务,由于涉及客户商业机密,此处暂不举例。用户会在一个边缘机房内部署一整套微服务,包括账号服务、接入服务、业务服务、存储及消息队列,服务之间借助kubernetes的dns做服务注册和发现。这种情况下客户可以直接使用 deployment和service,其中最主要的困难不在于服务管理而是边缘自治能力。

关于deployment和service的使用方式读者可以阅读kubernetes 官方文档,关于TKE@edge 边缘自治能力我们将会在后续推出相关文章介绍。

3.边缘多站点部署微服务场景

Kubernetes边缘场景下常见的容器应用管理方案是什么

场景特点

常规方案

1.将服务限制在一个节点内

Kubernetes边缘场景下常见的容器应用管理方案是什么

该方案的特点:

服务以daemonset方式部署,以便每个边缘节点上均有所有服务的 pod。如上图所示,集群内有A、B两个服务,以daemonset部署后每个边缘节点上均有一个 Pod-A和Pod-B

服务通过localhost访问,以便将调用链锁定在同一个节点内。如上图所示,Pod-A和Pod-B之间以localhost访问

该方案的缺点:

每个服务在同一个节点内只能有一个 Pod,这是由于daemonset工作机制所限,对于需要在同一节点上运行多个 Pod的服务来说这个限制极为不便。

Pod需要使用 hostnetWork模式,以便Pod之间可以通过localhost+port访问。这意味着需要用户很好地管理服务对资源使用,避免出现资源竞争,如端口竞争。

2.服务在不同站点叫不同的名字

Kubernetes边缘场景下常见的容器应用管理方案是什么

该方案的特点:

该方案的缺点:

场景痛点

1.k8s本身并不直接针对下述场景提供方案。

2.另外,使用方为了让容器化的业务在调度方案上与之前运行在 vm或者物理机上的业务保持一致,他们很自然就想到为每个 pod 分配一个公网IP,然而公网IP数量明显是不够用的。

综上所述,原生k8s虽然可以变相满足需求1),但是实际方案非常复杂,对于需求2)则没有好的解决案。

为解决上述痛点,TKE@edge 开创性地提出和实现了 serviceGroup 特性,两个yaml文件即可轻松实现即使上百地域的服务部署,且无需应用适配或改造。

seviceGroup功能介绍

serviceGroup可以便捷地在共属同一个集群的不同机房或区域中各自部署一组服务,并且使得各个服务间的请求在本机房或本地域内部即可完成,避免服务跨地域访问。

原生 k8s 无法控制deployment的pod创建的具体节点位置,需要通过统筹规划节点的亲和性来间接完成,当边缘站点数量以及需要部署的服务数量过多时,管理和部署方面的极为复杂,乃至仅存在理论上的可能性;与此同时,为了将服务间的相互调用限制在一定范围,业务方需要为各个deployment分别创建专属的service,管理方面的工作量巨大且极容易出错并引起线上业务异常。

serviceGroup就是为这种场景设计的,客户只需要使用ServiceGroup提供的DeploymentGrid和ServiceGrid两种tkeedge自研的kubernetes 资源,即可方便地将服务分别部署到这些节点组中,并进行服务流量管控,另外,还能保证各区域服务数量及容灾。

serviceGroup关键概念

1.整体架构

Kubernetes边缘场景下常见的容器应用管理方案是什么

NodeUnit

NodeGroup

ServiceGroup

2.涉及的资源类型

DepolymentGrid

DeploymentGrid的格式与Deployment类似,<deployment-template>字段就是原先deployment的template字段,比较特殊的是gridUniqKey字段,该字段指明了节点分组的label的key值;

apiVersion: tkeedge.io/v1 
kind: DeploymentGrid
metadata:  
  name:  
  namespace: 
 spec:  
  gridUniqKey: <NodeLabel Key>  
  <deployment-template>

ServiceGrid

ServiceGrid的格式与Service类似,<service-template>字段就是原先service的template字段,比较特殊的是gridUniqKey字段,该字段指明了节点分组的label的key值;

apiVersion: tkeedge.io/v1 
kind: ServiceGrid 
metadata:  
  name:  
  namespace: 
spec:  
  gridUniqKey: <NodeLabel Key>  
  <service-template>

3.使用示例

以在边缘部署nginx为例,我们希望在多个节点组内分别部署nginx服务,需要做如下事情:

1)确定ServiceGroup唯一标识

这一步是逻辑规划,不需要做任何实际操作。我们将目前要创建的serviceGroup逻辑标记使用的 UniqKey为:zone。

2)将边缘节点分组

这一步需要使用TKE@edge控制台或者kubectl 对边缘节点打 label,tke@edge控制台操作入口如下图:

Kubernetes边缘场景下常见的容器应用管理方案是什么

3)界面在集群的节点列表页,点击 ”编辑标签“即可对节点打 label

4)部署deploymentGrid

apiVersion: tkeedge.io/v1
kind: DeploymentGrid
metadata:
 name: deploymentgrid-demo
 namespace: default
spec:
 gridUniqKey: zone
 template:
  selector:
   matchLabels:
    appGrid: nginx
  replicas: 2
  template:
   metadata:
    labels:
     appGrid: nginx
   spec:
    containers:
    \- name: nginx
     image: nginx:1.7.9
     ports:
     \- containerPort: 80
apiVersion: tkeedge.io/v1 
kind: ServiceGrid 
metadata:  
  name: servicegrid-demo  
  namespace: default 
spec:  
  gridUniqKey: zone  
  template:   
    selector:    
     appGrid: nginx   
    ports:   
    \- protocol: TCP    
     port: 80    
     targetPort: 80
    sessionAffinity: ClientIP

5)部署serviceGrid

可以看到gridUniqKey字段设置为了zone,所以我们在将节点分组时采用的label的key为zone,如果有三组节点,分别为他们添加zone: zone-0, zone: zone-1 ,zone: zone-2的label即可;这时,每组节点内都有了nginx的deployment和对应的pod,在节点内访问统一的service-name也只会将请求发向本组的节点。

Kubernetes边缘场景下常见的容器应用管理方案是什么

另外,对于部署了DeploymentGrid和ServiceGrid后才添加进集群的节点组,该功能会在新的节点组内自动创建指定的deployment和service。

关于“Kubernetes边缘场景下常见的容器应用管理方案是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. Kubernetes原生边缘计算框架KubeEdge怎么用
  2. Java高并发场景下的缓存常见的问题有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:如何在TKE中实现DevOps

下一篇:MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》