云原生(八)、Kubernetes基础(一)

K8S 基础

# 获取登录令牌
kubectl create token admin --namespace kubernetes-dashboard

1、 NameSpace

Kubernetes 启动时会创建四个初始名字空间

default:Kubernetes 包含这个名字空间,以便于你无需创建新的名字空间即可开始使用新集群。

kube-node-lease: 该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubele发送心跳, 由此控制面能够检测到节点故障。

kube-public:所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。 该名字空间主要留为集群使用,以便某些资源需要在整个集群中可见可读。 该名字空间的公共属性只是一种约定而非要求。

kube-system:该名字空间用于 Kubernetes 系统创建的对象。

常用命令
#获取命名空间
[root@k8s-master ~]# kubectl get ns
NAME                   STATUS   AGE
default                Active   46h
kube-node-lease        Active   46h
kube-public            Active   46h
kube-system            Active   46h
kubernetes-dashboard   Active   46h#获取指定命名空间下的pod,不传默认defaultkubectl get -n kube-system pod #创建命名空间kubectl create ns xiaoli
#删除命名空间   这样删除会将命名空间下的服务资源一并删除,属于危险操作kubectl delete ns xiaoli 

使用yaml创建

 [root@k8s-master ~]# vim xiaoli.yaml
[root@k8s-master ~]# cat xiaoli.yaml 
apiVersion: v1
kind: Namespace
metadata:name: xiaoli
[root@k8s-master ~]# kubectl apply -f xiaoli.yaml 
namespace/xiaoli created
yaml文件概述
#应用yaml文件指定的资源
#区别:使用create创建资源是一次性的,如果使用app1y创建,后期修改yam1文件再次执行apply可以实现更新资源
kubectl create -f xxx.yaml
kubectl apply -f xxx.yaml
#删除yam1文件指定的资源
kubectl delete -f xxx.yaml
#查看资源的yam1格式信息
kubectl get 资源名称 -o yaml
#直接修改资源对应的yam1文件,并用kubectl ap)ly -f xxx.yam] 文件使之生效
# 注意:当apply不生效时,先使用delete清除资源再使用apply创建资源

2、Pod

Pod:运行中的一组容器,Pod是kubenetes中应用的最小单位,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支持或扩展pod对象功能的。

知识了解:
每一个 Pod 都有一个特殊的被称为"根容器”的 Pause容器。Pause容器对应的镜像属于 Kubernetesk8s不会直接处理容器,而是 Pod。
也就导应用程序Pod是多进程设计,运用多个应用程序一个Pod里面有多个容器,而一个容器里面运行一个平台的一部分

Pod的创建和使用

[root@k8s-master ~]# kubectl run nginx01 --image=nginx
pod/nginx01 created
[root@k8s-master ~]# kubectl get pod
NAME      READY   STATUS              RESTARTS   AGE
nginx01   0/1     ContainerCreating   0          18s[root@k8s-master ~]# kubectl describe pod nginx01
Name:             nginx01
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node2/192.168.13.66
Start Time:       Thu, 11 Apr 2024 15:18:52 +0800
Labels:           run=nginx01
Annotations:      cni.projectcalico.org/containerID: 988a58cf1c04de31abadf12c9440fd8e19857be9a5bd79440b0893a70f153c2bcni.projectcalico.org/podIP: 192.168.169.130/32cni.projectcalico.org/podIPs: 192.168.169.130/32
Status:           Running
IP:               192.168.169.130
IPs:IP:  192.168.169.130
Containers:nginx01:Container ID:   docker://1a3ce0a1b4f470ba78c99bfae7f7558eb8c5aeebc180465011bd47bd36ecc173Image:          nginxImage ID:       docker-pullable://nginx@sha256:b72dad1d013c5e4c4fb817f884aa163287bf147482562f12c56368ca1c2a3705Port:           <none>Host Port:      <none>State:          RunningStarted:      Thu, 11 Apr 2024 15:20:46 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-qszgb (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:kube-api-access-qszgb:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  3m4s  default-scheduler  Successfully assigned default/nginx01 to k8s-node2Normal  Pulling    3m2s  kubelet            Pulling image "nginx"Normal  Pulled     70s   kubelet            Successfully pulled image "nginx" in 1m52.287s (1m52.287s including waiting)Normal  Created    70s   kubelet            Created container nginx01Normal  Started    70s   kubelet            Started container nginx01
[root@k8s-master ~]# 
# 也可以在dashboard中,也可以通过界面化的方式查看详细
# 日志
kubectl logs nginx01

