Pod 扩容和缩容

在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现。
Kubernetes支持对Pod的手动扩容和自动扩容。

手动扩容缩容

通过执行扩容命令,对某个deployment直接进行扩容:

# kubectl  scale deployment nginx-deployment --replicas=4

当要缩容,减少副本数量即可:

# kubectl  scale deployment nginx-deployment --replicas=2

自动扩容缩容

在使用自动化扩容和缩容,需要kubernetes安装heapster插件。
参考链接

按照说明,修改如下YAML文件中的image信息为国内可以访问的镜像仓库,然后执行:

[[email protected] influxdb]# ll
total 16
-rw-r--r-- 1 root root 2288 Jun 21 20:23 grafana.yaml
-rw-r--r-- 1 root root  264 Jun 21 20:24 heapster-rbac.yaml     # 来源于上一级rbac目录
-rw-r--r-- 1 root root 1112 Jun 21 20:24 heapster.yaml
-rw-r--r-- 1 root root  972 Jun 21 20:24 influxdb.yaml

[[email protected] influxdb]# kubectl  create -f  ./

安装完成之后,使用如下链接可以访问Grafana的web界面,查看资源使用情况:

https://10.0.0.1:6443/api/v1/namespaces/kube-system/services/http:monitoring-grafana:/proxy/

在kubernetes 1.11以后的版本中将不再使用heapster插件来监控资源的使用状态,而是使用metric server。

创建php-apche的deployment的应用和Service,当访问此应用时,返回“OK!”:

# cat php-apache.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
  labels:
    app: php-apache
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php-apache
  template:
    metadata:
      name: php-apache
      labels:
        app: php-apache
    spec:
      containers:
      - name: php-apache
        image: mirrorgooglecontainers/hpa-example
        resources:
          requests:
            cpu: 200m
        ports:
        - containerPort: 80

# cat php-svc.yaml 

apiVersion: v1
kind: Service
metadata:
  name: php-apache
spec:
  ports:
  - port: 80
  selector:
    app: php-apache

创建一个busybox的工具Pod,用于做压力测试:

# cat php-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: php-apache
spec:
  ports:
  - port: 80
  selector:
    app: php-apache

创建完以上对象,还需要创建一个HPA控制器,用于监控对象的资源使用率:

kubectl autoscale deployment php-apache --min=1 --max=6 --cpu-percent=50

# 对php-apache的deployment的对象创建HPA控制器,当CPU的使率超过50%时实现自动化扩容,支持1到6之前Pod副本数量,以使得Pod CPU使用率维持在50% 以内。

查看当前hpa的状态,如果状态显示<unknown>,查看下文中的故障排查:

[[email protected] ~]# kubectl  get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         8         1          39m

登录busybox,执行循环访问命令,对php-apache进行压测:

# kubectl  exec -it busybox -- sh

/ # while true;do wget -q -O -  http://php-apache > /dev/null ;done

# 此处如果DNS没有正常工作将无法正常解析URL地址。

查看资源监控信息:

[[email protected] hpa-test]# kubectl  get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   42%/50%   1         8         1          1h

[[email protected] hpa-test]# kubectl  get hpa
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   491%/50%   1         8         4          1h

查看对应的对象创建情况,正在陆续创建:

[[email protected] hpa-test]# kubectl  get deployment
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
php-apache   4         4         4            2           1h
[[email protected] hpa-test]# kubectl  get rs
NAME                    DESIRED   CURRENT   READY     AGE
php-apache-56b5765b95   4         4         2         1h
[[email protected] hpa-test]# kubectl  get pod
NAME                          READY     STATUS              RESTARTS   AGE
busybox                       1/1       Running             0          36m
php-apache-56b5765b95-8pclp   1/1       Running             0          1h
php-apache-56b5765b95-gsvqk   1/1       Running             0          1m
php-apache-56b5765b95-nbwbk   1/1       Running             0          1m
php-apache-56b5765b95-zmc29   0/1       ContainerCreating   0          1m

当CPU使用率下降后,自动缩容:

[[email protected] hpa-test]# kubectl  get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         8         1          1h

[[email protected] hpa-test]# kubectl  get deployment
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
php-apache   1         1         1            1           1h

[[email protected] hpa-test]# kubectl  get rs
NAME                    DESIRED   CURRENT   READY     AGE
php-apache-56b5765b95   1         1         1         1h

[[email protected] hpa-test]# kubectl  get pod
NAME                          READY     STATUS    RESTARTS   AGE
busybox                       1/1       Running   0          43m
php-apache-56b5765b95-8pclp   1/1       Running   0          1h
故障排查

如果设置hpa后,出现如下无法获取资源状态的情况:

[[email protected] hpa-test]# kubectl  get  hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/50%   1         8         1          9m

在master上修改kube-controller-manager的配置,添加如下参数:

cat /usr/lib/systemd/system/kube-controller-manager.service
...

--horizontal-pod-autoscaler-use-rest-clients=false ...

