阿里云容器服务新建集群优化方案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前言 选择阿里云的容器服务,主要原因是公司主要业务基本都运行在阿里云上。相较自建 kubernetes 集群,容器服务的优势在于部署相对简单,与阿里云 VPC 完美兼容,网络的配置相对简单,而如果使用 kubeadmin 安装部署 kubernetes 集群,除了众所周知的科学上网问题,还有一系列的问题,包括 etcd 、 scheduler 和 controller-manager 的高可用问题等。

前言

选择阿里云的容器服务,主要原因是公司主要业务基本都运行在阿里云上。相较自建 kubernetes 集群,容器服务的优势在于部署相对简单,与阿里云 VPC 完美兼容,网络的配置相对简单,而如果使用 kubeadmin 安装部署 kubernetes 集群,除了众所周知的科学上网问题,还有一系列的问题,包括 etcdschedulercontroller-manager 的高可用问题等。并且如果使用托管版的阿里云 kubernetes 容器服务,还会省掉3台 master 节点的钱,并且能将 master 节点的运维问题丢给阿里云解决,其提供的 master 节点性能肯定会比自购的配置好,这点是阿里云容器服务的研发小哥在来我司交流时专门强调的。

问题

前面吹了阿里云容器服务的优势,那这里也说说在实践中遇到的容器服务的问题:

  • 在新建集群的时候需要选择相应的 VPC 并选择 PodService 所在的网段,这两个网段不能和 Node 节点存在于同一网段,但是如果您在阿里云中存在不止一个 VPC (VPC的网段可以是 10.0.0.0/8,172.16-31.0.0/12-16,192.168.0.0/16 ),如果网段设置不对的话,就可能会使原本存在该网段的 ECS 失联,需要删除集群重新创建。如果删除失败的话,还需要手动删除路由表中的记录(别问我是怎么知道的)。
  • 在使用容器服务创建集群后,会创建2个 SLB (之前是3个),一个是 SLB 是在 VPC 上并且绑定一个弹性IP(需要在创建的时候手动勾选创建弹性IP)用于 API Server,一个是经典网络的 SLB 使用提供给 Ingress 使用。但是这两个外网IP创建后的规格都是默认最大带宽、按流量收费,这个并不符合我们的要求,需要手动修改,然而这个修改都会在第二天才能生效。
  • 容器服务创建集群后,Node 节点的名称会使{region-id}.{ECS-id}的形式,这个命名方式在集群监控,使用 kubectl 操作集群方面就显得比较反人类了,每次都要去查 ECS id 才能确定是哪个节点,而这个 Node 节点名称是不能修改的!

网段问题解决

这个比较好解决,甚至可以说不用解决,只要把网段规划好,不要出现网段冲突就好

Node 节点名称无法修改问题解决

之前已有人在阿里云聆听平台提出这个问题了,咨询了容器服务的研发小哥,得到的反馈是该功能已经在灰度测试了,相信很快就可以上线了。

创建 SLB 规格问题解决

相较之前自动创建3个 SLB 的方式,目前的版本只会自动创建2个并且有一个是 VPC 内网+弹性IP的方式,已经进行了优化,但是 ingress 绑定的 SLB 还是经典网络类型,无法接入云防火墙并且规格也是不合适的。这里给出解决方案:

创建新的 SLB

  • 这里需要创建一个新的 SLB 用来代替自动创建的不符合要求的 SLB。这里可以私网 SLB 先不绑定弹性IP。

    ![image](https://ws2.sinaimg.cn/large/ad5fbf65gy1g1ma5lxgvdj21ws0s6qa5.jpg)
  • 查看新购买 SLB 的 ID

    ![image](https://ws2.sinaimg.cn/large/ad5fbf65gy1g1ma8zuq1gj20sa0hoq4b.jpg)
    

在创建集群后重新绑定 ingress-controllerService

首先需要使用 kubectl 或者直接在阿里云控制台操作,创建新的 nginx-ingress-svc

# nginx ingress service
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress-lb-{new-name}
namespace: kube-system
labels:
    app: nginx-ingress-lb-{new-name}
annotations:
    # set loadbalancer to the specified slb id
    service.beta.kubernetes.io/alicloud-loadbalancer-id: {SLB-ID}
    # set loadbalancer address type to intranet if using private slb instance
    #service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
    #service.beta.kubernetes.io/alicloud-loadbalancer-backend-label: node-role.kubernetes.io/ingress=true
spec:
type: LoadBalancer
# do not route traffic to other nodes
# and reserve client ip for upstream
externalTrafficPolicy: "Local"
ports:
- port: 80
    name: http
    targetPort: 80
- port: 443
    name: https
    targetPort: 443
selector:
    # select app=ingress-nginx pods
    app: ingress-nginx

创建成功后,可以进到 SLB 页面查看,可以看到 80443 端口的监听已经被添加了

![image](https://ws2.sinaimg.cn/large/ad5fbf65gy1g1maej57c1j21ru0rwq8b.jpg) 

绑定符合要求的弹性IP

确定 SLB 创建成功并且已经成功监听后,这里就可以为 SLB 绑定符合您需求的弹性IP了,这里我们绑定一个按宽带计费2M的弹性IP
image

验证连通性

到上面这步,我们的 ingress 入口 SLB 已经创建完成,这里我们验证一下是否联通。

  • 在k8s集群中部署一个 nginx ,直接在阿里云容器服务控制台操作即可

    ![image](https://wx3.sinaimg.cn/large/ad5fbf65gy1g1mant7ec6j21s40qegpr.jpg)
    这里创建 ingress 理由,**注意:这里的域名需要解析到刚才创建的 SLB 绑定的弹性IP**
    ![image](https://ws1.sinaimg.cn/large/ad5fbf65gy1g1maqf7gdjj21ns0kymz8.jpg)
  • 访问该域名,显示 nginx 欢迎页,则证明修改成功

    ![image](https://wx2.sinaimg.cn/large/ad5fbf65gy1g1mat8srhnj21ak0hmact.jpg)
    

后续操作

  • 在确定新的 SLB 创建成功后,就可以将容器服务自动创建的 SLB 释放了
  • 删除 kube-system 中原本绑定的 Service
  • 这里别忘了,自动创建给API Server 的SLB还是按流量付费的,记得降配

后记

上面的这些问题和解决方案都属于临时方案,已在阿里云聆听平台提出了上面的问题,相信很快就会有所改进。总的来说,阿里云容器服务在提供优质的 kubernetes 功能,并且只收 ECS 的钱,对于想学习 kubernetes 又没有太多资金的同学也比较友好,直接买按量付费实例,测试完释放即可,不用购买 master 节点,十分良心!

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
22小时前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
15天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
15天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
15天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
15天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
15天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
15天前
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
本文总结了2024云栖大会容器计算专场的演讲内容,重点介绍了阿里云容器服务的新产品体验,包括智能、托管、弹性的特点,以及如何助力客户拥抱智算时代。文中还分享了多项实际案例和技术细节,展示了阿里云容器服务在提升用户体验和解决实际问题方面的努力。
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
64 7
|
16天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
155 77
|
25天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序

相关产品

  • 容器计算服务