当前位置: 首页 > news >正文

Kubernetes学习(二)Pod

创建Pod

kubectl创建nginx pod

编写 nginx pod的yaml文件

apiVersion: v1
kind: Pod
metadata:name: my-nginxlabels:name: my-nginx
spec:containers:- image: nginxname: my-nginxresources:limits:memory: "128Mi"cpu: "500m"ports:- name: nginx-portcontainerPort: 80protocol: TCP

创建

kubectl create -f nginx.yaml

Pod实现原理

什么是Pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod的共享上下文包括一组Linux命名空间、控制组(cgroup)和可能的一些其他隔离,即用来隔离docker容器的技术。在Pod上下文中,每个独立的应用可能会进一步实施隔离。就Docker概念的术语而言,Pod类似于共享命名空间和文件系统卷的一组Docker容器。

使用Pod

通常不需要直接创建Pod、甚至单实例Pod。相反,会使用诸如Deployment或job这类工作负载资源来创建Pod。如果pod需要跟踪状态,可以考虑StatefulSet资源。

Kubernetes集群中Pod主要有2种用法:

1、运行单个容器的Pod。”每个Pod一个容器“模型是最常见的Kubernetes用例,在这种情况下,可以将Pod看做单个容器的包装器,并且Kubernetes直接管理Pod,而不是容器;

2、运行多个协同工作的容器的Pod。Pod可能封装有多个精密耦合切需要共享资源的共处容器组成的应用程序。这些位于同一位置的容器可能形成单个内聚的服务单元:一个容器将文件从共享卷提供给公众,而另一个单独的边车(sidecar)容器则刷新或更新这些文件。Pod将这些容器和存储资源打包为一个可管理的实体。

Pod网络

每个Pod都在每个地址族中获得一个唯一的Ip地址。Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost互相通信。当Pod中的容器与Pod外的实体通信是,他们必须协调如果使用共享的网络资源(例如端口)

Pod生命周期

和一个个独立的应用容器一样,Pod也别认为是相对临时性(而不是长期存在)的实体。Pod会被创建、赋予一个唯一ID,并被调度到节点,并在终止或删除之前一直运行在该节点。如果一个节点挂掉了,调度到该节点的Pod也被计划在预定超时时限结束后删除

容器阶段 Phase

1、Pending(挂起) Pod已被Kubernetes系统接受,但有一个或多个容器尚未创建或运行。此阶段包括等待pod被调度的时间和通过网络下载镜像的时间

2、Running(运行中)Pod已被绑定到某个节点,Pod中所有的容器都已被创建,至少有一个容器仍在运行或正处于启动或重启状态

3、Succeeded(正常终止)Pod中所有的容器都成功终止,并且不会再重启

4、Failed(异常停止)Pod中所有容器都已终止,并且最少有一个容器是因为失败终止,也就是说,容器以非0状态退出或者被系统终止

5、Unknown(未知状态)因为某些原因无法取得Pod状态。这种情况通常是因为与Pod所在主机通信故障导致

容器状态

调度器将Pod分派给某个节点,kubelet就通过容器运行时开始为Pod创建容器。容器的状态有3中:Wating、Running、Terminated

容器生命周期事件处理函数

postStart和preStop处理函数

示例:lifecycle.yaml

apiVersion: v1
kind: Pod
metadata:name: lifecyclelabels:name: lifecycle
spec:containers:- name: lifecycle-demo-containerimage: nginxresources:limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 81lifecycle:postStart:exec:command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]preStop:exec:command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

验证:

[root@master k8s]# kubectl exec -it lifecycle sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# cat /usr/share/message
Hello from the postStart handler
# 

包含Init容器的Pod

Init容器

每个Pod中可以包含多个容器,应用运行在这些容器里面,同时Pod也可以有一个或多个先于用用启动的Init容器。

Init容器与普通的容器非常像,除了以下2点:

1、它们总是运行到完成

2、每个都必须在下一个启动之前成功完成

如果Pod的Init容器失败,Kubernetes会不断重启该Pod,知道Init容器成功启动为止。然而,如果Pod对应的restartPolicy值为Never,Kubernetes不会重新启动Pod

