华润置地建设事业部官方网站,专业的网站建设服务,国际网络交易平台,官网百度HPA
pod的数量进行扩缩容
针对控制器创建的pod
deployment#xff1a;
replica#xff1a;
静态#xff1a;edit
yaml#xff1a;apply -f
HPA#xff1a;基于cpu的利用率来实现pod数量的自动伸缩。
Horizontal pod autoscaling
yaml文件————主流——————…HPA
pod的数量进行扩缩容
针对控制器创建的pod
deployment
replica
静态edit
yamlapply -f
HPA基于cpu的利用率来实现pod数量的自动伸缩。
Horizontal pod autoscaling
yaml文件————主流——————必须要有资源控制这个字段才能生效。
命令行 生成hpa的配置
比要条件
前置比要条件控制创建而且必须能设置副本数
配置的必要条件必须要声明pod的资源控制。
依赖环境
metrices-server hpa使用的依赖环境。k8s使用集群资源的集中查询器。收集资源使用数据给HPAscheduller等等使用
echo 1 /proc/sys/vm/drop_caches # 释放页面缓存
echo 2 /proc/sys/vm/drop_caches # 释放目录项和inode缓存
echo 3 /proc/sys/vm/drop_caches # 释放所有缓存 [rootmaster01 hpa]# vim hpa.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hpa-test1labels:hpa: test1
spec:replicas: 1selector:matchLabels:hpa: test1template:metadata:labels:hpa: test1spec:containers:- name: centosimage: centos:7command: [/bin/bash, -c, yum install -y epel-release --nogpgcheck yum install -y stress --nogpgcheck sleep 3600]volumeMounts:- name: yum1mountPath: /etc/yum.repos.d/resources:limits:cpu: 1memory: 512Mivolumes:- name: yum1hostPath:path: /etc/yum.repos.d
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-centos1
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: hpa-test1
#就是用来匹配需要监控器类型和名称
#资源占用率高要扩容扩容的数量
#资源占用率低要缩容最小的保持数量
#定义扩缩容的指标阈值。minReplicas: 1maxReplicas: 6targetCPUUtilizationPercentage: 50
#占用50%的cpu
[rootmaster01 nginx1]# kubectl top node node01
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node01 328m 16% 1938Mi 52%
[rootmaster01 hpa]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-centos2 StatefulSet/hpa-test1 0%/50% 1 6 2 2m13s
nginx1 Deployment/nginx1 1%/80% 1 6 1 64m 扩容和缩容的速度
扩容是一旦达到阈值会立即扩容。
缩容的速度会相对较慢。
为了保证pod的正常工作扩容必须要快。
缩容的时候为了保证pod的资源突然又变大了可以继续维持pod的数量。在一定时间之内pod占用的资源维持在了较低的比率然后开始慢慢缩容。 对命名空间做资源限制
[rootmaster01 hpa]# vim ns.yaml
apiVersion: v1
kind: ResourceQuota
metadata:name: ns-xy102namespace: xy102
#对指定的命名空间进行资源限制
spec:hard:pods: 20
#设置该命名空间可以创建pod的最大数量requests.cpu: 2
#只能使用2个cpurequests.memory: 1Gi
#只能使用1个G的内存limits.cpu: 3limits.memory: 2Gi
#limits是最多能使用多少configmaps: 10
#创建configmap的数量限制persistentvolumeclaims: 4
#创建pvc请求的限制secrets: 10
#创建加密配置文件的限制services: 10
#创建service的限制
[rootmaster01 hpa]# kubectl apply -f ns.yaml
resourcequota/ns-xy102 created
[rootmaster01 hpa]# kubectl describe namespaces xy102
Name: xy102
Labels: none
Annotations: none
Status: Active
Resource QuotasName: ns-xy102Resource Used Hard-------- --- ---configmaps 1 10limits.cpu 0 3limits.memory 0 2Gipersistentvolumeclaims 0 4pods 0 20requests.cpu 0 2requests.memory 0 1Gisecrets 1 10services 0 10
No LimitRange resource.
limitRange
只要是创建在这个命令空间的pod。都会根据limitRange的配置来对所有的pod进行统一的资源限制
[rootmaster01 hpa]# vim limitRange.yaml
apiVersion: v1name: xy102-limit
apiVersion: v1
kind: LimitRange
metadata:name: xy102-limitnamespace: xy102
#指定命名空间
spec:limits:- default:
#直接加default就相当于是上限memory: 1Gicpu: 4defaultRequest:
#这个就是软限制memory: 1Gicpu: 4type: Container
#指定类型Container pod pvc
[rootmaster01 hpa]# kubectl describe namespaces xy102
Name: xy102
Labels: none
Annotations: none
Status: Active
Resource QuotasName: ns-xy102Resource Used Hard-------- --- ---configmaps 1 10limits.cpu 0 3limits.memory 0 2Gipersistentvolumeclaims 0 4pods 0 20requests.cpu 0 2requests.memory 0 1Gisecrets 1 10services 0 10
Resource LimitsType Resource Min Max Default Request Default Limit Max Limit/Request Ratio---- -------- --- --- --------------- ------------- -----------------------Container memory - - 1Gi 1Gi -Container cpu - - 4 4 -
helm
nginx ingress
deployment
svc
ingress heml提供了一个模板可以一键化的部署微服务。
通过打包的方式把所有需要的yaml文件集合一起然后一键部署。
可以支持回滚。
heml
k8s的部署可以配置可以集成可以动态修改
三个概念
Chart部署安装k8s微服务的模板。类似于linux里面的rpm包。
Repository仓库仓库用来保存Chart
Release当我们使用chart部署微服务时。每部署一次就会有一个Release。(理解为版本号)
[rootmaster01 opt]# rz -E
rz waiting to receive.
[rootmaster01 opt]# tar -xf helm-v3.10.0-linux-amd64.tar.gz
[rootmaster01 opt]# ls
linux-amd64
[rootmaster01 opt]# cd linux-amd64/
[rootmaster01 linux-amd64]# mv helm /usr/local/bin/
[rootmaster01 linux-amd64]# vim /etc/profile
source (kubectl completion bash)
[rootmaster01 linux-amd64]# source /etc/profile
#安装仓库和模板
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator
###上面这几个在master命令行输入
#更新当前所有仓库的chart
[rootmaster01 linux-amd64]# helm show chart aliyun/nginx-lego
###查看chart的详情
[rootmaster01 linux-amd64]# helm repo remove aliyun
[rootmaster01 linux-amd64]# helm install redis1 stable/redis -n default
###用helm创建redis的pod
[rootmaster01 linux-amd64]# helm uninstall redis1
release redis1 uninstalled
###删除helm创建的pod 使用helm的yaml模板
[rootmaster01 opt]# mkdir helm
[rootmaster01 opt]# cd helm/
[rootmaster01 helm]# helm create nginx1
Creating nginx1
[rootmaster01 helm]# yum -y install tree
[rootmaster01 helm]# tree nginx1/
nginx1/
├── charts #依赖环境一般为空也不需要
├── Chart.yaml #包含chart的元信息chart的版本名称等等
├── templates #包含了部署k8s的应用pod的模板文件
│ ├── deployment.yaml #基于控制器
│ ├── _helpers.tpl
│ ├── hpa.yaml #做hpa的监控自动伸缩
│ ├── ingress.yaml #对外访问
│ ├── NOTES.txt
│ ├── serviceaccount.yaml #创建服务账号
│ ├── service.yaml #创建service的清单
│ └── tests
│ └── test-connection.yaml
└── values.yaml #我们的配置在values里面完成集合在了这个配置里面当配置完成之后可以通过values配置把参数传给 template里面的模板文件进行覆盖。
3 directories, 10 files
[rootmaster01 nginx1]# vim values.yaml
replicaCount: 3 ##更改副本数
tag: 1.22
#tag:使用镜像的版本号不改默认最新
ingress:enabled: true
hosts:- host: www.xy102.compaths:- path: /pathType: Prefix
resources:limits:cpu: 100mmemory: 128Mi# requests:# cpu: 100m# memory: 128Mi
autoscaling:enabled: trueminReplicas: 1maxReplicas: 6targetCPUUtilizationPercentage: 80 [rootmaster01 helm]# helm package nginx1/
Successfully packaged chart and saved it to: /opt/helm/nginx1-0.1.0.tgz
[rootmaster01 helm]# ls
nginx1 nginx1-0.1.0.tgz
[rootmaster01 helm]# helm install nginx1 /opt/helm/nginx1-0.1.0.tgz
#第一次部署release就是版本号版本号1