Kubernetes快速上手指南,让你所见即所得

2023-05-16

版权声明:本文为 ABC实验室 原创文章,版权所有, 侵权必究!

编者语

Kubernetes作为新一代云计算平台,自2014年开源以来得到快速发展(2016年)并逐步成熟(2018年),极大推动了云原生领域及技术(微服务、FaaS和Serverless)的发展,被誉为影响云计算未来10年的革新技术。随着Kubernetes及其生态的广泛成熟,我想2020年除了那些大厂外,在中小型IT公司Kubernetes也一定得到的普遍青睐和积极采用。可以说2020年是Kubernetes大踏步进入中小企业市场的最佳时机,因此作为开发人员,很有必要花点时间跟进学习下Kubernetes这门新技术。本文结合自己的实践分享下Kubernetes简单快速上手过程(简称快手指南,哈哈),希望对大家有所帮助。

注:从 Google 搜索引擎的趋势数据来看,Kubernetes和Spring Boot的关注度同趋势地从2016年后迅猛增长,而相应OpenStack和Hadoop在2016后遇冷下降明显,折射着云计算2.0时代的到来。

目标

作为新人,Kubernetes上手普遍存在如下痛点:

  1. 技术门槛较高,有较多概念和依赖。例如:Docker技术栈、Kubernetes体系新名词、复杂的YAML配置让人头疼。
  2. 部署困难。例如:多节点群集,多个部署工具和方式选择困难,Kubernetes部署过程中问题多。
  3. 欠缺好的文章指导,目前能Google搜索的技术文章不是滞后就是凌乱,而官方文档虽然权威、详尽,但新人起步的针对性不足。
  4. 让人心烦的网络和存储配置。作为云计算平台,除了计算容器化外,平台的网络和存储需要额外选择和配置。
  5. 额外的应用适配。搭建好了的平台,只有跑上我们开发的应用才是终极胜利。但这又是另外一件不很轻松的事情。

基于以上常见痛点,本文结合实验室搭建的Kubernetes演示环境,通过“所见即所得”方式来讲解下具体的实践过程,希望能达到如下目标:

  1. 通过试用免费开放的实验环境,增强体验感和可操作性;
  2. Github提供同步学习的源代码,增强演示过程的可复制性,让所见即所得;
  3. 精简Kubernetes概念,快速了解核心内容;
  4. 同步最新版本,通过Step-by-Step方式跳过各种坑,轻松部署Kubernetes;
  5. 通过运行演示的NodeJs和SpringBoot应用,达到学以致用的最终目标;
  6. 面向产线增加关键知识点延伸,便于接下来进一步拓展学习;

预演

本教程涉及源代码可以通过如下方式下载:

  • 国内Gitlab: bootcamp / k8s-quick-start · GitLab
  • 国外Github:GitHub - abcxlab/k8s-quick-start: Quick start for kubernetes deployment

本教程支持在线演示环境体验,具体访问方式如下:

  • 群集演示地址: Kubernetes Dashboard
  • 演示登录Token:  请扫码关注ABC实验室微信公众号,输入”k8s” 即可获取

演示群集Dashboard截图

建议先体验演示环境,获取直观感受!

概述

Kubernetes  希腊语为“舵手”,是一个轻便、可扩展的工业级容器编排平台,用于管理容器化应用和服务。Google基于内部Borg系统研发并于2014年正式开源,目前最新发布了V1.18版本。

架构

Kubernetes架构如下图所示

Kubernetes群集一个主从的分布式架构,由Master节点(多个)组成的控制平面和Work节点(多个)组成的数据计算平面共同组成。主要组件如下:

  • API Server:负责所有组件之间通信,并负责存储状态和配置到Etcd库中;
  • Controller Manager:包含不同类型的群集控制器(如ReplicationSet/Deployment/Service等控制器),执行群集级别的功能,如复制组件、持续跟踪工作节点、处理节点识别等;
  • Scheduler:重点负责给应用的Pod调度分配相应节点;
  • Etcd:一个可靠的分布式数据存储,持久化保存群集状态和元数据;
  • Kubelet:管理所在工作节点的所有容器,并持续跟踪和保持和API Server通讯,响应相关容器管理事件;
  • Kube-proxy:他负责组件之间的负载均衡和服务的网络连通;
  • Docker引擎:底层运行环境,可以是docker、rtk或其他引擎;

