k8s学习记录(二):Pod基础篇

ops/2025/2/24 4:39:30/

一、前言

上一篇文章中,我们对于k8s有了初步的认识,学习了k8s的架构(Master-Worker),同时也简单的了解了k8s中比较重要的的几个组件,Pod、ReplicaSet、Deployment、Service等等(当然了还有更多的组件,后续会一一讲解)今天我们继续站在一个后端开发的角度去详细学习一下其中的Pod组件。本文先假定k8s已经安装完成(具体如何安装后续会有完整的篇幅讲解)

二、Pod

1、什么是Pod

Pod是k8s中资源分配的最小单位,k8s通过pod来运行容器,例如Pod里可以运行docker容器。一个Pod里可以运行一个或多个容器容器之间相互共享资源包括但不限于内存、网络、CPU等等。

2、创建一个Pod

1、编写Yaml资源清单

我本地有一个Nginx的Docker 镜像,接下来的示例将用这个镜像来做实验。

我们先编写一份资源清单,完整的资源清单从github上可以查看https://github.com/kubernetes/examples/blob/master/guestbook/all-in-one/guestbook-all-in-one.yaml

apiVersion: v1  #api版本v1
kind: Pod #类型为Pod
metadata:  #元数据name: nginx #Pod的name为nginx
spec: #规约containers: #容器集合(一个Pod里可以有多个Pod)- name: nginx #名称 nginximage: nginx:1.23.3 ##重要:镜像imagePullPolicy: IfNotPresent #镜像拉取策略:如果不存在再拉取ports:- containerPort: 80 #端口 80,这里的端口并不会映射到物理机

如果不知道资源清单怎么填写,我们还可以使用k8s提供的命令行的工具来,例如我想知道 spec字段如何填写,我们就可以使用命令 kubectl explain pod.sepc,如下,那个字段不知道就直接查询。

2、基于资源清单创建Pod

编写好资源清单之后,我们使用kubectl apply -f <资源路径>,本案例就是:kubectl apply -f test_pod.yaml

然后我们查看k8s中的pod,kubectl get pods -o wide, 可以看到我们的Pod已经创建了。

k8s为我们创建了一个名为 Nginx的Pod,且分配了IP 10.244.0.52,当然了这个IP在外部是访问不通的,这个是k8s内部的IP,至于如何可以访问放到后面的文章中说明。现在想使用可以先进入当前容器使用命令:

kubect exec -it nginx --/bin/bash

curl 10.244.0.52

3、查看Pod描述

我们可以使用kubectl describe pods nginx来查看我们创建的pod的详细信息,这里看个大概就行,具体的信息用到的时候再查也是可以的。

4、编辑Pod

有时候我们需要编辑Pod,此时使用命令 kubectl edit pods nginx,例如我们想把版本换成1.23.4

5、查看Pod详情

使用Kubectl describe pod <pod_name>可以查看Pod事件,例如 Kubectl describe pod nginx

从图中我们可以看出镜像已经从1.23.3变更为1.23.4,同时还展示了pod的状态为Running,端口为80等信息,最下面的是Pod事件包含Pod是调度、Pod拉取镜像、创建容器、杀死Pod(因为我们编辑了镜像),接着拉取镜像,最后基于最新的镜像创建容器

6、查看Pod日志

有时候我们需要查看Pod里的日志方便我们排查问题,此时可以用命令 Kubect logs <pod_name>,例如,kubect logs nginx,如下图

7、进入Pod

和我们使用Docker时一样,有时候我们需要进入Pod做一些操作,此时可以用命令 kubectl exec -it <pod_name> --/bin/bash ,例如kubectl exec -it nginx – /bin/bash 这样我们就进入容器内部了。

8、删除一个Pod

删除Pod使用到的命令为kubectl delete pod <pod_name> ,例如我要删除 nginx这个pod命令为,kubectl delete pod nginx

此时名为 nginx的pod已经不存在了(另外两个pod是之前做实验留下的,这里忽略)

三、小结

文章至此,我们对Pod有了更深入一些的了解,当然了这些都只是最基础的Pod操作,包括Pod的增删改查、pod日志查看、进入pod。接下来的文章会继续深入pod其他的一些知识,例如讲解标签、亲和性、容忍度等等。同时如何安装一个k8s集群也会有单独的篇章来讲述,希望对你有所帮助。

四、未完待续


http://www.ppmy.cn/ops/160884.html

相关文章

Java多线程三:补充知识

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Lambda表达式 简介&#xff1a; 希腊字母表中排序第十一位的字母&#xff0c;英语名称为Lambda避免匿名内部类定义过多其实质属于函数式编程的概念 为什么要使用lam…

51单片机学习之旅——在LCD1602上显示时钟

新建工程 打开软件 LCD1602模块代码添加 因为我们在LCD1602上显示时钟&#xff0c;因此我们需要添加LCD1602的模块代码 跳转到这条博客51单片机学习之旅——模块化编程集_51单片机ruminant-CSDN博客&#xff0c;复制相关代码跳转到这条博客51单片机学习之旅——模块化编程集…

web的分离不分离:前后端分离与不分离全面分析

让我们一起走向未来 &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[1504566…

Uniapp 设计思路全分享

一、引言 在当今移动应用开发领域&#xff0c;Uniapp 凭借其一套代码多端运行的特性&#xff0c;极大地提高了开发效率&#xff0c;降低了开发成本。然而&#xff0c;要开发出高质量、用户体验佳的 Uniapp 应用&#xff0c;清晰合理的设计思路至关重要。本文将全面分享 Uniapp…

ES6相关操作(2)

一.Promise Promise是ES6引入的异步编程工具。 语法上Promise是一个构造函数,用于封装异步操作并可以获取操作成功或失败的结果 Promise构造函数:Promise(excutor){} Promise的常用函数:then,catch 实例化Promise对象(创建Promise工具) let data"请求数据"//该数据为…

全志A133 android10 适配SLM770A 4G模块

一&#xff0c;模块基本信息 1.官方介绍 SLM770A是美格智能最新推出的一款LTE Cat.4无线通讯模组&#xff0c;最大支持下行速率150Mbps及上行速率50Mbps。同时向下兼容现有的3G和2G网络&#xff0c;以确保即使在偏远地区也可以进行网络通信。 SLM770A模组支持分集接收和MIMO技…

【Bluedroid】AVRCP 连接源码分析(一)

一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…

DeepSeek 与网络安全:AI 在网络安全领域的应用与挑战

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在当今数字化时代&#xff0c;网络安全已成为国家、企业和个人面临的重要挑战。从传统的病毒、木马攻击&#xff0c;到高…