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


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
221 25
|
11月前
|
Prometheus Kubernetes 监控
深入探索Kubernetes中的Pod自动扩展(Horizontal Pod Autoscaler, HPA)
深入探索Kubernetes中的Pod自动扩展(Horizontal Pod Autoscaler, HPA)
|
7月前
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
224 12
|
11月前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
180 1
【赵渝强老师】Kubernetes中Pod的基础容器
|
11月前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
189 1
|
11月前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
143 1
|
11月前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
174 1
|
11月前
|
存储 Kubernetes 调度
深入理解Kubernetes中的Pod与Container
深入理解Kubernetes中的Pod与Container
607 0
|
11月前
|
Kubernetes Java 调度
Kubernetes中的Pod垃圾回收策略是什么
Kubernetes中的Pod垃圾回收策略是什么
|
11月前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理

热门文章

最新文章

推荐镜像

更多