k8s 声明式资源管理

一、资源配置清单的管理

1.1 查看资源配置清单

声明式管理方法:
1.适合于对资源的修改操作
2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
4.语法格式:kubectl create/apply/delete -f xxxx.yaml

//查看资源配置清单
kubectl get deployment nginx -o yaml

//解释资源配置清单
kubectl explain deployment.metadata

1.2 修改资源配置清单并应用

 离线修改

 离线修改的过程:

(1)首先将配置资源导入通过重定向符号导入到yaml文件中

(2)通过vim编辑器进行yaml配置文件,删除多余的选项,修改配置项,进行保存

 (3) 通过apply -f  该yaml 文件 或者是   (先  deleter -f 该yaml文件,再create -f 该yaml 文件)

 用来实现声明式离线修改资源清单的配置

create 与 apply的区别:

        create和apply都能运用于资源模板的创建,但是create创建资源模板属于固定式的资源配置,一旦创建,后期想要修改时,就只能通过先delete删除资源模板,再进行create创建,达到资源更新的效果。

        而apply属于一种实时更新使用的创建模板方式,后期对资源模板的配置文件进行修改时,只需要先修改配置文件,再使用apply -f 指定配置文件即可。

        但是apply并不是什么情况下都能生效使用。如果你发现配置并不生效,而且与书写格式无关,则可以先delete -f 该配置文件,再create -f 该配置文件

修改yaml文件,并用kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时, 先使用delete清除资源,再apply创建资源
 
kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml    #修改port:8080
kubectl delete -f nginx-svc.yaml  #删除yaml文件
kubectl apply -f nginx-svc.yaml   #应用yaml文件
kubectl get SVC

注意当直接使用apply更新时警告报错
如果不是因为配置项书写问题,可以先采用delete -f xxx.yaml
再使用 apply -f xxx.yaml

在线修改

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)

此修改方式不会对yaml文件内容修改

kubectl edit service nginx

端口发生变化 ,且yaml文件也不会发生改变
因为这属于在线编辑,直接在原配置中进行调整
我们导出的yaml 文件则像是一个模板通过命令来替换 原有的配置

删除资源配置清单

陈述式删除:
kubectl delete service nginx

声明式删除:
kubectl delete -f nginx-svc.yaml

二、yaml 文件详解

Kubernetes 支持 YAML 和 JSON 格式管理资源对象
JSON 格式:主要用于 api 接口之间消息的传递
YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读

YAML 语法格式:

●大小写敏感
●使用缩进表示层级关系
●不支持Tab键制表符缩进,只使用空格缩进
●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
●符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
●“---”表示YAML格式,一个文件的开始,用于分隔文件间
●“#”表示注释

查看 api 资源版本标签

kubectl api-versions

admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1								#如果是业务场景一般首选使用 apps/v1
apps/v1beta1						#带有beta字样的代表的是测试版本,不用在生产环境中
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
.............

三、自主编写资源清单

3.1 初步认识资源清单中Deployment的重要配置项

写一个yaml文件demo
mkdir /opt/demo
cd demo/

vim nginx-web01.yaml

apiVersion: apps/v1		#指定api版本标签
kind: Deployment		#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-web01	    #定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:				#定义Deployment资源标签
    app: nginx-web01	
spec:					#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3			#定义副本数量
  selector:				#定义标签选择器
    matchLabels:		#定义匹配标签
      app: nginx-web01		#需与 .spec.template.metadata.labels 定义的标签保持一致
  template:				#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx-web01
    spec:
      containers:				#定义容器属性
      - name: nginx				#定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.18		#定义容器使用的镜像以及版本
        ports:
        - containerPort: 80		#定义容器的对外的端口

创建资源对象

kubectl apply -f nginx-web01.yaml

查看创建的pod资源

kubectl get pod -o wide

3.2 创建service服务对外提供访问并测试

vim nginx-svc.yaml

apiVersion: v1  		#Kubernetes API 的版本号
kind: Service  		    #定义了资源的对象类型
metadata:		        #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-service    	#定义服务的名称
  labels:			#定义标签
    app: nginx-web01
