【Kubernetes】kubectl详解

陈述式资源管理方法:

1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
3.kubectl 的命令大全
kubectl --help
k8s中文文档:http://docs.kubernetes.org.cn/683.html
4.对资源的增、删、查操作比较方便,但对改的操作就不容易了

kubectl常用命令

//查看版本信息

kubectl version

//查看资源对象简写

kubectl api-resources

名称,简称,api版本接口,命名空间,固定的资源类型格式

true表示支持,false表示不支持;不指定命名空间,默认为true

//查看集群信息 

kubectl cluster-info

配置kubectl自动补全

临时自动补全;xshell连接断开就会失效
#注意,< 后面没有空格
#source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)

永久自动补全
#永久自动补全;
vim ~/.bashrc
#末尾添加补全命令
source <(kubectl completion bash)
#刷新,生效
source ~/.bashrc

//node节点查看日志

journalctl -u kubelet -f

基本信息查看

kubectl get 资源名 -o 输出格式 -n 命名空间
#kubectl get <resource> [-o wide|json|yaml] [-n namespace]

json格式更友好一些

flannel是通过pod来启动的

获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)

确定资源后可以加:
        --all-namespaces 或 -A :表示显示所有命令空间,
        --show-labels :显示所有标签
        -l app :仅显示标签为app的资源
        -l app=nginx :仅显示包含app标签,且值为nginx的资源

#精确查找,标签为app=nginx-monor的pod
kubectl get pod -l app=nginx-monor -A
# app:是一种常见的标签选择器

//查看 master 节点状态

kubectl get componentstatuses
kubectl get cs

//查看命名空间

kubectl get namespace
kubectl get ns

命名空间的作用:用于允许不同 命令空间 的 相同类型 的资源 重名的

//查看default命名空间的所有资源

kubectl get all -n default

//创建命名空间app并查看

kubectl create ns app
kubectl get ns

//删除命名空间app

删除命名空间,会删除该命名空间下的所有资源,谨慎使用

kubectl delete ns app
kubectl get ns

//在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)

kubectl create deployment nginx-wl --image=nginx -n kube-public 

//查看命名空间kube-public 中的pod 信息

kubectl get pods -n kube-public

查看某个资源的详细信息

#kubectl describe deployment 资源名 -n 指定命名空间
kubectl describe deployment nginx-wl -n kube-public

登陆容器

//kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录

#进入容器
kubectl exec -it nginx-wl-67f75b9476-j74b5 bash -n kube-public

#退出容器
exit

小提示:可以先指定命名空间(-n kube-public),然后再写资源名就可以补全了

轮循访问
kubectl get pods
#登录容器,添加html页面
kubectl exec -it nginx-deployment-664f9f9c56-5jnbn
echo "this is web01" > /usr/share/nginx/html/index.html
exit
kubectl exec -it nginx-deployment-664f9f9c56-8qf6l bash
echo "this is web02" > /usr/share/nginx/html/index.html
exit
kubectl exec -it nginx-deployment-664f9f9c56-m6g88 bash
echo "this is web03" > /usr/share/nginx/html/index.html
exit

#查看服务IP和端口
kubectl get svc
#访问
curl 10.107.137.78:30000
http://192.168.67.12:32592

删除(重启)pod资源

由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来

kubectl delete pod nginx-wl-67f75b9476-j74b5 -n kube-public
kubectl get pods -n kube-public

强制删除

//若pod无法删除,总是处于terminate状态,则要强行删除pod

kubectl delete pod nginx-wl-67f75b9476-2t878 --force --grace-period=0 -n kube-public

#grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出;

--grace-period=0   表示立即终止pod

扩缩容

# 扩容
kubectl scale deployment nginx-wl --replicas=3 -n kube-public
# 缩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public

删除副本控制器

kubectl delete deployment nginx-wl -n kube-public
kubectl delete deployment/nginx-wl -n kube-public

查看资源标签

