kubernetes(三)

文章目录

    • 1. k8s弹性伸缩
      • 1.1 安装heapster监控
      • 1.2 弹性伸缩使用和验证
    • 2. 持久化存储
      • 2.1 emptyDir

1. k8s弹性伸缩

k8s弹性伸缩,需要附加插件heapster

1.1 安装heapster监控

在这里插入图片描述
使用heapster(低版本)可以监控pod压力大不大
使用hpa调节pod数量,自动扩容或者缩容

在这里插入图片描述

1.先去连接api-server,然后拿到node节点的信息
2. 再去node节点监控取值,把值存储到数据库
3. 然后用grafana出图,可以用dashboard调用

开始安装heapster监控:

批量导入镜像:
[root@k8s-node-2 heapster]# for image in `ls *.tar.gz`; do docker load -i $image; done
[root@k8s-node-2 heapster]# docker tag docker.io/kubernetes/heapster_grafana:v2.6.0 10.0.0.11:5000/heapster_grafana:v2.6.0 
[root@k8s-node-2 heapster]# docker tag docker.io/kubernetes/heapster_influxdb:v0.5 10.0.0.11:5000/heapster_influxdb:v0.5
[root@k8s-node-2 heapster]# docker tag docker.io/kubernetes/heapster:canary 10.0.0.11:5000/heapster:canary编写资源清单:
(1)"grafana-service.yaml"资源清单
[root@k8s-master heapster]# cat grafana-service.yaml 
apiVersion: v1
kind: Service
metadata:labels:kubernetes.io/cluster-service: 'true'kubernetes.io/name: monitoring-grafananame: monitoring-grafananamespace: kube-system
spec:ports:- port: 80targetPort: 3000selector:name: influxGrafana(2)"heapster-controller.yaml"资源清单
[root@k8s-master heapster]# cat heapster-controller.yaml 
apiVersion: v1
kind: ReplicationController
metadata:labels:k8s-app: heapstername: heapsterversion: v6name: heapsternamespace: kube-system
spec:replicas: 1selector:k8s-app: heapsterversion: v6template:metadata:labels:k8s-app: heapsterversion: v6spec:nodeName: 10.0.0.13containers:- name: heapsterimage: 10.0.0.11:5000/heapster:canaryimagePullPolicy: IfNotPresentcommand:- /heapster- --source=kubernetes:http://10.0.0.11:8080?inClusterConfig=false# monitoring-influxdb依赖dns配置,必须要安装k8s的dns- --sink=influxdb:http://monitoring-influxdb:8086(3)"heapster-service.yaml"资源清单
[root@k8s-master heapster]# cat heapster-service.yaml 
apiVersion: v1
kind: Service
metadata:labels:kubernetes.io/cluster-service: 'true'kubernetes.io/name: Heapstername: heapsternamespace: kube-system
spec:ports:- port: 80targetPort: 8082selector:k8s-app: heapster(4)"influxdb-grafana-controller.yaml"清单
[root@k8s-master heapster]# cat influxdb-grafana-controller.yaml 
apiVersion: v1
kind: ReplicationController
metadata:labels:name: influxGrafananame: influxdb-grafananamespace: kube-system
spec:replicas: 1selector:name: influxGrafanatemplate:metadata:labels:name: influxGrafanaspec:nodeName: 10.0.0.13containers:- name: influxdbimage: 10.0.0.11:5000/heapster_influxdb:v0.5volumeMounts:- mountPath: /dataname: influxdb-storage- name: grafanaimage: 10.0.0.11:5000/heapster_grafana:v2.6.0env:- name: INFLUXDB_SERVICE_URLvalue: http://monitoring-influxdb:8086- name: GF_AUTH_BASIC_ENABLEDvalue: "false"- name: GF_AUTH_ANONYMOUS_ENABLEDvalue: "true"- name: GF_AUTH_ANONYMOUS_ORG_ROLEvalue: Admin- name: GF_SERVER_ROOT_URLvalue: /api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/volumeMounts:- mountPath: /varname: grafana-storagevolumes:- name: influxdb-storageemptyDir: {}- name: grafana-storageemptyDir: {}(5)"influxdb-service.yaml"资源清单
[root@k8s-master heapster]# cat influxdb-service.yaml 
apiVersion: v1
kind: Service
metadata:labels: nullname: monitoring-influxdbnamespace: kube-system
spec:ports:- name: httpport: 8083targetPort: 8083- name: apiport: 8086targetPort: 8086selector:name: influxGrafana# 进行验证
[root@k8s-master heapster]# kubectl apply -f .
[root@k8s-master heapster]# kubectl get all -n kube-system
## 多了heapter和grafana服务
[root@k8s-master heapster]# kubectl cluster-info

