使用ingress暴露kubernetes集群内部的pod服务

简介: 使用ingress暴露kubernetes集群内部的pod服务

回顾

Kubernetes暴露服务的方式目前只有三种:LoadBlancer Service、ExternalName、NodePort Service、Ingress,使用四层负载均衡调度器service时,当客户端访问kubernetes集群内部的应用时,数据包的走向如下面流程所示:

client--->nodeip:port--->service ip:port--->podip:port

Ingress和Ingress Controller是什么?

我们把kubernetes集群内部的服务提供给外界访问会产生以下几个问题:

1、Pod 漂移问题

Kubernetes具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其他机器启动一个新的,还可以动态扩容等,通俗地说,这个Pod可能在任何时刻出现在任何节点上,也可能在任何时刻死在任何节点上;那么自然随着Pod的创建和销毁,Pod IP 肯定会动态变化;那么如何把这个动态的Pod IP暴露出去?这里借助于Kubernetes的 Service 机制,Service可以以标签的形式选定一组带有指定标签的Pod,并监控和自动负载他们的Pod IP,那么我们向外暴露只暴露Service IP就行了;这就是NodePort模式:即在每个节点上开起一个端口,然后转发到内部Pod IP 上,如下图所示:

此时的访问方式:http://nodeip:nodeport/


2、端口管理问题

采用NodePort方式暴露服务面临的问题是,服务一旦多起来,NodePort在每个节点上开启的端口会及其庞大,而且难以维护;这时,我们能否使用一个Nginx直接对内进行转发呢?众所周知的是,Pod与Pod之间是可以互相通信的,而Pod是可以共享宿主机的网络名称空间的,也就是说当在共享网络名称空间时,Pod上所监听的就是Node上的端口。那么这又该如何实现呢?简单的实现就是使用 DaemonSet 在每个Node上监听 80,然后写好规则,因为Nginx外面绑定了宿主机80端口(就像NodePort),本身又在集群内,那么向后直接转发到相应 Service IP 就行了,如下图所示:


3、域名分配及动态更新问题

从上面的方法,采用Nginx-Pod似乎已经解决了问题,但是其实这里面有一个很大缺陷:当每次有新服务加入又该如何修改Nginx配置呢?我们知道使用Nginx可以通过虚拟主机域名进行区分不同的服务,而每个服务通过upstream进行定义不同的负载均衡池,再加上location进行负载均衡的反向代理,在日常使用中只需要修改nginx.conf即可实现,那在K8S中又该如何实现这种方式的调度呢?假设后端的服务初始服务只有ecshop,后面增加了bbs和member服务,那么又该如何将这2个服务加入到Nginx-Pod进行调度呢?总不能每次手动改或者Rolling Update 前端Nginx Pod吧!此时Ingress出现了,如果不算上面的Nginx,Ingress 包含两大组件:Ingress Controller 和 Ingress。

Ingress简单的理解就是你原来需要改Nginx配置,然后配置各种域名对应哪个 Service,现在把这个动作抽象出来,变成一个 Ingress 对象,你可以用 yaml 创建,每次不要去改Nginx 了,直接改yaml然后创建/更新就行了;那么问题来了:”Nginx 该怎么处理?”

Ingress Controller 这东西就是解决 “Nginx 的处理方式” 的;Ingress Controoler 通过与 Kubernetes API 交互,动态的去感知集群中Ingress规则变化,然后读取他,按照他自己模板生成一段 Nginx 配置,再写到 Nginx Pod 里,最后 reload 一下,工作流程如下图:

实际上Ingress也是Kubernetes API的标准资源类型之一,它其实就是一组基于DNS名称(host)或URL路径把请求转发到指定的Service资源的规则。用于将集群外部的请求流量转发到集群内部完成的服务发布。我们需要明白的是,Ingress资源自身不能进行“流量穿透”,仅仅是一组规则的集合,这些集合规则还需要其他功能的辅助,比如监听某套接字,然后根据这些规则的匹配进行路由转发,这些能够为Ingress资源监听套接字并将流量转发的组件就是Ingress Controller。

