Top

NSD CLOUD DAY10

  1. 案例1:安装部署dashboard
  2. 案例2:安装部署pometheus(一)
  3. 案例3:发布服务pometheus(二)
  4. 案例4:配置grafana
  5. 案例5:HPA集群

1 案例1:安装部署dashboard

1.1 问题

本案例要求安装部署dashboard,具体要求如下:

  1. 导入镜像到私有仓库
  2. 修改配置文件recommended.yaml
  3. 添加NodePort端口
  4. 修改镜像地址
  5. 部署dashboard
  6. 创建管理用户admin-user
  7. 使用token登录页面访问

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:部署dashboard(在master主机操作)

所有镜像及资源文件在云盘 kubernetes/v1.17.6/dashboard/目录,各位同学提前下载素材。

1)导入镜像到私有镜像仓库(192.168.1.100服务器)

镜像文件在云盘第四阶段kubernetes/v1.17.6/dashboard/目录下,各位同学需要提前下载。

需要导入的镜像包括:

  1. [root@master ~]# docker load -i dashboard.tar.gz
  2. [root@master ~]# docker images            #查看dashboard镜像的名称
  3. [root@master ~]# docker tag 旧名称 192.168.1.100:5000/dashboard:v2.0.0
  4. [root@master ~]# docker push 192.168.1.100:5000/dashboard:v2.0.0
  5.  
  6. [root@master ~]# docker load -i metrics-scraper.tar.gz
  7. [root@master ~]# docker images            #查看metrics-scraper镜像的名称
  8. [root@master ~]# docker tag 旧名称 192.168.1.100:5000/metrics-scraper:v1.0.4
  9. [root@master ~]# docker push 192.168.1.100:5000/metrics-scraper:v1.0.4

2)创建相关资源完成部署

资源文件在云盘 kubernetes/v1.17.6/dashboard/目录,各位同学提前下载素材。

  1. [root@master dashboard]# vim recommended.yaml
  2. # 190 行修改为
  3. image: 192.168.1.100:5000/dashboard:v2.0.0
  4. # 274 行修改为
  5. image: 192.168.1.100:5000/metrics-scraper:v1.0.4
  6. [root@master dashboard]# kubectl apply -f recommended.yaml
  7. # ---------------------------------- 查询验证 --------------------------------------
  8. [root@master dashboard]# kubectl -n kubernetes-dashboard get pod
  9. NAME READY STATUS RESTARTS AGE
  10. dashboard-metrics-scraper-57bf85fcc9-vsz74 1/1 Running 0 52s
  11. kubernetes-dashboard-7b7f78bcf9-5k8vq 1/1 Running 0 52s
  12. [root@master dashboard]# kubectl -n kubernetes-dashboard get service
  13. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
  14. dashboard-metrics-scraper ClusterIP 10.254.76.85 <none> 8000/TCP
  15. kubernetes-dashboard ClusterIP 10.254.211.125 <none> 443/TCP
  16. # ---------------------------------- 对外发布服务 -----------------------------------
  17. [root@master dashboard]# vim service.yaml
  18. ---
  19. kind: Service
  20. apiVersion: v1
  21. metadata:
  22. labels:
  23. k8s-app: kubernetes-dashboard
  24. name: kubernetes-dashboard
  25. namespace: kubernetes-dashboard
  26. spec:
  27. ports:
  28. - port: 443
  29. nodePort: 30443 # 新添加
  30. targetPort: 8443
  31. selector:
  32. k8s-app: kubernetes-dashboard
  33. type: NodePort # 新添加
  34.  
  35. [root@master dashboard]# kubectl apply -f service.yaml
  36. service/kubernetes-dashboard configured
  37. [root@master dashboard]# kubectl -n kubernetes-dashboard get service
  38. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  39. dashboard-metrics-scraper ClusterIP 10.254.66.25 <none> 8000/TCP 2m6s
  40. kubernetes-dashboard NodePort 10.254.165.155 <none> 443:30443/TCP 2m6s
  41. [root@master dashboard]#

3)验证

浏览器访问任意节点IP的30443端口(http://任意节点:30443 端口

)即可查看Web页面,效果如图-1所示。

图-1

4)创建管理用户

素材在云盘 kubernetes/v1.17.6/dashboard/admin-token.yaml

  1. [root@master dashboard]# cat admin-token.yaml #查看、学习资源文件
  2. ---
  3. apiVersion: v1
  4. kind: ServiceAccount
  5. metadata:
  6. name: admin-user
  7. namespace: kubernetes-dashboard
  8. ---
  9. apiVersion: rbac.authorization.k8s.io/v1
  10. kind: ClusterRoleBinding
  11. metadata:
  12. name: admin-user
  13. roleRef:
  14. apiGroup: rbac.authorization.k8s.io
  15. kind: ClusterRole
  16. name: cluster-admin
  17. subjects:
  18. - kind: ServiceAccount
  19. name: admin-user
  20. namespace: kubernetes-dashboard
  21.  
  22. [root@master dashboard]# kubectl create -f admin-token.yaml #创建资源

