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

【kubernetes】-3 pod基础和yaml文件

文章目录

  • pod基础和YAML文件
    • 1、pod简要介绍
      • 1.1 pod中的容器种类
      • 1.2 pod的特性
        • 1.2.1 共享资源
        • 1.2.2 pod的三种类型
        • 1.2.3 镜像下载策略
        • 1.2.4 pod容器的重启策略
    • 2、YAML文件
        • 1. Deployment 示例
        • 2. Service 示例
      • 常用操作
        • 创建资源
        • 查看资源
        • 查看生成的YAML格式
        • 使用yaml文件格式导出并修改配置
        • 查看字段帮助信息
        • **Kubernetes 中的端口说明**

pod基础和YAML文件

1、pod简要介绍

1.1 pod中的容器种类

  • init容器–初始化容器

初始化容器式第一个运行的容器,作用是为后面的容器运行准备初始化运行环境,并且完成之后退出

  • pause容器–基础容器

为业务容器提供共享namespace,例如mount namespace 、network namespace 等

  • 业务容器:

实际运行的业务应用,一个pod中可以有多个业务容器,在kubectl get pod 中,业务容器的数量会被计算到READY的就绪指标中 例如 :READY 1/1

1.2 pod的特性

1.2.1 共享资源
  • 同一个pod中的容器运行在同一个node节点上
  • 容器之间通过localhost相互通信,共享一个IP和端口范围
  • 共享同一个存储卷(volume),实现容器之间的数据共享
1.2.2 pod的三种类型
  1. 自主式pod
  • 由scheduler调度到node节点部署
  • 不被控制器管理,没有自愈能力(pod挂了不会被重建)
  • 没有副本管理能力,不支持滚动更新
  • 配置信息存储在etcd中
  • 创建命令:kubectl run
  1. 控制器管理的pod
  • 由scheduler调度到node节点部署
  • 被控制器(如deployment、statefulset)管理
  • 具有自愈能力
  • 支持副本文件滚动更新
  • 配置信息存储在etcd中
  • 创建命令kubectl create deployment...
  1. 静态pod
  • 不由scheduler调度,也不通过API server创建
  • 由kubelet自行创建和管理
  • 配置信息存储在node节点的/etc/kubernetes/manifests目录中
  • kubelet会自动根据该目录中的YAML文件创建静态pod
  • 删除YAML文件后,kubelet会自动删除静态pod
1.2.3 镜像下载策略

通过imagepullpolice字段定义

  1. IfNotPresent
  • 优先使用Node节点本地已存在的镜像
  • 如果本地没有,则从仓库中拉取镜像
  • 默认策略:适用于标签为非latest的镜像
  1. Always
  • 总是从仓库拉取镜像,无论本地是否存在
  • 默认策略:适用于标签为latest或者无标签的镜像
  1. Never
  • 仅适用于Node节点本地的镜像,总是不从仓库拉取镜像
1.2.4 pod容器的重启策略

通过restarpolice字段定义

  1. Always
  • 当容器退出时,总是重启容器(无论退出状态码如何)
  • 默认策略:适用于Deployment、Statefulset、Daemonset等控制器管理的pod
  1. OnFailure
  • 仅当容器异常退出时(退出状态码为非0),重启容器
  • 正常退出的容器不会重启
  1. Never
  • 当容器退出时,总是不能重启容器

【注】:deployment、statefulset、daemonset 控制器的pod容器重启策略只能设置为always

2、YAML文件

1. Deployment 示例
apiVersion: apps/v1          # API 版本,如果是业务场景一般首选使用 apps/v1。带有beta字样的代表的是测试版本,不用在生产环境中
kind: Deployment             # 定义资源的类型/角色,deployment为无状态应用控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:                    # 定义资源的元数据信息,比如资源的名称、namespace、标签等信息name: nginx-deployment     # 资源名称,在同一个namespace空间中必须是唯一的labels:                    # 标签app: nginx
spec:                        # 定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性replicas: 3                # 副本数量selector:                  # 标签选择器matchLabels:             # 定义匹配标签app: nginx             # 需与 .spec.template.metadata.labels 定义的标签保持一致template:                  # Pod 模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配metadata:labels:                # 定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致app: nginxspec:containers:            # 容器定义- name: nginx          # 容器名称,一个 - name: 定义一个容器image: nginx:1.15.4  # 镜像以及版本ports:- containerPort: 80  # 容器端口
  • API 资源版本标签
    • 通过以下命令查看支持的 API 版本:
kubectl api-versions

常用版本:

  • apps/v1:业务场景首选。
  • v1:核心资源(如 Pod、Service)的稳定版本。
  • beta:测试版本,不建议用于生产环境。
2. Service 示例
apiVersion: v1
kind: Service
metadata:name: nginx-service        # 服务名称labels:app: nginx
spec:type: NodePort             # 服务类型ports:- port: 8080               # 服务端口targetPort: 80           # 容器端口nodePort: 30007          # 节点端口selector:app: nginx               # 选择器,匹配 Pod 标签

常用操作

创建资源
kubectl create -f nginx-deployment.yaml
kubectl create -f nginx-service.yaml
查看资源
kubectl get pods -o wide
kubectl get svc
查看生成的YAML格式
# 查看 Pod 的 YAML 配置
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml# 查看 Deployment 的 YAML 配置
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
使用yaml文件格式导出并修改配置
# 导出 Pod 配置到 nginx-test.yaml
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml# 导出 Deployment 配置到 nginx-deploy.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml
查看字段帮助信息
kubectl explain deployments.spec.template.spec.containers
#或
kubectl explain pods.spec.containers
Kubernetes 中的端口说明
  • port:Service 在集群内部的访问端口,通过 clusterIP:port 访问。
  • nodePort:外部访问 Service 的端口,通过 nodeIP:nodePort 访问(默认范围:30000-32767)。
  • targetPort:Pod 的端口,流量从 portnodePort 转发到 Pod 的 targetPort。 8080
  • containerPort:Pod 内容器的端口,targetPort 映射到 containerPort
http://www.dtcms.com/a/294396.html

相关文章:

  • 记录一本设计模式的书
  • vue3与ue5通信-工具类
  • [C/C++内存安全]_[中级]_[安全处理字符串]
  • ctfshow pwn40
  • 保护板测试仪:守护电池安全的“幕后卫士”
  • 关于SPring基础和Vue的学习
  • Docker 容器中的 HEAD 请求缺失 header?从 Content-MD5 缺失聊起
  • 超声原始数据重构成B扫成像的MATLAB实现
  • 【AI News | 20250722】每日AI进展
  • now能减少mysql的压力吗
  • 【Android】用 ViewPager2 + Fragment + TabLayout 实现标签页切换
  • linux性能调整和故障排查
  • LeetCode热题100--24. 两两交换链表中的节点--中等
  • Linux文件——Ext2文件系统(3)_软硬链接
  • Ubuntu 1804 编译ffmpeg qsv MediaSDK libva 遇到的问题记录
  • #Linux内存管理# 详细介绍madvise函数的工作原理
  • Elasticsearch(ES)安装
  • 分布式电商系统:缓存策略、负载均衡与容灾方案
  • 解决 Electron 中 window.open 打开新窗口的各种“坑”
  • Python 程序设计讲义(6):Python 的基本用法——运算符与表达式
  • API 汇总:ONLYOFFICE 文档最近更新
  • 背包DP之0/1背包
  • 11-1 浅层神经网络及计算前向传播
  • 局部重要性注意力LIA,通过区域重要性图与门控机制实现高阶信息交互,自适应增强有用特征、抑制冗余信息,平衡模型性能与效率。
  • VR-Doh: 革新3D建模的虚拟现实体验
  • DPVR亮相青岛品牌日,崂山科创力量引领AI眼镜新浪潮
  • 基于PLC的轨检小车控制器设计
  • .NET-键控服务依赖注入
  • 【实战】Dify从0到100进阶--文档解读(13)API前端再开发
  • 苍穹外卖DAY11