spec:		            #该字段详细描述了 Service 的期望状态和配置
  type: NodePort          #定义了 Service 的类型为NodePort,对外暴露端口
  ports:		            #定义了服务的端口映射关系
  - port: 80	        #服务在集群内部暴露的端口
    targetPort: 80  	#目标 Pod 上实际监听的端口
  selector:			    #通过标签选择器来确定哪些 Pods 应该接收由这个 Service 转发的流量
    app: nginx-web01

创建资源对象

kubectl apply -f nginx-svc.yaml

查看创建的service

kubectl get svc -o wide

在浏览器输入 nodeIP:nodePort 即可访问

http://192.168.80.7:31482

详解k8s中的port:
●port
port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

●nodePort
nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

●targetPort
targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

●containerPort
containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

四、手动生成模板,再编写资源清单

4.1 生成模板

用--dry-run命令生成yaml资源清单
 
kubectl run --dry-run 打印相应的 API 对象试运行而不执行创建
#空跑测试
kubectl run nginx-web02 --image=nginx:1.18  --port=80 --dry-run=client
 
#空跑测试的输出结果
kubectl run nginx-web02 --image=nginx:1.18  --port=80 --dry-run=client -o yaml
#生成模板
kubectl run nginx-web02 --image=nginx:1.18  --port=80 --dry-run=client -o yaml > nginx-web02.yaml

该yaml文件就是我们要使用的资源模板

查看生成json格式

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

4.2 生成并修改模板

使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

kubectl create deployment nginx-deploy --image=nginx:1.18 --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

vim nginx-deploy.yaml

kubectl apply -f nginx-deploy.yaml

kubectl get all --show-labels -l app=nginx-cesh

除了使用使用yaml格式导出生成模板外,我们还可以将现有的资源生成模板导出

kubectl get service nginx-service -o yaml

保存到文件中

kubectl get service nginx-service -o yaml > nginx-svc.yaml

查看字段帮助信息,可一层层的查看相关资源对象的帮助信息

kubectl explain deployments.spec.template.spec.containers

kubectl explain pods.spec.containers

//写yaml太累怎么办?
●用 --dry-run 命令生成
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml

●用get命令导出
kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service  #复制配置,再粘贴到新文件

//yaml文件的学习方法:
(1)多看别人(官方)写的,能读懂
(2)能照着现场的文件改着用
(3)遇到不懂的,善用kubectl explain ... 命令查

五、各种yaml文件详解

5.1 pod  yaml文件详解

//Pod yaml文件详解

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

5.2 Service yaml文件详解

Service yaml文件详解

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                 #外部负载均衡器的主机名

5.3 deployment.yaml文件详解

deployment.yaml文件详解

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磁盘

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

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

相关文章

高性能负载均衡的分类及架构分析

如何选择与部署适合的高性能负载均衡方案? 当单服务器性能无法满足需求,高性能集群便成为提升系统处理能力的关键。其核心在于通过增加服务器数量,强化整体计算能力。而集群设计的挑战在于任务分配,因为无论在哪台服务器上执行&am…

【C++初阶】--- C++入门(上)

目录 一、C的背景及简要介绍1.1 什么是C1.2 C发展史1.3 C的重要性 二、C关键字三、命名空间2.1 命名空间定义2.2 命名空间使用 四、C输入 & 输出 一、C的背景及简要介绍 1.1 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题&…

看看汉朝有庙号的七位皇帝,你就知道含金量有多高?

汉朝拥有庙号的七位皇帝你们知道是谁吗? 相比于后世皇帝人手一个庙号的景象,汉朝皇帝庙号的使用是相当严谨的。很多原本拥有庙号的皇帝,最后因为功绩不多或者无功无德,最终被废除庙号。因此,汉朝谨遵“祖有功宗有德”…

LeetCode:78.子集

解答 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res[[]]for i in nums:res[[i]num for num in res]return res代码解释 这段代码定义了一个名为Solution的类,并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作…

Easy-poi 和 EasyExcel 选型

目录 共同点地址如何选 共同点 easy-poi 和 easyexcel 都是基于 apache poi 进行二次开发的,底层都是依赖的 apache poi使用简单,都可以通过简单的注解实现excel文件的导入导出 地址 esay poi 是一个开源的 excel,word 处理框架。链接 easy excel 是…

Vue 3入门指南