5)查看登录的Token信息

先通过get screts查看名称,该名称是随机的,然后再通过查询到的名称继续查询对应的Token信息。

  1. [root@master ~]# kubectl -n kubernetes-dashboard get secrets
  2. NAME             TYPE
  3. admin-user-token-xxx    kubernetes.io/service-account-token ... ...
  4.  
  5. [root@master ~]# kubectl -n kubernetes-dashboard describe secrets \
  6. ... ...
  7. token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjJyTE9nZWpWLWFhTXV6cnJla3U4aX
  8. NngxVTZjV2M5Y0FYOWR0ancifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9 ... ...

再次使用浏览器访问任意节点IP的30090端口(http://任意节点:30090 端口

)即可查看Web页面,输入Token,效果如图-2所示。

图-2

2 案例2:安装部署pometheus(一)

2.1 问题

本案例安装部署pometheus,具体要求如下:

  1. 安装Prometheus operator
  2. 安装Prometheus server
  3. 安装Prometheus adapter
  4. 安装metrics-state
  5. 安装node-exporter
  6. 安装 altermanager
  7. 安装 grafana

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:导入所有后续需要的镜像到私有镜像仓库(在master主机操作操作)

所有镜像文件在云盘第四阶段kubernetes/v1.17.6/prometheus/images目录下,各位同学需要提前下载。

需要导入的镜像包括:

注意:tab修改标签时,只需要修改服务器即可,禁止修改镜像原来的名称与标签。

  1. [root@master ~]# docker load -i prometheus.tar.gz
  2. [root@master ~]# docker images            #查看镜像的名称
  3. [root@master ~]# docker tag 旧名称 192.168.1.100:5000/prometheus:v2.11.0
  4. [root@master ~]# docker push 192.168.1.100:5000/prometheus:v2.11.0
  5.  
  6. [root@master ~]# docker load -i prometheus-operator.tar.gz
  7. [root@master ~]# docker images            #查看镜像的名称
  8. [root@master ~]# docker tag \
  9. 旧名称 192.168.1.100:5000/prometheus-operator:v0.35.1
  10. [root@master ~]# docker push 192.168.1.100:5000/prometheus-operator:v0.35.1
  11.  
  12. [root@master ~]# docker load -i prometheus-config-reloader.tar.gz
  13. [root@master ~]# docker images            #查看镜像的名称
  14. [root@master ~]# docker tag \
  15. 旧名称 192.168.1.100:5000/prometheus-config-reloader:v0.35.1
  16. [root@master ~]# docker push \
  17. 192.168.1.100:5000/prometheus-config-reloader:v0.35.1
  18.  
  19. [root@master ~]# docker load -i prometheus-adapter.tar.gz
  20. [root@master ~]# docker images            #查看镜像的名称
  21. [root@master ~]# docker tag \
  22. 旧名称 192.168.1.100:5000/prometheus-operator:v0.35.1
  23. [root@master ~]# docker push 192.168.1.100:5000/prometheus-operator:v0.35.1
  24.  
  25. [root@master ~]# docker load -i node-exporter.tar.gz
  26. [root@master ~]# docker images            #查看镜像的名称
  27. [root@master ~]# docker tag \
  28. 旧名称 192.168.1.100:5000/node-exporter:v1.0.0
  29. [root@master ~]# docker push 192.168.1.100:5000/node-exporter:v1.0.0
  30.  
  31. [root@master ~]# docker load -i kube-rbac-proxy.tar.gz
  32. [root@master ~]# docker images            #查看镜像的名称
  33. [root@master ~]# docker tag \
  34. 旧名称 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
  35. [root@master ~]# docker push 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
  36.  
  37. [root@master ~]# docker load -i kube-metrics.tar.gz
  38. [root@master ~]# docker images            #查看镜像的名称
  39. [root@master ~]# docker tag \
  40. 旧名称 192.168.1.100:5000/kube-state-metrics:v1.9.2
  41. [root@master ~]# docker push 192.168.1.100:5000/kube-state-metrics:v1.9.2
  42.  
  43. [root@master ~]# docker load -i alertmanager.tar.gz
  44. [root@master ~]# docker images            #查看镜像的名称
  45. [root@master ~]# docker tag \
  46. 旧名称 192.168.1.100:5000/grafana:6.4.3
  47. [root@master ~]# docker push 192.168.1.100:5000/grafana:6.4.3
  48.  
  49.  
  50. [root@master ~]# docker load -i    configmap-reload.tar.gz
  51. [root@master ~]# docker images            #查看镜像的名称
  52. [root@master ~]# docker tag \
  53. 旧名称 192.168.1.100:5000/configmap-reload:v0.3.0
  54. [root@master ~]# docker push 192.168.1.100:5000/configmap-reload:v0.3.0
  55.  
  56. [root@master ~]# docker load -i    alertmanager.tar.gz
  57. [root@master ~]# docker images            #查看镜像的名称
  58. [root@master ~]# docker tag \
  59. 旧名称 192.168.1.100:5000/alertmanager:v0.18.0
  60. [root@master ~]# docker push 192.168.1.100:5000/alertmanager:v0.18.0