或者使用新版的metric server 。这里暂时不介绍,可参考 https://github.com/kubernetes-incubator/metrics-server/

原文地址:http://blog.51cto.com/tryingstuff/2132547

时间: 2024-07-29 17:19:18

Pod 扩容和缩容的相关文章

Docker Kubernetes 容器扩容与缩容

Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 创建环境: 1.Deployment名称:nginx-deployment 2.pods副本数为:3  3.image镜像:nginx1.9 管理节点:扩容或缩容deploymnet的pod副本数. kubectl scale

K8s资源对象的基本管理(升级、回滚、扩容、缩容)

博文大纲:一.资源创建二.解决客户端无法访问k8s内部pod所运行的服务三.搭建私有仓库,并自定义镜像四.版本扩容.缩容五.服务的升级与回滚 一.资源创建 本次博文主要介绍如何使用命令行的方式创建资源! [[email protected] ~]# kubectl run test --image=nginx:latest --replicas=5 //基于httpd的镜像创建一个deployment类型的控制组,名称为test,并指定副本数量为5 [[email protected] ~]#

Hadoop集群动态扩容、缩容

一. Hadoop集群动态扩容.缩容 随着公司业务的增长,数据量越来越大,原有的datanode节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点.也就是俗称的动态扩容. 有时候旧的服务器需要进行退役更换,暂停服务,可能就需要在当下的集群中停止某些机器上hadoop的服务,俗称动态缩容. 1. 动态扩容 1.1. 基础准备 在基础准备部分,主要是设置hadoop运行的系统环境 修改新机器系统hostname(通过/etc/sysconfig/network进行修改)

OpenMediaVault 5 进阶配置(七) LVM 扩容或缩容

前言 本文紧接着前文 OpenMediaVault 5 进阶配置(六) 配置 LVM 逻辑卷管理器 ,来讲述如何以 LVM 逻辑卷为基础建立虚拟硬盘,方便的实现扩容或缩容,而不用将原本的数据进行大量迁移. 由于本文所述操作可能会涉及重要数据,在进行所有操作之前,备份好你的所有重要数据. 扩容 LVM 卷组扩容 点击 "存储器 -> Logical Volume Management(逻辑卷管理) -> Volume groups" ,选中要扩容的卷组,点击 "Ex

LVM的创建、扩容与缩容

创建LVM 1.创建PV # pvcreate /dev/sd{b,c,d}1 # pvs 查看逻辑卷简单信息 # pvdisplay  查看逻辑卷的详细信息 2.创建VG # vgcreate -s 16M /dev/sd{b,c,d}1 # vgs  查看卷组的简单信息 # vgdisplay 查看卷组的详细信息 3.创建LV # lvcreate -n lv0 -L 20G vg0    (-L 20G 增加至20G,-L +20G 增加20G) # lvs  查看逻辑卷的简单信息 # l

Linux -lvm -扩容、缩容逻辑卷(针对ext4)

扩容不会丢失文件 lvresize -L 200M /dev/vg1/lv1 重新设置卷大小注意:先卸载,再重新设置大小e2fsck -f /dev/vg1/lv1 检查磁盘错误 (ext4执行)resize2fs /dev/vg1/lv1 更新逻辑卷信息(执行)xfs_growfs /dev/vg1/lv1 xfs文件系统需要执行 缩容逻辑卷1.先umount umount /mnt e2fsck -f /dev/vg1/lv1 检查磁盘错误(ext) resize2fs /dev/vg1/l

Linux LVM扩容和缩容

将原硬盘上的LVM分区/dev/mapper/RHEL-Data由原来的60G扩展到80G Step1:将LVData扩容+20G,如下图: [[email protected] data]# lvextend -L +20G /dev/RHEL/Data Size of logical volume RHEL/Data changed from 60.00 GiB (15360 extents) to 80.00 GiB (20480 extents). Logical volume RHEL

Linux -lvm -扩容、缩容逻辑卷(针对xfs)

xfs不支持缩容,不需要卸载 格式化:mkfs.xfs -f /dev/vg1/lv1,再挂载 mount /dev/vg1/lv1 /mnt lvresize -L 300M /dev/vg1/lv1 重新设置卷大小这时候,df -h 发现大小并未变化.扔需要下述操作: xfs_growfs /dev/vg1/lv1 xfs文件系统需要执行 原文地址:http://blog.51cto.com/13451715/2296076

k8s资源对象的升级、回滚、扩容、缩容

一.资源创建的方式之一,命令的方式创建资源,理解命令运行之后的动作,通过查看资源的方式,总结Pod名称的由来. 当我们执行创建资源的命令后,deployment这个控制器会通过replicaset控制器去管理pod,下面通过一个实例来分析,当我们执行创建资源的命令后,k8s都做了些什么(通过其NAME即可发现规律)? 运行一个deployment [[email protected] ~]# kubectl run test01 --image=nginx:latest --replicas=2