深入了解Pod(一)

news2024/9/24 3:28:42

一、pod的配置文件

Pod配置文件的属性说明

属性名称

取值类型

是否必须

取值说明

version

String


 

版本号 ,例如V1

kind

String


 

Pod

metadata

Object


 

元数据

metadata.name
 

String

Pod名称

metadata.namespace

String


 

所属命名空间,默认为default

metadata.labels[]


List


 


自定义标签列表

metadata.annotation[]

List

自定义注解列表

Spec

Object

Pod中容器的详细定义

spec.containers[]

List

Pod中的容器列表

spec.containers[].name

String

容器的名称

spec.containers[].image

String

容器的镜像名称

spec.containers[].imagePullPolicy

String

镜像拉取策略

Always:每次都拉取最新镜像

IfNotPresent:如果本地有该镜则使用本地镜像,如果没有则拉取镜像

Never:只使用本地镜像,当本地没有镜像时,Pod启动会报错

spec.containers[].command[]

List

容器的启动命令列表,如不指定则使用镜像打包时的命令

spec.containers[].args[]

List

容器启动时的命令 参数列表

spec.containers[].workingDir

String

容器的工作目录

spec.containers[].volumeMounts[]

List

挂载到容器内部的存储卷配置

spec.containers[].volumeMounts[].name

String

引用Pod共享存储卷的名称

spec.containers[].volumeMounts[].mountPath

String

存储卷在容器内挂载的绝对路径,应少于512个字符

spec.containers[].volumeMounts[].readOnly

Boolean

是否为读写模式,默认为读写模式

spec.containers[].ports[]

List

容器需要暴露的端口号列表

spec.containers[].ports[].name

String

端口名称

spec.containers[].ports[].containerPort

int

容器需要监听的端口号

spec.containers[].ports[].hostPort

int

容器所在主机需要监听的端口号,默认与containerPort相同

spec.containers[].ports[].protocol

String

端口协议,支持TCP、UDP默认为TCP

spec.containers[].env[]

List

容器运行前需设置的环境变量列表

spec.containers[].env[].name

String

环境变量的名称

spec.containers[].env[].value

String

环境变量的值

spec.containers[].resources

Object

资源限制和资源请求的配置

spec.containers[].resources.limits

Object

资源上限限制的配置

spec.containers[].resources.limits.cpu

String

CPU限制

spec.containers[].resources.limits.memory

String

内存限制,单位为MiB、GiB

spec.containers[].resources.request

Object

资源最小配置的限制

spec.containers[].resources.request.cpu

String

CPU限制容器启动所需的最小CPU核数

spec.containers[].resources.request.memory

String

容器启动所需的内存,单位为MiB、GiB

spec.restartPolicy

String

Pod重启策略

Always: Pod一旦终止运行,则无论容器是如何终止i,kubectl都会重启。

OnFailure:容器不是正常结束(退出码不为0)Kubectl会重启它。

Never:kubectl将退出码上报Master,不会再重启该Pod

spec.nodeSelector

Object

标签选择器,Pod根据标签调度

spec.imagePullSecrets

Objectt

镜像私有仓库的密码 以name:secretkey格式指定

注:这并不是Pod的所有属性,还有一些属性没有一一列举

apiVersion: v1
kind: Namespace
metadata:
  name: wssnail-test  #指定namespace名称
  
---
apiVersion: v1 #版本
kind: Pod #类型为pod
metadata: #元数据
  name: my-nginx-pod   #指定pod名称,不会随机生成
  namespace: 'wssnail-test'   #指定namespace名称
  labels: #定义标签
    version: 1.0.0 #标签的值。可以有多个值
    env: test
spec:
  containers: #pod中容器描述
    - name: my-nginx-contaniner #指定容器名称
      image: nginx:1.21.4 #指定镜像
      imagePullPolicy: IfNotPresent  #always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      workingDir: /usr/share/nginx/html  #容器启动后的工作目录
      ports:
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #网络协议 UDP、TCP
      resources: #所需资源
        limits: #最大分配资源
          memory: "200Mi"
          cpu: "700m"
        requests: #所需最少资源
          memory: "200Mi"
          cpu: "100m"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启