kubectl get pod --show-labels  #查看所有资源的标签
kubectl get pod -l app         #指定标签的键查看;只显示标签为app的资源
kubectl get pod -l app -A      #查看所有标签
kubectl get pod -l app=nginx-deployment #显示包含app标签且值为nginx的资源

输出每个 Pod 的标签信息

常见的标签信息有:

app: 标识应用程序名称或类型

tier: 标识应用程序的层级(例如 frontend、backend)

environment: 标识应用程序的环境(例如 development、production)

release: 标识应用程序的发布版本

version: 标识应用程序的版本号

component: 标识应用程序的组件

项目的生命周期

创建-->发布-->更新-->回滚-->删除

1、kubectl create 创建命令

●创建并运行一个或多个容器镜像。
●创建一个deployment 或job (副本控制器)来管理容器。

查看create 命令的帮助

kubectl create --help

启动 nginx 实例,暴露容器端口 80,设置副本数 3

kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all


 

2、发布 kubectl expose 命令

●将资源暴露为新的 Service

#查看命名帮助

kubectl expose --help

创建service,将service的端口映射到容器端口上

//为deployment的nginx创建service,并通过Service的8080端口转发至容器的80端口上;

Service的名称为nginx-service,类型为NodePort

kubectl expose deployment nginx --port=8080 --target-port=80 --name=nginx-service --type=NodePort

kubectl get svc

kubectl expose deployment nginx: 指定要暴露的 Deployment 的名称 "nginx"

--port=8080: 指定服务暴露的端口; 8080 端口

--target-port=80: 指定服务转发流量到的目标端口;这里也是 80 端口

--name=nginx-service: 指定创建的服务的名称; "nginx-service"

--type=NodePort: 指定服务的类型," NodePort 类型";意味着服务将会通过每个节点的 IP 地址和指定的端口暴露出来

 浏览器访问服务

http://192.168.67.12:32001
http://192.168.67.13:32001

也可以在master端通过curl来查看

curl 192.168.67.12:32001
curl 192.168.67.13:32001

------------------------------------------------------------------------------------------
Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod

service 的 type 类型:

●ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)

●NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。
每个端口只能是一种服务,端口范围只能是 30000-32767,即32768个

●LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。

●externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。 tgc.benet.com   www.benet.com 

------------------------------------------------------------------------------------------

扩展

headless clusterIP  无头模式   名称扩展

●port
port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

●nodePort
nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

●targetPort
targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

●containerPort
containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

//查看pod网络状态详细信息和 Service暴露的端口

kubectl get pods,svc -o wide

查看关联后端的节点

kubectl get endpoints

查看 service 的描述信息

kubectl describe svc nginx

在 node01 节点上操作,查看负载均衡端口

yum -y install ipvsadm
ipvsadm -Ln

#外部访问的IP和端口
TCP  192.168.67.12:32001 rr
  -> 10.244.1.12:80               Masq    1      0          0         
  -> 10.244.2.13:80               Masq    1      0          0         
  -> 10.244.2.14:80               Masq    1      0          0

#pod集群组内部访问的IP和端口
TCP  10.105.13.74:8080 rr
  -> 10.244.1.12:80               Masq    1      0          0         
  -> 10.244.2.13:80               Masq    1      0          0         
  -> 10.244.2.14:80               Masq    1      0          0

//在 node02 节点上操作,同样方式查看负载均衡端口

yum -y install ipvsadm
ipvsadm -Ln

curl 10.105.13.74:8080
curl 192.168.67.12:32001

查看访问日志

//在master01操作 查看访问日志

kubectl get pods

kubectl logs nginx-d9d8cf5c7-4gmfx
kubectl logs nginx-d9d8cf5c7-b8kpr
kubectl logs nginx-d9d8cf5c7-ln6w2

3、更新 kubectl set

●更改现有应用资源一些信息。

#查看set 命令的帮助信息
kubectl set --help

//获取修改模板

kubectl set image --help

//查看当前 nginx 的版本号

curl -I http://192.168.67.12:32001
curl -I http://192.168.67.13:32001

