【云原生|Kubernetes】03-Pod详解

news2024/11/28 12:30:15

【云原生|Kubernetes】03-Pod详解

文章目录

  • 【云原生|Kubernetes】03-Pod详解
    • 前言
    • Pod解析
      • Pod简介
      • Pod的组成
      • Pod中的几种容器的概念
        • Pause容器
        • 初始化容器
        • 主容器
        • 伴随容器
        • 容器的启动顺序
        • 容器与pod与node的关系
      • Pod种类
        • 普通Pod
        • 静态pod
          • 静态Pod创建方式
            • 配置文件方式
            • http方式
        • Job Pod
        • CronJob Pod
      • Pod的启动删除流程
        • 启动流程
        • 删除流程
    • Pod的基本用法
      • Pod资源文件介绍
      • Pod常用操作
        • kubectl常用的pod指令

前言

​ Kubernetes的资源文件有很多如pod,Deployment,DaemonSet,ReplicaSet,Cronjob,job,StatefulSet,ConfigMap,PVC,Seceret。学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作;后面我们将逐个介绍这些资源类型;本章我们详细说说-Pod

Pod解析

Pod简介

  • 在 Kubernetes 中,Pod是最小的可部署的单位,它是一个或多个容器的集合,它们共享同一个网络命名空间和存储卷。Pod是Kubernetes中的基本概念,所有的容器化应用都运行在Pod中。
    • 共享网络命名空间:Pod中的所有容器共享同一个网络命名空间,它们可以使用相同的IP地址和端口号,从而可以轻松地相互通信。
    • 共享存储卷:Pod中的所有容器共享同一个存储卷,它们可以访问存储卷中的相同数据。这使得在多个容器之间共享数据变得非常容易。
    • 容器间通信:在同一个Pod中的容器可以使用本地主机通信,从而避免了跨主机网络通信的开销和延迟。

Pod的组成

  • 容器

    • 一个Pod中可以包含一个或多个容器,它们共享同一个网络命名空间和存储卷。每个容器都运行在独立的命名空间中,并且具有自己的CPU、内存和文件系统。容器可以是Docker容器或其他容器。
  • 共享的网络命名空间

    • 在同一个Pod中的所有容器共享同一个网络命名空间,它们可以使用相同的IP地址和端口号,从而可以轻松地相互通信。这使得在多个容器之间共享数据和服务变得非常容易。
  • 共享的存储卷

    • 在同一个Pod中的所有容器共享同一个存储卷,它们可以访问存储卷中的相同数据。这使得在多个容器之间共享数据变得非常容易。
  • 生命周期

  • Pod有自己的生命周期,它可以被创建、更新和删除。Pod通常作为部署应用程序的最小单元,而不是作为持久化实体。当应用程序需要进行伸缩或更新时,可以创建、更新或删除Pod来满足需求。

  • 共享的环境变量

    • 在同一个Pod中的所有容器共享同一个环境变量,它们可以使用相同的环境变量来共享配置信息和其他数据。
  • 初始化容器

    • Pod中可以包含一个或多个初始化容器,这些容器在Pod中的其他容器启动之前先启动。初始化容器可以用于预处理数据、检查依赖关系或执行其他任务。

Pod中的几种容器的概念

  • Pause容器
  • 初始化容器
  • 业务容器(主容器和伴随容器)

Pause容器

  • pause容器是每个Pod中必须的一个容器,它的主要作用是创建Pod的网络命名空间和存储卷,并且在Pod中的其他容器启动之前先启动它。pause容器会在Pod中的其他容器启动后继续运行,但是它会一直保持运行状态,直到Pod被删除。

初始化容器

  • 初始化容器是一种特殊类型的容器,它们在Pod中的其他容器启动之前先启动。初始化容器可以用于在启动应用程序之前执行一些任务,如预处理数据、检查依赖关系或执行其他任务。初始化容器会在完成它们的任务后退出,然后Pod中的其他容器才会启动。

主容器

  • Pod中的主容器是指在Pod中定义的业务容器。它通常是应用程序容器,负责提供主要的服务或功能。主容器的退出状态将作为Pod的退出状态。