注:Ingress控制器不同于Deployment控制器的是,Ingress控制器不直接运行为kube-controller-manager的一部分,它仅仅是Kubernetes集群的一个附件,类似于CoreDNS,需要在集群上单独部署。

4.Ingress Controllers是什么?

Ingress Controller是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层负载均衡器在反向代理到后端pod,常见的七层负载均衡器有nginx,traefik等,以我们熟悉的nginx为例,假如请求到达nginx,会通过upstream反向代理到后端pod,但是后端pod的ip地址是一直在变化的,因此在后端pod前需要加一个service,这个service只是起到分组的作用,那么我们upstream只需要填写service地址即可

常见的七层负载均衡调度器有哪些:

nginx:需要手动加载配置文件

traefik:定期自动加载配置文件,不需要手动干预,在微服务中几乎都会使用这种调度器


5.Ingress是什么?

官方:https://kubernetes.io/docs/concepts/services-networking/ingress/

ingress官网定义:ingress可以把进入到集群内部的请求转发到集群中的一些服务上,从而可以把服务暴露到集群外部。Ingress 能把集群内Service 配置成外网能够访问的URL,流量负载均衡,提供基于域名访问的虚拟主机等;ingress是k8s中的资源,当service关联的后端pod ip地址发生变化,就会把这些变化信息保存在ingress中,由ingress注入到七层负载均衡调度器ingress controller中,也就是把信息传入到七层负载均衡调度器的配置文件中,并且重新加载使配置生效,Ingress 可以用来规定HTTP/S请求应该被转发到哪个 Service 上,比如根据请求中不同的Host和url路径让请求落到不同的 Service 上


6.总结:

Ingress Controller:

Ingress Controller 可以理解为控制器,它通过不断的跟 Kubernetes API 交互,实时获取后端 Service、Pod 的变化,比如新增、删除等,然后结合 Ingress 定义的规则生成配置,然后动态更新上边的 Nginx 或者trafik负载均衡器,并刷新使配置生效,来达到服务自动发现的作用。

Ingress:

Ingress 是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义,可以给一个或多个 Service 定义一个或多个 Ingress 规则。


7.使用七层负载均衡调度器的步骤

(1)部署ingress controller,我们ingress controller使用的是traefik

(2)创建service,用来分组pod

(3)创建pod应用,可以通过控制器创建pod

(4)创建ingress http,测试通过http访问k8s内部pod

(5)创建ingress https,测试通过https访问k8s内部pod


8.客户端通过七层调度器访问后端pod的方式

使用七层负载均衡调度器ingress controller时,当客户端访问kubernetes集群内部的应用时,数据包走向如下面流程所示:

client--->Nodeip:port----->IngressController--->service--->pod

如何创建Ingress资源

Ingress资源是基于HTTP虚拟主机或URL的转发规则,需要强调的是,这是一条转发规则。它在资源配置清单中的spec字段中嵌套了rules、backend和tls等字段进行定义。如下示例中定义了一个Ingress资源,其包含了一个转发规则:将发往tomcat.lucky.com的请求,代理给一个名字为myapp的Service资源。

apiVersion: extensions/v1beta1    
kind: Ingress    
metadata:      
  name: ingress-myapp   
  namespace: default     
  annotations:          
    kubernetes.io/ingress.class: "nginx"
spec:     
  rules:   
  - host: tomcat.lucky.com   
    http:
      paths:       
      - path:       
        backend:    
          serviceName: myapp
          servicePort: 80

Ingress中的spec字段是Ingress资源的核心组成部分,主要包含以下3个字段:

rules:用于定义当前Ingress资源的转发规则列表;由rules定义规则,或没有匹配到规则时,所有的流量会转发到由backend定义的默认后端。

backend:默认的后端用于服务那些没有匹配到任何规则的请求;定义Ingress资源时,必须要定义backend或rules两者之一,该字段用于让负载均衡器指定一个全局默认的后端。

