目录

k8s容器资源限制

内存限制

CPU限制

namespace设置资源限制

 namespace设置资源配额

Namespace 配置Pod配额

kubernetes资源监控

 Metrics-Server部署

Dashboard部署

HPA(Horizontal Pod Autoscaler)实例 

 Helm

构建一个 Helm Chart

Helm部署nfs-client-provisioner

 Helm部署metrics-server应用

Helm部署nginx-ingress应用 

部署kubeapps应用,为Helm提供web UI界面管理 


k8s容器资源限制

Kubernetes采用request和limit两种限制类型来对资源进行分配。

request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。

limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。

资源类型:
CPU 的单位是核心数,内存的单位是字节。
一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
内存单位:
K、M、G、T、P、E 	        #通常是以1000为换算标准的。
Ki、Mi、Gi、Ti、Pi、Ei        #通常是以1024为换算标准的。

内存限制

kubectl get pod #清理实验环境
kubectl get all
kubectl delete statefulsets.apps mysql
kubectl delete svc mysql
kubectl delete svc mysql-read
kubectl get all

k8s监控数据能通过接口获取吗 k8s监控工具_Pod

mkdir limit
cd limit/
ls
vim pod.yaml #限制内存,最多为100Mi,最少为100Mi
kubectl apply -f pod.yaml
kubectl get pod
kubectl describe pod memory-demo #查看详细信息中出现设定的内存
kubectl get pod
kubectl logs memory-demo #进程kill
kubectl get pod #pod创建失败

如果容器超过其内存限制,则会被终止。如果可重新启动,则与所有其他类型的运行时故障一样,kubelet 将重新启动它。 

如果一个容器超过其内存请求,那么当节点内存不足时,它的 Pod 可能被逐出。 

 在server1中拉取stress镜像上传到本地仓库

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_02

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_03

k8s监控数据能通过接口获取吗 k8s监控工具_运维_04

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_05

kubectl delete -f pod.yaml
vim pod.yaml #设定最大内存为300Mi
kubectl apply -f pod.yaml #镜像可以占用200Mi
kubectl get pod #running状态
kubectl describe pod memory-demo 

k8s监控数据能通过接口获取吗 k8s监控工具_运维_06

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_07

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_08

CPU限制

kubectl delete -f pod.yaml
vim pod2.yaml#设置限定cpu的数量,最多为2,最少为1
kubectl apply -f pod2.yaml
kubectl get pod
kubectl describe pod cpu-demo
kubectl logs cpu-demo #查看日志没有输出
kubectl get pod #运行成功

调度失败是因为申请的CPU资源超出集群节点所能提供的资源 但CPU 使用率过高,不会被杀死

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_09

k8s监控数据能通过接口获取吗 k8s监控工具_docker_10

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_11

namespace设置资源限制

kubectl delete -f pod2.yaml
vim limit.yaml #资源限制cpu和memory
kubectl apply -f limit.yaml
kubectl describe limitranges #查看资源限制的具体信息

LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。
kubectl get limitranges
kubectl get pod
kubectl run demo --image=nginx#运行pod
kubectl get pod
kubectl describe pod demo #namespace的资源限制对pod进行约束
kubectl describe limitranges #与设置的一致
kubectl delete pod demo

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_12

k8s监控数据能通过接口获取吗 k8s监控工具_docker_13

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_14

k8s监控数据能通过接口获取吗 k8s监控工具_docker_15

k8s监控数据能通过接口获取吗 k8s监控工具_docker_16

kubectl delete pod demo
ls
vim pod.yaml #在pod 内设置资源限制,设置的memory在namespace内存限制的范围之内
kubectl apply -f pod.yaml
kubectl get pod #可以运行

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_17

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_18

 kubectl delete -f pod.yaml
vim pod.yaml #设定pod内存最大和最小相同
kubectl apply -f pod.yaml
kubectl get pod #也可以成功运行

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_19

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_20

