k8s-pod的介绍及命令行创建pod

一、 pod介绍
在kubernetes的世界中,k8s并不直接处理容器,而是使用多个容器共存的理念,这组容器就叫做pod。
pod是k8s中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,其他的资源对象都是用来支撑pod对象功能的,比如,pod控制器就是用来管理pod对象的,service或者imgress资源对象是用来暴露pod引用对象的,persistentvolume资源是用来为pod提供存储等等,简而言之,k8s不会直接处理容器,而是pod,pod才是k8s中可以创建和管理的最小单元,也是基本单元。

二、pod的特点

  1. 每个pod就像一个独立的逻辑机器,k8s会为每个pod分配一个集群内部唯一的IP地址,所以每个pod都拥有自己的IP地址、主机名、进程等;
  2. 一个pod可以包含1个多多个容器,1个容器一般被设计成只运行1个进程,1个pod只可能运行在单个节点上,即不可能1个pod跨节点运行,pod的生命周期是短暂的,也就是说pod可能随时被消亡(如节点异常,pod异常等情况);
  3. 每个pod都有一个特殊的被称为"根容器"的pause容器,也称为info容器,pause容器对应的镜像属于k8s平台的一部分,除了pause容器,每个pod还包含了一个或多个跑业务相关组件的容器;
  4. 一个pod中的容器共享network命名空间;
  5. 一个pod里的多个容器共享pod IP,这就意味着1个pod里面的多个容器的进程所占用的端口不能相同,否则在这个pod里面就会产生端口冲突,既然每个pod都有自己的IP和端口空间,那么对不同的pod来说就不可能存在端口冲突;
  6. 应该就应用程序组织到多个pod中,而每个pod只包含紧密相关的组件或进程;
  7. pod是k8s扩容,缩容的基本单位,也就是说k8s中扩容缩容是针对pod而言而并非容器。
    pod共享存储实现机制:引入数据卷volume,使用数据卷进行持久化存储。

三、pod背后的根本原理
一个容器一般被设计一个进程,除非进程本身产生子进程,由于不能将多个进程聚集在同一个单独的容器中,所有需要一种更高级的结构容器绑定在一起,并将它们作为一个单元进行管理,这就是pod背后原理。

四、命令行创建pod、查看pod

#注意:kubectl run 在旧版本中创建的是deployment,但在本书的版本中创建的是pod

创建pod

kubectl run nginx --image=nginx --labels="app=nginx" --port=80
  • kubectl run nginx 创建一个pod,pod名称为nginx
  • –image=nginx 容器镜像为nginx:latest
  • –labels=“app=nginx” 设置一个标签app=nginx
  • –port=80 声明pod的服务端口为80

查看pod

kubectl get pod -n default
# kubectl get pod -n default
NAME                      READY   STATUS    RESTARTS   AGE
nginx                     1/1     Running   0          98s
  • -n default 指定资源所属的命名空间,默认是default

查看pod运行在哪个节点上

kubectl get pod -n default -o wide
# kubectl get pod -n default -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES
nginx                     1/1     Running   0          4m9s    192.168.69.212   k8s-worker02   <none>           <none>

kubectl desc 命令查看pod的详细信息

kubectl describe  pod  nginx
# kubectl describe  pod  nginx
Name:         nginx				# pod 名称
Namespace:    default			# 所属命名空间
Priority:     0					# 这个参数是优先级
Node:         k8s-worker02/192.168.44.155			# pod所在节点及节点IP地址
Start Time:   Thu, 22 Feb 2024 10:41:11 +0800		# pod启动时间
Labels:       app=nginx						# pod 标签
Annotations:  cni.projectcalico.org/containerID: 4d32f0fa5e998cbc78194c118e73353731dd1c7b93f6a61b4b3e9e6d6948938ccni.projectcalico.org/podIP: 192.168.69.212/32cni.projectcalico.org/podIPs: 192.168.69.212/32	# Annotations 是注释
Status:       Running			# pod 运行状态
IP:           192.168.69.212	# pod IP地址
IPs:	IP:  192.168.69.212
Containers:						# 容器部分,一个pod可以跑多个容器nginx:Container ID:   docker://f3e553dbfdb1b77773ee07f35024cdb77b1d32d55c13d10ee4fcb445e25a6b54	# 容器IDImage:          nginx		# 镜像Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31  #镜像IDPort:           80/TCP			# pod服务端口Host Port:      0/TCP			State:          Running			# 容器状态Started:      Thu, 22 Feb 2024 10:41:28 +0800		# 容器启动时间Ready:          True			# 是否准备就绪Restart Count:  0				# 重启次数Environment:    <none>			# 环境变量Mounts:				# 容器挂载点/var/run/secrets/kubernetes.io/serviceaccount from default-token-2jswl (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:default-token-2jswl:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-2jswlOptional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:					# pod 启动的事件,在这里可以排查pod异常的原因Type    Reason     Age    From                   Message----    ------     ----   ----                   -------Normal  Scheduled  6m15s  default-scheduler      Successfully assigned default/nginx to k8s-worker02Normal  Pulling    6m14s  kubelet, k8s-worker02  Pulling image "nginx"Normal  Pulled     5m58s  kubelet, k8s-worker02  Successfully pulled image "nginx" in 15.560370431sNormal  Created    5m58s  kubelet, k8s-worker02  Created container nginxNormal  Started    5m58s  kubelet, k8s-worker02  Started container nginx

