k8s pod详解使用

什么是pod?

Kubernetes(简称K8s)是一个开源的容器编排平台,广泛用于构建、部署和管理容器化应用程序。在K8s中,Pod是一个核心概念,下面是对Pod的详细解释:

一、Pod的定义

Pod是K8s中最小的可部署单元,也是资源对象模型中由用户创建或部署的最小资源对象模型。它实现了对容器的封装和管理,是一组运行在同一主机(节点)上、共享网络和存储空间的一组容器。Pod内的容器共享同一个网络命名空间和存储卷,可以方便地实现容器间的通信和数据共享。

二、Pod的特点

  1. 共享资源:Pod中的容器共享网络和存储资源。它们可以相互访问,并通过本地主机之间的共享卷交换数据,这有助于减少网络通信开销并简化容器间的依赖关系。
  2. 调度和生命周期管理:K8s会将Pod部署到集群中的节点上,并监控其生命周期。K8s确保Pod一直处于运行状态,如果Pod崩溃或节点故障,K8s会自动在其他节点上重新创建Pod。
  3. 负载均衡:K8s可以根据需要创建多个副本的Pod,并利用负载均衡调度算法将流量分发到这些副本上,确保应用程序的高可用性。
  4. 灵活部署:Pod可以方便地部署和管理多个容器,实现集中式管理和快速部署。这有助于简化应用程序的部署和管理流程。

三、Pod的使用

  1. 创建Pod:在创建Pod之前,需要先搭建一个Kubernetes集群。然后,可以通过定义Pod的配置文件(通常使用YAML格式)来指定Pod的名称、包含的容器、使用的镜像、端口映射等信息。最后,使用kubectl命令行工具应用配置文件并部署Pod到集群中。
  2. 查看Pod状态:使用kubectl命令行工具可以查看Pod的状态信息,包括Pod是否正在运行、是否处于就绪状态等。
  3. 进入Pod内部:有时需要进入Pod的容器内部进行一些操作或调试。可以使用kubectl命令行工具进入Pod的bash终端或执行其他命令。
  4. 删除Pod:当不再需要Pod时,可以使用kubectl命令行工具删除Pod。

四、Pod的作用

Pod在K8s中扮演着至关重要的角色。它是K8s调度和管理的最小单位,也是应用程序部署和管理的基本单元。通过Pod,K8s能够实现对容器化应用程序的自动化部署、扩展和操作。Pod提供了共享资源、简化容器间通信和数据共享的机制,有助于提高应用程序的可用性和可扩展性。

综上所述,Pod是K8s中不可或缺的核心组件之一。它封装和管理容器,提供共享资源和简化通信的机制,为应用程序的部署和管理提供了强有力的支持。

使用pod 

 1..run/apply -f/create -f运行pod

[root@k8s-master pod]# kubectl run mynginx --image=nginx -n myns
pod/mynginx created
[root@k8s-master pod]# kubectl create -f tomcat.yaml 
pod/tomcat created
[root@k8s-master pod]# kubectl apply -f httpd.yaml 
pod/httpd created
​
[root@k8s-master pod]# kubectl get pods -n myns
NAME      READY   STATUS    RESTARTS   AGE
httpd     1/1     Running   0          2m20s
mynginx   1/1     Running   0          4m33s
tomcat    1/1     Running   0          8s

2.get查看pod信息 

查看所有pod 

[root@k8s-master ~]# kubectl get pods -A

查看指定的单个/多个pod

[root@k8s-master ~]# kubectl get pod nginx -n myns
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          9s
​
[root@k8s-master ~]# kubectl get pod nginx nginx1 -n myns
NAME     READY   STATUS    RESTARTS   AGE
nginx    1/1     Running   0          97s
nginx1   1/1     Running   0          15s

查看pod同时查看其他类型资源(需要具体指定资源类型和名称) 

[root@k8s-master ~]# kubectl get pod/nginx -n myns node/k8s-node1
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          104s
​
NAME             STATUS   ROLES    AGE    VERSION
node/k8s-node1   Ready    <none>   3m6s   v1.28.2

列出在某个节点上运行的pod 