核心概念

  • Pod:最小的调度分配单元,可包含一组容器和卷组成,同一个Pod的容器组共享同一个网络命名空间;
  • ReplicationController/ReplicateSet:  用于控制Pod副本数量,保证Pod始终运行;
  • DeamonSet: 保证在所有群集节点上运行一个Pod;
  • Service: 为一组功能相同的Pods提供单一不变的接入点,解耦Pods伸缩能力;
  • Deployment:类似ReplicationController/ReplicateSet, 增加滚动升降级策略和能力;
  • ConfigMap:配置选项,支持配置从Pod解耦分离;
  • Secret:类似ConfigMap,用于敏感数据保存;
  • StatefulSet:类似ReplicateSet,但StatefulSet提供Pod状态保持,在重新调度后保留他们的标识和状态,适合数据库等有状态应用场景;

特点

Kubernetes平台有如下典型特征:

  • 容器的自动装箱,即调度;
  • 水平扩容和伸缩,控制Pod副本数达到;sorry
  • 服务发现和负载均衡;
  • 服务自愈和恢复能力;
  • 应用自动发布和回滚;
  • 服务流量路由;
  • 可扩展跟踪;

安装说明

好了,简单了解完基本概念和架构后,让我们开始动手实践下吧!

安装步骤

整体安装分为如下8大步:

配置说明

  • 安装工具: kubeadm (v1.18.2)
  • Kubernetes版本:v1.18.2 (最新稳定版本)
  • 硬件最低要求: 2核 4G内存 20G 硬盘 (参考官方)
  • 服务器操作系统:Ubuntu Server 18.04 LTS
  • Docker版本: 19.03.8 (最新稳定版本)
  • 环境域名: k8s.abcxlab.com (Dashboard),*.k8s.abcxlab.com (应用)

节点说明

群集节点安排: 1个Master节点、2个Work节点,具体如下所示:

代码说明

源代码地址:bootcamp / k8s-quick-start · GitLab

源代码目录说明:

/app – – springboot应用 和 nodejs 应用目录,包括应用源代码、k8s部署脚本、镜像Dockerfile配置等

/k8s – –  Kubernetes 配置脚本,包括安装脚本和网络、负载和Dashboard等YAML配置文件等

应用说明

搭建好Kubernetes平台后,用于应用部署的两类常见应用说明如下:

SpringBoot应用

  • 应用名称:micro
  • 功能说明:功能很简单,只打印输出应用所在容器的hostname
  • 应用代码:app/springboot/micro · master · bootcamp / k8s-quick-start · GitLab
  • Docker镜像地址:Docker Hub
  • 镜像构建方式:GoogleContainerTools/jib

NodeJs应用

  • 应用名称:kubia
  • 功能说明:功能很简单,只打印输出应用所在容器的hostname
  • 应用代码:app/nodejs/kubia · master · bootcamp / k8s-quick-start · GitLab
  • Docker镜像地址: Docker Hub
  • 镜像构建方式:Docker build

安装过程

节点配置

按照最低硬件要求配置类似如下三个物理节点服务器(虚拟机也可),一个为Master节点,另外两个为Work节点。

注:本快速安装为非高可用安装,支持高可用可参考文末“延伸”章节介绍

005088a5f8a71cc334ede349c9404bc3.png

安装Ubuntu Server 18.04 LTS 操作系统,并关闭虚拟内存swap功能。

sudo swapoff -a

free -h

total used free shared buff/cache available

