企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路

文章目录

  • HPA
    • 运行 php-apache 服务器并暴露服务
    • 创建 Horizontal Pod Autoscale
    • 增加负载
    • 停止负载
  • Helm
    • Helm安装
    • 设置helm命令补齐
    • chart库
    • 创建chart库

HPA

运行 php-apache 服务器并暴露服务

首先先将hpa-example镜像文件从网络上拉取下来,并放入自己的harbor仓库,方便使用
在这里插入图片描述
我们使用下面的配置启动一个 Deployment 来运行这个镜像并暴露一个服务:

vim hpa1.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: k8s.gcr.io/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
[root@server2 hpa]# kubectl apply -f pha1.yaml
deployment.apps/php-apache created
service/php-apache created
[root@server2 hpa]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
php-apache-6cc67f7957-2tttg         1/1     Running   0          2m8s
[root@server2 hpa]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
php-apache   ClusterIP   10.104.224.75   <none>        80/TCP    2m13s
[root@server2 hpa]# curl 10.104.224.75
OK!

创建 Horizontal Pod Autoscale

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 毫核)。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

可以通过以下命令查看 Autoscaler 的状态

kubectl get hpa

在这里插入图片描述

增加负载

我们将启动一个容器,并通过一个循环向 php-apache 服务器发送无限的查询请求 (请在另一个终端中运行以下命令)

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 负载升高,达到了223%,Deployment 的副本数量已经增长到了 5
在这里插入图片描述几分钟后,副本数稳定下来,并且cpu占用率在100m左右

[root@server2 hpa]# kubectl top pod --use-protocol-buffers
NAME                                CPU(cores)   MEMORY(bytes) 
php-apache-6cc67f7957-2tttg         103m         9Mi             
php-apache-6cc67f7957-8tpxs         82m          8Mi             
php-apache-6cc67f7957-9k9rw         83m          14Mi            
php-apache-6cc67f7957-l2mmw         90m          14Mi            
php-apache-6cc67f7957-scngw         108m         11Mi            
php-apache-6cc67f7957-xxkzc         105m         9Mi  

企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第1张图片

停止负载

在创建 busybox 容器的终端中,输入 + C 来终止负载的产生

自动扩缩完成副本数量的改变可能需要几分钟的时间
可以看到TARGETS已经变为0%
在这里插入图片描述
在这里插入图片描述

Helm

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

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

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

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

Helm安装

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

每个Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。
下载 需要的版本https://github.com/helm/helm/releases
解压(tar -zxvf helm-v3.x.x-linux-amd64.tar.gz)
在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm

设置helm命令补齐

echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc

chart库

  • 搜索官方helm hub chart库

      helm search hub chartname
    
  • Helm 添加第三方 Chart 库

从 Artifact Hub 中查找并列出 helm charts
企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第2张图片

$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/nginx

可以通过以下命令查看添加的

helm repo list

在这里插入图片描述
helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
在这里插入图片描述

创建chart库

构建一个 Helm Chart

helm create mychart

在这里插入图片描述
进入mychart目录,编写values.yaml文件,repository: myapp,tag: “v1”
企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第3张图片
检查依赖和模板配置是否正确

helm  lint mychart/

在这里插入图片描述
将目录打包

在这里插入图片描述

在harbor创建本地chart仓库
企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第4张图片

安装push插件
helm-push_0.8.1_linux_amd64.tar.gz这个包可以在helm官网下载

离线安装
$ helm env	//获取插件目录
$ mkdir ~/.local/share/helm/plugins/push
$ tar zxf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/shar/helm/plugins/push
$ helm push --help

添加本地仓库repo,名字为westos,路径为harbor仓库路径,charprepo这个必须加,固定格式
出现error,x509错误,显示认证不通过

[root@server2 helm]# helm repo  add  westos https://reg.westos.org/chartrepo/charts
Error: looks like "https://reg.westos.org/chartrepo/charts" is not a valid chart repository or cannot be reached: Get "https://reg.westos.org/chartrepo/charts/index.yaml": x509: certificate signed by unknown authority

将认证文件 /etc/docker/certs.d/reg.westos.org/ca.crt 复制到 /etc/pki/ca-trust/source/anchors/,执行更新命令 update-ca-trust,这是之前做harbor仓库时候弄的认证

再次添加,成功
在这里插入图片描述
应用上传

push 到repo为westos -u 账号 -p 密码

helm push  mychart-0.1.0.tgz  westos  --insecure -u admin -p westos

在这里插入图片描述企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第5张图片
上传应用后要更新helm repo,可以查找到mychart

helm repo update

企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第6张图片
直接安装这个chart

helm install mychart westos/mychart

企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第7张图片查看部署的pod,测试,是我们写入的myapp v1

[root@server2 helm]# kubectl  get pod -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
mychart-6675bd6ffd-nnshw   1/1     Running   0          25s   10.244.3.106   server3   <none>           <none>
[root@server2 helm]# curl 10.244.3.106
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

版本升级

进入mychart目录

vim Chart.yaml 修改版本号
在这里插入图片描述
vim values.yaml 修改镜像的版本号
企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第8张图片
检测
在这里插入图片描述
打包,生成新的tgz包
在这里插入图片描述
上传

helm push mychart-0.2.0.tgz westos -u admin -p westos --insecure

在这里插入图片描述
更新repo,查询mychart,默认显示最新版本,如果想要看所有版本,后面加参数-l
企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第9张图片
更新

helm upgrade  mychart  westos/mychart 

当前部署mychart自动升级至0.2.0 v2版本

测试:可以看到已经升级到了v2
企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路_第10张图片
卸载

helm uninstall mychart

在这里插入图片描述

你可能感兴趣的:(企业运维实战,k8s,运维,linux,kubernetes)