与普通容器的不同之处

Init容器支持应用容器的全部属性和特性,包括资源限制、数据卷和安全设置。

Init容器不支持lifecycle、livenessProbe、readinessProbe和startupProbe,因为它们必须在Pod就绪之前运行完成

示例:initPod.yaml

apiVersion: v1
kind: Pod
metadata:name: myapplabels:name: myapp
spec:containers:- name: myappimage: busybox:1.28command: ['sh','-c','date && sleep 3600']resources:limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 81initContainers:- name: initimage :  busybox:1.28command: ['sh','-c','date && sleep 10']

定义一个具有2个Init容器的简单Pod。第一个等待myservice启动,第二个等待mydb启动,一旦这个2个Init容器都启动完成,Pod将启动应用容器

[root@master k8s]# kubectl get pods -w
NAME       READY   STATUS     RESTARTS   AGE
my-nginx   1/1     Running    0          19h
myapp      0/1     Init:0/1   0          14s
myapp      0/1     PodInitializing   0          17s
myapp      1/1     Running           0          18s
kubect^C[root@master k8s]# 
[root@master k8s]# kubectl logs myapp
Thu Mar  2 02:24:57 UTC 2023
[root@master k8s]# kubectl logs myapp -c init
Thu Mar  2 02:24:46 UTC 2023
[root@master k8s]# 

Init容器将会等待10秒,Init容器执行完毕,随后my-app的Pod进入running状态

用探针检查Pod的健康

探针的作用

探针是由kubelet 对容器执行的定期诊断。要执行诊断,kubelet调用由容器实现的handler,有三种类型的handler:

ExecAction:在容器内执行指定命令,如果命令退出时返回状态码为0,则认为诊断成功

TCPSockerAction:对容器的Ip地址上的指定端口执行TCP检查,如果端口打开,则认为诊断成功

HTTPGetAction:对容器ip地址上指定的端口和路径执行HTTP GET请求,如果响应的状态码>=200且

每次探针都将获得以下三种结果之一:

Success:容器诊断成功

Failure:容器未通过诊断

Unknown:诊断失败,不会采取任何动作

使用场景

容器需要较长时间才能启动就绪的Pod而言,启动探针是有用的。不需要配置一个较长的存活态探测时间间隔,只需要设置另一个独立的配置选定,对启动期间的容器执行探测,从而允许使用远远超出存活态时间间隔所允许的时长。

如果容器启动时间通常超出initialDelaySeconds+failureThreshold*periodSeconds总值,你就应该设置一个启动探针,对存活态探针所使用的同一端点执行检查。periodSeconds的默认值是30秒,failureThreshold设置的应其足够高,以便容器有充足的时间完成启动,并且避免更改存活态探针所使用的默认值,这一设置有助于减少死锁状况的发生。

示例:liveness.yaml

apiVersion: v1
kind: Pod
metadata:name: liveness-httplabels:test: liveness
spec:containers:- name: livenessimage: mirrorgooglecontainers/livenessargs:- /serverresources:limits:memory: "128Mi"cpu: "500m"livenessProbe:httpGet:path: /healthzport: 8080httpHeaders:- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 3periodSeconds: 3

liveness /healthz 在容器存活的最开始10秒内,会返回200状态码,之后返回500状态码

kubelet在容器启动之后3秒开始执行健康检查,所以前几次健康检查都是成功的,但是10秒之后,健康检查会失败,同时kubelet会杀死容器再重新启动容器

启动命令和参数

创建Pod时设置命令和参数

创建Pod时,可以为容器设置启动时要执行的命令和参数。可以在配置文件的command字段下设置命令,在args字段下设置命令参数。一旦Pod创建完成,改命令和参数就无法进行更改了。

如果在配置文件中设置了容器启动时要执行的命令和参数,那么容器镜像中自带的命令和参数将会被覆盖而不在执行。如果配置文件中只是设置了参数,却没有设置对应的命令,那么容器镜像中自带的命令会使用改新参数

示例:args.yaml