二、Pod探针

        Pod的探针技术目的是为了检测Pod的健康状态,有三类探针分别是StartupProbe、LivenessProbe和ReadinessProbe。

        StartupProbe探针(启动探针):启动探针的目的是为了检测容器启动的时候是否健康,能否启动起来。例如一个Springboot 项目启动时候需要依赖mysql,那么Mysql就必须先于Springboot启动,这时启动探针就可以通过指令检查Mysql是否启动成功。

LivenessProbe探针(存活探针):用于判断容器是否存活(Running状态),如果LivenessProbe探针检测到容器不健康,Kubelet将干掉这个容器,然后该容器根据重启策略作相应的处理,如果不配置这个探针,那么kubelet就认为这个探针返回值永远是Success。

ReadinessProbe(就绪探针):这个探针用于检测容器是否可用(Ready状态),只有就绪状态的Pod才会接收请求。

以上三种方式的探针均有三种方式检测即 HttpGetAction、TCPSocketAction和命令行ExecAction的方式实现

1、StartupProbe启动探针

基于HttpGetAction方式
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        httpGet: #基于http的探测
          port: 80 #端口
          path: /api #请求路径,这里我故意写了一个不存在的路径,目的是为了检测启动探针报错,启动失败
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  
#创建资源
 kubectl create -f my-nginx-pod.yaml 
#查看资源
kubectl get pods -n wssnail-nginx

 

 查看资源描述

kubectl describe pod my-nginx-pod -n wssnail-nginx

 可以看到容器请求返回状态码为404,此时检测容器不健康。基于Http方式检测的探针状态码返回值大于等于200且小于400之间认为是健康的否则认为是不健康的。

当我们把配置文件修改为以下内容

apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        httpGet: #基于http的探测
          port: 80 #端口
          path: /index.html #请求路径,修改为正确路径
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

#创建资源
 kubectl create -f my-nginx-pod.yaml 

#查看资源
kubectl get pods -n wssnail-nginx

#容器描述
kubectl describe pod my-nginx-pod -n wssnail-nginx

 

 基于TCPSocketAction方式
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
#        httpGet: #基于http的探测
#          port: 80 #端口
#          path: /api #请求路径,这里我故意写了一个不存在的路径,目的是为了检测启动探针报错,启动失败
        tcpSocket:
          port: 80
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

 然后同样查看命令发现pod正确被创建

#创建资源
 kubectl create -f my-nginx-pod.yaml 

#查看资源
kubectl get pods -n wssnail-nginx

#容器描述
kubectl describe pod my-nginx-pod -n wssnail-nginx
 基于命令行ExecAction
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
#        httpGet: #基于http的探测
#          port: 80 #端口
#          path: /api #请求路径,这里我故意写了一个不存在的路径,目的是为了检测启动探针报错,启动失败
#        tcpSocket:
#          port: 80
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

2、LivenessProbe 存活探针

基于HttpGetAction方式
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
        httpGet: #基于http方式
          port: 80 #端口
          path: /api #访问路径
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

#创建资源
kubectl create -f my-nginx-pod-liveness.yaml 

#查看资源
kubectl get po -n wssnail-nginx 

#查看描述
kubectl describe po my-nginx-pod -n wssnail-nginx

 

 修改配置文件如下

apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
        httpGet: #基于http方式
          port: 80 #端口
          path: /index.html #访问路径
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

#创建资源
kubectl create -f my-nginx-pod-liveness.yaml 

#查看资源
kubectl get po -n wssnail-nginx 

#查看描述
kubectl describe po my-nginx-pod -n wssnail-nginx

基于TCPScocketAction方式
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
#        httpGet: #基于http方式
#          port: 80 #端口
#          path: /index.html #访问路径
        tcpSocket:
          port: 80
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  
#创建资源
kubectl create -f my-nginx-pod-liveness.yaml 

