一、实验准备
1、文件结构与组成
[root@master heapster-influxdb]# ll total 20 -rw-r--r-- 1 root root 414 May 13 16:35 grafana-service.yaml -rw-r--r-- 1 root root 694 May 21 12:14 heapster-controller.yaml -rw-r--r-- 1 root root 249 May 13 16:36 heapster-service.yaml -rw-r--r-- 1 root root 1627 May 13 17:19 influxdb-grafana-controller.yaml -rw-r--r-- 1 root root 259 May 13 16:37 influxdb-service.yaml
2、具体内容
grafana-service.yaml
[root@master heapster-influxdb]# cat grafana-service.yaml apiVersion: v1 kind: Service metadata: labels: kubernetes.io/cluster-service: 'true' kubernetes.io/name: monitoring-grafana name: monitoring-grafana namespace: kube-system spec: # In a production setup, we recommend accessing Grafana through an external Loadbalancer # or through a public IP. # type: LoadBalancer ports: - port: 80 targetPort: 3000 selector: name: influxGrafana
heapster-controller.yaml
[root@master heapster-influxdb]# cat heapster-controller.yaml apiVersion: v1 kind: ReplicationController metadata: labels: k8s-app: heapster name: heapster version: v6 name: heapster namespace: kube-system spec: replicas: 1 selector: k8s-app: heapster version: v6 template: metadata: labels: k8s-app: heapster version: v6 spec: nodeSelector: kubernetes.io/hostname: master containers: - name: heapster image: 192.168.118.18:5000/heapster:canary imagePullPolicy: IfNotPresent command: - /heapster - --source=kubernetes:http://192.168.118.18:8080?inClusterConfig=false - --sink=influxdb:http://monitoring-influxdb:8086
heapster-service.yaml
[root@master heapster-influxdb]# cat heapster-service.yaml apiVersion: v1 kind: Service metadata: labels: kubernetes.io/cluster-service: 'true' kubernetes.io/name: Heapster name: heapster namespace: kube-system spec: ports: - port: 80 targetPort: 8082 selector: k8s-app: heapster
influxdb-grafana-controller.yaml
[root@master heapster-influxdb]# cat influxdb-grafana-controller.yaml apiVersion: v1 kind: ReplicationController metadata: labels: name: influxGrafana name: influxdb-grafana namespace: kube-system spec: replicas: 1 selector: name: influxGrafana template: metadata: labels: name: influxGrafana spec: containers: - name: influxdb image: 192.168.118.18:5000/heapster_influxdb:v0.5 imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /data name: influxdb-storage - name: grafana imagePullPolicy: IfNotPresent image: 192.168.118.18:5000/heapster_grafana:v2.6.0 env: - name: INFLUXDB_SERVICE_URL value: http://monitoring-influxdb:8086 # The following env variables are required to make Grafana accessible via # the kubernetes api-server proxy. On production clusters, we recommend # removing these env variables, setup auth for grafana, and expose the grafana # service using a LoadBalancer or a public IP. - name: GF_AUTH_BASIC_ENABLED value: "false" - name: GF_AUTH_ANONYMOUS_ENABLED value: "true" - name: GF_AUTH_ANONYMOUS_ORG_ROLE value: Admin - name: GF_SERVER_ROOT_URL value: /api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/ volumeMounts: - mountPath: /var name: grafana-storage nodeSelector: kubernetes.io/hostname: 192.168.118.18 volumes: - name: influxdb-storage emptyDir: {} - name: grafana-storage emptyDir: {}
influxdb-service.yaml
[root@master heapster-influxdb]# cat influxdb-service.yaml apiVersion: v1 kind: Service metadata: labels: null name: monitoring-influxdb namespace: kube-system spec: ports: - name: http port: 8083 targetPort: 8083 - name: api port: 8086 targetPort: 8086 selector: name: influxGrafana
镜像仓库
[root@master dashboard]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.118.18:5000/heapster_influxdb v0.5 a47993810aac 4 years ago 251 MB 192.168.118.18:5000/heapster_grafana v2.6.0 4fe73eb13e50 4 years ago 267 MB 192.168.118.18:5000/heapster canary 0a56f7040da5 3 years ago 971 MB
二、操作演示过程
1、安装部署检查
创建数据库容器
[root@master pod]# kubectl create -f heapster-influxdb/ service "monitoring-grafana" created replicationcontroller "heapster" created service "heapster" created replicationcontroller "influxdb-grafana" created service "monitoring-influxdb" created
检查
[root@master ~]# kubectl get pod -o wide --all-namespaces|grep kube-system kube-system heapster-hrfmb 1/1 Running 0 5s 172.16.56.3 192.168.118.18 kube-system influxdb-grafana-0lj0n 2/2 Running 0 4s 172.16.56.4 192.168.118.18 kube-system kube-dns-1835838994-jm5bk 4/4 Running 0 6h 172.16.99.3 192.168.118.20 kube-system kubernetes-dashboard-latest-2728556226-fc2pc 1/1 Running 0 5h 172.16.60.6 192.168.118.19
2、遇到的坑
状态查看
[root@master pod]# kubectl get svc --namespace=kube-system NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE heapster 10.254.31.250 <none> 80/TCP 1m kube-dns 10.254.230.254 <none> 53/UDP,53/TCP 4h kubernetes-dashboard 10.254.245.38 <none> 80/TCP 3h monitoring-grafana 10.254.153.72 <none> 80/TCP 1m monitoring-influxdb 10.254.137.174 <none> 8083/TCP,8086/TCP 1m [root@master pod]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE heapster-2l264 0/1 Pending 0 1m influxdb-grafana-j602n 0/2 Pending 0 1m kube-dns-1835838994-jm5bk 4/4 Running 0 4h kubernetes-dashboard-latest-2728556226-fc2pc 1/1 Running 0 2h
错误信息
[root@master pod]# kubectl describe pods heapster-lq553 --namespace=kube-system Name: heapster-lq553 ...... Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 26m 23s 92 {default-scheduler } Warning FailedScheduling pod (heapster-lq553) failed to fit in any node fit failure summary on nodes : MatchNodeSelector (2)
处理方法
spec: nodeSelector: kubernetes.io/hostname: master #这里一定要和自己的节点hostnam保持一致
3、nodeSelector
labels 在 K8s 中是一个很重要的概念,作为一个标识,Service、Deployments 和 Pods 之间的关联都是通过 label 来实现的。而每个节点也都拥有 label,通过设置 label 相关的策略可以使得 pods 关联到对应 label 的节点上。nodeSelector
是最简单的约束方式。nodeSelector
是 PodSpec
的一个字段。
通过--show-labels
可以查看当前nodes
的labels
ctl get all ...... NAME READY STATUS RESTARTS AGE po/mysql-3qkf1 1/1 Running 0 15h po/myweb-z2g3m 1/1 Running 0 15h
三、测试
四、监控的信息来源在哪里
1、从架构图中看来源的组件
2、配置/etc/kubernetes/kubelet开启cadvisor
vim /etc/kubernetes/kubelet 修改21行如下:--cadvisor-port=8080 KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local --cadvisor-port=8080"
重启服务
systemctl restart kubelet.service systemctl restart kube-proxy.service
3、web页面截图
浏览器地址栏输入:
http://192.168.118.19:8080/containers/
总览
cpu
内存
网络
磁盘