首先先将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!
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
在创建 busybox 容器的终端中,输入 + C 来终止负载的产生
自动扩缩完成副本数量的改变可能需要几分钟的时间
可以看到TARGETS已经变为0%
Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
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
echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc
搜索官方helm hub chart库
helm search hub chartname
Helm 添加第三方 Chart 库
从 Artifact Hub 中查找并列出 helm charts
$ 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 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
构建一个 Helm Chart
helm create mychart
进入mychart目录,编写values.yaml文件,repository: myapp,tag: “v1”
检查依赖和模板配置是否正确
helm lint mychart/
安装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
上传应用后要更新helm repo,可以查找到mychart
helm repo update
helm install mychart westos/mychart
[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 修改镜像的版本号
检测
打包,生成新的tgz包
上传
helm push mychart-0.2.0.tgz westos -u admin -p westos --insecure
更新repo,查询mychart,默认显示最新版本,如果想要看所有版本,后面加参数-l
更新
helm upgrade mychart westos/mychart
当前部署mychart自动升级至0.2.0 v2版本
helm uninstall mychart