【Kurbernetes资源管理】声明式资源管理+配置清单文件详解(附实例)

声明式

  • 一、声明式资源管理方式
    • 1.1 简介
    • 1.2 基本语法
    • 1.3 子命令详解
      • 1.3.1 获取资源配置清单
      • 1.3.2 创建/更新资源
        • 补充:creat和apply的区别
      • 1.3.3 删除资源----- delete
      • 1.3.4 编辑资源配置 -----edit
      • 1.3.5 获取资源的解释-----explain
  • 二、资源清单格式详解
    • 2.1 yaml语法格式
    • 2.2 Pod yaml文件详解
      • 2.2.1 编写方式
      • 2.2.2 举个例子
    • 2.3 Deployment yaml文件详解
      • 2.3.1 编写方式
      • 2.3.2 举个例子
    • 2.4 Service yaml文件详解
  • 三、创建配置清单文件的方法
    • 3.1 方法一:逐级编写资源配置清单
    • 3.2 方法二:预运行资源创建命令
    • 3.3 方法三:通过已有资源创建
    • 3.4 方法四:根据官方文档
    • 补充:externalTraffiicPolicy 字段(面试常问)
      • 1)值为Cluster
      • 2)值为Local
  • 小结

一、声明式资源管理方式

可理解成使用yaml配置文件的定义来实现资源的管理操作

1.1 简介

声明式资源管理方法依赖于资源配置清单文件对资源进行管理,适合于对资源的修改操作

对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里。

Kubernetes 支持 YAMLJSON 格式管理资源对象

JSON 格式:主要用于 api 接口之间消息的传递。

YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读

1.2 基本语法

kubectl <command> -f xxxx.yaml
常用子命令功能描述
create创建资源
apply创建/更新资源
explain查看 Kubernetes 资源及其字段的详细信息和说明,包括其文档和字段类型
delete删除
edit在线编辑
replace替换

1.3 子命令详解

1.3.1 获取资源配置清单

kubectl get [-n <命名空间>] <资源类型> <资源名称> -o yaml > XXX.yaml     #获取资源配置清单
#举个例子
kubectl get pods -n kube-system  coredns-54d67798b7-27d2s -o yaml > /opt/test1.yaml

在这里插入图片描述

1.3.2 创建/更新资源

kubectl create|apply -f XXX.yaml

举个例子

vim /opt/nt1.yaml

在这里插入图片描述

kubectl apply -f /opt/yaml/nt1.yaml
kubectl get pods -n my-ns -o wide

在这里插入图片描述

补充:creat和apply的区别

共同点

kubectl create -fkubectl apply -f 都是使用 Kubernetes 集群中的 YAML 配置文件来创建和管理 Kubernetes 资源对象。

区别

kubectl create -f 用于创建 Kubernetes 对象。

如果对应的资源已经存在,则会返回错误,此时需要先删除原有的资源对象,然后再执行创建操作。

如果资源对象不存在,则会自动创建对应的资源对象。
在这里插入图片描述
在这里插入图片描述

kubectl apply -f 用于创建或更新一个 Kubernetes 对象。

如果该资源对象已经存在,则会首先尝试更新对应的字段值和配置。

如果不存在则会自动创建资源对象。

同时 kubectl apply 还提供了许多可选的参数,例如 --force、–validate、–record 等,可以使更新操作更加精确和可控。

总结

kubectl create -f 适用于初始化资源对象的场景;

kubectl apply -f 则更加适合更新和修改已有的资源对象

推荐使用 kubectl apply -f 命令来创建和更新资源对象,因为该命令可以在需要时高效地对资源进行更新,并且具有回滚功能,更加适合 Kubernetes 中动态扩展和更新资源对象的场景。

1.3.3 删除资源----- delete

kubectl delete -f XXX.yaml           #删除资源

在这里插入图片描述

1.3.4 编辑资源配置 -----edit

1.在线修改

只能修改支持在线修改的字段,比如端口号…。

kubectl edit [-n <命名空间>] <资源类型> <资源名称>       
#在线修改/编辑资源配置
#如果要修改Pod,不能处于running状态
#举个例子
kubectl edit -n my-ns service service-test1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.离线修改

对于不支持在线修改的字段,比如IP地址,只能通过离线修改的方式更新资源。

#使用vim编辑器修改配置文件
#再删除原有配置
#最后重新应用
kubectl delete -f XXX.yaml && kubectl apply -f XXX.yaml
#举个例子
vim 
kubectl delete -f /opt/yaml/st1.yaml && kubectl apply -f /opt/yaml/st1.yaml

