启用k8smetricsserver监控(代码片段)

edenlong edenlong     2022-11-30     436

关键词:

1、创建aggregator证书

方法一:直接使用二进制源码包安装

$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
$ chmod +x cfssl_linux-amd64
$ mv cfssl_linux-amd64 /usr/local/bin/cfssl

$ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
$ chmod +x cfssljson_linux-amd64
$ mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

$ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
$ chmod +x cfssl-certinfo_linux-amd64
$ mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

$ export PATH=/usr/local/bin:$PATH

方式二:使用go命令安装

$ go get -u github.com/cloudflare/cfssl/cmd/...
$ls $GOPATH/bin/cfssl*
cfssl cfssl-bundle cfssl-certinfo cfssljson cfssl-newkey cfssl-scan

2、创建 CA (Certificate Authority)

创建 CA 配置文件

$ mkdir /root/ssl
$ cd /root/ssl
$ cfssl print-defaults config > config.json
$ cfssl print-defaults csr > csr.json
# 根据config.json文件的格式创建如下的ca-config.json文件
# 过期时间设置成了 87600h
$ cat > aggregator-ca-config.json <<EOF

  "signing": 
    "default": 
      "expiry": "87600h"
    ,
    "profiles": 
      "aggregator": 
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      
    
  

EOF

字段说明:

  • profiles : 可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile。
  • signing :表示该证书可用于签名其它证书;生成的 aggregator-ca.pem 证书中 CA=TRUE
  • server auth :表示 Client 可以用该 CA 对 Server 提供的证书进行验证。
  • client auth :表示 Server 可以用该 CA 对 Client 提供的证书进行验证。

创建 CA 证书签名请求

创建 aggregator-ca-csr.json 文件,内容如下:

  "CN": "aggregator",
  "key": 
    "algo": "rsa",
    "size": 2048
  ,
  "names": [
    
      "C": "CN",
      "ST": "Shanghai",
      "L": "Shanghai",
      "O": "k8s",
      "OU": "System"
    
  ],
    "ca": 
       "expiry": "87600h"
    

字段说明:

  • “CN” :Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法。
  • “O” :Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);

生成 CA 证书和私钥

$ cfssl gencert -initca aggregator-ca-csr.json | cfssljson -bare aggregator-ca
$ ls aggregator-ca*
aggregator-ca-config.json  aggregator-ca.csr  aggregator-ca-csr.json  aggregator-ca-key.pem 

3、创建 kubernetes 证书

