Kubernetes-Kind篇-01-kind搭建测试集群

1、Kind 介绍

官方文档地址:https://kind.sigs.k8s.io/
github仓库地址:https://github.com/kubernetes-sigs/kind
国内镜像仓库地址:https://gitcode.com/gh_mirrors/ki/kind/overview

kind 是一种使用 Docker 容器 nodes 运行本地 Kubernetes 集群的工具。 kind 主要是为了测试 Kubernetes 自身而设计的,但它也可用于本地开发或 CI。

k8s集群的组成比较复杂,如果纯手工部署的话易出错且时间成本高。比如我曾在pvc和vmware平台上进行过集群的搭建,创建虚拟机本身就需要一定的时间成本。

而本文介绍的Kind工具,能够快速的建立起可用的k8s集群,降低初学者的学习门槛。

Kind是Kubernetes In Docker的缩写,顾名思义,看起来是把k8s放到docker的意思。没错,kind创建k8s集群的基本原理就是:提前准备好k8s节点的镜像,通过docker启动容器,来模拟k8s的节点,从而组成完整的k8s集群。需要注意,kind创建的集群仅可用于开发、学习、测试等,不能用于生产环境。

1.2 Kind 功能

  • 快速创建集群:通过简单的命令行操作,快速创建单节点或多节点的Kubernetes集群。
  • 多版本支持:可以创建不同版本的Kubernetes集群,便于测试应用在新旧版本Kubernetes上的兼容性。
  • 集群配置:支持通过配置文件自定义集群的各种参数,包括节点数量、镜像、网络插件等。
  • 节点管理:可以方便地查看和管理集群中的各个节点,包括添加、删除节点等操作。
  • 集成开发环境:适用于本地开发,可直接在集群中部署和调试应用,快速迭代。
  • CI/CD集成:由于其轻量级和标准化的特点,非常适合集成到持续集成/持续部署流程中,自动化测试Kubernetes应用。

1.3 Kind 优点

  • 简易安装和配置:kind极大地简化了Kubernetes集群的搭建过程,只需要Docker环境即可快速启动一个Kubernetes集群,无需额外的虚拟机或复杂的配置。
  • 轻量级:由于是在Docker容器中运行,kind消耗的系统资源相对较少,适合在开发机器上运行,便于进行本地开发和测试。
  • 灵活性:用户可以自定义集群配置,包括使用的Kubernetes版本、集群的网络插件、额外的容器运行时配置等,满足不同的测试和开发需求。
  • 集成测试:对于CI/CD流程而言,kind提供了标准化的Kubernetes环境,有助于进行集成测试和验证应用在不同Kubernetes版本下的兼容性。
  • 可扩展性:kind支持自定义集群配置文件,方便集成其他工具和服务,如Prometheus监控、Istio服务网格等,进行更复杂的测试和实验。

1.4、Kind 缺点

  • 性能限制:虽然kind适合开发和测试,但由于所有的节点都在同一个宿主机上运行,受制于宿主机资源,可能无法模拟生产环境的性能特征,也不适合高负载测试。
  • 网络复杂性:虽然kind支持多种网络插件,但与物理或VM-based集群相比,其网络行为可能有所不同,可能会影响到一些对网络有特定要求的应用的测试。
  • 资源隔离限制:因为所有组件运行在相同的宿主机上,资源隔离不如使用虚拟机的解决方案彻底,可能会出现容器间资源竞争的情况。

1.5、Kind 工作原理

Kind 使用容器来模拟每一个 Kubernetes 节点,并在容器里面运行 Systemd 。

容器里的 Systemd 托管了 Kubelet 和 Containerd ,然后容器内部的 Kubelet 把其它 Kubernetes 组件: Kube-Apiserver 、 Etcd 、 CNI 等等组件运行起来。

Kind 内部使用了 Kubeadm 这个工具来做集群的部署,包括高可用集群也是借助 Kubeadm 提供的特性来完成的。在高用集群下还会额外部署了一个 Nginx 来提供负载均衡 VIP。