kubectl delete -f pod.yaml
vim pod.yaml #设定最小的内存为50Mi,而namespace的最小内存限制为100Mi
kubectl apply -f pod.yaml
kubectl get pod #出现报错

k8s监控数据能通过接口获取吗 k8s监控工具_docker_21

k8s监控数据能通过接口获取吗 k8s监控工具_运维_22

 namespace设置资源配额

kubectl delete -f pod.yaml
ls
vim limit.yaml #限制资源配额(cpu和memory)
kubectl apply -f limit.yaml
kubectl get resourcequotas #查看资源配额
kubectl describe resourcequotas
kubectl get pod
kubectl run demo1 --image=nginx #运行demo1
kubectl describe limitranges #已经设定资源限制
kubectl describe resourcequotas #占用最多0.5个cpu.512Mi内存和0.1个cpu和256Mi内存
kubectl get pod
kubectl run demo2 --image=nginx
kubectl describe resourcequotas
kubectl get pod
kubectl run demo3 --image=nginx
kubectl describe resourcequotas
kubectl run demo4 --image=nginx
kubectl describe resourcequotas #运行4个demo,最多的内存和cpu限制已经占满
kubectl run demo5 --image=nginx #运行第5个报错,内存不够

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_23

k8s监控数据能通过接口获取吗 k8s监控工具_运维_24

k8s监控数据能通过接口获取吗 k8s监控工具_运维_25

k8s监控数据能通过接口获取吗 k8s监控工具_docker_26

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_27

kubectl get pod
kubectl delete pod demo1
kubectl delete pod demo2
kubectl delete pod demo3
kubectl delete pod demo4
kubectl describe resourcequotas #释放内存和cpu
kubectl delete limitranges limitrange-demo #删除之前设定的namespace的资源限制
kubectl run demo --image=nginx #无法运行pod
kubectl describe resourcequotas

设置资源配额,一定要设置资源限制

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_28

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_29

 ls
vim pod.yaml #创建pod,设定资源限制
kubectl apply -f pod.yaml
kubectl get pod #运行成功
kubectl describe resourcequotas #可以看到pod已占用的资源的信息
ls
kubectl apply -f limit.yaml #设置namespace的资源限制
kubectl describe limitranges
kubectl delete -f pod.yaml
kubectl get pod

k8s监控数据能通过接口获取吗 k8s监控工具_docker_30

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_31

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_32

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_33

Namespace 配置Pod配额

vim limit.yaml #限制pod数为2;设置Pod配额以限制可以在namespace中运行的Pod数量
kubectl apply -f limit.yaml
kubectl run demo --image=nginx #运行pod
kubectl run demo1 --image=nginx
kubectl describe resourcequotas #看到资源配额信息中pod数量为2
kubectl run demo3 --image=nginx #运行第三个pod报错
kubectl get pod

k8s监控数据能通过接口获取吗 k8s监控工具_运维_34

k8s监控数据能通过接口获取吗 k8s监控工具_docker_35

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_36

kubernetes资源监控

 Metrics-Server部署

Metrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster。 

容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics-Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。

Metrics API 只可以查询当前的度量数据,并不保存历史数据。

Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。 必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据

Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。 

kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器。 

k8s监控数据能通过接口获取吗 k8s监控工具_docker_37

Metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成。 

资源下载:https://github.com/kubernetes-incubator/metrics-server 

kubectl get pod
kubectl delete pod --all
kubectl delete -f limit.yaml#删除资源限制避免对后面实验造成影响
kubectl api-versions #查看api-server

k8s监控数据能通过接口获取吗 k8s监控工具_运维_38

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_39

mkdir metrics
cd metrics/
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
ls
 vim components.yaml #Metric Server 支持一个参数 --kubelet-insecure-tls,可以跳过认证,修改镜像位置
kubectl apply -f components.yaml
kubectl -n kube-system get pod #状态为running
kubectl -n kube-system logs metrics-server-58fc4b6dbd-vqz64 #查看日志没有报错
kubectl api-versions #多了metrics.k8s.io/v1beta1接口
kubectl top node #查看节点的资源使用量
kubectl top pod --all-namespaces #可以查看所有namespaces的资源使用
kubectl delete namespace test
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server2" #命令行查看各节点
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server3"
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server4"
kubectl top node

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_40

