k8s---HPA

Horizontal Pod Autoscing:pod的水平自动伸缩,这是k8s自带的模块

pod占用cpu比率到达一定的阀值,会触发伸缩机制

replication controller 副本控制器 pod的副本数

deployment controller 节点控制器 部署pod

hpa控制数量以及控制部署pod

1、hpa基于kube-controll-manager服务,周期的检测pod的cpu使用率 默认30秒

2、hpa和replication controller,deployment controller,都属于k8s的资源对象,通过跟踪分析副本控制器和deployment的pod负载变化,针对性地调整目标pod的副本数

复制代码
阀值:正常情况下,pod的副本数,以及达到阀值之后,pod的扩容最大数量

3、metrics-server 部署到集群中,对外提供度量的数据

复制代码
把写好的yaml文件拖到opt目录下
运行
kubectl apply -f components.yaml

查看
kubectl get pod -n kube-system 
NAME                               READY   STATUS    RESTARTS   AGE
coredns-7f89b7bc75-bfs8z           1/1     Running   0          11m
coredns-7f89b7bc75-dx2qz           1/1     Running   1          25d
etcd-master01                      1/1     Running   3          25d
kube-apiserver-master01            1/1     Running   2          7d17h
kube-controller-manager-master01   1/1     Running   5          25d
kube-flannel-ds-btmh8              1/1     Running   1          25d
kube-flannel-ds-plv26              1/1     Running   4          25d
kube-flannel-ds-qjkv2              1/1     Running   2          25d
kube-proxy-46rbj                   1/1     Running   3          25d
kube-proxy-khngm                   1/1     Running   1          25d
kube-proxy-lq8lh                   1/1     Running   2          25d
kube-scheduler-master01            1/1     Running   6          25d
metrics-server-55b9df7b6-95b7d     1/1     Running   0          4m1s
metrics-server-55b9df7b6-9ffjz     1/1     Running   0          4m1s
metrics-server-55b9df7b6-c9sfz     1/1     Running   0          4m1s

查看node节点使用情况
kubectl top node
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master01   147m         3%     2143Mi          58%       
node01     60m          1%     490Mi           13%       
node02     73m          1%     2046Mi          55%  
HPA的规则

1、定义pod的时候必须要有资源限制,否则HPA无法进行监控

2、扩容是即时的,只要超过阀值会立刻扩容,不是立刻扩容到最大副本数,他会在最小值和最大值波动,如果扩容的数量满足了需求,不会在扩容

3、缩容是缓慢的,如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃,缩容的速度是比较慢的

周期性的获取数据,缩容的机制问题

pod的副本扩缩容有两种方式

1、手动方式,修改控制器的副本数

复制代码
kubectl scale deployment nginx1 --replicas=4

修改yaml文件,apply -f部署更新

2、自动扩缩容

复制代码
hpa hpa的监控的是cpu
资源限制

1、pod的资源限制

2、命名空间资源限制

lucky-cloud项目---部署在test1的命名空间,如果lucky-cloud不做限制,或者命名空间不做限制,他依然会占满所有集群资源

k8s集群部署pod的最大数量:10000

bustbox:就是最小化的cents 4M

有哪些服务会部署在k8s当中

复制代码
中间件:
kafka	6
Redis	3
业务服务:
自定义的镜像创建的容器
pluigs
前端:
nginx 3-6
mysql是实机部署

命名空间限制

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-name
  namespace: test1
  labels:
    test: centos2
spec:
  replicas: 1
  selector:
    matchLabels:
      test: centos2
  template:
    metadata:
      labels:
        test: centos2
    spec:
      containers:
        - name: centos1
          image: centos:7
          command: ["/bin/bash","-c","yum -y install epel-release; yum -y install stress; sleep 3600"]
          resources:
            limits:
              cpu: "1"
              memory: 512Mi
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: ns-resource
  namespace: test1
spec:
  hard:
    pods: "3"
    requests.cpu: "2"
    requests.memory: 1Gi
    limits.cpu: "4"
    limits.memory: 2Gi
    configmaps: "10"
#在当前名空间能创建最大的ConfigMap的数量10个
    persistentvolumeclaims: "4"
#当前命名空间只能使用4个pvc
    secrets: "9"
#创建加密的sercets,只能9个
    services: "5"
#创建service只能5个
    services.nodeports: "2"
#只能创nodeport,svc只能创建2个


kubectl describe ns test1 
Name:         test1
Labels:       <none>
Annotations:  <none>
Status:       Active

Resource Quotas
 Name:                   ns-resource
 Resource                Used   Hard
 --------                ---    ---
 configmaps              1      10
 limits.cpu              1      4
 limits.memory           512Mi  2Gi
 persistentvolumeclaims  0      4
 pods                    1      3
 requests.cpu            1      2
 requests.memory         512Mi  1Gi
 secrets                 1      9
 services                0      5
 services.nodeports      0      2

No LimitRange resource.

pod资源限制

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-pod
  namespace: test2
  labels:
    test: centos3
spec:
  replicas: 1
  selector:
    matchLabels:
      test: centos3
  template:
    metadata:
      labels:
        test: centos3
    spec:
      containers:
        - name: centos2
          image: centos:7
          command: ["/bin/bash","-c","yum -y install epel-release; yum -y install stress; sleep 3600"]
---
apiVersion: v1
kind: LimitRange
#表示使用limitrange来进行资源控制的类型
metadata:
  name: test1-limit
  namespace: test2
spec:
  limits:
  - default:
      memory: 512Mi
      cpu: "1"
    defaultRequest:
      memory: 256Mi
      cpu: "0.5"
    type: Container
#命名空间创建的pod进行限制,default:limit
#                           defaultRequest:Request
#type: Container pod

HPA自动扩缩容

命名空间

复制代码
第一种
ResourceQuota
可以对命名空间进行资源限制
第二种
LimitRange
直接声明在名空间当中创建的pod,容器的资源限制,这是一种统一限制,所有的pod都受这个条件的制约
pod资源限制 一般是我们创建的时候声明好的,必加选项

pod的资源限制

复制代码
resources:  limit

命名空间资源限制 对命名空间使用cpu和内存一定会做限制

复制代码
ResourceQuota
核心:防止整个集群的资源被一个服务或者一个命名空间占满
命名空间统一资源限制
LimitRange
相关推荐
问简4 小时前
docker 镜像相关
运维·docker·容器
Benszen5 小时前
Docker容器化技术实战指南
运维·docker·容器
Hommy886 小时前
【开源剪映小助手】Docker 部署
docker·容器·开源·github·aigc
斯普信云原生组7 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪8 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人8 小时前
docker compose部署kafka集群搭建
docker·容器·kafka
❀͜͡傀儡师9 小时前
k8s部署的Nexus 3 数据库损坏恢复指南:从删除损坏数据库到完整数据重建
数据库·kubernetes·nexus3
开心码农1号10 小时前
k8s中service和ingress的区别和使用
云原生·容器·kubernetes
张32310 小时前
K8s 不部署源代码、不构建应用
kubernetes
L16247610 小时前
Kubernetes 完整学习手册(1 主多从 + 纯 YAML 部署 + 访问原理)
学习·容器·kubernetes