Mem: 15G 8.4G 321M 348M 6.9G 6.6G

Swap: 0B 0B 0B

Docker安装

所有节点部署Docker作为容器引擎,安装命令如下:

curl -sfL https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/install-docker.sh | sh -

Master安装

kubernates Master节点安装,分为三个步骤

1. 安装kubeadm工具,命令如下:

curl -sfL https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/install-kubeadm.sh | sh -

2.手动下载所需镜像(防止自动安装时所需国外镜像没法下载),命令如下:

curl -sfL https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/pull-kube-image.sh | sh -

3. 使用kubeadm创建群集,命令如下:

sudo kubeadm init --kubernetes-version=$(kubeadm version -o short) --pod-network-cidr=10.244.0.0/16

正确执行三个步骤后,如果出现如下类似提示,说明安装成功。

...

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.4:6443 --token rfstgm.lxk9eik0ub409ifo \

--discovery-token-ca-cert-hash sha256:ec0d455d57d9b8348793a1ba1b937412f4264f1ee37215857c8e8e451d452fa2

按照上面提示在Master上运行配置好kubernetes-cli运行环境,命令如下:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

同时记下Work 节点加入群集的命令,类似如下:

kubeadm join 192.168.1.4:6443 --token rfstgm.lxk9eik0ub409ifo \

--discovery-token-ca-cert-hash sha256:ec0d455d57d9b8348793a1ba1b937412f4264f1ee37215857c8e8e451d452fa2

关于网络配置提示,先不用担心,后续网络配置章节会做详细介绍。

提示:为了便于后续Master节点命令行中便捷输入,建议配置Shell自动补全功能, 如下所示:

#针对bash shell配置

echo "source <(kubectl completion bash)" >> ~/.bashrc

source ~/.bashrc

#针对zsh shell配置

vim ~/.zshrc

#追加如下内容

if [ $commands[kubectl] ]; then

source <(kubectl completion zsh)

fi

source ~/.zshrc

Work安装

Work节点的安装第一步类似Master节点(这里用XBox举例)

1.先安装kubeadm工具,命令如下:

curl -sfL https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/install-kubeadm.sh | sh -

sudo docker pull hub.abcxlab.com/kube/flannel:v0.12.0-amd64

sudo docker tag hub.abcxlab.com/kube/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64

2.再按照Master节点提示,执行如下节点Join命令

sudo kubeadm join 192.168.1.4:6443 --token rfstgm.lxk9eik0ub409ifo --discovery-token-ca-cert-hash sha256:ec0d455d57d9b8348793a1ba1b937412f4264f1ee37215857c8e8e451d452fa2

提示:如果token过期或忘记discovery-token-ca-cert-hash相应参数值,可以通过在Master节点运行如下命令获取相应值,其中ca-cert-hash记得加”sha256:“前缀

#重新生成token

kubeadm token create

#获取discovery-token-ca-cert-hash

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

按照以上类似步骤,安装另外一个Work节点XBee。

等所有节点都安装完毕后,在Master节点XAnt进行安装验证。

3. 检查群集,看节点是否加入群集

如图上所示即表明我们kubernetes群集安装成功,如果Work节点状态暂时显示为NotReady也不用着急,我们继续配置网络即可。

提醒:安装过程中遇到问题时,可参考文末“常见问题”章节

网络配置

kubernetes 网络模型核心为三点

  1. 每个 Pod 都拥有一个独立 IP 地址;
  2. Pods通过扁平的网络连通,不同节点上Pods可以无NAT地直接通讯;
  3. Service Cluster IP 尽可在集群内部访问,外部请求需要通过 NodePort、LoadBalance 或者 Ingress 来访问;

采用kubeadm工具安装只支持CNI(Container Network Interface)网络插件,不支持默认的kubenet。因此需要安装相应插件(例如Flannel、Calico、Romana、Weave-net等插件,本文选择采用Overlay网络的Flannel插件),安装命令如下:

