阿里云容器服务新建集群优化方案-阿里云开发者社区

开发者社区> 凯京技术团队> 正文

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

简介: 前言 选择阿里云的容器服务,主要原因是公司主要业务基本都运行在阿里云上。相较自建 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 节点,十分良心!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云容器服务新建集群优化方案
前言 选择阿里云的容器服务,主要原因是公司主要业务基本都运行在阿里云上。相较自建 kubernetes 集群,容器服务的优势在于部署相对简单,与阿里云 VPC 完美兼容,网络的配置相对简单,而如果使用 kubeadmin 安装部署 kubernetes 集群,除了众所周知的科学上网问题,还有一系列的问题,包括 etcd 、 scheduler 和 controller-manager 的高可用问题等。
1290 0
重磅!容器集群监控利器 阿里云Prometheus 正式免费公测
Prometheus 作为容器生态下集群监控的首选方案,是一套开源的系统监控报警框架。2019 年7月3日,阿里云Prometheus云托管实例正式开始免费公测。针对容器集群监控场景,提供了完整的采集、存储、监控、告警、图表展现的数据监控服务。
11080 0
[产品商业化]阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化
阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结合,提供的一款敏捷安全的Serverless容器运行服务。
2321 0
如何使用Terraform管理容器服务Kubernetes集群之--Serverless集群
#### 介绍 Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。关于 Terraform 的基本介绍本文不再赘述,有兴趣的同学可以参考 [《云生态下的基础架构资源管理利器Terraform》](https://yq.aliyun.com/articles/215592) 等云栖社区的优秀文章。
1297 0
ASP.NET性能优化之负载均衡
1:HTTP重定向 所谓HTTP重定向,就是通过修改HTTP响应头中的Location标识为新的URL,然后返回给客户端,让客户端重新根据这个Location标识的URL去做新的请求。 这是一种最简单、也是最轻量级的负载均衡实现方案,使用asp.
683 0
从美图容器优化实践谈Kubernetes网络方案设计
本文通过介绍美图线上容器化的实践经验,包括线上遇到的实际问题,来探讨 Kubernetes 环境下的网络方案设计。值得正在转型 K8S 的架构师学习和借鉴。 李连荣,美图高级系统研发工程师,曾建立支持千万的长连接服务,从零开始在建立美图的容器化服务,并主导完成美图容器化的网络方案。
1294 0
弹性容器实例服务 ECI 1月22日正式商业化收费
阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化。
5504 0
容器集群部署 选好编排工具是关键
本文讲的是容器集群部署 选好编排工具是关键【IT168 评论】容器技术提供了组件化的环境,可以帮助业务应用在云之间轻松迁移而无需显著的返工。随着容器在企业持续获得发展,厂商将增加新的功能让用户可以创建可扩展的基于容器的环境。
2189 0
应用容器化优化指南 - Golang篇
前言 随着容器技术的兴起,越来越多不同类型的应用开始使用容器的方式进行交付。Golang作为服务器端非常热门的一门语言同时也是容器技术的主要编写语言备受关注。那么将一个Golang应用进行容器化的时候,需要注意哪些事情,在出现问题时该如何进行调优和诊断呢? 先谈谈Golang本身的设计 Golang是谷歌发布的第二款开源编程语言。
3234 0
+关注
凯京技术团队
我们是凯京科技技术团队。技术有无穷的魅力,我们不满足当前的现状,脚踏实地锐意进取,定能触碰到星空
24
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载