查看pod的yaml文件

kubectl get pod nginx -o yaml
# kubectl get pod nginx -o yaml
apiVersion: v1
kind: Pod
metadata:annotations:cni.projectcalico.org/containerID: 4d32f0fa5e998cbc78194c118e73353731dd1c7b93f6a61b4b3e9e6d6948938ccni.projectcalico.org/podIP: 192.168.69.212/32cni.projectcalico.org/podIPs: 192.168.69.212/32creationTimestamp: "2024-02-22T02:41:11Z"labels:app: nginxmanagedFields:- apiVersion: v1fieldsType: FieldsV1fieldsV1:f:metadata:f:labels:.: {}f:app: {}f:spec:f:containers:k:{"name":"nginx"}:.: {}f:image: {}f:imagePullPolicy: {}f:name: {}f:ports:.: {}k:{"containerPort":80,"protocol":"TCP"}:.: {}f:containerPort: {}f:protocol: {}f:resources: {}f:terminationMessagePath: {}f:terminationMessagePolicy: {}f:dnsPolicy: {}f:enableServiceLinks: {}f:restartPolicy: {}f:schedulerName: {}f:securityContext: {}f:terminationGracePeriodSeconds: {}manager: kubectl-runoperation: Updatetime: "2024-02-22T02:41:11Z"- apiVersion: v1fieldsType: FieldsV1fieldsV1:f:metadata:f:annotations:.: {}f:cni.projectcalico.org/containerID: {}f:cni.projectcalico.org/podIP: {}f:cni.projectcalico.org/podIPs: {}manager: calicooperation: Updatetime: "2024-02-22T02:41:12Z"- apiVersion: v1fieldsType: FieldsV1fieldsV1:f:status:f:conditions:k:{"type":"ContainersReady"}:.: {}f:lastProbeTime: {}f:lastTransitionTime: {}f:status: {}f:type: {}k:{"type":"Initialized"}:.: {}f:lastProbeTime: {}f:lastTransitionTime: {}f:status: {}f:type: {}k:{"type":"Ready"}:.: {}f:lastProbeTime: {}f:lastTransitionTime: {}f:status: {}f:type: {}f:containerStatuses: {}f:hostIP: {}f:phase: {}f:podIP: {}f:podIPs:.: {}k:{"ip":"192.168.69.212"}:.: {}f:ip: {}f:startTime: {}manager: kubeletoperation: Updatetime: "2024-02-22T02:41:28Z"name: nginxnamespace: defaultresourceVersion: "795586"selfLink: /api/v1/namespaces/default/pods/nginxuid: 814ff88b-a5ec-4bb1-9393-4c2b75807cf6
spec:containers:- image: nginximagePullPolicy: Alwaysname: nginxports:- containerPort: 80protocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: default-token-2jswlreadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: k8s-worker02preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: default-token-2jswlsecret:defaultMode: 420secretName: default-token-2jswl
status:conditions:- lastProbeTime: nulllastTransitionTime: "2024-02-22T02:41:11Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2024-02-22T02:41:28Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2024-02-22T02:41:28Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2024-02-22T02:41:11Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://f3e553dbfdb1b77773ee07f35024cdb77b1d32d55c13d10ee4fcb445e25a6b54image: nginx:latestimageID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31lastState: {}name: nginxready: truerestartCount: 0started: truestate:running:startedAt: "2024-02-22T02:41:28Z"hostIP: 192.168.44.155phase: RunningpodIP: 192.168.69.212podIPs:- ip: 192.168.69.212qosClass: BestEffortstartTime: "2024-02-22T02:41:11Z"

对外暴露服务、测试访问

以上我们创建了一个名为nginx的pod,但是这个pod还不能被外部客户端连接访问,我们还需要做一步就是对外暴露pod,让外部客户端能访问k8s集群的pod服务,所有我们需要创建一个service,并将pod内容器的服务端口映射到节点IP的端口,如下所示:

  kubectl expose pod  nginx -n default --port=8088 --target-port=80 --type=NodePort --name=nginx
  • –port=8088 表示集群内节点访问的端口
  • –target=80 表示pod里面容器的应该程序的端口