伴随容器

  • 伴随容器是指在Pod中定义的其他容器,它们通常用于支持主容器的运行,如日志收集、配置管理、数据备份等。伴随容器的退出状态不会影响Pod的退出状态。

容器的启动顺序

  • Pause容器---->初始化容器---->业务容器(主容器和伴随容器)
  • 容器的启动顺序在Pod中是有序的,但是它们的启动时间是并行的。也就是说,虽然Pause容器、初始化容器、主容器和伴随容器的启动顺序是有序的,但是它们的启动时间是可以并行的,这可以提高容器的启动速度和效率。

容器与pod与node的关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9LReY6E-1684328468470)(D:\学习\学习笔记\图片\109.png)]

Pod种类

  • 普通Pod(单容器Pod和多容器Pod)
  • 静态Pod
  • Job Pod
  • CronJob Pod

普通Pod

  • 单容器Pod是最简单的Pod类型,它包含一个容器和一些共享的资源,如网络和存储卷。单容器Pod通常用于部署一个单独的应用程序或服务。
  • 多容器Pod包含多个容器和一些共享的资源,如网络和存储卷。多容器Pod通常用于部署一个包含多个服务或应用程序的应用程序或服务。
  • pause容器是每个Pod中必须的一个容器。

静态pod

  • 静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。它们 不能通过API Server进行管理,无法与ReplicationController、Deployment 或者DaemonSet进行关联,并且kubelet无法对它们进行健康检查。静态 Pod总是由kubelet创建的,并且总在kubelet所在的Node上运行。
  • 在kubernetes集群中核心组件kube-apiserver,kube-controller-manager,kube-scheduler,etcd就是通过静态Pod部署的。
静态Pod创建方式
  • yml的配置文件方式
  • http方式
配置文件方式
  • 静态Pod的YAML文件路径通常位于kubelet的静态Pod路径中。默认情况下,kubelet会在/etc/kubernetes/manifests目录下查找静态Pod的YAML文件,如果找到了,则会立即启动该Pod。
  • 修改kubelet的静态Pod默认存储路径

    • 查看kubelet服务启动的配置文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOidMOff-1684328468472)(D:\学习\学习笔记\图片\106.png)]

    • 查看kubet服务器启动指导的配置文件,–config信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LjHRGfJT-1684328468472)(D:\学习\学习笔记\图片\107.png)]

    • 修改默认路径

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UDFk6RFV-1684328468473)(D:\学习\学习笔记\图片\108.png)]

    • 重启kubelet服务会制动识别该目录下的相关YML文件。
http方式

通过设置 kubelet 的启动参数” --anifest -url ", kubelet 将会定期从该 URL 地址下载 Pod 的定义文件,并以 yam或jso 文件的格式进行解析,然后创建 Pod 。其实现方式与 配置文件方式是一致的。

Job Pod

Job Pod是一种用于执行一次性任务的Pod,例如数据导入、数据备份等。

CronJob Pod

CronJob Pod是一种定期执行任务的Pod,例如定期生成报告、清理数据等。

关于job和cronjob会在后面的资源管理中单独介绍。

Pod的启动删除流程

启动流程

  1. 创建 Pod 描述文件:使用 YAML 或 JSON 格式的 Pod 描述文件来定义 Pod 的元数据(如名称、标签和注释)以及容器的规范(如容器镜像、命令、端口和卷)。
  2. 将 Pod 描述文件提交到 Kubernetes API Server:通过运行 kubectl apply 命令或使用 Kubernetes API 客户端将 Pod 描述文件提交到 Kubernetes API Server。
  3. API Server 验证描述文件:API Server 验证 Pod 描述文件的格式和内容是否正确,并将其存储在 Kubernetes etcd 存储中。
  4. 调度 Pod:Kubernetes Scheduler 根据 Pod 的调度规则(如资源需求、亲和性和反亲和性)选择合适的节点,并将 Pod 分配给该节点。
  5. 创建容器:Kubernetes 节点上的 Kubelet 接收到调度器分配的 Pod 后,会拉取 Pod 中定义的容器镜像,并在节点上创建容器。
  6. 更新 Pod 状态:一旦容器创建成功,Kubelet 会向 API Server 报告 Pod 的状态,包括容器的运行状态、IP 地址和端口映射等信息。
  7. 监控 Pod:Kubernetes 控制器会定期检查 Pod 的状态,并根据需要采取修复措施,例如重启容器或迁移 Pod 到其他节点。

