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结合,实现自动伸缩)

k8s Metrics Server 获取资源指标与 hpa 部署

helm实战之开发Chart

使用 Helm 安装包时如何更改依赖项的值?

Linux企业运维——Kubernetes(十七)HPA容器水平伸缩