【K8S基础】-k8s的核心概念pod

news2024/11/26 4:40:50

一、Pod 是什么

1.1 Pod 的定义和概念

        在Kubernetes中,Pod是创建或部署的最小/最简单的基本单位。一个Pod代表着集群上正在运行的一个进程,它封装了一个或多个应用容器,并且提供了一些共享资源,如网络和存储,每个Pod都被分配一个独立的IP地址,并且Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。此外,Pod可以指定一组共享存储卷,以便Pod中的所有容器都可以访问共享卷并共享数据。

        以下是一个最简单的pod资源文件,它定义了一个名称为nginx的pod,pod中包括一个名称为nginx的容器,容器镜像使用nginx:1.14.2,端口为80。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

1.2 Pod 的特点和作用

        资源共享与隔离Pod作为Kubernetes调度的最小单位,它可以包含一个或多个容器,并共享相同的网络和存储资源。Pod中的容器可以共享文件系统、环境变量和进程空间,它们之间可以通过本地主机的localhost进行通信。这种资源的共享和管理使得应用程序的部署更加高效和灵活。

        应用程序的部署和管理:Pod提供了一种逻辑上的封装,使得应用程序的部署和管理更加简单和可控。通过定义Pod的规范,我们可以指定应用程序所需的资源、环境变量、存储卷等信息。Kubernetes会根据这些规范来创建、销毁、伸缩和调度Pod,而不会影响到其他Pod。这种灵活的部署和管理方式可以提高应用程序的可靠性和可用性。

        弹性伸缩和负载均衡:Pod可以根据应用程序的负载情况进行伸缩,以满足不同的需求。通过水平伸缩Pod,我们可以根据负载的增减自动调整应用程序的实例数量。同时,Pod可以与Service结合使用,通过Service提供稳定的网络访问地址,实现负载均衡和流量管理。

        应用程序的可移植性:Pod提供了一种抽象层,隐藏了底层基础设施的细节。这意味着我们可以在不同的环境中运行应用程序,而无需修改代码。无论是在本地开发环境、测试环境还是生产环境,我们都可以使用相同的Pod规范来部署和管理应用程序。这种可移植性使得应用程序的开发、测试和部署更加简单和可靠。

        资源管理和调度:Pod可以指定应用程序所需的资源,例如CPU、内存等。Kubernetes可以根据这些资源需求进行调度,将Pod分配到合适的主机上。通过资源管理和调度,我们可以充分利用集群中的资源,提高资源的利用率和效率。

二、Pod 的生命周期管理

2.1 Pod 的创建过程

        1. 定义Pod规格:首先,用户或管理员需要定义Pod的规格,包括容器镜像、资源需求、环境变量、存储卷等。这通常通过编写Pod的配置文件(如YAML文件)或使用Kubernetes API进行定义。

        2. 提交Pod配置:将Pod的配置文件或通过API提交给Kubernetes控制平面。这可以使用kubectl命令行工具或其他Kubernetes客户端进行操作。

        3. 控制器接收到创建请求:Kubernetes控制器(如Deployment、ReplicaSet等)接收到创建Pod的请求,并将其传达给Kubernetes的调度器。

        4. 调度器选择节点:调度器根据Pod的调度策略、资源需求、亲和性规则等,选择一个合适的节点来运行Pod。调度器会考虑节点的资源可用性、标签匹配等因素。

        5. 节点上创建Pod:一旦调度器选择了节点,Kubernetes会与该节点上的kubelet代理进行通信,请求在该节点上创建Pod。kubelet会根据Pod的规格,拉取容器镜像并创建容器。

        6. 容器启动:kubelet在节点上启动Pod中的容器。它会为每个容器设置网络命名空间、IP地址、存储卷等资源,并启动容器进程。

        7. 容器状态检查:Kubernetes会定期检查容器的状态,确保容器正常运行。如果容器出现故障或不响应,Kubernetes会自动重启或替换容器。

        8. Pod状态更新:一旦Pod中的所有容器都成功启动,Kubernetes会将Pod的状态更新为“运行中”。此时,Pod将可以接收流量和请求。