yaml 创建

[root@k8s-master ~]# vim nginx-cre.yaml 
[root@k8s-master ~]# cat nginx-cre.yaml 
apiVersion: v1
kind: Pod
metadata: name: nginx02labels:run: nginx02
spec:containers:- image: nginxname: nginx02
[root@k8s-master ~]# kubectl apply -f nginx-cre.yaml 

访问pod中的应用

# kubectl get pod -owide
# 默认馋看default命名空间下的pod -a参数查看所有
[root@k8s-master ~]# kubectl get pod -owide
NAME      READY   STATUS    RESTARTS   AGE    IP                NODE        NOMINATED NODE   READINESS GATES
nginx01   1/1     Running   0          23m    192.168.169.130   k8s-node2   <none>           <none>
nginx02   1/1     Running   0          9m2s   192.168.36.66     k8s-node1   <none>           <none>[root@k8s-master ~]# curl 192.168.169.130
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
#通过ip+端口查看pod下运行的应用#进入容器,与docker的命令基本一致
kubectl exec -it nginx01 -- /bin/bash

一个pod中运行多个容器

[root@k8s-master ~]# vim multiServer.yaml 
[root@k8s-master ~]# kubectl apply -f multiServer.yaml 
pod/web-mul created
[root@k8s-master ~]# cat multiServer.yaml 
apiVersion: v1
kind: Pod
metadata:name: web-mullabels:run: web-mul
spec:containers:- image: nginxname: nginx- image: tomcat:8.5.92name: tomcat
[root@k8s-master ~]# kubectl get pod -owide
NAME      READY   STATUS    RESTARTS      AGE   IP                NODE        NOMINATED NODE   READINESS GATES
nginx01   1/1     Running   0             44m   192.168.169.130   k8s-node2   <none>           <none>
nginx02   1/1     Running   0             29m   192.168.36.66     k8s-node1   <none>           <none>
web-mul   2/2     Running   2 (64s ago)   11m   192.168.169.131   k8s-node2   <none>           <none># 192.168.169.131:80 192.168.169.131:8080 可以访问多个服务

Pod就像是一个小型的linux环境

3、Deployment

控制器,用于管理多个Pod

为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod而是通过管理replicaset来间接管理pod,即:deployment管理replicaset,replicaset管理pod。

所以deployment比replicaset的功能更强大,
通过deployment,使 Pod 拥有多副本、自愈、扩缩容等能力。

请添加图片描述

自愈能力

# 创建
[root@k8s-master ~]# kubectl create deployment nginx03 --image=nginx
deployment.apps/nginx03 created#拥有自愈能力, nginx03无法删除,删除后会自启一个新尾缀的服务
[root@k8s-master ~]# kubectl get pod -owide
NAME                       READY   STATUS    RESTARTS      AGE   IP                NODE        NOMINATED NODE   READINESS GATES
nginx03-5c48c5c8cd-mjvqn   1/1     Running   0             32s   192.168.36.67     k8s-node1   <none>           <none>
[root@k8s-master ~]# kubectl delete pod nginx03-5c48c5c8cd-mjvqn
pod "nginx03-5c48c5c8cd-mjvqn" deleted
[root@k8s-master ~]# kubectl get pod -owide
NAME                       READY   STATUS    RESTARTS      AGE    IP                NODE        NOMINATED NODE   READINESS GATES
nginx03-5c48c5c8cd-88tlv   1/1     Running   0             102s   192.168.36.68     k8s-node1   <none>           <none>#所以要通过deployment删除
[root@k8s-master ~]# kubectl get deploy -n default
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
nginx03   1/1     1            1           6m29s
[root@k8s-master ~]# kubectl delete deploy nginx03 -n default
deployment.apps "nginx03" deleted