查看service和pod

kubectl get svc,pod nginx
# kubectl get svc,pod nginx
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/nginx   NodePort   10.98.244.33   <none>        8088:32765/TCP   2m58sNAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   1          30m
  • 创建了一个nginx service资源对象,并且有一个固定的IP10.98.244.33,并将访问节点端口 32765 的流量转发到 nginx service 的8088端口。service 又将访问8088端口的流量转发到 pod容器内部服务的端口 80
  • 确保防火墙开通了32765 的入方向
  • 所有节点都监听 32765 端口,访问任意节点IP + 32765 都能访问到服务

在这里插入图片描述

编辑service

如果需要修改外部访问端口或者需要修改一下刚开定义的service,这时我们可以使用kubectl edit 编辑刚才创建的service,如下:

kubectl edit service nginx
# kubectl edit service nginx# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:creationTimestamp: "2024-02-22T03:08:49Z"labels:app: nginxname: nginxnamespace: defaultresourceVersion: "799626"selfLink: /api/v1/namespaces/default/services/nginxuid: fc4a5900-1e80-41dc-838b-79d2fc68e640
spec:clusterIP: 10.98.244.33externalTrafficPolicy: Clusterports:- nodePort: 30005			# 修改一下对外暴露的端口为30005,注意:端口是有范围的,NodePort端口范围默认是30000-32767,可以通过修改`kube-apiserver`的参数来进行调整port: 8088protocol: TCPtargetPort: 80selector:app: nginxsessionAffinity: Nonetype: NodePort
status:loadBalancer: {}

保存后,再次查看service 和 pod

kubectl get pod,svc nginx
# kubectl get pod,svc nginx
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   1          48mNAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/nginx   NodePort   10.98.244.33   <none>        8088:30005/TCP   20m

可以看出节点端口已经变成30005了

访问测试:
在这里插入图片描述

参考放到最下面,大部分都是借鉴,做了少部分的补充:

https://blog.csdn.net/MssGuo/article/details/122894684

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载测试面试:题库+项目

车载测试如何面试&#xff08;面试技巧&#xff09;https://blog.csdn.net/2301_79031315/article/details/136229809 入职车载测试常见面试题(附答案&#xff09;https://blog.csdn.net/2301_79031315/article/details/136229946 各大车企面试题汇总&#xff08;含答案&am…

Megalinter 初体验

简介 MegaLinter 是一个多语言、多工具的集成代码检查工具&#xff0c;它能够通过一个统一的工作流来运行多个静态代码分析工具&#xff0c;从而提供全面的代码质量检查。 官网&#xff1a;https://megalinter.io/latest/ MegaLinter 的特点&#xff1a; 多语言支持&#x…

Arcgis小技巧【17】——如何修改ArcGIS中影像的背景颜色

一、问题分析 在ArcGIS中&#xff0c;有时候会遇到影像有背景色&#xff0c;看上去很不美观。 尤其在多个影像叠加的时候&#xff0c;更是会造成遮挡的问题。 二、解决办法 首先&#xff0c;用【识别】工具在背景色是点击一下&#xff0c;查看弹出的窗口&#xff0c;记住背景…

新型智慧城区建设方案

智慧社区项目以改善基础设施环境为基础&#xff0c;以搭建社区综合服务平台为纽带&#xff0c;通过利用物联网、大数据技术建立覆盖社区居民生活方方面面的综合服务体系&#xff0c;向社区管理机构、服务机构和居民提供智能化服务&#xff0c;保障社区的安全&#xff0c;保障居…

飞行机器人专栏(十三)-- 智能优化算法之粒子群优化算法与多目标优化

一、理论基础 1.1 引言 粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;自1995年由Eberhart和Kennedy提出以来&#xff0c;已经成为解决优化问题的一种有效且广泛应用的方法。作为一种进化计算技术&#xff0c;PSO受到社会行为模式&#xff0c;特别是…

document.cookie中expires 格式设置问题导致部分iphone safari上登录失效

一、问题描述 设备信息&#xff1a;iPhone 12, iOS 16.3 昨天有个小伙伴发现自己的iPhone safari打开网页登录时&#xff0c;登录页面显示登录成功&#xff0c;但实际进入首页后仍然显示未登录。多次测试&#xff0c;该问题在该设备上属于必现问题。 二、问题排查与解决 经过…

C/C++内存管理学习【new】

