k8s 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信息为国内可以访问的镜像仓库,然后执行:
[root@node-1 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
[root@node-1 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>,查看下文中的故障排查:
[root@node-1 ~]# 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地址。
查看资源监控信息:
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 42%/50% 1 8 1 1h
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 491%/50% 1 8 4 1h
查看对应的对象创建情况,正在陆续创建:
[root@node-1 hpa-test]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
php-apache 4 4 4 2 1h
[root@node-1 hpa-test]# kubectl get rs
NAME DESIRED CURRENT READY AGE
php-apache-56b5765b95 4 4 2 1h
[root@node-1 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使用率下降后,自动缩容:
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 8 1 1h
[root@node-1 hpa-test]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
php-apache 1 1 1 1 1h
[root@node-1 hpa-test]# kubectl get rs
NAME DESIRED CURRENT READY AGE
php-apache-56b5765b95 1 1 1 1h
[root@node-1 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后,出现如下无法获取资源状态的情况:
[root@node-1 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 \
...
实例配置:
[root@pressure-master03 ~]# kubectl autoscale deployment mall-audit-provider -n x****ssure --min=1 --max=8 --cpu-percent=50
horizontalpodautoscaler.autoscaling/mall-audit-provider autoscaled
[root@pressure-master03 ~]# kubectl autoscale deployment mall-basic-provider -n x****sure --min=1 --max=8 --cpu-percent=50
horizontalpodautoscaler.autoscaling/mall-basic-provider autoscaled [root@pressure-master03 ~]# kubectl get hpa -n x*****ure
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
ma****-api Deployment/mall-app-api 1%/50% 1 8 2 4m29s
mall****ovider Deployment/mall-audit-provider 1%/50% 1 8 1 4m10s
k8s Pod 扩容和缩容的更多相关文章
- Kubernetes 笔记 11 Pod 扩容与缩容 双十一前后的忙碌
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- Kubernetes 笔记 012 Pod 的自动扩容与缩容
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- 023.掌握Pod-Pod扩容和缩容
一 Pod的扩容和缩容 Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过执行kubectl scale命令或通过RESTful API对一个Deployment/RC进行 ...
- Kubernetes---Pod的扩容和缩容
用RC的Scale机制来实现Pod的扩容和缩容 把redis-slave的pod扩展到3个 , kubectl scale rc redis-slave --replicas=3 现在来缩容,把 ...
- Docker Kubernetes 容器扩容与缩容
Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...
- docker微服务部署之:七、Rancher进行微服务扩容和缩容
docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...
- Redis Cluster 自动化安装,扩容和缩容
Redis Cluster 自动化安装,扩容和缩容 之前写过一篇基于python的redis集群自动化安装的实现,基于纯命令的集群实现还是相当繁琐的,因此官方提供了redis-trib.rb这个工具虽 ...
- 生产调优4 HDFS-集群扩容及缩容(含服务器间数据均衡)
目录 HDFS-集群扩容及缩容 添加白名单 配置白名单的步骤 二次配置白名单 增加新服务器 需求 环境准备 服役新节点具体步骤 问题1 服务器间数据均衡 问题2 105是怎么关联到集群的 服务器间数据 ...
- LVM逻辑卷扩容、缩容
LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理. 后期出现问题恢复数据也比较麻烦. 概念: ①PE(P ...
随机推荐
- Spring Boot-初学01 -使用Spring Initializer快速创建Spring Boot项目 -@RestController+spEL -实现简单SpringBoot的Web页面
1.IDEA:使用 Spring Initializer快速创建项目 IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目: 选择我们需要的模块:向导会联网创建Spring ...
- 项目Alpha冲刺(团队)-第九天冲刺
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队) 团队名称:为了交项目干杯 作业目标:描述第九天冲刺的项目进展.问题困难.心得体会 队员姓名与学号 队员学号 ...
- CPU 的三大架构 —— numa smp mpp
SMP 模式 SMP模式将多个处理器与一个集中的存储器相连.在SMP模式下,所有处理器都可以访问同一个系统物理存储器,这就意味着SMP系统只运行操作系统的一个拷贝. 因此SMP系统有时也被称为一致存储 ...
- Python的私有变量与装饰器@property的用法
Python的私有变量是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下 ...
- Lightning Web Components 来自salesforce 的web 组件化解决方案
Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...
- ShardingSphere初探1 -- 概览
知道这个框架是通过一期QQ课堂 https://shardingsphere.apache.org 官网 https://github.com/apache/incubator-shardingsph ...
- 第12组 Alpha事后诸葛亮
Header 组长博客 Postmortem 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 要解决的是喜欢记录分享旅游生活的人群的行迹记录和分享问题, ...
- PHP strtok() 函数
我们仅在第一次调用 strtok() 函数时使用了 string 参数.在首次调用后,该函数仅需要 split 参数,这是因为它清楚自己在当前字符串中所在的位置. 如需分割一个新的字符串,请再次调用带 ...
- 地址栏从url输入到页面显示
本文链接:https://blog.csdn.net/MiemieWan/article/details/85708052地址栏输入url, 要通过dns解析(浏览器是不能识别url地址的,需解析成i ...
- MySQL 自动插入、更新时间戳
在 MySql 中,要做到自动出入当前时间戳,只要在定义表格时将字段的默认值设置为 CURRENT_TIMESTAMP 即可. 如: create table if not exists my_tab ...