k8s关于metadata、spec.containers、spec.volumes的属性介绍(yaml格式)

目录

一.metadata常用属性

二.spec.containers子属性介绍

explain pod.spec.containers给出的参考

1.command示例演示

2.env和envFrom示例演示

3.ports部分详解

4.resources部分详解

5.startupProbe格式演示

6.terminationMessagePath和terminationMessagePolicy格式演示

7.volumeDevices格式演示

8.volumeMounts格式演示

三.spec.volumes子属性介绍


一.metadata常用属性

[root@k8s-master pod]# kubectl explain pod.metadata
KIND:       Pod
VERSION:    v1
​
FIELD: metadata <ObjectMeta>
​
FIELDS:
​labels    <map[string]string>#指定资源的label列表
​name  <string>#自定义名称namespace <string>#指定名称空间

二.spec.containers子属性介绍

explain pod.spec.containers给出的参考

[root@k8s-master pod]# kubectl explain pod.spec.containers
KIND:       Pod
VERSION:    v1
​
FIELD: containers <[]Container>
​
DESCRIPTION:List of containers belonging to the pod. Containers cannot currently beadded or removed. There must be at least one container in a Pod. Cannot beupdated.A single application container that you want to run within a pod.FIELDS:args  <[]string>#容器的启动命令需要的参数列表,主要用于和docker和Dockerfile相关的配置
​command   <[]string>#启动容器后执行的命令,不指定时使用打包时使用的启动命令
​env   <[]EnvVar>#容器环境变量的配置列表
​envFrom   <[]EnvFromSource>#使用了ConfigMap来指定变量文件时,用envFrom来指定
​image <string>#镜像名称
​imagePullPolicy   <string>#镜像拉取策略,指定tag为latest默认always,tag为具体版本号,默认IfNotPresent。#always表示每次都尝试重新拉取镜像;#ifNotPresent表示如果本地有那个镜像就使用本地的,不存在时才拉取;#Nerver表示仅使用本地有的镜像,绝不拉取,本地没有时报错
​lifecycle <Lifecycle>#定义容器的生命周期,使得容器在启动和终止时执行特定的任务#可选portStart(在容器创建后立即执行的操作。这可以用于执行一些初始化任务,比如检查容器依赖的服务是否可用,或者向外部系统注册当前容器的信息等)#和preStop(在容器终止之前执行的操作。这可以用于执行一些清理任务,比如保存数据、发送信号给其他服务表明当前容器即将停止等)两个配置
​livenessProbe <Probe>#指定对容器进行存活性检测,检测失败会执行重启容器等操作。#HTTP(通过向容器提供的 HTTP 端点发送请求,并根据返回的状态码来判断容器的存活状态)#TCP(通过尝试建立 TCP 连接来判断容器的存活状态)#Exec(通过在容器内执行特定的命令,并根据命令的返回状态来判断容器的存活状态)三种探测方式
​name  <string> -required-#容器名称
​ports <[]ContainerPort>#容器需要暴露的端口列表
​readinessProbe    <Probe>#对容器实行就绪检测,确定容器是否已经准备好接受流量,检测失败则会剔除该服务直至再次检测成功#和livenessProbe具有同样含义的三种方式
​resources <ResourceRequirements>#资源限制和资源请求的配置
​restartPolicy <string>#指定容器的重新启动策略#Always(无论什么原因导致容器退出,将始终尝试重新启动容器,以确保容器一直处于运行状态)#OnFailture(只有在容器以非零状态退出时才会尝试重新启动容器。换句话说,如果容器正常退出(状态码为 0),则不会重新启动它)#Never(永远不会尝试重新启动容器。这意味着一旦容器退出,它将保持停止状态,直到人为干预为止)
​startupProbe  <Probe>#后文有格式演示,与livenessProbe和readinessProbe类似,仅在容器启动时运行一次,用于确定容器是否已经准备好接收流量stdin <boolean>#true/false,是否可以通过 kubectl attach 命令将本地标准输入连接到容器的标准输入,从而与容器进行交互
​stdinOnce <boolean>#同stdin,但只接受第一个进程的标准输入,后即关闭
​terminationMessagePath    <string>#指定容器终止时记录终止消息的文件路径
​terminationMessagePolicy  <string>#指定容器终止时记录终止消息的策略#File,使用terminationMessagePath所设置的值来记录#FallbackToLogsOnError,如果无法将终止消息写入文件,则将使用容器的日志作为终止消息的内容#后文有格式演示tty   <boolean>#是否分配一个交互终端环境
​volumeDevices <[]VolumeDevice>#设置将主机上的块设备映射到容器内部#name指定名称,devicePath指定设备路径#后文有格式演示volumeMounts  <[]VolumeMount>#后文有格式演示,用于将卷挂载到容器内部特定的位置,mountPath指定目标路径,readOnly可以设置是否只读
​workingDir    <string>#用于指定容器启动时的进程所在目录,对于需要在特定目录下执行命令或者读取特定路径的应用程序非常有用