#查看资源
kubectl get po -n wssnail-nginx 

#查看描述
kubectl describe po my-nginx-pod -n wssnail-nginx

基于命令行ExecAction
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
#        httpGet: #基于http方式
#          port: 80 #端口
#          path: /index.html #访问路径
#        tcpSocket:
#          port: 80
       exec:
         command:
           - sh
           - -c
           - "echo 'started' > start_file"  #输出内容到文件
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

#创建资源
kubectl create -f my-nginx-pod-liveness.yaml

#查看资源
 kubectl get po -n wssnail-nginx

#查看描述
kubectl describe po -n wssnail-nginx

#进入容器查看文件是否创建成功
 kubectl exec -it my-nginx-pod -n wssnail-nginx -- /bin/bash

#列出文件列表
ls

#查看文件
cat start_file

或者将文件复制到宿主机查看

#将文件从容器复制到宿主机
kubectl cp <namespace>/pod名称:<绝对路径> <宿主机路径>
kubectl cp wssnail-nginx/my-nginx-pod:/usr/share/nginx/html/start_file /root/start

3、ReadinessProbe 就绪探针

基于HttpGetAction
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
        httpGet: #基于http方式
          port: 80 #端口
          path: /index.html #访问路径
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
#        tcpSocket:
#          port: 80
#       exec:
#         command:
#           - sh
#           - -c
#           - "echo 'started' > start_file"  #输出内容到文件
      readinessProbe:
        httpGet:
          port: 80
          path: /start.html
        initialDelaySeconds: 0 #启动容器进行健康检查的等待时间
        failureThreshold: 5 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

#创建资源
kubectl create -f my-nginx-pod-readiness.yaml

#查看
kubectl get po -n wssnail-nginx

#查看描述
kubectl describe po my-nginx-pod -n wssnail-nginx 

 

 接下来我们创建一个start.html,然后复制到容器内

#创建文件
echo 'success' > start.html

#复制文件到容器内
kubectl cp start.html wssnail-nginx/my-nginx-pod:/usr/share/nginx/html
基于TCPScocketAction方式
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
        httpGet: #基于http方式
          port: 80 #端口
          path: /index.html #访问路径
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
#        tcpSocket:
#          port: 80
#       exec:
#         command:
#           - sh
#           - -c
#           - "echo 'started' > start_file"  #输出内容到文件
      readinessProbe: #就绪探针
#        httpGet:
#          port: 80
#          path: /start.html
        tcpSocket:
          port: 80
        initialDelaySeconds: 0 #启动容器进行健康检查的等待时间
        failureThreshold: 5 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  
#创建资源
kubectl create -f my-nginx-pod-readiness.yaml 

#查看资源
kubectl get po -n wssnail-nginx

#查看描述
kubectl describe po my-nginx-pod -n wssnail-nginx
基于命令行ExecAction
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      #配置启动探针
      startupProbe: #启动探针
        exec:
          command:
            - sh
            - -c
            - "sleep 3; echo success"
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      livenessProbe: #存活探针
        httpGet: #基于http方式
          port: 80 #端口
          path: /index.html #访问路径
        initialDelaySeconds: 3 #启动容器进行健康检查的等待时间
        failureThreshold: 3 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
#        tcpSocket:
#          port: 80
#       exec:
#         command:
#           - sh
#           - -c
#           - "echo 'started' > start_file"  #输出内容到文件
      readinessProbe: #就绪探针
#        httpGet:
#          port: 80
#          path: /start.html
#        tcpSocket:
#          port: 80
        exec:
          command:
            - sh
            - -c
            - "echo 'success'"
        initialDelaySeconds: 0 #启动容器进行健康检查的等待时间
        failureThreshold: 5 #失败多少次才算失败
        periodSeconds: 10 # 间隔时间 单位为秒
        successThreshold: 1 #成功几次算成功
        timeoutSeconds: 5 #请求超时时间 单位秒
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  