在这里插入图片描述

在这里插入图片描述

1.3.5 获取资源的解释-----explain

kubectl explain <资源类型>.<一级字段>.<二级字段>....    #获取资源的解释

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、资源清单格式详解

2.1 yaml语法格式

1)大小写敏感,即区分大小写

2)使用缩进表示层级关系;

3)不支持Tab键制表符缩进,只能使用空格缩进

4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格;

5)符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等;

6)“—”表示YAML格式,一个文件的开始,用于分隔文件间;

7)“#”表示注释。

2.2 Pod yaml文件详解

2.2.1 编写方式

以Pod的一级字段和二级字段为例。

kubectl  explain service

在这里插入图片描述

kubectl explain service.metada

在这里插入图片描述

2.2.2 举个例子

在这里插入图片描述

#扩展模板
apiVersion: v1			#必选,版本号,例如v1
kind: Pod				#必选,Pod
metadata:				#必选,元数据
  name: string			  #必选,Pod名称
  namespace: string		  #必选,Pod所属的命名空间
  labels:				  #自定义标签
    - name: string		    #自定义标签名字
  annotations:			    #自定义注释列表
    - name: string
spec:					#必选,Pod中容器的详细定义
  containers:			  #必选,Pod中容器列表
  - name: string		    #必选,容器名称
    image: string		    #必选,容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent]	#获取镜像的策略:Alawys表示总是下载镜像,IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
    command: [string]		#容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: [string]			#容器的启动命令参数列表
    workingDir: string		#容器的工作目录
    volumeMounts:			#挂载到容器内部的存储卷配置
    - name: string			  #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: string		  #存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: boolean		  #是否为只读模式
    ports:					#需要暴露的端口库号列表
    - name: string			  #端口号名称
      containerPort: int	  #容器需要监听的端口号
      hostPort: int			  #容器所在主机需要监听的端口号,默认与Container相同
      protocol: string		  #端口协议,支持TCP和UDP,默认TCP
    env:					#容器运行前需设置的环境变量列表
    - name: string			  #环境变量名称
      value: string			  #环境变量的值
    resources:				#资源限制和请求的设置
      limits:				  #资源限制的设置
        cpu: string			    #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: string			#内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests:				  #资源请求的设置
        cpu: string			    #Cpu请求,容器启动的初始可用数量
        memory: string		    #内存清楚,容器启动的初始可用数量
    livenessProbe:     		#对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      exec:					#对Pod容器内检查方式设置为exec方式
        command: [string]	  #exec方式需要制定的命令或脚本
      httpGet:				#对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:			#对Pod内个容器健康检查方式设置为tcpSocket方式
         port: number
       initialDelaySeconds: 0	#容器启动完成后首次探测的时间,单位为秒
       timeoutSeconds: 0		#对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
       periodSeconds: 0			#对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure]		#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
    nodeSelector: obeject		#设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
    imagePullSecrets:			#Pull镜像时使用的secret名称,以key:secretkey格式指定
    - name: string
    hostNetwork:false			#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    volumes:					#在该pod上定义共享存储卷列表
    - name: string				  #共享存储卷名称 (volumes类型有很多种)
      emptyDir: {}				  #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
      hostPath: string			  #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
        path: string			    #Pod所在宿主机的目录,将被用于同期中mount的目录
      secret:					#类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:				#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
        name: string
        items:
        - key: string

2.3 Deployment yaml文件详解

以Deployment的一级字段和二级字段为例。

2.3.1 编写方式

kubectl explain deploy

在这里插入图片描述

kubectl explain deploy.metadata

在这里插入图片描述
在这里插入图片描述

kubectl explain deploy.spec

在这里插入图片描述

2.3.2 举个例子

#扩展模板
apiVersion: extensions/v1beta1   #接口版本
kind: Deployment                 #接口类型
metadata:
  name: cango-demo               #Deployment名称
  namespace: cango-prd           #命名空间
  labels:
    app: cango-demo              #标签
