【云原生】深入理解Pod的使用进行管理

深入理解Pod

文章目录

  • 深入理解Pod
    • 一、介绍Pod
      • 1.1、什么是Pod
      • 1.2、Pod的特点
      • 1.3、Pod的用途
      • 1.4、Pod网络
      • 1.5、Pod存储
      • 1.6、Pod的工作方式
    • 二、创建Pod
      • 2.1、命令行创建Pod
      • 2.2、资源清单创建Pod
        • 2.2.1、镜像拉取策略
        • 2.2.2、Pod重启策略
        • 2.2.3、部署资源
        • 2.2.4、删除资源
    • 三、静态Pod
      • 3.1、静态Pod的介绍
      • 3.2、创建镜像Pod
    • 四、Pod Hook
      • 4.1、Pod Hook介绍
      • 4.2、Pod Hook的时候
    • 五、Pod健康检查
      • 5.1、livenessProbe:存活性探测
      • 5.2、readinessProbe:就绪性探测
      • 5.3、两种探针的区别
    • 六、初始化容器

一、介绍Pod

1.1、什么是Pod

  • Pod是kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个Pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
    在这里插入图片描述

  • Pod是需要调度到k8s集群的工作节点来运行的,具体调度到哪个节点,是根据scheduler调度器实现的。
    在这里插入图片描述

  • Pod中可以同时运行多个容器。同一个Pod中的容器会自动的分配到同一个node上。同一个Pod中的容器共享资源、网络环境,它们总是被同时调度,在一个Pod中同时运行多个容器是一种比较高级的用法,只有当你的容器需要紧密配合协作的时候才考虑用这种模式。

1.2、Pod的特点

  • 容器共享网络命名空间:Pod中的容器共享相同的IP地址和端口范围,可以通过localhost相互通信。
  • 存储卷共享:Pod中的容器可以访问相同的存储卷,方便数据共享和通信。
  • 逻辑单元:Pod提供了一个逻辑独立、机密耦合的单元,容器在同一个Pod中可以方便进行通信和数据共享
  • 生命周期:Pod有自己的生命周期,当Pod中的所有容器都终止时,Pod才会终止

1.3、Pod的用途

  • 应用组合:将相互关联的应用容器组合到一个Pod中,以便它们可以直接通信。

  • 共享存储:多个容器可以访问相同的存储卷,实现数据共享

  • 单元部署:Pod作为一个单元进行部署,确保相关容器共同运行和调度。

  • 微服务:将微服务架构中的一组相关服务打包在一个Pod中,以简化部署和管理

1.4、Pod网络

  • Pod是有IP地址的,每个Pod都被分配唯一的IP地址(IP地址是靠网络插件calico、flannel、weave等分配的),Pod中的容器共享网络命名空间,包括IP地址和网络端口。Pod内部的容器可以使用localhost相互通信。Pod中的容器也可以通过网络插件calico与其他节点的Pod通信。

1.5、Pod存储

  • 创建Pod的时候可以指定挂载的存储卷。Pod中的所有容器都可以访问共享卷,允许这些容器共享数据。Pod只要挂载持久化数据卷,Pod重启之后数据还是会存在的。

1.6、Pod的工作方式

  • Pod的工作方式分为两种,一种是自主式Pod,一种是控制器管理的Pod,所谓的自主式Pod就是直接定义一个Pod资源,这种Pod一旦异常就推出了,使用控制器管理的Pod可以确保Pod始终维持在指定的副本数量。常见的管理Pod的控制器有:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset

二、创建Pod

2.1、命令行创建Pod

# 使用nginx镜像,创建一个叫nginx-test的Pod,使用--port指定容器内部应用程序监听的端口为80
[root@k8s-master ~]# kubectl run nginx-test --image=nginx --port=80
pod/nginx-test created


# 查看默认命名空间defalut中的所有Pod
[root@k8s-master ~]# kubectl get pod
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          42s


# 使用-o wide可以可以查看到Pod更详细的信息,比如IP地址,Pod被分配所在的节点
[root@k8s-master ~]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE    IP              NODE         NOMINATED NODE   READINESS GATES
nginx-test   1/1     Running   0          107s   10.244.58.195   k8s-node02   <none>           <none>