#创建资源
kubectl create -f my-nginx-pod-readiness.yaml 

#查看资源
kubectl get po -n wssnail-nginx

#查看描述
kubectl describe po my-nginx-pod -n wssnail-nginx

三、Pod生命周期

pod生命周期

在pod的生命周期中我们可以利用容器初始化和preStop做一些处理,类似spring的初始化和销毁时可以做一些处理。

Pod状态描述

状态值描述
PendingApi Server已经创建Pod,但在Pod内部还有至少一个镜像没有创建,包括正在下载的镜像
RunningPod 内所有的容器均已创建,且至少有一个容器处于运行状态、正在启动或者重启状态
SucceededPod内所有的容器均成功执行后退出,且不会再重启
FailedPod内所有的容易均已退出,但至少有一个容器退出为失败状态
Unknow由于某种原因无法获取Pod信息,例如网络通信不畅导致
Prestop的使用
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-nginx #命名空间名称
---
apiVersion: v1
kind: Pod #类型为pod
metadata:  #元数据
  name: my-nginx-pod  #名称
  namespace: 'wssnail-nginx' # 该pod所属的命名空间
  labels:  #标签
    purpose: test-startup-probe  # k-v格式自定义即可 这里我打的标签是 测试启动探针
spec:  #容器的描述
  terminationGracePeriodSeconds: 30  #容器销毁时在该时间之后进行删除操作
  containers:
    - name: my-nginx-container #容器名称
      image: nginx:1.21.4 #镜像
      imagePullPolicy: IfNotPresent #镜像拉取策略 always 总是拉取镜像;IfNotPresent如果本地没有镜像就从远程拉取;Never仅使用本地镜像,默认是alaways
      lifecycle:  #生命周期配置
        postStart: #生命周期启动阶段,该命令不一定比容器的command命令早执行,
         exec:
           command:
             - sh
             - -c
             -  "echo '<h1>preStart<h1>' > /usr/share/nginx/html/preStop.html"
#         httpGet:
#           path: /index.html
#           port: 80
#         tcpSocket:  #该方法已过期
#           port: 80
#         sleep:
#           seconds: 10
        preStop: #容器在停止时处理的事情
          exec:
            command:
              - sh
              - -c
              - "sleep 45; echo 'sleep over' >> /usr/share/nginx/html/preStop.html"  #理论上能访问到该内容
#         httpGet:
#           path: /index.html
#           port: 80
#         tcpSocket:  #该方法已过期
#           port: 80
#         sleep:
#           seconds: 10
      workingDir: /usr/share/nginx/html #容器内工作目录
      ports: #端口
        - name: my-port #端口名称
          containerPort: 80 #端口
          protocol: TCP #协议 TCP 、UDP
      resources: #所需资源
        requests: #所需最小资源限制
          cpu: "200m"
          memory: "128Mi"
        limits: #分配的最大资源限制
          cpu: "500m"
          memory: "256Mi"
  restartPolicy: Always #重启策略 Always pod 一旦终止,无论如何终止都会重启,OnFailure 只有Pod以非零退出码终止;Never将退出码上报给master,不会重启
  
#查看信息
kubectl get pod -n wssnail-ngin -o wide

#访问
curl 10.244.1.4/preStop.html 

四、资源调度

1、自动调度

apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-deploy #命名空间名称
---
apiVersion: apps/v1  #版本
kind: Deployment  #类型为Deployment
metadata: #元数据
  labels:  #标签
    app: my-nginx
  name: my-nginx-deploy
  namespace: wssnail-deploy