1.command示例演示

(1)运行一个pod,其中有httpd和busybox两个容器,启动busybox后执行以下操作:每隔60s向/hello.txt中追加一次hello。

使用/bin/sh来执行命令,-c后面指定要执行的命令,sleep可以减少循环过多导致的资源浪费

[root@k8s-master pod]# cat mybusybox.yaml 
apiVersion: v1
kind: Pod
metadata:name: mybusyboxnamespace: myns
spec:containers:- name: httpdimage: httpd- name: busybox  #busybox比较特殊,它相当于一个工具而不是一个软件程序,直接运行时会报错的image: busyboxcommand: ["/bin/sh","-c","touch /hello.txt;while true;do /bin/echo hello >> /hello.txt; sleep 60; done;"][root@k8s-master pod]# kubectl exec -it mybusybox -c busybox -n myns -- /bin/sh -c "cat /hello.txt"
hello
hello
hello
hello
#在对运行的容器进行操作时也可以使用-c去指定要执行的命令,而不需要页面进入容器

(2)注意:当你的k8s是docker部署,还存在Dockerfile的情况,args选项的配置显得比较重要,command和args要实现去覆盖Dockerfile中的ENTRYPOINT功能

  • command和args都没有写时,会使用Dockerfile的配置
  • command写,args没有写,Dockerfile默认的配置不会生效,执行command部分
  • command没写,args写,Dockerfile中配置的ENTRYPOINT的命令会生效,并使用当前args的参数
  • command和args都写,Dockerfile的配置被忽略,执行command和args指定的参数

2.env和envFrom示例演示

(1)运行一个pod,pod内运行busybox容器,容器运行后为在其中创建一个用户,通过引用设置的环境变量来为该用户设置名称和密码

[root@k8s-master pod]# cat user.yaml 
apiVersion: v1
kind: Pod
metadata:name: myusernamespace: myns
spec:containers:- name: my-userimage: busyboxcommand: ["/bin/sh","-c","while true;do /bin/adduser -D $username; echo $username:$password | /bin/chpasswd; sleep 3600; done;"]env:- name: "username"value: "SLB"- name: "password"value: "hello123"
[root@k8s-master pod]# kubectl exec -it myuser -c my-user -n myns -- /bin/sh -c "cat /etc/passwd | grep SLB"
SLB:x:1000:1000:Linux User,,,:/home/SLB:/bin/sh
注意:env设置的变量在容器内都可以引用[root@k8s-master pod]# kubectl exec -it myuser -c my-user -n myns -- /bin/sh
/ # echo $username
SLB
/ # echo $password
hello123

(2)常用方式是使用ConfigMap来将env变量存放在单独的配置文件中,再在配置中通过configMapRef进行引用,如下所示

#create去在同一个命名空间内创建一个user-config来存放用户的两个变量数据
[root@k8s-master pod]# kubectl create configmap user-config --from-literal=username=SLB1 --from-literal=password=hello123 -n myns
configmap/user-config created
​
[root@k8s-master pod]# kubectl get configMap user-config -n myns -o yaml
apiVersion: v1
data:password: hello123username: SLB1
kind: ConfigMap
metadata:creationTimestamp: "2023-11-11T14:14:51Z"name: user-confignamespace: mynsresourceVersion: "45414"uid: 86c13358-0a38-4120-84eb-e15c01aa91f3
​
[root@k8s-master pod]# cat user.yaml 
apiVersion: v1
kind: Pod
metadata:name: myusernamespace: myns
spec:containers:- name: my-userimage: busyboxcommand: ["/bin/sh","-c","while true;do /bin/adduser -D $username; echo $username:$password | /bin/chpasswd; sleep 3600; done;"]envFrom:- configMapRef:  name: user-config
​
[root@k8s-master pod]# kubectl exec -it myuser -c my-user -n myns -- /bin/sh -c "cat /etc/passwd | grep SLB1"
SLB1:x:1000:1000:Linux User,,,:/home/SLB1:/bin/sh

3.ports部分详解

(1)kubectl explain pod.spec.containers.ports