tls:TLS配置,目前仅支持通过默认端口443提供服务,如果要配置指定的列表成员指向不同的主机,则需要通过SNI TLS扩展机制来支持该功能。

backend对象的定义由2个必要的字段组成:serviceName和servicePort,分别用于指定流量转发的后端目标Service资源名称和端口。rules对象由一系列的配置的Ingress资源的host规则组成,这些host规则用于将一个主机上的某个URL映射到相关后端Service对象,其定义格式如下:

spec:
  rules:
  - hosts: <string>
    http:
      paths:
      - path:
        backend:
          serviceName: <string>
          servicePort: <string>

需要注意的是,.spec.rules.host属性值,目前暂不支持使用IP地址定义,也不支持IP:Port的格式,该字段留空,代表着通配所有主机名。tls对象由2个内嵌的字段组成,仅在定义TLS主机的转发规则上使用。

hosts:包含 于 使用 的 TLS 证书 之内 的 主机 名称 字符串 列表, 因此, 此处 使用 的 主机 名 必须 匹配 tlsSecret 中的 名称。

secretName: 用于 引用 SSL 会话 的 secret 对象 名称, 在 基于 SNI 实现 多 主机 路 由 的 场景 中, 此 字段 为 可选。

Ingress资源类型

Ingress的资源类型有以下4种:

1、单Service资源型Ingress
2、基于URL路径进行流量转发
3、基于主机名称的虚拟主机
4、TLS类型的Ingress资源

单Service资源型Ingress

暴露单个服务的方法有多种,如NodePort、LoadBanlancer等等,当然也可以使用Ingress来进行暴露单个服务,只需要为Ingress指定default backend即可,如下示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  backend:
    serviceName: my-svc
    servicePort: 80

Ingress控制器会为其分配一个IP地址接入请求流量,并将其转发至后端my-svc

Ingress Nginx部署

使用Ingress功能需要如下步骤:

1、安装部署ingress controller Pod
2、部署后端服务
3、部署ingress-nginx service
4、部署ingress

1.安装Ingress Controller

1)把Ingress相关的yaml文件传到k8s的master节点的/root/test目录

mkdir /root/test

需要上传到这个目录下的yaml文件为