2、Kind 使用

2.1 支持的指令

kind
kind creates and manages local Kubernetes clusters using Docker container 'nodes'

Usage:
  kind [command]

Available Commands:
  build       Build one of [node-image]
  completion  Output shell completion code for the specified shell (bash, zsh or fish)
  create      Creates one of [cluster]
  delete      Deletes one of [cluster]
  export      Exports one of [kubeconfig, logs]
  get         Gets one of [clusters, nodes, kubeconfig]
  help        Help about any command
  load        Loads images into nodes
  version     Prints the kind CLI version

Flags:
  -h, --help              help for kind
      --loglevel string   DEPRECATED: see -v instead
  -q, --quiet             silence all stderr output
  -v, --verbosity int32   info log verbosity, higher value produces more output
      --version           version for kind

Use "kind [command] --help" for more information about a command.

简单说下几个比较常用选项的含义:

  • build:用来从 Kubernetes 源代码构建一个新的镜像。
  • create:创建一个 Kubernetes 集群。
  • delete:删除一个 Kubernetes 集群。
  • get:可用来查看当前集群、节点信息以及 Kubectl 配置文件的地址。
  • load:从宿主机向 Kubernetes 节点内导入镜像。

kind创建的集群也是使用kubectl老进行客户端安装的,因此需要先进行该工具的安装,可以直接执行命令进行安装:

sudo snap install kubectl --classic

2.2 新建k8s集群

先看一下目前本地的docker 镜像和容器信息:

~/workspace/king-devops git:[master]
sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

~/workspace/king-devops git:[master]
sudo docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

本地是一个新的开发环境,所有很干净,如果需要清理本地的docker环境的话,可以参考下面的shell:

# 删除容器,支持多个
docker rm containerId1 containerId2

# 删除所有未使用的镜像
docker image prune -a

由于dockerhub被墙,这里找到一个国内的源:https://docker.aityp.com/image/docker.io/kindest/node:v1.31.0

先docker 拉取该源,并修改tag:

sudo docker pull m.daocloud.io/docker.io/kindest/node:v1.31.0

sudo docker tag  m.daocloud.io/docker.io/kindest/node:v1.31.0  docker.io/kindest/node:v1.31.0

sudo docker rmi m.daocloud.io/docker.io/kindest/node:v1.31.0

结果:

sudo docker image ls
REPOSITORY     TAG       IMAGE ID       CREATED       SIZE
kindest/node   v1.31.0   b5cb8c3b1441   7 weeks ago   1.03GB

2.2.1 创建一个简单的k8s集群

命令:
命令:

sudo kind create cluster --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test

参数解释:

  • –image可以执行指定不同版本的镜像
  • –name可以指定集群名

结果:

sudo kind create cluster --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test
Creating cluster "myk8s-test" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✓ Preparing nodes 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
Set kubectl context to "kind-myk8s-test"
You can now use your cluster with:

kubectl cluster-info --context kind-myk8s-test

Have a nice day! 👋
Exporting logs for cluster "myk8s-test" to:
/tmp/972923639

查看通过kind创建的集群:

sudo kind get clusters
myk8s-test

已经成功创建了一个集群,并且集群名就是我们通过–name参数设置的。

查看容器信息:

sudo docker ps
CONTAINER ID   IMAGE                  COMMAND                   CREATED         STATUS         PORTS                       NAMES
8c764a962ab3   kindest/node:v1.31.0   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:41625->6443/tcp   myk8s-test-control-plane

新增了一个容器,并且
通过其容器名myk8s-test-control-plane,也可以与咱们创建的集群,对应上。

根据提示使用集群:

sudo kubectl cluster-info --context kind-myk8s-test

这里实际上是设置kubectl的上下文,后面直接试使用kubectl就可以访问该集群,效果与kubectl --kubeconfig=xxx一样.

查看集群节点:

sudo kubectl get nodes    
NAME                       STATUS   ROLES           AGE     VERSION
myk8s-test-control-plane   Ready    control-plane   7m48s   v1.31.0