spec: #描述
  replicas: 3 #副本数量
  revisionHistoryLimit: 10  #历史版本限制,用来回退,如果设置为0则没有回退
  selector: #选择器
    matchLabels:
      app: my-nginx
  strategy:
    rollingUpdate:  #滚动更新策略
      maxSurge: 25%  #控制滚动更新过程中副本总数的超过期望值的上限。maxSurge 可以是具体的整数,也可以是百分百,向上取整。maxSurge 默认值为 25%,比如期望值是10,那么最大的副本数就是10+10*25%(向上取整)=13
      maxUnavailable: 1  #不可用的副本相占期望值的最大比例。 maxUnavailable 可以是具体的整数,也可以是百分百,向下取整。maxUnavailable 默认值为 25%。比如期望值是10,那么副本数至少要为10-10*25%(向下取整)=8才认为是健康。
    type: RollingUpdate  #滚动更新
  template:
    metadata:
      labels:
        app: my-nginx
    spec: #容器描述
      containers:
        - name: nginx-container
          image: nginx:1.21.4
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 5
            httpGet:
              path: /index.html
              port: 80
              scheme: HTTP
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          ports:
            - containerPort: 80
              name: nginx-port
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /index.html
              port: 80
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            limits:
              memory: 170Mi
            requests:
              cpu: 100m
              memory: 70Mi

 

#创建资源
kubectl create -f my-nginx-deploy.yaml 

#查看ReplicaSet
kubectl get replicaset -n wssnail-deploy

kubectl get  rs -n wssnail-deploy 


#查看pod
kubectl get pod -n wssnail-deploy -o wide

 

 从上可以看出3个Nginx Pod是由系统自动完成调度的。他们各自运行在那个节点上是由Scheduler经过一系列的算法计算出来的。

2、标签和选择器

给pod添加标签和修改标签
#显示标签
kubectl get pod -n wssnail-deploy --show-labels

#添加标签
kubectl label po my-nginx-deploy-c67dd47d5-54vsw  -n wssnail-deploy version=1.21.4 

#修改标签
kubectl label po my-nginx-deploy-c67dd47d5-54vsw  -n wssnail-deploy version=v2 --overwrite

 

 通过修改配置文件的方式修改label

#修改配置文件的方式修改标签
kubectl edit po my-nginx-deploy-c67dd47d5-54vsw -n wssnail-deploy

#查看
kubectl get pod -n wssnail-deploy --show-labels

 

 

 根据标签查询pod
#查询标签中app=my-nginx的pod
kubectl get pod -n wssnail-deploy -A -l app=my-nginx --show-labels

#查询标签中app=my-nginx并且version=v2的pod
kubectl get pod -n wssnail-deploy -A -l app=my-nginx,version=v2 --show-labels

#查询标签中app=my-nginx并且version=v2并且 env在(test,prd,prod)中的pod
kubectl get pod -n wssnail-deploy -A -l 'app=my-nginx,version=v2, env in(test,prd,prod)' --show-labels

# 查询标签中app不等于my-nginx并且version=v2并且 env在(test,prd,prod)中的pod
kubectl get pod -n wssnail-deploy -A -l 'app!=my-nginx,version=v2, env in(test,prd,prod)' --show-labels

 

NodeSelector的使用
#给节点打标签
kubectl label node node1 role=micro_service
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-deploy #命名空间名称
---
apiVersion: apps/v1  #版本
kind: Deployment  #类型为Deployment
metadata: #元数据
  labels:  #标签
    app: my-nginx
  name: my-nginx-deploy
  namespace: wssnail-deploy
spec: #描述
  replicas: 3 #副本数量
  revisionHistoryLimit: 10  #历史版本限制,用来回退,如果设置为0则没有回退
  selector: #选择器
    matchLabels:
      app: my-nginx
  strategy:
    rollingUpdate:  #滚动更新策略
      maxSurge: 25%  #控制滚动更新过程中副本总数的超过期望值的上限。maxSurge 可以是具体的整数,也可以是百分百,向上取整。maxSurge 默认值为 25%,比如期望值是10,那么最大的副本数就是10+10*25%(向上取整)=13
      maxUnavailable: 1  #不可用的副本相占期望值的最大比例。 maxUnavailable 可以是具体的整数,也可以是百分百,向下取整。maxUnavailable 默认值为 25%。比如期望值是10,那么副本数至少要为10-10*25%(向下取整)=8才认为是健康。
    type: RollingUpdate  #滚动更新
  template:
    metadata:
      labels:
        app: my-nginx
    spec: #容器描述
      nodeSelector: #节点选择
        role: micro_service  #通过添加标签控制到那个节点上
      containers:
        - name: nginx-container
          image: nginx:1.21.4
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 5
            httpGet:
              path: /index.html
              port: 80
              scheme: HTTP
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          ports:
            - containerPort: 80
              name: nginx-port
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /index.html
              port: 80
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            limits:
              memory: 170Mi
            requests:
              cpu: 100m
              memory: 70Mi

 