spec:
  replicas: 3
  strategy:
    rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间
      maxSurge: 1      #滚动升级时会先启动1个pod
      maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
  template:         
    metadata:
      labels:
        app: cango-demo  #模板名称必填
    sepc: #定义容器模板,该模板可以包含多个容器
      containers:                                                                   
        - name: cango-demo                                                           #镜像名称
          image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址
          command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令
          args:                                                                #启动参数
            - '-storage.local.retention=$(STORAGE_RETENTION)'
            - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
            - '-config.file=/etc/prometheus/prometheus.yml'
            - '-alertmanager.url=http://alertmanager:9093/alertmanager'
            - '-web.external-url=$(EXTERNAL_URL)'
    #如果command和args均没有写,那么用Docker默认的配置。
    #如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
    #如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。
    #如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。
          imagePullPolicy: IfNotPresent  #如果不存在则拉取
          livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;
            httpGet:
              path: /health #如果没有心跳检测接口就为/
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60 ##启动后延时多久开始运行检测
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 5
          readinessProbe:
            httpGet:
              path: /health #如果没有心跳检测接口就为/
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 30 ##启动后延时多久开始运行检测
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 5
          resources:              ##CPU内存限制
            requests:
              cpu: 2
              memory: 2048Mi
            limits:
              cpu: 2
              memory: 2048Mi
          env:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量
            - name: LOCAL_KEY     #本地Key
              value: value
            - name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,
              valueFrom:
                configMapKeyRef:
                  name: special-config   #configmap中找到name为special-config
                  key: special.type      #找到name为special-config里data下的key
          ports:
            - name: http
              containerPort: 8080 #对service暴露端口
          volumeMounts:     #挂载volumes中定义的磁盘
          - name: log-cache
            mount: /tmp/log
          - name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录
            mountPath: /data/media    
          - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs
            mountPath: /mnt/nfs
          - name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。
            mountPath: /etc/config       
          - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)
 
#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,
  volumes:  # 定义磁盘给上面volumeMounts挂载
  - name: log-cache
    emptyDir: {}
  - name: sdb  #挂载宿主机上面的目录
    hostPath:
      path: /any/path/it/will/be/replaced
  - name: example-volume-config  # 供ConfigMap文件内容到指定路径使用
    configMap:
      name: example-volume-config  #ConfigMap中名称
      items:
      - key: log-script           #ConfigMap中的Key
        path: path/to/log-script  #指定目录下的一个相对路径path/to/log-script
      - key: backup-script        #ConfigMap中的Key
        path: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script
  - name: nfs-client-root         #供挂载NFS存储类型
    nfs:
      server: 10.42.0.55          #NFS服务器地址
      path: /opt/public           #showmount -e 看一下路径
  - name: rbd-pvc                 #挂载PVC磁盘
    persistentVolumeClaim:
      claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

2.4 Service yaml文件详解

一些常用的字段,可以根据explain命令查看每一级字段的子内容。

kubectl explain service
kubectl explain service.metadata
kubectl explain service.spec
kubectl explain service.spec. 

在这里插入图片描述

#扩展模板
apiVersion: v1
kind: Service
matadata:                                #元数据
  name: string                           #service的名称
  namespace: string                      #命名空间  
  labels:                                #自定义标签属性列表
    - name: string
  annotations:                           #自定义注解属性列表  
    - name: string
spec:                                    #详细描述
  selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 
                                         #范围
  type: string                           #service的类型,指定service的访问方式,默认为 
                                         #clusterIp
  clusterIP: string                      #虚拟服务地址      
  sessionAffinity: string                #是否支持session
  ports:                                 #service需要暴露的端口列表
  - name: string                         #端口名称
    protocol: string                     #端口协议,支持TCP和UDP,默认TCP
    port: int                            #服务监听的端口号
    targetPort: int                      #需要转发到后端Pod的端口号
    nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
  status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
    loadBalancer:                        #外部负载均衡器    
      ingress:                           #外部负载均衡器 
        ip: string                       #外部负载均衡器的Ip地址值
        hostname: string                 #外部负载均衡器的主机名

三、创建配置清单文件的方法

3.1 方法一:逐级编写资源配置清单

根据kubectl explain命令获取字段信息,然后逐级手动输入

kubectl explain <资源类型>[.<一级字段>.<二级字段>]

3.2 方法二:预运行资源创建命令

快速获取,根据kubectl create|run|expose... --dry-run=client-o yaml > xxx.yaml 命令,模拟生成配置文件,将已有的配置文件作为模板进行修改。

#举个例子
kubectl create service clusterip --tcp=80:80 nginx-test2 --dry-run=client -o yaml > /opt/yaml/st2.yaml

在这里插入图片描述

3.3 方法三:通过已有资源创建