2.2 Pod 的终止过程

        1. 用户请求终止:当用户主动发出终止Pod的请求时,例如使用kubectl命令删除Pod,Kubernetes控制器会接收到该请求。

        2. 控制器检测到终止请求:Kubernetes控制器(如Deployment、ReplicaSet等)会检测到终止请求,并将其传达给Kubernetes的调度器。

        3. 调度器标记Pod为终止状态:调度器会将Pod标记为终止状态,并停止将新的请求调度到该Pod上。

        4. 终止信号发送给Pod中的容器:Kubernetes会向Pod中的每个容器发送终止信号,通常是通过发送SIGTERM信号。

        5. 容器执行终止操作:容器接收到终止信号后,可以执行一些清理操作,例如保存状态、关闭连接、释放资源等。容器应该在一定时间内完成清理操作。

        6. 超时等待:如果容器在一定时间内无法正常终止(例如,容器无法响应终止信号),Kubernetes会发送SIGKILL信号来强制终止容器。

        7. Pod被删除:一旦所有容器都成功终止,Pod将被删除。此时,Pod将不再存在于集群中,并且相关的资源将被释放。

三、Pod 的重启策略

        Pods的重启策略用restartPolicy参数表示,有以下三种策略:

        Always:当容器失效时,总是由kubelet自动重启容器。

        Never:当容器终止运行且退出码不为0的时候,有kubelet自动重启该容器。

        OnFailure:无论容器运行关闭状态如何,kubelet都不会重启该容器。

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
  namespace: default
  labels:
    app: myapp
spec:
  restartPolicy: Always
  containers:
  - name:  tomcat-pod-java
    ports:
    - containerPort: 8080
    image: tomcat
    imagePullPolicy: IfNotPresent

四、Pod 的资源配置

        在Kubernetes中,可以使用requests和limits两种类型参数对资源进行预分配和使用限制。

        requests:是容器启动时所需要的最小资源,如果无法满足这些资源请求,则容器无法启动。

        limits:是容器运行时可以使用的最大资源,如果超过这个限制,则容器会被强制停止。

resources: #资源管理
  requests: 
    cpu: 0.5     
    memory: 1Gi 
  limits:   
    cpu: 1  
    memory: 2Gi

        对于CPU资源,其表示方法有两种,浮点数或者是整数+m,1000m代表1个CPU,500m代表0.5个CPU。对于内存资源,其表示方法以Mi/Gi为单位,100Mi代表100MB内存,1Gi为1G内存。如上面的示例就是配置一个最小为0.5C/1G,最大为1C/2G的pod。 

五、Pod 的健康检查

5.1 Pod 存活检查(LivenessProbe)

        LivenessProbe(存活探针)是Kubernetes中用于检查Pod中的容器是否正常运行的一种机制。其主要作用是确保容器在出现问题时能够自动重启,以保证Pod的可用性。如果检测失败,则认为容器不健康,此时Kubernetes将根据Pod中设置的重启策略(restartPolicy)来判断是否重启容器。如果容器中没有配置LivenessProbe,则默认认为容器的健康检查一直成功。

        在Kubernetes中,Pod的LivenessProbe(存活探针)主要有三种类型:

       HTTP探针:通过向容器内特定的HTTP端点发送HTTP请求来检查容器的健康状态。如果HTTP响应的状态码在200-400之间,则认为容器健康;否则,认为容器不健康。

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
    - name: Custom-Header
      value: Awesome
  initialDelaySeconds: 3
  periodSeconds: 3

        TCP探针:通过尝试与容器内特定端口建立TCP连接来检查容器的健康状态。如果TCP连接建立成功,则认为容器健康;否则,认为容器不健康。

livenessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 15
  periodSeconds: 20

        Exec探针:通过在容器内执行特定的命令来检查容器的健康状态。如果命令执行成功(返回值为0),则认为容器健康;否则,认为容器不健康。

livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5

        这三种探针可以单独使用,也可以结合使用,以满足不同的健康检查需求。