查看集群全部的pod:

sudo kubectl get pods -A -owide
NAMESPACE            NAME                                               READY   STATUS    RESTARTS   AGE     IP           NODE                       NOMINATED NODE   READINESS GATES
kube-system          coredns-6f6b679f8f-psnlz                           1/1     Running   0          8m3s    10.244.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          coredns-6f6b679f8f-q5p5w                           1/1     Running   0          8m3s    10.244.0.3   myk8s-test-control-plane   <none>           <none>
kube-system          etcd-myk8s-test-control-plane                      1/1     Running   0          8m11s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kindnet-vtcxf                                      1/1     Running   0          8m3s    172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-apiserver-myk8s-test-control-plane            1/1     Running   0          8m10s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-controller-manager-myk8s-test-control-plane   1/1     Running   0          8m10s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-proxy-2w5hj                                   1/1     Running   0          8m3s    172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-scheduler-myk8s-test-control-plane            1/1     Running   0          8m10s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
local-path-storage   local-path-provisioner-57c5987fd4-tjc2v            1/1     Running   0          8m3s    10.244.0.4   myk8s-test-control-plane   <none>           <none>

这里可以发现,该有的组件都有了。就是一个完整的master节点。

删除集群:

sudo kind delete cluster --name myk8s-test

2.2.2 创建一个一主二从的k8s集群

创建一个 test1.yaml 的文件,内容如下:

kind: Cluster
# 一共三个节点,一个主节点,两个从节点
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane  # 主节点
- role: worker  # 从节点
- role: worker  # 从节点

执行命令创建文件并将内容保存:

echo 'kind: Cluster
# 一共三个节点,一个主节点,两个从节点
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane  # 主节点
- role: worker  # 从节点
- role: worker  # 从节点' > test1.yaml

创建一主二从集群:

sudo kind create cluster --config=test1.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test

结果:

sudo kind create cluster --config=test1.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test
Creating cluster "myk8s-test" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✓ Preparing nodes 📦 📦 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-myk8s-test"
You can now use your cluster with:

kubectl cluster-info --context kind-myk8s-test

Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
Exporting logs for cluster "myk8s-test" to:
/tmp/1302378959

查看容器信息:

sudo docker ps
CONTAINER ID   IMAGE                  COMMAND                   CREATED         STATUS         PORTS                       NAMES
454b36b7bcb1   kindest/node:v1.31.0   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes                               myk8s-test-worker2
13f56b739d18   kindest/node:v1.31.0   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:38485->6443/tcp   myk8s-test-control-plane
a8c6155a6ada   kindest/node:v1.31.0   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes                               myk8s-test-worker

使用该集群:

sudo kubectl cluster-info --context kind-myk8s-test
Kubernetes control plane is running at https://127.0.0.1:38485
CoreDNS is running at https://127.0.0.1:38485/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

查看节点信息:

sudo kubectl get nodes
NAME                       STATUS   ROLES           AGE     VERSION
myk8s-test-control-plane   Ready    control-plane   3m21s   v1.31.0
myk8s-test-worker          Ready    <none>          3m10s   v1.31.0
myk8s-test-worker2         Ready    <none>          3m10s   v1.31.0

查看pod信息:

