Kubernetes学习-深入Pod篇(一) 创建Pod,Pod配置文件详解

news2024/11/15 21:11:00

🏷️个人主页:牵着猫散步的鼠鼠 

🏷️系列专栏:Kubernetes渐进式学习-专栏

🏷️个人学习笔记,若有缺误,欢迎评论区指正 

1.前言

我们在前面的文章讲解了Kubernetes的核心概念和服务部署,接下来我们进入实战篇,从Pod入手学习K8S的使用

2.删除前置文章创建的服务

我们在之前文章测试集群是否可以正常服务时,创建了一个Nginx服务作为测试demo,为了防止该服务影响我们后续的学习,我们可以执行如下命令删除。

查询deploy

 kubectl get deploy

 

删除Nginx deploy

kubectl delete deploy nginx

在 Kubernetes 中,Deployment 和 Service 是两个独立的资源,它们分别负责不同的功能。我们这里还只是删除了负责管理 Pod 的控制器,但是 Service 以及通过 Service 暴露的应用程序仍然存在。我们继续删除对应的Service

kubectl delete service nginx

3 Pod资源是什么

在 Kubernetes(K8S)中,Pod 是可以创建和管理的最小部署单元。一个 Pod 代表了集群中运行的一个进程。Pod 通常包含一个或多个容器,这些容器共享网络命名空间、IP 地址和端口空间,能够像在同一个物理机上一样进行通信。Pod 中的容器还可以共享存储卷,使得容器间可以访问相同的数据。

4.Pod配置文件详解 

4.1. 配置资源清单

当我们需要创建一个Pod时,K8S需要知道如何构建一个Pod,这个Pod中有哪些容器等信息,这些信息都需要通过配置文件来传递,所以我们首先来学习Pod配置文件的编写

配置文件详解文档可以见官网配置最佳实践 | Kubernetes

我总结了一些常用的配置资源清单:

参数名类型字段说明
apiVersionStringK8S APl 的版本,可以用 kubectl api versions 命令查询
kindStringyam 文件定义的资源类型和角色
metadataObject元数据对象,下面是它的属性
metadata.nameString元数据对象的名字,比如 pod 的名字
metadata.namespaceString元数据对象的命名空间
SpecObject详细定义对象
spec.containers[]list定义 Spec 对象的容器列表
spec.containers[].nameString为列表中的某个容器定义名称
spec.containers[].imageString为列表中的某个容器定义需要的镜像名称
spec.containers[].imagePullPolicystring定义镜像拉取策略,有 Always、Never、IfNotPresent 三个值可选 - Always(默认):意思是每次都尝试重新拉取镜像 - Never:表示仅适用本地镜像 - IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。
spec.containers[].command[]list指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。
spec.containers[].args[]list指定容器启动命令参数,因为是数组可以指定多个。
spec.containers[].workingDirstring指定容器的工作目录
spec.containers[].volumeMounts[]list指定容器内部的存储卷配置
spec.containers[].volumeMounts[].namestring指定可以被容器挂载的存储卷的名称
spec.containers[].volumeMounts[].mountPathstring指定可以被容器挂载的存储卷的路径
spec.containers[].volumeMounts[].readOnlystring设置存储卷路径的读写模式,ture 或者 false,默认是读写模式
spec.containers[].ports[]list指定容器需要用到的端口列表
spec.containers[].ports[].namestring指定端口的名称
spec.containers[].ports[].containerPortstring指定容器需要监听的端口号
spec.containers[].ports[].hostPortstring指定容器所在主机需要监听的端口号,默认跟上面 containerPort 相同,注意设置了 hostPort 同一台主机无法启动该容器的相同副本(因为主机的端口号不能相同,这样会冲突)
spec.containers[].ports[].protocolstring指定端口协议,支持 TCP 和 UDP,默认值为 TCP
spec.containers[].env[]list指定容器运行前需设置的环境变量列表
spec.containers[].env[].namestring指定环境变量名称
spec.containers[].env[].valuestring指定环境变量值
spec.containers[].resourcesObject指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)
spec.containers[].resources.limitsObject指定设置容器运行时资源的运行上限
spec.containers[].resources.limits.cpustring指定 CPU 的限制,单位为 Core 数,将用于 docker run –cpu-shares 参数
spec.containers[].resources.limits.memorystring指定 mem 内存的限制,单位为 MIB、GiB
spec.containers[].resources.requestsObject指定容器启动和调度时的限制设置
spec.containers[].resources.requests.cpustringCPU请求,单位为core数,容器启动时初始化可用数量
spec.containers[].resources.requests.memorystring内存请求,单位为MIB、GiB,容器启动的初始化可用数量
spec.restartPolicystring定义 pod 的重启策略,可选值为 Always、OnFailure、Never,默认值为 Always。 - Always:pod 一旦终止运行,则无论容器是如何终止的,kubelet 服务都将重启它。 - OnFailure:只有 pod 以非零退出码终止时,kubelet 才会重启该容器。如果容器正常结束(退出码为0),则 kubectl 将不会重启它。 - Never:Pod 终止后,kubelet 将退出码报告给 master,不会重启该 pod
spec.nodeSelectorObject定义 Node 的 label 过滤标签,以 key:value 格式指定
spec.imagePullSecretsObject定义 pull 镜像时使用 secret 名称,以 name:secretkey 格式指定
spec.hostNetworkBoolean定义是否使用主机网络模式,默认值为 false。设置 true 表示使用宿主机网络,不使用 docker 网桥,同时设置了 true将无法在同一台宿主机上启动第二个副本