5.2 Pod 就绪检查(ReadinessProbe)

        ReadinessProbe是用于检测应用实例是否准备好接收请求的机制。

        当Pod启动后,ReadinessProbe会定期检查Pod中的应用实例是否已经准备好接收请求。如果应用实例没有准备好,那么Pod将被标记为未准备好,此时Kubernetes不会将流量转发到该Pod。只有当ReadinessProbe检测到应用实例已经准备好接收请求时,Kubernetes才会将流量转发到该Pod。

        ReadinessProbe的配置方式与LivenessProbe类似,可以通过HTTP、TCP或Exec等方式进行检查。唯一区别就是要使用 readinessProbe 字段,而不是 livenessProbe 字段,不同的配置方式适用于不同的应用场景,可以根据具体需求进行选择。

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

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

相关文章

图片速览 PoseGPT:基于量化的 3D 人体运动生成和预测(VQVAE)

papercodehttps://arxiv.org/pdf/2210.10542.pdfhttps://europe.naverlabs.com/research/computer-vision/posegpt/ 方法 将动作压缩到离散空间。使用GPT类的模型预测未来动作的离散索引。使用解码器解码动作得到输出。 效果 提出的方法在HumanAct12(一个标准但小规…

单片机计数功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、计数器是什么?1.1 应用 二、计数器原理框图及对输入信号的要求2.1 原理框图2.2对输入信号的要求 三、使用步骤3.1 配置为计数模式3.2 装初值3.3…

选择排序、快速排序和插入排序

1. 选择排序 xuanze_sort.c #include<stdio.h> #include<stdlib.h>//选择排序void xuanze_sort(int arr[],int sz){//正着for(int i0;i<sz;i){//外层循环从第一个数据开始依次作为基准数据for(int j i1;j<sz;j){//int j i1 因为第一个数据作为了基准数据&…

蓝桥杯嵌入式——KEY

CUBE里将这几个引脚配置成GPIO输入模式&#xff0c;再同时选中&#xff0c;配置成上拉&#xff0c;如下图&#xff1a; 同时配置定时器&#xff0c;定时10ms&#xff0c;每10ms扫描一次按键&#xff0c;计算公式&#xff1a;80 000 000 / 80 / 10000 100HZ 10ms&#xff0c;配…

Amazon SageMaker机器学习之旅的助推器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 一、前言 在当今的数字化时代&#xff0c;人工智能和机器学习已经…

Spring Boot自动装配原理以及实践

了解自动装配两个核心 Import注解的作用 Import说Spring框架经常会看到的注解&#xff0c;它有以下几个作用: 导入Configuration类下所有的bean方法中创建的bean。导入import指定的bean&#xff0c;例如Import(AService.class)&#xff0c;就会生成AService的bean&#xff0…

Gitlab仓库推送到Gitee仓库的一种思路

文章目录 Gitlab仓库推送到Gitee仓库的一种思路1、创建Gitee的ssh公钥&#xff08;默认已有Gitlab的ssh公钥&#xff09;2、添加Gitlab远程仓库地址3、添加Gitee远程仓库地址4、拉取Gitlab远程仓库指定分支到本地仓库指定分支&#xff08;以test分支为例&#xff09;5、推送本地…

C++11特性:可调用对象以及包装器function的使用

在C中存在“可调用对象”这么一个概念。准确来说&#xff0c;可调用对象有如下几种定义&#xff1a; 是一个函数指针&#xff1a; int print(int a, double b) {cout << a << b << endl;return 0; } // 定义函数指针 int (*func)(int, double) &print…

【MAC】M2 安装mysql

一、docker下载地址 下载地址 二、安装docker完成 三、安装mysql 一、拉取镜像 # 拉取镜像 docker pull mysql# 或者 docker pull mysql:latest# 以上两个命令是一致的&#xff0c;默认拉取的就是 latest 版本的# 我们还可以用下面的命令来查看可用版本&#xff1a; docker…

[德人合科技]——设计公司 \ 设计院图纸文件数据 | 资料透明加密防泄密软件

国内众多设计院都在推进信息化建设&#xff0c;特别是在异地办公、应用软件资产规模、三维设计技术推广应用以及协同办公等领域&#xff0c;这些加快了业务的发展&#xff0c;也带来了更多信息安全挑战&#xff0c;尤其是对于以知识成果为重要效益来源的设计院所&#xff0c;防…