删除流程

  1. 删除 Pod 描述文件:使用 kubectl delete 命令或 Kubernetes API 客户端将 Pod 的描述文件删除。这会触发 Kubernetes 控制器删除相应的 Pod 资源。
  2. API Server 验证删除请求:API Server 验证删除请求的格式和内容是否正确,并将删除请求存储在 Kubernetes etcd 存储中。
  3. 调度器删除 Pod:Kubernetes Scheduler 从节点中删除 Pod,并释放节点上的资源。
  4. 删除容器:Kubernetes 节点上的 Kubelet 会停止并删除 Pod 中的所有容器。
  5. 更新 Pod 状态:一旦 Pod 中的所有容器都被停止并删除,Kubelet 会向 API Server 报告 Pod 已被删除的状态。
  6. 清理资源:Kubernetes 控制器会在一定时间内监视 Pod 的状态,如果发现 Pod 删除不干净,会自动清理相关资源,例如存储卷和网络资源。

Pod的基本用法

Pod资源文件介绍

apiVersion:  v1 								      #版本号,例如:v1
kind:  Pod									          #资源类型,如:Pod,Deployment,service等
metadata:									            #元数据
    name:  string							        #Pod名称,自定义
	namespace:  string							    #Pod所属于的命名空间,不指定默认为default
	labels:									            #定义Pod标签
	   - name:   string							    #标签名称,自定义
