Kubernetes(六)

第二十一章 prometheus

1.官网地址
https://github.com/prometheus/prometheus

2.监控k8s需要的组件
使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等
使用prometheus-operator部署prometheus,存储监控数据
使用kube-state-metrics收集k8s集群内资源对象数据
使用node_exporter收集集群中各节点的数据
使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
使用alertmanager实现监控报警
使用grafana实现数据可视化

metrics-server 主要关注的是资源度量 API 的实现,比如 CPU、文件描述符、内存、请求延时等指标。
kube-state-metrics 主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等


3.安装部署prometheus
###导入镜像
docker load < prom-prometheusv2_2_1.tar 

###创建命名空间
kubectl create namespace prom

###创建资源
cd prometheus
kubectl create -f ./ 

###检查资源
kubectl -n prom get all -o wide

web浏览器查看
http://10.0.0.11:30090/targets


4.安装部署metrics-server
###导入镜像
docker load < k8s-gcr-io-addon-resizer1_8_6.tar
docker load < k8s-gcr-io-metrics-server-amd64v0-3-6.tar

###创建资源
kubectl create -f ./

###检查
kubectl top node
kubectl top pod

5.安装node-exporterv
###导入镜像
docker load < prom-node-exporterv0_15_2.tar

###创建资源
kubectl create -f ./

###查看资源
kubectl -n prom get pod -o wide
kubectl -n prom get svc

###浏览器查看
http://10.0.0.12:9100/metrics
http://10.0.0.13:9100/metrics


5.安装kube-state-metrics
###导入镜像
docker load < gcr-io-google_containers-kube-state-metrics-amd64v1-3-1.tar

###创建资源
kubectl create -f ./

###查看
kubectl -n prom get pod
kubectl -n prom get svc
curl 10.1.232.109:8080/metrics

6.安装grafna和k8s-prometheus-adapter
###导入镜像
docker load <  directxman12-k8s-prometheus-adapter-amd64-latest.tar 
docker load <  k8s-gcr-io-heapster-grafana-amd64v5_0_4.tar

###修改grafana资源配置清单
  1 apiVersion: apps/v1
  2 kind: Deployment
  3 metadata:
  4   name: monitoring-grafana
  5   namespace: prom
  6 spec:
  7   selector:
  8     matchLabels:
  9       k8s-app: grafana
 10   replicas: 1
 11   template:

###创建资源
cd k8s-prometheus-adapter
kubectl create -f ./

###检查创建的资源
kubectl -n prom get pod -o wide
kubectl -n prom get svc

###浏览器查看
http://10.0.0.11:32725


###导入dashboard
https://grafana.com/grafana/dashboards/10000


x.prometheus查询语句
sum by (name) (rate (container_cpu_usage_seconds_total{image!=""}[1m]))

container_cpu_usage_seconds_total{name =~ "^k8s_POD.*",namespace="default"}


正则表达式:
=~  模糊匹配
==   完全匹配
!=   不匹配
!~   不匹配正则表达式

第二十二章 HPA资源自动扩容

https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

1.生成测试镜像
###创建测试首页
cat index.php 
<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>

###创建dockerfile
cat dockerfile 
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php

###生成镜像
docker build -t php:v1 .

2.创建php-deployment资源
cat >php-dp.yaml<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: php-apache
  name: php-apache
  namespace: default
  replicas: 1
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - image: php:v1
        imagePullPolicy: IfNotPresent
        name: php-apache
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 200m
EOF

3.创建hpa资源
cat >php-hpa.yaml<<EOF 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  targetCPUUtilizationPercentage: 50
EOF

4.查看
kubectl get svc
kubectl get pod
kubectl get hpa

5.压测
while true; do wget -q -O- http://10.1.28.100; done

6.观察hpa数据
kubectl get hpa -w 
kubectl get pod -w 

7.如果觉得操作麻烦,可以使用下面的命令,效果一样
###创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80

###创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

###压测
while true; do wget -q -O- http://10.1.28.100; done

第二十三章 k8s知识梳理

研究方向:
1.二进制安装
2.ansible安装:https://github.com/easzlab/kubeasz
3.多Master节点和etcd集群高可用
4.helm chart安装管理
5.jenkins gitlab CI/CD
6.prometheus报警 邮件 钉钉
7.ELK 
8.自建dns bind9
9.备份恢复
10.集群升级
11.证书替换
12.flannel详细工作原理
13.k8s组件之间的通讯流程
14.各组件默认的端口号
15.污点和容忍度
16.POD自动伸缩 
17.资源限制 CPU 内存  

k8s需要启动的服务:
1.kube-apiserver
2.kube-proxy
3.kube-sechduler
4.kube-controller
5.etcd
6.coredns
7.flannel
8.traefik
9.docker
10.kubelet

k8s名词:
系统组件:
1.kube-apiserver
2.kube-sechduler
3.kube-controller
4.etcd
5.coredns
6.kube-proxy
7.flannel
8.traefik
9.docker
10.kubelet

POD控制器:
1.RC
2.RS
3.Deployment    *****
4.DaemonSet
5.StatefulSets
6.Job
7.Cronjob

存储:
1.Volumes
  emptyDir
  nfs
  hostPath
  
网络:
1.Service
  POD IP 
  Clusrer IP
  Node IP 
2.flannel
  gw
  vxlan 

监控:
prometheus+grafana
  metrics-server
  kube-state-metrics
  node_exporter
  alertmanager
  grafana
  promQL

推荐阅读更多精彩内容