容器编排学习(五)卷的概述与存储卷管理

一  卷

1  容器化带来的问题

容器中的文件在磁盘上是临时存放的,这给容器中运行的重要的应用程序带来一些问题

问题1:当容器崩溃或重启的时候,kubelet 会以干净的状态(镜像的状态)重启容器,容器内的历史数据会丢失

问题2:当容器被删除时 (k8s 没有停止容器的概念,只有创建、删除),容器内的数据也会被一起清理

问题3:多个容器中有共享文件或目录的需求

2  卷是什么

卷是一个抽象化的存储设备

3  为什么使用卷

卷可以解决容器崩溃或重启后历史数据丢失的问题

卷可以解决容器或 Pod 被删除后数据持久保存的问题

卷可以解决在多个容器内共享数据的问题

Pod 可以同时使用任意数目的卷

4  k8s支持的卷的类型

持久卷:持久卷是集群中的存储资源,就像他的名字一样在里面存储的数据不会随着 Pod 的删除而丢失

临时卷:有些应用程序需要额外的存储,但并不关心数据在重启后是否仍然可用。卷会遵从 Pod 的生命周期,与 Pod一起创建和删除

投射卷:它允许您将多个现有卷源映射到同一个目录。通过将这些不同类型的卷源组合成一个统一的卷,可以更方便地管理和使用这些资源

Pod资源文件