备注:Flannel插件相关YAML配置来自官网: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#安装网络插件

sudo kubectl apply -f https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/1.0_kube-flannel.yaml

# 验证是否安装成功

sudo kubectl get ds -n kube-system

Nginx-Ingress安装

kubernetes群集内部服务可以通过三种方式暴露给外部访问

  • NodePort方式,依赖节点的端口映射
  • LoadBalance方式,依赖基础设施中负载均衡服务(例如:AWS ELB 或阿里云ELB等),特点是多个LB实例和相应IP地址
  • Ingress方式,它比LB方式的优势在于通过安装的Ingress控制器(例如Nginx-Ingress) 基于固定IP的代理多个HTTP/HTTPS服务,有点类似于域名虚拟主机的反向代理作用。

这三种连通内网方式相关比较可参考下图:

由于Ingress连通方式的优点,本文选择Nginx-Ingress组件来暴露内部服务(例如:Kubernetes Dashboard 应用和演示应用都使用Ingress方式)
Nginx-Ingress安装命令如下:

备注:nginx-ingress相关YAML配置来自官网:https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

#下载Ingress控制器配置文件

wget https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/2.0_kube-ingress-nginx-extip.yaml

#按需修改externalIP和Port (见备注)

vim 2.0_kube-ingress-nginx-extip.yaml

#安装Ingress控制器

sudo kubectl apply -f 2.0_kube-ingress-nginx-extip.yaml

# 验证是否安装成功

sudo kubectl get pods -n ingress-nginx