sudo kubectl get pods -A -owide
NAMESPACE            NAME                                               READY   STATUS    RESTARTS   AGE     IP           NODE                       NOMINATED NODE   READINESS GATES
kube-system          coredns-6f6b679f8f-h42zh                           1/1     Running   0          3m35s   10.244.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          coredns-6f6b679f8f-jt79q                           1/1     Running   0          3m35s   10.244.0.3   myk8s-test-control-plane   <none>           <none>
kube-system          etcd-myk8s-test-control-plane                      1/1     Running   0          3m41s   172.18.0.4   myk8s-test-control-plane   <none>           <none>
kube-system          kindnet-2mcxh                                      1/1     Running   0          3m35s   172.18.0.4   myk8s-test-control-plane   <none>           <none>
kube-system          kindnet-54n6f                                      1/1     Running   0          3m32s   172.18.0.3   myk8s-test-worker2         <none>           <none>
kube-system          kindnet-vgvqd                                      1/1     Running   0          3m32s   172.18.0.2   myk8s-test-worker          <none>           <none>
kube-system          kube-apiserver-myk8s-test-control-plane            1/1     Running   0          3m41s   172.18.0.4   myk8s-test-control-plane   <none>           <none>
kube-system          kube-controller-manager-myk8s-test-control-plane   1/1     Running   0          3m41s   172.18.0.4   myk8s-test-control-plane   <none>           <none>
kube-system          kube-proxy-nh7hg                                   1/1     Running   0          3m32s   172.18.0.2   myk8s-test-worker          <none>           <none>
kube-system          kube-proxy-qftvw                                   1/1     Running   0          3m32s   172.18.0.3   myk8s-test-worker2         <none>           <none>
kube-system          kube-proxy-wkkt7                                   1/1     Running   0          3m35s   172.18.0.4   myk8s-test-control-plane   <none>           <none>
kube-system          kube-scheduler-myk8s-test-control-plane            1/1     Running   0          3m41s   172.18.0.4   myk8s-test-control-plane   <none>           <none>
local-path-storage   local-path-provisioner-57c5987fd4-nwtgv            1/1     Running   0          3m35s   10.244.0.4   myk8s-test-control-plane   <none>           <none>

删除集群:

sudo kind delete cluster --name myk8s-test
Deleting cluster "myk8s-test" ...
Deleted nodes: ["myk8s-test-worker2" "myk8s-test-control-plane" "myk8s-test-worker"]

2.2.3 创建一个高可用的k8s集群

创建一个 test2.yaml 的文件,一共六个节点,三个 control-plane 节点,三个 workers 节点,内容如下:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

执行命令创建文件并将内容保存:

echo 'kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker' > test2.yaml

创建高可用集群:

sudo kind create cluster --config=test2.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test

结果:

sudo kind create cluster --config=test2.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test
Creating cluster "myk8s-test" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✗ Preparing nodes 📦 📦 📦 📦 📦 📦  
ERROR: failed to create cluster: command "docker run --name myk8s-test-external-load-balancer --hostname myk8s-test-external-load-balancer --label io.x-k8s.kind.role=external-load-balancer --detach --tty --label io.x-k8s.kind.cluster=myk8s-test --net kind --restart=on-failure:1 --init=false --cgroupns=private --publish=127.0.0.1:35199:6443/TCP docker.io/kindest/haproxy:v20230606-42a2262b" failed with error: exit status 125
Command Output: Unable to find image 'kindest/haproxy:v20230606-42a2262b' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.
Exporting logs for cluster "myk8s-test" to:
/tmp/2092938174

看报错是访问镜像kindest/haproxy:v20230606-42a2262b时没有找到,我们还通过国内镜像仓库进行拉取:

sudo docker pull m.daocloud.io/docker.io/kindest/haproxy:v20230606-42a2262b

sudo docker tag  m.daocloud.io/docker.io/kindest/haproxy:v20230606-42a2262b  docker.io/kindest/haproxy:v20230606-42a2262b

sudo docker rmi m.daocloud.io/docker.io/kindest/haproxy:v20230606-42a2262b

确定下上面是否有创建出来集群,如果有,则先删除一下:

sudo kind get clusters
myk8s-test
sudo kind delete cluster --name myk8s-test

重新执行创建高可用集群的创建:

sudo kind create cluster --config=test2.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test
Creating cluster "myk8s-test" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✓ Preparing nodes 📦 📦 📦 📦 📦  
 ✓ Configuring the external load balancer ⚖️ 
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining more control-plane nodes 🎮 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-myk8s-test"
You can now use your cluster with:

kubectl cluster-info --context kind-myk8s-test