#创建资源
kubectl create -f my-nginx-deploy.yaml

#查看pod
kubectl get po -n wssnail-deploy -o wide

 可以看出所有的pod都调度到了node1节点。

3、deployment

滚动更新
apiVersion: v1  #版本号
kind: Namespace #类型为namespace
metadata: #元数据
  name: wssnail-deploy #命名空间名称
---
apiVersion: apps/v1  #版本
kind: Deployment  #类型为Deployment
metadata: #元数据
  labels:  #标签
    app: my-nginx
  name: my-nginx-deploy
  namespace: wssnail-deploy  #命名空间
spec: #描述
  replicas: 1 #副本数量
  revisionHistoryLimit: 10  #历史版本限制,用来回退,如果设置为0则没有回退
  selector: #选择器
    matchLabels: #按招标前匹配
      app: my-nginx #标签的值
  strategy:  #更新策略
    rollingUpdate:  #滚动更新策略
      maxSurge: 25%  #控制滚动更新过程中副本总数的超过期望值的上限。maxSurge 可以是具体的整数,也可以是百分百,向上取整。maxSurge 默认值为 25%,比如期望值是10,那么最大的副本数就是10+10*25%(向上取整)=13
      maxUnavailable: 1  #不可用的副本相占期望值的最大比例。 maxUnavailable 可以是具体的整数,也可以是百分百,向下取整。maxUnavailable 默认值为 25%。比如期望值是10,那么副本数至少要为10-10*25%(向下取整)=8才认为是健康。
    type: RollingUpdate  #滚动更新  可选值 Recreate 、RollingUpdate 默认为RollingUpdate
  template:  #模板信息
    metadata: #元数据
      labels: #模板标签
        app: my-nginx #标签的值
    spec: #容器描述
      terminationGracePeriodSeconds: 30 #宽限时间
      containers: #容器
        - name: nginx-container  #容器名称
          image: nginx:1.21.4  #镜像
          imagePullPolicy: IfNotPresent #拉取策略
#创建资源
kubectl create -f my-nginx-rollout-deploy.yaml

#查看deployment
kubectl get deploy -n wssnail-deploy

#查看replicaSet
kubectl get rs -n wssnail-deploy

#查看pod
kubectl get po -n wssnail-deploy


#编辑deploy配置文件,将副本数改成3
kubectl edit deploy my-nginx-deploy -n wssnail-deploy

 注意名称和个数

#修改镜像版本 nginx-container 为容器名称,--record参数已过期,加上这个参数在查询版本历史的时候显示修改的内容

kubectl set image deployment/my-nginx-deploy nginx-container=nginx:1.22.0 -n wssnail-deploy 

kubectl set image deployment/my-nginx-deploy nginx-container=nginx:1.21.4 -n wssnail-deploy --record 

#查看修改状态
kubectl rollout status deploy my-nginx-deploy -n wssnail-deploy

 查看滚动更近过程

#查看描述 
kubectl describe deploy my-nginx-deploy -n wssnail-deploy

结论:可以看到滚动更新的效果大概是是先启动新的然后再干掉老的 

回滚版本
#查看版本列表
kubectl rollout history deployment/my-nginx-deploy -n wssnail-deploy

#查看某个版本的修改内容
kubectl rollout history deployment/my-nginx-deploy -n wssnail-deploy --revision=2