4.2. 编写Nginx pod配置文件

我们这里就为Nginx写一个简单的配置文件并创建pod

创建Pod配置目录,并创建nginx-demo.yaml文件

mkdir /k8s/pods -p
cd /k8s/pods
vim nginx-demo.yml

 在nginx-demo.yaml文件中编写如下内容

apiVersion: v1 # api 文档版本
kind: Pod  # 资源对象类型,也可以配置为像Deployment、StatefulSet这一类的对象
metadata: # Pod 相关的元数据,用于描述 Pod 的数据
  name: nginx-demo # Pod 的名称
  labels: # 定义 Pod 的标签
    type: app # 自定义 label 标签,名字为 type,值为 app
    test: 1.0.0 # 自定义 label 标签,描述 Pod 版本号
  namespace: 'default' # 命名空间的配置
spec: # 期望 Pod 按照这里面的描述进行创建
  containers: # 对于 Pod 中的容器描述
  - name: nginx # 容器的名称
    image: nginx:1.7.9 # 指定容器的镜像
    imagePullPolicy: IfNotPresent # 镜像拉取策略,指定如果本地有就用本地的,如果没有就拉取远程的
    command: # 指定容器启动时执行的命令
    - nginx
    - -g
    - 'daemon off;' # nginx -g 'daemon off;'
    workingDir: /usr/share/nginx/html # 定义容器启动后的工作目录
    ports:
    - name: http # 端口名称
      containerPort: 80 # 描述容器内要暴露什么端口
      protocol: TCP # 描述该端口是基于哪种协议通信的
    env: # 环境变量
    - name: JVM_OPTS # 环境变量名称
      value: '-Xms128m -Xmx128m' # 环境变量的值
    resources:
      requests: # 最少需要多少资源
        cpu: 100m # 限制 cpu 最少使用 0.1 个核心
        memory: 128Mi # 限制内存最少使用 128兆
      limits: # 最多可以用多少资源
        cpu: 200m # 限制 cpu 最多使用 0.2 个核心
        memory: 256Mi # 限制 最多使用 256兆
  restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启
4.2.1 配置文件详解 

指定使用的Kubernetes API版本,这里使用的是v1版本。 

apiVersion: v1 # api 文档版本

指定要创建的资源对象的类型是Pod,也可以配置为像Deployment、StatefulSet这一类的对象 

kind: Pod  # 资源对象类型,也可以配置为像Deployment、StatefulSet这一类的对象

 元数据部分,指定该Pod的名称为nginx-demo。

metadata: # Pod 相关的元数据,用于描述 Pod 的数据
  name: nginx-demo # Pod 的名称  