步骤二:修改资源文件部署各种容器服务(在master主机操作操作)

所有资源的素材文件都在云盘第四阶段kubernetes/v1.17.6/Prometheus/目录下。各位同学需要提前下载整个目录到master主机。

1)安装operator

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim setup/prometheus-operator-deployment.yaml
  2. 27 - --config-reloader-image=192.168.1.100:5000/configmap-reload:v0.3.0
  3. 28 - --prometheus-config-reloader=192.168.1.100:5000/prometheus-config-reloader:v0.35.1
  4. 29 image: 192.168.1.100:5000/prometheus-operator:v0.35.1
  5. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  6.  
  7. [root@master prometheus]# kubectl apply -f setup/

2)安装Prometheus server

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim prom-server/prometheus-prometheus.yaml
  2. 14     baseImage: 192.168.1.100:5000/prometheus
  3. 34     version: v2.11.0
  4. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  5.  
  6. [root@master prometheus]# kubectl apply -f prom-server/

3)安装prom-adapter

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim prom-adapter/prometheus-adapter-deployment.yaml
  2. 28 image: 192.168.1.100:5000/k8s-prometheus-adapter-amd64:v0.5.0
  3. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  4.  
  5. [root@master prometheus]# kubectl apply -f prom-adapter/

4)安装metrics-state

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim metrics-state/kube-state-metrics-deployment.yaml
  2. 24     image: 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
  3. 41     image: 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
  4. 58     image: 192.168.1.100:5000/kube-state-metrics:v1.9.2
  5. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  6.  
  7. [root@master prometheus]# kubectl apply -f metrics-state/

5)安装node-exporter

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim node-exporter/node-exporter-daemonset.yaml
  2. 27     image: 192.168.1.100:5000/node-exporter:v1.0.0
  3. 57     image: 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
  4. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  5.  
  6. [root@master prometheus]# kubectl apply -f node-exporter/

6)安装alertmanager

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim alertmanager/alertmanager-alertmanager.yaml
  2. 09     baseImage: 192.168.1.100:5000/alertmanager
  3. 18     version: v0.18.0
  4. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  5.  
  6. [root@master prometheus]# kubectl apply -f alertmanager/

7)安装grafana

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

  1. [root@master prometheus]# vim grafana/grafana-deployment.yaml
  2. 19    - image: 192.168.1.100:5000/grafana:6.4.3
  3. #提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
  4.  
  5. [root@master prometheus]# kubectl apply -f grafana/
  6. -3

3 案例3:发布服务pometheus(二)

3.1 问题

本案例延续前面的案例3,继续部署pometheus,具体要求如下:

3.2 步骤

步骤三:对外发布grafana服务(在master主机操作)

相关资源文件共享在云盘第四阶段kubernetes/v1.17.6/prometheus/ grafana/grafana-service.yaml。

下面使用使用nodePort发布服务将容器的3000端口映射到真机节点的30000端口。

  1. [root@master prometheus]# vim grafana/grafana-service.yaml
  2. ... ...
  3. spec:
  4. type: NodePort
  5. ports:
  6. - name: http
  7. port: 3000
  8. nodePort: 30000
  9. targetPort: http
  10. ... ...
  11. [root@master prometheus]# kubectl apply -f grafana/grafana-service.yaml

使用浏览器访问任意节点的30002端口,即可访问到Web网页,效果如图-4所示。

图-4

4 案例4:配置grafana

4.1 问题

本案例要求配置grafana,具体要求如下。

  1. 配置数据源
  2. 展示监控页面

4.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置grafana(在任意主机操作)

1)登录

登录的默认用户和密码:admin/admin

第一次登录需要修改密码,效果如图-5所示。

