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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