k8s中pod的管理
一、资源管理
1.概述
说到k8s中的pod,即荚的意思,就不得不先提到k8s中的资源管理,k8s中可以用以下命令查看我们的资源:
kubectl api-resources
比如我们现在需要使用k8s开启一个东西,那么k8s通过apiserver去对比etcd里面的数据,并且去调用scheduler来确定我这个东西要放在哪台主机上,还需要调用managecontroller(控制器)去控制pod开启的数量和时间,以及监控pod的状态
而我们的pod有Deployment,CronJob,DaemonSet,ReplicaSet,Job,StatefulSet,Hpa,通过我们的控制器开启pod,开启pod之后pod中的数据,即程序便运行起来了,程序运行了之后不能像docker一样通过暴露端口的方式直接被访问,还需要service(微服务),对端口进行暴露,最终我们通过service微服务来访问pod中的数据。而pod中的数据持久化是通过建立volume卷,再把pod中的目录挂载到宿主机上,这样pod中的数据就能持久化到宿主机上了。
2.资源管理方式
- 命令式对象管理:直接使用命令去操作kubernetes资源:
kubectl run nginx-pod --image=nginx:latest --port=80
- 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
kubectl create/patch -f nginx-pod.yml
- 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源
kubectl apply -f nginx-pod.yml
类型 适用环境 优点 缺点 命令式对象管理 测试 简单 只能操作活动对象,无法审计、跟踪 命令式对象配置 开发 可以审计、跟踪 项目大时,配置文件多,操作麻烦 声明式对象配置 开发 支持目录操作 意外情况下难以调试 kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署
kubectl命令的语法如下:
kubectl [command] [type] [name] [flags]
- comand:指定要对资源执行的操作,例如create、get、delete
- type:指定资源类型,比如deployment、pod、service
- name:指定资源的名称,名称大小写敏感
- flags:指定额外的可选参数
查看所有pod
kubectl get pod
查看某个pod
kubectl get pod pod_name
查看某个pod,以yaml格式展示结果
kubectl get pod pod_name o yaml
显示集群版本
kubectl version
显示集群信息
kubectl cluster-info
创建一个webcluster控制器,控制器中pod数量为2
kubectl create deployment webcluster --image nginx/nginx:latest --replicas 2
查看资源帮助
kubectl explain deployment
查看控制器参数帮助
kubectl explain deployment.spec
编辑控制器配置
kubectl patch deployments.apps webcluster -p '{"spec": {"replicas":4}}'
删除资源
kubectl delete deployments.apps webcluster
运行和调试命令示例
运行pod
kubectl run testpod --image nginx/nginx:latest
端口暴露
kubectl run testpod --image nginx/nginx:latest
kubectl expose pod testpod --port 80 --target-port 80
查看资源详细信息
kubectl describe pods testpod
查看资源日志
kubectl logs pods/testpod
运行交互pod
ctrl+pq退出不停止pod
kubectl run -it testpod --image busybox
进入到已经运行的容器,且容器有交互环境
kubectl attach pods/testpod -it
在已经运行的pod中运行指定命令
kubectl exec -it pods/testpod1 /bin/bash
拷贝文件到pod中
kubectl cp testpod1.yml testpod1:/
kubectl exec -it pods/testpod1 /bin/bash
复制pod中的文件到本机
kubectl cp testpod1:/testpod1.yml testpod1.yml
运行非交互pod
kubectl run nginx --image nginx/nginx:latest
高级命令示例
利用命令生成yaml模板文件
kubectl create deployment --image nginx/nginx:latest webcluster --dry-run=client -o yaml > webcluster.yml
kubectl apply -f webcluster.yml
管理标签
kubectl run nginx --image nginx/nginx:latest
kubectl get pods --show-labels
kubectl label pods nginx app=karl
kubectl get pods --show-labels
更改标签
kubectl label pods nginx app=webcluster --overwrite
删除标签
kubectl label pods nginx app-
二、pod
1.手动建立pod(生产不推荐)
Kubernetes Pod 是 Kubernetes 中最小的可部署单元,它代表集群中运行的单个实例。Pod 包含一个或多个紧密相关的容器,这些容器共享存储和网络资源,并且总是作为一个整体进行调度和管理。Kubernetes Pod 是 Kubernetes 中的基本构建块,用于封装和管理应用程序的容器。通过共享网络和存储资源,Pod 提供了一种灵活和高效的方式来部署和管理应用程序。理解 Pod 的概念和使用方法是掌握 Kubernetes 的基础。
查看所有pods
kubectl get pods
建立一个名为revkarl的pod
kubectl run revkarl --image nginx/nginx:latest
显示pod的较为详细的信息
kubectl get pods -o wide
2.利用控制器管理pod(推荐)
- 自动化管理自动创建和删除:
- 自动创建和删除:控制器可以自动创建、删除和管理 Pod,确保集群始终处于期望的状态。例如,Deployment 控制器可以根据指定的副本数自动创建或删除 Pod。
- 自动恢复:如果 Pod 出现故障或崩溃,控制器会自动检测并重新创建新的 Pod,确保应用的高可用性。
2.高可用性和容错性
- 自动重启:控制器可以监控 Pod 的健康状态,如果某个 Pod 失败,控制器会自动重启它,确保应用始终可用。
- 负载均衡:通过 ReplicationController 或 ReplicaSet,可以确保多个 Pod 实例在不同的节点上运行,实现负载均衡和故障隔离
3.水平扩展
- 自动扩展:使用 Horizontal Pod Autoscaler (HPA),可以根据 CPU 使用率或其他指标自动调整 Pod 的数量,以应对负载变化。
- 手动扩展:管理员可以轻松地手动增加或减少 Pod 的副本数,以适应业务需求。
4. 滚动更新和回滚
- 滚动更新:使用 Deployment 控制器,可以进行滚动更新,逐步替换旧的 Pod 实例,确保应用在更新过程中始终保持可用。
- 回滚:如果新版本的 Pod 出现问题,可以轻松地回滚到之前的版本,确保应用的稳定性和可靠性。
5. 资源配置和管理
- 资源请求和限制:控制器可以为 Pod 设置资源请求和限制,确保每个 Pod 都有足够的资源来运行,同时避免资源浪费。
- 亲和性和反亲和性:通过设置亲和性和反亲和性规则,可以控制 Pod 的调度行为,确保 Pod 在合适的节点上运行,提高性能和可靠性。
6. 简化运维
- 集中管理:控制器提供了一种集中管理多个 Pod 的方式,简化了运维工作。管理员可以通过一个控制器管理多个 Pod,而不是单独管理每个 Pod。
- 标准化:控制器提供了一种标准化的方式来管理 Pod,确保所有 Pod 都遵循相同的标准和规范。
7. 服务发现和负载均衡
- 服务发现:通过 Service 对象,可以为一组 Pod 提供稳定的网络标识符,实现服务发现。
- 负载均衡:Service 对象可以自动将流量分发到后端的 Pod,实现负载均衡。
建立控制器并自动运行pod
kubectl create deployment revkarl --image nginx/nginx:latest
为revkarl扩容
为revkarl缩容
3.应用版本的更新
利用控制器建立pod
kubectl create deployment revkarl --image myapp:v1 --replicas 2
暴露端口
kubectl expose deployment revkarl --port 80 --target-port 80
service/revkarl exposed
查看历史版本
kubectl rollout history deployment revkarl
更新控制器镜像版本
kubectl set image deployments/revkarl myapp=myapp:v2
访问测试一下:
版本回滚
kubectl rollout undo deployment revkarl --to-revision 1
4.利用yaml文件部署应用
获得资源帮助
kubectl explain pod.spec.containers
运行简单的单个容器pod
kubectl run revkarl --image myapp:v1 --dry-run=client -o yaml > pod.yml
kubectl apply -f pod.yml
运行多个容器pod
vim pod.yml
apiVersion: v1
kind: Pod
metadata:labels:run: revkarlname: revkarl
spec:containers:- image: myapp:v1name: web1- image: myapp:v2name: web2
在一个pod中开启多个容器时一定要确保容器彼此不能互相干扰
vim pod.yml
apiVersion: v1
kind: Pod
metadata:labels:run: revkarlname: revkarl
spec:containers:- image: myapp:v1name: web1- image: busybox:latestname: web2command: ["/bin/sh","-c","sleep 1000000"]
三、pod的生命周期
1.init容器
Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。
Init 容器与普通的容器非常像,除了如下两点:
o它们总是运行到完成
o init 容器不支持 Readiness,因为它们必须在 Pod 就绪之前运行完成,每个Init 容器必须运 行成功,下一个才能够运行。
如果Pod的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。但是,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。
init容器的功能
- Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。
- Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。
- 应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。
- Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。
- 由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。
init容器示例
kubectl run initpod --image myapp:v1 -o yaml > pod.yml
vim pod.yml
apiVersion: v1
kind: Pod
metadata:labels:run: initpodname: initpod
spec:containers:- image: myapp:v1name: myappinitContainers:- name: init-myserviceimage: busyboxcommand: ["sh","-c","until test -e /testfile;do echo wating for myservice;sleep 2;done"]
相关文章:

k8s中pod的管理
一、资源管理 1.概述 说到k8s中的pod,即荚的意思,就不得不先提到k8s中的资源管理,k8s中可以用以下命令查看我们的资源: kubectl api-resources 比如我们现在需要使用k8s开启一个东西,那么k8s通过apiserver去对比etc…...

JavaScript中引用数据类型的浅拷贝
在JavaScript中,数据类型被分为“基本数据类型”和“引用数据类型”两大类。基本数据类型包括数值型、字符型、逻辑型、未定义型(undefined)、空型(null)和ES6新增的Symbol类型,引用数据类型包括数组、对象和函数。 当我们在程序中执行变量赋值操作的时候…...

自闭症寄宿学校陕西:提供综合发展的教育环境
在陕西这片古老而充满希望的土地上,有一所特殊的学校——星贝育园康复中心,它如同一座灯塔,照亮了无数自闭症儿童及其家庭前行的道路。这所全国规模较大的广泛性发育障碍全托寄宿制儿童康复训练机构,不仅以其专业的康复训练和独特…...

JS模块化工具requirejs详解
文章目录 JS模块化工具requirejs详解一、引言二、RequireJS 简介1、什么是 RequireJS2、RequireJS 的优势 三、RequireJS 的使用1、配置 RequireJS1.1、基础配置 2、定义模块3、加载模块 四、总结 JS模块化工具requirejs详解 一、引言 随着前端技术的快速发展,Jav…...