为Pod设置了两个标签(label),分别是type=app和test=1.0.0。标签可用于后续对Pod实施其他操作时进行过滤和选择。

  labels: # 定义 Pod 的标签
    type: app # 自定义 label 标签,名字为 type,值为 app
    test: 1.0.0 # 自定义 label 标签,描述 Pod 版本号

 指定该Pod将在default命名空间中创建。如果不设置这个配置,会默认在default命名空间中创建

  namespace: 'default' # 命名空间的配置

 spec部分描述了期望Pod实际运行的具体情况。他描述了对象的期望状态,即我们希望对象在集群中的行为和状态。

我们这里定义了在该Pod中只有一个容器,名称为nginx,使用的镜像是nginx:1.7.9。

spec: # 期望 Pod 按照这里面的描述进行创建
  containers: # 对于 Pod 中的容器描述
  - name: nginx # 容器的名称
    image: nginx:1.7.9 # 指定容器的镜像

imagePullPolicy设置镜像拉取策略为IfNotPresent,意味着如果本地有nginx:1.7.9镜像就使用本地的,没有则从远程拉取。

imagePullPolicy: IfNotPresent # 镜像拉取策略,指定如果本地有就用本地的,如果没有就拉取远程的

command容器的启动命令,启动nginx时增加-g 'daemon off;'参数。

    command: # 指定容器启动时执行的命令
    - nginx 
    - -g
    - 'daemon off;' # nginx -g 'daemon off;'

 workingDir设置容器的工作目录为/usr/share/nginx/html。

    workingDir: /usr/share/nginx/html # 定义容器启动后的工作目录  

ports中可以声明端口信息和环境变量,这里我们声明容器要暴露的端口为80,使用TCP协议,端口名称为http。

    ports:
    - name: http # 端口名称
      containerPort: 80 # 描述容器内要暴露什么端口
      protocol: TCP # 描述该端口是基于哪种协议通信的

为容器设置一个名为JVM_OPTS的环境变量,值为-Xms128m -Xmx128m。

    - env: # 环境变量
      name: JVM_OPTS # 环境变量名称  
      value: '-Xms128m -Xmx128m' # 环境变量的值

 resources配置项可以设置容器的资源请求(requests)和限制(limits)。requests定义了最少需要分配多少资源给容器,limits定义了容器能使用的资源上限。

    resources:
      requests: # 最少需要多少资源
        cpu: 100m # 限制 cpu 最少使用 0.1 个核心
        memory: 128Mi # 限制内存最少使用 128兆
      limits: # 最多可以用多少资源
        cpu: 200m # 限制 cpu 最多使用 0.2 个核心
        memory: 256Mi # 限制 最多使用 256兆

restartPolicy可以设置容器的重启策略,这里我们设置为失败策略,只有失败的情况才会重启

  restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启

4.3. 指定配置文件启动pod 

kubectl create -f nginx-demo.yaml

 

查看我们创建的pod资源

kubectl get pod 

可以看到我们的nginx pod资源就创建了,状态为容器创建中,需要等待一段时间 

 

 

5.总结

在本文中,我们探讨了 Kubernetes(K8S)中Pod的概念,并从 Pod 入手,学习如何在 K8S 集群中部署和管理服务。

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

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

相关文章

08.3.grafana自定义图形

grafana自定义图形 找插件里面的zabbix 点击update 数据源—zabbix数据源,添加zabbix数据源 选择zabbix类型 我这里配置的是本地,所以URL直接localhost 这里配置zabbix登录账号密码Admin/zabbix 然后点击保存并测试,会直接显示版本 导入模板&…

JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)

目录 集合体系概述 集合体系结构 Collection集合体系 Collection的常用方法 介绍 实例演示 完整代码 集合体系概述 集合体系结构 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 为了满足…

ACM 的代码编码示例

写在最前面的 实践的顺序, 应该是先将基础的 数据结构题目类型给实现。 然后再开始尝试 实现对应类型的算法题目,如回溯算法, 贪心算法, 动态规划, 图论; 基础的数据结构, 推荐卡尔的&#xff…

【C++】vector的底层原理讲解及其实现

目录 一、认识vector底层结构 二、初始化vector的函数 构造函数拷贝构造赋值构造initializer_list构造迭代器区间构造 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 一、认识vector底层结构 STL库中实现vector其实是用三个指针来完成的&#x…