Have a nice day! 👋
Exporting logs for cluster "myk8s-test" to:
/tmp/4229211329

备注:我在创建多master节点时,遇见了问题,我测试了下面的几个组合:

  • 二主二从:失败
  • 三主:成功
  • 三主一从:失败
  • 二主三从:成功
  • 二主四从:失败
  • 三主三从:失败
  • 三主二从:失败

这里有官网的配置:
https://kind.sigs.k8s.io/docs/user/quick-start/#control-plane-ha
在这里插入图片描述
我最终调整为了二主三从的规格创建集群,这个应该是一些原因导致的创建失败。

因为同一份配置,在我的mac电脑上是完全ok的,顺利的创建三主三从的高可用集群。

一般的测试场景中,一主多从已经完全满足使用了,这里也不做过多深入考究了。

2.3 导出kind集群kubeconfig

sudo kind export kubeconfig --name=myk8s-test --kubeconfig=$HOME/.kube/config

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

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

相关文章

HI6338 (DIP-8内置75W方案)

Hi6338 combines a dedicated current mode PWM controller with integrated high voltage power MOSFET.Vcc low startup current and low operating current contribute to a reliable power on startup design with Hi6338. the IC operates in Extended ‘burst mode’ to …

Nginx请求头丢失,引发出来的问题

1.问题 新增的几个 header 参数是这样的&#xff1a; api_key_idapi_key_value 我配置有2层nginx转发&#xff0c;从机器A到机器B再到目标服务&#xff0c;遇到一个接口请求需要在header中传递api_key_id和api_key_value这2个参数&#xff0c;但是在EC2机器上直接curl目标服…

更美观的HTTP性能监测工具:httpstat

reorx/httpstat是一个旨在提供更美观和详细HTTP请求统计信息的cURL命令行工具&#xff0c;它能够帮助开发者和运维人员深入理解HTTP请求的性能和状态。 1. 基本概述 项目地址&#xff1a;https://github.com/reorx/httpstat语言&#xff1a;该工具主要是以Python编写&#xff…

机器人末端的负载辨识

关节处的摩擦力变小了&#xff0c;导致系统的参数辨识精度会变高&#xff0c;因为动力学方程中的摩擦力项占的比例会变小。 为什么要有一个负载的参数辨识&#xff0c;因为对于整个系统来说&#xff0c;除了负载哈&#xff0c;其他关节都是不变的&#xff0c;出厂时都设置好了&…

金蝶云星空个别字段无法录入异常处理

用户反馈&#xff0c;在录入单据时&#xff0c;第一条数据能录入数量&#xff0c;新增第二条时就无法录入。 用户反馈截图如下&#xff1a; 我登录自己的账号查看&#xff0c;并未发现相同的问题&#xff0c;同时用户也说已经退出重新登录过&#xff0c;问题依旧。 到现场看用…

使用RESTful API构建Web应用程序

开始正式介绍 RESTful API 之前&#xff0c;我们需要首先搞清&#xff1a;API 到底是什么&#xff1f; API&#xff08;Application Programming Interface&#xff09; 翻译过来是应用程序编程接口的意思。 我们在进行后端开发的时候&#xff0c;主要的工作就是为前端或者其…

LUCEDA IPKISS Tutorial 77:在版图一定范围内填充dummy

案例分享&#xff1a;在给定的Shape内填充dummy 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 from shapely.geometry import Polygon, MultiPolygon import numpy as np import matplotlib.pyplot as pltclass CellFilledWithCon…

简单的网络爬虫爬取视频

示例代码爬取一个周杰伦相关视频 import requests# 自己想下载的视频链接 video_url https://vdept3.bdstatic.com/mda-qg8cnf4bw5x6bjs5/cae_h264/1720516251158906693/mda-qg8cnf4bw5x6bjs5.mp4?v_from_shkapp-haokan-hbf&auth_key1728497433-0-0-4a32e13f751e04754e4…

电子科技大学高级算法设计与分析-MaxFlow网络流基础知识梳理