[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:containers:- name: nginximage: myos:nginx

二  持久卷

1  hostPath卷

  • hostPath 卷的本质是使用本地设备,例如磁盘、分区、目录、Socket、CharDevice 和 BlockDevice 等等。hostPath卷的可用性取决于底层节点的可用性,如果节点变得不健康那么 hostPath 卷也将不可被访问。
  • hostPath 卷里面的数据不会随着 Pod的结束而消失
  • 注意事项:配置相同的 Pod,可能在不同的节点上表现不同因为不同节点上映射的文件内容不同

使用 hostPath 卷保存日志

[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:                     # 卷定义- name: logdata              # 卷名称hostPath:                  # 资源类型path: /var/weblog        # 宿主机路径type: DirectoryOrCreate  # 目录不存在就创建containers:- name: nginximage: myos:nginxvolumeMounts:                       # mount 卷- name: logdata                     # 卷名称mountPath: /usr/local/nginx/logs  # 容器内路径

type对应的类型

验证 hostPath 卷

[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP             NODE
web1   1/1     Running   0          45m   10.244.2.16    node-0002[root@master ~]# curl http://10.244.2.16/
Nginx is running !# 删除Pod ,日志数据也不会丢失
[root@master ~]# kubectl delete pod web1
pod "web1" deleted# 来到 node 上查看日志
[root@node-0002 ~]# cat /var/weblog/access.log 
10.244.0.0 - - [27/Jun/2022:02:00:12 +0000] "GET / HTTP/1.1" 200 19 "-" "curl/7.29.0"

2  NFS卷

NFS存储

  • k8s中允许将 nfs 存储以卷的方式挂载到你的 Pod 中
  • 在删除 Pod 时,nfs 存储卷会被卸载 (umount),而不是被删除。nfs 卷可以在不同节点的 Pod 之间共享数据。

NFS卷的用途

NFS最大的功能就是在不同节点的不同 Pd 中共享读写数据。本地NFS的客户端可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

名称IP地址配置
nfs192.168.1.101CPU,1G内存

 配置NFS服务

# 创建共享目录,并部署测试页面
[root@nfs ~]# mkdir -p /var/webroot
[root@nfs ~]# echo "nfs server" >/var/webroot/index.html# 部署 NFS 服务
[root@nfs ~]# dnf install -y nfs-utils
[root@nfs ~]# vim /etc/exports
/var/webroot    192.168.1.0/24(rw,no_root_squash)
[root@nfs ~]# systemctl enable --now nfs-server.service
#----------------------------------------------------------#
# 由于 Pod 是随机调度的,为了保证 NFS 存储卷可以正确加载,需要在所有 node 节点都安装 NFS软件工具包
[root@node ~]# dnf install -y nfs-utils

Pod调用NFS卷

[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatahostPath:path: /var/weblogtype: DirectoryOrCreate- name: website              # 卷名称nfs:                       # NFS 资源类型server: 192.168.1.10     # NFS 服务器地址path: /var/webroot       # NFS 共享目录containers:- name: nginximage: myos:nginxvolumeMounts:- name: logdatamountPath: /usr/local/nginx/logs- name: website                     # 卷名称mountPath: /usr/local/nginx/html  # 路径[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP            NODE
web1   1/1     Running   0          12m   10.244.1.19    node-0001

访问验证 nfs 卷

[root@master ~]# curl http://10.244.1.19 
nfs server

三  PV/PVC

1  概述

PV 的全称是 Persistent Volume,是持久卷

PVC 的全称是 PersistentVolumeClaim,是持久卷声明

2  用途

存储的管理是一个与计算实例的管理完全不同的问题。管理员希望能提供一种通用的 API来完成Pod 对卷的部署管理与使用。PV/PVC就是为了满足这和需求而诞生的,PV/PVC的引入使集群具备了存储的逻辑抽象能力。

3  k8s支持的存储卷

  • -cephfs - - CephFS volume
  • -csi--fc  - -  容器存储接口(CSI)
  • -fc - - Fibre Channel (FC) 存储
  • -hostPath - - HostPath 卷
  • -iscsi-iSCSI - - (SCSI over IP) 存储
  • -nfs - - 网络文件系统 (NFS)存储
  • -rbd -- Rados 块设备(RBD) 卷

4  使用PV/PVC

PV 是资源的提供者,根据集群的基础设施变化而变化,由K8s集群管理员配置

PVC是资源的使用者,根据业务服务的需求变化来配置,用户无需知道PV的技术细节,只需要声明你需求什么样的资源即可

PVC会根据用户声明的需求,自动找到 PV完成绑定

5  PV资源文件

  • PV资源文件(hostPath)

---
kind: PersistentVolume
apiVersion: v1
metadata:name: pv-local
spec:volumeMode: Filesystem                  # 提供的资源类型 [Filesystem,Block]accessModes:                            # 存储卷能提供的访问模式- ReadWriteOnce                       # 卷支持的模式,支持多种- ReadOnlyMany                        # RWO,ROX,RWX,RWOPcapacity:                               # 存储卷能提供的存储空间storage: 30Gi                         # 空间大小persistentVolumeReclaimPolicy: Retain   # 数据回收方式hostPath:                               # hostPath配置path: /var/weblogtype: DirectoryOrCreate
  • PV资源文件(NFS)

---
kind: PersistentVolume
apiVersion: v1
metadata:                       name: pv-nfs
spec:volumeMode: Filesystem                 # 提供 Fileststem 访问方式accessModes:                           # NFS 支持多种访问方式- ReadWriteOnce                      # RWO,ROX,RWX- ReadOnlyMany- ReadWriteManycapacity:storage: 20Gi                        # 提供的磁盘空间大小persistentVolumeReclaimPolicy: Retain  # 数据手工回收mountOptions:                          # mount 的参数- nolocknfs:                                   # NFS配置server: 192.168.1.10                 # <NFS服务器IP地址>path: /var/webroot                   # <共享目录路径>
  • 创建 PV

# 创建 PV
[root@master ~]# kubectl apply -f pv.yaml 
persistentvolume/pv-local created
persistentvolume/pv-nfs created# 查看PV状态
[root@master ~]# kubectl get persistentvolume
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS       AGE
pv-local   30Gi       RWO            Retain           Available    2s
pv-nfs     20Gi       RWO,ROX,RWX    Retain           Available    2s
  • 持久卷

[root@master ~]# vim pv.yaml
---
kind: PersistentVolume
apiVersion: v1
metadata:name: pv-local
spec:volumeMode: FilesystemaccessModes:- ReadWriteOncecapacity:storage: 30GipersistentVolumeReclaimPolicy: RetainhostPath:path: /var/weblogtype: DirectoryOrCreate---
kind: PersistentVolume
apiVersion: v1
metadata:                       name: pv-nfs
spec:volumeMode: FilesystemaccessModes:- ReadWriteOnce- ReadOnlyMany- ReadWriteManycapacity:storage: 20GipersistentVolumeReclaimPolicy: RetainmountOptions:- nolocknfs:server: 192.168.1.10path: /var/webroot[root@master ~]# kubectl apply -f pv.yaml 
persistentvolume/pv-local created
persistentvolume/pv-nfs created
[root@master ~]# kubectl get persistentvolume
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS       AGE
pv-local   30Gi       RWO            Retain           Available    2s
pv-nfs     20Gi       RWO,ROX,RWX    Retain           Available    2s

6  PVC资源文件

持久卷声明

[root@master ~]# vim pvc.yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: pvc1
spec:                        # 定义需求 volumeMode: Filesystem     # 需要使用 Filesystem 的存储卷accessModes:- ReadWriteOnce          # 需要支持 RWO 的存储卷resources:requests:storage: 25Gi          # 最小磁盘需求---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: pvc2
spec:volumeMode: FilesystemaccessModes:- ReadWriteManyresources:requests:storage: 15Gi[root@master ~]# kubectl apply -f pvc.yaml 
persistentvolumeclaim/pvc1 created
persistentvolumeclaim/pvc2 created
[root@master ~]# kubectl get persistentvolumeclaims 
NAME   STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc1   Bound    pv-local   30Gi       RWO                           8s
pvc2   Bound    pv-nfs     20Gi       RWO,ROX,RWX                   8s

7  Pod调用PVC

映射PVC为卷

  • 使用 PVC用户无需关心后端存储设备
  • 系统会自动查找匹配

Pod 挂载 PVC

[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:                   # 卷定义- name: logdata            # 卷名称persistentVolumeClaim:   # 通过PVC引用存储资源claimName: pvc1        # PVC名称- name: website            # 卷名称persistentVolumeClaim:   # 通过PVC引用存储资源claimName: pvc2        # PVC名称containers:- name: nginximage: myos:nginxvolumeMounts:- name: logdata                      # PVC卷名称mountPath: /usr/local/nginx/logs   # 挂载路径- name: website                      # PVC卷名称mountPath: /usr/local/nginx/html   # 挂载路径

服务验证

创建 Pod 后访问查看

[root@master ~]# kubectl delete pods web1
pod "web1" deleted
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP             NODE
web1   1/1     Running   0          45m   10.244.2.16    node-0002
[root@master ~]# curl http://10.244.2.16 
nfs server

四  存储卷管理

1  临时卷

configMap

<1>  概述

configMap 是一种临时卷

configMap 卷提供了向 Pod 注入配置数据的方法,允许你将配置文件与镜像分离,使容器化的应用具有可移植性。

configMap 在使用之前需要先创建它,configMap 不是用来保存大量数据的,在其中保存的数据不可超过 1 MiB。

<2>  用途

配置环境变量

修改配置文件的参数,数据库的地址等

<3>  修改系统时区 

  • 修改系统时区 01

创建 configMap 语法格式

kubectI  create configmap  名称  [选项/参数]

# 使用命令创建 configMap
[root@master ~]# kubectl create configmap tz --from-literal=TZ="Asia/Shanghai"
configmap/tz created# 使用资源对象文件创建
[root@master ~]# vim timezone.yaml
---
kind: ConfigMap
apiVersion: v1
metadata:name: timezone
data:TZ: Asia/Shanghai[root@master ~]# kubectl apply -f timezone.yaml
configmap/timezone created[root@master ~]# kubectl get configmaps 
NAME               DATA   AGE
kube-root-ca.crt   1      9d
timezone           1      15s
tz                 1      50s
  • 修改系统时区 02
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatapersistentVolumeClaim:claimName: pvc1- name: websitepersistentVolumeClaim:claimName: pvc2containers:- name: nginximage: myos:nginxenvFrom:              # 配置环境变量- configMapRef:       # 调用资源对象name: timezone    # 资源对象名称volumeMounts:- name: logdatamountPath: /usr/local/nginx/logs- name: websitemountPath: /usr/local/nginx/html[root@master ~]# kubectl delete pods web1
pod "web1" deleted
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl exec -it web1 -- date +%T
10:41:27
<4>  nginx解析php

在 Pod 中增加 php 容器,与 nginx 共享同一块网卡

  • 添加容器
# 在 Pod 中增加 php 容器,与 nginx 共享同一块网卡
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatapersistentVolumeClaim:claimName: pvc1- name: websitepersistentVolumeClaim:claimName: pvc2containers:- name: nginximage: myos:nginxenvFrom:- configMapRef:name: timezonevolumeMounts:- name: logdatamountPath: /usr/local/nginx/logs- name: websitemountPath: /usr/local/nginx/html- name: php                            # 以下为新增加内容image: myos:php-fpmenvFrom:                             # 不同容器需要单独配置时区- configMapRef:name: timezonevolumeMounts:- name: website                      # 不同容器需要单独挂载NFSmountPath: /usr/local/nginx/html[root@master ~]# kubectl delete pod web1
pod "web1" deleted
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
web1   2/2     Running   0          5s
[root@master ~]# kubectl exec -it web1 -c nginx -- ss -ltun
Netid       State        Recv-Q       Send-Q             Local Address:Port       ... ...
tcp         LISTEN       0            128                      0.0.0.0:80         ... ...
tcp         LISTEN       0            128                    127.0.0.1:9000       ... ...
  • 制作配置文件
# 使用 nginx 配置文件创建 configMap
[root@master ~]# kubectl cp -c nginx web1:/usr/local/nginx/conf/nginx.conf nginx.conf
[root@master ~]# vim nginx.conflocation ~ \.php$ {root            html;fastcgi_pass    127.0.0.1:9000;fastcgi_index   index.php;include         fastcgi.conf;}# 使用命令创建 configMap
[root@master ~]# kubectl create configmap nginx-php --from-file=nginx.conf 
configmap/nginx-php created
  • 映射配置文件
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatapersistentVolumeClaim:claimName: pvc1- name: websitepersistentVolumeClaim:claimName: pvc2- name: nginx-php     # 卷名称configMap:          # 引用资源对象name: nginx-php   # 资源对象名称containers:- name: nginximage: myos:nginxenvFrom:- configMapRef:name: timezonevolumeMounts:- name: nginx-php                              # 卷名称subPath: nginx.conf                          # 键值(文件名称)mountPath: /usr/local/nginx/conf/nginx.conf  # 路径- name: logdatamountPath: /usr/local/nginx/logs- name: websitemountPath: /usr/local/nginx/html- name: phpimage: myos:php-fpmenvFrom:- configMapRef:name: timezonevolumeMounts:- name: websitemountPath: /usr/local/nginx/html
  • php解析验证
# 拷贝测试页面 s4/public/info.php
[root@ecs-proxy s4]# rsync -av public/info.php  192.168.1.10:/var/webroot/info.php
#---------------------------------------------------------------------------------#
[root@master ~]# kubectl delete pod web1 
pod "web1" deleted
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP             NODE
web1   2/2     Running   0          18s   10.244.3.17    node-0003
  • 页面解析测试
[root@master ~]# curl http://10.244.3.17/info.php
<pre>
Array
([REMOTE_ADDR] => 10.244.0.0[REQUEST_METHOD] => GET[HTTP_USER_AGENT] => curl/7.29.0[REQUEST_URI] => /info.php
)
php_host:   web1
1229

2  secret卷

<1>  概述

Secret 是一种临时卷

Secret 类似于 ConfigMap 但专门用于保存机密数据

在设置 Secret.data 字段时,所有键值都必须是经过base64编码的字符串

<2>  用途

配置一些需要加密的环境变量或文件(例如:https 证书)

访问需要认证登录的私有镜像仓库(例如: harbor 私有仓库)

<3>  语法格式

kubect creat secret 子类型 名称 [选项/参数]

<4>  子类型

  • 通用类型

kubect creat secret generic 名称 [选项/参数]

  • 用于认证登录私有仓库的子类型

kubect creat secret docker-registry 名称 [选项/参数]

  • 用于创建TLS证书的子类型

kubectl create secret tls 名称 [选项/参数]

<5> 登录私有仓库
  • 仓库 harbor:443/myimg/httpd:latest需要认证
  • 使用私有仓库中的镜像创建容器
# 创建需要登录私有仓库的资源对象
[root@master ~]# kubectl create secret docker-registry harbor-auth --docker-server=harbor:443 --docker-username="用户名" --docker-password="密码"
secret/harbor-auth created[root@master ~]# kubectl get secrets harbor-auth -o yaml
apiVersion: v1
data:.dockerconfigjson: <经过加密的数据>
kind: Secret
metadata:name: harbor-authnamespace: defaultresourceVersion: "1558265"uid: 08f55ee7-2753-41fa-8aec-98a292115fa6
type: kubernetes.io/dockerconfigjson
<6>  登录认证私有仓库
[root@master ~]# vim web2.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: web2
spec:imagePullSecrets:                           # 引用 secret 数据- name: harbor-auth                         # 资源对象名称containers:- name: apacheimage: harbor:443/myimg/httpd:latest      # 使用私有仓库里的镜像[root@master ~]# kubectl apply -f web2.yaml
pod/web2 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
web1   2/2     Running   0          33m
web2   1/1     Running   0          18m

3  emptyDir卷

<1>  概述

emptyDir 的本质是一个简单的空目录

emptyDir 可以提供临时空间,同一个 Pod 中容器也可以用来共享数据。案例:缓存服务器、数据统计分析、排序等

emptyDir 随 Pod 创建而创建,Pod 在该节点上运行期间一直存在。当 Pod 被从节点上删除时,临时卷中的数据也会被永久删除

重启 Pod中的容器不会造成 emptyDir 数据的丢失

<2>  临时空间

[root@master ~]# vim web2.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web2
spec:imagePullSecrets:- name: harbor-authvolumes:               # 卷配置- name: cache          # 卷名称emptyDir: {}         # 资源类型containers:- name: apacheimage: harbor:443/myimg/httpd:latestvolumeMounts:            # 挂载卷- name: cache            # 卷名称mountPath: /var/cache  # 路径

<3>  验证配置

创建容器,验证配置

[root@master ~]# kubectl delete pod web2 
pod "web2" deleted
[root@master ~]# kubectl apply -f web2.yaml 
pod/web2 created
[root@master ~]# kubectl exec -it web2 -- bash
[root@web2 html]# mount -l |grep cache
/dev/vda1 on /var/cache type xfs (rw,relatime,attr2)

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

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

相关文章

OSPF路由协议

OSPF基本信息 OSPF&#xff08;Open Shortest Path First&#xff09;开放式最短路径优先协议是用于网际协议&#xff08;IP&#xff09;网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;在单一自治系统&#xff08…

elasticsearch的DSL查询文档

DSL查询分类 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如&#xff1a;match_all 全文检索&#xff08;full text&#xff09;查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引库中匹配。例如&#xff1a; match_query multi_ma…

在学习DNS的过程中给我的启发

在国内&#xff0c;关于DNS相关的话题一直络绎不绝&#xff0c;比如DNS根服务器为什么中国没有&#xff0c;还有Anycast BGP实现负载&#xff0c;为什么DNS只有13个&#xff0c;还有DNS over HTTPS 和 DNS over TLS的优劣等等问题&#xff0c;接下来我会找出几个一一说一下其中…

Net跨平台UI框架Avalonia入门-安装和使用(v11版本)

介绍Avalonia v11版本 avalonia v11版本发布了&#xff0c;增加了很多新的功能&#xff0c;Avalonia的扩展也同步升级了。 主要更新内容&#xff1a; 辅助功能&#xff1a;增加了对各种辅助工具的支持&#xff0c;提高了Avalonia应用程序的可用性。输入法编辑器&#xff08;I…

python实现某音自动登录+获取视频数据

前言 Dy这个东西想必大家都用过&#xff0c;而且还经常刷&#xff0c;今天就来用代码&#xff0c;获取它的视频数据 环境使用 Python 3.8 Pycharm 模块使用 requests selenium json re 一. 数据来源分析 1. 明确需求 明确采集网站以及数据内容 网址: https://www.dy.com/…

【电源专题】典型设备的接地设计

在文章:【电源专题】接地的类型 中我们讲到不同的历史时期接地概念是不同的,有为了安全的电气接地和物理接地,也有为了提供参考电位的接地。 那么在设备接地的设计中,我们会怎么进行操作呢? 在文章【电源专题】接地的类型讲到一个混合接地的例子,我们可以把大功率的地接…

13分钟聊聊并发包中常用同步组件并手写一个自定义同步组件

本篇文章通过AQS自己来实现一个同步组件&#xff0c;并从源码级别聊聊JUC并发包中的常用同步组件 本篇文章需要的前置知识就是AQS&#xff0c;阅读本篇文章大概需要13分钟 自定义同步组件 为了更容易理解其他同步组件&#xff0c;我们先来使用AQS自己来实现一个常用的可重入…

Origin绘制彩色光谱图

成果图 1、双击线条打开如下窗口 2、选择“图案”-》颜色-》按点-》映射-》Wavelength 3、选择颜色映射 4、单击填充-》选择加载调色板-》Rainbow-》确定 5、单击级别&#xff0c;设置成从370到780&#xff0c;右侧增量选择2&#xff08;越小&#xff0c;颜色渐变越细腻&am…

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测…

Kotlin委托Delegate托管by

Kotlin委托Delegate托管by import kotlin.reflect.KPropertyfun main() {var user: String by MyDelegate()user "fly"println(user) }class MyDelegate {private var v: String? nulloperator fun getValue(thisRef: Any?, property: KProperty<*>): Stri…

【Spring面试】一、SpringBoot启动优化与Spring IoC

文章目录 Q1、SpringBoot可以同时处理多少请求Q2、SpringBoot如何优化启动速度Q3、谈谈对Spring的理解Q4、Spring的优缺点Q5、Spring IoC容器是什么&#xff1f;作用与优点&#xff1f;Q6、Spring IoC的实现机制是什么Q7、IoC和DI的区别是什么Q8、紧耦合与松耦合的区别&#xf…

如何让自己的精力集中 Maven自学笔记 马云演讲观看

目录 如何让自己的精力集中 Avoid having multiple tasks and objects in your line of sight 人的脑袋是给自己思考用的 晚上床上想千条路&#xff0c;早上起床还是走原路 参与才会变得更好 共度灾难&#xff0c;是需要互相鼓励的 CFO Capital 上海各区都有哪些大学?…

LabVIEW对EAST长脉冲等离子体运行的陀螺稳态运行控制

LabVIEW对EAST长脉冲等离子体运行的陀螺稳态运行控制 托卡马克是实现磁约束核聚变最有希望的解决方案之一。电子回旋共振加热&#xff08;ECRH是一种对托卡马克有吸引力的等离子体加热方法&#xff0c;具有耦合效率高&#xff0c;功率沉积定位好等优点。陀螺加速器是ECRH系统中…

Kafka3.0.0版本——消费者(消费者组案例)

目录 一、消费者组案例1.1、案例需求1.2、案例代码1.2.1、消费者1代码1.2.2、消费者2代码1.2.3、消费者3代码1.2.4、生产者代码 1.3、测试 一、消费者组案例 1.1、案例需求 测试同一个主题的分区数据&#xff0c;只能由一个消费者组中的一个消费。如下图所示&#xff1a; 1…

设计模式(1) - UML类图

1、前言 最近在阅读 Android 源码&#xff0c;时常碰到代码中有一些巧妙的写法&#xff0c;简单的如 MediaPlayerService 中的 IFactory&#xff0c;我知道它是工厂模式&#xff0c;但是却不十分清楚它为什么这么用&#xff1b;复杂点的像 NuPlayer 中的 DeferredActions 机制…

vulhub-tomcat弱口令

1.启动靶场 进入文件 进入目录 进入到靶场 启动靶场 docker-compose up -d 2.查看 ip地址 3.使用nmap对ip进行 扫描 发现存在8080的端口&#xff0c;并且端口是开放的状态&#xff0c;apache&#xff0c;tomcat搭建的 4.访问ip地址的端口 点击Manager app 6.开启BP进行抓包 随…

vue-cli3项目本地启用https,并用mkcert生成证书

在项目根目录下的vue.config.js文件中&#xff1a; // vue.config.js module.exports {devServer: {host:dev.nm.cngc// 此处开启 https,并加载本地证书&#xff08;否则浏览器左上角会提示不安全&#xff09;https: {cert: fs.readFileSync(path.join(_dirname,./cert.crt)…

UI自动化之混合框架

什么是混合框架&#xff0c;混合框架就是将数据驱动与关键字驱动结合在一起&#xff0c;主要用来回归业务主流程&#xff0c;将核心流程串联起来。 上一篇我们写到了关键字驱动框架&#xff0c;关键字驱动框架是针对一个业务场景的单条测试用例的。 我们以163邮箱的登录到创建…

云计算中的负载均衡技术,确保资源的平衡分配

文章目录 1. 硬件负载均衡器2. 软件负载均衡器3. DNS负载均衡4. 内容分发网络&#xff08;CDN&#xff09; &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;云计算 ✨文章内…

【负载均衡】常见的负载均衡策略有哪些?

文章目录 前言负载均衡分类常见负载均衡策略小结 前言 负载均衡策略是实现负载均衡器的关键&#xff0c;而负载均衡器又是分布式系统中不可或缺的重要组件。使用它有助于提高系统的整体性能、可用性、可靠性和安全性&#xff0c;同时支持系统的扩展和故障容忍性。对于处理大量…