k8s监控数据能通过接口获取吗 k8s监控工具_运维_41

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_42

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_43

在本地仓库上传所需的镜像

k8s监控数据能通过接口获取吗 k8s监控工具_docker_44

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_45

k8s监控数据能通过接口获取吗 k8s监控工具_docker_46

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_47

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_48

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_49

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_50

k8s监控数据能通过接口获取吗 k8s监控工具_运维_51

Dashboard部署

Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。 

网址:https://github.com/kubernetes/dashboard

ls
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml #下载部署文件
ls
vim recommended.yaml #上传镜像到本地仓库方便拉取
kubectl apply -f recommended.yaml
kubectl get ns #创建了kubernets-dashboard的ns
kubectl -n kubernetes-dashboard get pod
kubectl -n kubernetes-dashboard get all

k8s监控数据能通过接口获取吗 k8s监控工具_docker_52

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_53

k8s监控数据能通过接口获取吗 k8s监控工具_docker_54

k8s监控数据能通过接口获取吗 k8s监控工具_运维_55

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_56

kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard #修改为LoadBalancer方式,以便外部访问
kubectl -n kubernetes-dashboard get svc #分配到ip

k8s监控数据能通过接口获取吗 k8s监控工具_docker_57

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_58

在浏览器中输入172.25.254.101 ,两种认证方式

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_59

kubectl -n kubernetes-dashboard get sa

kubectl -n kubernetes-dashboard get secrets

kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-token-mbvrk #获取token登陆

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_60

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_61

登进去之后操作没有权限报错

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_62

 默认dashboard对集群没有操作权限,需要授权:

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_63

k8s监控数据能通过接口获取吗 k8s监控工具_docker_64

刷新

k8s监控数据能通过接口获取吗 k8s监控工具_运维_65

多个服务

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_66

node的监控

k8s监控数据能通过接口获取吗 k8s监控工具_docker_67

在界面创建pod

k8s监控数据能通过接口获取吗 k8s监控工具_docker_68

k8s监控数据能通过接口获取吗 k8s监控工具_运维_69

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_70

查看日志

k8s监控数据能通过接口获取吗 k8s监控工具_运维_71

修改  yaml文件中pod副本数

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_72

可以看到生成3个pod

k8s监控数据能通过接口获取吗 k8s监控工具_运维_73

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_74

k8s监控数据能通过接口获取吗 k8s监控工具_docker_75

HPA(Horizontal Pod Autoscaler)实例 

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

Horizontal Pod Autoscaler 可以根据 CPU 利用率自动扩缩 ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量 (也可以基于其他应用程序提供的度量指标,目前这一功能处于 beta 版本)。

mkdir hpa
cd hpa/
ls
vim hpa.yaml #启动一个 Deployment 来运行这个镜像并暴露一个服务
kubectl apply -f hpa.yaml
kubectl get pod
kubectl get svc #获得svc
kubectl describe svc php-apache #有endpoint出现
kubectl get pod #running状态
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10 #创建一个 Horizontal Pod Autoscaler 用于控制上一步骤中创建的 Deployment,使 Pod 的副本数量维持在 1 到 10 之间。 大致来说,HPA 将(通过 Deployment)增加或者减少 Pod 副本的数量以保持所有 Pod 的平均 CPU 利用率在 50% 左右。由于每个 Pod 请求 200 毫核的 CPU,这意味着平均 CPU 用量为 100 毫核
kubectl get hpa #查看 Autoscaler 的状态
kubectl describe hpa php-apache
kubectl get hpa #当前的 CPU 利用率是 0%,这是由于我们尚未发送任何请求到服务器 (CURRENT 列显示了相应 Deployment 所控制的所有 Pod 的平均 CPU 利用率)
kubectl top pod
kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done" #启动一个容器,并通过一个循环向 php-apache 服务器发送无限的查询请求,增加负载

