阿里云容器Kubernetes监控(三) - 与云监控的集成与使用

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 简介 监控是运维Kubernetes中非常重要的一环,在kubernetes的生态内,有非常多可选的方案,场景的方案包括内置的Heapster、CNCF的亲儿子Prometheus、Influxdb的采集方案Telegraf等等,当然传统的监控运维工具例如zabbix也对容器的场景进行了适配。

简介

监控是运维Kubernetes中非常重要的一环,在kubernetes的生态内,有非常多可选的方案,常见的方案包括Kubernetes内置的Heapster、CNCF的亲儿子Prometheus、Influxdb的采集方案Telegraf等等,当然传统的监控运维工具例如zabbix也对容器的场景进行了适配。这些方案的实现方式各有不同,有的是采用agent的推模式推送数据,有的是通过集中式的拉模式来采集数据,那么究竟该怎么选择适合自己的监控方案呢?这个问题要从容器监控的难点开始讲起。

容器监控的难点

传统的监控方案,大部分是自顶向下的,配置一个监控的任务、采集端点,然后应用的生命周期与监控的任务生命周期是一致的,采集的目标是固定的。无论应用如何重启、变化,对于采集任务而言只要采集端点没有变化,那么任何的变化都是生命周期中的正常现象。

但是容器的场景则有所不同,大部分容器是被调度器进行调度的,也就是说是在一个资源池中随机调度的,监控系统通常无法感知采集端点的具体位置。因此大部分的监控采用的是自底向上的聚合方式,这种方式的原理就是:通过给容器打标,将一些原本在配置任务时候设定的信息,通过label打标到容器上。然后在聚合的时候从容器的信息,反向聚合出应用的监控。
但是自底向上的聚合方式有一个严重的缺陷,从生命周期上来看,因为监控的生命周期是来自监控数据的,因此一旦监控数据缺失,就会导致上层的监控生命周期收到影响,也就是说无法判断此时应用的生命周期状态。为了解决这个问题,大部分的采集系统会通过额外的label来实现,但是每一个metric都会打上这样的Label使得监控的数据会有大量的冗余信息。

阿里云容器服务Kubernetes与云监控集成

与云监控的集成是通过应用分组进行实现的,与传统的Pod监控不同,阿里云容器服务Kubernetes支持Kubernetes的逻辑概念的监控,例如Deployment、DaemonSet、StatefulSet的监控。对于1.10.4的版本的集群,默认在创建的时候就安装完毕。

所有的部署都会自动创建应用分组,可以通过控制台的部署页面找到对应的部署监控入口。

%E7%B2%98%E8%B4%B4%E5%9B%BE%E7%89%87.png

更多类型的workloads监控可以通过k8s原生的Dashboard进入。

lALPBY0V44Pj9qbNAzfNBTk_1337_823.png_620

点击 监控 可以进入到对应的监控分组中。

lALPBY0V44PhvG3NAzfNBTk_1337_823.png_620

在本例中是一个Deployment,并且此Deployment下包含一个Pod,监控包含两个维度,一个是分组维度,一个是实例维度。

lALPBY0V44Pit7jNAzfNBTk_1337_823.png_620

分组会聚合当前所有实例的指标,假如当前Deployment下有多个Pod,那么此时分组的数据指标就是聚合多个Pod的监控指标。

lALPBY0V44PiuIrNAzfNBTk_1337_823.png_620

如果需要查看特定的Pod的监控,可以分组实例来去查看,选择Pod名称,点击确认即可。

lALPBY0V44PiuujNAzfNBTk_1337_823.png_620
您也可以给当前的监控分组设置报警规则,实现应用的告警。

老集群升级

阿里云容器服务Kubernetes目前已完成与云监控的集成,目前1.10.4版本的集群已经默认支持,老集群可以通过如下的方式进行升级。

根据自己的集群替换REGION与CLUSTER_ID,并重新部署Heapster的yaml

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      serviceAccount: admin
      containers:
      - name: heapster
        image: registry.##REGION##.aliyuncs.com/acs/heapster-amd64:v1.5.1.1
        imagePullPolicy: IfNotPresent
        command:
        - /heapster
        - --source=kubernetes:https://kubernetes.default
        - --historical-source=influxdb:http://monitoring-influxdb:8086
        - --sink=influxdb:http://monitoring-influxdb:8086
        - --sink=socket:tcp://monitor.csk.##REGION##.aliyuncs.com:8093?clusterId=##CLUSTER_ID##&public=true

根据自己集群替换REGION与CLUSTER_ID,并部署alicloud-monitor-controller

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: alicloud-monitor-controller
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: alicloud-monitor-controller
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      hostNetwork: true
      tolerations:
      - effect: NoSchedule
        operator: Exists
        key: node-role.kubernetes.io/master
      - effect: NoSchedule
        operator: Exists
        key: node.cloudprovider.kubernetes.io/uninitialized
      serviceAccount: admin
      containers:
      - name: alicloud-monitor-controller
        image: registry.##REGION##.aliyuncs.com/acs/alicloud-monitor-controller:v1.0.0
        imagePullPolicy: IfNotPresent
        command:
        - /alicloud-monitor-controller
        - agent
        - --regionId=##REGION##
        - --clusterId=##CLUSTER_ID##
        - --logtostderr
        - --v=4

在kube-system命名空间中看到这两个Deployment已经运行中即升级完毕。对于不清楚自己REGION信息的开发者,可以通过如下的方式快速查询,打开ECS控制台,选择自己集群所在的地域,路由中最后一段即是REGION。
lALPBY0V44PzJ9vNAzfNBTk_1337_823.png_620

相关实践学习
基于云监控实现的监控系统
通过阿里云云监控功能给非阿里云主机安装监控插件,从而实现对非阿里云主机的各项指标进行监控和管理,在配置报警规则和报警人的情况下,能对特定的场景做出报警反应通知到报警人的手机上。
目录
相关文章
|
18天前
|
Kubernetes Docker 容器
容器运行时Containerd k8s
容器运行时Containerd k8s
23 2
|
23天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
11天前
|
Kubernetes Cloud Native 调度
深入探讨容器化技术:Kubernetes 的魅力
【10月更文挑战第6天】深入探讨容器化技术:Kubernetes 的魅力
27 0
|
13天前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。
|
14天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
57 0
|
20天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
|
JSON Kubernetes 前端开发
Kubernetes:让容器编排管理变得容易高效
在专栏《面向WEB开发人员的Docker》介绍了容器在开发过程中的使用,虽然整个专栏还未完成,想必现有的内容可以大概了解清楚容器的概念,能够做什么。
160 0
Kubernetes:让容器编排管理变得容易高效
|
Kubernetes Linux Docker
看Kubernetes 1.5之后如何称霸容器编排管理界
2016 年 12 月, Kubernetes 1.5 的发布,上述 Linux 和 Windows 一起运行的梦想终于得以实现。 微软宣布支持 Kubernetes Kubernetes 眼下已成为众多容器管理系统核心——比如 CoreOS 公司的商务平台 Tectonic。
1759 0
|
21天前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
90 17
|
13天前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
112 1

相关产品

  • 容器服务Kubernetes版