apiVersion: v1
kind: Pod
metadata:name: argslabels:name: args
spec:containers:- name: argsimage: debiancommand: ["printenv"]args: ["HOSTNAME", "KUBERNATES_PORT"]restartPolicy: OnFailure
[root@master k8s]# kubectl create -f args.yaml 
pod/args created
[root@master k8s]# kubectl get pod -w
NAME   READY   STATUS              RESTARTS   AGE
args   0/1     ContainerCreating   0          2s
args   0/1     Completed           0          4s
^C[root@master k8s]kubectl logs args
args
[root@master k8s]#

使用环境变量设置参数

apiVersion: v1
kind: Pod
metadata:name: argslabels:name: args
spec:containers:- name: argsimage: debianresources:limits:memory: "128Mi"cpu: "500m"env:- name: MESSAGEvalue: "hello world"command: ["/bin/echo"]args: ["$(MESSAGE)"]restartPolicy: OnFailure
[root@master k8s]# kubectl create -f args.yaml 
pod/args created
[root@master k8s]# kubectl get pod -w
NAME   READY   STATUS              RESTARTS   AGE
args   0/1     ContainerCreating   0          3s
args   0/1     Completed           0          4s
^C[root@master k8s]kubectl logs args
hello world
[root@master k8s]#

相互依赖的环境变量

设置了相互依赖的环境变量,就可以再配置清单文件中的env的value使用 $(VAR_NAME)

示例:dependency-var.yaml

apiVersion: v1
kind: Pod
metadata:name: myapplabels:name: myapp
spec:containers:- name: myappimage: busyboxresources:limits:memory: "128Mi"cpu: "500m"command:- "sh"- "-c"args:- printf UNCHANGED_REFERENCE=$UNCHANGED_REFERENCE'\n'; printf SERVICE=$SERVICE'\n'; printf ESCAPED_SERVICE=$ESCAPED_SERVICE; sleep 120env:- name: SERVICE_IPvalue: "192.168.99.102"- name: SERVICE_PORTvalue: "31111"- name: UNCHANGED_REFERENCEvalue: $(PROTOCAL)://$(SERVICE_IP):$(SERVICE_PORT)- name: PROTOCALvalue: "https"- name: SERVICEvalue: $(PROTOCAL)://$(SERVICE_IP):$(SERVICE_PORT)- name: ESCAPED_SERVICEvalue: $$(PROTOCAL)://$(SERVICE_IP):$(SERVICE_PORT)
[root@master k8s]# kubectl logs myapp
UNCHANGED_REFERENCE=$(PROTOCAL)://192.168.99.102:31111
SERVICE=https://192.168.99.102:31111
[root@master k8s]# 

配额管理

创建一个命名空间,以便资源隔离

kubectl create namespace cpu-example

指定CPU请求和CPU限制

要为容器执行CPU请求,请在容器资源清单中包含 resources:requests字段。要指定CPU限制,请包含resources:limits

示例:cpu-limit.yaml

apiVersion: v1
kind: Pod
metadata:name: myapplabels:name: myapp
spec:containers:- name: myappimage: registry.cn-beijing.aliyuncs.com/qingfeng666/stressresources:limits:memory: "128Mi"cpu: "1"ports:- containerPort: 80args:- -cups- "2"
[root@master k8s]# kubectl describe pod myapp
Name:         myapp
Namespace:    default
Priority:     0
Node:         node2/179.220.56.232
Start Time:   Thu, 02 Mar 2023 14:57:46 +0800
Labels:       name=myapp
Annotations:  <none>
Status:       Running
IP:           10.244.2.20
IPs:IP:  10.244.2.20
Containers:myapp:Container ID:  docker://f41321840ba2dfdf841a869593f106acf86484d7f4b4f1dbaa9f3044efc9bc12Image:         registry.cn-beijing.aliyuncs.com/qingfeng666/stressImage ID:      docker-pullable://registry.cn-beijing.aliyuncs.com/qingfeng666/stress@sha256:155d7266cb7ed6fecd34b2e4f8a25c2b21eb77723658fb4ab2db630d41118c7dPort:          80/TCPHost Port:     0/TCPArgs:-cpus2State:          RunningStarted:      Thu, 02 Mar 2023 14:57:49 +0800Ready:          TrueRestart Count:  0Limits:cpu:     1memory:  128MiRequests:cpu:        1memory:     128MiEnvironment:  <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dh67f (ro)