[root@k8s-master pod]# kubectl explain pod.spec.containers.ports
KIND:       Pod
VERSION:    v1
​hostIP    <string>#要将外部端口绑定到的主机的IP
​hostPort  <integer>#容器在主机上公开的端口,如果设置了这个选项,主机上只能是运行容器副本name  <string>#端口的名称,需要具有唯一性
​protocol  <string>#端口协议,UDP/TCP/STCP,默认TCPcontainerPort <integer> -required-#容器要监听的端口(0~65535)

(2)示例

创建一个nginx容器,暴露80端口

[root@k8s-master pod]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:name: mynginxnamespace: mynslabels:run: nginxuser: sulibao
spec:containers:- name: mynginximage: nginxports:- name: mynginx-portcontainerPort: 80
​
[root@k8s-master pod]# kubectl describe pod mynginx -n myns | grep -A 10 "Containers:" | tail -n +2mynginx:Container ID:   containerd://727e31321598fc3065f38d9ecb50b601f81a7723d916c2d550951c6510dcfc06Image:          nginxImage ID:       docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6Port:           80/TCPHost Port:      0/TCPState:          RunningStarted:      Sat, 11 Nov 2023 22:30:08 +0800Ready:          TrueRestart Count:  0

4.resources部分详解

(1)容器运行时的资源配额可以通过resources部分来指定,若该容器资源配置过少自己启动不了,配置过多又会影响其他容器的正常运行

(2)参数解析

limits是用于限制容器的上限资源占用情况,一旦容器真正启动后占用资源超过limits处配置,则会被终止并重启

requests是用于规定容器的下限资源占用情况,若环境资源不足,容器无法启动

cpu是用于指定core数

