rancher2.4平台导入的k8s集群无法监控etcd解决办法

今天搭建了一个新的k8s集群,然后通过rancher平台纳管。rancher平台是一个比较好用的web页面,里面可以一键安装监控配置告警等用起来还是比较方便的。但是其它数据都可以正常收到promethues里面,J N T Q 3 e k e唯独就没有etcd集群数据。使用grafana打开发现etcd的监控是空的。
本来想通过修改promethues的配置来收集etcd的监控数据,但是这个promethuesF x U . I是通过operator安装的。前面修改完后面C ] J就被8 b z $ .还原了。琢磨了很久发现rancher的这个可以通过ui界面选择自定义监控指标的方式来添加。从k8s的yaml文件的角度来看就是添加一个注释field.cattle.io/workloadMetri( H * ? U S G X )cs: '[{"path":"/metrics","port":2379,"schema":6 v A X ~ , u = ,"HTTP"}]'。但是etcd无法R a ~ @ ! Q添加注释让promethues来获取监控数据。
etcd中默7 F : a认是开启了监控的,通过客户端监听端口加上/metrics就能: ; [ 4 p V p获取到数据。这个协议是https的,不过需 r e g要使用SSL认证才能正常访问。既然是网页那就可以e E k z y d S使用nginx代理,整个思路是使用nginx代理etcd的这个监控页面。利用注释的方式让rancc - i Y ~her的promethues可以通过自定义监控方式获取到etcd的监控数据。
首先添加配置文件:
把证书数据u v I 9 Y j O通过配置文件保存到conT l |figmap中。
rancher2.4平台导入的k8s集群无法监控etcd解决办法
里面会有三个键分别是etcd.ca、etcd.crt、etcd.key,分别对应k8s的master主机上/w 7 q I O x h , &etc/kubernetes/pki/etcd/目录中的caf c ` ? E 3 x P.crt、healthcheck-client.crt、healthcheck-client.key三个文件的内容。
然后为每个deployment配置不同的nginx配置文件。
rancher2.4平台导入的k8s集群无法监控etcd解决办法
三个配置:
rancher2.4平台导入的k8s集群无法监控etcd解决办法
映射键的名字为nginx.conf内容如下:

user  rog V 7 f !ot;
worker_processes  auto;
worker_cp? * + 3 Fu_affinity auto;
worker_b w Q = % 6 9 : )rlimit_nofile 65535;
error_log  logs/error.A  (log  warn;
pid        logs/nJ H . 2 j 6ginx.pid;
events {
use epoll;
multi_accept on;
worker_connections  65535;
}
http {
include       mime.types;
def & # I Z H 3ault_type  application/octet-stream;
server_names_h& = h R J ) g Yash_bucket_size 128;
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
client_max_body_J ; I n 5 &size 600m;
client_body_buffer_size 2m;
#charset utf-8;
sendfile        on;
tcp_B T x c T , & ^nopush     on;
keepalive_7 C v Z L otimeou` ` ~ 4 Gt  60 50;
send_timeout 10s;
check_shm_size 6m;
tcp_nodelay on;
server_tokens off;
adS | X  @ Z d_header X-Frame-Options SAMEORIGIN;
gzip  on;
gzip_min_li [ J a 1 N 0 nength 1k;
gzip_buffers    4 16k;
gzip_http_version 1.1;
gzip_comp_lev; V W * %el 2;
gzip_types text/css;
gzip_vary on;
proxy_connect_timeout 6F 8 J b : @00;
proxy_read_timeout   600;
prw b @ 5 A E k eoxy_send_timeout   600;
proxy_buffer_size    512k;
proxy_bA C c V t hufferse 3 B } R b d : V       4| b L R b R 512k;
proxy_busy_buffers_size 512k;
pr2 M U 8 0 * q 5oxy_temp_file_wris [ C `te_size 1024k;
server {
listen 2379;
large_client_heade^ $ : 6 # wr_buffers 4 16k_ I q U C c ? o O;
client_max_body_size 300m;
client_body_buffer_size 512k;
proxy_connect_timeout 900s;
proxy_reY 9 4 m 3 l Q : Dad_timeout   900s;
proxy_send_timeout   900s;
proxy_buffer_size    128k;
proxy_buffer# j g qs       4N F Y @ 64k;
proxy_busy_buffers_size 128k;
proxy_temp_fiB r P e % Z ^le_write] d u_size 512k;
location / {
add_header Access-Control-Allow-Origin *;
proxK g Q m 9 ky_set_header X-Forwarded-For $proxy_add_x_forwarded_w  # T 5 s n tfU 5 ^ l c b Uor;
proxy_set_headerY F i n k F Host $http_host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_he% o [ H j [ader X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Port $seU W s D 3 # + @rver_port;
proxy_redirect off;
proxy_http_n r l z w Tversion 1.1;
proxy_ssl_certificaT A . Ate         /etc/etcd/etcd.crt;  #这个目录是上面的证书配置文件映射的位置
proxy_ssl_certificate_key     /etc/etcd/etcd.key;
proxy_ssl_trusted_certificate /etc/etcd/etcd.ca;
proxy_ssl_protocols           TL9 3 i { i x e KSv1 TLSv1.1 TLSv1.2;
proxy_ssl_ciphers             HIGH:!aNULL:!MD5;
proxy_ssl_verify       off;
proxy_ssl_verify_depth 2;
proxy_ssl_session_reuse on;
proxy_pass https://192.168.0.1:2379;  #这个是真实的etcd地址,三个节点三个地址,分别配置。
}
}
log_format json '{"@timestampP ) Z":"$time_iso8601",'
#  '"hk U v p S w _ (ost":"$server_addr",'
'"clienA 7 W Q Ntip; J ) 5 o A c 5":"$remote_addr",'
'"size":$body_bytes_sent,'
#  '"con_- 0 T x U 0 L . 2length":"$co0 K qntent_length",'
#  '"cookie":"$Q u 0 D J Q ]http_cookie",'
'"responsetime"? g z:$request_time,'
'"upstreamtime":"$upstream_response_time",'
's 6 W p "upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri"u : Q J # I,'
'"xff":"$hh p g N I o 4 Fttp_x_fo} = # `rwarded_for",'
'"referer G b $ b 0 _ h %":"$http_referer",'
'"ageB H *nt":"$http_userc Z 2 _agent",'
'"status":"$status"}';
access_W ] 9 5 c $ ^ M plog  logs/ack F Scess.log  js r v ! lon;
}

然后部署三个deployment:

APIVersion: apps/v1
kind: Deployment
metadata:
name: etcd-master01
namespace: cattle-prometheus
spec:
selector:
mat? E , Y 5 / t YchLabels:
app: etcd-metrics01
template:
metada[ F R ) s ^ B [ta:
annotations:
field.cattle.io/workloadMetrics: '[{"path":"/metrics","port":2379,"schema":"HTTP"}]'
labels:
app: etcd-metrics01
spec:
containers:
- image: images.example.com/images:nginx  #替换成自[ W E己的nginx镜像,或者公共nginx镜像
imagePullPo! u a 5 w T K T Qlicy: IfNotPresent
livenessProbe:
faa ( 5 y : i JilureThreshold: 3
httpGet:
patA c % O N p A P Qh: /metrics
port: 2379
scheme: HTTP
initialDelaySex @ I A j {conds: 10
periodSeconds: 2
successThreZ & p S } F osholV J L 2 F * Md: 1
tiB I J ` YmeoutSeconds: 2
name: etcd-master01
readin9 3 6 8 X |essProbe:
faiz y ) 7  H N 9 blureThreshold: 3
httpGet:
path: /metrics
port: 2379
scheme: HTTP
iniA ] 7 ( D & OtialDelayb ) | hSeconds: 10
periodSeconds: 2
successThr1 V @ ! $ Neshold: 2
timeoutSeconds: 2
volumT t [ 7 & SeMounts:
- mountPath: /etc/etcd/ #挂载的证书目录,需要和nginx配置中一样
name: etcd-ssl
readc | ( L 9Only: true
- moum g ^ 0 x x C tntPath: /usr/local/nginx/conf/nginx.conf  #nginx配置目录,需要和镜像中nginx的一直。比如y9 @ x p F K 3 sum安装就是在/etc/b L h ^ Snginx/nginx.conf中。
name: nginx
subPath: nginx.conf
imagePullSecrets:
- name: docker
volumes:
- conf) H ; rigMap:
defaultMode: 256
name: etcd-ssl
opt9 -  A #ional: false
name: etcd-ss6  b e i { A Dl
- configMap:
defaultMode: 252 [ 8 # /6
name: nginx-etcd01
optional: false
name: ng/ r Q 1 ^ . Uinx

pod启动好以后等几分钟再打开grafana就会H @ 0 ` H发现全部有数据了。
ingress配置
rancher2.4平台导入的k8s集群无法监控etcd解决办法
prometheus数据
rancher2.4平台导入的k8s集群无法监控etcd解决办法
grafaq - x Xna展示:
rancher2.4平台导入的k8s集群无法监控etcd解决办法
这里需要注意的是使用不同的nginx镜像,配置的目录可能会不一样。请注意配置文件的位置,修改成对应的目录。