Ingress相关的yaml文件在百度网盘,地址如下:

    链接:https://pan.baidu.com/s/1SF9Ni0CK0QmTFDEglmejiA 提取码:61co

    2)创建ingress-nginx名称空间

    kubectl apply -f namespace.yaml

    3)创建ingress controller的pod

    kubectl apply -f .

    4)测试部署是否成功

    kubectl get all -n ingress-nginx

    显示如下,说明部署成功了:

    NAME                                            READY   STATUS    RESTARTS   AGE
    pod/default-http-backend-78d75577fd-g4b8n       1/1     Running   0          3m2s
    pod/nginx-ingress-controller-7c7d57b55d-ng2gr   1/1     Running   0          3m2s
    NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    service/default-http-backend   ClusterIP   10.106.23.48   <none>        80/TCP    3m2s
    NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/default-http-backend       1/1     1            1           3m2s
    deployment.apps/nginx-ingress-controller   1/1     1            1           3m2s
    NAME                                                  DESIRED   CURRENT   READY   AGE
    replicaset.apps/default-http-backend-78d75577fd       1         1         1       3m2s
    replicaset.apps/nginx-ingress-controller-7c7d57b55d   1         1         1       3m2s

    2.部署后端服务

    1)部署后端服务

    mkdir /root/test/ingress  && cd  /root/test/ingress

    cat deploy-demo.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp
      namespace: default
    spec:
      selector:
        app: myapp
        release: canary
      ports:
      - name: http
        targetPort: 80
        port: 80
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-backend-pod
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
          release: canary
      template:
        metadata:
          labels:
            app: myapp
            release: canary
        spec:
          containers:
          - name: myapp
            image: ikubernetes/myapp:v2
            ports:
            - name: http
              containerPort: 80

    2)更新yaml文件

    kubectl apply -f deploy-demo.yaml

    3)查看pod是否部署成功

    kubectl get pods

    显示如下,说明部署成功:

    myapp-backend-pod-559ff5c66-6jgjs     1/1     Running   0          6s
    myapp-backend-pod-559ff5c66-fthgt     1/1     Running   0          6s
    myapp-backend-pod-559ff5c66-xtz6z     1/1     Running   0          6s

    3.部署ingress-nginx service

    通过ingress-controller对外提供服务,现在还需要手动给ingress-controller建立一个service,接收集群外部流量。方法如下:

    1)下载ingress-controller的yaml文件

    cat service-nodeport.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app: ingress-nginx
    spec:
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: 80
          protocol: TCP
          nodePort: 30080
        - name: https
          port: 443
          targetPort: 443
          protocol: TCP
          nodePort: 30443
      selector:
        app: ingress-nginx

    2)创建ingress-controller的service

    kubectl apply -f service-nodeport.yaml

    查看service是否创建成功

    kubectl get svc -n ingress-nginx

    显示如下,说明创建成功:


    ingress-nginx          NodePort    10.101.70.164   <none>        80:30080/TCP,443:30443/TCP   90s

    3)浏览器访问ingress-controller的service

    192.168.0.6:30080

    注:192.168.0.6是k8s的master节点ip

    此时应该是404 ,调度器是正常工作的,但是后端服务没有关联

    4.部署ingress

    (1)编写ingress的配置清单

    cat ingress-myapp.yaml

    apiVersion: extensions/v1beta1          #api版本
    kind: Ingress           #清单类型
    metadata:                       #元数据
      name: ingress-myapp    #ingress的名称
      namespace: default     #所属名称空间
      annotations:           #注解信息
        kubernetes.io/ingress.class: "nginx"
    spec:      #规格
      rules:   #定义后端转发的规则
      - host: tomcat.lucky.com    #通过域名进行转发
        http:
          paths:       
          - path:       #配置访问路径,如果通过url进行转发,需要修改;空默认为访问的路径为"/"
            backend:    #配置后端服务
              serviceName: myapp
              servicePort: 80
    

    2)更新yaml文件

    kubectl apply -f ingress-myapp.yaml

    3)查看ingress-myapp的详细信息

    kubectl describe ingress ingress-myapp

    显示如下:

    Name:             ingress-myapp
    Namespace:        default
    Address:          
    Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
    Rules:
      Host              Path  Backends
      ----              ----  --------
      tomcat.lucky.com  
                           myapp:80 (10.244.1.57:80,10.244.1.58:80,10.244.1.59:80)
    Annotations:        kubernetes.io/ingress.class: nginx
    Events:
      Type    Reason  Age   From                      Message
      ----    ------  ----  ----                      -------
      Normal  CREATE  44s   nginx-ingress-controller  Ingress default/ingress-myapp

    4)修改本地host文件,下面的ip是k8s的master节点ip

    192.168.0.6  tomcat.lucky.com

    5)浏览器访问tomcat.lucky.com:30080

    出现如下:

    5.部署ingress-测试代理tomcat服务

    1)部署tomcat服务

    cat tomcat-demo.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat
      namespace: default
    spec:
      selector:
        app: tomcat
        release: canary
      ports:
      - name: http
        targetPort: 8080
        port: 8080
      - name: ajp
        targetPort: 8009
        port: 8009
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat-deploy
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: tomcat
          release: canary
      template:
        metadata:
          labels:
            app: tomcat
            release: canary
        spec:
          containers:
          - name: tomcat
            image: tomcat:8.5.34-jre8-alpine   
            ports:
            - name: http
              containerPort: 8080
              name: ajp
              containerPort: 8009

    2)更新yaml文件

    kubectl apply -f tomcat-demo.yaml

    3)查看tomcat的pod是否部署成功

    kubectl get pods

    显示如下,说明创建成功:

    tomcat-deploy-8655579b6c-5dfqw        1/1     Running   0          83s
    tomcat-deploy-8655579b6c-9d79c        1/1     Running   0          83s
    tomcat-deploy-8655579b6c-qmc62        1/1     Running   0          83s

    4)编写tomcat的ingress规则,并创建ingress资源

    cat ingress-tomcat.yaml

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: tomcat
      namespace: default
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - host: tomcat.lucky6.com    #主机域名
        http:
          paths:
          - path:
            backend:
              serviceName: tomcat
              servicePort: 8080

    更新yaml文件:

    kubectl apply -f ingress-tomcat.yaml

    修改本地host文件,下面的ip是k8s的master节点ip

    192.168.0.6  tomcat.lucky6.com

    5)浏览器访问tomcat.lucky6.com:30080

    可看到出现如下界面:


    6)总结

    从前面的部署过程中,可以再次进行总结部署的流程如下:

    ①下载Ingress-controller相关的YAML文件,并给Ingress-controller创建独立的名称空间;

    ②部署后端的服务,如myapp,并通过service进行暴露;

    ③部署Ingress-controller的service,以实现接入集群外部流量;

    ④部署Ingress,进行定义规则,使Ingress-controller和后端服务的Pod组进行关联。

    构建TLS站点

    (1)准备证书,在k8s的master节点操作

    openssl genrsa -out tls.key 2048


    openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=tomcat.lucky.com


    (2)生成secret,在k8s的master节点操作

    kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key


    (3)查看secret

    kubectl get secret

    显示如下:

    tomcat-ingress-secret   kubernetes.io/tls                     2      56s

    (4)查看tomcat-ingress-secret详细信息

    kubectl describe secret tomcat-ingress-secret


    显示如下:

    Name:         tomcat-ingress-secret
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    Type:  kubernetes.io/tls
    Data
    ====
    tls.key:  1679 bytes
    tls.crt:  1294 bytes

    (5)创建ingress

    cat ingress-tomcat-tls.yaml

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-tomcat-tls
      namespace: default
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      tls:
      - hosts:
        - tomcat.lucky.com
        secretName: tomcat-ingress-secret
      rules:
      - host: tomcat.lucky.com
        http:
          paths:
          - path:
            backend:
              serviceName: tomcat
              servicePort: 8080

    更新yaml文件

    kubectl apply -f ingress-tomcat-tls.yaml

    (6)访问测试:

    https://tomcat.lucky.com:30443/

    上面最好火狐浏览器访问,选择接受风险并继续即可出现如下界面



    注:如果访问http强制跳转到https,需要在ingress的annotations下加一行注解nginx.ingress.kubernetes.io/ssl-redirect: 'false'

    相关实践学习
    深入解析Docker容器化技术
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
    相关文章
    |
    5月前
    |
    人工智能 算法 调度
    阿里云ACK托管集群Pro版共享GPU调度操作指南
    本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
    522 1
    |
    5月前
    |
    弹性计算 监控 调度
    ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
    ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
    356 89
    |
    10月前
    |
    资源调度 Kubernetes 调度
    从单集群到多集群的快速无损转型:ACK One 多集群应用分发
    ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
    667 9
    |
    10月前
    |
    资源调度 Kubernetes 调度
    从单集群到多集群的快速无损转型:ACK One 多集群应用分发
    本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
    |
    8月前
    |
    运维 Kubernetes 持续交付
    ACK One GitOps:让全球化游戏服务持续交付更简单
    ACK One GitOps 致力于提供开箱即用的多集群 GitOps 持续交付能力,简化游戏等服务的多集群/多地域统一部署,让您更加专注于业务开发。
    |
    12月前
    |
    存储 Kubernetes 监控
    K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
    总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
    1072 33
    |
    12月前
    |
    Kubernetes Docker 容器
    Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
    需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
    477 25
    |
    12月前
    |
    Kubernetes 开发者 Docker
    集群部署:使用Rancher部署Kubernetes集群。
    以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
    667 19
    |
    存储 Kubernetes API
    在K8S集群中,如何正确选择工作节点资源大小? 2
    在K8S集群中,如何正确选择工作节点资源大小?
    |
    Kubernetes Serverless 异构计算
    基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
    在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行
    基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源

    推荐镜像

    更多