//将nginx 版本更新为 1.15 版本

kubectl set image deployment nginx nginx=nginx:1.15

//处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推

kubectl get pods -o wide

//再看更新好后的 Pod 的 ip 会改变

kubectl get pods -o wide

//再看 nginx 的版本号

curl -I http://192.168.67.12:32001
curl -I http://192.168.67.13:32001

4、回滚    kubectl rollout 

●对资源进行回滚管理
kubectl rollout --help

#查看历史版本
kubectl rollout history deployment nginx

#执行回滚到上一个版本
kubectl rollout undo deployment nginx

#执行回滚到指定版本
kubectl rollout undo deployment nginx --to-revision=1

#检查回滚状态
kubectl rollout status deployment nginx

#查看当前nginx版本
​curl -I http://192.168.67.12:32001
curl -I http://192.168.67.13:32001

5、删除    kubectl delete

//删除副本控制器

kubectl delete deployment nginx
kubectl get replicasets

//删除service

kubectl delete service nginx-service
kubectl get svc
kubectl get all

金丝雀发布(Canary Release)

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

金丝雀发布的思想则是将少量的请求引流到新版本上,因此部署新版本服务只需极小数的机器。验证新版本符合预期后,逐步调整流量权重比例,使得流量慢慢从老版本迁移至新版本,期间可以根据设置的流量比例,对新版本服务进行扩容,同时对老版本服务进行缩容,使得底层资源得到最大化利用

下面以deployment副本的方式进行演示

创建deployment

#创建nginx的控制器
kubectl create deployment nginx-123 --image=nginx:1.14 --port=80 --replicas=3 -n test

kubectl get svc -n test
kubectl get -n test pod -owide

暴露端口

#暴露端口
kubectl expose -n test deployment nginx-123 --port=233 --target-port=80 --type=NodePort

#查看命名空间的详细信息
kubectl get svc,pod -owide -n test

#访问测试
curl -I 10.96.110.2:233
更新前查看一下版本
#查看版本
curl -I 10.244.1.23
curl -I 10.244.2.28
curl -I 10.244.2.29

1)更新service服务

更新deployment的版本,并配置暂停deployment

#更新并配置暂停
kubectl set image deployment nginx-123 nginx=nginx:1.15 -n test && kubectl rollout pause deployment nginx-123 -n test

#查看
kubectl get pod -n test -owide

#再次查看版本
curl -I 10.244.1.14
curl -I 10.244.1.23

观察更新状态

#观察更新状态
kubectl rollout status deployment/nginx-monor -n kube-public

2)监控更新过程

监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

#查看test命名空间下的pod
kubectl get pod -n test -owide

#查看test命名空间中nginx-123的所有端点
kubectl describe endpoints -n test nginx-123

暴露一个新的service端口

kubectl expose -n test deployment nginx-123 --name=nginx-456 --port=255 --target-port=80 --type=NodePort

kubectl get svc -n test

创建yaml模板文件

#将nginx-456服务的模板导入 nginx-456.yaml文件
kubectl get svc -n test nginx-456 -oyaml > /opt/nginx-456.yaml

#查看标签
kubectl get pod --show-labels -n test

#修改yaml文件
vim /opt/nginx-456.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-123
  name: nginx-456
  namespace: test
spec:
  clusterIP: 10.97.70.168
  clusterIPs:
  - 10.97.70.168
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30942
    port: 255
    protocol: TCP
    targetPort: 80
  selector:
    pod-template-hash: 55c6586f87
  sessionAffinity: None
  type: NodePort

通过yaml文件创建新的pod

kubectl get svc -n test

#删除更新时创建的nginx-456
kubectl delete svc -n test nginx-456
kubectl get svc -n test

#通过yaml文件,创建新的nginx-456
kubectl apply -f /opt/nginx-456.yaml
kubectl get svc -n test

#查看所有关联的端口
kubectl get endpoints -n test nginx-456

查看版本

查看 yaml编辑的pod的版本