1)根据kubectl get [-n <命名空间>] <资源类型> <资源名称> -o yaml > xxx.yaml命令,根据已有的资源创建;
在这里插入图片描述

2)根据kubectl edit [-n <命名空间>] <资源类型> <资源名称>命令,获取配置清单,手动复制。
在这里插入图片描述
在这里插入图片描述

3.4 方法四:根据官方文档

复制K8S官方文档的资源配置案例,这里以service的创建为例。

官方文档:服务(Service) | Kubernetes
在这里插入图片描述

补充:externalTraffiicPolicy 字段(面试常问)

在这里插入图片描述
外部流量策略,Cluster或者Local

1)值为Cluster

流量可以转发到其他节点上的Pod。

这个是默认模式,Kube-proxy不管容器实例在哪,公平转发。

Kube-proxy转发时会替换掉报文的源IP,即:容器收的报文,源IP地址,已经被替换为上一个转发节点的了。
在这里插入图片描述

2)值为Local

流量只发给本机的Pod

Kube-proxy转发时会保留源IP,即:容器收到的报文,看到源IP地址还是用户的。
在这里插入图片描述

注:这种模式下的Service类型只能为外部流量,即:LoadBalancer 或者 NodePort 两种,否则会报错。

小结

1.声明式资源管理方式的相关命令

kubectl get [-n <命名空间>] <资源类型> <资源名称> -o yaml > XXX.yaml     #获取资源配置清单

kubectl create|apply -f XXX.yaml     #创建/更新资源
kubectl delete -f XXX.yaml           #删除资源

kubectl edit [-n <命名空间>] <资源类型> <资源名称>       #在线修改/编辑资源配置

对于不支持在线修改的字段只能通过离线修改的方式更新资源:kubectl delete -f XXX.yaml && kubectl apply -f XXX.yaml

kubectl explain <资源类型>.<一级字段>.<二级字段>....    #获取资源的解释

2.创建yaml配置清单文件的方法

方法一: 手动输入,根据kubectl explain命令获取字段信息,然后逐级手动输入

方法二: 根据kubectl create|run|expose... --dry-run=cilent-o yaml > xxx.yaml 命令,模拟生成配置文件,将已有的配置文件作为模板进行修改

快速获取,面试常问,通过预运行资源创建命令,将配置文件作为模板

方法三: 如果集群中已经有创建好的资源

1)根据kubectl get [-n <命名空间>] <资源类型> <资源名称> -o yaml > xxx.yaml命令,根据已有的资源创建;

2)根据kubectl edit [-n <命名空间>] <资源类型> <资源名称>命令,获取配置清单,手动复制。

方法四:复制Kurbernetes官方文档的资源配置案例,然后进行相关的修改。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 第三方 flutter_screenutil(屏幕适配)

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

Git的基本使用

目录 一.Git的简介 1.1 Git与SVN的区别&#xff08;优势与劣势&#xff09; 1.2 Git的工作流程 二.Git的安装及常用命令 2.1 使用前准备 ​编辑 ​编辑 2.2 在Windows中安装Git 官网链接 Git - Downloadshttps://git-scm.com/downloads 2.3 Git的常用命令 三、Git命令…

人工智能-卷积神经网络之多输入多输出通道

多输入多输出通道 每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止&#xff0c;我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。 当我们添加通道时&#xff0c;我们的输…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(二)

新增员工功能开发 1. 新增员工1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码开发1.2.1 设计DTO类1.2.2 Controller层1.2.3 Service层接口1.2.4 Service层实现类1.2.5 Mapper层 1.3 功能测试1.3.1 接口文档测试 1.4 代码完善1.4.1 问题一1.4.2 问题二1.…

H5网页漫画小说苹果cms模板源码/支持对接公众号/支持三级分销

H5网页漫画小说苹果cms模板源码&#xff0c;支持对接公众号、支持三级分销&#xff0c;评论、收藏、历史记录、三级分销。 独有的模板搜索功能&#xff0c;微信、qq防红&#xff0c;站外采集接口、记录阅读章节&#xff0c;SEO优化&#xff08;后台配置&#xff09;&#xff0…

16.字符连接

#include<stdio.h> #include <cstring> int main(){char s1[44];char s2[33];scanf("%s",s1);scanf("%s",s2);strcat(s1,s2) ;printf("连接两个字符为&#xff1a;%s ",s1); return 0;}