memory是用于指定内存大小,单位可以是M(10^6字节)、Mi(二进制兆节,为1024^2字节)、G(10^9字节、Gi(二进制千兆字节,为1024^3字节)等

(3)示例

运行一个nginx的pod,资源上限为2cpu、1G内存,资源下为2cpu、2M内存

[root@k8s-master pod]# cat nginx.yaml 
apiiVersion: v1
kind: Pod
metadata:name: mynginxnamespace: mynslabels:run: nginxuser: sulibao
spec:containers:- name: mynginximage: nginxports:- name: mynginx-portcontainerPort: 80resources:limits:cpu: "2"memory: "1G"requests:cpu: "2"memory: "2M"

5.startupProbe格式演示

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxstartupProbe:httpGet:path: /myport: 8080

6.terminationMessagePath和terminationMessagePolicy格式演示

terminationMessagePolicy 设置为 File,且通过 terminationMessagePath 指定了记录终止消息的文件路径

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxterminationMessagePath: /var/log/termination.logterminationMessagePolicy: File

7.volumeDevices格式演示

volumeDevices 将 /dev/sdb 设备映射到 mydevice 的卷中,并将其挂载到 mycontainer 容器内部

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxvolumeDevices:- name: mydevicedevicePath: /dev/sdbvolumes:- name: mydevicehostPath:path: /dev/sdb

8.volumeMounts格式演示

volumeMounts 将 myvolume 的卷挂载到了 /data 路径上,且设置为只读模式

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxvolumeMounts:- name: myvolumemountPath: /datareadOnly: truevolumes:- name: myvolumehostPath:path: /mnt/data

三.spec.volumes子属性介绍

[root@k8s-master pod]# kubectl explain pod.spec.volumes
KIND:       Pod
VERSION:    v1
​
FIELD: volumes <[]Volume>
​azureDisk <AzureDiskVolumeSource>#azureDisk挂载到容器内部
​azureFile <AzureFileVolumeSource>#azureDisk挂载到容器内部,容器可以访问Azure存储中的文件
​cephfs    <CephFSVolumeSource>#Ceph 文件系统挂载到 Pod 内部,使得容器可以访问 Ceph 集群中的文件系统
​cinder    <CinderVolumeSource>#将 OpenStack Cinder 卷挂载到 Pod 内部,使得容器可以访问 OpenStack 中的块存储卷
​configMap <ConfigMapVolumeSource>#将ConfigMap中的配置数据挂载到Pod内部,可以自己创建ConfigMap使得容器可以访问这些配置数据
​csi   <CSIVolumeSource>#将外部存储系统通过 CSI 插件挂载到 Pod 内部,使得容器可以访问这些外部存储
​emptyDir  <EmptyDirVolumeSource>#在 Pod 启动时创建一个空目录,并将其挂载到 Pod 内部,使得容器可以在该目录中进行读写操作。这个空目录的生命周期与 Pod 相关联,当 Pod 被删除时,这个空目录也会被清除,不应该用于持久化存储配置hostPath  <HostPathVolumeSource>#将主机上的特定文件或目录挂载到Pod内部,使得容器可以访问主机上的文件系统内容。这种方式可以用于访问主机上的特定配置文件、日志目录或其他主机文件系统中的内容。#hostPath中的路径path是Pod创建节点的绝对路径,Pod删除后该路径下的数据不会被删除
​name  <string> -required-#指定卷的名称,该名称将在容器的 volumeMounts 中使用,以将卷挂载到容器中nfs   <NFSVolumeSource>#将远程的 NFS 存储挂载到 Pod 内部,使得容器可以访问远程存储中的文件。这种方式可以用于实现多个 Pod 之间共享文件或数据,同时也可以将持久化的存储挂载到 Pod 中,而且这些存储可以跨节点访问#通过server指定nfs服务器地址
​persistentVolumeClaim <PersistentVolumeClaimVolumeSource>#将持久化存储声明(Persistent Volume Claim)挂载为卷,用于访问持久化存储(如 PersistentVolumes)
​secret    <SecretVolumeSource>#将 Secret 对象中的数据挂载为卷,使得容器可以访问其中的敏感数据,如密码、CA证书等

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

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

相关文章

晶圆代工产能利用率下降,降价大战一触即发 | 百能云芯

晶圆代工行业正面临产能利用率的重大挑战&#xff0c;据悉&#xff0c;联电、世界先进和力积电等主要代工厂纷纷降低明年首季的报价&#xff0c;幅度高达两位数百分比&#xff0c;项目客户降幅更高达15%至20%&#xff0c;各大晶圆代工厂深陷产能利用率六成保卫战。 晶圆代工降价…

EDA实验----四选一多路选择器设计(QuartusII)

目录 一&#xff0e;实验目的 二&#xff0e;实验仪器设备 三&#xff0e;实验原理&#xff1a; 四&#xff0e;实验要求 五&#xff0e;实验内容及步骤 1.实验内容 2.实验步骤 六&#xff0e;实验报告 七.实验过程 1.创建Verilog文件&#xff0c;写代码 2.波形仿真 …

获取windows 操作系统 是 win7 还是 win10 32位 或者是 64 位

import platform# 获取操作系统信息 system_info platform.system()# 检测操作系统版本 if "Windows" in system_info:version_info platform.version()if "10" in version_info:print("Windows 10")elif "7" in version_info:print…

如何在苹果iOS系统ipa应用中获取当前版本号和Bundle ID

在iOS应用开发过程中&#xff0c;了解如何获取和使用应用的当前版本号、Bundle ID和其他相关信息是至关重要的。无论是在应用内显示这些信息&#xff0c;还是在编写一些版本依赖的逻辑时&#xff0c;掌握这些知识点都将帮助开发者进行更有效的管理和维护。本文将详细介绍如何在…

解读Sketching the Future (STF):零样本条件视频生成

Diffusion Models视频生成-博客汇总 前言:基于草图的视频生成目前是一个基本无人探索过的领域,videocomposer做过一些简单的探索。Sketching the Future从零样本条件视频生成出发,出色的完成了这一任务。这篇博客就解读一下《Sketching the Future (STF): Applying Conditio…

HarmonyOS应用开发-视频播放器与弹窗

Viedo组件 在手机、平板或是智慧屏这些终端设备上&#xff0c;媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集&#xff0c;还是视频的播放、切换、循环&#xff0c;亦或是相机的预览、拍照等功能&#xff0c;媒体组件都是必不可少的。以视频功能为…

Python中连接池的分析和应用

连接池&#xff08;Connection Pool&#xff09;是在系统初始化的时候&#xff0c;将网络连接作为对象存储在内存中&#xff0c;当用户需要进行连接时&#xff0c;从连接池中取一个已经建立好的空连接对象&#xff0c;使用完后不关闭连接&#xff0c;将连接放回连接池&#xff…

【Vue原理解析】之虚拟DOM

Vue.js是一款流行的JavaScript框架&#xff0c;它采用了虚拟DOM&#xff08;Virtual DOM&#xff09;的概念来提高性能和开发效率。虚拟DOM是Vue.js的核心之一&#xff0c;它通过在内存中构建一个轻量级的DOM树来代替直接操作真实的DOM&#xff0c;从而减少了对真实DOM的操作次…

暖手宝上架亚马逊美国站UL499报告测试标准要求

暖手宝是运用物理及化学原理研制的自动取暖保健用品。该产品以其自动生热&#xff0c;有趣&#xff0c;实用等新颖独特的优势&#xff0c;深受欢迎——暖手宝具有自动取暖&#xff0c;理疗保健等多种功能。只要插上电源等上10分钟左右就能发热&#xff0c;最后一种是通过锂电池…

【华为OD题库-015】报文重排序-Java

题目 对报文进行重传和重排序是常用的可靠性机制&#xff0c;重传缓冲区内有一定数量的子报文&#xff0c;每个子报文在原始报文中的顺序已知&#xff0c;现在需要恢复出原始报文。 输入描述 输入第一行为N,表示子报文的个数&#xff0c;0<N < 1000。 输入第二行为N个子报…

多线程 浏览器渲染引擎 图形用户界面(GUI,Graphical User Interface)应用程序

目录 多线程浏览器渲染引擎图形用户界面&#xff08;GUI&#xff0c;Graphical User Interface&#xff09;应用程序 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的…

【FISCO BCOS】十九、区块链浏览器部署

目录 一、环境依赖 检查环境 1.检查java 二、拉取安装脚本 获取部署安装包 ​编辑 解压安装包 进入目录 三、修改配置 四、部署服务 五、状态检查 检查前后端进程 1.检查后端server进程 2.检查前端的nginx进程 检查进程端口 六、使用区块链浏览器 1.配置群组…

EDA实验-----3-8译码器设计(QuartusII)

目录 一. 实验目的 二. 实验仪器 三. 实验原理及内容 1.实验原理 2.实验内容 四&#xff0e;实验步骤 五. 实验报告 六. 注意事项 七. 实验过程 1.创建Verilog文件&#xff0c;写代码 ​编辑 2.波形仿真 3.连接电路图 4.烧录操作 一. 实验目的 学会Verilog HDL的…

【Java 进阶篇】Java与JQuery:探秘事件绑定、入口函数与样式控制

在现代的Web开发中&#xff0c;Java和JQuery是两个不可或缺的角色。Java为我们提供了强大的后端支持&#xff0c;而JQuery则是前端开发的得力助手。本篇博客将围绕Java和JQuery&#xff0c;深入探讨事件绑定、入口函数和样式控制&#xff0c;带你进入前端开发的奇妙世界。 Jav…

ROS基础—vscode创建工作空间

1、创建ROS工作空间 首先打开ubuntu的终端&#xff0c;接着依次输入如下的命令行&#xff1b; mkdir -p xxx_ws/src(必须得有 src) cd xxx_ws catkin_make当然我一般是新建一个叫做demo的工作空间&#xff0c;如 mkdir -p demo04_ws/src 2、启动vscode cd xxx_ws code . …

粉够荣获淘宝联盟区域理事会常务理事,携手共铸淘客新生态

淘宝联盟区域理事会于2021年成立&#xff0c;首届成立成都、广州、武汉&#xff0c;服务近2000个领军淘宝客企业&#xff0c;作为区域生态与官方交流重要枢纽&#xff0c;理事会举办近百场交流分享会&#xff0c;带动淘客跨域跨业态交流成长。 2023年9月7日第二届淘宝联盟理事…

Unity中关于Lerp()方法的使用

在Unity中&#xff0c;Lerp()方法用于在两个值之间进行线性插值。 它的语法有&#xff1a; public static float Lerp(float a, float b, float t);//在两个float类型的值a和b之间进行线性插值 public static Vector2 Lerp(Vector2 a, Vector2 b, float t);//在两个Vector2类…

【Maven教程】(十):使用 Hudson 进行持续集成—— 从Hudson的安装到任务创建 ~

Maven 使用 Hudson 进行持续集成 1️⃣ 持续集成的作用、过程和优势2️⃣ Hudson 简介与安装3️⃣ 准备 Subversion 仓库4️⃣ Hudson 的基本系统设置5️⃣ 创建 Hudson 任务5.1 Hudson 任务的基本配置5.2 Hudson 任务的源码仓库配置5.3 Hudson 任务的构建触发配置5.4 Hudson …

debian 添加开机启动项

有的时候&#xff0c;经常有自己需要的程序&#xff0c;官方并没有提供添加开机启动的方法&#xff0c;但我们却需要让他们开机启动&#xff08;比如探针类、飞机类、服务类程序等&#xff09;。可能有的人会说&#xff0c;可以使用 /etc/rc.local 啊。是可以使用这个&#xff…