kubectl get svc -n test

#查看nginx-456 的版本
curl -I 10.97.70.168:255

#查看nginx-123 的版本
curl -I 10.96.110.2:233
#会发现可以轮循到nginx-456的服务

版本分离

仿照对nginx-456的操作,生成nginx-123的yaml模板

#导出nginx-123服务为nginx-123.yaml文件模板
kubectl get svc -n test nginx-123 -o yaml > /opt/nginx-123.yaml

#查看标签
kubectl get pod -n test --show-labels

#修改nginx-123.yaml文件;删除+修改
vim /opt/nginx-123.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-123
  name: nginx-123
  namespace: test
spec:
  clusterIP: 10.96.110.2
  clusterIPs:
  - 10.96.110.2
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32276
    port: 233
    protocol: TCP
    targetPort: 80
  selector:
    pod-template-hash: 74d4754856
  sessionAffinity: None
  type: NodePort

通过yaml文件重新生成nginx-123

kubectl get svc -n test

#删除
kubectl delete svc -n test nginx-123
kubectl get svc -n test

#根据yaml文件创建
kubectl apply -f /opt/nginx-123.yaml
kubectl get svc -n test

#访问测试
curl 10.96.110.2:233
#就不会轮循到nginx-456(新版本)了

3)确保更新的pod没问题了,继续更新

#状态测试,可以不做
#kubectl rollout status deployment -n test nginx-123

#打开一个新的master页面;进行动态查看
kubectl get pod -w -n test

#回到原来的master页面;继续更新
kubectl rollout resume deployment -n test nginx-123

#回到新的master页面查看

4)查看最后的更新情况

#查看nginx-123 副本的版本
kubectl get pod -n test

#更新完毕,查看nginx版本
curl -I 10.244.2.30
curl -I 10.244.2.31
curl -I 10.244.1.24

访问测试

准备要访问的html文件

kubectl get pod -owide -n test

#在三个容器中分别设置一个html页面;注意内容要不一样
kubectl exec -it -n test nginx-123-55c6586f87-fhnhl bash
#下面图中的第一个红框标错地方了

echo "new web01" > /usr/share/nginx/html/bash

访问测试

kubectl get svc -n test

#旧service无法访问
curl 10.96.110.2:233

#由新的service提供服务
curl 10.97.70.168:255

kubectl get svc -n test

#这是我node01的IP地址
curl 192.168.67.12:32276

curl 192.168.67.12:30942

声明式管理方法:

1.适合于对资源的修改操作
2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
4.语法格式:kubectl create/apply/delete -f xxxx.yaml

//查看资源配置清单

kubectl get deployment nginx -o yaml

//解释资源配置清单

kubectl explain deployment.metadata
#nginx-456的服务信息
kubectl get service nginx-456 -o yaml -n test

kubectl explain service.metadata

//修改资源配置清单并应用

离线修改:

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

kubectl get service -n test nginx-123 -o yaml > /opt/nginx-new.yaml
vim /opt/nginx-new.yaml				#修改port: 8080
kubectl get svc -n test
kubectl delete -f /opt/nginx-new.yaml
kubectl apply -f /opt/nginx-new.yaml
kubectl get svc -n test
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-123
  name: nginx-123
  namespace: test
spec:
  ports:
  - nodePort: 32276
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    pod-template-hash: 74d4754856
  sessionAffinity: None
  type: NodePort

在线修改:

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改

//删除资源配置清单

陈述式删除:

kubectl delete service nginx-123

声明式删除:

kubectl delete -f /opt/nginx-123.yaml

总结

部署流程

1.初始化机器

关闭防火墙规则,关闭selinux,关闭swap交换,调整内核参数调优,时间同步

2.安装服务

yum安装docke,

yum安装kubeadm,kubelet和kubectl

4.node节点

kube-proxy,Etcd

通过镜像拉取服务,来安装服务

node节点加入到集群;需要带着认证证书

签发证书后,.kube

在本地master上也要安装,网络插件flannel

命令