利用亲和性分配Pod

preferredDuringSchedulingIgnoredDuringExecution:软策略 requiredDuringSchedulingIgnoredDuringExecution: 硬策略

软策略:意思就是尽量不要将 pod 调度到匹配到的节点,但是如果没有不匹配的节点的话,也可以调度到匹配到的节点

硬策略:意思就是必须调度到满足条件的节点上,否则就等着 Pending

键值运算关系

  • In:label 的值在某个列表中
  • NotIn:label 的值不在某个列表中
  • Gt:label 的值大于某个值
  • Lt:label 的值小于某个值
  • Exists:某个 label 存在
  • DoesNotExist:某个 label 不存在

添加自定义lable

kubectl label nodes node1 disktype=ssd

节点亲和性配置

示例:affinity.yaml

apiVersion: v1
kind: Pod
metadata:name: myapplabels:name: myapp
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktypeoperator: Invalues:- hardcontainers:- name: myappimage: nginxresources:limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 80
[root@master k8s]# kubectl get pod -w
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          6s
^C[root@master k8s]# kubectl describe pod myapp
Name:         myapp
Namespace:    default
Priority:     0
Node:         node2/179.220.56.232
Start Time:   Thu, 02 Mar 2023 15:26:04 +0800
Labels:       name=myapp
Annotations:  <none>
Status:       Running
IP:           10.244.2.21

ConfigMap数据注入容器

创建自定义的ConfigMap

示例:configmap-multi.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: my-db-confignamespace: default
data:db-url: localhostusername: rootpassword: root
kubectl create -f configmap-multi.yaml

使用ConfigMap数据

apiVersion: v1
kind: Pod
metadata:name: myapplabels:name: myapp
spec:containers:- name: myappimage: busyboxcommand: ["sh", "-c", "env"]envFrom:- configMapRef:name: my-db-configresources:limits:memory: "128Mi"cpu: "500m"
[root@master k8s]# kubectl logs myapp
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=myapp
SHLVL=1
username=root
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
password=root
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
db-url=localhost

容器root用户和privileged特权用户

Docker允许隔离主机OS上的进程、功能和文件系统,并且出于实际原因,大多数容器默认以root用户身份运行。

Kubernetes通过Security Context提供了相同的功能。

要为Pod设置安全性配置,可在Pod规约中包含securityContext字段。securityContext字段值是一个PodSecurityContext对象,设置的安全性配置会应用到Pod中所有的Container上

示例:security.yaml

apiVersion: v1
kind: Pod
metadata:name: myapplabels:name: myapp
spec:securityContext:runAsUser: 1000runAsGroup: 3000fsGroup: 2000volumes:- name: securityemptyDir: {}containers:- name: myappimage: busyboxcommand: ["sh","-c","sleep 1h"]volumeMounts:- name: securitymountPath: /data/demosecurityContext:allowPrivilegeEscalation: falseresources:limits:memory: "128Mi"cpu: "500m"

相关文章:

Kubernetes学习(二)Pod

创建Pod kubectl创建nginx pod 编写 nginx pod的yaml文件 apiVersion: v1 kind: Pod metadata:name: my-nginxlabels:name: my-nginx spec:containers:- image: nginxname: my-nginxresources:limits:memory: "128Mi"cpu: "500m"ports:- name: nginx-po…...

【Docker】docker | 迁移docker目录

一、场景说明1、物理机磁盘空间不够用了2、docker的镜像、容器、卷等资料的默认路径为&#xff1a; /var/lib/docker3、增加了数据盘挂在&#xff0c;需要将docker的全部资料更换个目录二、操作确认是否满足切换条件1&#xff09;服务是否能够暂停&#xff0c;如果可以就OK2&am…...