#回滚到指定版本

kubectl rollout undo deployment/my-nginx-deploy -n wssnail-deploy --to-revision=3

 

扩容与缩容
#扩容,增加副本数
kubectl scale --replicas=6 deploy my-nginx-deploy -n wssnail-deploy

#缩容 减少副本数
kubectl scale --replicas=3 deploy my-nginx-deploy -n wssnail-deploy

 注意:扩容和缩容replicaSet的记录条数不会发生改变。

更新暂停与恢复
#暂停,这里暂停只是暂停template下内容的更新,其他内容修改时还是会更新
kubectl rollout pause deploy my-nginx-deploy -n wssnail-deploy

#恢复
kubectl rollout resume deploy my-nginx-deploy -n wssnail-deploy  

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

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

相关文章

分销渠道|中小企业可以有推广计划吗?

大家好&#xff0c;我是林叔&#xff0c;专注于分享SaaS企业渠道分销的实战经验。今天&#xff0c;我们来聊聊一个常被中小企业主忽视但极具潜力的营销策略——推广计划。很多人可能觉得推广计划是大企业的专利&#xff0c;但实际上&#xff0c;对于中小企业而言&#xff0c;它…

pycharm怎样关联anaconda虚拟环境.conda executable not found

刚下载的pycharm和anaconda怎样进行关联。 打开pycharm时&#xff0c;点击右侧的conda环境时&#xff0c;出现anaconda.conda executable not found&#xff0c;说明你的anaconda和pycharm没有进行关联。 第一步&#xff1a;重启电脑 第二步&#xff1a;点击圆圈中的文件夹按…

laravel8快速开发简单博客系统(二)

目录 一、创建文章增删改成提交的控制器 1、注释文章查看权限&#xff0c;非登录状态可以查看文章列表页 2、创建提交控制器post 3、创建数据表 4、创建提交post资源路由 5、创建post控制器view目录post 二、文章添加功能实现 1.模板显示 2.复制home.blade.php模板到po…

Django+Vue宠物服务管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

探讨离线AI知识库的技术实现:AntSKPro AI 离线知识库一体机

在现代社会&#xff0c;离线AI解决方案越来越受到关注。最近我接触到一款名为AntSKPro AI 离线知识库一体机的设备&#xff0c;它能在没有网络连接的情况下提供强大的AI支持。这里我想分享一下这款设备的一些技术亮点和使用体验。 技术架构与实现 AntSKPro AI 离线知…

Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?

苍穹之边&#xff0c;浩瀚之挚&#xff0c;眰恦之美&#xff1b; 悟心悟性&#xff0c;善始善终&#xff0c;惟善惟道&#xff01; —— 朝槿《朝槿兮年说》 写在开头 这些年&#xff0c;随着CPU、内存、I/O 设备都在不断迭代&#xff0c;不断朝着更快的方向努力。在这个快速发…

探索Python测试的奥秘:nose库的魔法之旅

文章目录 探索Python测试的奥秘&#xff1a;nose库的魔法之旅1. 背景&#xff1a;为什么要用nose&#xff1f;2. nose是什么&#xff1f;3. 如何安装nose&#xff1f;4. 五个简单的库函数使用方法4.1 nose.tools.assert_true4.2 nose.tools.assert_equal4.3 nose.tools.raises4…

【通过h5作为中转页跳转到微信小程序】

1。从小程序跳转小程序内部页面 <!DOCTYPE html> <html><head><title>H5跳转小程序</title><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, initial-scale1.0, minimum-scale1.0, ma…

解释:某树的孩子兄弟链是什么意思?

&#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&#xff0c;探索未知&#xff0c;激发潜能&#xff0c;每一步都意义非凡。 孩子兄弟链&#xff…

280Hz显示器 - HKC G27H3显示器

