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相关文章:
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&…...
4.4.2 结构可以将 string类作为成员吗
// structure template { }; 4.4.2 结构可以将 string类作为成员吗 可以将成员name指定为string类对象而不是字符数组吗?即可以像下面这样声明结构吗? #include <string> struct inflatable std :: string name; float volume; double price; 大体上说,答案是肯定的。实…...
npm install 安装总结
npm install moduleName 会把moduleName 包安装到node_modules目录中不会修改package.json之后运行npm install命令时,不会自动安装moduleName npm install moduleName -g 安装模块到全局,不会在项目node_modules目录中保存模块包。不会将模块依赖写入de…...
二十三种设计模式全面解析-组合模式与享元模式的结合应用:实现对象的共享和高效管理
在前文中,我们介绍了组合模式的基本原理和应用,以及它在构建对象结构中的价值和潜力。然而,组合模式的魅力远不止于此。在本文中,我们将继续探索组合模式的进阶应用,并展示它与其他设计模式的结合使用,以构…...
jenkins分步式构建环境(agent)
rootjenkins:~# netstat -antp|grep 50000 tcp6 0 0 :::50000 ::😗 LISTEN 5139/java 1.52 安装Jenkins rootubuntu20:~# dpkg -i jenkins_2.414.3_all.deb 配置各种类型的Agent的关键之处在于启动Agent的方式 ◼ JNLP Agent对应着“通过Java Web启动代理”这种方…...
前端开发学习指南
前端是一个看似入门门槛不高,但要学好很难的领域。前端的知识体系庞杂又松散,技术演进快,如果摸不清脉络的话很容易陷入盲人摸象的困境甚至跑偏。 其实只要掌握了正确的方法,学习前端和学好前端就只是个时间问题,希望下…...
环境变量小节
这是写的第二篇环境变量博客,写了一年多了,第一次出现把自己博客删了的情况,不知道为什么明明发表了,然后就把草稿箱和回收站的删了,结果晚上发现没发表,回收站删除是无法找回的,以后还是要慎重…...
React Native适配Xcode 15 iOS 17.0+
iOS 17.0 Simulator(21A328)下载失败 App Store 更新到 Xcode15 后,无法运行模拟器和真机。需要下载iOS 17对应的模拟器。Xcode中更新非常容易中断失败,可以在官网单独下载iOS 17模拟器文件,例如:iOS_17.0.1_Simulator_Runtime.d…...
Install Docker in Linux
Docker官网链接: https://docs.docker.com/ 1.确定Linux版本 新版本的Docker对Linux系统版本有一定的要求。如果Linux的发行版系统是centOS,安装最新版的docker需要centOS 7以上的系统。 在Docker安装帮助页面查看支持的系统版本。 Docker帮助页面:https://docs…...
Spring源码-循环依赖
循环依赖问题 先分析下bean生命周期, 简化版: 1. 扫描, 获取所有的BeanDefinition,存入BeanDefinitionMap 2. 遍历BeanDefinition, 准备创建bean 3. 推断构造方法, 通过反射, 实例化bean对象(原始对象) 4. 属性赋值 5. 初始化前, 初始化 6. 初始化后, 可能AOP 7. 把经过…...
Excel下拉填充时,如何使得数字不递增?
问题描述:Excel下拉填充时,如何使得数字不递增? 解决办法:先下拉填充数据之后,看到最后一个单元格的右下角有个填充设置的符号,右键选择复制单元格即可。其中这里的填充序列就是递增数字的操作。...
ThreadLocal原理以及内存泄露问题
1、ThreadLocal实现原理 1、每个线程中有一个ThreadLocalsMap,这是一个哈希表的结构里面有很多entry(也就是k-v),当我们使用ThreadLocal进行set值的时候,会将这个threadLocal设置为key,然后值设置为value放入ThreadLocalsMap,key为弱引用&am…...
值之字符串(string)
一、创建字符串 """单引号、双引号、三引号均能创建字符串""" s kidney s "kidney" s """kidney""" # 以上三种方法输出相同: kidney"""将数值转为字符串""&q…...
pytoch安装指定版本教程pytorch1.3安装笔记
一、先生成一个环境 如果电脑里安装了其他的torch版本,另外生成一个环境可以防止原先torch版本被替换掉。 打开conda的终端窗口输入以下命令就可以生成一个名为torch_1.3的环境: conda create -n torch_1.3 python3.6 输入以下命令进入到torch_1.3的…...
k8s 裸金属集群部署metalLB软负载均衡 —— 筑梦之路
metalLB 官方网站 Repo:https://github.com/metallb/metallb 官网:https://metallb.universe.tf/installation metalLB解决什么问题? MetalLB 是一个用于裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议。 k8s 并没有为裸…...
uni-app使用echarts数据不更新
问题描述 uni-app使用echarts图表,接口请求数据更新后,图表不刷新。 解决方案 更新option前先调用clear() clear():清空当前实例,会移除实例中所有的组件和图表。 initChart() {this.gaugeChart echarts.init(document.getE…...
单挑特斯拉,华为智选车迈入第二阶段
文丨刘俊宏 编丨王一粟 华为智选车的节奏越来越快。 11月9日,华为跟奇瑞打造的首款C级纯电轿车智界S7发布,预售价为25.8万起。 在发布会上,华为常务董事、终端BG CEO、智能汽车解决方案BU董事长余承东采取手机以往最惯用的对标营销手法&a…...
acwing算法基础之搜索与图论--有向图的拓扑序列
目录 1 基础知识2 模板3 工程化 1 基础知识 拓扑序列:针对有向图而言,该序列内,所有边都是从前指向后的。 如果存在环,那么该图一定不存在拓扑序列。否则,一定存在拓扑序列。 有向图中的入度和出度。 入度为0的结点…...
Unity之NetCode多人网络游戏联机对战教程(7)--联机概念理解权威性Authority
文章目录 前言IsOwner权威 / AuthoritativeIsHostIsServerIsClientIsLocalPlayer 前言 在联机游戏中,常见的模式有Peer-to-Peer, Client与Server,也就是CS架构。NetCode基于CS架构开发,下面讲解一些概念知识。在NetCode中,会涉及…...
Go并发编程(上)
目录 一、go语言当中的协程 二、MPG模型介绍 三、Goroutine 的使用 3.1 协程的开启 3.2 优雅地等待子协程结束 四、捕获子协程的panic 五、管道Channel 5.1、认识管道 5.2、Channel的遍历和关闭 5.3 、用管道实现生产者消费者模型 5.4、Channel一些使用细节和注意事…...
从响应头到恶意请求:手把手教你三种手工识别WAF的‘土方法’,比工具更隐蔽
从响应头到恶意请求:手工识别WAF的三种隐蔽技巧 在Web安全测试中,了解目标网站是否部署了WAF(Web应用防火墙)是至关重要的一步。与依赖自动化工具不同,手工识别方法更加隐蔽,特别适合在环境受限或需要保持低…...
【愚公系列】《OpenClaw实战指南》010-高效沟通与协作:让邮件、会议、 日程不再占用你的时间(跨平台消息聚合)
💎【行业认证权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋&am…...
某宝登录密码加密逆向实战——从password2到st码的完整流程解析
1. 淘宝登录加密机制概述 淘宝作为国内最大的电商平台,其登录系统采用了多重安全防护措施。其中password2参数是整个登录流程中最关键的加密环节,它通过RSA算法对用户明文密码进行非对称加密。这种设计能有效防止密码在传输过程中被截获,即使…...
微服务架构与云原生开发:Guia do Desenvolvedor Back-end高级架构指南
微服务架构与云原生开发:Guia do Desenvolvedor Back-end高级架构指南 【免费下载链接】guiadobackend Nesse guia voc encontrar tudo para se torna um desenvolvedor back-end, dessa maneira, encontrar mapas mentais, cursos, trilhas e outras ferramentas p…...
嵌入式开发中APQP框架的实践与优化
1. APQP框架与嵌入式开发的融合基础在汽车电子领域,高级产品质量规划(APQP)早已成为产品开发的金标准。但当我第一次尝试将这套方法论移植到嵌入式软件开发时,发现传统硬件开发思维与软件工程实践存在显著鸿沟。经过多个汽车ECU项…...
用周立功CAN分析仪抓包解析电动汽车充电握手报文(BMS/充电机通信实战)
电动汽车充电握手报文解析实战:从CAN抓包到BMS通信全解密 电动汽车充电过程中,BMS(电池管理系统)与充电机之间的通信就像两个陌生人在初次见面时的握手——需要确认身份、交换基本信息,并达成充电协议。而这一切&#…...
PLM系统在环保合规设计中的关键作用与实施路径
1. 环保合规设计的行业挑战与PLM解决方案价值在电子产品和汽车制造业,材料合规管理已成为产品设计的核心环节。过去五年间,全球新增了47项与有害物质管控相关的法规,其中中国RoHS 2.0和欧盟REACH法规的更新频率达到每年2-3次。某国际汽车零部…...
【Unity】解决UGUI的Button无法点击/点击无反应的排查方案
1.UGUI与用户实现交互的基本原理当用户触摸/点击屏幕的时候,会从屏幕接触的那个点,从相机发射一条射线,如果射线中途有UI元素会阻挡射线(Raycast Target),则会根据实际情况执行UI交互的行为。我们可以根据这…...
2025必备!5款免费AI论文检测工具实测,低查重高原创一站搞定
本文整理了目前学术场景下实用性拉满的AI论文辅助工具,覆盖AIGC检测、降重、降AI率全流程需求,帮你轻松应对论文查重与AI检测双重关卡。 在学术研究与论文写作过程中,内容原创性、无抄袭风险是最基础的要求。近年来随着AI写作工具的普及&…...
2025最权威的AI论文工具推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对知网AI检测系统的降重需求,实现可通过以下技术路径:首先…...