k8s监控数据能通过接口获取吗 k8s监控工具_运维_76

下载所需的镜像上传到本地仓库

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_77

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_78

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_79

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_80

重新打开一个终端

kubectl get pod #Hpa会根据Pod的CPU使用率动态调节Pod的数量
kubectl top pod
kubectl get hpa #一分钟时间左右之后可以看到 CPU 负载升高了
kubectl top pod #查看cpu和memory使用情况
kubectl get hpa #由于请求增多,CPU 利用率已经升至请求值53%。 可以看到,Deployment 的副本数量已经增长到了 6
kubectl get svc
kubectl describe svc php-apache #endpoint端口也增加到6个

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_81

k8s监控数据能通过接口获取吗 k8s监控工具_运维_82

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_83

输入<Ctrl> + C 来终止负载

kubectl get pod #查看pod数量在减少
kubectl top pod
kubectl get pod
kubectl get hpa #可以再次检查负载状态(等待几分钟时间)
kubectl get pod
kubectl get hpa #CPU 利用率已经降到 0,所以 HPA 将自动缩减副本数量至 1
kubectl describe hpa php-apache #查看api为v2beta2
kubectl delete hpa php-apache

k8s监控数据能通过接口获取吗 k8s监控工具_docker_84

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_85

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_86

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_87

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_88

vim hpa.yaml #使用资源清单来动态实现pod伸缩
kubectl apply -f hpa.yaml
kubectl get hpa
kubectl top pod
kubectl get hpa
kubectl top pod --all-namespaces
kubectl get deployments.apps
kubectl delete hpa hpa-example
kubectl get hpa #可以看到cpu和memory的使用情况
kubectl api-versions #v2可以监控两项指标,v1只能监控一项

k8s监控数据能通过接口获取吗 k8s监控工具_docker_89

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_90

k8s监控数据能通过接口获取吗 k8s监控工具_docker_91

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_92

k8s监控数据能通过接口获取吗 k8s监控工具_运维_93

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_94

 Helm

Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。 

Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。 

对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。

  对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。

官网:https://helm.sh/docs/intro/

kubectl delete -f hpa.yaml
kubectl get pod
cd
mkdir helm
cd helm/
ls #下载软件包
tar zxf helm-v3.8.0-linux-amd64.tar.gz
ls
cd linux-amd64/
 ls
mv helm /usr/local/bin/
which helm
helm
echo "source <(helm completion bash)" >> ~/.bashrc #设置helm命令补齐
source ~/.bashrc
helm search hub nginx #搜索官方helm hub chart库

k8s监控数据能通过接口获取吗 k8s监控工具_运维_95

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_96

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_97

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_98

可以在官网的应用中心搜索包

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_99

helm list
helm repo list #列出库
helm repo add bitnami https://charts.bitnami.com/bitnami #Helm 添加第三方 Chart 库
helm repo list
helm search repo nginx #查询
helm search repo nginx -l #查询详细信息
helm search repo nginx
helm pull bitnami/nginx #拉取应用到本地
 ls
tar zxf nginx-10.1.0.tgz #解压
ls
cd nginx/
ls
cd templates/ #有多种应用的yaml
ls

支持多种安装方式:(helm默认读取~/.kube/config信息连接k8s集群)
$ helm install redis-ha stable/redis-ha	
$ helm install redis-ha redis-ha-4.4.0.tgz
$ helm install redis-ha path/redis-ha
$ helm install redis-ha https://example.com/charts/redis-ha-4.4.0.tgz

k8s监控数据能通过接口获取吗 k8s监控工具_docker_100

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_101

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_102

vim value.yaml #修改镜像仓库,设置资源限制
helm install webserver1 . #安装应用到当前
kubectl get pod #运行
kubectl get svc --namespace default -w webserver1-nginx #查看svc

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_103

k8s监控数据能通过接口获取吗 k8s监控工具_运维_104

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_105

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_106