创建 aggregator 证书签名请求文件 aggregator-csr.json :

    "CN": "aggregator",
    "hosts": [
      "127.0.0.1",
      "192.168.123.250",
      "192.168.123.248",
      "192.168.123.249",
      "10.254.0.1",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": 
        "algo": "rsa",
        "size": 2048
    ,
    "names": [
        
            "C": "CN",
            "ST": "Shanghai",
            "L": "Shanghai",
            "O": "k8s",
            "OU": "System"
        
    ]

  • 如果 hosts 字段不为空则需要指定授权使用该证书的 IP 或域名列表,由于该证书后续被 etcd 集群和 kubernetes master 集群使用,所以上面分别指定了 etcd 集群、kubernetes master 集群的主机 IP 和 kubernetes 服务的服务 IP(一般是 kube-apiserver 指定的 service-cluster-ip-range 网段的第一个 IP,如 10.254.0.1)。
  • 以上物理节点的 IP 也可以更换为主机名。

生成 aggregator 证书和私钥

$ cfssl gencert -ca=aggregator-ca.pem -ca-key=aggregator-ca-key.pem -config=aggregator-ca-config.json -profile=aggregator aggregator-csr.json | cfssljson -bare aggregator
$ ls aggregator*
aggregator.csr  aggregator-csr.json  aggregator-key.pem  aggregator.pem

4、分发证书

将生成的证书和秘钥文件(后缀名为.pem)拷贝到 Master 节点的 /etc/kubernetes/ssl 目录下备用。

cp *.pem /etc/kubernetes/ssl

5、开启聚合层 API

kube-apiserver 增加以下配置:

--requestheader-client-ca-file=/etc/kubernetes/ssl/aggregator-ca.pem
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=/etc/kubernetes/ssl/aggregator.pem
--proxy-client-key-file=/etc/kubernetes/ssl/aggregator-key.pem

 注意:前面创建的证书的 CN 字段的值必须和参数 --requestheader-allowed-names 指定的值 aggregator 相同。

重启 kube-apiserver:

$ systemctl daemon-reload
$ systemctl restart kube-apiserver

  如果 kube-proxy 没有在 Master 上面运行,kube-proxy 还需要添加配置:

--enable-aggregator-routing=true

6、部署metrics server

git clone https://github.com/kubernetes-incubator/metrics-server
$ cd metrics-server
$ cat deploy/1.8+/metrics-server-deployment.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-server
namespace: kube-system
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
labels:
k8s-app: metrics-server
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
serviceAccountName: metrics-server
volumes:
# mount in tmp so we can safely use from-scratch images and/or read-only containers
- name: tmp-dir
emptyDir: 
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.2
command:
- /metrics-server
- --kubelet-preferred-address-types=InternalIP
- --kubelet-insecure-tls
imagePullPolicy: IfNotPresent
volumeMounts:
- name: tmp-dir
mountPath: /tmp

$ kubectl create -f deploy/1.8+/

  注意:这里我修改了metrics-server的启动命令,增加了--kubelet-preferred-address-types=InternalIP和--kubelet-insecure-tls参数,否则metrics server可能会从kubelet拿不到监控数据。具体报错可以通过kubectl log metrics-server-5687578d67-tx8m4 -n kube-system命令查看

7、验证metrics server

[[email protected] 1.8+]# kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
[[email protected] 1.8+]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-10-21-17-41 136m 13% 2131Mi 93%
k8s-10-21-17-42 167m 2% 8904Mi 28%
k8s-10-21-17-43 978m 13% 17733Mi 57%
k8s-10-21-17-56 707m 17% 16621Mi 51%
k8s-10-21-17-57 320m 8% 12478Mi 38%
k8s-10-21-17-58 442m 11% 13087Mi 40%
k8s-10-21-17-59 242m 8% 13838Mi 45%

[[email protected] 1.8+]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
eager-alpaca-zookeeper-0 6m 780Mi
eager-alpaca-zookeeper-1 5m 755Mi
eager-alpaca-zookeeper-2 7m 793Mi
filled-scorpion-minio-96595c48-bfwrd 1m 10Mi
filled-scorpion-redis-master-0 5m 28Mi
filled-scorpion-spinnake-halyard-0 1m 1365Mi
idolized-wallaby-nfs-client-provisioner-5dbcfc8c9-8kpwk 2m 11Mi
jaundiced-possum-gitlab-runner-64dcdccc4c-k5927 4m 7Mi
nginx-deployment-586f5f95f7-dvmw7 0m 1Mi
nginx-deployment-586f5f95f7-hpw5n 0m 2Mi
prometheus-operator-6c8d8456cd-ccfwx 2m 24Mi
prometheus-sample-metrics-prom-0 1m 30Mi
sample-metrics-app-5f67fcbc57-9ghxt 1m 9Mi
sample-metrics-app-5f67fcbc57-t9pzn 1m 9Mi

  

alwayson的一些初步监控(代码片段)

...监控,是通过存储过程的方法,做个笔记如下:--alwayson启用状态declare@isenabledsql_variantSELECT@isenabled=SERVERPROPERTY(‘IsHadrEnabled‘)if@isenabled=1beginprint‘isenabled(alwayson启用状态)‘end---------监控集群的状态i 查看详情

text在所有驱动器上启用smart。在所有驱动器上启动短测试。对所有驱动器进行监控测试。(代码片段)

查看详情

使用azuremonitor监控服务运行状态(代码片段)

...的监视,但是该概念对于Linux守护程序的工作原理相同。启用变更跟踪若使用GUI的话,我们有两种方式可以启用变更跟踪:从LogAnalytics工作区启用在loganalytics中点击“workspacesummary”--“+Add”--“ChangeTracking”:点击“ChangeTracking”... 查看详情

haproxy状态监控页笔记(代码片段)

基本参数 •statsenable#基于默认的参数启用statspage•statshide-version#隐藏版本•statsrefresh<delay>#设定自动刷新时间间隔•statsuri<prefix>#自定义statspageuri,默认值:/haproxy?stats•statsrealm<realm>#账户认证时的提 查看详情

nginx总结启用nginxstatus及状态参数详解(代码片段)

...状态非常简单,它内建了一个状态页,只需修改Nginx配置启用Status即可,对于想了解nginx的状态以及监控nginx非常有帮助。 1.启用nginxstatus配置大概Nginx配置文件,在默认主机里面加上location或者你希望能访问到的主机里面加上... 查看详情

springbootdruid监控页未授权访问漏洞(代码片段)

...或添加用户名密码spring:datasource:druid:stat-view-servlet:#是否启用StatViewServlet(监控页面),默认 查看详情

gitlabrunner和流水线的数据采集与监控(代码片段)

...入式HTTP服务器,通过/metrics路径公开。该服务器(如果已启用)可以被Prometheus监视系统抓取,或通过任何其他HTTP客户端进行访问。公开的信息包括:Runner业务逻辑指标(例如,当前 查看详情

用树莓派制作动作监控摄像系统(代码片段)

目录这里我用的是CSI接口的摄像头1.启用CSI摄像头 ①摄像头提前安装好②sudoraspi-config进行如下配置InterFacingOptions->Camera->Enable2.测试raspistill-v-otest.jpg用raspistill这个指令可以抓拍一张图片-v选项表示在运行摄像头时输出详细信... 查看详情

zabbix(代码片段)

...器的IP或域名Hostname指定本机的主机名UnsafeUserParameters是否启用自定义监控项,可选值为1,0UserParameter指定自定义监控脚本参数LogFile设置客户端日志文件存放路径‘环 查看详情

springboot监控-springbootadmin(代码片段)

...min-server模块②导入依赖坐标admin-starter-server③在引导类上启用监控功能@EnableAdminServeradmin-client:①创建admin-client模块②导入依赖坐标admin-star 查看详情

监控软件monit使用(代码片段)

...Date:$DATEAction:$ACTIONHost:XXXServerDescription:$DESCRIPTIONMonitorSystem启用httpEnablehttpd:sethttpdport2812 查看详情

zabbix监控记录(代码片段)

...,配置如下:CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote#启用远程监控JMX-Dcom.sun.management.jmxremote.port=12345#默认启动的JMX端口号,要和zabbix添加主机的端口一致-Dcom.sun.management.jmxremote.authenticate=false#不使用用户名密码认证-Dcom.sun.manage... 查看详情

索引无效原因(代码片段)

...被使用到,那么新的问题来了,怎么知道指定索引是否被启用。判断索引是否被执行1.分析索引即将索引至于监控状态下,对索引进行分析。如下对ID_TT_SHOHOU_HIST_002索引进行分析alterindexID_TT_SHOHOU_HIST_002monitoringusage;2.查看v$object_usa... 查看详情

zabbix模板化监控(代码片段)

...入参数,来对nginx的状态进行监控。3.实验步骤1.环境准备启用本地环境中的nginx服务器,然后通过curl方式,获取nginx的状态, 查看详情

k8smetricsserver获取资源指标与hpa部署

使用helm部署MetricsServerhelmrepoaddbitnamihttps://charts.bitnami.com/bitnamihelminstallbitnami/metrics-server会有报错,执行以下命令helmupgradeloopy-saolabitnami/metrics-server--setapiService.create=true$kubectlgetpod查看节点loopy-saola-metrics-server-58796b4bc7-4mv4t1/1Running016... 查看详情

grafana监控oracledb的完整过程(代码片段)

...tail=100containername的方式进行查看具体内容.注意事项-2正常启用之后发现还是无法进行相关的监控信息.主要是无法获取一些系统的监控信息.日志里面很多这样的提示信息:msg="Errorscrapingfor" 查看详情

基于arduino的esp32学习笔记基于aida64的电脑性能监控(代码片段)

...+PlatformIOAIDA64AIDA64使用安装AIDA64软件打开文件-设置-LCD-启用Remote-Sensor支持选择LCD项目添加几个PC性能参数ÿ 查看详情

基于arduino的esp32学习笔记基于aida64的电脑性能监控(代码片段)

...+PlatformIOAIDA64AIDA64使用安装AIDA64软件打开文件-设置-LCD-启用Remote-Sensor支持选择LCD项目添加几个PC性能参数ÿ 查看详情