k8sDashboard,HPA,Helm,Helm部署
Posted S4061222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8sDashboard,HPA,Helm,Helm部署相关的知识,希望对你有一定的参考价值。
一 Dashboard
Dashboard可以
给用户提供一个可视化的 Web 界面来查看当前集群的各种信息
。用户可以用 Kubernetes Dashboard部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。
网址
:https://github.com/kubernetes/dashboard
下载yaml文件中需要的两个镜像
将两个镜像上传至私有仓库
下载部署文件
编辑镜像位置
执行清单
查看ns
查看节点是否正常启动
此时查看svc发现没有IP地址
更改svc,外部可以访问,修改ClusterIP为LoadBalancer
重新查看svc的kubernetes-dashboard
浏览器访问,
网页测试:https://172.25.28.11
需要token
获取token,并复制到粘贴板中
使用获取的token进入
发现有很多报错,原因是没有授权
授权:将cluster-admin的权限赋予kubernetes-dashboard
cat rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kubernetes-dashboard
执行清单
刷新,再次进入网页测试https://172.25.28.11,无报错
查看所有ns的
图形化创建pod(表单)并修改,测试:
访问ip,可以查看到图像化创建的pod的内容
网页查看新建的pod
更新版本v1-v2
访问ip,发现版本已更新
修改副本数为4
查看pod数量
图像化方式删除pod
查看pod已经被删除
二 HPA
官网
:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
HPA伸缩过程:
- 收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
- 对比在扩容条件里记录的cpu限额(CPUUtilization)
- 调整实例数(必须要满足不超过最大/最小实例数)
- 每隔30s做一次自动扩容的判断
CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu
request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod
CPU核心的使用占比。
HPA进行伸缩算法:
- 计算公式:
TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
ceil()表示取大于或等于某数的最近一个整数 - 每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。
- 当前Pod Cpu使用率与目标使用率接近时,不会触发扩容或缩容:
触发条件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9
1. 运行php-apache 服务器
导入压力测试景象
查看根大小,如果不够,及时清理,可以清理本地镜像
本地景象占用:/
harbor仓库数据占用:/data
拉取需要的镜像,上传到私有仓库
创建一个存放hpa文件的目录,
cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
执行hpa-apache.yaml 清单,
查看pod信息
查看svc信息
查看svc的详细信息,并访问生成的IP!!
显示OK即可!
算法!!!
2. 创建 Horizontal Pod Autoscaler
php-apache 服务器已经运行,我们将通过 kubectl autoscale 命令创建 Horizontal Pod Autoscaler。 以下命令将创建一个 Horizontal Pod Autoscaler 用于控制我们上一步骤中创建的 Deployment,使 Pod 的副本数量维持在 1 到 10 之间。 大致来说,HPA 将(通过 Deployment)增加或者减少Pod 副本的数量以保持所有 Pod 的平均 CPU 利用率在 50% 左右(由于每个 Pod 请求 200 毫核的 CPU,这意味着平均 CPU 用量为 100 毫核)。自动扩缩完成副本数量的改变可能需要几分钟的时间。Hpa会根据Pod的CPU使用率动态调节Pod的数量
3. 增加负载
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"
执行命令后,会一直在运作,所以我们需要再打开一个终端来查cpu的战用量信息
查看pod,top,hpa的信息
Hpa会根据Pod的CPU使用率动态调节Pod的数量
不断查看他们的信息,可以看到hpa会自动扩容replicas,从开始的一个到最后6个!采集频率:一般30s
top pod节点也逐渐开启,负载越来越大!
打断负载:
hpa会自动缩容,但是缩的速度比扩的速度慢很多,等待一段时间之后,就可以看到节点又降低了
扩容和缩容:扩容快,缩容慢,避免服务抖动
4. 基于多项指标的自动扩缩
v1:只能监控单一指标(cpu) v2:支持多个量度指标,mem和cpu
cat hpa-v2.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-example
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-example
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60
type: Utilization
- type: Resource
resource:
name: memory
target:
averageValue: 50Mi
type: AverageValue
执行清单,
外部的web应用的流量:k8s部署第三方监控,普罗米修斯Promethus采集其他监控指标,将指标传给hpa,但hpa只能有cpu和mem的指标
三 Helm
-
Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
-
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
-
对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
-
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
Helm V3 与 V2 最大的区别在于去掉了tiller:
Helm当前最新版本 v3.1.0 官网:
https://helm.sh/docs/intro/
实验环境:
删除之前实验的影响
Helm安装
解压tar包,设定环境变量
设置helm命令补齐
搜索官方helm hub chart库(nginx):
Helm 添加第三方 Chart 库
Helm 添加第三方 Chart 库
搜索官方helm hub chart库(redis)
Helm 添加第三方 Chart 库,前两个库搜索的版本太旧
1. Helm 部署redis
helm拉取redis文件
解压tgz文件,进入解压后的目录
value.yaml中的变量的都是被集群中所有其他yaml文件应用
编辑value.yaml文件,
查看存储类
删除pvc
新建项目
将需要的镜像redis拉取下来
上传至私有仓库中新建项目bitnami
安装测试:
支持多种安装方式,本次从当前目录安
装:
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
必须修改global下的仓库位置,
列出已安装的
必须有pv,不然会pending!!!
查看pod节点,可以看到redis-cluster节点已经拉起了,statefulset控制器
卸载
2 搭建一个Helm Chart
2.1 Chart构建
创建, 查看
修改打包文件Chart.yaml
修改values.yaml文件,修改镜像为myapp,版本v1
修改之后用helm lint .查看是否正确
在harbor仓库新建项目charts,选择公开
将mychart打包上传到charts
上传
需要添加证书
添加证书之后要更新,不然还是无法添加
update-ca-trust
helm repo add mychart https://reg.westos.org/chartrepo/charts
helm repo list 列出仓库
cd /root/helm/
发现helm没有push!!!
需要上传包,所以需要安装push的插件
获取插件目录:helm env
发现有push!!!
上传helm
上传之后更新仓库并查看
helm repo update westos ##更新仓库
helm search repo mychart ##搜索
可以下载上传的仓库
curl 访问生成的IP,访问结果为myapp:v1代表成功!!!
2.2 版本更新
编辑values.yaml,修该为v2
编辑Chart.yaml ,修改打包的版本
查看是否正确
打包并上传,更新仓库
查看仓库mychart的版本,加 -l
之后可以查看到全部的版本
更新版本,并查看svc,访问ip
curl发现本版已经成功更新为v2!!!
2.3 回滚
查看mychart的历史,回滚到第一个版本,再次访问IP,版本回滚成功!!!
3 Helm部署nfs-client-provisioner
使用指定的nfs-client-provisioner的ns来部署,通过ns进行隔离
外网hub搜索nfs-subdir-external-provisioner
将仓库加入本地
新建目录用来放配置文件,拉取nfs文件,pull nfs-subdir-external-provisioner
解压
编辑value.yaml文件,需要4.0.2版本,并上传私有仓库
修改nfs的server和路径
新建仓库项目:sig-storage
上传镜像到私有仓库
删除nfs-client-provisioner的ns中的所有
删除pvc
卸载之前的chart
helm方式安装nfs
成功列出这个ns中nfs,观察此处使用的存储类,查看默认sc已配置成功
测试:
拉起pvc
成功!!!
4 Helm部署metrics-server应用
删除上个实验的test-pvc
拉取chart :metrics-server,解压
下载values.yaml文件中需要的镜像
上传至私有仓库
修改values文件中的仓库位置
删除之前实验的metrics-server
使用指定的metrics-server的ns来部署,通过ns进行隔离
使用helm安装,并按照提示解决报错
查看metrics-server的ns下的pod
查看服务是否健康
以上是关于k8sDashboard,HPA,Helm,Helm部署的主要内容,如果未能解决你的问题,请参考以下文章
K8sHelm配置图形,prometheu(采集的自定义指标转化为集群内的量度指标,与hpa结合,实现自动伸缩)
K8sHelm配置图形,prometheu(采集的自定义指标转化为集群内的量度指标,与hpa结合,实现自动伸缩)