PY32F403系列单片机,32位M4内核MCU,主频最高144MHZ

PY32F403系列单片机是基于Arm Cortex-M4核的32位通用微控制器产品。内置的FPU和DSP功能支持浮点运算和全部DSP指令。通过平衡成本,性能,功耗来获得更好的用户体验。 PY32F403单片机典型工作频率可达144MHZ,内置高速存储器,丰富的…

sql注入之bool盲注

目录 盲注步骤 1、进入靶场 2、如下图所示输入?id1‘ 判断此时存在注入点 3、判断列数 ​编辑 4、开始盲注 普通的python脚本 代码思想 结果 二分查找python脚本 二分查找算法思想简介 二分查找与普通查找的主要差距 代码思想 代码 结果​编辑 下面以…

图像融合-下游任务(目标检测、实例分割、深度估计、局部区域细节放大)

下游任务: 采用目标检测、实例分割和深度估计的下游任务来验证图像融合结果质量。 文章目录 下游任务:1.目标检测2.实例分割3.深度估计局部细节放大工具Update1.目标检测 YOLOv8:https://github.com/ultralytics/ultralytics 步骤内容第一步下载项目到本地第二步安装READ…

文献阅读——中国农产品期货的正负价格泡沫(LPPLS)

Positive and negative price bubbles of Chinese agricultural commodity futures Fang, Ming, Yizhou Lin, and Chiu-Lan Chang. “Positive and negative price bubbles of Chinese agricultural commodity futures.” Economic Analysis and Policy 78 (2023): 456-471. 经…

以项目为中心打造企业卓越经营管理体系︱PMO大会

全国PMO专业人士年度盛会 广东林氏家居股份有限公司战略副总裁杨永柠先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“以项目为中心打造企业卓越经营管理体系”。大会将于6月29-30日在北京举办,敬请关注! 议题简要&…

WPS表格:使用vlookup函数解决乱序数据对应问题

我们常常会遇到两个表格的内容相同,但是顺序不一致的情况。并且这种顺序无关于简单的排序,而是一种业务性很强的复杂排序规则。下面我举个例子,使用VLOOKUP复制数据。 假设太阳系行星举办了一次卖萌比赛,由太阳妈妈决定谁是最萌的…

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后能够改变类行为,分析类信息&#xff…

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入,允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法: 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…

JVM调优-调优原则和原理分析

1.写在前面 对于JVM调优这个话题,可能大部分程序员都听过这个名词。 但是绝大多数程序员,都没有真真实实去干过,都没有真实的实践过。也不懂得如何调优?不知道要调成怎么样? 那今天咋们就对这个话题来展开描述一下&…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git,本质上还是使用本地安装的Git软件,所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

kali linux2024.1版安装

1 基于 VMware 安装 Kali 系统 打开已经安装好的 VMware 程序,点击选项卡中的“主页”--》而后点击“创建新的虚拟机” 选择“典型(推荐)”,并点击“下一步” 客户机操作系统镜像选择:选择“稍后安装操作系统”,并点击“下一步”…

全新神经网络架构KAN——本文用于学习与探索

论文地址:https://arxiv.org/pdf/2404.19756 Github:GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks 文档说明:Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation 本文仅…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测,2024.4.24,华为机试 🏩题目一描述:输入格式输出格式样例1样例2样例3数据范围解题思路一:dfs解题思路二:直接二分查找哇!解题思路三&am…

经典权限五张表功能实现

文章目录 用户模块(未使用框架)查询功能实现步骤代码 新增功能实现步骤代码 修改功能实现步骤代码实现 删除功能实现步骤代码实现 用户模块会了,其他两个模块与其类似 用户模块(未使用框架) 查询功能 这里将模糊查询和分页查询写在一起 实现步骤 前端&#xff1…

Linux下安装gmp6.2.1的详细操作(深度学习)

方式一:编译gmp GMP官方地址https://gmplib.org/ 1. 官网下载gmp安装包 2. 解压下载好的安装包 tar -zxvf gmp-6.2.1.tar.bz2 3. 进入解压后的文件夹 cd gmp-6.2.1 4. 指定安装路径进行安装 # /usr/local换成自己的安装路径 ./configure --prefix/usr/local 5. 编…