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

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: nginx
    spec:
      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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值