k8s 不需要swap空间,所以一定要关掉

通过逗号" , " 可以同时使用多个命令查看

kubectl get pods,svc -o wide

配置kubectl自动补全

#临时自动补全
source <(kubectl completion bash)

#永久自动补全;
vim ~/.bashrc
#末尾添加补全命令
source <(kubectl completion bash)
#刷新,生效
source ~/.bashrc

查看版本信息
kubectl version
​
查看资源对象简写
kubectl api-resources
​
查看集群信息
kubectl cluster-info
​
node节点查看日志
journalctl -u kubelet -f
​
​获取资源的信息
kubectl get 资源名/资源类型 -o 输出格式 -n 命名空间
确定资源名/类型后可以加:
        --all-namespaces 或 -A :表示显示所有命令空间,
        --show-labels :显示所有标签
        -l app :仅显示标签为app的资源
        -l app=nginx :仅显示包含app标签,且值为nginx的资源

查看master节点的状态
kubectl get cs
​
#精确查找,标签为app=nginx-monor的pod
kubectl get pod -l app=nginx-monor -A
# app:是一种常见的标签选择器

​命名空间

查看命名空间
kubectl get ns
#命名空间:用于允许不同命名空间 相同类型的资源重名
​
查看指定命名空间的所有资源
kubectl get all -n default
kubectl get --all-ns
​
创建命名空间并查看
kubectl creates ns app
kubectl get ns
​
删除命名空间
kubectl delete ns app
kubectl 

副本控制器

创建副本控制器(deployment),在kube-public命名空间中
kubectl create deployment nginx-monor --image=nginx -n kube-public 
​
查看资源的详细信息
kubectl describe deployment 控制器名/pods -n 命名空间
kubectl describe deployment nginx-monor -n kube-public
​
登录容器
#相比docker,k8s可以跨主机登录容器
kubectl exec -it nginx-monor-xxxxxx-xxxxx bash -n kube-public
​
删除/重启pod资源
#由于存在副本控制器,即使删除pod,也会重新拉起一个新的pod
kubectl delete pod nginx-monor-xxxxx-xxxxx -n kube-public
​
强制删除
kubectl delete pod nginx-monor-xxxxx-xxxxx --force --grace-period=0 -n kube-public
#强制删除还删不掉,说明这个pod是一个副本;需要通过删除副本控制器才能真正做到删除
​
扩容和缩容
kubectl scale deployment nginx-monor --replicas=3 -n kube-public
kubectl scale deployment nginx-monor --replicas=1 -n kube-public
​
删除副本控制器
kubectl delete deployment nginx-monor -n kube-public
kubectl delete deployment/nginx-monor -n kube-public
​
查看资源标签
kubectl get pod --show-labels
kubectl get pod --show-labels  #查看所有资源的标签
kubectl get pod -l app         #指定标签的键查看;只显示标签为app的资源
kubectl get pod -l app -A      #查看所有标签
kubectl get pod -l app=nginx-deployment #显示包含app标签且值为nginx的资源
​暴露端口
创建控制器 >创建nginx实例,暴露容器80端口,设置副本数为3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
​
创建service,将sevice端口映射到容器端口上
kubectl expose deployment nginx --port=8080 --target-port=80 --name=nginx-monor --type=NodePort
​
访问
curl :8080
http:// :自动分配的端口
​service服务端口
查看pod网络状态详细信息和 Service暴露的端口
kubectl get pods,svc -o wide
​
查看关联后端的节点
kubectl get endpoints
​
查看 service 的描述信息
kubectl describe svc nginx
​
在 node01 节点上操作,查看负载均衡端口
yum -y install ipvsadm
ipvsadm -Ln
​
在master01操作 查看pod访问日志
kubectl get pods
​
kubectl logs nginx-d9d8cf5c7-4gmfx
kubectl logs nginx-d9d8cf5c7-b8kpr
kubectl logs nginx-d9d8cf5c7-ln6w2
​
查看服务版本号
curl -I http://nodeIP地址:服务端口号

