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

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

0cf96287b9a64bb1b758342ddae94d94.png


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

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

参数名 类型 字段说明
apiVersion String K8S APl 的版本,可以用 kubectl api versions 命令查询
kind String yam 文件定义的资源类型和角色
metadata Object 元数据对象,下面是它的属性
metadata.name String 元数据对象的名字,比如 pod 的名字
metadata.namespace String 元数据对象的命名空间
Spec Object 详细定义对象
spec.containers[] list 定义 Spec 对象的容器列表
spec.containers[].name String 为列表中的某个容器定义名称
spec.containers[].image String 为列表中的某个容器定义需要的镜像名称

image.png

image.png

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' # 命名空间的配置

我们这里定义了在该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 # 描述该端口是基于哪种协议通信的

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 集群中部署和管理服务。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
存储 Kubernetes 调度
【赵渝强老师】什么是Kubernetes的Pod
Pod 是 Kubernetes 中的基本逻辑单位,代表集群上的一个应用实例。它可以由一个或多个容器组成,并包含数据存储和网络配置等资源。Pod 支持多种容器执行环境,如 Docker。Kubernetes 使用 Pod 管理容器,具有简化部署、方便扩展和调度管理等优点。视频讲解和图示详细介绍了 Pod 的组成结构和使用方式。
|
1月前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
1月前
|
Prometheus Kubernetes 监控
深入探索Kubernetes中的Pod自动扩展(Horizontal Pod Autoscaler, HPA)
深入探索Kubernetes中的Pod自动扩展(Horizontal Pod Autoscaler, HPA)
|
1月前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
1月前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
1月前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
1月前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
216 1
|
1月前
|
存储 Kubernetes 调度
深入理解Kubernetes中的Pod与Container
深入理解Kubernetes中的Pod与Container
53 0
|
1月前
|
Kubernetes Java 调度
Kubernetes中的Pod垃圾回收策略是什么
Kubernetes中的Pod垃圾回收策略是什么
|
1月前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理