多副本能力

[root@k8s-master ~]# kubectl create deployment nginx-rep --image=nginx --replicas=3
deployment.apps/nginx-rep created
[root@k8s-master ~]# kubectl get deploy
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-rep   3/3     3            3           20s# 生成的每个pod有各自的ip
[root@k8s-master ~]# kubectl get pod -owide
NAME                         READY   STATUS    RESTARTS      AGE    IP                NODE        NOMINATED NODE   READINESS GATES
nginx-rep-6cc66f8b5f-2d4gl   1/1     Running   0             111s   192.168.36.70     k8s-node1   <none>           <none>
nginx-rep-6cc66f8b5f-7lzfj   1/1     Running   0             111s   192.168.36.69     k8s-node1   <none>           <none>
nginx-rep-6cc66f8b5f-skd92   1/1     Running   0             111s   192.168.169.132   k8s-node2   <none>           <none>#k8s的deployment和pod之间是如何一一映射的?
#通过LABELS中的hash值映射
[root@k8s-master ~]# kubectl get replicaset --show-labels
NAME                   DESIRED   CURRENT   READY   AGE    LABELS
nginx-rep-6cc66f8b5f   3         3         3       5m8s   app=nginx-rep,pod-template-hash=6cc66f8b5f
[root@k8s-master ~]# kubectl get pod --show-labels
NAME                         READY   STATUS    RESTARTS      AGE     LABELS
nginx-rep-6cc66f8b5f-2d4gl   1/1     Running   0             5m15s   app=nginx-rep,pod-template-hash=6cc66f8b5f
nginx-rep-6cc66f8b5f-7lzfj   1/1     Running   0             5m15s   app=nginx-rep,pod-template-hash=6cc66f8b5f
nginx-rep-6cc66f8b5f-skd92   1/1     Running   0             5m15s   app=nginx-rep,pod-template-hash=6cc66f8b5f

使用yaml创建

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:run: nginx-deployment
spec:replicas: 3selector:matchLabels :app: nginx-deploymenttemplate:metadata:labels:app: nginx-deploymentspec:containers:- image: nginxname: nginx
[root@k8s-master ~]# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
certificates.k8s.io/v1
coordination.k8s.io/v1
crd.projectcalico.org/v1
discovery.k8s.io/v1
events.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1beta2
flowcontrol.apiserver.k8s.io/v1beta3
networking.k8s.io/v1
node.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
v1
[root@k8s-master ~]# 

扩缩容

[root@k8s-master ~]# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           5h11m
[root@k8s-master ~]# kubectl scale deploy/nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled
[root@k8s-master ~]# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/5     5            3           5h12m

请添加图片描述

自愈

如果子节点的机器宕机了,会在其他机器中拉起宕调的服务。

K8s会自动故障转移,5分钟左右

滚动升级,灰度发布 、回滚

# 实时观察
kubectl get pod -w
#升级或者降级
[root@k8s-master ~]# kubectl set image deployment/nginx-deployment nginx=ngin:1.19.2 --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx-deployment image updated
[root@k8s-master ~]# #回滚
#kubectl rollout --help#查看部署的历史
[root@k8s-master ~]# kubectl rollout history deployment/nginx-deployment 
deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         kubectl set image deployment/nginx-deployment nginx=ngin:1.19.2 --record=true
3         kubectl set image deployment/nginx-deployment nginx=ngin:1.19.10 --record=true
# 查看具体信息
[root@k8s-master ~]# kubectl rollout history deployment/nginx-deployment --revision=2
deployment.apps/nginx-deployment with revision #2
Pod Template:Labels:       app=nginx-deploymentpod-template-hash=6fbbbfffd8Annotations:  kubernetes.io/change-cause: kubectl set image deployment/nginx-deployment nginx=ngin:1.19.2 --record=trueContainers:nginx:Image:      ngin:1.19.2Port:       <none>Host Port:  <none>Environment:        <none>Mounts:     <none>Volumes:      <none>#回滚至上一个版本及回滚至指定版本
[root@k8s-master ~]# kubectl rollout undo deployment/nginx-deployment --revision=2
[root@k8s-master ~]# kubectl rollout history deployment/nginx-deployment --to-revision=2