Java数据的基本(原始)类型和引用类型的特点差别

本文作为“Java数据类型”一文的补充https://blog.csdn.net/cnds123/article/details/110517272 Java的数据类型可以分为基本类型&#xff08;primitive types&#xff09;和引用类型&#xff08;reference types&#xff09;两大类。在实际编程中&#xff0c;要根据需求选择合…

MySQL json相关函数详解

MySQL提供了一系列的JSON函数&#xff0c;用于解析、提取、修改和操作JSON数据。以下是一些常用的JSON函数及其功能。 以下所有操作都使用该表&#xff08;zone_test&#xff09;用来演示&#xff1a; 一&#xff1a;JSON_OBJECT(key1,value1,key2,value2) 1、作用&#xff1a;…

​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第1章-绪论-思维导图】 课本里章节里所有蓝色字体的思维导图

Read Completion Boundary (RCB)切分规则

Read Completion Boundary(RCB) 切分规则 Read Completion Boundary(RCB) 简介 当Read Completion 包含multi-completions时&#xff0c;RCB 规定了多个Completions地址的align规则。Spec中规定RCB可以是64 Byte或者128 Byte&#xff0c;该值可以在link_control register中得…

Unity随笔:C#运行时

Unity是如何编译运行C#的 &#xff08;1&#xff09;Unity会通过编译器将C#脚本编译成IL指令。 Unity会通过Roslyn来对C#代码进行编译&#xff0c;生成中间IL指令集。 当我们每次修改或者添加新的C#代码文件&#xff0c;Unity界面的右下角会出现短暂的“转圈”现象。这就意味…

PTE-RA总结

目录 FIBW刷题记录 1.The Plains Indians were people who did not like 2.An economic depression is a period of sustained 3.Pidgins are languages that are born after contact between 4.It is tempting to try to prove that good looks 5.The stock of Austral…

chrome安装vue devtools

不能访问应用商店 如果可以访问应用商店可以往下看 插件源代码 选择shell-chrome&#xff0c;这是官方的插件源码 下载源代码打包 参考教程 点击扩展按钮->管理扩展程序->打开开发者模式->把crx文件拖拽进去即可 可以访问chrome应用商店 插件地址 官方文档地址 选…

15.数组逆置【不是为啥我第四行不太对呢?】

#include<stdio.h>int fun(int a[4][4]){int i,j;int b[4][3];} int main(){int i,j;int a[3][4], b[4][3];for (i0;i<3;i)for(j0;j<4;j)scanf("%d",&a[i][j]);for (i0;i<3;i)for(j0;j<4;j)b[j][i]a[i][j];printf("逆置后&#xff1a;\n&…

Voice Control for ChatGPT简单高效的与ChatGPT进行交流学习。

快捷又不失灵活性 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通便更高效…

STM32 堆栈空间分布

参考 运行时访问__initial_sp和__heap_base 无RTOS时的情况 在以上配置的情况下&#xff0c;生成工程。在工程的startup.s文件中&#xff0c;由如下代码&#xff1a; Stack_Size EQU 0x400AREA STACK, NOINIT, READWRITE, ALIGN3 __Stack_top ; 自己添加 Stack_Mem…

MySQL代码子查询续集

dept表&#xff1a; emp表&#xff1a; -- 查询每个部门的信息(包括&#xff1a;部门名&#xff0c;编号&#xff0c;地址)和人员数量 -- 1.将两张表结合起来&#xff0c;筛选出部门名&#xff0c;编号&#xff0c;地址 tips: 表.* 表示将该表所有列都显示出来&#xff…

获取请求IP以及IP解析成省份

某些业务需要获取请求IP以及将IP解析成省份之类的&#xff0c;于是我写了一个工具类&#xff0c;可以直接COPY /*** IP工具类* author xxl* since 2023/11/9*/ Slf4j public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS "127.0.0.1&quo…

VUE获取当前日期的周日和周六

<template><div><div @click="handleLast()">上一周</div><div @click="handleNext()">下一周</div><el-calendarref="monChild"v-model="value":first-day-of-week="7":range=&q…

React进阶之路(二)-- 组件通信、组件进阶

文章目录 组件通信组件通信的意义父传子实现props说明子传父实现兄弟组件通信跨组件通信Context通信案例 React组件进阶children属性props校验组件生命周期 组件通信 组件通信的意义 组件是独立且封闭的单元&#xff0c;默认情况下组件只能使用自己的数据&#xff08;state&a…