注意:Ingress控制器对外IP和端口需要根据自己环境Work节点安排做相应配置,默认配置演示群集中XBee和XBox两个Work节点的IP,端口分别为9090(HTTP)和9443(HTTPS)(如下图所示)。两组IP可以提高可用性,在群集外围可以绑定到基础设施环境的LB上(演示环境用Nginx),提供对外服务(例如:https://k8.abcxlab.com)或者直接提供访问(例如:https://micro.k8s.abcxlab.com:8443/ )

Dashboard安装

安装好网络插件和Ingress控制器后,就可以开开心心部署应用了。我们就来试试部署Kubernetes群集管理仪表盘Dashboard吧。

备注:Dashboard相关YAML配置来自官网:https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 

# 安装Dashboard应用及相应授权

sudo kubectl apply -f https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/3.0_kube-dashboard.yaml

# 下载dashboard ingress配置文件

wget https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/3.1_kube-dashboard-ingress.yaml

#把k8s.abcxlab.com域名改为自己要使用的域名:dashboard.your.domain

vim 3.1_kube-dashboard-ingress.yaml

# 为Dashboard应用配置Ingress访问

sudo kubectl apply -f 3.1_kube-dashboard-ingress.yaml

# 创建登录用的ServiceAccount: admin

sudo kubectl apply -f https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/k8s/3.2_kube-dashboard-admin-user.yaml

# 验证是否安装成功

sudo kubectl get pods -n kubernetes-dashboard

注意:Dashboard的Ingress配置文件的域名:k8s.abcxlab.com 需要修改为自己的域名:<dashboard.your.domain>

如果Dashboard部署成功,就可以通过https://<dashboard.your.domain>:9443 方式访问如下登录界面了。(注意:需要域名访问)

应用部署

如果一切没问题,接下来就可以用搭建的群集进行应用部署啦!

1.部署NodeJs/kubia应用

# 部署kubia应用

sudo kubectl apply -f https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/app/nodejs/1_kubia-deployment.yaml

# 下载kubia应用ingress配置文件

wget https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/app/nodejs/2_kubia-ingress.yaml

# 把kubia.k8s.abcxlab.com域名改为自己要使用的域名 kubia.your.domain

vim 2_kubia-ingress.yaml

# 为kubia应用配置Ingress访问

sudo kubectl apply -f 2_kubia-ingress.yaml

#检查部署是否成功

sudo kubectl get ingress

curl -kL https://kubia.your.domain/

2.水平伸缩NodeJs/kubia应用

#扩容:从2副本扩容到3

sudo kubectl scale deployment kubia --replicas=3

#检查扩容是否成功

sudo kubectl get pod

#收缩:从3副本扩容到1

sudo kubectl scale deployment kubia --replicas=1

#检查收缩是否成功

sudo kubectl get pod

3.部署SpringBoot/micro应用

类似于NodeJs/kubia应用部署,命令如下:

#部署micro应用

sudo kubectl apply -f https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/app/springboot/1_micro-deployment.yaml

# 下载micro应用ingress配置文件

wget https://gitlab.abcxlab.com/bootcamp/k8s-quick-start/-/raw/master/app/springboot/2_micro-ingress.yaml

#把micro.k8s.abcxlab.com域名改为自己要使用的域名 micro.your.domain

vim 2_micro-ingress.yaml

# 为micro应用配置Ingress访问

sudo kubectl apply -f 2_micro-ingress.yaml

#检查部署是否成功

sudo kubectl get ingress

curl -kL https://micro.your.domain/

好了,到此整个Kubernetes群集End-to-End部署和试用完毕,接下来简单聊聊和产线相关话题。

延伸

高可用部署

Kubernetes群集高可用,主要要保证Etcd高可用性和Master节点组件高可用性。

按照Etcd分布式数据库是内置还是外置,Kubernetes高可用部署可分为如下两种方式

1.Master堆叠方式,如下图所示:

2.Etcd外部群集方式,如下图所示:

kubeadm工具也支持高可用群集部署,由于篇幅有限,更多介绍可参考官方文档:利用 kubeadm 创建高可用集群 | Kubernetes

常见问题

  1. Minikube、kubeadm、Kubespray、Kops等Kubernetes部署工具该如何选择?
    简单来说就是几个工具的使用场景不一样,Minikube 通过虚拟机方式快速安装单节点 Kubernetes 集群,可用于个人电脑快速体验Kubernetes;Kubeadm 是官方推荐的Kubernetes 分发工具,该工具有助于在现有基础架构上引导最佳 Kubernetes 集群实践,优点是能够在任何地方发布最小的可行 Kubernetes 集群;但 Kubeadm 不提供基础架构配置(例如:网络、负载均衡、存储等都需要额外配置);Kops适合于在阿里云、AWS、GCE、Azure、OpenStack等云平台上部署Kubernetes群集,目前不支持裸机部署。Kubespray是产线部署常用工具,依赖Ansible,支持AWS,GCE,Azure,OpenStack等云平台,以及物理服务器的IaaS平台。
  2. 群集部署过程中,有哪些简单debug方式?
    a. 通过 kubectl  describe 命令, 查看pod/svc/rc/ds/ingress/deployment等状态
    b. 通过 kubectl logs 命令,查看pod日志
    c. 通过 kubectl exec -it 进入pod 内部,debug功能
    d. tail -f /var/log/syslog  跟踪系统日志
  3. 群集部署过程中,有哪些简单重试方式?
    a. 删除群集:kubeadm reset
    b. 删除部署:  kubectl delete -f <yaml file>
    c. 重启服务:  sudo service kubelet restart

参考

  • Flannel 插件:https://github.com/coreos/flannel
  • Nginx Ingress插件:https://kubernetes.github.io/ingress-nginx/deploy/
  • Dashboard应用:https://github.com/kubernetes/dashboard
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes快速上手指南,让你所见即所得 的相关文章

  • (二) 使用vscode

    1 在拉代码过程中 xff0c 使用代码对比工具 左侧有个分支工具 xff0c 点击左侧栏中某个文件 xff0c 右侧出现两栏 以102行为例 xff0c 红色部分为代码改动之前显示 xff0c 右侧绿色部分为代码改动之后显示 2 文件工具
  • 30个实用VSCode 插件,让你的开发效率倍增!

    1 Image preview 通过此插件 xff0c 当鼠标悬浮在图片的链接上时 xff0c 可以实时预览该图片 xff0c 除此之外 xff0c 还可以看到图片的大小和分辨率 2 Auto Rename Tag 使用该插件 xff0c
  • OpenCV 4.5.0+conrtrib 已编译完成(附下载链接)

    OpenCV 4 5 0 43 conrtrib 已编译完成 xff0c 包含编译源码 平台 Windows 43 VS2015 百度网盘链接 提取密码 xff1a rdgh 源码下载 OpenCV源码下载链接推荐 xff08 包含匹配的c
  • 第一篇综述-无人车简介

    综述 无人车简介 xff08 1 xff09 1 1无人车的定义以及分级 1 2无人车的发展历程 参考链接 原文链接 xff1a https blog csdn net thomashtq article details 81161018
  • 在C#中使用Intptr究竟需不需要释放?

    只有是用Marshal 申请的 xff08 AllocHGlobal xff09 这种需要释放 xff1b 对于使用PInvoke 返回的IntPtr不用释放 xff1b 简单来说 xff0c 这个东西是你创建出来的你就得负责回收 xff0
  • .NET中Invoke和BeginInvoke

    在 NET中 xff0c 固定必须主线程才能操作UI界面 xff0c 如果在非主线程中强行对UI界面赋值 xff0c 则会报错 xff0c 跨线程操作UI 是不允许的 xff0c 需要使用Invoke或BeginInvoke xff0c 关
  • php 跨域解决方案

    设置允许访问的域名 xff1a 1 允许全部的域名访问 span class token function header span span class token punctuation span span class token str
  • WPF之转换器

    WPF是一个数据驱动模式 xff0c 开发中都是以数据为中心 xff0c WPF具有数据绑定机制 xff0c 数据有变化时 xff0c 会通知UI进行更新 WPF用的是MVVM模式 MVVM是Model View ViewModel xff
  • CS程序自动更新和手动更新的技术实现

    1 程序启动时检查更新 xff0c 如果可以更新 xff0c 则判断是否为强制性更新 xff0c 如果是则直接强制更新 xff0c 不是则不处理 xff0c 转为到程序更新模块中手动处理 xff0c 这是更新最基本的原理 检查更新 priv
  • 用MATLAB将矩阵数据写入txt文件中,打开乱码原因

    MATLAB将数据写入txt文件中乱码的原因 xff0c 是将数据按照二进制文件写入txt文件 xff0c 所以打开会出现乱码的情况 xff0c 只需要把 fid1 61 fopen 39 piture txt 39 39 w 39 换成
  • boost C++知识点(一)

    1 boost总览 xff1a Boost Any Boost Any 提供了一个名为 boost any 的数据类型 xff0c 可以存放任意的类型 例如 xff0c 一个类型为 boost any 的变量可以先存放一个 int 类型的值
  • python 函数里面直接修改函数外部的全局变量

    python函数内部对全局变量进行修改 全局变量为immutable 不可变的 全局变量为mutable 可变的 全局变量为immutable 不可变的 a span class token operator 61 span span cl
  • ubuntu20.04中安装ROS系统

    自从在自己的电脑上安装了ubuntu20 04 43 window10双系统之后 xff0c 为了下一步开展研究 xff0c 所以安装ROS系统 把安装过程记录下来 xff0c 方便以后学习 亲测有效 xff01 xff01 xff01 x
  • Linux编程的第三方库引用------gcc、pkg-config与CMake一文讲解

    众所周知 linux 下库文件编译三部曲 config make makeinstall configure过程中可能会遇到无法找到某些头文件和动态库 xff1b 原因有两个 xff1a xff08 1 xff09 系统没有这些头文件和动态
  • 论文阅读 Global Localization with Object-Level Semantics and Topology

    摘要 全局定位是SLAM的核心要素 基于外观的方法虽然很成功 xff0c 但是在视觉条件随时间变化很大的环境中仍然面临许多开放的挑战 xff0c 随着时间的变化 xff0c 外观会发生巨大的变化 在本文中 xff0c 我们提出了一种集成解决
  • DOCKER VNC

    reference https www bilibili com video av882822967 以及泡泡机器人公众号文章 泡泡机器人创建了docker镜像 xff0c 极大的提升了环境配置的效率 docker 简介 准备 安装dock
  • GTSAM:使用gtsam的C++

    GTSAM 是一个在机器人领域和计算机视觉领域用于平滑 xff08 smoothing xff09 和建图 xff08 mapping xff09 的C 43 43 库 它与g2og2o不同的是 xff0c g2og2o采用稀疏矩阵的方式求
  • ROS - 用POSE展示方向或向量 vector - pose

    昨天想在rviz里用pose表示一个vector xff0c 搞了半天 Pose的属性 xff0c point是起点 xff0c orientation是表示由坐标系原点将 1 0 0 这个向量旋转到想要显示的方向所需的旋转的四元数表示 假
  • 目录导读

    SLAM基础 xff1a SLAM基础 xff1a 计算相机运动 SLAM基础 xff1a 单目初始化问题 SLAM基础 xff1a 计算相机运动 3D 2D SLAM基础 xff1a 计算相机运动 3D 3D SLAM基础 xff1a I
  • 特定标志检测算法流程-棋盘格

    ROS标定工具是采用棋盘格 xff0c 具体实现是OPENCV 将输入图像降采样到大约VGA分辨率 xff0c 并在全尺寸图像中检测校准目标角点 结合这些明显正交的职责作为一个优化 棋盘式检测在大图像上太昂贵 xff0c 所以最好在较小的显

随机推荐

  • 无人驾驶——激光雷达篇

    激光雷达技术简介 无人驾驶技术是多项技术的集成 xff0c 包括传感器 定位与深度学习 高精地图 路径规划 障碍物检测与规避 机械控制 系统集成与优化 能耗与散热管理等 无人车系统的感知端由不同的传感器组成 xff0c 其中包括GPS xf
  • simulink搭建简单的陷波滤波器

    simulink搭建简单的陷波滤波器 陷波滤波器的设计模型的搭建通过matlab自带软件设计的滤波器与simulink自带滤波器模块对比 陷波滤波器的设计 具体设计方法可参见这篇 xff1a 算法学习笔记之50HZ陷波滤波器设计 下面给出各
  • docker——常用指令

    docker pull url 从url拉取容器 docker run d url 后台运行镜像 xff0c 如果不存在该镜像 xff0c 则会自动下载 docker exec it 容器id bash 进入镜像容器 xff0c 容器的id
  • Realsense、kinect在ROS环境下的骨骼识别(基于NuiTrack)

    ps 出售我购买的nuitrack liecense xff0c 支持月付 在弄不明白ROS Kinectic之后的openNI之后终于还是向Nuitrack骨骼识别屈服了 xff1a 那么先看看NuiTrack是啥 xff1a https
  • 深度图像帧差法处理以及CV16UC1深度图像的存储方式

    最近为了拾取桌面上的任务目标 xff0c 采用了实时图像与背景图像相减的方法来进行 xff0c 因为采用彩色图像相减会有影子的干扰 xff0c 所以采用了深度图像 但是深度图像的Mat是CV16UC1格式的 矩阵内部数据采用uint 16格
  • Couldn't find executable named joy_node below /opt/ros/kinetic/share/joy解决方法

    最近想用joy node这个节点 xff0c 然后就通过 sudo apt get install ros kinetic joy 去安装 xff0c 然后运行rosrun joy joy node时候一直错误显示Segmentation
  • ros修改map_server地图发布的map关联的坐标系frame_id(多机器人联合建图用)

    帮师弟做多机器人联合建图的时候 遇到了map的坐标系问题如下 map server发布的 map话题包含了frame坐标系关联 想要正确的让多个机器人共同建图导航需要修改 map话题以及其绑定的frame坐标系 防止机器人之间的相互冲突 下
  • ROS传输图像带宽不够用的解决方法(realsenseD415压缩图像)

    最近在做图像的深度学习识别 xff0c 但是移动机器人上的电脑配置不够 xff0c 只能用我的电脑远程的去处理图像 xff0c 但是遇到了严重的带宽瓶颈 xff0c 按照我的电脑150Mbps的无线网卡来算 xff0c 每秒的极限传输速度就
  • dockerfile配置运行

  • 气压计高度融合—卡尔曼滤波

    实验平台 xff1a 自制飞控板 xff0c STM32F407主控 xff0c 传感器 xff1a MPU6050 MS5611 正文 xff1a 前几天看了这篇文章 xff0c 做了气压计的高度融合 http www zxiazai c
  • GD32F303移植FreeRTOS

    GD32F303移植FreeRTOS 一 移植环境 系统 xff1a WIN7 MDK xff1a keil v5 26 开发板 xff1a GD32F303C EVAL 固件库 xff1a V1 0 2 FreeRTOS版本 xff1a
  • FreeRTOS静态创建任务

    一 静态方式创建任务和删除任务 1 gt 测试环境 系统 xff1a WIN7 MDK xff1a keil v5 26 开发板 xff1a GD32F303C EVAL 固件库 xff1a V1 0 2 FreeRTOS版本 xff1a
  • python实现smote处理正负样本失衡问题

    机器学习中难免遇到正负样本不平衡问题 xff0c 处理办法通常有梁总 xff0c 一 xff1a 过采样 xff0c 增加正样本数据 xff1b 二 xff1a 欠采样 xff0c 减少负样本数据 xff0c 缺点是会丢失一些重要信息 sm
  • echarts 饼图hover效果,饼图中间显示自定义信息

    option 61 tooltip show true trigger 39 item 39 position 39 35 39 39 32 39 backgroundColor 39 implements 39 textStyle col
  • MATLAB在线工具

    在线Matlab工具 xff0c 不用安装matlab了 xff0c 里面的语法几乎和matlab相同 matlab网页版 xff1a 1 octave online http octave online net 2 matlab onli
  • Apache IoTDB下载与安装

    1 中文官方文档 xff1a https iotdb apache org zh 2 下载地址 xff1a https iotdb apache org zh Download 发行版本踩了个小坑 xff1a 1 0 0版本启动时如果作为单
  • 【游戏开发】游戏开发书籍汇总

    1 游戏设计的艺术 2 游戏设计的100个原理 3 我在美国学游戏设计 4 游戏新手村 xff1a 从零开始做游戏 5 Directx游戏开发终极指南 6 Windows游戏编程大师技巧 7 快乐之道 xff1a 游戏设计的黄金法则 人类的
  • 【获奖公布】“我的2016”主题征文活动

    还记得2015的年末 xff0c 2016的新年伊始 xff0c 你给自己定下的目标 xff0c 对自己许下的诺言么 xff1f 时光荏苒 xff0c 一年又在指缝间溜走了 xff0c 离2016的结束还剩十多天 xff0c 在接下来的这十
  • Dockerfile介绍与指令解析

    一 Dockerfile介绍 镜像是容器的基础 xff0c 每次执行docker run的时候都会指定哪个镜像作为容器运行的基础 我们之前的例子都是使用来自docker hub的镜像 xff0c 直接使用这些镜像只能满足一定的需求 xff0
  • Kubernetes快速上手指南,让你所见即所得

    版权声明 xff1a 本文为 ABC实验室 原创文章 xff0c 版权所有 xff0c 侵权必究 xff01 编者语 Kubernetes作为新一代云计算平台 xff0c 自2014年开源以来得到快速发展 xff08 2016年 xff09