day24_多线程进阶

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、线程安全的集合 三、死锁 四、线程通信 五、生产者消费者 六、线程池 零、 复习昨日 创建线程的几种方式 1) 继承 2) 实现Runnable 3) calla…...

Qt实现系统桌面目录下文件搜索的GUI:功能一:文件查找与现实

⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读生。 原创不易~转载麻烦注明出处&#xff0c;并告知作者&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 这是一篇近期会不断更新的博客欧~~~ 有什么问题的小伙伴 欢迎留言提问欧。 功能点一&#xff1a;文件查找与…...

有关数据库的一级、二级、三级封锁协议

一级封锁协议 一级封锁协议是指&#xff0c;事务T在修改数据R之前必须先对其加X锁&#xff0c;直到事务结束才释放。事务结束包括正常结束&#xff08;COMMIT&#xff09;和非正常结束&#xff08;ROLLBACK).一级封锁协议可防止丢失修改&#xff0c;并保证事务T是可恢复的。在…...

【Android Studio】【学习笔记】【2023春】

文章目录零、常用一、界面布局疑问&报错零、常用 一、界面布局 Android——六大基本布局总结/CSDN小马 同学 【Android】线性布局&#xff08;LinearLayout&#xff09;最全解析/CSDNTeacher.Hu 一个不错的计算器界面&#x1f447; Android Studio App LinearLayout多层…...

window.open()下载文件重命名/js下载文件重命名/js跨域下载文件重命名

普通文件下载 // 1 var fileUrl https://xxxx.docx; window.open(fileUrl"?attname文档.docx");// 2 var a document.createElement(a); a.href https://xxxx.docx; a.download 文档.docx; a.target "_blank"; a.click();以上方式 attname 和 a.down…...

zookeeper:简介及常用命令

目录 一、Zookeeper简介 二、Zookeeper服务端常用命令 1、启动ZooKeeper服务 2、查看ZooKeeper服务状态 3、停止ZooKeeper服务 4、重启ZooKeeper服务 三、Zookeeper客户端常用命令 1、连接ZooKeeper服务端 2、断开连接&#xff1a;quit 3、查看命令帮助&#xff1a;help…...

与流程挖掘布道者熵评科技孙一鸣博士共话流程挖掘市场的起源与前景 | 爱分析访谈

调研&#xff1a;李进宝 陈元新 撰写&#xff1a;李进宝 陈元新 随着数字化转型持续深入&#xff0c;国内企业流程挖掘需求初露端倪。流程挖掘是指通过采集和分析企业数据&#xff0c;以可视化流程图还原企业实际发生的业务流程&#xff0c;进而评估流程运行状况、诊断流程运…...

第十一届蓝桥杯省赛——2解密

题目&#xff1a;【问题描述】小明设计了一种文章加密的方法&#xff1a;对于每个字母 c&#xff0c;将它变成某个另外的字符 Tc。下表给出了字符变换的规则&#xff1a;字母cTc字母cTc字母cTc字母cTcaynlAYNLbxogBXOGcmpoCMPOddquDDQUearfEARFfcssFCSSgitzGITZhkupHKUPinvwINV…...

ChatGPT解答:PYQT5 美化各种控件的方案和实例

ChatGPT解答&#xff1a;PYQT5 美化各种控件的方案和实例 修改按钮样式 button QPushButton(按钮, self) button.setStyleSheet(QPushButton{background-color: red; border-radius: 5px;})修改标签样式 label QLabel(标签, self) label.setStyleSheet(QLabel{color: blue; …...