4、Service

目前为止,我们部署的所有应用目前并不能通过浏览器访问
在前面讲解pod时知道,pod的生命周期比较短,其生命周期可以用朝生夕死来形容,这就造成了提供服务的Pod的IP地址频繁变化。而在访问服务时,我们期望提供服务的lp地址是稳定不变的。由上描述可知,pod的特性和人们的期望就发生了严重的冲突。此冲突就引出了service。
service:pod的服务发现和负载均衡

#创建3个nginx,并修改配置的index文件,用作区分。
[root@k8s-master ~]# kubectl create deployment web-nginx --image=nginx --replicas=3
deployment.apps/web-nginx created
[root@k8s-master ~]# kubectl get pod -owide
NAME                        READY   STATUS    RESTARTS   AGE     IP                NODE        NOMINATED NODE   READINESS GATES
web-nginx-5f989946d-76vll   1/1     Running   0          3m49s   192.168.36.76     k8s-node1   <none>           <none>
web-nginx-5f989946d-pwxk2   1/1     Running   0          3m49s   192.168.169.144   k8s-node2   <none>           <none>
web-nginx-5f989946d-tgk6q   1/1     Running   0          3m49s   192.168.169.145   k8s-node2   <none>           <none>
[root@k8s-master ~]# curl 192.168.36.76 
pod 111
[root@k8s-master ~]# curl 192.168.169.144
pod 222
[root@k8s-master ~]# curl 192.168.169.145
pod 333

Expose 暴露服务 kubectl expose --help

[root@k8s-master ~]# kubectl expose deploy web-nginx --port=80 --target-port=80
service/web-nginx exposed
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP   3d22h
web-nginx    ClusterIP   10.96.31.78   <none>        80/TCP    44s
#service的ip会映射指向deploy对应的3个nginx
[root@k8s-master ~]# curl 10.96.31.78
pod 222
[root@k8s-master ~]# curl 10.96.31.78
pod 222
[root@k8s-master ~]# curl 10.96.31.78
pod 222
[root@k8s-master ~]# curl 10.96.31.78
pod 333
[root@k8s-master ~]# curl 10.96.31.78
pod 111
[root@k8s-master ~]# curl 10.96.31.78
pod 333
[root@k8s-master ~]# curl 10.96.31.78
pod 333

负载均衡的原理. 匹配labels中app参数一致的pod,去做负载均衡

[root@k8s-master ~]# kubectl get pod --show-labels
NAME                        READY   STATUS    RESTARTS   AGE   LABELS
web-nginx-5f989946d-76vll   1/1     Running   0          13m   app=web-nginx,pod-template-hash=5f989946d
web-nginx-5f989946d-pwxk2   1/1     Running   0          13m   app=web-nginx,pod-template-hash=5f989946d
web-nginx-5f989946d-tgk6q   1/1     Running   0          13m   app=web-nginx,pod-template-hash=5f989946d
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP   3d22h
web-nginx    ClusterIP   10.96.31.78   <none>        80/TCP    5m36s
[root@k8s-master ~]# kubectl describe svc web-nginx
Name:              web-nginx
Namespace:         default
Labels:            app=web-nginx
Annotations:       <none>
Selector:          app=web-nginx
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.96.31.78
IPs:               10.96.31.78
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         192.168.169.144:80,192.168.169.145:80,192.168.36.76:80
Session Affinity:  None
Events:            <none>
kubectl delete svc web-nginx

web服务,需要对外暴露

redis,sql,mq等只想要内部访问

