一、 概述
京东智联云云监控支持监控Kubernetes集群的业务监控数据,本教程提供了示例代码的git地址,方便您学习如何将代码编译为镜像,并通过kubernetes集群进行部署和访问,同时通过自定义监控查看业务监控数据和配置告警规则。
操作流程
本指南的操作流程分为如下三个步骤:
使用的云服务
本指南涉及到的云产品服务及用途如下:
序号 | 云产品 | 功能及用途 | 备注 |
1 | 容器镜像仓库 | 用于存放示例demo镜像 | |
2 | 云编译 | 编译和打包实例demo代码,同时将镜像推送至容器镜像仓库 | |
3 | 私有网络 | 创建用于Kubernetes集群,工作节点所需的VPC | |
4 | Access Key | 授权K8S集群访问京东智联云各个服务API的授权凭证。 | 例如:集群向京东智联云监控中心,推送业务监控数据就需要用到AK/SK。 |
5 | Kubernetes集群 | 创建K8S集群,部署应用服务 | 规格:通用型1核4GB,公网IP 5Mpbs |
6 | 云监控 | 查询业务监控数据,配置告警服务。 |
二、 操作指南
第一步:准备Docker镜像
创建容器镜像仓库
新建注册表
1. 登录京东智联云控制台,选择云服务->弹性计算->容器镜像仓库。
2. 进入注册表页面,选择“华北-北京”地域,点击“新建”按钮,进入新建注册表页面。
3. 在新建注册表页面,设置名称,勾选同意服务条款。点击“保存”按钮即可。
注: 名称可以自定义,但请保证京东智联云全局唯一。
新建镜像仓库
1. 切换至“镜像仓库”列表页面,选择地域“华北-北京”,点击“创建”按钮。
2. 在新建镜像仓库页面, 选择刚新建的注册表,配置注册表名称信息
3. 创建成功后,在镜像仓库里列表可以看到到仓库名称。以及镜像仓库的URI
编译构建Docker镜像
新建编译任务
1. 选择云服务->开发者工具->云编译,进入云编译服务页面。
2. 在任务列表页面,选择华北-北京地域, 点击“创建”按钮,选择中“创建任务”。
3. 在创建任务页面做如下配置:
【任务配置】
a. 任务名称,可以自定义,例如:k8s-monitor-ci
b. 镜像来源,选中官方。
c. 编译镜像选择 pyinstaller/v3.4-python3.7
【源码配置】
a. 代码源:请选择其他Git仓库
b. 代码库,请将https://code.jdcloud.com/jdcloud-monitor/prometheus-demo.git 粘贴进去。
【构建存放】
a. 是否归档,选中“是”。
b. 构建类型,请选择“镜像”
c. 镜像仓库,请选择第一步创建的镜像仓库URI。
4. 点击“保存”按钮,完成任务的创建。
构建任务
1. 选中刚创建的任务,点击操作了下的执行构建按钮。
2. 在弹出的构建页面,配置如下信息
a. 构建方式,选择“CommitID”
b. CommitID,将ece523fc68cce1cd3d48b38fc07252f81ba2c44c 粘贴填入。
3. 点击“确定”按钮,执行编译构建操作。当产物归档状态变为完成状态时,完成构建。
第二步:用K8S部署应用服务
前提准备
创建kubernetes进群时,需要用到VPC 和 密钥信息, 只需创建VPC即可,无需创建子网,工作节点组用到的子网会自己创建。
创建VPC
1. 选择云服务->网络->私有网络,进入私有网络VPC列表页面。
2. 在私有网络页面,选中华北-北京地域,点击“创建”按钮。
3. 配置网络名称,IPv4CIRD选择 192.168.0.0/16。
4. 点击“确定”按钮,完成私有网络创建。
创建AK/SK密钥(已有密钥,则可跳过该步骤)
1. 点击顶部导航的账户名称,在弹出的下拉框中点击“Access Key管理”
2. 在进入的Access Key管理页面中,点击“创建Access Key”
3. 再弹出的页面,点击“获取验证码”
4. 将你手机短信获取到的验证码信息,填入后点击“确定”按钮后,完成创建。
创建Kubernetes集群
1. 选择云服务->弹性计算-> Kubernetes集群,进入集群列表页面。
2. 选择“华北-北京”地域,点击“创建”按钮
3. 在新建Kubernetes集群,进行如下配置:
【集群信息】
a. 地域:请确认选中“华北-北京”
b. 可用区:使用默认选中的可用区。
c. 名称,设置集群的名称,例如:monitor-demo
d. 集群版本,默认值即可。
e. 管理的CIRD,使用默认设置。
f. Access Key,选择已创建的Access Key。
g. 集群监控,请确保已打开。 开启此选项后,K8S将采集业务监控数据。
【新建工作节点信息】
a. 私有网络:请选择刚新建的私有网络,例如:K8S-Monitor-vpc-01。
b. 工作节点CIDR,使用默认值。
注:1)该选项会新建一个子网段,若选择非刚新建的空VPC,请确保所配置CIDR与已创建的子网地址无重复和重叠情况;
2)工作节点的CIDR与集群管理的CIDR 也不允许重复和重叠,若您进行了更改,则需要规避以上情况。
c. 操作系统,使用默认值centos
d. 工作组可用区,使用默认值。
注:若保存时提示可用区资源售罄sold out 信息,可去掉某些可用区进行尝试。
e. 规格:选择“通用型”、g.n2.medium(1核4GB,通用 标准型)
f. 系统盘:选择“容量型HDD云盘”、大小设置为40GB
g. 工作节点数量:选择默认值,1个。
h. 名称:配置节点组的名称,例如:monitor-nodegroup1
i. 点击“展开高级配置”,高级配置中设置登录密码信息。此处登录密码为K8S创建的云主机,其对应的密码。
4. 选中kubernetes集群服务条款,点击“确定”按钮,完成集群创建。注:若提示规格或者系统盘售罄时,可更改可用区,进行尝试。)
部署服务
注册镜像仓库
注:本操作是将容器镜像仓库的注册表在K8S服务中进行注册,便于后续pod上部署应用服务。
1. 选择云服务->弹性计算-> 云主机,进入云主机列表页面。在云主机列表可以看到新创建了2台云主机实例。
2. 找到k8s-***-nat-vm-***命名的云主机,其为K8S集群的管理节点云主机, 可以公网SSH远程登录进去。(建议使用SSH远程登录工具xshell)
注: 若忘记了密码,可通过更多操作下的“重置密码”操作重新设置密码。
3. 管理节点登录成功后,ssh 登录至 k8s-node-*** 节点的云主机(命令: ssh root@your_node_ip, 需要将 your_node_ip 替换为你的node云主机的内网ip。点击回车后输入密码即可 )。
4. 获取集群凭据, 选择云服务->弹性计算-> Kubernetes集群, 进入集群列表页面。选中刚创建的集群信息,点击名称,进入详情页面。切换至kubectl客户端配置页。
5. 配置kubectl客户端
执行如下命令
mkdir -p $HOME/.kube
cd $HOME/.kube
vi config
将kubectl客户端配置的凭据,拷贝至config中,保存后退出。
保存后,退出。:wq
执行 sudo chown $(id -u):$(id -g) $HOME/.kube/config 命令。
6. 执行以下操作命名,注册镜像仓库。
注意:将以下黑色加粗信息替换为自己镜像仓库中注册表的相关信息(kubectl 在node节点云主机上已默认安装)。
kubectl create secret -n default docker-registry my-secret --docker-server=k8s-monitor-demo-cn-north-1.jcr.service.jdcloud.com --docker-username=jdcloud --docker-password=byfOdCDEcpoS4lph --docker-email=XXX@jd.com
a. docker-registry:为您定义的secret名称,示例使用my-secret。记住次名称,后续部署拉取镜像时需要指定该名称。
b. Docker-server:请填写你镜像仓库的注册表URI
c. docker-password:使用docker客户端登录命令中 –p 后的内容(通过获取临时令牌进行获取。)
d. docker-email:输入你自己的邮箱信息即可
创建Pod
1. 在kubernetes集群页面,菜单切换至Workloads->Pod,进入Pod列表页面。
2. 选中“华北-北京地域”,点击“创建”按钮。进入创建Pod页面。配置如下信息
a. 集群:请确认刚创建的集群,例如:monitor-demo
b. Yaml 文件:将如下内容拷贝至黑色输入框,注意黄色标注内容。
apiVersion: v1
kind: Pod
metadata:
name: prometheus-demo
labels:
app: prometheus-demo
spec:
imagePullSecrets:
- name: my-secret
containers:
- name: flaskapp-demo
image: jcloud-monitor-cn-north-1.jcr.service.jdcloud.com/prometheus-demo:job-78a6Lnbp2nL35xw-1584449329
ports:
- containerPort: 5000
- containerPort: 7777
注:
1)name:为您注册镜像仓库创建的secret名称,示例用的my-secret。(可查看上一步骤)
2)image 标注为黄色的内容包含2个部分,URI:镜像版本,请一定要替换为自己镜像仓库的内容。可通过如下截图位置获取。
3. 点击“确定”按钮,完成创建。可以看到创建的pod,进入pod详情,切换至Container可以查看其运行状态,等待3分钟左右,其状态变为运行,服务部署成功。
注:若为其他状态,请检查以上步骤,相关配置是否有问题。
配置访问策略
创建Service
注:基于K8S部署的应用服务,若需要外网访问,则需要创建一个负载均衡,同时绑定公网IP,以下步骤就是通过创建Service为服务配置一个负载均衡。
1. 切换至service列表页面,选择“华北-北京”,点击“创建”按钮。
2. 进入创建Service页面
a. 集群:确认选中的集群。
b. Yaml:将如下信息拷贝至输入框中。
kind: Service
apiVersion: v1
metadata:
name: prometheus-demo
annotations:
prometheus.io/path: /metrics
prometheus.io/port: '7777'
prometheus.io/scrape: 'true'
spec:
ports:
- protocol: TCP
port: 5000
targetPort: 5000
selector:
app: prometheus-demo
type: LoadBalancer
3. 点击“确定”按钮,完成service创建。点击名称,进入详情页面,可查看到pod状态为running。
4. 点击顶部导航云服务->网络->负载均衡,进入应用负载均衡页面。可以看到刚新建的的LoadBalancer。
访问服务
1. 在新建的负载均衡服务页面,获取到公网IP, 在浏览器端输入http://公网IP:5000,可看到如下界面。
2. 浏览器中输入 http://公网IP:5000/hello/XXX ,则页面展示hello: XXX, 如下图所示:
第三步:业务监控告警
查看监控图
1. 选择云服务->监控与运维-> 云监控,进入云监控控制台。
2. 在左侧菜单选中“自定义监控”,进入自定义监控页面。
注:待服务部署成功后等待约5分钟云监控会查询到相关数据。
3. 输入以下查询条件,可以看到Demo示例内置采集的一些业务数据。查询条件如下:
a. 地域:选择华北-北京
b. 命名空间:选择kubernetes集群(系统)
c. 监控指标:选择 requests_total (指标较多,下拉可以搜索框搜索找到该指标) 注:该指标为示例代码中定义收集的业务指标。
d. 聚合方式:选择sum
e. 维度信息中, cluster_id请选择kubernetes集群的ID。
4. 若指定维度中,name 对应下拉框中,选择对应值。可看到对应名称各自访问。
配置告警
1. 在上述查看的的监控图中,点击“配置报警”按钮
2. 进入设置告警页面,进行如下配置:
【基本信息】
a. 报警规则名称:可以自定义,例如:访问10次就告警
b. 地域、命名空间、监控指标和聚合方式,默认监控图查询配置带过来的信息。
c. 监控维度: 指定cluster_id 为我们创建的kubernetes集群的ID;name 选择全部,同时选中聚合。
【触发条件】
统计周期选择 5分钟,统计方式选择 总和, 操作符选择 >,阈值中输入10, 选中持续1个周期。(其含义为: request_toal 求和>10,统计周期5分钟,持续1个这样的周期就报警)
【通知策略】
通知周期、有效时段、通知条件、接收渠道为默认值。配置需要通知的联系人。
3. 完成以上配置,点击“完成创建”按钮。在列表中可看到该规则信息。
注:当http://公网IP:5000/hello/XXX 达到设置的阈值时,会通过短信和邮件进行通知。
思考题:
1. Kubernetes集群开启业务监控监控数据,在创建集群和创建Service时,要做哪些配置和操作?
2. 在自定义监控查询监控图时, 某维度选择了多个值,选中和取消选中“聚合”选项, 分别代表什么含义?
3. 在配置监控告警时,如下截图的A配置和B配置,其含义都表示:request_total指标,指定clusterid,其他维度和维度值都按照sum方式聚合,在5分钟内的平均值大于10,持续1个这样的周期,就报警。是否正确?
4. 在配置监控告警时,如果要配置,request_total指标,指定clusterid,name中任意一个维度值,在5分钟内的求和值大于10,持续1个这样的周期,就报警。 在上题截图中A配置,我需要做哪些调整?
三、 结束
恭喜完成所有任务!
请根据个人兴趣继续探索思考题。
完毕后请及时释放不再继续使用的资源。
谢谢!