阿里云Kubernetes平台构建和管理实践(下)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 阿里云智能容器平台解决方案架构师徐征讲解阿里云Kubernetes平台构建和管理实践,徐征主要从事帮助企业在面向云原生的应用转型的过程中提供解决方案和相应的工作。

本专题主要对整个阿里云产品的概览、集群规划创建、核心组件配置及优化、集群运维四个部分进行介绍。

本文为第三部分和第四部分,点击这里,查看第一部分和第二部分。

想看精彩直播回放,请点击这里。

以下为精彩直播内容整理:

三、核心组件配置及优化

核心组件-Ingress Controller部署架构:混布(中小规模)
image.png

当建好集群以及布好业务之后,为了更好的对外服务,Ingress是以Pod的形式部署在k8s里,集群默认初始化的配置给到的是Ingress Controller集齐的两个Pod,这两个Pod是随机的运行在Worker节点上的,基于这样的场景,对于一些中小规模的集群运行是没问题的。Ingress Controller和其他的Pod是同步在Worker节点上,这样会灵活伸缩,同时维护比较简单。但是,在这个节点上同时存在外部的南北流量和内部的东西流量,会产生流量的叠加,所以这样的场景比较适合中小规模。对整个Ingress需要对外访问的Kubernetes要求不会特别高的场景,可以用默认的配置直接使用。

核心组件-Ingress Controller部署架构:独立部署(大规模)

image.png

Ingress Controller核心组件的Pod可以独立进行部署,相当于是规划好的一组node节点。使这组节点不调动其他非Ingress的Pod,就只应用于Ingress Controller,这样的能力相当于这个节点上只提供Ingress Controller的Pod使用,从而最大限度的保证性能。但存在的问题是需要手动的维护机器组,当伸缩时,维护相对复杂。好处是一个节点内只有南北流量,或者只有东西流量,抗干扰性好,并且Ingress性能也有所保障。有一点需要注意的是,如果用于独立部署ingress controller的节点需要选择大规划,nf_conntrack表会受限于CPU核数,同时定义每一core对应的基本值为多少。Ingress Controller节点选择什么规格就决定了这个节点上能有多少的转发能力,nf_conntrack表就直接决定了转发的性能。通常,ingress的南北流量很大,但是ingress controller没有做特定的隔离选择,可能运行在普通的机器上,大概十几万的转发表,在高峰业务流量后很容易将ingress controller打垮,这属于一个典型的案例。

核心组件-独立部署Ingress Controller配置建议
独立部署Ingress Controller配置建议如下:

  • 选用32c/64g的配置2~3台对应一个SLB(5G入口流量) ,作为Ingress Controller节点组共同承担Pod任务;
  • 为部署的机器打上污点标签例如Taint: Ingress=:NoEexcute;
  • 设置Ingress controller的POD资源限制为request/limit: 15c/32g;
  • 设置Ingress controller使用ENI(对应Service要用cluster类型);
  • 更改对应的SLB规格(支持的并发数),以及选择按照流量计费(最大支持5G),或者使用指定已有SLB创建ingress-lb-svc。

核心组件-Ingress Controller的Nginx参数配置
Ingress controller通过configmap的key-value来配置Nginx的参数,可以使用官方的配置文档(https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/)来调节。

核心组件-Ingress Controller性能调优

image.png
默认的Controller存在一些默认的参数优化由上图左侧部分,还有一些定制化的参数优化,比如timeout的参数配置,可以通过自己修改configmap来实现。修改完的configmap是无需重新启动Pod的,可以自动地刷新配置。

核心组件-CoreDNS
CoreDNS作为内部的服务解析的组件,包括外部域名的服务解析。建议配置cluster-proportional-autoscaler,根据node数量以及vCore的数量水平自动扩展副本数;容器内打开nscd(域名缓存服务)时,可大幅提升解析性能;严禁生产环境使用alpine作为基础镜像,会导致dns解析请求异常。

核心组件-容器伸缩
image.png
HPA作为原生提供的水平伸缩,可以根据CPU或者外部的指标做外部的指标扩容。目前VPA作为还未成熟的方案,主要指容器的Pod的资源限制,包括容器垂直的伸缩。阿里云提出的定时POD伸缩能力已经开源。同样通过人为也可以进行伸缩。这些伸缩都只在集群内部的Pod伸缩,当Pod伸缩到触及整个最大容量上限时,就需要一个Cluster级别的伸缩,此伸缩为集群里的node节点。

核心组件-Cluster Autoscaler
image.png
由此产生Cluster Autoscaler核心组件,其核心在于有一个Cluster Autoscaler scheduler调度器,会监听整个调度的状态,当前集群里面有多少Pod是属于pending状态,这些pending状态的Pod需要多少资源,再根据定义的ESST弹性伸缩组里的规格配置,算出需要多少数量,自动触发购买并加入到K8S集群,最后将没有调度的Pod调度到新的节点上,完成闭环状态。

核心组件-Kubernetes日志数据采集
运用越来越多的k8s分布式,则水平扩展的Pod会越来越多,业务里需要完成一键采集、统一管理以及查看日志是必要的任务。目前阿里云的整个k8s ICK是跟整个服务组建完成无缝的连接,当创建集群时勾选了使用日志服务时,阿里就会协助日志服务的Controller,自动的帮助做一些与日志服务对接的工作。从客户应用层面来说,只需要写一个环境变量,如下图所示,实现日志统一的采集。
image.png

核心组件-多维度一体化监控体系

