(二)使用Keadm进行部署KubeEdge
Keadm用于安装KubeEdge的云端和边缘端组件。它不负责K8s的安装和运行。
请参考 kubernetes-compatibility 了解 Kubernetes 兼容性来确定安装哪个版本的Kubernetes。
1 使用限制
keadm
目前支持 Ubuntu 和 CentOS OS。RaspberryPi的支持正在进行中。- 需要超级用户权限(或root权限)才能运行。
2 设置云端(KubeEdge主节点)
默认情况下边缘节点需要访问cloudcore中 10000
,10002
端口。
keadm init
将安装 cloudcore,生成证书并安装CRD。它还提供了一个命令行参数,通过它可以设置特定的版本。
重要提示:
- 必须正确配置 kubeconfig 或 master 中的至少一个,以便可以将其用于验证k8s集群的版本和其他信息。
- 请确保边缘节点可以使用云节点的本地IP连接云节点,或者需要使用
--advertise-address
标记指定云节点的公共IP 。 --advertise-address
(仅从1.3版本开始可用)是云端公开的地址(将添加到CloudCore证书的SAN中),默认值为本地IP。
举个例子:
# keadm init --advertise-address="THE-EXPOSED-IP"(only work since 1.3 release)
输出:
Kubernetes version verification passed, KubeEdge installation will start...
...
KubeEdge cloudcore is running, For logs visit: /var/log/kubeedge/cloudcore.log
3 设置边缘端(KubeEdge工作节点)
3.1 从云端获取令牌
在云端运行 keadm gettoken
将返回token令牌,该令牌将在加入边缘节点时使用。
# keadm gettoken
27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE
3.2 加入边缘节点
keadm join
将安装 edgecore 和 mqtt。它还提供了一个命令行参数,通过它可以设置特定的版本。
举个例子:
# keadm join --cloudcore-ipport=192.168.20.50:10000 --token=27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE
重要提示:
--cloudcore-ipport
是必填参数。- 加上
--token
会自动为边缘节点生成证书,如果你需要的话。 - 需要保证云和边缘端使用的KubeEdge版本相同。
输出:
Host has mosquit+ already installed and running. Hence skipping the installation steps !!!
...
KubeEdge edgecore is running, For logs visit: /var/log/kubeedge/edgecore.log
3.3 启用 kubectl logs
功能
kubectl logs
必须在使用 metrics-server 之前部署,通过以下操作激活功能:
确保您可以找到 Kubernetes 的
ca.crt
和ca.key
文件。如果您通过kubeadm
安装Kubernetes 集群,这些文件将位于/etc/kubernetes/pki/
目录中。ls /etc/kubernetes/pki/
设置
CLOUDCOREIPS
环境。环境变量设置为指定的 cloudcore 的IP地址,如果您具有高可用的集群,则可以指定VIP(即弹性IP/虚拟IP)。export CLOUDCOREIPS="192.168.0.139"
(警告:建议使用同一 终端 来保持系统工作的持续,在必要时再次键入此命令。)使用以下命令检查环境变量:
echo $CLOUDCOREIPS
在云端节点上为 CloudStream 生成证书,但是,生成的文件不在
/etc/kubeedge/
中,我们需要从GitHub的存储库中拷贝一份。
将用户更改为root:
```shell
sudo su
```
从原始克隆的存储库中拷贝证书:
```shell
cp $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh /etc/kubeedge/
```
将目录更改为kubeedge目录:
```shell
cd /etc/kubeedge/
```
从 **certgen.sh** 生成证书
```bash
/etc/kubeedge/certgen.sh stream
```
需要在主机上设置 iptables。(此命令应该在每个apiserver部署的节点上执行。)(在这种情况下,须在master节点上执行,并由root用户执行此命令。) 在运行每个apiserver的主机上运行以下命令:
注意: 您需要先设置CLOUDCOREIPS变量
iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to $CLOUDCOREIPS:10003
端口10003和10350是 CloudStream 和 Edgecore 的默认端口,如果已发生变更,请使用您自己设置的端口。
如果您不确定是否设置了iptables,并且希望清除所有这些表。(如果您错误地设置了iptables,它将阻止您使用
kubectl logs
功能) 可以使用以下命令清理iptables规则:iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
/etc/kubeedge/config/cloudcore.yaml
和/etc/kubeedge/config/edgecore.yaml
上 cloudcore 和 edgecore 都要 修改。将 cloudStream 和 edgeStream 设置为enable: true
。将服务器IP更改为 cloudcore IP(与 $ CLOUDCOREIPS 相同)。在 cloudcore 中打开 YAML 文件:
sudo nano /etc/kubeedge/config/cloudcore.yaml
在以下文件中修改(
enable: true
)内容:cloudStream:enable: truestreamPort: 10003tlsStreamCAFile: /etc/kubeedge/ca/streamCA.crttlsStreamCertFile: /etc/kubeedge/certs/stream.crttlsStreamPrivateKeyFile: /etc/kubeedge/certs/stream.keytlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crttlsTunnelCertFile: /etc/kubeedge/certs/server.crttlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.keytunnelPort: 10004
在 edgecore 中打开 YAML 文件:
sudo nano /etc/kubeedge/config/edgecore.yaml
修改以下部分中的文件 (
enable: true
), (server: 192.168.0.193:10004
):edgeStream:enable: truehandshakeTimeout: 30readDeadline: 15server: 192.168.0.139:10004tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crttlsTunnelCertFile: /etc/kubeedge/certs/server.crttlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.keywriteDeadline: 15
重新启动所有cloudcore和edgecore。
sudo su
cloudCore:
pkill cloudcore nohup cloudcore > cloudcore.log 2>&1 &
edgeCore:
systemctl restart edgecore.service
如果您无法重启 edgecore,请检查是否是由于
kube-proxy
的缘故,同时杀死这个进程。 kubeedge 默认不纳入该进程,我们使用 edgemesh 来进行替代注意: 可以考虑避免
kube-proxy
部署在edgenode上。有两种解决方法:通过调用
kubectl edit daemonsets.apps -n kube-system kube-proxy
添加以下设置:affinity: nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: node-role.kubernetes.io/edgeoperator: DoesNotExist
如果您仍然要运行
kube-proxy
,请通过在以下位置添加edgecore.service
中的 env 变量来要求 edgecore 不进行检查edgecore.service:sudo vi /etc/kubeedge/edgecore.service
- 将以下行添加到 edgecore.service 文件:
Environment="CHECK_EDGECORE_ENVIRONMENT=false"
- 最终文件应如下所示:
Description=edgecore.service[Service] Type=simple ExecStart=/root/cmd/ke/edgecore --logtostderr=false --log-file=/root/cmd/ke/edgecore.log Environment="CHECK_EDGECORE_ENVIRONMENT=false"[Install] WantedBy=multi-user.target
3.4 在云端支持 Metrics-server
实现该功能点的是重复使用了 cloudstream 和 edgestream 模块。因此,您还需要执行 启用
kubectl logs
功能 的所有步骤。由于边缘节点和云节点的 kubelet 端口不同,故当前版本的 metrics-server(0.3.x)不支持自动端口识别(这是0.4.0功能),因此您现在需要手动编译从master分支拉取的镜像。
Git clone 最新的 metrics server 代码仓:
git clone https://github.com/kubernetes-sigs/metrics-server.git
转到 metrics server 目录:
cd metrics-server
制作 docker 容器:
make container
检查您是否有此 docker 镜像:
docker images
仓库 标签 镜像ID 创建时间 大小 gcr.io/k8s-staging-metrics-serer/ metrics-serer-amd64 6d92704c5a68cd29a7a81bce68e6c2230c7a6912 a24f71249d69 19秒前 57.2MB metrics-server-kubeedge latest aef0fa7a834c 28秒前 57.2MB 确保您使用镜像ID来对镜像标签进行变更,以使其与yaml文件中的镜像名称一致。
docker tag a24f71249d69 metrics-server-kubeedge:latest
部署yaml应用。可以参考相关部署文档:https://github.com/kubernetes-sigs/metrics-server/tree/master/manifests。
注意:下面的那些iptables必须应用在机器上(精确地是网络名称空间,因此metrics-server也需要在主机网络模式下运行)metric-server在其上运行。
注意: 下面的那些iptables必须应用在已运行metric-server 机器上(精确地命名是网络名称空间,因此metrics-server也需要在主机网络模式下运行)
iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to $CLOUDCOREIPS:10003
(引导对metric-data的请求edgecore:10250至在cloudcore和edgecore之间的隧道中,iptables至关重要。)
在部署 metrics-server 之前,必须确保将其部署在已部署apiserver的节点上。在这种情况下,这就是master节点。作为结果,需要通过以下命令使主节点可调度:
kubectl taint nodes --all node-role.kubernetes.io/master-
然后,在 deployment.yaml 文件中,必须指定 metrics-server 部署在主节点上。(选择主机名作为标记的标签。)
在metrics-server-deployment.yaml中
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:#Specify which label in [kubectl get nodes --show-labels] you want to match- key: kubernetes.io/hostnameoperator: Invalues:#Specify the value in key- charlie-latest
重要提示: 1. Metrics-server需要使用主机网络网络模式。
使用您自己编译的镜像,并将 imagePullPolicy 设置为Never。
为 Metrics 服务器启用 –kubelet-use-node-status-port 功能
需要将这些设置写入部署yaml(metrics-server-deployment.yaml)文件中,如下所示:
volumes:# mount in tmp so we can safely use from-scratch images and/or read-only containers- name: tmp-diremptyDir: {}hostNetwork: true #Add this line to enable hostnetwork modecontainers:- name: metrics-serverimage: metrics-server-kubeedge:latest #Make sure that the REPOSITORY and TAG are correct# Modified args to include --kubelet-insecure-tls for Docker Desktop (don't use this flag with a real k8s cluster!!)imagePullPolicy: Never #Make sure that the deployment uses the image you built upargs:- --cert-dir=/tmp- --secure-port=4443- --v=2- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port #Enable the feature of --kubelet-use-node-status-port for Metrics-serverports:- name: main-portcontainerPort: 4443protocol: TCP
4 重置KubeEdge master节点和工作节点
4.1 Master
keadm reset
将停止 cloudcore
并从 Kubernetes master 中删除与KubeEdge相关的资源,如 kubeedge
命名空间。它不会卸载/删除任何先决条件。
它为用户提供了一个标志,以指定kubeconfig路径,默认路径为 /root/.kube/config
。
例子:
# keadm reset --kube-config=$HOME/.kube/config
节点 keadm reset
将停止 edgecore
,并且不会卸载/删除任何先决条件。
(二)使用Keadm进行部署KubeEdge相关推荐
- 修改keadm支持离线部署KubeEdge
1.在线部署时候cloud端需要下载的文件,所以想要离线部署,先提前将这些文件下载好放到固定路径下: 以下5个文件提前下载放到:/etc/kubeedge/下 devices_v1alpha2_dev ...
- 从零开始——在Ubuntu22.04系统中部署KubeEdge架构
**********记录第一次在Ubtunu系统下部署KubeEdge架构的步骤,并为中间遇到的问题进行解答并进行的记录(面向对Ubtunu操作系统命令不熟悉的小白) ************* 以下 ...
- 在线部署kubeedge 1.6详细教程(Ubuntu)
在线部署kubeedge 1.6详细教程(Ubuntu) 基本环境: 操作系统:centos7:Ubuntu: docker:20.10.7 角色 系统 IP master centos7(amd64 ...
- 传统公司部署OpenStack(t版)简易介绍(二)——Keystone组件部署
传统公司部署OpenStack(t版)简易介绍(二)--Keystone组件部署 一.OpenStack组件安装的顺序 二.创建数据库实例和数据库用户(ct控制节点) 三.安装.配置keystone. ...
- 使用InstallShield下部署ASP.NET网站和MySQL,目标机为Win7——(二)使用InstallShield部署非安装版MySQL...
接上一篇文章http://www.cnblogs.com/wigis/archive/2012/12/01/2797505.html 在使用bat批处理可以自动部署MySQL服务端后,我们使用Inst ...
- 架构师实战培训(架构设计+数据后台+快速开发+二次开发+发布部署)
架构师实战培训(架构设计+数据后台+快速开发+二次开发+发布部署)系列视频课程 课程目标 学习MIS系统.高并发系统.单机系统设计思路: 理解设计模式,学会命令模式: 适用人群 CIO.CTO.技术总 ...
- Mininet教程(二):Mininet安装部署
<Mininet教程(一):Mininet基本介绍> <Mininet教程(二):Mininet安装部署> <Mininet教程(三):Mininet命令操作> & ...
- PostgreSQL(一)PostgreSQL一主二从集群部署
(一)基础准备 1.1 创建三台虚拟机 虚拟机名 IP hostname 主从划分 pgpool0 192.168.149.236 node236 主节点 pgpool1 192.168.149.2 ...
- Apache Flink 零基础入门(二十)Flink部署与作业的提交
之前我们都是基于Idea在本地进行开发,这种方式很适合开发以及测试,但是开发完之后,如何提交到服务器中运行? Flink单机部署方式 本地开发和测试过程中非常有用,只要把代码放到服务器直接运行. 前置 ...
最新文章
- tf.matmul() 和tf.multiply() 的区别
- python基础===Python 代码优化常见技巧
- 校园职业社交Handshake获1005万美金A轮融资
- Delphi中methodaddress的代码解析
- 有关数据库MySQL的演讲_有关Mysql数据库编程的文章推荐10篇
- sql(join on 和where的执行顺序
- boost::lexical_cast
- IdentityServer4实战 - JWT Token Issuer 详解
- MySQL视图的应用
- 远程桌面保存密码(凭据)的备份导出
- 《你好,李焕英》总票房逆袭《哪吒》 成中国影史亚军
- java+log4j+是异步吗_log4j2用asyncRoot配置异步日志是如何使用disruptor
- VS2010:把项目由WIN32改为x64
- oracle 9i,10G,11G,各版本下载资源(使用迅雷),收集好久,分享上来!
- 关于 Nim游戏与SG函数 的一点研究
- 【JQuery】两种失焦事件的使用
- c语言中TR1=1什么意思,c – 如何在Visual Studio 2010(tr1 :: function)中使用tr1?
- 高级验证方法学()-Mentor-笔记
- 06 Errors For Go1.13
- 笔记本电脑添加打印机
热门文章
- 小猫爪:PMSM之FOC控制07-有传感器的速度环
- matlab一维矩形积分,玩转matlab之一维 gauss 数值积分公式及matlab源代码
- html实现名字滚动年会抽奖(附源码)
- spring boot 使用 bboss 操作 ES
- [HDSC] 华大Cortex-M离线烧录器(CM PGM)HCTL-1A使用方法记录
- 2010年全球最值得模仿的230个网站
- 关于Floyd算法 和 Dijkstra算法
- IOS应用程序启动显示白屏或黑屏
- 前端白屏问题_首页白屏的引发的思考(一)
- 28岁想入行软件测试,可行吗?