[root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k8s-node1

-w实时查看pod信息

[root@k8s-master ~]# kubectl get  pod -w nginx -n myns 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          4h16m
[root@k8s-master ~]# 

3.exec操作运行中的pod 

进入运行中的pod 

[root@k8s-master ~]# kubectl exec -it nginx -n myns -- /bin/bash
root@nginx:/# ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp
​
#不进入但执行命令
[root@k8s-master ~]# kubectl exec -it nginx -n myns -- ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp

进入pod中的容器

[root@k8s-master ~]# kubectl exec -it nginx -c xxx -n myns -- /bin/bash
#-c后指定容器名称

4.pod的yaml文件配置定义解析 

[root@k8s-master ~]# kubectl explain pod.spec
#可以以此形式来一层一层获取可配置项apiVersion: v1 
#必选项,版本号,如V1
kind: Pod 
#必选项,资源类型,pod等
metadata: 
#必选项,元数据部分name: xxx #Pod名称namespace: xxx #Pod所属的命名空间,默认为"default"labels: #自定义标签列表- name: xxx   #自定义标签内容
spec: 
#必选项,Pod中容器的详细定义containers: #必选项,Pod中容器列表- name: xxx #必选项,容器名称image: xxx #必选项,容器的镜像名称imagePullPolicy: [ Always|Never|IfNotPresent ] #获取镜像的策略,tag为latest默认always,tag为具体版本号,默认IfNotPresent。always表示每次都尝试重新拉取镜像;ifNotPresent表示如果本地有那个镜像就使用本地的,不存在时才拉取;Nerver表示仅使用本地有的镜像,绝不拉取,本地没有时报错command: [xxx] #容器的启动命令列表,如不指定则使用打包时使用的启动命令args: [xxx] #容器的启动命令给定参数列表workingDir: xxx #容器的工作目录volumeMounts: #挂载到容器内部的存储卷配置- name: xxx#引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名mountPath: xxx #存储卷在容器内mount的绝对路径,应少于512字符readOnly: xxx#布尔值,是否为只读模式ports: #需要暴露的端口库号列表- name: xxx#端口的名称containerPort: xxx #容器需要监听的端口号hostPort: xxx#容器所在主机需要监听的端口号,默认与Container相同protocol: xxx #端口协议,支持TCP和UDP,默认TCPenv: #容器运行前需设置的环境变量列表- name: xxx #环境变量名称value: xxx #环境变量的值resources: #资源限制和请求的设置limits: #资源限制的设置cpu: xxx #cpu的限制,单位为core数,将用于docker run --cpu-shares参数memory: xxx #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数requests: #资源请求的设置cpu: xxx #cpu请求,容器启动的初始可用数量memory: xxx #内存请求,容器启动的初始可用数量lifecycle: #生命周期钩子postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器exec: #对Pod容器内检查方式设置为exec方式command: [xxx] #exec方式需要制定的命令或脚本httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath: xxxport: xxxhost: xxxscheme: xxxHttpHeaders:- name: xxxvalue: xxxtcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged: false
restartPolicy: [Always | Never | OnFailure] 
#Pod的重启策略
nodeName: <xxx> 
#设置NodeName表示将该Pod调度到指定到名称的node节点上
nodeSelector: xxx 
#设置NodeSelector表示将该Pod调度到包含这个label的node上
imagePullSecrets: 
#Pull镜像时使用的secret名称,以key:secretkey格式指定- name: xxx
hostNetwork: false 
#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: 
#在该pod上定义共享存储卷列表- name: string #共享存储卷名称 (volumes类型有很多种)emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath: xxx #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path: xxx #Pod所在宿主机的目录,将被用于同期中mount的目录secret: #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部scretname: xxxitems:- key: xxxpath: xxxconfigMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: xxxitems:- key: xxxpath: xxx

5.Pod对容器的封装 

对单个容器的封装

apiVersion: v1
kind: Pod
metadata:name: httpdlabels:run: httpdnamespace: myns
spec:containers:- name: httpdimage: httpdports:- containerPort: 80

对多个容器封装并绑定为一个Pod 

apiVersion: v1
kind: Pod
metadata:name: two-containersnamespace: mynslabels:name: tc
spec:containers:- name: first-containerimage: nginxports:- containerPort: 80- name: second-containerimage: busyboxcommand: ["/bin/sh", "-c", "while true; do echo 'Hello from the second container' > /shared-data/index.html; sleep 10; done"]volumeMounts:- name: shared-datamountPath: /shared-dataports:- containerPort: 8080volumes:- name: shared-dataemptyDir: {}

6.pod使用配置映射 

通过配置映射(ConfigMap),可以将配置文件挂载到Pod中,方便管理和更新。

  volumes:- name: config-volumeconfigMap:name: example-config

7.使用存储卷 

通过定义存储卷(Volume),可以将持久化存储挂载到Pod中。

  volumes:- name: vol-datapersistentVolumeClaim:claimName: pvc1

8.使用Replication Controller 

通过Replication Controller可以确保指定数量的Pod副本在任何时候都处于运行状态。

  apiVersion: apps/v1kind: Deploymentmetadata:name: my-deploymentspec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: my-image

9. 使用Deployment 

Deployment是Replication Controller的升级版,支持滚动更新和回滚。

  apiVersion: apps/v1kind: Deploymentmetadata:name: my-deploymentspec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: my-imageports:- containerPort: 80

10.资源配额和限制 

通过设置资源配额(Resource Quotas),可以限制命名空间中所有Pod的资源使用总量。

  resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"

11.节点资源优化 

通过设置podsPerCore参数,可以根据节点的CPU核心数来控制每个节点上可以运行的Pod数量。

  podsPerCore: 2

12.Pod中的容忍度配置 

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxtolerations:- key: "dedicated"operator: "Equal"value: "special-user"effect: "NoSchedule"

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

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

相关文章

JQuery的基本使用

jQuery 是一个快速、小巧且功能强大的 JavaScript 库&#xff0c;它使得 HTML 文档的遍历和操作、事件处理、动画和 Ajax 交互变得简单。以下是 jQuery 的基本使用&#xff0c;包括常见的操作和示例。 1. 引入 jQuery 在使用 jQuery 之前&#xff0c;您需要将其引入到您的 HT…

Linux:Ubuntu系统开启SSH服务

在Ubuntu上开启SSH服务&#xff0c;可以按照以下步骤进行&#xff1a; 1.安装OpenSSH服务 如果你还没有安装OpenSSH服务&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server2. 启动SSH服务 安装完成后&#xff0c;启动SSH服务&a…

QT应用中的字符编码处理

文章目录 各种编码介绍获取编码列表通过特定编码解析内容特定编码保存文件编码转换设置默认编码在Qt中字符编码问题是一个重要的主题,因为Qt是一个跨平台的框架,涉及到不同操作系统和字符集的兼容性。Qt提供了多种方式来处理字符串和字符编码,确保应用程序能够正确处理和显示…

Docker在linux系统中的下载与使用

Docker在linux系统中的下载与使用 一、docker作用,下载及安装二、docker镜像三、创建容器四、容器数据卷 一、docker作用,下载及安装 ubuntu下载安装docker 命令&#xff1a;在ubuntu上面执行这个命令 Docker version:查看docker是否安装成功 配置阿里云镜像加速:进入阿里云网站…

【WEB应用安全测试指南–蓝队安全测试2】--超详细-可直接进行实战!!!亲测-可进行安全及渗透测试

安全基础理论入门知识参考上一篇《WEB应用安全测试指南蓝队安全测试1》 WEB应用安全测试指南2 一、文件 I/O 类1.1、任意文件上传1.2、任意文件下载1.3、文件包含 二、接口安全类2.1、短信炸弹2.2、邮件炸弹2.3、短信内容可控2.4、邮件内容可控 三、逻辑流程类3.1、越权3.2、未…

k8s部署jenkins集群,配置集群kubernetes plugin的pod模板

先安装jenkins插件&#xff0c;对应的源码地址是kubernetes-plugin&#xff0c;以供参考。 进入节点管理&#xff0c;开始配置。 点击 “ configure clouds” 一、配置集群 填写k8s地址&#xff1a;https://kubernetes.default.svc.cluster.local 命名空间&#xff1a;kuberne…

Redis高并发缓存设计问题与性能优化

1、缓存设计典型问题 1.1、缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c;缓存层和存储层都不会命中&#xff0c;通常出于容错的考虑&#xff0c;如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c;失…

【Python】从零到一,搭建高效Web服务器,轻松上手!Python开发者必备(文末附带源码分享)

CSDN Python源码分享&#xff1a;实现一个简单的Web服务器 在CSDN上&#xff0c;我们经常分享各种技术文章和源码&#xff0c;帮助开发者们不断提升自己的技能。今天&#xff0c;我将为大家分享一个使用Python实现的简单Web服务器源码。这个Web服务器能够处理基本的HTTP GET请…

打破常规,BD仓储物流的效能提升!

当前&#xff0c;随着国家战略的推进&#xff0c;JS与民用领域的融合不断加深&#xff0c;物流业也步入了军民融合的新时代。在智能仓储物流方面&#xff0c;JS物流的智能化进展受到了BD系统的高度关注和重视。 一、建设JS仓储物流RFID基础设施 JS物流领域引入RFID技术的基础工…

Jenkins 改成中文语言显示

Jenkins 改成中文语言显示 到系统管理 插件管理中下载如下插件接口 Localization: Chinese (Simplified) 搜索的时候用ctrlf 进行搜索&#xff0c;不要用Jenkins下面下的filter 只有&#xff0c;到系统管理Manage Jenkins下的Config System下&#xff0c;如下截图的位置去…

动态规划算法:14.简单多状态 dp 问题_粉刷房子_C++

题目链接&#xff1a;LCR 091. 粉刷房子 - 力扣&#xff08;LeetCode&#xff09; 一、题目解析 题目&#xff1a; 解析&#xff1a; 由题可知&#xff1a; 涂刷房子有三种颜色可以选&#xff0c;所给的二维数组中三列固定不变&#xff0c;分别是红、蓝、绿相邻两件房子不可…

C++基础面试题 | 什么是内存对齐?为什么需要内存对齐?

文章目录 回答重点扩展知识 回答重点 内存对齐是指计算机在访问内存时&#xff0c;会根据一定规则将数据存储在合适的起始地址上&#xff0c;通常是数据大小的整数倍。这样做可以提升CPU的访问效率&#xff0c;特别是在读取和写入数据时。 为什么要内存对齐&#xff1f;主要有…

无极低码课程【mysql windows下安装要点】

在Windows环境中安装MySQL 5.7教程 MySQL 是世界上最流行的开源关系型数据库管理系统之一。本教程将指导您在Windows操作系统上安装MySQL 5.7。 网上教程较多&#xff0c;这里不再详述&#xff0c;注意关键点即可 准备工作 下载MySQL 5.7安装包 访问 MySQL官方网站 下载MyS…

【Java面试——基础知识——Day2】

1.面向对象基础 1.1 面向对象和面向过程的区别 面向过程编程&#xff08;POP&#xff09;&#xff1a;面向过程把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象编程&#xff08;OOP&#xff09;&#xff1a;面向对象会先抽象出对象&#…

并查集---We Are A Team

题目描述 总共有 n 个人在机房&#xff0c;每个人有一个标号&#xff08;1<标号<n&#xff09;&#xff0c;他们分成了多个团队&#xff0c;需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中&#xff0c;具体的&#xff1a; 消息构成为 a b c&#xff0c;整数…

使用React Router实现前端的权限访问控制

前段时间学习了React Router&#xff0c;发现没有Vue里面的路由功能强大&#xff0c;没有直接提供路由中间件&#xff0c;不能像Vue里面一样在路由配置上设置任意的额外属性&#xff0c;但是可以通过一些技巧来实现这些功能。 1、配置菜单 后台管理系统一般都会在左侧显示菜单…

“链动2+1+消费增值:用户留存新策略“

大家好&#xff0c;我是吴军&#xff0c;目前在一家以创新为核心的软件开发公司担任产品经理。今天&#xff0c;我将深入探讨一个经受住了时间考验且依然充满活力的商业模式——“链动21”模式&#xff0c;并通过一个实例及相关数据展示它如何巧妙应对用户留存与复购的挑战。 首…

【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践

在现代应用开发中&#xff0c;识别设备的唯一性是一个常见需求。无论是为了授权、数据跟踪还是用户设备管理&#xff0c;获取设备 UUID 都是实现这些目标的关键。在这篇博客中&#xff0c;我们将探讨如何在 Node.js 和 Electron 中获取设备的 UUID&#xff0c;并比较两种主要方…

vllm 部署GLM4模型进行 Zero-Shot 文本分类实验,让大模型给出分类原因,准确率可提高6%

简介 本文记录了使用 vllm 部署 GLM4-9B-Chat 模型进行 Zero-Shot 文本分类的实验过程与结果。通过对 AG_News 数据集的测试&#xff0c;研究发现大模型在直接进行分类时的准确率为 77%。然而&#xff0c;让模型给出分类原因描述&#xff08;reason&#xff09;后&#xff0c;…

HarmonyOS应用六之应用程序进阶二

目录&#xff1a; 一、进度条通知二、闹钟提醒2.1、在module.json5配置文件中开启权限2.2、导入后台代理提醒reminderAgentManager模块&#xff0c;将此模块命名为reminderAgentManager2.3、如果是新增提醒&#xff0c;实现步骤如下&#xff1a; 3、Native C交互4、第三方库的基…