kubectl l get pod
kubectl describe pod webserver1-nginx-546bf74974-66xv8
kubectl describe svc #可以看到endpoint暴露出来
kubectl get pod
kubectl get svc
kubectl get hpa #pod动态进行弹索
kubectl top pod #目前pod数量为1
kubectl get deployments.apps
helm list #列出helm
helm uninstall webserver1 #卸载应用
kubectl get all
kubectl get pod
kubectl get hpa

k8s监控数据能通过接口获取吗 k8s监控工具_docker_107

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_108

k8s监控数据能通过接口获取吗 k8s监控工具_docker_109

可以访问成功

k8s监控数据能通过接口获取吗 k8s监控工具_docker_110

k8s监控数据能通过接口获取吗 k8s监控工具_运维_111

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_112

构建一个 Helm Chart

 cd helm/
ls
helm create mychart #创建mychart
cd mychart/
 ls
yum install -y tree
tree .
ls
cd templates/
 ls
vim Chart.yaml  #编写mychart的应用描述信息
vim values.yaml #修改应用部署信息
cd .
 ls
helm lint mychart/ #检查依赖和模板配置是否正确

k8s监控数据能通过接口获取吗 k8s监控工具_docker_113

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_114

vim Chart.yaml #修改版本为v1

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_115

vim values.yaml #开启ingress服务

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_116

k8s监控数据能通过接口获取吗 k8s监控工具_docker_117

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_118

ls
helm package mychart/ #将应用打包,在harbor中建立本地仓库
ls
helm repo add local https://reg.westos.org/chartrepo/charts  #添加本地仓库,需要认证
cd /etc/docker/
ls
cd
cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/ #复制/etc/docker/认证授权到指定目录
update-ca-trust #更新
helm repo add local https://reg.westos.org/chartrepo/charts #再次添加
helm repo list #列出repo

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_119

k8s监控数据能通过接口获取吗 k8s监控工具_docker_120

cd helm/
ls
vim /root/.config/helm/repositories.yaml #设置登陆的用户和密码
helm env
安装helm-push插件
mkdir -p /root/.local/share/helm/plugins #建立目录
mkdir  /root/.local/share/helm/plugins/cm-push
ls
tar zxf helm-push_0.10.2_linux_amd64.tar.gz -C  /root/.local/share/helm/plugins/cm-push #解压到之指定目录
helm cm-push -h #安装成功
cd helm/
ls
helm cm-push mychart-0.1.0.tgz local #上传打包好的到本地

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_121

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_122

k8s监控数据能通过接口获取吗 k8s监控工具_docker_123

可以看到上传到本地仓库中

k8s监控数据能通过接口获取吗 k8s监控工具_运维_124

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_125

helm repo list #列出已经添加的源
helm repo update #更新
helm search repo mychart #可以搜索到
 helm install demo1 local/mychart #安装demo1
kubectl get all
kubectl get ingress
kubectl get svc 

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_126

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_127

可以访问到域名

k8s监控数据能通过接口获取吗 k8s监控工具_运维_128

k8s监控数据能通过接口获取吗 k8s监控工具_运维_129

cd mychart/
ls
vim values.yaml #修改应用版本为v2
vim Chart.yaml
cd ..
helm package mychart #重新打包
ll
helm cm-push mychart-0.2.0.tgz local #上传v2版本到本地
helm  repo update #更新
helm search repo mychart #已经更新为v2版本
helm search repo mychart -l
helm upgrade demo1 local/mychart #升级
helm list #列出应用
helm history demo1 #查看所有版本信息
helm rollback demo1 1 #回滚到版本1
helm uninstall demo1 #卸载
helm list
helm uninstall demo
helm list

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_130

k8s监控数据能通过接口获取吗 k8s监控工具_docker_131

k8s监控数据能通过接口获取吗 k8s监控工具_docker_132

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_133

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_134

k8s监控数据能通过接口获取吗 k8s监控工具_运维_135

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_136

可以看到上传的应用

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_137

Helm部署nfs-client-provisioner