文章目录 一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型四、operator new与operator delete函数五、new和delete的实现原理5.1 内置类型 六、定位new表达式(pl…

后端经典面试题合集

目录 1. Java基础1-1. JDK 和 JRE 和 JVM 分别是什么&#xff0c;有什么区别&#xff1f;1-2. 什么是字节码&#xff1f;采用字节码的最大好处是什么&#xff1f; 1. Java基础 1-1. JDK 和 JRE 和 JVM 分别是什么&#xff0c;有什么区别&#xff1f; JDK 是Java开发工具包&am…

基于ssm框架的高校班级管理系统设计与实现

为解决当前高校班级管理中管理方式落后、手段落后及效率低下等问题而以当前主流的互联网技术设计一款高校班级管理系统。该系统采用B/S模式的设计思路而将前端&#xff08;JSP技术&#xff09;和后端&#xff08;SSM框架MySQL数据库&#xff09;整合于一体并通过Java语言代码编…

VSCODE使用Django 页面和渲染

https://code.visualstudio.com/docs/python/tutorial-django#_use-a-template-to-render-a-page 通过模板渲染页面 文件 实现步骤 1&#xff0c; 修改代码&#xff0c;hello的App名字增加到installed_apps表中。 2&#xff0c; hello子目录下&#xff0c;创建 .\templates\…

vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法

文章目录 1、原因2、思路3、解决方法3.1、使用alignTicks解决3.2、结合min和max属性去配置interval属性1、首先固定两边的分隔的段数。2、结合min和max属性去配置interval。 1、原因 刻度在显示时&#xff0c;分割段数不一样&#xff0c;导致左右的刻度线不一致&#xff0c;不…

【Java】Java基础(实验一)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 掌握Java程序的编辑、调试与运行&#xff1b;了解Java引用类型&#xff0c;掌握数组的定义和引用。掌握Java基本数据类型和输入输出。掌握Java程序结构 二、实验内容 1.JDK的环境变量设置及测试。 &#xff08…

HarmonyOS Stage模型 应用配置文件讲解

好&#xff0c;上文 HarmonyOS Stage模型基本概念讲解 中&#xff0c;我们简单讲解了HarmonyOS 中 Stage模型的基本概念 那么 我们继续学习Stage模型的相关知识 上文之后 我们肯定对它的概念和基本结构 有了一个了解 那么 我们就来看一下 基于Stage模型 它里面一些基本的配置文…

15-36V降压充电光伏MPPT充电方案

1.MPPT原理--简介 MPPT&#xff0c;全称为Maximum Power Point Tracking&#xff0c;即最大功点跟踪&#xff0c;它是一种通过调节电气模块的工作状态&#xff0c;使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中&#xff0c;可有效地…

视频推拉流EasyDSS视频直播点播平台授权出现激活码无效并报错400是什么原因?

视频推拉流EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景上&#xff0c;平台可以运用在互联网教育、在线课堂、游戏…

32.云原生Istio流量管理之官网Bookinfo应用实战演示

云原生专栏大纲 文章目录 流量管理基于版本的路由配置基于 Http header 的路由配置故障注入延迟故障注入异常故障注入故障注入测试 比例分配流量请求超时熔断什么是熔断创建 httpbin 服务创建访问者服务 流量管理 Istio 是服务治理的工具&#xff0c;Istio 的流量管理能力&am…

Django学习笔记-forms使用

1.创建forms.py文件,导入包 from django import forms from django.forms import fields from django.forms import widgets2. 创建EmployeeForm,继承forms.Form 3.创建testform.html文件 4.urls.py添加路由 5.views中导入forms 创建testform,编写代码 1).如果请求方式为GET,…

unity学习(38)——创建(create)角色脚本(panel)--EventSystem

1.在scripts文件夹下创建一个脚本CreatePlayerPanel.cs&#xff0c;脚本挂到panel上&#xff01;给panel加个tag&#xff0c;叫createPanel&#xff0c;脚本内容如下&#xff1a; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngin…

【区块链】联盟链

区块链中的联盟链 写在最前面**FAQs** 联盟链&#xff1a;区块链技术的新兴力量**联盟链的定义****联盟链的技术架构**共识机制智能合约加密技术身份认证 **联盟链的特点**高效性安全性可控性隐私保护 **联盟链的应用场景****金融服务****供应链管理****身份验证****跨境支付**…

【行业交流】优积科技·国住人居与广东保利就学校、居住场景下模块化建筑技术的运用进行交流

近日&#xff0c;保利发展控股集团股份有限公司&#xff08;以下简称“保利发展”&#xff09;、 优积建筑科技发展(上海)有限公司&#xff08;以下简称“优积科技”&#xff09;、国住人居工程顾问有限公司&#xff08;以下简称“国住人居公司”&#xff09;就模块化建造体系与…