image.png
监控也是重要的环节,对所有运行的各种组件的状态,能够及时的监控,并且出现异常以后能够触发告警。概括来说,监控可以包含几个部分,最底层为物理主机/VM层监控,指监控系统指标、CPU内存及网络流量等。第二层为容器POD指标监控,涉及到容器本身的系统指标,同样有CPU内存等指标。还有一层指容器POD里面的应用指标,相当于容器CaaS层资源监控。再往上一层为应用层性能监控,对整个应用层进行跟踪和监控。针对不同维度会有不同对接的产品提供相应的服务能力。

核心组件-POD监控/告警
通过创建集群时选择打通云监控,会自动提供丰富的监控能力。
image.png
如上图所示可以看到在K8S节点监控:每个节点/Master维度/Node维度,Master组件/Node组件维度,Deployment维度,POD实例维度。

核心组件-应用性能管理ARMS
针对全局应用层拓扑、全局应用性能统计与分析(Dashboard)、调用链分析采用慢调用,异常调用、异常快速定位与告警、方法栈调用分析、JVM监控、快速定位与分析、告警、SQL慢调用分析、动态生效配置,生产级适配、业务日志结合,调用链与业务逻辑关联分析等业务内部生成式的各种的可观测性的指标都可以在ARMS产品上进行管理。

核心组件-ARMS“无侵入式”快捷接入(Java)
整个接入是与阿里的容器服务做controller,controller可以自动的捕捉应用Pod创建的生命周期时是否需要接ARMS,唯一需要做的是在文件里加上annotation,通知arms pilot是可以利用的,以及创建arms pilot的名字,之后arms pilot CRD的controller自动的捕捉Pod创建的生命周期,在Pod启动时,需要用到ARMS的Java探针打在容器里面。这样做的优势是对代码不需要完全的侵入。

四、集群运维

集群运维-一键升级过程

image.png
平台提供一个Kubernetes版本的一键升级能力,相当于k8s版本的一个生命周期的迭代,作为由平台方提供一键升级的能力。需要做的只是选择一个在业务低峰时做的升级操作,升级主要分为两部分:第一部分,Master节点做串行的滚动升级,可以说是一台一台升级的,升级过程中对整个业务的访问、发布和使用是没有任何影响的;第二部分,node节点并行升级,相当于很多的节点同时进行升级,在升级过程中只是升级节点3的kubelet组件,并不会引起下面运行的Pod容器的中断,所以这样一键升级的过程是安全、可控的。

集群运维-系统组件升级
image.png
针对系统内部使用的系统组件,比如application-controller、disk-controller以及Cloud Controller等一些核心的能力组件,都会定期的进行新特性能力的增强,以及提供自主升级,
只需要定期的关注需要升级的页面,查看是否需要升级的部分,然后进行一键升级就可以。

集群运维-平台审计日志
image.png

在整个k8s集群里有很多的通道都会操作集群,比如原生的控制台,镜像操作及其他日志服务等与API Server都有耦合的渠道产生日志,这些渠道的各种日志都会统一的进行监控数据的采集,并且生成平台审计的Dashboard。如下图,时间和操作都可以在Dashboard上查看到。
image.png

集群运维-利用NPD增强node错误检测

image.png
针对生产集群需要配置的NPD,是作为一个工具使用。节点问题自动化的检测及告警的过程核心是实现挖取API及node节点上的Event,查看Event是否报出。在原生的BPD的社区能力上做出一些增强,包括检测节点进程号PID是否被耗尽以及文件句柄FD 是否被耗尽。

集群运维-密切监控线程/进程和文件句柄泄漏

image.png
通过提前获知节点是否ready,知道这些节点的问题,为什么会引起节点的not ready,还是由于业务负载太高或者是运行的容器进程泄露,考虑这些问题,对整个安全区管理和掌控的整个集群的稳定性会是很好地帮助。

集群运维-K8S Event信息归档以及告警

image.png

集群默认Event保留1小时后被轮转,给查问题带来不便。建议配置eventer统一采集到SLS存储。

集群运维-查错的经典步骤

  • ECS 互通是否有异常
  • 安全组是否配置有误
  • 使用子账户,授权是否正确
  • Docker run 的方式运行,是否能正常提供服务
  • 在K8S 里通过一个POD 去访问目标的POD 是否正常
  • 通过service 方式访问是否正常
  • 通过SLB/Ingress 方式访问是否正常
  • Kubectl get event 是否有异常
  • Api server/schedule/controller 日志是否有异常
  • Docker daemon日志是否有异常

集群运维-节点NotReady查错

  • 是否被Cordon ?节点状态是”Ready, SchedulingDisabled”
  • 是否被链接不上API Server(kubelet 日志),API Server 私网SLB 是否存在?
  • PID 满?
  • 是否机器时钟没有同步?NTP 没有启动?
  • Docker Daemon, Kubelet 是否启动以及状态正常?
  • 是否磁盘满?磁盘IO 是否正常?(df –h) )
  • 安全组是否一致,是否连接不上API Server
  • Fail/completed 的容器数量过多docker ps -a | wc -l # n > 5000

集群运维-Kubelet/Docker挂死的应急恢复处理
有两种处理方法:
1.恢复办法:重启systemctl daemon-reexec重启systemctl restart docker(可选视情况定)重启systemctl restart kubelet。
2.减缓办法:对于容器的liveness/readiness使用tcp/httpget的方式,避免高频率使用exec。

本文为第三部分和第四部分,点击这里,查看第一部分和第二部分。

扫描下方二维码,加入开发与运维钉钉交流群,查看更多精彩内容。
开发与运维技术群.jpg

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
23天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
15天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
13天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
47 1
|
24天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
69 4
|
30天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
82 7
|
24天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
58 3
|
25天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
29天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
59 6
|
15天前
|
Kubernetes 负载均衡 调度
Kubernetes集群管理与编排实践
Kubernetes集群管理与编排实践
下一篇
无影云桌面