关键词:
概述
已经有了cadvisor、heapster、metric-server,几乎容器运行的所有指标都能拿到,但是下面这种情况却无能为力:
- 我调度了多少个replicas?现在可用的有几个?
- 多少个Pod是running/stopped/terminated状态?
- Pod重启了多少次?
- 我有多少job在运行中
而这些则是kube-state-metrics提供的内容,它基于client-go开发,轮询Kubernetes API,并将Kubernetes的结构化信息转换为metrics。
功能
kube-state-metrics提供的指标,按照阶段分为三种类别:
-
1.实验性质的:k8s api中alpha阶段的或者spec的字段。
-
2.稳定版本的:k8s中不向后兼容的主要版本的更新
-
3.被废弃的:已经不在维护的。
指标类别包括:
- CronJob Metrics
- DaemonSet Metrics
- Deployment Metrics
- Job Metrics
- LimitRange Metrics
- Node Metrics
- PersistentVolume Metrics
- PersistentVolumeClaim Metrics
- Pod Metrics
- Pod Disruption Budget Metrics
- ReplicaSet Metrics
- ReplicationController Metrics
- ResourceQuota Metrics
- Service Metrics
- StatefulSet Metrics
- Namespace Metrics
- Horizontal Pod Autoscaler Metrics
- Endpoint Metrics
- Secret Metrics
- ConfigMap Metrics
以pod为例:
- kube_pod_info
- kube_pod_owner
- kube_pod_status_phase
- kube_pod_status_ready
- kube_pod_status_scheduled
- kube_pod_container_status_waiting
- kube_pod_container_status_terminated_reason
- ...
---
apiVersion: rbac.authorization.k8s.io/v1
# kubernetes versions before 1.8.0 should use rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
namespace: kube-system
name: kube-state-metrics-resizer
rules:
- apiGroups: [""]
resources:
- pods
verbs: ["get"]
- apiGroups: ["apps"]
resources:
- deployments
resourceNames: ["kube-state-metrics"]
verbs: ["get", "update"]
- apiGroups: ["extensions"]
resources:
- deployments
resourceNames: ["kube-state-metrics"]
verbs: ["get", "update"]
---
apiVersion: rbac.authorization.k8s.io/v1
# kubernetes versions before 1.8.0 should use rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: kube-state-metrics
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kube-state-metrics-resizer
subjects:
- kind: ServiceAccount
name: kube-state-metrics
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
# kubernetes versions before 1.8.0 should use rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: kube-state-metrics
rules:
- apiGroups: [""]
resources:
- configmaps
- secrets
- nodes
- pods
- services
- resourcequotas
- replicationcontrollers
- limitranges
- persistentvolumeclaims
- persistentvolumes
- namespaces
- endpoints
verbs: ["list", "watch"]
- apiGroups: ["extensions"]
resources:
- daemonsets
- deployments
- replicasets
- ingresses
verbs: ["list", "watch"]
- apiGroups: ["apps"]
resources:
- daemonsets
- deployments
- replicasets
- statefulsets
verbs: ["list", "watch"]
- apiGroups: ["batch"]
resources:
- cronjobs
- jobs
verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]
resources:
- horizontalpodautoscalers
verbs: ["list", "watch"]
- apiGroups: ["policy"]
resources:
- poddisruptionbudgets
verbs: ["list", "watch"]
- apiGroups: ["certificates.k8s.io"]
resources:
- certificatesigningrequests
verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
# kubernetes versions before 1.8.0 should use rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kube-state-metrics
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kube-state-metrics
subjects:
- kind: ServiceAccount
name: kube-state-metrics
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kube-state-metrics
namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
name: kube-state-metrics
namespace: kube-system
labels:
k8s-app: kube-state-metrics
annotations:
prometheus.io/scrape: ‘true‘
spec:
ports:
- name: http-metrics
port: 8080
targetPort: http-metrics
protocol: TCP
- name: telemetry
port: 8081
targetPort: telemetry
protocol: TCP
selector:
k8s-app: kube-state-metrics
---
apiVersion: apps/v1
# Kubernetes version 1.8.x should use apps/v1beta2
# Kubernetes versions before 1.8.0 should use apps/v1beta1 or extensions/v1beta1
kind: Deployment
metadata:
name: kube-state-metrics
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: kube-state-metrics
replicas: 1
template:
metadata:
labels:
k8s-app: kube-state-metrics
spec:
serviceAccountName: kube-state-metrics
containers:
- name: kube-state-metrics
image: harbor.xxx.cn/3rd_part/kube-state-metrics:v1.6.0
ports:
- name: http-metrics
containerPort: 8080
- name: telemetry
containerPort: 8081
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 5
- name: addon-resizer
image: harbor.xxx.cn/3rd_part/addon-resizer:1.8.4
resources:
limits:
cpu: 150m
memory: 50Mi
requests:
cpu: 150m
memory: 50Mi
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
command:
- /pod_nanny
- --container=kube-state-metrics
- --cpu=100m
- --extra-cpu=1m
- --memory=100Mi
- --extra-memory=2Mi
- --threshold=5
- --deployment=kube-state-metrics
prometheus收集kube-state-metrics指标信息(代码片段)
安装kube-state-metrics下载$cd/opt/k8s/work/$wget-Okube-state-metrics.ziphttps://github.com/kubernetes/kube-state-metrics/archive/master.zip$unzipkube-state-metrics.tar.gz$cdkube-state-metrics-master/examples/standard$lscluster-role-binding.yamlcluster-role.yamldeployment.yamlservice-account.yaml... 查看详情
k8s安装之eventrouter.yaml(代码片段)
k8s的heapster项目中止以后,事件收集的项目,就推荐使用https://github.com/heptiolabs/eventrouter项目了EventrouterThisrepositorycontainsasimpleeventrouterforthe Kubernetes project.Theeventrouterservesasanactivewatcher 查看详情
1、二进制安装k8s之环境准备
参考技术A软件版本不同,操作也会有所不同,一定要注意版本1、uuid一样会导致k8s集群出问题,如果一样需要自行修改,你可以使用命令iplink或ifconfig-a来获取网络接口的MAC地址2、修改主机名3、关闭防火墙selinux和Swap4、修改hosts... 查看详情
k8s二进制部署之node安装docker(代码片段)
...。当然,如果公司允许连接互联网,可以同过yum安装,这种方式执行一条命令 查看详情
云原生之kubernetes实战在k8s集群下helm工具的安装与使用
【云原生之kubernetes实战】在k8s集群下helm工具的安装与使用一、helm工具介绍1.helm简介2.helm的基本特性3.helm的组件二、helm-V3特点1.Helm工作示意图2.helmV3新增特性3.helm与k8s对应支持的版本三、helm的二进制安装1.下载二进制包2.解压压... 查看详情
blazor+dapr+k8s微服务之基于wsl安装k8s集群并部署微服务
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行。当时用的k8s是Dockerfordesktop 自带的k8s,只要在Dockerfordesktop中启用就可以了。但是我发现,启用了k8s后,Dockerfordesktop会消耗大量的系统资... 查看详情
blazor+dapr+k8s微服务之服务调用
1.1 Dapr环境配置1.1.1 在开发机安装DockerDesktop并启用Kubernetes安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和K8s正在运行) 1.1.2 在开发机安装DaprCli安装命令:powershell-Command... 查看详情
k8s之dashboard部署(代码片段)
基于上篇文档安装主节点:安装kubenet-dashboard发现会报错kubectlapply-fhttp://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yamled/kubernetes-dashboard.yaml可以先下载这个dashboard.yamlw 查看详情
k8s入门系列之集群安装篇(代码片段)
...请阅读上一篇文章《k8s入门系列之介绍篇》Kubernetes集群安装部署•Kubernetes集群组件: -etcd一个高可用的K/V键值对存储和服务发现系统 -flannel实现夸主机的容器网络的通信 -kube-apiserver提供kubernetes集群的API调用 -kub... 查看详情
k8s之jenkins安装(代码片段)
一、Jenkins安装准备条件#在运维主机操作:1.准备镜像~]#dockerpulljenkins/jenkins:2.190.3~]#dockerimages|grepjenkins~]#dockertag22b8b9a84dbetest-harbor.cedarhd.com/public/jenkins:v2.190.3~]#dockerpushtest-harbor.cedarhd.com/public/jenkins:v2.190.32.自定义Dockerfile#官网拉取... 查看详情
云原生之kubernetes实战在k8s环境下部署homepage个人导航页
...查本地k8s环境1.检查工作节点状态2.检查系统pod状态三、安装docker-compose工具1.下载docker-compose二进制包2.给文件增加执行权限3.检查docker-compose版本四、安装kompose工具1.创建安装目录2.下载Kompose软件包3.给二进制文件 查看详情
云原生之kubernetes实战在k8s环境下部署wordpress应用服务
...检查本地集群状态1.检查工作节点状态2.检查k8s版本二、安装helm工具1.下载helm软件包2.解压压缩包3.复制二进制文件4.检查helm版本5.helm命令补全三、安装nfs服务器1.安装nfs软件2.创建共享目录3配置共享目录4 查看详情
云原生之kubernetes实战在k8s环境下部署kubegems云管理平台
...查本地k8s环境1.检查工作节点状态2.检查系统pod状态三、安装KubeGemsInstaller控制器1.KubeGemsInstaller介绍2.创建命名空间3.设置KubeGems版本的环境变量4.创建部署目录5.下载KubeGemsInstaller的安装文件6.安装KubeGemsInstaller7.检查KubeGemsInstaller的... 查看详情
k8s之配置校验---polaris(北极星)使用文档
...章目录K8s之配置校验---Polaris(北极星)使用文档简介Dashboard安装step1:镜像准备step2:yaml资源配置清单step3:创建服务暴露使用健康状况总览查看某个名称空间下的资源检查状况查看某一名称空间的某一资源的详细清单结果评估展示Webho... 查看详情
k8s之配置校验---polaris(北极星)使用文档
...章目录K8s之配置校验---Polaris(北极星)使用文档简介Dashboard安装step1:镜像准备step2:yaml资源配置清单step3:创建服务暴露使用健康状况总览查看某个名称空间下的资源检查状况查看某一名称空间的某一资源的详细清单结果评估展示Webho... 查看详情
k8s之dashboard安装(代码片段)
一、Dashboard安装#在运维主机上运行k8s-yaml]#dockerpullk8scn/kubernetes-dashboard-amd64:v1.8.3k8s-yaml]#dockerimages|grepdashboardk8s-yaml]#dockertagfcac9aa03fd6harbor.od.com/public/dashboard:v1.8.3k8s-yaml]#dockerpushtest-harbor.cedarhd.com/public/dashboard:v1.8.3k8s-yaml]#mkdirdashboard... 查看详情
k8s安装之master(代码片段)
配置和启动kube-apiserver创建kube-apiserver.service/usr/lib/systemd/system/kube-apiserver.service[Unit]Description=KubernetesAPIServiceDocumentation=https://github.com/GoogleCloudPlatform/kubernetesAfter=network.targetAfter=etcd.service[Service]EnvironmentFile=-/etc/kubernetes/configExecStart=... 查看详情
云原生之kubernetes实战在k8s下部署redis集群
...地k8s集群环境1.检查工作节点状态2.检查系统pod状态二、安装helm工具1.下载helm二进制包2.解压压缩包3.复制文件4.查看helm版本5.helm命令补全三、部署NFS服务1.安装nfs2.创建共享目录3.配置共享目录4.使配置生效5.重启nfs相关服务①设... 查看详情