# 使用--show-labels选项可以看到pod的标签
# LABELS字段为标签
# pod就是通过标签与service进行关联的
[root@k8s-master ~]# kubectl get pod --show-labels
NAME         READY   STATUS    RESTARTS   AGE     LABELS
nginx-test   1/1     Running   0          2m55s   run=nginx-test


# 使用-l选项后面跟标签,可以查询带有指定标签的pod
[root@k8s-master ~]# kubectl get pod -l run=nginx-test
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          5m15s


# 删除标签



# 查看Pod日志
# 不指定命令空间默认在default下查看pod日志
[root@k8s-master ~]# kubectl logs nginx-test


# 进入Pod容器(如果一个pod中有多个容器,默认会进入第一个容器内,除非指定容器)
[root@k8s-master ~]# kubectl exec -it nginx-test -- bash


# 删除一个叫nginx-test的pod
[root@k8s-master ~]# kubectl delete pod nginx-test
pod "nginx-test" deleted


# 使用-n选项可以查询指定命名空间的Pod
# 查看kube-system命名空间中的所有Pod
[root@k8s-master ~]# kubectl get pod -n kube-system


# 使用--all-namespaces可以查询所有命名空间的Pod
# --all-namespaces也可以简写为-A
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-858fbfbc9-l8tpp   1/1     Running   1          4d7h
kube-system   calico-node-k6qbl                         1/1     Running   1          4d7h
kube-system   calico-node-q969p                         1/1     Running   1          4d7h
kube-system   calico-node-sv48g                         1/1     Running   1          4d7h
kube-system   coredns-7ff77c879f-lnl72                  1/1     Running   1          4d7h
kube-system   coredns-7ff77c879f-nfx7g                  1/1     Running   1          4d7h
kube-system   etcd-k8s-master                           1/1     Running   1          4d7h
kube-system   kube-apiserver-k8s-master                 1/1     Running   1          4d7h
kube-system   kube-controller-manager-k8s-master        1/1     Running   1          4d7h
kube-system   kube-proxy-2c282                          1/1     Running   1          4d7h
kube-system   kube-proxy-6n6pn                          1/1     Running   1          4d7h
kube-system   kube-proxy-zhm2m                          1/1     Running   1          4d7h
kube-system   kube-scheduler-k8s-master                 1/1     Running   1          4d7h

2.2、资源清单创建Pod

  • 在kubernetes中大多数都是使用资源清单来进行创建,通常情况下是yaml格式的。以下是一个创建Pod的yaml示例
[root@k8s-master ~]# cat nginx_pod.yaml 
# 定义Kubernetes API版本
apiVersion: v1

# 指定Kubernetes资源类型(本次为pod)
kind: Pod

# Pod的元数据,包括名称、命名空间和标签
metadata:
  name: nginx      # Pod的名字为nginx
  namespace: default   # 在default命名空间中创建这个Pod
  labels: 
    app: nginx   # 标签应用为nginx的标签

# Pod的规格,包括容器及配置
spec:
  restartPolicy: Never   # 设置重启策略
  # Pod中的容器列表
  containers:
  - name: nginx   # 容器名称
    ports: 
    - containerPort: 80  # 从容器中暴露的端口
    image: nginx:latest   # 用于容器的Docker镜像
    imagePullPolicy: IfNotPresent   # 容器镜像拉取策略
2.2.1、镜像拉取策略

Kubernetes中的容器镜像拉取策略(imagePullPolicy)有以下三种:

  • Always(总是)

表示Kubernetes将始终尝试从指定的镜像仓库拉取容器镜像。即使节点上已经存在相同版本的镜像,也会尝试拉取最新的版本。

  • IfNotPresent(如果不存在则拉取)

这是默认的策略,它表示如果节点上不存在指定的容器镜像版本,那么就拉取该镜像。如果本地已经存在,则不再拉取。

  • Never(从不拉取)

表示Kubernetes不会尝试拉取指定的容器镜像。他要求节点上必须存在所需版本的镜像,否则启动容器会失败