JavaScript中的异步编程:从回调到Promise
在JavaScript中,异步编程是一项至关重要的技能,它允许我们在不阻塞主线程的情况下执行耗时操作,如网络请求、文件读取或定时任务。随着JavaScript的发展,异步编程的模式也在不断演进,从最初的回调函数,到现…...

windows下DockerDesktop命令行方式指定目录安装
windows下DockerDesktop指定目录安装(重新安装) 因为DcokerDesktop占用内存较大, 并且拉去镜像后占用本地空间较多,所以建议安装时就更改默认安装路径和镜像存储路径 这里,展示了从下载到安装的过程: 首先下载DcokerDesktop;找到Docker Desktop Installer.exe 并重命名为 do…...

排查和解决JVM OOM实战
JVM OOM介绍 Java内存区域布局 下面的分析中都是基于JDK 8开始的。关于JMM不过多介绍每个区域的作用。OOM不单只会发生在堆内存,也可能是因为元空间或直接内存泄漏导致OOM,此时在OOM的详细信息中会有不同体现。 Java OOM的类别 java.lang.OutOfMemory…...

【Swift官方文档】7.Swift集合类型
集合类型 使用数组、集合和字典来组织数据。Swift 提供了三种主要的集合类型:数组、集合和字典,用于存储值的集合。数组是有序的值集合。集合是无序的唯一值集合。字典是无序的键值对集合。 Swift 中的数组、集合和字典始终清晰地指明它们可以存储的值…...

QT调用最新的libusb库
一:下载libusb文件 下载最新的库的下载网站:https://libusb.info/ 下载: 解压后目录如下: 二:库文件添加QT中 根据自己的编译器选择库: ①将头文件中添加libusb.h ②源文件中添加libusb-1.0.lib ③添加…...

白嫖EarMaster Pro 7简体中文破解版下载永久激活
EarMaster Pro 7 简体中文破解版功能介绍 俗话说得好,想要成为音乐家,就必须先拥有音乐家的耳朵,相信很多小伙伴都已经具备了一定的音乐素养,或者是说想要进一步得到提升。那我们就必须练好听耳的能力,并且把这种能力…...