1.2 弹性伸缩使用和验证

(1) 编写一个deployment资源和svc资源实现访问

[root@k8s-master deployment]# cat 01-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: nginx
spec:replicas: 2template:metadata:labels:app: dk-nginxspec:containers:- name: nginximage: 10.0.0.11:5000/nginx:1.13ports:- containerPort: 80resources:limits:cpu: 100mmemory: 50Mrequests:cpu: 100mmemory: 50M[root@k8s-master svc]# cat k8s_svc.yaml
apiVersion: v1
kind: Service  # 简称svc
metadata:name: myweb
spec:type: NodePort  # 默认类型为ClusterIPports:- port: 80  # clusterVIP端口nodePort: 30000  # 指定基于NodePort类型对外暴露的端口,若不指定,则会在"30000-32767"端口访问内随机挑选一个未监听的端口暴露targetPort: 80  # 指定后端Pod服务监听的端口selector:app: ycy-web  # 指定匹配的Pod对应的标签

(2)生成一个hpa资源

# 1. 命令行的形式生成,在内存中有hpa的yaml,--max:指定最大的Pod数量, --min:指定最小的Pod数量,  --cpu-percent:指定CPU的百分比
[root@k8s-master k8s_yaml]#  kubectl autoscale deployment nginx --max=10 --min=1 --cpu-percent=10# 2. 导出刚刚设置的hpa的yaml[root@k8s-master k8s_yaml]# kubectl get hpa nginx -o yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: nginxnamespace: default
spec:maxReplicas: 10minReplicas: 1scaleTargetRef:apiVersion: extensions/v1beta1kind: Deploymentname: nginxtargetCPUUtilizationPercentage: 10# (3) 查看hpa资源
[root@k8s-master k8s_yaml]# kubectl get all
[root@k8s-master k8s_yaml]# kubectl get rs -o wide
[root@k8s-master k8s_yaml]# kubectl get hpa nginx -o yaml
[root@k8s-master k8s_yaml]# kubectl describe hpa nginx
[root@k8s-master k8s_yaml]# kubectl describe deployment nginx

(3) 进行压测,验证是否自动伸缩

# 1. 安装ab压测工具
[root@k8s-master k8s_yaml]# yum install httpd-tools -y
# 2. -n 发起请求数  -c 并发数
[root@k8s-master k8s_yaml]# ab -n 10000 -c 2000  http://10.0.0.12:30148/

在这里插入图片描述

常用命令:

kubectl get all -n kube-system
kubectl cluster-info 
# 查看pod的资源使用情况
kubectl top -n default pod test-32rf5
# 删除对应的资源
kubectl delete rc --all
kubectl delete deploment --all
kubectl delete daemonset --all

2. 持久化存储