js实现翻盘抽奖

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>礼物编辑</title><style>* {margin: 0;padding: 0;box-sizing: border-box;list-style-type: none;text-decoration: none;}.container {d…...

Qt QtCreator 安卓开发环境搭建

踩坑 我的qt是使用在线安装工具安装的&#xff0c;Qt版本使用的是5.15.2&#xff0c;QtCreator版本9.0.2 在网上很多教程都是如下步骤 1.安装qt 2.安装jdk 3.安装android-sdk 4.安装android-ndk 5.配置android设置 例如&#xff1a; https://blog.csdn.net/weixin_51363326/…...

Flutter知识点(二)处理Json

flutter不支持反射&#xff0c;所以本来很简单的事情&#xff0c;一下子变复杂了。当然官方也提供了一些工具来方便开发者。 由于Dart的map和array的数据结构和json一样&#xff0c;所以在flutter中&#xff0c;变成了json string与Map&#xff0c;array之间的砖换。 &#x…...

基本概念简介(码率,FPS(帧数),分辨率,RTMP协议)等的介绍

基本概念 为了了解视频的码率、帧率、分辨率。我们先来看看视频编码的基本原理:视频图像数据有极强的相关性,也就是说有大量的冗余信息。压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性),压缩技术包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技…...

黑盒测试重点复习内容

黑盒测试一、等价类划分边界值分析法二、判定表法一、等价类划分边界值分析法 对于各种输入或者输出&#xff0c;必须考虑等价类和边界值&#xff0c;并补充一些特殊值&#xff0c;如空值、空格、0、异常格式等特殊值。 基本概念&#xff1a; 有效等价类&#xff1a;满足需求…...

Python每日一练(20230303)

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺…...

基于Cortex-M7内核STM32F767NIH6,STM32F767VGT6,STM32F767VIT6嵌入式技术资料

STM32F7 32 位 MCUFPU 基于高性能的 ARMCortex-M7 32 位 RISC 内核&#xff0c;工作频率高达 216MHz。Cortex-M7 内核具有单浮点单元(SFPU)精度&#xff0c;支持所有 ARM 单精度数据处理指令与数据类型。同时执行全套 DSP 指令和存储保护单元&#xff08;MPU&#xff09;&#…...

Nginx SSL证书A+之路