端口总结

● port
port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service
​
● nodePort
nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。
​
● targetPort
targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。
​
● containerPort
containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

陈述:一条命令实现

声明:yaml文件实现

先加 -n 指定命名空间,就能补全该命名空间下的deployment

命令忘了可以通过 "kubectl 选项 -help" 来查看命令帮助

百度

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

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

相关文章

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK&#xff1f; UE官方给我们提供了很多对于IK处理的节点&#xff0c;比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等&#xff0c;但是看到这&#xff0c;很多人就好奇了&#xff0c;什么是IK&#xff1f; 首先我们来看看虚幻小白人的骨…

yolov8训练自己数据集时出现loss值为nan。

具体原因目前暂未寻找到。 解决办法 将参数amp改成False即可。 相关资料&#xff1a; https://zhuanlan.zhihu.com/p/165152789 https://github.com/ultralytics/ultralytics/issues/1148

如何搭建一个vue项目(完整步骤)

搭建一个新的vue项目 一、安装node环境二、搭建vue项目环境1、全局安装vue-cli2、进入你的项目目录&#xff0c;创建一个基于 webpack 模板的新项目3、进入项目&#xff1a;cd vue-demo&#xff0c;安装依赖4、npm run dev&#xff0c;启动项目 三、vue项目目录讲解四、开始我们…

正点原子LWIP学习笔记(一)lwIP入门

lwIP入门 一、lwIP简介&#xff08;了解&#xff09;二、lwIP结构框图&#xff08;了解&#xff09;三、如何学习lwIP&#xff08;熟悉&#xff09; 一、lwIP简介&#xff08;了解&#xff09; lwIP是一个小型开源的TCP/IP协议栈 阉割的TCP/IP协议 TCP/IP协议栈结构&#xff0…

57. UE5 RPG 处理AI敌人转向以及拾取物品的问题

在上一篇文章中&#xff0c;我们实现了使用AI行为树控制敌人进行移动&#xff0c;它们可以一直跟随玩家&#xff0c;虽然现在还未实现攻击。但在移动过程中&#xff0c;我发现了有两个问题&#xff0c;第一个是敌人转向的时候很僵硬&#xff0c;可以说是瞬间转向的&#xff0c;…

【kubernetes】多 master 高可用集群架构部署

目录 前言 一、环境部署 二、master02 节点部署 1、拷贝相关文件 2、修改配置文件 3、启动各服务并设置开机自启 4、 查看node节点状态 三、负载均衡部署 1、部署 nginx 服务 1.1 编译安装 nginx 1.2 修改 nginx 配置文件 2、部署 keepalived 服务 2.1 yum安装 ke…

python打包exe,通过文件动态传参运行exe【拿来即用】

配置虚拟环境 安装包&#xff1a;pip install pipenv 创建虚拟环境&#xff1a;创建一个新文件夹&#xff0c;在此目录&#xff0c;打开cmd&#xff0c;输入&#xff1a;pipenv install&#xff0c; 进入虚拟环境&#xff1a;pipenv shell 安装所需的依赖包&#xff1a;pip in…

无人机监测系统:天空之眼,精准掌握地球脉动

在当今信息化快速发展的时代&#xff0c;无人机技术以其独特的优势&#xff0c;正在成为资源调查、环境监测和规划支持的重要工具。无人机监测系统通过搭载多种传感器和设备&#xff0c;能够快速、高效地获取地表信息&#xff0c;为决策提供科学依据。 项目背景 随着全球环境…

VScode解决报错“Remote-SSH XHR failed无法访问远程服务器“的方案

VScode解决报错"Remote-SSH XHR failed无法访问远程服务器"的方案 $ ls ~/.vscode-server/bin 2ccd690cbff1569e4a83d7c43d45101f817401dc稳定版下载链接&#xff1a;https://update.code.visualstudio.com/commit:COMMIT_ID/server-linux-x64/stable 内测版下载链接…

51建模网AR虚拟试用,让网购不再只靠想象!