Docker单点部署[8.11.3] Elasticsearch + Kibana + ik分词器

文章目录 一、Elasticsearch二、Kibana三、访问四、其他五、ik分词器第一种&#xff1a;在线安装第二种&#xff1a;离线安装 Elasticsearch 和 Kibana 版本一般需要保持一致才能一起使用&#xff0c;但是从 8.x.x开始&#xff0c;安全验证不断加强&#xff0c;甚至8.x.x之间…

【每日一题】—— C. Largest Subsequence(Codeforces Round 915 (Div. 2))(规律、字符串处理)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

制作一个多行时正确宽度的Textview,Android Textview 换行时宽度过长 右侧空白区域挤掉页面元素的解决方案

优化 Android 布局&#xff1a;创建自适应宽度的 TextView 引言 在Android应用开发中&#xff0c;布局优化是提升应用性能和用户体验的关键环节之一。特别是对于那些内容密集型的应用&#xff0c;如何高效地展示和管理文本内容成为了一个挑战。最近&#xff0c;在处理一个布局…

市场全局复盘 20231218

昨日回顾: SELECT CODE,成交额排名,净流入排名,代码,名称,DDE大单金额,涨幅,主力净额,DDE大单净量,CONVERT(DATETIME, 最后封板, 120) AS 最后封板,涨停分析,_3日涨幅百分比,连板天,封单额,封单额排名,DDE散户数量,总金额,获利盘 FROM dbo.全部A股20231218_ALL WHERE 连板天…

社交网络分析4(下):社交网络链路预测分析、LightGBM框架、LLSLP方法(LightGBM 堆叠链路预测)、堆叠泛化 、社交网络链路预测分析的挑战

社交网络分析4 写在最前面LightGBMLightGBM简介GBDT的核心概念和应用LightGBM的特点LightGBM与GBDT的比较 LightGBM的原理与技术GBDT的传统算法LightGBM的创新算法 GOSS&#xff08;Gradient-based One-Side Sampling&#xff09;算法解析概念和工作原理算法的逻辑基础GOSS算法…

PIC单片机项目(4)——基于PIC16F877A的温度光照检测装置

1.功能设计 基于PIC16F877A单片机&#xff0c;使用DS18B20进行温度测量&#xff0c;使用光敏电阻进行光照测量&#xff0c;将测量值实时显示在LCD1602屏幕上&#xff0c;同时可以设定光照阈值和温度阈值。当温度大于阈值&#xff0c;则蜂鸣器报警&#xff0c;当光照小于阈值&am…

EnvoyFilter API

目录 原文链接 https://onedayxyy.cn/docs/EnvoyFilter-API 本节实战 实战名称&#x1f6a9; 实战&#xff1a;EnvoyFilter API-全局范围-2023.12.18(测试成功)&#x1f6a9; 实战&#xff1a;EnvoyFilter API-配置优先级-2023.12.18(测试成功)&#x1f6a9; 实战&#xff1a…

开发企业展示小程序的关键步骤和技巧

随着移动互联网的快速发展&#xff0c;小程序已经成为企业展示形象、推广产品和服务的重要工具。拥有一个优秀的小程序可以帮助企业提高品牌知名度&#xff0c;吸引更多潜在客户&#xff0c;提升用户体验。以下是拥有一个展示小程序的步骤&#xff1a; 确定需求和目标 首先&am…

实时时钟(RTC)的选择与设计:内置晶体与外置晶体的优缺点对比

实时时钟(RTC)作为一种具备独立计时和事件记录功能的设备&#xff0c;现已广泛应用于许多电子产品中&#xff0c;并对时钟的精度要求越来越高。根据封装尺寸、接口方式、附加功能、时钟精度和待机功耗等因素进行分类&#xff0c;市场上有各种种类的RTC产品可供选择。 而在设计…

计网01 计算机网络基础

一、计算机网络基本概念 1、什么是计算机网络 网络&#xff1a;由两台或多台计算机通过网络设备串联&#xff08;网络设备通过传输介质串联&#xff09;而形成的网络网络设备&#xff1a;计算机、路由交换、防火墙、上网行为管理等传输介质&#xff1a;双绞线&#xff08;网线…