HPA和helm

HPA

pod的数量进行扩缩容

针对控制器创建的pod

deployment:

replica:

静态:edit

yaml:apply -f

HPA:基于cpu的利用率来实现pod数量的自动伸缩。

Horizontal pod autoscaling

yaml文件------------主流------------------>必须要有资源控制这个字段才能生效。

命令行 生成hpa的配置

比要条件:

前置比要条件:控制创建,而且必须能设置副本数

配置的必要条件:必须要声明pod的资源控制。

依赖环境:

metrices-server hpa使用的依赖环境。k8s使用集群资源的集中查询器。收集资源使用数据,给HPA,scheduller等等使用

复制代码
echo 1 > /proc/sys/vm/drop_caches # 释放页面缓存 
echo 2 > /proc/sys/vm/drop_caches # 释放目录项和inode缓存 
echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存
复制代码
[root@master01 hpa]# vim hpa.yaml
​
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-test1
  labels:
    hpa: test1
spec:
  replicas: 1
  selector:
    matchLabels:
      hpa: test1
  template:
    metadata:
      labels:
        hpa: test1
    spec:
      containers:
      - name: centos
        image: centos:7
        command: ["/bin/bash", "-c", "yum install -y epel-release --nogpgcheck && yum install -y stress --nogpgcheck && sleep 3600"]
        volumeMounts:
        - name: yum1
          mountPath: /etc/yum.repos.d/
        resources:
          limits:
            cpu: "1"
            memory: 512Mi
      volumes:
      - name: yum1
        hostPath:
          path: /etc/yum.repos.d
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-centos1
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-test1
#就是用来匹配需要监控器类型和名称
#资源占用率高,要扩容,扩容的数量
#资源占用率低,要缩容,最小的保持数量
#定义扩缩容的指标,阈值。
  minReplicas: 1
  maxReplicas: 6
  targetCPUUtilizationPercentage: 50
#占用50%的cpu
​
[root@master01 nginx1]# kubectl top node node01 
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
node01   328m         16%    1938Mi          52%   
[root@master01 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占用的资源维持在了较低的比率,然后开始慢慢缩容。

对命名空间做资源限制:

复制代码
[root@master01 hpa]# vim ns.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: ns-xy102
  namespace: xy102
#对指定的命名空间进行资源限制
spec:
  hard:
    pods: "20"
#设置该命名空间可以创建pod的最大数量
    requests.cpu: "2"
#只能使用2个cpu
    requests.memory: 1Gi
#只能使用1个G的内存
    limits.cpu: "3"
    limits.memory: 2Gi
#limits是最多能使用多少
    configmaps: "10"
#创建configmap的数量限制
    persistentvolumeclaims: "4"
#创建pvc请求的限制
    secrets: "10"
#创建加密配置文件的限制
    services: "10"
#创建service的限制
​
[root@master01 hpa]# kubectl apply -f ns.yaml 
resourcequota/ns-xy102 created
[root@master01 hpa]# kubectl describe namespaces xy102 
Name:         xy102
Labels:       <none>
Annotations:  <none>
Status:       Active
​
Resource Quotas
 Name:                   ns-xy102
 Resource                Used  Hard
 --------                ---   ---
 configmaps              1     10
 limits.cpu              0     3
 limits.memory           0     2Gi
 persistentvolumeclaims  0     4
 pods                    0     20
 requests.cpu            0     2
 requests.memory         0     1Gi
 secrets                 1     10
 services                0     10
​
No LimitRange resource.

limitRange:

只要是创建在这个命令空间的pod。都会根据limitRange的配置来对所有的pod进行统一的资源限制

复制代码
[root@master01 hpa]# vim limitRange.yaml
​
apiVersion: v1
  name: xy102-limit
apiVersion: v1
kind: LimitRange
metadata:
  name: xy102-limit
  namespace: xy102
#指定命名空间
spec:
  limits:
  - default:
#直接加default就相当于是上限
      memory: 1Gi
      cpu: "4"
    defaultRequest:
#这个就是软限制
      memory: 1Gi
      cpu: "4"
    type: Container
#指定类型,Container  pod  pvc
​
[root@master01 hpa]# kubectl describe namespaces xy102 
Name:         xy102
Labels:       <none>
Annotations:  <none>
Status:       Active
​
Resource Quotas
 Name:                   ns-xy102
 Resource                Used  Hard
 --------                ---   ---
 configmaps              1     10
 limits.cpu              0     3
 limits.memory           0     2Gi
 persistentvolumeclaims  0     4
 pods                    0     20
 requests.cpu            0     2
 requests.memory         0     1Gi
 secrets                 1     10
 services                0     10
​
Resource Limits
 Type       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。(理解为版本号)

复制代码
[root@master01 opt]# rz -E
rz waiting to receive.
[root@master01 opt]# tar -xf helm-v3.10.0-linux-amd64.tar.gz
[root@master01 opt]# ls
linux-amd64
[root@master01 opt]# cd linux-amd64/
[root@master01 linux-amd64]# mv helm /usr/local/bin/
[root@master01 linux-amd64]# vim /etc/profile
source <(kubectl completion bash)
[root@master01 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
​
[root@master01 linux-amd64]# helm show chart aliyun/nginx-lego 
###查看chart的详情
​
[root@master01 linux-amd64]# helm repo remove aliyun
​
[root@master01 linux-amd64]# helm  install redis1 stable/redis -n default       
###用helm创建redis的pod
[root@master01 linux-amd64]# helm uninstall redis1 
release "redis1" uninstalled
###删除helm创建的pod
复制代码
使用helm的yaml模板
[root@master01 opt]# mkdir helm
[root@master01 opt]# cd helm/
[root@master01 helm]# helm create nginx1
Creating nginx1
[root@master01 helm]# yum -y install tree
[root@master01 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
复制代码
[root@master01 nginx1]# vim values.yaml 
replicaCount: 3  ##更改副本数
​
  tag: "1.22"
#tag:使用镜像的版本号,不改默认最新
​
ingress:
  enabled: true
​
​
  hosts:
    - host: www.xy102.com
      paths:
        - path: /
          pathType: Prefix
​
resources:
  limits:
    cpu: 100m
    memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi
​
autoscaling:
  enabled: true
  minReplicas: 1
  maxReplicas: 6
  targetCPUUtilizationPercentage: 80
复制代码
[root@master01 helm]# helm package nginx1/
Successfully packaged chart and saved it to: /opt/helm/nginx1-0.1.0.tgz
[root@master01 helm]# ls
nginx1  nginx1-0.1.0.tgz
[root@master01 helm]# helm install nginx1 /opt/helm/nginx1-0.1.0.tgz 
#第一次部署,release就是版本号,版本号1
相关推荐
昌sit!5 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
A ?Charis8 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
城南vision8 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge8 小时前
Docker篇(Docker Compose)
运维·docker·容器
北漂IT民工_程序员_ZG9 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
梦魇梦狸º12 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
鬼才血脉12 小时前
docker+mysql配置
mysql·adb·docker
詹姆斯爱研究Java12 小时前
Docker 的基本概念和优势
docker
南猿北者14 小时前
docker镜像仓库常用命令
运维·docker·容器