k8s上对Pod的管理部分详解

目录

一.Pod结构介绍

1.user container

2.pause

二.Pod工作形式介绍

1.自主式pod

2.控制器管理下的pod

三.对Pod的操作介绍

1.run/apply -f/create -f运行pod

2.get查看pod信息

3.exec操作运行中的pod

(1)进入运行中的pod

(2)进入pod中的容器

4.logs打印pod日志

5.describe描述pod详细信息用于排错

6.edit编辑运行中的pod

7.cp复制pod内的文件到master

9.delete删除pod

10.扩展使用kubectl命令插件

四.pod的yaml文件配置定义解析

五.Pod对容器的封装

1.对单个容器的封装

2.对多个容器封装并绑定为一个Pod

六.静态Pod管理

1.配置文件方式

2.http方式


一.Pod结构介绍

pod中包含若干个容器,大体可以分为两大类

1.user container

用户程序所在容器,数量一般可多可少

2.pause

是每一个pod的根容器,主要是用来评估pod的健康状态和以根容器设置的IP实现pod内部通信

 

二.Pod工作形式介绍

主要通过yaml/json文件或kubectl run创建pod,但是pod的形式又可以分为两大类

1.自主式pod

通过命令行或run直接定义pod资源,这种情况下创建的pod在被删除后就彻底被删除了

2.控制器管理下的pod

控制器管理pod可以保障pod始终维持在指定的数量下运行,常见的pod控制器有上篇文章介绍到的deployment控制器,还有replicaset、job、cronjob、daemonset等

三.对Pod的操作介绍

1.run/apply -f/create -f运行pod

[root@k8s-master pod]# kubectl run mynginx --image=nginx -n myns
pod/mynginx created
[root@k8s-master pod]# kubectl create -f tomcat.yaml 
pod/tomcat created
[root@k8s-master pod]# kubectl apply -f httpd.yaml 
pod/httpd created
​
[root@k8s-master pod]# kubectl get pods -n myns
NAME      READY   STATUS    RESTARTS   AGE
httpd     1/1     Running   0          2m20s
mynginx   1/1     Running   0          4m33s
tomcat    1/1     Running   0          8s

2.get查看pod信息

(1)查看所有pod

[root@k8s-master ~]# kubectl get pods -A

(2)查看指定的单个/多个pod

[root@k8s-master ~]# kubectl get pod nginx -n myns
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          9s
​
[root@k8s-master ~]# kubectl get pod nginx nginx1 -n myns
NAME     READY   STATUS    RESTARTS   AGE
nginx    1/1     Running   0          97s
nginx1   1/1     Running   0          15s

(3)查看pod同时查看其他类型资源(需要具体指定资源类型和名称)

[root@k8s-master ~]# kubectl get pod/nginx -n myns node/k8s-node1
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          104s
​
NAME             STATUS   ROLES    AGE    VERSION
node/k8s-node1   Ready    <none>   3m6s   v1.28.2

(4)同时应用多个关于pod的yaml文件时添加多个-f参数即可

(5)列出在某个节点上运行的pod