MaxFlow网络流 1 网络流基础概念 source&#xff1a;源点 sink&#xff1a;终点 Flow&#xff1a;流量 capacity&#xff1a;容量 Residual&#xff1a;残量 Residual Network&#xff1a;残量网络 Augmenting path&#xff1a;增广路径&#xff0c;表示从源点 s 到终点 t 不包…

爬虫prc技术----小红书爬取解决xs

知识星球&#xff1a;知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff0c;知识变现的工具知识星球是创作者连接铁杆粉丝&#xff0c;实现知识变现的工具。任何从事创作或艺术的人&#xff0c;例如艺术家、工匠、教师、学术研究、科普等&#xff0c;只要能获得一…

【redis-06】redis的stream流实现消息中间件

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

STM32-ADC模数转换

一、概述 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间输入电压范围&#xff1a;0~3.3V&#xff…

vscode配置R语言debugger环境:“vscDebugger“的安装

要在 R 中安装 vscDebugger 包&#xff0c;可以按照以下步骤进行&#xff1a; 方法一&#xff1a;使用命令面板自动安装 打开命令面板&#xff1a; 在 Visual Studio Code 中按 CtrlShiftP 打开命令面板。 运行安装命令&#xff1a; 在命令面板中输入并选择 r.debugger.updat…

大数据新视界 --大数据大厂之 Dremio:改变大数据查询方式的创新引擎

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

前端的全栈混合之路Meteor篇:分布式数据协议DDP深度剖析

本文属于进阶篇&#xff0c;并不是太适合新人阅读&#xff0c;但纯粹的学习还是可以的&#xff0c;因为后续会实现很多个ddp的版本用于web端、nodejs端、安卓端和ios端&#xff0c;提前预习和复习下。ddp协议是一个C/S架构的协议&#xff0c;但是客户端也同时可以是服务端。 什…

SSD |(二)SSD主控

文章目录 &#x1f4da;控制器架构&#x1f407;PCIe和NVMe控制器前端子系统&#x1f407;NAND闪存控制器后端子系统&#x1f407;内存子系统&#x1f407;安全子系统&#x1f407;CPU计算子系统 &#x1f4da;控制器架构 控制器作为一个片上系统&#xff0c;处理来自用户端的…

【二分算法】——8个题目让你找到二分算法的感觉势如破竹

文章目录 1.二分查找2.在排序数组中查找元素的第一个和最后一个位置3.x的平方根4.搜索插入位置5.山脉数组的峰顶索引6.寻找峰值7.寻找旋转排序数组中的最小值8.JZ53(2) 1.二分查找 https://leetcode.cn/problems/binary-search/ 思路: 标准的二分查找。给定一个有序数组和目…

【2024版本】Mac/Windows IDEA安装教程

IDEA 2024版本真的很强大&#xff0c;此外JDK发布了最新稳定版 JDK21 &#xff0c;只有新版本支持JDK 21、JDK22。原来数据库插件不支持redis等一些NoSql的数据库的连接&#xff0c;如果要使用需要自己单独装收费的插件。直接打开idea就很吃内存了&#xff0c;再打开其他一大堆…

47 C 语言实战项目——家庭收支记账软件

目录 1 需求说明 1.1 菜单显示 1.2 登记收入 1.3 登记支出 1.4 显示收支明细 1.5 退出 2 流程分析 2.1 总流程图 2.2 登记收入流程图 2.3 登记支出流程图 2.4 收支明细流程图 2.5 退出流程图 3 代码实现 3.1 框架搭建 3.2 收支明细功能 3.3 登记收入功能 3.4 …

23年408数据结构

第一题&#xff1a; 解析&#xff1a; 第一点&#xff0c;我们要知道顺序存储的特点&#xff1a;优点就是随用随取&#xff0c;就是你想要查询第几个元素可以直接查询出来&#xff0c;时间复杂度就是O(1)&#xff0c;缺点就是不适合删除和插入&#xff0c;因为每次删除和插入一…