在数字化的浪潮中&#xff0c;网购已成为现代人生活的一部分。然而&#xff0c;传统的网购模式常常因为无法直接试穿、试用商品&#xff0c;导致买家在收到商品后感到失望&#xff0c;特别是面对大件家居产品时&#xff0c;仅凭屏幕上的图片和尺寸描述&#xff0c;很难准确地把…

阿里云数据库 SelectDB 版全面商业化,开启现代化实时数据仓库的全新篇章

2024 年 5 月 21 日&#xff0c;由阿里云联合飞轮科技共同举办的「阿里云数据库 SelectDB 版商业化产品发布会」于线上召开。阿里巴巴集团副总裁、阿里云数据库产品事业部负责人李飞飞宣布&#xff0c;阿里云数据库 SelectDB 版在中国站及国际站全面发布&#xff0c;正式开启商…

Web应用防火墙的重要性

网络安全是一个永恒的话题&#xff0c;尤其是在未知威胁不断涌现的情况下。企业网络安全是保障业务稳定运行的基础&#xff0c;Web应用防火墙(WAF)是企业网络安全的重要屏障&#xff0c;其性能直接影响到网络服务的质量和安全。 Web应用防火墙是什么&#xff1f; Web应用防火墙…

RS8751XF功能和参数介绍及PDF资料

以下是关于RS8751XF的功能和参数的介绍&#xff1a; 功能描述: 高速、宽带单通道运算放大器 轨到轨输入和输出&#xff0c;确保较大的动态范围 极高的增益带宽乘积&#xff08;GBW&#xff09;&#xff1a;250 MHz&#xff0c;适合高频应用 极高的压摆率&#xff08;SR&#xf…

【UE HTTP】“BlueprintHTTP Server - A Web Server for Unreal Engine”插件使用记录

1. 在商城中下载“BlueprintHTTP Server - A Web Server for Unreal Engine”插件 该插件的主要功能有如下3点&#xff1a; &#xff08;1&#xff09;监听客户端请求。 &#xff08;2&#xff09;可以将文件直接从Unreal Engine应用程序提供到Web。 &#xff08;3&#xff…

Vision Mamba论文阅读(主干网络)

这几天被Mamba刷屏了&#xff0c;又由于本人是做视觉方面任务的&#xff0c;固来看看mamba在视觉上的应用。 今天分享的是Vision Mamba: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 论文网址&#xff1a;https://arxiv.or…

【蓝桥杯】

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int a,b,c,d; void solve() {char op;std::cin>>op;if(opA){std::string s;for(int i1;i&l…

vue3结合element-plus之如何优雅的使用表格

背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…

5月23日 网络编程day6

1.IO多路复用的原理&#xff1f; 答&#xff1a;将文件描述符放入一个集合中&#xff0c;当集合中有事件产生&#xff0c;移除其他文件描述符&#xff0c;执行剩下的文件描述符所对应的任务&#xff0c;往复循环。 2.实现IO多路复用可以使用哪些函数完成&#xff1f; 答&…

【设计模式】JAVA Design Patterns——Balking(止步模式)

&#x1f50d;目的 止步模式用于防止对象在不完整或不合适的状态下执行某些代码。 &#x1f50d;解释 真实世界例子 洗衣机中有一个开始按钮&#xff0c;用于启动衣物洗涤。当洗衣机处于非活动状态时&#xff0c;按钮将按预期工作&#xff0c;但是如果已经在洗涤&#xff0c;则…

嵌入式科普(18)Ubuntu在移动硬盘的安装和启动

目录 一、概述 二、应用场景 三、移动硬盘安装Ubuntu 3.1 移动硬盘格式化 3.2 VMware安装Ubuntu到移动硬盘 四、电脑BIOS启动移动硬盘Ubuntu 五、从VMware启动移动硬盘Ubuntu 六、问题解决(坑)和思考提问 嵌入式科普(18)Ubuntu在移动硬盘的安装和启动 一、概述 在移动硬…