kubectl get pod -n nfs-client-provisioner
helm list --all-namespaces #helm列出所有的namespaces
helm repo list #列出源
helm search repo nfs-client-provisioner #搜索
helm search hub nfs-client-provisioner
cd
cd helm/
 ls
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ #添加源到helm仓库
helm search repo nfs-subdir-external-provisioner
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner #拉取
ls
tar zxf  nfs-subdir-external-provisioner-4.0.16.tgz
ls
cd nfs-subdir-external-provisioner/
ls
vim values.yaml #修改变量文件镜像以及nfs路径
helm install nfs-subdir-external-provisioner . -n nfs-client-provisioner #安装应用到当前指定namespace
kubectl get pod -n nfs-client-provisioner
kubectl get sc #查看动态存储卷

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_138

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_139

预先配置好外部的NFS服务器 

k8s监控数据能通过接口获取吗 k8s监控工具_运维_140

k8s监控数据能通过接口获取吗 k8s监控工具_运维_141

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_142

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_143

cd volume/
cd pvc/nfs/
ls
cat pvc.yaml
kubectl apply -f pvc.yaml
kubectl get pvc #获取pvc
kubectl get pv #与pv绑定
kubectl delete -f pvc.yaml
kubectl get pvc
kubectl get pv
helm list --all-namespaces

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_144

k8s监控数据能通过接口获取吗 k8s监控工具_docker_145

在/nfsshare自动生成目录

k8s监控数据能通过接口获取吗 k8s监控工具_docker_146

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_147

删除pvc和pv之后,目录自动清除

k8s监控数据能通过接口获取吗 k8s监控工具_docker_148

 Helm部署metrics-server应用

cd metrics/
ls
kubectl delete -f recommended.yaml #删除之前部署的metrics-server应用
kubectl delete -f rbac.yaml
cd -
kubectl delete -f components.yaml
kubectl get hpa
kubectl -n kube-system get pod
kubectl top node

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_149

k8s监控数据能通过接口获取吗 k8s监控工具_运维_150

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ #添加路径
cd
cd helm/
helm search repo metrics-server #搜索
helm pull metrics-server/metrics-server #拉取包
ls
tar zxf metrics-server-3.8.2.tgz
ls
cd metrics-server/
ls
vim values.yaml #更改变量文件,将所需镜像上传到本地仓库
helm install metrics-server . -n kube-system #安装应用到当前指定namespace
helm list --all-namespaces #查看
kubectl get pod -n kube-system #已创建pod
kubectl top node #可以查看各节点资源使用情况
kubectl top pod --all-namespaces

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_151

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_152

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_153

k8s监控数据能通过接口获取吗 k8s监控工具_运维_154

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_155

Helm部署nginx-ingress应用 

kubectl get ns
cd
cd ingress/
ls
 kubectl get ingress
kubectl get ingress --all-namespaces
kubectl delete -f deploy.yaml #将之前部署的ingress-nginx删除
kubectl get ns
kubectl get ingressclasses.networking.k8s.io
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx #添加路径
helm search repo ingress-nginx
helm search repo ingress-nginx -l
helm pull ingress-nginx/ingress-nginx --version 4.0.17 #拉取
ls
mv ingress-nginx-4.0.17.tgz ~/helm
cd ~/helm/
ls
tar zxf ingress-nginx-4.0.17.tgz #解压
ls
cd ingress-nginx/
 ls
vim values.yaml #更改变量文件
kubectl create namespace ingress-nginx #创建namespaces
helm install ingress-nginx . -n ingress-nginx #安装应用
kubectl get pod -n ingress-nginx #查看pod
kubectl get all -n ingress-nginx
kubectl -n ingress-nginx describe service/ingress-nginx-controller-admission
cd
kubectl -n ingress-nginx get svc #可以看到分配的ip

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_156

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_157

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_158

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_159

k8s监控数据能通过接口获取吗 k8s监控工具_docker_160

k8s监控数据能通过接口获取吗 k8s监控工具_运维_161

打开backend

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_162