title: Vue 3入门指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端开发 tags: 框架对比环境搭建基础语法组件开发响应式系统状态管理路由配置 第1章:Vue 3简介 1.1 Vue.js的历史与发展 Vue.js由前谷歌工程师尤雨溪(Eva…

Java NIO 基础

Java NIO 基础 1. NIO 介绍2. NIO 三大组件2.1 Channel2.1.1 常见的 Channel2.1.2 常用方法 2.2 Buffer2.2.1 常见的 Buffer2.2.2 重要属性2.2.3 常用方法 2.3 Selector2.3.1 四种事件类型 1. NIO 介绍 NIO(non-blocking io):非阻塞IO&#…

无网环境禁止 WPS 提示登录,且基本功能按钮可用

目前 WPS 升级后,每次打开都会提示你登录 WPS,并且在未登录之前所有基本功能按钮是置灰状态,无法使用。 如此一来,在内网或无网环境,我们无法登陆 WPS ,就给我们的使用带来了极大的不便,那么有没…

go升级后 编译的exe在win7上无法正常运行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升级到go 1.21后报一堆错误,要死了啊 原来是go 1.21不支持win7了,必须把go退回到1.20版本 谷歌发布编程语言 Go 1.21 版本:取消支持微软 Win7/8 及苹果 macOS 10.13/10…

Vue3实战笔记(33)—组件传值props终章

文章目录 前言一、运行时声明、基于类型的声明二、一个小小的好奇心三、非 script setup场景下总结 前言 在 Vue 3 中,组件的声明方式主要有两种:运行时声明和基于类型的声明。这两种方式在 Vue 3 的 Composition API 中体现得尤为明显。 一、运行时声明…

如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

基于manifest文件批量将coding的仓库导入gitlab中

文章目录 写在前面的话背景编写manifest文件最终效果 写在前面的话 前面有讲过通过manifest清单导入项目到gitlab中,但是实际的操作是不同gitlab实例之间的操作,然而对于在不同gitlab实例的repo迁移而言,显然direct transfer会更合适。 背景…

Spring6笔记(五):国际化、数据校验、提前编译

九、国际化:i18n 9.1 i18n概述 9.2 Java国际化 9.3 Spring6国际化 十、数据校验:Validation 10.1 Spring Validation 概述 10.2 实验一:通过 validator 接口实现 10.3 实验三:Bean Validation 注解 10.4 实验四:实现…

深入了解 RabbitMQ:构建可靠消息传递系统的关键

前言 在现代分布式应用程序开发中,构建可靠的消息传递系统至关重要。RabbitMQ 作为一款强大的消息代理软件,为开发人员提供了丰富的工具和解决方案。本文将深入探讨 RabbitMQ 的核心概念、工作原理以及其在实际应用中的应用场景。 一、什么是 RabbitMQ…

[力扣]——231.2的幂

题目描述: 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 bool isPowerOfTwo(int n){ if(n0)retur…

Diffusion Policy:基于扩散模型的机器人动作生成策略

项目地址: Diffusion Policy (columbia.edu) 一、摘要 本文介绍了 "扩散策略",这是一种生成机器人行为的新方法,它将机器人的视觉运动策略(visuomotor policy)表示为条件去噪扩散过程(conditi…

15:00面试,15:08出来,面试问的有点变态。。。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天…

Manjaro /opt/google/chrome error

mingcai Manjaro in /opt/google/chrome [22:34:02] $ ./google-chrome [62841:62841:0516/223407.119870:ERROR:process_singleton_posix.cc(353)] 其他计算机 (mingcai-systemproductname) 的另一个 Google Chrome 进程 (2931) 好像正在使用此个人资料。Chrome 已锁定此个人…

PySide6 QStateMachine状态机的实现

PySide6的状态机模块提供了一种方便的方式来实现状态机模式,用于管理程序的状态和状态转换。通过使用PySide6的状态机模块,开发者可以更加清晰地组织程序逻辑,使程序更易于维护和扩展。 在PySide6中,状态机相关的类主要包括&…

探索k8s集群中kubectl的陈述式资源管理

一、k8s集群资源管理方式分类 1.1陈述式资源管理方式:增删查比较方便,但是改非常不方便 使用一条kubectl命令和参数选项来实现资源对象管理操作 即通过命令的方式来实 1.2声明式资源管理方式:yaml文件管理 使用yaml配置文件或者json配置文…