tomcat+mysql的案例中,Pod成功后可以添加自定义的数据,数据被存储在MySQL数据库实例中,批量删除容器,docker rm -f `docker ps -a -q,删除容器后,这些容器会被K8S重新创建,尽管业务恢复了,但我们的数据也丢失了。为了解决容器被删除后数据不丢失,则引入了存储类型,类似于docker中的数据卷

提示:以通过kubectl exec -it mysql-698607359-dvmzk bash进入到容器并通过"env"查看MySQL的root用户密码

数据卷的分类:

数据卷:(1)kubernetes中的Volume提供了在容器中挂载外部存储的能力;(2)Pod需要设置卷来源(po.spec.volumes)和挂载点(po.spec.containers.volumeMounts)两个信息后才可以使用相应的volume;数据卷类型大致分类:本地数据卷:hostPath,emptyDir等。网络数据卷:NFS,Ceph,GlusterFS等。公有云:AWS,EBS等;K8S资源:configmap,secret等。
官方文档: https://kubernetes.io/docs/concepts/storage/volumes/

2.1 emptyDir

查看帮助文档 kubectl explain pod.spec.containers.volumeMounts

emptyDir 临时的空目录,随着pod的生命周期,删掉pod,空目录内的内容也会小时,想实现数据共享就不能使用emptyDir资源,deploment 设置了三个pod,那么每个pod都会生成一个empty,所以多个Pod不能使用该类型进行数据共享,但同一个Pod的多个容器可以基于该类型进行数据共享。

使用场景:存放日志,pod与pod之间empty挂载不同的数据

spec:nodeName: 10.0.0.13volumes:- name: mysql-dataemptyDir: {}containers:- name: wp-mysqlimage: 10.0.0.11:5000/mysql:5.7imagePullPolicy: IfNotPresentports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt3.5和chatgpt4的区别

ChatGPT4是基于GPT-3模型的一个实例,但ChatGPT4已经进行了进一步的改进和优化。GPT-3(第三代生成式预训练模型)是OpenAl开发的一个大型语言模型,它在很多自然语言处理任务中表现出色。 ChatGPT4继承了GPT-3的基本架构和能力&…

清风数学建模笔记-聚类算法

K-maens算法: 算法的原理: 在论文中时,可以把一些可以流程化的算法的流程图加上去 优点: 缺点: 点容易受异常值的影响,且受影响较大 k-means算法: 使用SPSS进行聚类分析: S默认使用…

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1:R1-R2之间认证不匹配错误2:hello包的时间配置不匹配错误3:R2的e0/1接口区域配置不正确错误4:R4的e0/1接口没有配置进OSPF错误5:R2的区域1没有配置成特殊区域错误6&#x…

深度学习 | 多模态算法

AIGC也就是AI内容生成已经成为新一轮人工智能发展的热点和必然趋势,它使得大规模高质量的创作变得更加容易。 一 、InstructGPT模型 1、GPT系列回顾 chatGPT和InstructGPT都使用了指示学习和基于人工反馈的强化学习来指导模型的训练,不同点仅仅是在采集数…

c语言:用结构体求平均分|练习题

一、题目 用c语言的结构体&#xff0c;求4位学生成绩的平均分 如图&#xff1a; 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> float aver();//声明平均分函数 void printScore();//声明打印函数 //设置结构体&#xff0c; struct student { …

JMeter CSV 参数文件的使用方法

.在 JMeter 测试中&#xff0c;参数化是非常重要的&#xff0c;参数化允许我们模拟真实世界中的各种情况。本文我们将探讨如何在 JMeter 中使用 CSV 参数文件。 创建 CSV 文件 首先&#xff0c;我们需要创建一个逗号分隔的值&#xff08;CSV&#xff09;文件&#xff0c;其中…

CompressAI:深度学习与传统图像压缩

1、图像压缩算法原理 传统的有损图像压缩方法&#xff0c;如JPEG &#xff0c; JPEG2000 &#xff0c; HEVC或AV1或VVC&#xff0c;在类似的编码方案上进行了迭代改进&#xff1a;将图像划分为像素块&#xff0c;使用变换域通过线性变换(例如:DCT或DWT)去相关空间频率&#xf…

SpringBoot使用支付宝沙箱环境进行仿真支付

目录 一、进入支付宝开发平台—沙箱环境 二、点击沙箱进入沙箱环境 三、Java二维码生成技术 1、导入依赖 2、生成指定url对应的二维码图片 四、支付接口 1、保存好沙箱应用里面的公钥私钥 2、 测试接口 3、扫码 4、买家结果 5、卖家结果 五、回调接口 1、使用内网…

el-select 多选,选有一个未选择的选项

多选有未选择这个选项后。会出现一个情况&#xff0c;绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理&#xff0c;选择&#xff08;未选择&#xff09;就清除&#xff08;其它的选择&#xff09;&#xff0c;选择&#xff08;cpu&#xff09;就清除&#xff08;未选…

RocketMQ快速入门

RocketMQ快速入门 RocketMQ提供了发送多种发送消息的模式&#xff0c;例如同步消息&#xff0c;异步消息&#xff0c;顺序消息&#xff0c;延迟消息&#xff0c;事务消息等&#xff0c;我们一一学习 1.1 消息发送和监听的流程 我们先搞清楚消息发送和监听的流程&#xff0c;然…

自制c++题目《模板综合》

1.输出结果&#xff1a; 2.主函数不允许改变 int arr[5] { 5,2,3,1,4}; char arr1[5] { a,c,b,e,d }; good <int>a(arr,5); good <char>b(arr1,5); bad<int>(1,2); bad<float>(1.1, 1.2); 自制c题目《模板综合》 王赫辰/c语言 - Gitee.com

引导和服务

目录 一、Linux操作系统引导过程 1、引导过程总览图 2、引导过程的详细步骤 二、系统初始化进程 1、init进程&#xff08;串行启动&#xff09; 2、Systemd&#xff08;并行启动&#xff09; 3、Centos6与Centos7的区别&#xff1a; 4、Systemd单元类型 5、运行级别所…

EFCore8泛化关系在数据库中的体现

如图&#xff0c;在关系数据库中&#xff0c;数据表达为一张表&#xff0c;用一个字段“Discriminator”来做区分&#xff1a; 要达到这样的效果&#xff08;数据库中的结构&#xff09;&#xff0c;需要在XXContext中将继承关系的三个类都加上&#xff1a; public DbSet<P…

在 Mac 上轻松安装和配置 JMeter

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要安装 Java&#xff0c;请按…

想学鸿蒙,又怕找不到工作?能有前途吗?

鸿蒙有没有前途&#xff0c;能不能找到工作&#xff1f;其实这与市场行情有关&#xff0c;这几年的互联网大家都已经感受到了&#xff0c;十分悲凉。不管是前端还是Android等开发行业&#xff0c;不是被裁员就是内卷严重&#xff0c;这几年倒下了无数家中小型互联网企业。 而作…

腾讯云2024年最新优惠活动整理汇总

腾讯云作为国内领先的云计算服务提供商&#xff0c;一直致力于为用户提供优质、高效的服务。为了更好地满足用户需求&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;本文将对腾讯云最新优惠活动进行整理汇总&#xff0c;帮助用户更好地了解和利用这些福利。 一、腾讯云新用…

kali2.0安装VMware Tools 和自定义改变分辨率

kali2.0安装VMware Tools 和自定义改变分辨率 VMware Tools 简介&#xff1a;VMware Tools安装&#xff1a;自定义改变分辨率&#xff1a;xrandr命令修改分辨率&#xff1a; 前言&#xff1a; 因为kali2.0比较老 所以需要手动安装 WMware Tools 进行复制粘贴操作&#xff01; …

企业需要专业的合同档案管理系统吗

文书合同是企业与供应商、客户、员工等签订的重要文件&#xff0c;具有法律效力和约束力。合同档案管理系统可以帮助企业有效管理合同文件&#xff0c;提高合同管理的效率和准确性。 专久智能合同档案管理系统具备以下优点&#xff1a; 1. 文件安全性&#xff1a;合同文件经过专…

力扣刷题-二叉树-合并二叉树

617.合并二叉树&#xff08;经典&#xff09; 合并二叉树是操作两棵树的题目里面很经典的&#xff0c;如何对两棵树遍历以及处理&#xff1f; 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并…

NE555学习笔记-2024

实物图片 NE555引脚图 内部时序图 示列1&#xff0c;红外接收电路 红外接收电路的工作原理&#xff1a;在上述电路中&#xff0c;TSOP1738构成了该电路的主要组成部分&#xff0c;旨在检测来自任何来源的红外信号。这用于检测38 KHz范围的信号&#xff0c;因此命名为“TSOP173…