280Hz显示器 - HKC G27H3显示器 当电竞遇上显示器&#xff0c;就像是超级英雄找到了他的战衣&#xff0c;完美搭配&#xff0c;所向披靡。今天&#xff0c;我们要聊的这款HKC G27H3显示器&#xff0c;简直就是电竞界的"速度与激情"&#xff0c;让我们来看看它如何成为…

HANA5 游戏逆向

前言 某著名百合R18游戏 以前尝试逆过一次&#xff0c;半途而废了。今天想起来再逆一下&#xff0c;记录下逆向的过程。 游戏文件结构&#xff1a; 游戏资源extract 主要目标是弄明白游戏资源&#xff1a;SE、CG这些怎么加载解密的。 还是像万华镜那样下三个API断点&…

windows下载安装Node.js 并切换镜像地址

一、 windows下载Node.js Node.js官方安装包及源码下载地址为&#xff1a;https://nodejs.org/en/download/。 如果下载过慢可以使用nullhttps://nodejs.cn/download/ 下载对应版本 二、安装 双击安装包 全部点next即可 三、测试是否安装成功 打开命令窗口查看node版本 …

Unity SceneView 相机聚焦到指定位置

SceneView 相机聚焦到指定位置 SceneView.lastActiveSceneView.LookAt(pos);

书生大模型实战营基础(5)——XTuner 微调个人小助手认知任务

目录 1 、微调前置基础 2、准备工作 2.1环境配置 结果 2.2模型准备 目录结构&#xff1a;在目录结构中可以看出&#xff0c;internlm2-chat-1_8b 是一个符号链接 3、快速开始 3.1 微调前的模型对话 获取开发机端口和密码&#xff1a; 3.2 指令跟随微调 3.2.1 准备数…

基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统

项目概述 项目背景 随着车辆数量的不断增加&#xff0c;车牌识别系统在交通管理、停车场自动化等领域变得越来越重要。本项目利用先进的深度学习技术和现代图形用户界面框架来实现高效的车牌识别功能。 项目特点 高效识别&#xff1a;采用 YOLOv5_6.1 进行车牌定位&#xff…

Linux--IO模型_多路转接

目录 0.往期文章 1.五种IO模型介绍 概念 调用函数&#xff08;非阻塞IO&#xff09; 2.详解多路转接 之select select函数介绍 设置文件描述符 写一个基于select的TCP服务器 辅助库 基于TCP的Socket封装 服务器代码 测试服务器 小结 3.详解多路转接 之poll poll函…

【云游戏】点量云流赋能大型游戏新体验

点量小刘发现近期国产化大型3A游戏《黑神话&#xff1a;悟空》的发售&#xff0c;可谓是赢得了一波好评。从场景内容来说深厚的文化底蕴支撑和高质量精美的特效及画面制作令人眼前一亮&#xff0c;作为备受瞩目的一款游戏&#xff0c;从技术层面来说&#xff0c;该游戏也离不开…

关于武汉芯景科技有限公司的多协议收发芯片XJ3160开发指南(兼容MAX3160)

一、芯片引脚介绍 1.芯片引脚图 2.引脚描述 二、功能模式 1.RS232模式 2.RS485模式

赋能楼宇智能化升级:EasyCVR视频汇聚平台引领智慧楼宇安防新趋势

在当今科技飞速发展的时代&#xff0c;智慧楼宇监控系统如同一位默默守护的“超级卫士”&#xff0c;保障着我们工作和生活的舒适与安全。那么&#xff0c;这个强大的“卫士”是由哪些子系统构成的呢&#xff1f;且听我慢慢道来。 一、智慧楼宇的组成部分 首先&#xff0c;不…

神州数码半年业绩双增长,AI驱动数云服务及软件业务增长62.7%

发布 | 大力财经 8月30日晚间&#xff0c;神州数码集团&#xff08;000034.SZ&#xff09;发布2024年度中期业绩报告。 报告期内&#xff0c;神州数码营业收入实现625.6亿元&#xff0c;同比增长12.5%&#xff1b;归母净利润实现5.1亿元&#xff0c;同比增长17.5%&#xff1b…