[root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k8s-node1

(6)-w实时查看pod信息

[root@k8s-master ~]# kubectl get  pod -w nginx -n myns 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          4h16m
[root@k8s-master ~]# 

3.exec操作运行中的pod

(1)进入运行中的pod

[root@k8s-master ~]# kubectl exec -it nginx -n myns -- /bin/bash
root@nginx:/# ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp
​
#不进入但执行命令
[root@k8s-master ~]# kubectl exec -it nginx -n myns -- ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp

(2)进入pod中的容器

[root@k8s-master ~]# kubectl exec -it nginx -c xxx -n myns -- /bin/bash
#-c后指定容器名称

4.logs打印pod日志

[root@k8s-master ~]# kubectl logs nginx -n myns 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/10/31 09:08:21 [notice] 1#1: using the "epoll" event method
2023/10/31 09:08:21 [notice] 1#1: nginx/1.25.3
2023/10/31 09:08:21 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2023/10/31 09:08:21 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64
2023/10/31 09:08:21 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/10/31 09:08:21 [notice] 1#1: start worker processes
2023/10/31 09:08:21 [notice] 1#1: start worker process 29
2023/10/31 09:08:21 [notice] 1#1: start worker process 30
2023/10/31 09:08:21 [notice] 1#1: start worker process 31
2023/10/31 09:08:21 [notice] 1#1: start worker process 32[root@k8s-master ~]# kubectl logs nginx -n myns -f #加-f参数持续监控

5.describe描述pod详细信息用于排错

[root@k8s-master ~]# kubectl describe pod nginx -n myns

6.edit编辑运行中的pod

更改完后需要w/wq保存

[root@k8s-master ~]# kubectl edit pod nginx -n myns

7.cp复制pod内的文件到master

[root@k8s-master ~]# kubectl exec -it nginx -n myns -- cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.244.36.65	nginx[root@k8s-master ~]# kubectl cp nginx:etc/hosts -n myns /root/myhosts    #“:”后不需要指示“/”号,master的目标路径需要是一个文件而不是一个目录(此处的/root/myhosts)
[root@k8s-master ~]# cat myhosts 
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.244.36.65	nginx

9.delete删除pod

(1)通过delete pod进行删除

[root@k8s-master pod]# kubectl get pod mynginx -n myns --show-labels
NAME      READY   STATUS    RESTARTS   AGE   LABELS
mynginx   1/1     Running   0          37m   run=nginx,user=sulibao
[root@k8s-master pod]# kubectl delete pod mynginx -n myns
pod "mynginx" deleted

(2)若是通过文件创建的pod,可以通过delete -f进行删除

[root@k8s-master pod]# kubectl delete -f nginx.yaml 
pod "mynginx" deleted

(3)若是拥有标签的pod,可以通过匹配标签进行删除

[root@k8s-master pod]# kubectl delete pods -l run=nginx -n myns
pod "mynginx" deleted

10.扩展使用kubectl命令插件

(1)必须是“kubectl-自定义名称”格式命名

[root@k8s-master ~]# vim /usr/local/bin/kubectl-pwd   #放在/usr/local/bin下
[root@k8s-master ~]# cat /usr/local/bin/kubectl-pwd 
#!/bin/bashpwd[root@k8s-master ~]# chmod +x /usr/local/bin/kubectl-pwd    #一定要加上执行权限
[root@k8s-master ~]# kubectl pwd 
/root
[root@k8s-master pod]# kubectl pwd pod httpd -n myns
/root/pod

(2)kubectl plugin list查看已安装插件列表

[root@k8s-master ~]# kubectl plugin list
/usr/local/bin/kubectl-pwd

(3)rm直接删除该文件即可卸载插件

[root@k8s-master ~]# rm -f /usr/local/bin/kubectl-pwd
[root@k8s-master ~]# kubectl plugin list
error: unable to find any kubectl plugins in your PATH

四.pod的yaml文件配置定义解析

[root@k8s-master ~]# kubectl explain pod.spec
#可以以此形式来一层一层获取可配置项apiVersion: v1 
#必选项,版本号,如V1
kind: Pod 
#必选项,资源类型,pod等
metadata: 
#必选项,元数据部分name: xxx #Pod名称namespace: xxx #Pod所属的命名空间,默认为"default"labels: #自定义标签列表- name: xxx   #自定义标签内容
spec: 
#必选项,Pod中容器的详细定义containers: #必选项,Pod中容器列表- name: xxx #必选项,容器名称image: xxx #必选项,容器的镜像名称imagePullPolicy: [ Always|Never|IfNotPresent ] #获取镜像的策略,tag为latest默认always,tag为具体版本号,默认IfNotPresent。always表示每次都尝试重新拉取镜像;ifNotPresent表示如果本地有那个镜像就使用本地的,不存在时才拉取;Nerver表示仅使用本地有的镜像,绝不拉取,本地没有时报错command: [xxx] #容器的启动命令列表,如不指定则使用打包时使用的启动命令args: [xxx] #容器的启动命令给定参数列表workingDir: xxx #容器的工作目录volumeMounts: #挂载到容器内部的存储卷配置- name: xxx#引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名mountPath: xxx #存储卷在容器内mount的绝对路径,应少于512字符readOnly: xxx#布尔值,是否为只读模式ports: #需要暴露的端口库号列表- name: xxx#端口的名称containerPort: xxx #容器需要监听的端口号hostPort: xxx#容器所在主机需要监听的端口号,默认与Container相同protocol: xxx #端口协议,支持TCP和UDP,默认TCPenv: #容器运行前需设置的环境变量列表- name: xxx #环境变量名称value: xxx #环境变量的值resources: #资源限制和请求的设置limits: #资源限制的设置cpu: xxx #cpu的限制,单位为core数,将用于docker run --cpu-shares参数memory: xxx #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数requests: #资源请求的设置cpu: xxx #cpu请求,容器启动的初始可用数量memory: xxx #内存请求,容器启动的初始可用数量lifecycle: #生命周期钩子postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器exec: #对Pod容器内检查方式设置为exec方式command: [xxx] #exec方式需要制定的命令或脚本httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath: xxxport: xxxhost: xxxscheme: xxxHttpHeaders:- name: xxxvalue: xxxtcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged: false
restartPolicy: [Always | Never | OnFailure] 
#Pod的重启策略
nodeName: <xxx> 
#设置NodeName表示将该Pod调度到指定到名称的node节点上
nodeSelector: xxx 
#设置NodeSelector表示将该Pod调度到包含这个label的node上
imagePullSecrets: 
#Pull镜像时使用的secret名称,以key:secretkey格式指定- name: xxx
hostNetwork: false 
#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: 
#在该pod上定义共享存储卷列表- name: string #共享存储卷名称 (volumes类型有很多种)emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath: xxx #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path: xxx #Pod所在宿主机的目录,将被用于同期中mount的目录secret: #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部scretname: xxxitems:- key: xxxpath: xxxconfigMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: xxxitems:- key: xxxpath: xxx

五.Pod对容器的封装

1.对单个容器的封装

apiVersion: v1
kind: Pod
metadata:name: httpdlabels:run: httpdnamespace: myns
spec:containers:- name: httpdimage: httpdports:- containerPort: 80

2.对多个容器封装并绑定为一个Pod

apiVersion: v1
kind: Pod
metadata:name: two-containersnamespace: mynslabels:name: tc
spec:containers:- name: first-containerimage: nginxports:- containerPort: 80- name: second-containerimage: busyboxcommand: ["/bin/sh", "-c", "while true; do echo 'Hello from the second container' > /shared-data/index.html; sleep 10; done"]volumeMounts:- name: shared-datamountPath: /shared-dataports:- containerPort: 8080volumes:- name: shared-dataemptyDir: {}

六.静态Pod管理

1.配置文件方式

(1)首先找到你的kubelet的service位置

[root@k8s-master ~]# rpm -ql kubelet
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/usr/bin/kubelet
/usr/lib/systemd/system/kubelet.service   #

(2)到该目录下查看是否有conf文件

[root@k8s-master ~]# ll /usr/lib/systemd/system/kubelet.service.d/
total 4
-rw-r--r-- 1 root root 1009 Nov 11 11:03 10-kubeadm.conf
[root@k8s-master ~]# vim  /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

(3)旧版本应该会有,我的Kubernetes v1.28.2没有行命令,手动添加

Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"

这行命令中指定了mainifest-path为/etc/kubernetes/manifests,那么我们在这个目录中去创建一个pod的yaml文件,重启kubelet服务,不需要apply此文件就会自动创建该pod

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

(4)验证是否成功

[root@k8s-master ~]# cat /etc/kubernetes/manifests/static.yaml 
apiVersion: v1
kind: Pod
metadata:name: mywebnamespace: mynslabels:name: my-web
spec:containers:- name: myhttpdimage: httpdports:- name: webcontainerPort: 80[root@k8s-master manifests]# systemctl daemon-reload   #重载并重启
[root@k8s-master manifests]# systemctl restart kubelet.service [root@k8s-master ~]# kubectl get pods -n myns
NAME               READY   STATUS    RESTARTS   AGE
myweb-k8s-master   1/1     Running   0          2m41s

(5)删除时注意事项

直接删除该静态pod只会让其呈现为pending状态,需要删除该yaml文件

[root@k8s-master ~]# kubectl delete pod myweb-k8s-master -n myns
pod "myweb-k8s-master" deleted
[root@k8s-master ~]# kubectl get pods -n myns
NAME               READY   STATUS    RESTARTS   AGE
myweb-k8s-master   0/1     Pending   0          3s
[root@k8s-master ~]# rm -rf /etc/kubernetes/manifests/static.yaml 
[root@k8s-master ~]# kubectl get pods -n myns
NAME               READY   STATUS      RESTARTS   AGE
myweb-k8s-master   0/1     Completed   0          80s
[root@k8s-master ~]# kubectl get pods -n myns
No resources found in myns namespace.

2.http方式

使用“--manifest-url”参数来指定1url地址(不常用的方式),但是可以配合第一种方式使用,就cd到启动配置的mainifest-path下,使用wget把url内的配置文件下载下来即立即创建(配置文件有误的情况不会创建)

[root@k8s-master manifests]# wget http://47.115.228.189/web.yaml
--2023-11-11 17:10:02--  http://47.115.228.189/web.yaml
Connecting to 47.115.228.189:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 185 [application/octet-stream]
Saving to: ‘web.yaml’100%[========================================================================================>] 185         --.-K/s   in 0s      2023-11-11 17:10:02 (50.0 MB/s) - ‘web.yaml’ saved [185/185][root@k8s-master manifests]# kubectl get pods -n myns
NAME               READY   STATUS              RESTARTS   AGE
myweb-k8s-master   0/1     ContainerCreating   0          7s
[root@k8s-master manifests]# kubectl get pods -n myns
NAME               READY   STATUS    RESTARTS   AGE
myweb-k8s-master   1/1     Running   0          2m45s

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

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

相关文章

React的refs和表单组件总结

React的refs和表单组件 react中refs的使用字符串形式的ref react核心就在于虚拟DOM&#xff0c;也就是React中不总是直接操页面的真实DOM元素&#xff0c;并且结合Diffing算法&#xff0c;可以做到最小化页面重绘&#xff0c;但有些时候不可避免我们需要一种方法可以操作我们定…

深入OpenCV Android应用开发

前言 OpenCV是Open Source Computer Vision library(开源的计算机视觉库)的缩写。它是使用最广泛的计算机视觉库。Opencv是计算机视觉领域常用的操作函数的集合&#xff0c;其自身由C/C编写而成&#xff0c;同时也提供了对Python、Java以及任意JVM语言的封装。考虑到大部分And…

【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询(二)——前端el-pagination实现

系列文章 【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询—后端实现 文章目录 系列文章系统版本实现功能实现思路后端传入的数据格式前端el-table封装axois接口引入Element-plus的el-pagination分页组件Axois 获取后台数据 系统版本 后端&#xf…

内存映射:PS和PL DDR3的一些区别

之前写的一些资料&#xff1a; PS与PL互联与SCU以及PG082-CSDN博客 参考别人的资料&#xff1a; PL读写PS端DDR的设计_pl读写ps端ddr数据-CSDN博客 xilinx sdk、vitis查看地址_vitis如何查看microblazed地址_yang_wei_bk的博客-CSDN博客 可见&#xff0c;PS端的DDR3需要从…

【友提】2023年“思维100”编程比赛开始报名,名额有限报名抓紧

根据官方昨天发布的通知&#xff0c;2023年上海市“科学小公民”实践展示活动之“思维100”STEM应用能力编程活动&#xff08;秋季&#xff09;开始报名了&#xff0c;为便于大家了解&#xff0c;六分成长为大家整理关键信息如下。为便于叙述&#xff0c;该活动简称为思维100编…

[autojs]逍遥模拟器和vscode对接

第一步&#xff1a;启动autojs服务 第二步&#xff1a;去cmd查看ip地址&#xff0c;输入ipconfig 第三步&#xff1a;打开逍遥模拟器中的sutojs-左上角- 连接电脑&#xff0c;然后输入WLAN或者其他ip也行&#xff0c;根据自己电脑实际情况确认 此时vscode显示连接成功。我们写…

Linux文件缓冲区

文章目录 1. 缓冲区现象2. 用户级和系统级缓冲区3. 缓冲区刷新4. 为什么要有缓冲区5. 文件打印的全缓冲6. 模拟实现C语言文件标准库 本章gitee代码仓库&#xff1a;重定向、模拟C语言文件标准库 1. 缓冲区现象 我们这里分别调用了4个差不多的函数&#xff0c;但是结果是有一定差…

深度解析找不到msvcp120.dll相关问题以及解决方法

​在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行&#xff0c;给用户带来很大的困扰。那么&#xff0c;如何解决msvcp120.dll丢失的问题呢&#xff1f;本文将为大家介绍…

leetcode刷题日记:111. Minimum Depth of Binary Tree(二叉树的最小深度)

给我们一个二叉树&#xff0c;我们应该如何来求二叉树的最小深度呢&#xff1f; 二叉树的最小深度指的是叶子结点到所处的位置最小的&#xff0c;这就是二叉树的最小深度&#xff0c;也就是说我们要找的是离根结点最近的叶子结点。如果我们从根结点向下出发寻找叶子节点&#x…

overflow: auto滚动条跳到指定位置

点击对应模块跳转页面&#xff0c;滚动到对应模块&#xff0c;露出到可视范围 代码&#xff1a; scrollToCurrentCard() {// treeWrapper是包裹多个el-tree组件的父级元素&#xff0c;也是设置overflow:auto的元素let treeWrapper document.getElementsByClassName(treeWrapp…

STM32笔记—定时器

目录 一、TIM简介 二、基本定时器&#xff08;TIM6和TIM7&#xff09; 1. TIM6和TIM7简介 2. TIM6和TIM7的主要特性 3. TIM6和TIM7的功能 3.1 时基单元 3.2 计数模式 3.3 时钟源 三、通用定时器 1. TIMx(2、3、4、5)简介 2. TIMx主要功能 3. 时钟选择 4. 影子寄存…

【算法练习Day46】判断子序列不同的子序列

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 判断子序列不同的子序列总结…

450. 删除二叉搜索树中的节点

题目描述 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤&#x…

uniapp中picker 获取时间组件如何把年月日改成年月日默认时分秒为00:00:00

如图所示&#xff0c;uniapp中picker组件的日期格式为&#xff1a; 但后端要 2023-11-08 00:00:00格式 如何从2023-11-08转化为 2023-11-08 00:00:00&#xff1a;&#x1f447; const date new Date(e.detail.value);//"2023-11-17" date.setHours(0, 0, 0); // 2…

C语言从入门到精通之【数据类型和关键字】

数据类型在程序使用之前已经预先设定好了&#xff0c;在整个程序的运行过程中没有变化&#xff0c;这些称为常量&#xff08;constant&#xff09;。其他数据类型在程序运行期间可能会改变或被赋值&#xff0c;这些称为变量&#xff08;variable&#xff09;。 变量类型有几种…

复盘一个诡异的Bug

该Bug的诡异之处在于这是一个由多种因素综合碰撞之后形成的综合体。纵观整个排查过程&#xff0c;一度被错误的目标误导&#xff0c;花费大量功夫后才找到问题点所在&#xff0c;成熟的组件在没有确凿证据之前不能随意怀疑其稳定性。 前言 此前在接入两台粒径谱仪&#xff08;…

Android sqlite 使用简介

进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库&#xff0c;在app开发过程中很容易通过SQLiteOpenHelper使用数据库&#xff0c;SQLiteOpenHelper依赖于Context对象&#xff0c;但是基于uiatomator1.0和Java程序等无法获取Context的应用如何使用数据库呢…

html与django实现多级数据联动

html与django实现多级数据联动 1、流程 1、进入页面后先获取年级数据 2、选择年级后获取院级数据 3、选择院级后获取层次数据 4、选择层次数据后获取专业数据 2、html代码 <p style"margin-top: 10px;"><label>年级</label><select id"…

什么是微服务自动化测试?

什么是微服务&#xff1f; 微服务 - 也称为微服务架构 - 是一种构建方式&#xff0c;它将应用程序构建为松散耦合服务的集合&#xff0c;具有完整的业务功能。微服务架构允许连续交付/部署大型复杂应用程序。本文将概述自动微服务测试工具和最佳实践。 它还使组织能够发展其技…

Ubuntu诞生已经19年了

导读2004 年 10 月 20 日&#xff0c;Ubuntu 4.10 正式发布&#xff0c;代号‘Warty Warthog’。 2004 年 10 月 20 日&#xff0c;Ubuntu 4.10 正式发布&#xff0c;代号‘Warty Warthog’。 ▲ Ubuntu 4.10 与最新版 Ubuntu 23.10 的对比 作为 Ubuntu 第一个版本&#xff0…