spec:										              #Pod详细定义部分
  containers:									        #Pod中容器列表			
  - name:  string								        #自定义容器名称
    image:  string								      #镜像名称
    imagePullPolicy:  [Always| Never | IfNotPresent]				#镜像拉取策略:默认为Aways #(1)Always:表示每次尝试重新拉取镜像(2)Never:表示仅使用本地镜像(3)IfNotPresent:表示本地有则用本地镜像,没有则仓库拉取
    command:  string								    #容器启动命令列表,如果不指定则使用镜像打包还是使用的启动命令
	args:  string                         #容器启动命令参数列表
	workingDir: string							      #容器的工作目录
	volumeMounts:                         #挂载到容器内部的存储卷配置
	- name:  string                       #引用Pod定义的共享存储卷名称,需要使用Volume[]部分定义的共享存储卷名称
	    mountPath:  string							  #存储卷在容器内部Mount的绝对路径,应少于512个字符串																			
	    readOnly:  boolean							  #是否为只读模式,默认为读写
	ports:									              #容器需要暴露端口列表
	- name: string								        #端口的名称
	    containerPort:  int							  #容器需要监听的端口号
		hostPort:   int	                    #容器所在主机需要监听的端口号,默认与containerPort相同,设置hostPort的时候,同一宿主机将无法启动容器的第二个副本
		protocol:  string						        #端口协议,支持TCP和UDP,默认为TCP
	env:									                #容器运行前需要设置的环境变量列表
	- name:    string							        #环境变量名称
        value:   string								  #环境变量的值
    resources:									        #资源限制和资源限制请求的设置
	    limiuts:								          #资源限制最最大
	      cpu:   string							      #CPU限制:单位为core数,将使用docker  run  --cpu-shares参数
	      memeory:  string						    #内存限制:单位为M,G等,将用于docker   run  --memory
	    requests:								          #资源最小限制
	      cpu:  string	 						      #CPU限制:单位为core数,容器启动的初始可用数量
	      memeory:  string							  #内存限制:单位为M,G等,,容器启动的初始可用数量
	livenessProbe:		                    #对Pod内各个容器健康检查的设置,当探测无响应几次后,系统将自动重启该容器,可以设置的方式包括exec,httpGet和tcpSocket
	  exec:									              #对pod内各个容器健康检查的设置为exec方式
	    command:  [string]							  #exec防暑需要制定的命令或者脚本
	  httpGet:								            #对pod内各个容器健康检查的设置为httpGet方式,该方式需要指定path,port
	    path:  string
		ports:  number
		host:  string
		scheme:  string
		httpHeaders:														
		- name:  string
		  value:  string
	  tcpSocket:							            #对pod内各个容器健康检查的设置为tcpSocket方式
        port:  number
      initialDelaySeconds:  0						#启动容器完成后首次探测的时间,单位为s
      timeoutSeconds:  0		            #对容器健康检查的探测等待响应的超时时间设置,单位为s;默认为1s,若超时时间设置,则将认为该容器不健康,则会重启
      periodSeconds:  0				          #对容器健康检查的定期探测时间设置,单位为s;默认为10s探测一次
      successThreshold:  0
      failureThreshold:  0
  	  restartPolicy:  [Always| Never | OnFailure]		    #Pod的重启策略,默认为Always;(1)Always:Pod一旦停止运行,则无论容器是如何终止的,kubelet都将重启它。(2)OnFailure:只有Pod以非0退出码终止时,kubelet才会重启该容器,假如容器为正常退出(退出码为0)kubelet就不会重启;(3)Nerver:Pod终止后,kubelet将退出码报告给master,不会再重启该pod
  nodeSelector:  object				          #设置Node的label,以key:value的格式指定,pod将会被调度到具有这些label的node节点上
  imagePullSecrets:				              #pull镜像的时候使用Secret名称,以name:secretkey格式指定
  - name:  string
  hostNetwork:  false			              #是否使用主机网络模式,默认值为false,设置为true表示容器使用宿主机网络,不在使用docker网桥,该pod无法在同一宿主机上启动第二个副本
  volume:							                  #Pod上定义的共享存储列表
  - name:  string			                  #共享存储卷的名称,在pod中每个存储卷定义一个名称,应该符合RFC 1035规范,容器定义的部分,将引用该共享存储卷名称。
    emptyDir:  {}				                #类型为empytDir的存在卷,表示与Pod同生命周期的一个临时目录,其值为一个空对象。
    hostPath:					                  #类型为hostPath的存储卷,表示挂载pod所在宿主机的目录,通过volumes[],hostPath.path指定
      path:  string				              #Pod所在主机的目录,将被用于容器中的mount的目录
  secret:					                      #类型为secret的存储卷,表示挂载集群一定要的secret对象到容器内部
    secretName:  string																							
    item:
    - key:  string
      path:  string
  configMap					                    #类型为configMap存储卷,表示挂载集群预定义的configMap对象到容器的内部
    name:  string
    item:  string
    - key:  string
      path:  string	  

Pod常用操作

  • 定义一个基础的Pod资源文件
[root@master pod]# cat nginx_pod.yml
apiVersion:  v1
kind: Pod
metadata:
  name: nginx-pod
  namespace:  pod-namespace
  labels:
    nginx: test

spec:
  containers:
  - name: nginx
    image:  nginx
    imagePullPolicy:  Always
    ports:
    - name: 80-port
      containerPort: 80
      hostPort: 8081
      protocol: TCP
[root@master pod]#

kubectl常用的pod指令

  • 通过pod资源文件创建pod
 kubectl apply -f nginx_pod.yml
  • 通过pod资源文件删除pod
 kubectl delete -f nginx_pod.yml
  • 显示pod的详细信息,包括资源的元数据、状态和事件等
kubectl describe nginx-pod -n pod-namespace
  • 查看pod的日志信息
kubectl logs  nginx-pod -n pod-namespace
  • 获取特定 Pod 的详细信息
kubectl get pod nginx-pod -n pod-namespace -o wide
  • 获取特定 Pod 的详细信息,以yaml的形式显示
kubectl get pod nginx-pod -n pod-namespace -o yaml
  • 使用默认编辑器编辑特定 Pod 的定义文件。
kubectl edit pod <pod-name>
  • 进入特定 Pod 的容器中,并启动 Bash shell 会话。