上传所需镜像到本地仓库

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_163

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_164

k8s监控数据能通过接口获取吗 k8s监控工具_docker_165

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_166

访问172.25.254.100

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_167

cd pod/
ls
vim deploy-2.yml
kubectl apply -f deploy-2.yml #创建deploy控制器及service
kubectl get svc
kubectl describe svc myapp-v2 #该service有三个endpoint
kubectl get pod
cd
cd ingress/
ls
cat v2-ingress.yaml
vim v2-ingress.yaml
kubectl apply -f v2-ingress.yaml #应用ingress策略
kubectl get ingress
kubectl describe ingress ingress-myapp-canary #查看详细信息

k8s监控数据能通过接口获取吗 k8s监控工具_docker_168

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_169

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_170

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_171

可以正常访问实现负载均衡

k8s监控数据能通过接口获取吗 k8s监控工具_运维_172

部署kubeapps应用,为Helm提供web UI界面管理 

helm list --all-namespaces #helm列出所有的namespaces
helm repo list
helm search repo kubeapps
helm search repo kubeapps -l
cd
cd helm/
helm pull bitnami/kubeapps --version 7.8.7 #拉取解压部署文件
ls
tar zxf kubeapps-7.8.7.tgz
ls
cd kubeapps/
ls
cd charts/
ls
cd ..
ls
vim values.yaml #修改变量文件,拉取所需的镜像上传到本地仓库
kubectl delete ingress ingress-myapp-canary #删除之前的ingress 服务
kubectl delete deployments.apps deployment-myapp
kubectl get pod
kubectl get svc
kubectl delete svc myapp-v2

k8s监控数据能通过接口获取吗 k8s监控工具_运维_173

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_174

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_175

k8s监控数据能通过接口获取吗 k8s监控工具_docker_176

部署kubeapps需要的镜像

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_177

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_178

 

k8s监控数据能通过接口获取吗 k8s监控工具_运维_179

 

ls
cd charts/
ls
cd postgresql/
ls
vim values.yaml
cd ..
cd redis/
ls
vim values.yaml #指定仓库位置
cd ..
kubectl create namespace kubeapps #创建namespaces
ls
cd kubeapps/
ls
helm install kubeapps . -n kubeapps #安装应用
kubectl -n kubeapps get pod
kubectl -n kubeapps get all #部署成功
kubectl -n kubeapps get pod

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_180

k8s监控数据能通过接口获取吗 k8s监控工具_docker_181

k8s监控数据能通过接口获取吗 k8s监控工具_k8s监控数据能通过接口获取吗_182

k8s监控数据能通过接口获取吗 k8s监控工具_docker_183

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_184

浏览器访问kubeapps.westos.org,需要token认证,需要创建sa,并且为其附加cluster-admin权限

kubectl -n kubeapps get sa#查看sa
kubectl create serviceaccount kubeapps-operator -n kubeapps #创建sa
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator #授权
kubectl describe clusterrolebinding.rbac.authorization.k8s.io/kubeapps-operator
kubectl -n kubeapps get sa
kubectl -n kubeapps get secrets
kubectl -n kubeapps describe secrets kubeapps-operator-token-j7vjv ##查看token 

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_185

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_186

复制token到浏览器

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_187

下面为部署过的应用

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_188

 添加chart库

pod内不能解析仓库reg.westos.org,在pod内不能解析这个地址,因此要添加pod内解析

helm repo list
kubectl -n kube-system get pod
kubectl -n kube-system get cm
kubectl -n kube-system edit cm coredns #添加解析
dig -t A reg.westos.org @10.96.0.10
kubectl -n kubeapps get pod #安装后会同步

网页中添加仓库,填写相关信息后安装

 

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_189

k8s监控数据能通过接口获取吗 k8s监控工具_kubernetes_190

k8s监控数据能通过接口获取吗 k8s监控工具_运维_191

 

k8s监控数据能通过接口获取吗 k8s监控工具_Pod_192

 

k8s监控数据能通过接口获取吗 k8s监控工具_docker_193