如果省略imagePullPolicy字段,镜像的名称没有带标签,或是标签是:latest则策略为Always,否则为IfNotPresent。

2.2.2、Pod重启策略
  • Pod重启策略有以下3种,Pod的重启策略定义了在容器退出时Kubernetes应该采取的操作。这对于确保应用程序的高可用性非常重要,使用restartPolicy字段进行配置

Always:在任何情况下,只要容器不在运行状态,就自动重启容器(默认策略)

OnFailure:只在容器异常才自动重启容器

Never:从来不重启容器

2.2.3、部署资源
[root@k8s-master ~]# kubectl apply -f nginx_pod.yaml 
pod/nginx created
[root@k8s-master ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          5s
2.2.4、删除资源
[root@k8s-master ~]# kubectl delete pod nginx
pod "nginx" deleted
[root@k8s-master ~]# kubectl get pod
No resources found in default namespace.

三、静态Pod

3.1、静态Pod的介绍

  • 在Kubernetes集群中除了我们经常使用到的普通的Pod外,还有一种特殊的Pod,叫做Static Pod,就是我们说的静态Pod,静态Pod有什么特殊的地方呢?

  • 静态Pod直接由特定节点上的kubelet进程来管理,不通过master节点上的apiserver。无法与我们常用的控制器 Deployment或者DaemonSet进行关联,它由kubelet进程自己来监控,当Pod崩溃时重启该Pod,kubelet也无法对它们进行健康检查。静态Pod始终绑定在某一个kubelet,并且始终运行在同一个节点上。kubelet会自动为每个静态Pod在kubernetes的apiserver上创建一个镜像Pod,因此我们可以在apiserver中查询到该Pod,但是不能通过apiserver进行控制(例如不能删除)。

  • 创建静态Pod有两种方式:配置文件和HTTP两种方式,在这里我们主要讲解配置文件创建的方式。

3.2、创建镜像Pod

  • 配置文件就是放在特定目录下的标准的JSON或YAML格式的Pod定义文件。用于kube --pod-manifest-path=来启动kubelet进程,kubelet定期的去扫描这个目录,根据这个目录下出现或消失的YAML/JSON文件来创建或者删除静态Pod。
# 写在/etc/kubernetes/manifests/即可
[root@k8s-master ~]# cat > /etc/kubernetes/manifests/static-nginx.yaml << EOF
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx01
  namespace: default
  labels: 
    app: nginx
spec:
  containers:
  - name: nginx
    ports: 
    - containerPort: 80
    image: nginx:latest
  imagePullPolicy: IfNotPresent
EOF

[root@k8s-master ~]# kubectl get pod
NAME                 READY   STATUS    RESTARTS   AGE
nginx01-k8s-master   1/1     Running   0          53s


# 删除pod后pod依然存在
[root@k8s-master ~]# kubectl delete pod nginx01-k8s-master
pod "nginx01-k8s-master" deleted
[root@k8s-master ~]# kubectl get pod
NAME                 READY   STATUS    RESTARTS   AGE
nginx01-k8s-master   1/1     Running   0          27s


# 只有删除yaml资源文件才能删除
[root@k8s-master ~]# rm -rf /etc/kubernetes/manifests/static-nginx.yaml 
[root@k8s-master ~]# kubectl get pod
No resources found in default namespace.

四、Pod Hook

4.1、Pod Hook介绍

​ 我们都知道Pod是Kubernetes群集中的最小单元,而Pod是有容器组成的,所以在谈论Pod的生命周期的时候我们可以先来讨论下容器的生命周期。

实际上Kubernetes为我们的容器提供了生命周期钩子,就是我们说的Pod Hook,Pod Hook是由kubelet发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中。我们可以同时为Pod中的所有容器都配置Hook。

Kubernetes为我们提供了两种钩子函数:

  • PostStart:这个钩子在容器创建后立即执行。但是,并不能保证钩子将在容器ENTRYPOIN之前运行,因为没有参数传递给处理程序。主要用于资源部署、环境准备等。不过需要注意的是如果钩子花费太长时间以至于不能运行或者挂起,容器将不能达到running状态。
  • PreStop:这个钩子在容器终止之前立即被调用。它是阻塞的,意味着它是同步的,所以它必须在删除容器的调用发出之前完成。主要用于优化关闭应用程序、通知其他系统等。如果钩子在执行期间挂起,Pod阶段将停留在running状态且永不会达到failed状态

​ 如果PostStart或者PreStop钩子失败,它会杀死容器。所以我们应该让钩子函数尽可能的轻量。当然有些情况下,长时间运行命令是合理的,比如在停止容器之前预先保存状态。

​ 另外我们有两种方式来实现上面的钩子函数:

Exec:用于执行一段特定的命令,不过要注意的是该命令消耗的资源会被计入容器

HTTP:对容器上的特定的端点执行HTTP请求

4.2、Pod Hook的时候

  • 以下是一个示例
[root@k8s-master ~]# cat nginx_hook.yaml 
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx02
  labels:
    app: nginx
spec:
  restartPolicy: Always
  containers:
  - name: test-nginx01
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    lifecycle:
      postStart: 
        exec: 
          # 启动容器立即执行的命令
          command: ["sh","-c","echo 'postart' >> /start.txt"]
      preStop:
        exec:
          # 关闭容器立即执行的命令
          command: ["sh","-c","echo 'prestop' >> /stop.html; sleep 100"]

[root@k8s-master ~]# kubectl apply -f nginx_hook.yaml 
pod/nginx02 created
[root@k8s-master ~]# kubectl get pod nginx02
NAME      READY   STATUS    RESTARTS   AGE
nginx02   1/1     Running   0          27s
# 进入容器可以发现我们定义的postStart被执行了
[root@k8s-master ~]# kubectl exec -it nginx02 -- bash
root@nginx02:/# cat /start.txt 
postart
# 删除Pod,然后迅速的去打开一个终端进行验证,容器被关闭的时候是否执行了相应的命令
[root@k8s-master ~]# kubectl delete pod nginx02
pod "nginx02" deleted


# 在打开一个终端,发现删除pod的时候定义的preStop被执行了
[root@k8s-master ~]# kubectl exec -it nginx02 -- bash
root@nginx02:/# cat /stop.html 
prestop

五、Pod健康检查

在kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期。

目前LivenessProbe和ReadinessProbe两种探针都支持下面三种探测方式:

  • ExecAction:在容器中执行指定的命令,如果执行成功,退出代码为0则探测成功
  • TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,如果能够简历TCP连接,则表明容器健康。
  • HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP Get方法,如果相应的状态码大于等于200且小于400,则认为容器健康

探针探测结果有以下值:

  • Success:表示通过检测
  • Failure:表示未通过检测
  • Unknown:表示检测没有正常运行

Pod探针相关的属性:探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为

  • initialDelaySeconds:Pod启动后首次进行检查的等待时间,单位“秒”
  • periodSeconds:检查的间隔时间,默认为10s,单位“秒”
  • timeoutSeconds:探针执行检测请求后,等待相应的超时时间,默认为1s,单位“秒”
  • successThreshold:连续失败的重试次数,重试一定次数后将认为失败,在热爱的iness探针中,Pod会被标记为未就绪,默认为3,最小值为1

5.1、livenessProbe:存活性探测

  • 许多应用程序经过长时间运行,最终过渡到无法运行的状态,除了重启,无法恢复。通常情况下,K8S会发现应用程序已经终止,然后重启应用程序Pod。有时应用程序可能因为某些原因(后端服务故障等)导致暂时无法对外提供服务,但应用软件没有终止,导致K8S无法隔离有故障的Pod,调用者可能会访问到有故障的Pod,导致业务不稳定。K8S提供livenessProbe来检测容器是否正常运行,并且对相应情况进行相应的补救措施。
# 该资源清单定义了livenessProbe,启动后10秒在进行检查,每3秒检测一次
# 检测失败就会重启Pod
[root@master ~]# cat nginx_livenessProbe.yaml 
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  restartPolicy: Always
  containers:
  - name: test-nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    # 容器内指定的命令
    args:
    - /bin/sh
    - -c
    # 创建一个文件等待30秒后删除,然后等待600秒(十分钟)
    - touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy;sleep 600
    # 存活性探测
    livenessProbe:
    # 启动容器后等待10秒
      initialDelaySeconds: 10
    # 每3秒进行一次探测
      periodSeconds: 3
     # 执行的命令
      exec: 
        command: 
        - cat
        - /tmp/healthy


# 部署资源
[root@master ~]# kubectl apply -f nginx_livenessProbe.yaml 
pod/nginx created


# 检测失败就会重启Pod,可以查看RESTARTl了解重启次数
[root@master ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS      AGE
nginx   1/1     Running   5 (28s ago)   6m37s

5.2、readinessProbe:就绪性探测

  • 在没有配置readinessProbe的资源对象中,pod中的容器启动完成后,就认为pod中的应用程序可以对外提供服务,该pod就会加入相应的service,对外提供服务。但有时一些应用程序启动后,需要较长时间的加载才能对外服务,如果这时对外提供服务,执行结果必然无法达到预期的效果,影响用户体验。比如使用tomcat应用程序来说,并不是简单地说tomcat启动成功就可以对外提供服务的,还需要等待spring容器初始化,数据库连接上等等
# 该资源定义了readinessProbe,启动后20秒在进行检查
# 每隔5秒检测一次80端口的/index.heml页面,设置10秒超时,检测失败,该pod就不能提供服务
[root@master ~]# cat nginx_readinessProbe.yaml 
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx01
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    # 指定80端口命令
    - name: server
      containerPort: 80
    # 指定81端口名称
    - name: management
      containerPort: 81
    # 可读性探针探测
    readinessProbe:
    # 启动后等待20秒
      initialDelaySeconds: 20 
    # 每间隔5秒进行一次探测
      periodSeconds: 5
    # 执行探测请求后,等待响应的超时时间
      timeoutSeconds: 10
    # 向80端口发送HTTP访问请求
      httpGet:
        scheme: HTTP
        port: 80
        path: /index.html


# 部署资源
[root@master ~]# kubectl apply -f nginx_readinessProbe.yaml 
pod/nginx01 created


# 把pod的index.heml页面删除发现pod的就绪状态就变了
# 就绪的字段为“READY”如果为0表示未就绪
[root@master ~]# kubectl exec -it nginx01 -- rm -rf /usr/share/nginx/html/index.heml
[root@master ~]# kubectl get pod nginx01
NAME      READY   STATUS    RESTARTS   AGE
nginx01   0/1     Running   0          5m1s

5.3、两种探针的区别

ReadinessProbe和livenessProbe可以使用相同的探测方式,只是对Pod的处置方式不同:

  • readinessProbe:当检测失败后,将pod的IP:Port从对应的EngPoint列表中删除。
  • livenessProbe:当检测失败后,将杀死容器并根据Pod的重启策略决定做出对应的措施

六、初始化容器

  • Pod里面可以有一个或者多个容器,部署应用的容器可以称为主容器,在创建Pod时候,Pod中可以有一个或多个先于主容器启动init容器,这个init容器就可以成为初始化容器,初始化容器一旦执行完,它从启动开始到初始代码执行完就退出了,它不会一直存在,所以在主容器启动之前执行初始化,初始化容器可以有多个,多个初始化是要串行执行的,先执行初始化容器1,再执行初始化容器2等,等初始化容器执行完初始化就推出了,然后再执行主容器,主容器一退出,pod就结束了,主容器退出的时间就是pod的结束点,他俩时间轴是一致的。
  • init容器就是做初始化工作的容器。可以有一个或多个,如果多个按照定义的顺序依次执行,只有所有的初始化容器执行完后,主容器才能启动。由于一个Pod里的存储卷是共享的,所以init Container里产生的数据可以被主容器使用到,init Container可以在多种K8S资源里被使用到,如Deployment、DaemonSet、StatefulSet、Job等,但都是在Pod启动时,在主容器启动前指定,做初始化工作。

init容器与普通的容器区别是:

  • init容器不支持Readiness,因为它们必须在pod就绪之前运行完成。
  • 每个init容器必须运行成功,下一个才能运行。
  • 如果Pod的init容器失败,Kubernetes会不断地重启该Pod,直到init容器成功为止,然而,如果Pod对应的restartPolicy值为Never,它不会重启启动。
[root@master ~]# cat nginx_init.yaml 
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx02
  labels:
    app: nginx
spec:
  containers:
  - name: test-nginx
    ports:
    - containerPort: 80
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: webdata
      mountPath: /usr/share/nginx/html
  initContainers:
  - name: init-heml
    image: busybox:1.28
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: webdata
      mountPath: /opt
    command: ["sh","-c","echo 'init' > /opt/index.html"]
  volumes:
  - name: webdata
    emptyDir: {}


# 部署资源
[root@master ~]# kubectl apply -f nginx_init.yaml 
pod/nginx02 created
 
 
# 启动的时候先启动初始化启动
[root@master ~]# kubectl get pod
nginx02   0/1     Init:0/1           0                5s
[root@master ~]# kubectl get pod
nginx02   1/1     Running   0                65s


# 查看容器里面index.html文件的内容就是初始化容器写的
[root@master ~]# kubectl exec -it nginx02 -c test-nginx -- cat /usr/share/nginx/html/index.html
init

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

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

相关文章

自养号测评助力:亚马逊、沃尔玛电商高效测评补单技巧,轻松实现销量与补单双赢

要在竞争激烈的市场中通过测评补单的方式提升产品权重和销售&#xff0c;构建一个稳定且高效的测评补单系统至关重要。通过精心培养一批高质量的买家账号&#xff0c;并深入了解真实买家的行为数据&#xff0c;结合对风控数据的精准把控&#xff0c;我们能够自主推动推广进程&a…

25岁庆生|人大金仓带你这样过!

25年&#xff0c;是一个重要的时间节点 一个世纪的四分之一 百年基业的第一站&#xff0c;我们已经走过 人大金仓即将25岁了&#xff0c;感谢有你 趣味运动会 今日上午 二十五周年司庆终极活动正式开启 北京、成都、天津、青岛、西安 五地同步举行趣味运动会 活力四射的集体健走…

datax入门(data-web的简单使用)——02

datax入门&#xff08;data-web的简单使用&#xff09;——02 1. 前言1.1 关于data-web官网1.1.1 源码下载1.1.2 datax-Web部署手册1.1.2.1 Linux环境部署手册1.1.2.2 本地开发环境部署手册 1.2 关于datax入门 2. 下载之后打包、启动、登录2.1 我的本地环境2.2 修改配置2.3 初始…

记一次小程序渗透

这次的小程序渗透刚好每一个漏洞都相当经典所以记录一下。 目录 前言 漏洞详情 未授权访问漏洞/ 敏感信息泄露&#xff08;高危&#xff09; 水平越权&#xff08;高危&#xff09; 会话重用&#xff08;高危&#xff09; 硬编码加密密钥泄露&#xff08;中危&#xff0…

【Python报错】已解决 ModuleNotFoundError: No module named ‘transformers‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 ModuleNotFoundError: No module named ‘transformers’ 是一个常见的错误&#xff0c;它表明你的Python环境中没有安装t…

普及GIS知识,推动产业发展

915 GIS节&#xff1a;普及GIS知识&#xff0c;推动产业发展 自2008年起&#xff0c;每年的9月15日被定为“GIS节”&#xff0c;这一特殊的节日由超图首次发起倡议&#xff0c;旨在打造一个普及和传播GIS&#xff08;地理信息系统&#xff09;知识的平台&#xff0c;促进大众对…

一次可输入多张图像,还能多轮对话!最新开源数据集,让AI聊天更接近现实

大模型对话能更接近现实了&#xff01; 不仅可以最多输入20张图像&#xff0c;还能支持多达27轮对话。可处理文本图像tokens最多18k。 这就是最新开源的超长多图多轮对话理解数据集MMDU&#xff08;Multi-Turn Multi-Image Dialog Understanding&#xff09;。 大型视觉语言模…

Python数据分析案例47——笔记本电脑价格影响因素分析

案例背景 博主对电脑的价格和配置一直略有研究&#xff0c;正好最近也有笔记本电脑相关的数据&#xff0c;想着来做点分析吧&#xff0c;写成一个案例。基本上描述性统计&#xff0c;画图&#xff0c;分组聚合&#xff0c;机器学习&#xff0c;交叉验证&#xff0c;搜索超参数…

【Vision Transformers-VIT】: 计算机视觉中的Transformer探索

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

嵌入式Linux系统编程 — 4.5 strcmp、strchr 等函数实现字符串比较与查找

目录 1 字符串比较 1.1 strcmp() 函数 1.2 strncmp() 函数 1.3 示例程序 2 字符串查找 2.1 strchr() 函数 2.2 strrchr() 函数 2.3 strstr() 函数 2.4 strpbrk() 函数 2.5 示例程序 1 字符串比较 strcmp() 和 strncmp() 函数是C语言标准库中用于比较两个字符串的函…

STM32 HAL库 外部中断 实现按键控制LED亮灭

目录 1、为什么使用GPIO外部中断控制LED亮灭&#xff1f; 2、NVIC嵌套向量中断控制器 3、EXTI外部中断 4、项目的硬件排线 5、STM32CUBE_MX配置 6、HAL库代码 7、实际效果 1、为什么使用GPIO外部中断控制LED亮灭&#xff1f; 实现LED亮灭控制有很多方式&#xff0c;其中…

等保2.0安全计算环境解读

等保2.0&#xff0c;即网络安全等级保护2.0制度&#xff0c;是中国为了适应信息技术的快速发展和安全威胁的新变化而推出的网络安全保护标准。相较于等保1.0&#xff0c;等保2.0更加强调主动防御、动态防御和全面审计&#xff0c;旨在实现对各类信息系统的全面保护。 安全计算环…

自适应响应式瓷砖地板建材网站源码pbootcms模板

模板介绍 一款全面的自适应响应式瓷砖地板建材网站源码pbootcms模板。该模板兼容所有浏览器&#xff0c;整站源码下载&#xff0c;可以帮您节约建站成本&#xff0c;以高质量高效率完成网站的设计创建。 模板截图 源码下载 自适应响应式瓷砖地板建材网站源码pbootcms模板

IDEA错误:command line is too long 命令行过长

今天运行程序时遇到了一个错误&#xff0c;提示如下&#xff1a; 那么话不多说&#xff0c;如何解决呢&#xff1f; 首先点击右上角的编辑配置 点击修改选项 点击缩短命令行 选择JAR清单 好了&#xff0c;问题解决

数据分析-常用模型-RFM模型

一、RFM模型的底层逻辑 漏斗模型中&#xff0c;大部分业务都是按流程推进&#xff0c;可以做漏斗分析。但是&#xff0c;大家有没有想过一个问题&#xff1a; 如果没有转化过程记录&#xff0c;该怎么办&#xff1f;如果用户行为频率很高&#xff0c;有几十个漏斗&#xff0c…

AI与音乐的结合

前言 毫无疑问,AI的发展已经在音乐领域带来了诸多变化和影响.但人类创作仍然具有不可替代的重要性。人类的灵感、创造力以及对音乐的深刻理解和情感表达是音乐产业的核心动力来源。AI 更倾向于被视为一种辅助工具&#xff0c;与人类创作者相互协作和融合&#xff0c;共同推动音…

Python28-1 机器学习算法之决策树

决策树&#xff08;Decision Tree&#xff09; 决策树算法是一种常用的机器学习算法&#xff0c;属于监督学习范畴。它可以用于分类和回归任务&#xff0c;具有易于理解和解释的特点。决策树通过递归将数据分割成更小的子集&#xff0c;构建一个树形结构&#xff0c;其中每个节…

侯捷C++面向对象高级编程(上)-2-构造函数

1.inline函数 2.访问级别 3.构造函数 4.重载

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…

大模型知识库的使用

大模型知识库的使用通常涉及以下几个方面&#xff0c;使用大模型知识库可以提高信息检索的准确性和效率&#xff0c;促进知识的传播和应用。同时&#xff0c;也需要关注知识库的质量和更新&#xff0c;以确保提供的知识是准确和可靠的。北京木奇移动技术有限公司&#xff0c;专…