kubectl exec -it <pod-name> -- /bin/bash
  • 将本地端口与 Pod 中的端口进行映射,以便可以通过本地计算机访问 Pod 中的服务。
kubectl port-forward <pod-name> <local-port>:<pod-port>
  • 获取特定 Pod 中特定容器的日志。
kubectl logs <pod-name> -c <container-name>

本章节只介绍了Pod的相关概念,如Pod的组成,Pod中容器种类,Pod的删除启动流程等等,然后Pod的是整个Kubernetes的最小单元及核心,后面我们也将围绕Pod继续展开说说,比如Pod的生命周期,Pod的调度等等
  • 将本地端口与 Pod 中的端口进行映射,以便可以通过本地计算机访问 Pod 中的服务。
kubectl port-forward <pod-name> <local-port>:<pod-port>
  • 获取特定 Pod 中特定容器的日志。
kubectl logs <pod-name> -c <container-name>

本章节只介绍了Pod的相关概念,如Pod的组成,Pod中容器种类,Pod的删除启动流程等等,然后Pod的是整个Kubernetes的最小单元及核心,后面我们也将围绕Pod继续展开说说,比如Pod的生命周期,Pod的调度等等

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

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

相关文章

Debian11之 K3s 部署 K8S 集群

K3S 架构方案 Server 节点指的是运行 k3s server 命令的主机&#xff0c;control plane 和数据存储组件由 K3s 管理Agent 节点指的是运行 k3s agent 命令的主机&#xff0c;不具有任何数据存储或 control plane 组件Server 和 Agent 都运行 kubelet、容器运行时和 CNI 基于 …

ESP32C3之PlatformIO IDE开发环境

一、下载​​platformio ide扩展 在vscode里面直接搜索​​platformio ide&#xff0c;点击安装即可 二、新建esp32c3工程 2.1 首先点击小蚂蚁的图标&#xff0c;然后点击pio home 2.2 点击projects->create New Project 2.3 填写工程名和工程路径:勾选钩表示默认路径&a…

Kubernetes第1天

第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物…

Redis学习---02

一、Redis基础知识 (1)redis默认有16个数据库;默认使用的是第0个数据库&#xff1b;切换数据库&#xff1a; select index 获取数据库中的值大小&#xff1a;dbsize (2)&#xff1a;查看所有的key (3):清空当前数据库&#xff1a;flushdb (4)清空所有的数据库&#xff1a;flu…

LCD1602液晶显示模块

1.认识LCD1602 1、概述&#xff1a; LCD1602&#xff08;Liquid Crystal Display&#xff09;是一种工业字符型液晶&#xff0c;能够同时显示 1602&#xff0c;32个 字符(16列两行)。是我们接触引脚最多的模块。LCD1602我们的非标准协议&#xff08;标准协议有IIC、IIS、SPI&…

利用暴力攻击破解登陆密码

长久以来&#xff0c;入侵远程计算机系统的工具和技术并没有发生翻天覆地的变化。例如&#xff0c;在许多情况下&#xff0c;普通用户只要知道了相关密码&#xff0c;就能立刻变身为管理员。虽然这些情形听起来不够曲折&#xff0c;但在大多数情况下&#xff0c;暴力攻击是通过…

Kubernetes第3天

第五章 Pod详解 本章节将详细介绍Pod资源的各种配置&#xff08;yaml&#xff09;和原理。 Pod介绍 Pod结构 每个Pod中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类&#xff1a; 用户程序所在的容器&#xff0c;数量可多可少 Pause容器&#xff0c;这是每个…

JavaScript实现水印效果

效果 实现思路 利用canvas绘制出文字将canvas作为遮罩层背景图, 将背景x轴和y轴重复 实现步骤 动态生成canvas并画出文字 const canvas document.createElement("canvas"); canvas.width len * fontSize; // canvas宽度, 目前是根据文字长度和大小来调整的, 自…

Postman调试依赖登录接口的3种方法