使用JavaScript写一个网页端的四则运算器
目录 style(内联样式表部分) body部分 html script 总的代码 网页演示 style(内联样式表部分) <style>body {font-family: Arial, sans-serif;display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #f0f0f0;}.calculator {…...

Linux find命令详解及实用示例
Linux 系统中的 find 命令是一个功能强大的工具,用于在文件系统中搜索文件并执行相应的操作。无论是系统管理员还是普通用户,掌握 find 命令都能极大地提高工作效率。本文将详细介绍 find 命令的用法,并通过多个示例展示其在实际中的应用。 …...

CSS基础-常见属性(二)
6、CSS三大特性 6.1 层叠性 如果样式发生冲突,则按照优先级进行覆盖。 6.2 继承性 元素自动继承其父元素、祖先元素所设置的某些元素,优先继承较近的元素。 6.3 优先级 6.3.1 简单分级 1、内联样式2、ID选择器3、类选择器/属性选择器4、标签名选择器/…...

Spring Boot 2.4.3 + Java 8 升级为 Java 21 + Spring Boot 3.2.0
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Spring Boot 2.4.3 + Java 8 升级为 Java 21 + Spring Boot 3.2.0前言更换 Java 21 SD…...

如何利用免费音频剪辑软件制作出精彩音频
现在有许多免费的音频剪辑软件可供选择,它们为广大用户提供了丰富的功能和便捷的操作体验,让音频编辑变得更加轻松和有趣。接下来,让我们一起走进这些免费音频剪辑软件的世界,探索它们的独特魅力和强大功能。 1.福昕音频剪辑 链…...

安宝特分享 | AR技术重塑工业:数字孪生与沉浸式培训的创新应用
在数字化转型的浪潮中,AR(增强现实)技术与工业的结合正在呈现新的趋势和应用延伸。特别是“数字孪生”概念的崛起,为AR技术在工业中提供了独特而创新的切入点。 本文将探索AR如何与数字孪生、沉浸式体验和实用案例相结合…...

专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
目录 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜 1.深度优先遍历 vs 深度优先搜索(dfs) 2.宽度优先遍历 vs 宽度优先搜索(bfs) 2.关系图暴力枚举一遍所有的情况 3.拓展搜索问题全排列 决策树 1. 计算布尔⼆叉树的值(medi…...

基于springboot vue3 在线考试系统设计与实现 源码数据库 文档
博主介绍:专注于Java(springboot ssm springcloud等开发框架) vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…...

什么是 HTTP 请求中的 options 请求?
在 Chrome 开发者工具中的 Network 面板看到的 HTTP 方法 OPTIONS,其实是 HTTP 协议的一部分,用于客户端和服务器之间进行“预检”或“协商”。OPTIONS 请求的作用是让客户端能够获取关于服务器支持的 HTTP 方法和其他跨域资源共享 (CORS) 相关的信息&am…...

[图形学]smallpt代码详解(1)
一、简介 本文介绍了著名的99行代码实现全局光照的光线跟踪代码smallpt。 包括对smallpt的功能介绍、编译运行介绍,和对代码的详细解释。希望能够帮助读者更进一步的理解光线跟踪。 二、smallpt介绍 1.smallpt是什么 smallpt(small Path Tracing) 是一个全局光照…...

Vite多环境配置与打包:
环境变量必须以VITE开头 1.VITE_BASE_API: 在开发环境中设置为 /dev-api,这是一个本地 mock 地址,通常用于模拟后端接口。 2.VITE_ENABLE_ERUDA: 设置为 "true",表示启用调试工具,通常是为了…...

git维护【.gitignore文件】
在工程下添加 .gitignore 文件【git忽略文件】 *.class .idea *.iml *.jar /*/target/...

【Canvas与色彩】十六等分多彩隔断圆环
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>隔断圆环Draft5十六等分多彩</title><style type"text…...

什么是pip? -- Python 包管理工具
前言 不同的编程语言通常都有自己的包管理工具,这些工具旨在简化项目的依赖管理、构建过程和开发效率,同时促进代码的复用和共享。每个包管理工具都有其独特的特点和优势,开发者可以根据自己的编程语言和项目需求选择合适的包管理工具。 pip是…...

FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解
一、FastAPI框架使用枚举来型来限定参数 FastAPI框架验证时,有时需要通过枚举的方式来限定参数只能为某几个值中的一个,这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下: #引入Enum模块 from fa…...

OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,当初有的问题未解决,目前新版未尝试
OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,有的问题未解决,新版未尝试 1、前言—安装单副本单节点集群1.1 docker安装OB 2、查看现有集群情况2.1 进入容器&#x…...

前沿论文创新点集合
系列文章目录 文章目录 系列文章目录一、《LAMM: Label Alignment for Multi-Modal Prompt Learning》二、《MaPLe: Multi-modal Prompt Learning》三、《Learning to Prompt for Vision-Language Models》CoOp四、《MobileCLIP: Fast Image-Text Models through Multi-Modal R…...

刷题记录(好题)
Problem - D - Codeforces 思路: 滑动窗口思想,一个数组记录起始点(记录出现过的次数),另一个数组记录截至点(记录出现过的次数),从0开始遍历,设定一个长度为d的滑动窗口…...

【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}
1. 函数简介: Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。 好处:避免用户反复写逻辑,可以直接拿来使用。 重点:用户需要知道函数叫什么,能做什么。 Hive提供了大量的内置函数&am…...

python sqlite3 工具函数
起因, 目的: sqlite3 最常用的函数。 比如,某人给了一个 database.db 文件。 但是你登录的时候,不知道账号密码。 此文件就是,查看这个数据库的详细内容。 有哪些表某个表的全部内容。添加数据 代码, 见注释 impor…...