#type 参数 默认只能在k8s内网访问ClusterIP      
#--type='':
#        Type for this service: ClusterIP, NodePort, LoadBalancer, or ExternalName. Default is 'ClusterIP'.#通过NodePort类型 可以暴露给外网,他会随机给一个ip,这个ip无法设置。下一节会介绍ingress,相当于再一层的嵌套,用来做统一的网关
[root@k8s-master ~]# kubectl expose deploy web-nginx --port=80 --target-port=80 --type=NodePort
service/web-nginx exposed
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        3d22h
web-nginx    NodePort    10.96.50.186   <none>        80:31242/TCP   6s# 宿主机内部容器的访问域名,项目中的微服务,就可以直接在代码中使用域名访问了
# curl web-nginx-default.svc
# service的ip会变,k8s对应的域名不会变

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

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

相关文章

【学习】VScode修改侧边栏大小。

侧边栏不可以直接更改&#xff0c;所以先缩放整体界面&#xff0c;再改变工作区大小。 缩放整体界面&#xff1a; Ctrl 或 Ctrl - 。 也可以直接使用如下代码&#xff1a; Ctrl Shifit p 打开搜索 settings &#xff0c;选择下图第一个。 然后嵌入如下代码&#xff1a…

股票价格预测 | Python使用GAN预测股票价格

文章目录 效果一览文章概述代码设计效果一览 文章概述 生成对抗网络(GAN)是一种强大的机器学习模型,用于生成以假乱真的数据。然而,使用GAN来预测股票价格可能会面临以下挑战: 数据可用性:GAN需要大量的数据进行训练,以便生成准确的输出。对于股票价格预测,历史股票价…

OpenHarmony开发——Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…

【示例】Mybatis-标签学习+Mybatis工作流程

前言 本文主要学习Mybatis相关标签的使用及Mybatis的工作流程。 文中用到的示例&#xff0c;代码存储位置&#xff1a; GitHubhttps://github.com/Web-Learn-GSF/Java_Learn_Examples父工程Java_Framework_Mybatis 基础 示例 | 初始Mybatis 数据库初始化 -- 建表 CREATE…

Elasticsearch安装、启动异常问题总结

安装es、kibana、ik分词器可参考&#xff1a;http://t.csdnimg.cn/59mEG 1. 内核过低 我们使⽤的是 centos6 &#xff0c;其 linux 内核版本为 2.6 。⽽ Elasticsearch 的插件要求⾄少 3.5 以上版 本。不过没关系&#xff0c;我们禁 ⽤这个插件即可。 修改 elasticsearch.ym…

spring boot整合Redis监听数据变化

一、前言 Redis提供了数据变化的通知事件&#xff0c;可以实时监测key和value的变化&#xff0c;客户端可以通过订阅相关的channel来接收这些通知事件&#xff0c;然后做相应的自定义处理&#xff0c;详细的介绍可以参考官方文档Redis keyspace notifications | Docs 使用Red…

一次http访问超时服务器端调试

问题&#xff1a;http访问服务器时没有返回&#xff0c;没有超时&#xff0c;一直在阻塞 处理过程&#xff1a;telnet端口能连上&#xff0c;服务端程序也不存在处理时间过长的情况。 说明tcp连接没问题。推测是客户端连接后再发起请求&#xff0c;服务端阻塞了。因为很多客户…

关于 TDengine 的时区(timeZone)问题

背景 在学习SagooIOT物联网平台使用docker部署TDengine时序数据库&#xff0c;根据时间戳&#xff08;timestamp&#xff09;ts查询上报设备数据时 发现结果跟查询条件不匹配。查询问题原因竟然是timezone时区设置问题。 查询数据结果&#xff1a; 查看容器时区&#xff1a; …

分类算法——sklearn转换器和估计器(一)

转换器&#xff08;特征工程的父类&#xff09; 实例化&#xff08;实例化的是一个转换器类&#xff08;Transformer&#xff09;&#xff09;调用fit_transform&#xff08;对于文档建立分类词频矩阵&#xff0c;不能同时调用&#xff09; 把特征工程的接口称之为转换器&…

