糖呀糖啦~Pleiades
首页
归档
关于
友链
切换模式
返回顶部
首页
技术实践
书斋絮语
晴天札记
糖呀糖啦~Pleiades
首页
技术实践
书斋絮语
晴天札记
首页
归档
关于
友链
【Pod】Pod 定义与基本用法
技术实践
·
20 天前
糖呀糖 xyz
# Pod 定义 YAML 格式的 Pod 定义文件完整内容如下: ```yaml apiVersion: v1 # Pod API 版本,v1 是稳定版,String,必选 kind: Pod # 资源类型为 Pod,String,必选 metadata: # 元数据定义,Object,必选 name: string # Pod 的名称,必选,命名规范需要符合 RFC 1035 规范,metadata.name namespace: string # Pod 所属的命名空间,默认值为 default,必选,metadata.namespace labels: # 标签定义 key: value # 标签是 key-value 格式 annotations: # 注解定义 key: value # 注解是 key-value 格式 spec: # Pod 规格定义,object,必选 containers: # 容器定义,是一个数组,必选,spec.containers[] - name: string # 容器名称,必选,spec.containers[].name image: string # 容器镜像,必选,spec.containers[].image imagePullPolicy: Always # 镜像拉取策略:Always、Never、IfNotPresent # Always:每次都尝试重新拉取镜像 # IfNotPresent:如果本地有该镜像,则使用本地的镜像,本地不存在时拉取镜像 # Never:仅使用本地镜像 # 如果包含以下设置,系统将默认设置 imagePullPolicy=Always: # 不设置 imagePullPolicy,也未指定镜像的 tag # 不设置 imagePullPolicy,镜像 tag 为 latest # 启用名为 AlwaysPullImages 的准入控制器(Admission Controller) command: ["string"] # 容器启动命令,如果不指定则使用镜像打包时使用的启动命令 args: ["string"] # 容器的启动命令参数列表 workdingDir: string # 容器的工作目录 volumeMounts: # 卷挂载定义,挂载到容器内部的存储卷配置 - name: string # 挂载卷名称,引用 Pod 定义的共享存储卷的名称,需要使用 volumes[]部分定义的共享存储卷名称 mountPath: string # 挂载路径,存储卷在容器内 Mount 的绝对路径,应少于 512 个字符 readOnly: false # 是否为只读模式,默认为读写 ports: # 端口定义,容器需要暴露的端口号列表 - name: string # 端口名称 containerPort: 80 # 容器需要监听的端口号 hostPort: 80 # 主机端口,容器所在主机需要监听的端口号,默认与 containerPort 想通,设置 hostPath 时,同一台宿主机将无法启动该容器的第 2 份副本 protocol: TCP # 端口协议,TCP/UDP/SCTP,默认值为 TCP env: # 环境变量定义 - name: string # 环境变量名 value: string # 环境变量值 resources: # 资源限制和资源请求的设置 limits: # 资源限制的设置(资源上限) cpu: "1" # CPU 限制,单位为 core 数,将用于 docker run --cpu-shares 参数 memory: "256Mi" # 内存限制,单位可以为 MiB、GiB 等,将用于 docker run -- memory 参数 requeests: # 资源请求 cpu: "500m" # CPU 请求,单位为 core 数,容器启动的初始可用数量 memory: "128Mi" # 内存请求,单位可以为 MiB、GiB 等,容器启动的初始可用数量 livenessProbe: # 存活探针 exec: # 执行命令检查,对 Pod 内各容器健康检查的设置,exec 方式 command: ["string"] # exec 方式需要指定的命令或者脚本 httpGet: # HTTP GET 检查,object, path: string port: 80 host: string scheme: HTTP # HTTP/HTTPS httpHeaders: # HTTP 同 - name: string value: string topSocket: # TCP 端口检查,对 Pod 内各容器健康检查的设置,tcpSocket 方式 port: 80 initialDelaySecond: 0 # 初始延迟,容器启动完成后首次探测的时间,单位 s timeoutSeconds: 1 # 超时时间,对容器健康检查的探测等待响应的超时时间设置,单位 s,默认值为 1。若超过该超时时间设置,则将认为该容器不健康,会重启该容器 periodSeconds: 10 # 检查间隔,对容器健康检查的定期探测时间设置,单位 s,默认 10s 探测一次 successThreshold: 1 # 成功阈值 failureThreshold: 3 # 失败阈值 securityContext: # 安全上下文 privileged: false # 是否特权容器 restartPolicy: Always # 重启策略,Always、OnFailure、Never,默认值为 Always # Always:Pod 一旦终止运行,则无论容器是如何终止的,kubelet 都将重启它 # OnFilure:只有 Pod 以非零退户码终止时,kubelet 才会重启该容器。如果容器正常结束(退出码为 0),则 kubelet 将不会重启它 # Never:Pod 终止后,kubelet 将退出码报告给 Master,不会再重启该 Pod nodeSelector: # 节点选择器,设置 Node 的 Label,以 key:value 的格式,Pod 将被调度到具有这些 Label 的 Node 上 key: value imagePullSecrets: # 镜像拉取密钥 - name: string # 密钥名称 hostNetwork: false # 是否使用主机网络模式,默认值为 false。 # 设置为 true 表示容器使用宿主机网络,不再使用 Docker 网桥,该 Pod 将无法再同一台宿主机上启动第 2 个副本 volumes: # 卷定义,该 Pod 上定义的共享存储卷列表 - name: string # 共享存储卷名称,容器定义部分的 containers[].volumeMounts[].name 将引用该共享存储卷的名称 emptyDir: {} # 临时目录卷,与 Pod 同生命周期的一个临时目录,值为一个空对象 hostPath: # 主机路径卷,挂载 Pod 所在宿主机的目录 path: string # 主机路径,将被用于容器中 mount 的目录 secret: # Secret 存储卷,挂载集群预定义的 secret 对象到容器内部 secretName: string # Secret 名称 items: # Secret 条目 - key: string # 键名 path: string # 路径 configMap: # ConfigMap 的存储卷,挂载集群预定义的 configMap 对象到容器内部 name: string # ConfigMap 名 items: # ConfigMap 条目 - key: string # 键名 path: string # 路径 ``` # 基本用法 Supervisor 辅助工具进行前台运行的功能,提供一种可以同时启动多个后台应用,并保持Supervisor 自身在前台执行的机制 Pod 可以由 1 个或多个容器组合而成,看之前的例子 [[Kubernetes 术语 - Label、Replication Controller、Deployment]] 中可以知道 这个 frontend Pod 在成功启动后,将启动 1 个 Docker 容器 另一个场景:当 frontend 和 redis 两个容器应用为紧耦合的关系,并组合成一个整体对外提供服务时,应将这两个容器打包为一个 Pod:  配置文件 `frontend-localredis-pod.yaml` 内容: ```yaml apiVersion: v1 kind: Pod metadata: name: redis-php labels: name: redis-php spec: containers: - name: frontend image: kubeguide/guestbook-php-frontend:localredis # 加前缀 dockerio.vkus1.skybyte.me/kubeguide/ ports: - containerPort: 80 - name: redis image: kubeguide/redis-master # 在实际的实践过程中,kubeguide/redis-master 镜像获取失败,换成了 library/redis:latest ports: - containerPort: 6379 ``` 属于同一个 Pod 的多个容器应用之间相互访问时,仅需要通过 localhost 就可以通信,这样这一组容器被 “绑定” 在了一个环境中 在 Docker 容器 `kubeguide/guestbook-php-frontend:localredis` 的 PHP 网页中,直接通过 URL 地址 “localhost:6379" 对同属于一个 Pod 的redis-master 进行访问 ```bash kubectl describe pod redis-php ``` # References - claude 3.5 sonnet - DeepSeek-V3 - Kubernetes 权威指南:从 Docker 到 Kubernetes 实践全接触(第 4 版)
Kubernetes
取消回复
提交评论
糖呀糖 xyz
我们谈论生活,讨论技术,借由文字,抵达心灵。
热门文章
【Kubernetes】第一个实例 - Java Web 应用
Obsidian 迁移全记录(又名:纯小白的闭坑指南)
使用宝塔面板对网站、数据库等进行定时备份到腾讯云 COS 对象存储
2025 年
在细雨中呼喊,在困顿中挣扎
Ubuntu 22.04 server 安装教程
Debian 12.2 安装方法
最新评论
tl.s: 很实用 🦆🦆
tl.s: 绘图很清晰,图示质量很高
tl.s: 写的很详细,赞👍
Deep Router: 大佬好强!!!
tls: 写的很详细,很清晰!
tl.s: 讲的很清楚,语言组织很好 🦆🦆🦆🦆🦆🦆🦆🦆🦆🦆
tl.s: 好棒🦆🦆🦆🦆🦆🦆🦆🦆🦆🦆🦆
热门标签
Kubernetes
Ubuntu
Linux
Python3
生活
2025
Debian
技术实践
在细雨中呼喊
读书笔记
笔记软件
Obsidian
2024
openEuler
Kuboard
粤ICP备2024349207号