问题 myssl是常见的SSL/TLS在线免费检测网站。期望能够达到A级别。 步骤 nignx worker_processes auto;http {ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;server {listen 443 ssl;server_name xxxx.xxxx.com;keepalive_timeout 70;ssl_certific…...

周期性温度和压力波的PID自动控制解决方法

摘要&#xff1a;目前各种PID控制器仪表常用于简单的设定点&#xff08;Set Point&#xff09;和斜坡&#xff08;Ramp&#xff09;程序控制&#xff0c;但对于复杂的正弦波等周期性变量的控制则无能为力。为了采用标准PID控制器便捷和低成本的实现对正弦波等周期性变量的自动控…...

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传与下载

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传前言流程分析代码结构代码详情UploadFileInfo.classUploadController.classUploadDao.classUploadDao.xmlUploadServices.classUploadServicesImpl.class测试下载示例前言 文件的上传和下载是很多系统必备的功能&#xf…...

It做形式主语和宾语

主谓宾&#xff0c;主宾能被名词性的sth&#xff0c;替换&#xff0c;如动名词&#xff0c;不定式&#xff0c;从句等等 而且&#xff0c;不能出现前面或者中间&#xff0c;很长&#xff0c;一大推的在开头或者中间&#xff0c;就产生了it做形式主宾。 一、It用作形式主语当不…...

做测试一定要知道的——软件测试流程和测试规范标准文档

目录 1、目的 2、工作范围 3、工作职责 4、测试的流程 5、测试准备阶段 6、测试方法制定阶段 7、测试执行阶段 8、bug管理 9、标准文档 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 1、目的 通…...

Linux下将一个文件压缩分包成多个小文件

压缩分包 将文件test分包压缩成1G 的文件&#xff1a; tar czf - 文件名字 | split -b 10 - 文件名.tar.gz解压 将第一步分拆的多个包解压&#xff1a; cat 文件名.tar.gz* | tar -xzv...

分享5款用了一段时间,个人觉得非常nice的软件

大家在使用Windows办公、学习的时候&#xff0c;有没有觉得自己的电脑差了点意思&#xff1f;比如&#xff1a;电脑桌面上太杂乱、装满了各类五花八门的软件、桌面壁纸不美观等。今天&#xff0c;给大家分享五款个人用了段时间后&#xff0c;觉得非常nice的软件。 1.鼠标可视化…...

搜广推 Product-based Neural Networks (PNN) - 改进特征交叉的方式

😄 PNN:2016年上海交通大学提出。 文章目录 1、PNN1.1、原理1.2、创新点:product层1.3、product层z部分的输出:l~z~ 的计算方式:1.4、product层z部分的输出:l~p~ 的计算方式:1.4.1、IPNN1.4.2、OPNN1.5、优点1.6、缺点Reference1、PNN PNN:Product-based Neural Netwo…...

IDEA2022 配置spark开发环境

本人强烈建议在 linux环境下 学习 spark&#xff01;&#xff01;&#xff01; Introduction Apache Spark是一个快速且通用的分布式计算引擎&#xff0c;可以在大规模数据集上进行高效的数据处理&#xff0c;包括数据转换、数据清洗、机器学习等。在本文中&#xff0c;我们将…...

趣味答题竞赛小程序开发功能的详细介绍

随着人们对知识学习的要求越来越高&#xff0c;答题已经成为了一项重要的学习和考核方式。而为了让答题变得更加有趣和富有挑战性&#xff0c;我们推出了趣味答题竞赛小程序。下面&#xff0c;我们将详细介绍这个小程序的开发功能。 1.个人淘汰赛 在个人淘汰赛中&#xff0c;…...

【独家】华为OD机试提供C语言题解 - 获取最大软件版本号

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明获取…...

k8s编程operator实战之云编码平台——⑤项目完成、部署

文章目录1、效果展示2、保存用户状态和访问用户服务实现方案2.1 如何保存用户的状态2.1.1 解决保留安装的插件问题2.2 如何访问到用户在工作空间中启动的http服务2.2.1 code-server如何帮我们实现了用户程序的代理3、Operator功能实现3.1 使用KubeBuilder创建项目3.1.1 完善kin…...

免费的购物网站源码/网站运营及推广方案

前言 前几天接到客户需求&#xff0c;做一个登记客户信息的表单&#xff0c;做好以后要求有一个配置文件可以修改全局接口&#xff0c;第一次做&#xff0c;查了网上各种资料&#xff0c;最终以失败告终&#xff0c;在朋友的帮助下最终成功&#xff01;&#xff01;&#xff0…...

乌镇网站建设投标书/百度推广如何计费

什么是Dynamic Island Dynamic Island 是一项功能,可调整 iPhone 14 Pro 和 iPhone 14 Pro Max 上药丸形凹口的大小。调整大小让黑色区域包含更多信息、交互式信息,您可以点击或长按以访问不同的功能。 脚步 我们需要创建一个带有 Widget Extension 的项目。你可以参考之前的…...

绵阳网站建设设计/成都网站设计

试验网站#1搜索引擎优化收录情况记录(断续运行)日期Yahoogooglebaidusogou每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量2007-6-24288 333 1060 4813 2007-6-25164013523330108020481302007-6-26空间超过6月流量限制……&#xff0c;…...

编辑网站/搜狗站长工具平台

一般写法: package strategy_mode;/*** 实现起来比较容易,符合一般开发人员的思路* 假如,类型特别多,算法比较复杂时,整个条件语句的代码就变得很长,难于维护.* 如果有新增类型,就需要频繁的修改此处的代码!* 不符合开闭原则!*/ public class TestStrategy {/*** 根据类型,打折…...

wordpress首页静态/百度搜索提交入口

什么是MetatableLua中Metatable这个概念, 国内将他翻译为元表. 元表为重定义Lua中任意一个对象(值)的默认行为提供了一种公开入口. 如同许多OO语言的操作符重载或方法重载. Metatable能够为我们带来非常灵活的编程方式.具体的说, Lua中每种类型的值都有都有他的默认操作方式, 如…...

网站建设 你真的懂吗/企业网站优化服务公司

更多你自己的等待方法之前&#xff0c;您已经了解了如何将TaskCompletionSource与Device.StartTimer一起使用来编写自己的异步动画方法。 您还可以将TaskCompletionSource与Animation类结合使用&#xff0c;编写自己的异步动画方法&#xff0c;类似于ViewExtensions类中的方法。…...