图-5

2)修改数据源地址

我们添加的数据为prometheus

数据源就是 Prometheus service 的地址

可以填写prometheus的Service内部的DNS名称

http://prometheus-k8s.monitoring.svc.cluster.local:9090

如何查看到这个DNS的域名呢?可以执行如下的命令即可。

  1. [root@master ~]# kubectl -n monitoring get service
  2. NAME         TYPE     CLUSTER-IP     EXTERNAL-IP    PORT(S)
  3. grafana NodePort     10.254.169.248     <none>     3000:30002/TCP
  4. prometheus-k8s NodePort     10.254.44.72 <none>     9090:30001/TCP
  5. ... ...
  6. # 找到这里的prometheus-k8s名称后
  7. # 在它的后面附加一个固定的monitoring.svc.cluster.local:9090
  8. # 连接在一起就是:http://prometheus-k8s.monitoring.svc.cluster.local:9090

点击如图-6和图-7所示的按钮,修改数据源。

添加数据源Prometheus,名字随意,URL需要填写Prometheus内部的DNS名称,

默认端口号 9090。

图-6

图-7

3)导入模板

导入模板,需要正确配置后点击保存和测试后开始添加仪表盘

点开import,输入模板ID,效果如图-8所示。

图-8

常用的模块为315,如图-9所示。

图-9

数据源就是刚刚定义的 Prometheus,如图-10所示。

图-10

最后查看监控效果,如图-11和图-12所示。

图-11

图-12

5 案例5:HPA集群

5.1 问题

本案例利用监控指标实现HPA集群,具体要求如下。

  1. 完成一个弹性集群

5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:部署一个弹性集群(在master主机操作)

1)查看、学习资源文件

  1. [root@master ~]# vim myhpa.yaml
  2. ---
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6. name: myweb
  7. spec:
  8. selector:
  9. matchLabels:
  10. app: apache
  11. replicas: 1
  12. template:
  13. metadata:
  14. labels:
  15. app: apache
  16. spec:
  17. containers:
  18. - name: apache
  19. image: 192.168.1.100:5000/myos:httpd
  20. ports:
  21. - containerPort: 80
  22. resources:
  23. requests:
  24. cpu: 200m
  25. restartPolicy: Always
  26.  
  27. ---
  28. apiVersion: v1
  29. kind: Service
  30. metadata:
  31. name: web-service
  32. spec:
  33. ports:
  34. - protocol: TCP
  35. port: 80
  36. targetPort: 80
  37. selector:
  38. app: apache
  39. type: ClusterIP
  40.  
  41. ---
  42. apiVersion: extensions/v1beta1
  43. kind: Ingress
  44. metadata:
  45. name: my-app
  46. annotations:
  47. kubernetes.io/ingress.class: "nginx"
  48. spec:
  49. backend:
  50. serviceName: web-service
  51. servicePort: 80
  52.  
  53. ---
  54. apiVersion: autoscaling/v1
  55. kind: HorizontalPodAutoscaler
  56. metadata:
  57. name: myweb
  58. spec:
  59. minReplicas: 1
  60. maxReplicas: 3
  61. scaleTargetRef:
  62. apiVersion: apps/v1
  63. kind: Deployment
  64. name: myweb
  65. targetCPUUtilizationPercentage: 50
  66. [root@master ~]# kubectl apply -f hpa-example.yaml
  67. [root@master ~]# kubectl get hpa
  68. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  69. myweb Deployment/myweb 0%/50% 1 3 1 15m

步骤二:压力测试

想办法对前面创建的容器进行压力测试,消耗容器CPU资源!!!

步骤三:查看动态扩容效果

  1. [root@master ~]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. myweb Deployment/myweb 287%/50% 1 3 3 16m
  4.  
  5. [root@master ~]# kubectl get pod
  6. NAME READY STATUS RESTARTS AGE
  7. myweb-7f89fc7b66-kzhj5 1/1 Running 0 16m
  8. myweb-7f89fc7b66-nh4kn 1/1 Running 0 21s
  9. myweb-7f89fc7b66-q2jnf 1/1 Running 0 21s
  10. #当容器CPU占用过高时,集群可以自动扩容
  11.  
  12. -----------------------------------------------------------------------------
  13. [root@master ~]# kubectl get hpa
  14. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  15. myweb Deployment/myweb 1%/50% 1 3 3 20m
  16.  
  17. [root@master ~]# kubectl get pod
  18. NAME READY STATUS RESTARTS AGE
  19. myweb-7f89fc7b66-kzhj5 1/1 Running 0 22m
  20. # 当容器CPU占用率恢复正常时,容器可以自动缩减