在接口测试种, 我们经常会遇到有些接口登录后才能访问.我们在使用Postman调试这种接口时一般有3种方法: 1.依次请求 如果有登录接口的文档,或者通过抓包比较容易抓出登录请求的参数和格式,可以先使用Postman请求一下登录接口,这时Cookies会存到本地(可以通过Postman Cookies管理…

JVM学习(十一):对象的实例化内存布局与访问定位

目录 一、对象的实例化 1.1 创建对象的方式 1.2 创建对象的步骤 二、对象的内存布局 2.1 对象头 2.1.1 运行时元数据&#xff08;Mark Word&#xff09; 2.1.2 典型指针 2.2 实例数据&#xff08;Instance Data&#xff09; 2.3 对齐填充&#xff08;Padding&#…

一个奇葩的网络问题,把技术砖家“搞蒙了“

问题现象 客户反馈有一个server端S&#xff0c; 两个client端C1, C2, S的iptables规则对C1, C2都是放通的&#xff0c;但是C2无法连接上S&#xff0c;客户很着急&#xff0c;催我们尽快解决。 这里解释一下&#xff0c;iptables规则是防火墙规则&#xff0c;是linux系统实现防…

【C++刷题集】-- day1

目录 选择题 单选 编程题 组队竞赛⭐ 【题目解析】 【解题思路】(排序 贪心) 删除公共字符⭐ 【题目解析】 【解题思路】(哈希映射) 选择题 单选 1、 以下for循环的执行次数是 ( ) for(int x 0, y 0; (y 123) && (x < 4); x); 是无限循环 循环次数不…

Leetcode刷题之有效的括号

我们的内心和心智&#xff0c;是决定我们未来命运的最强劲的力量。 -- 奥普拉温弗瑞目录 &#x1f341;一.有效的括号 &#x1f34d;1.使用栈实现 &#x1f352;2.完整代码&#xff1a; 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0…

Sonar Qube代码质量检测工具安装及基本使用

Sonar介绍 Sonar Qube是一个开源的代码分析平台&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。 Sonar Qube可以与多种软件整合进行代码扫描&#xff0c;比如Maven&#xff0c;…

算法套路十七——买卖股票问题:状态机 DP

算法套路十七——买卖股票问题&#xff1a;状态机 DP 状态机DP是一种将动态规划方法应用于有限状态机&#xff08;Finite State Machine&#xff09;的问题求解方法。 状态机DP&#xff08;State Machine DP&#xff09;是一种动态规划的思想&#xff0c;它通常用于解决一些具…

行动元宣布推出面向精密制造领域的智能运动控制解决方案

近日&#xff0c;AI 工业工程化平台行动元宣布推出面向精密制造领域的智能运动控制解决方案。该方案融合大数据模型、数字孪生以及人工智能技术&#xff0c;通过数字化建模、适配、调试等过程&#xff0c;极大提升终端设备集成方案的设计、选型与测试效率&#xff0c;并通过算法…

你不学,我不学,谁来网安,谁来保卫国家!

一、为什么选择网络安全&#xff1f; 这几年随着我国**《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》**等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前…

PCL点云库(6) — Filters模块空间裁剪器类

目录 6.1 3D包围盒裁剪器Class BoxClipper3D< PointT > 6.2 平面裁剪器Class pcl::PlaneClipper3D< PointT > 6.3 立方体过滤Class pcl::CropBox< PointT > 6.4 曲面或多边形过滤 Class pcl::CropHull< PointT > 6.5 完整代码 6.1 3D包围盒裁剪器…

C语言基础:static关键字

本文结合工作经验&#xff0c;研究C语言中static关键字的用法。 文章目录 1 static关键字概念2 用法与使用场景2.1 修饰全局变量2.1.1 代码示例2.1.2 使用场景 2.2 修饰函数2.2.1 代码示例2.2.2 使用场景 2.3 修饰局部变量2.3.1 代码示例2.4.2 使用场景 3 总结 1 static关键字…

第13章:存储过程和存储函数

一、存储过程 1.1理解 含义&#xff1a; 存储过程stored procedure&#xff0c;思想是一组经过预先编译的SQL语句的封装。 存储过程预先存储在MySQL服务器上&#xff0c;需要执行的时候&#xff0c;客户端向服务器端发出调用存储过程的命令&#xff0c;服务器段把这组SQL执…