当你的项目体积比较大?你如何做性能优化

在前端开发中&#xff0c;项目体积优化是一个重要的环节&#xff0c;它直接影响到网页的加载速度和用户体验。随着前端项目越来越复杂&#xff0c;引入的依赖也越来越多&#xff0c;如何有效地减少最终打包文件的大小&#xff0c;成为了前端工程师需要面对的挑战。以下是一些常…

汽车咨询|基于SprinBoot的汽车资讯管理系统设计与实现(源码+数据库+文档)

汽车资讯管理系统目录 基于SprinBoot的汽车资讯管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff…

npm 切换成淘宝源,以及遇到npm 报错如何解决

淘宝源&#xff1a;npm config set registryhttps://registry.npmmirror.com/ 然后再npm下 package-lock.json这个删了 npm i再试一下

MySQL——创建和插入

一、插入数据 INSERT 使用建议; 在任何情况下建议列出列名&#xff0c;在 VALUES 中插入值时&#xff0c;注意值和列的意义对应关系 values 指定的值顺序非常重要&#xff0c;决定了值是否被保存到正确的列中 在指定了列名的情况下&#xff0c;你可以仅对需要插入的列给到…

【已解决】VMware Horizon Client: 无法建立安全加密链路连接

文章目录 问题原因解决方法方法1&#xff1a;在HTTPS拦截中添加VMware忽略列表 (推荐)方法2&#xff1a; 只拦截 浏览器进程的请求 / 取消 HTTPS 拦截&#xff08;如果没有拦截HTTPS的必要 / 只针对浏览器请求&#xff0c;可以使用此方法&#xff09; 当前使用mac 编辑&#xf…

飞书api增加权限

1&#xff0c;进入飞书开发者后台&#xff1a;飞书开放平台 给应用增加权限 2&#xff0c;进入飞书管理后台 https://fw5slkpbyb3.feishu.cn/admin/appCenter/audit 审核最新发布的版本 如果还是不行&#xff0c;则需要修改数据权限&#xff0c;修改为全部成员可修改。 改完…

Matlab与ROS(1/2)---Message(三)

0. 简介 消息是ROS中交换数据的主要容器。主题和服务使用消息在节点之间传输数据。为了标识其数据结构&#xff0c;每条消息都有一个消息类型。例如&#xff0c;来自激光扫描仪的传感器数据通常以sensor_msgs/LaserScan类型的消息发送。每种消息类型标识消息中包含的数据元素。…

类和对象二

一、运算符重载 为了使自定义类型可以使用加减等运算符&#xff0c;CPP提供了一个功能叫运算符重载。 关键字&#xff1a;operator操作符 运算符重载最好定义在类对象里&#xff0c;这也可以避免访问不到私有成员的问题。 代码演示&#xff1a; 在类里定义之后&#xff0c;…

Java常用数据结构与集合

数据结构 数组&#xff1a; 内存地址连续检索效率高(可以通过下标访问成员)增删操作效率低(保证数据越界的问题,需动态扩容)长度固定&#xff0c;扩容的需要新的数组复制或者Arrays类的copyOf方法 链表 内存地址不连续查询快删除慢&#xff0c;因为需要移动指针又分双向链表…

区块链安全-----区块链基础

区块链是一种全新的信息网络架构 &#xff0c;是新一代信息基础设施 &#xff0c;是新型的价值交换方式、 分布式协 同生产机制以及新型的算法经济模式的基础。 区块链技术可以集成到多个领域。 区块链的主要用途 是作为加密货币的分布式总帐。 它在银行 &#xff0c;金融 &…

浏览器工作原理与实践--HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络

前面两篇文章我们分析了HTTP/1和HTTP/2&#xff0c;在HTTP/2出现之前&#xff0c;开发者需要采取很多变通的方式来解决HTTP/1所存在的问题&#xff0c;不过HTTP/2在2018年就开始得到了大规模的应用&#xff0c;HTTP/1中存在的一大堆缺陷都得到了解决。 HTTP/2的一个核心特性是使…