当前位置: 首页 > news >正文

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(推荐) 

  1. 自动化管理自动创建和删除:  
  • 自动创建和删除:控制器可以自动创建、删除和管理 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 命令是一个功能强大的工具&#xff0c;用于在文件系统中搜索文件并执行相应的操作。无论是系统管理员还是普通用户&#xff0c;掌握 find 命令都能极大地提高工作效率。本文将详细介绍 find 命令的用法&#xff0c;并通过多个示例展示其在实际中的应用。 …...

CSS基础-常见属性(二)

6、CSS三大特性 6.1 层叠性 如果样式发生冲突&#xff0c;则按照优先级进行覆盖。 6.2 继承性 元素自动继承其父元素、祖先元素所设置的某些元素&#xff0c;优先继承较近的元素。 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…...

如何利用免费音频剪辑软件制作出精彩音频

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

安宝特分享 | AR技术重塑工业:数字孪生与沉浸式培训的创新应用

在数字化转型的浪潮中&#xff0c;AR&#xff08;增强现实&#xff09;技术与工业的结合正在呈现新的趋势和应用延伸。特别是“数字孪生”概念的崛起&#xff0c;为AR技术在工业中提供了独特而创新的切入点。 本文将探索AR如何与数字孪生、沉浸式体验和实用案例相结合&#xf…...

专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结

目录 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜 1.深度优先遍历 vs 深度优先搜索(dfs) 2.宽度优先遍历 vs 宽度优先搜索(bfs) 2.关系图暴力枚举一遍所有的情况 3.拓展搜索问题全排列 决策树 1. 计算布尔⼆叉树的值&#xff08;medi…...

基于springboot vue3 在线考试系统设计与实现 源码数据库 文档

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…...

什么是 HTTP 请求中的 options 请求?

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

[图形学]smallpt代码详解(1)

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

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...