龙空技术网

KubeEdge v1.4部署指南(实操)

嗨大帅 90

前言:

现在朋友们对“centos65 防火墙开放端口”大致比较珍视,姐妹们都需要学习一些“centos65 防火墙开放端口”的相关文章。那么小编在网上网罗了一些关于“centos65 防火墙开放端口””的相关知识,希望你们能喜欢,我们快快来学习一下吧!

基于官方文档修改:

KubeEdge 是一个开源系统,可将本机容器化的业务流程和设备管理扩展到Edge上的主机。它基于Kubernetes构建,并为网络,应用程序部署以及云与边缘之间的元数据同步提供核心基础架构支持。它还支持MQTT,并允许开发人员编写自定义逻辑并在Edge上启用资源受限的设备通信。KubeEdge由云部分和边缘部分组成,边缘和云部分现已开源,本文将基于Centos8.0系统对KugeEdge进行编译与部署

一、通用系统配置1.1 集群环境1.2 所有机器停止并禁用开机启动防火墙1.3所有机器永久禁用SELinux1.4所有机器关闭系统Swap(可选,推荐)1.5所有机器添加主机名与IP对应的关系1.6 所有机器安装Docker1.7所有机器配置阿里docker镜像:1.8所有机器重启系统二、cloud节点部署k8s2.1 配置yum源配置阿里源(推荐):配置华为源(2020-11-5日有问题,无法makecache):2.2 安装kubeadm、kubectl、kubelet、ipvsadm2.3 配置内核参数2.4 拉取镜像2.5 配置kubelet(可选)2.6 初始化集群2.7 配置网络插件(可选)2.8 K8s安装dashboard(可选)2.8.1 查询kubernetes的版本,并选择配套dashboard2.8.2解决“虽然登录成功了,怎么跟跳过显示的一样,反复提示无权限”2.8.2部署容器三、KubeEdge的安装与配置kubeedge 组件 3.1 cloud端配置3.1.1 准备工作3.1.2 部署cloudcore3.2 edge端配置3.2.1 从云端获取令牌3.2.2 加入边缘节点3.3 验证四、运行KubeEdge示例4.1 准备工作4.2 创建device model和device4.3 部署云端应用4.3 部署边缘端应用4.4 体验Demo5、附录:5.1 k8s常用命令End~一、通用系统配置1.1 集群环境

主机名

角色

IP

工作负载

说明

ke-cloud

云端

192.168.3.140

k8s、docker、cloudcore

1、首次部署,将云端部署在家里,后续可将云端部署到华为云

2、因为要安装k8s,要求能翻墙

3、先用docker引擎,后续考虑使用podman引擎

4、操作要有root权限

ke-edge1

边缘端

192.168.3.141

docker、edgecore

可安装mqtt

ke-edge2

边缘端

192.168.3.142

docker、edgecore

可安装mqtt

1.2 所有机器停止并禁用开机启动防火墙

注意:CentOS8默认开启防火墙。部署KubeEdge时,需要通过端口进行通信,因此需要配置防火墙测量。端口数量较多,配置比较麻烦,实验环境可以直接关闭防火墙。生产环境还是要老老实实配置防火墙策略。

[root@ke-cloud ~]# systemctl stop firewalld[root@ke-cloud ~]# systemctl disable firewalld 
1.3所有机器永久禁用SELinux

编辑文件/etc/selinux/config,将SELINUX修改为disabled,如下:

[root@ke-cloud ~]# setenforce 0 //临时关闭SELinux,修改文件后,重新引导才能生效,。后面会统一重启。getenforce/sestatus命令可以查看SELinux状态

[root@ke-cloud ~]# sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/selinux/config

[root@ke-cloud ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

注意:

1、关闭SELinux的原因:理论上,你可以设置策略正常运行安装。但Selinux子系统并不知道什么是命名空间,只勉强理解容器。所以,如果你已经运行一个简单操作系统,它带来的附加安全性非常少,换来的却是大量的复杂性,所以大多数人都会选择跳过它更多的关闭SELinux的方法,请参考:

2、/etc/sysconfig/selinux/etc/selinux/config的软连接,sed -i直接修改文件,软链接和硬链接都会收到破坏,导致/etc/sysconfig/selinux变为普通文件。简单起见,直接修改/etc/selinux/config文件即可

1.4所有机器关闭系统Swap(可选,推荐)

Kbernetes 1.8 开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动,如下:

[root@ke-cloud ~]# sed -i 's/.*swap.*/#&/' /etc/fstab 修改后结果:"#/dev/mapper/centos-swap swap swap defaults 0 0"
1.5所有机器添加主机名与IP对应的关系

[root@ke-cloud ~]# vi /etc/hosts ##增加如下内容

192.168.3.140 ke-cloud

192.168.3.141 ke-edge1

192.168.3.142 ke-edge2

修改主机名:ke-cloud(ke-edge1/ke-edge2同样的方法修改):

[root@ke-cloud ~]# hostname

localhost.localdomain

[root@ke-cloud ~]# hostname ke-cloud ##临时生效

[root@ke-cloud ~]# hostnamectl set-hostname ke-cloud ##重启后永久生效

1.6 所有机器安装Docker

[root@ke-cloud ~]# yum remove docker docker-common docker-selinux docker-engine

[root@ke-cloud ~]# yum -y install wget container-selinux

[root@ke-cloud ~]# yum erase runc -y //runC又是opencontainer发布的一款根据OCF 规范批量生成和运行容器的CLI工具

[root@ke-cloud ~]# yum -y install

##注意:上面的步骤在centos7中无须操作

[root@ke-cloud ~]# update-alternatives --set iptables /usr/sbin/iptables-legacy

##yum-utils提供yum的配置管理、device-mapper-persistent-data 与 lvm2 是devicemapper存储驱动所需要的、配置Docker的稳定版本仓库、更新安装包索引

[root@ke-cloud ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo && yum makecache

[root@ke-cloud ~]# yum -y install docker-ce

[root@ke-cloud ~]# systemctl enable docker.service && systemctl start docker

说明:如果想安装指定版本的Docker

[root@ke-cloud ~]# yum -y install docker-ce-18.06.3.ce

1.7所有机器配置阿里docker镜像:

[root@ke-cloud ~]# cat <<EOF > /etc/docker/daemon.json{ "registry-mirrors": [";]}EOF[root@ke-cloud ~]# systemctl daemon-reload    ##下一步是重启系统,这一个可以省略[root@ke-cloud ~]# systemctl restart docker   ##下一步是重启系统,这一个可以省略
1.8所有机器重启系统
# reboot
二、cloud节点部署k8s

K8s架构如下,可做参考

Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。

Master Node:作为控制节点,对集群进行调度管理;Master Node由API Server、Scheduler、Cluster State Store和Controller-Manger Server所组成;Worker Node:作为真正的工作节点,运行业务应用的容器;Worker Node包含kubelet、kube proxy和Container Runtime;kubectl:用于通过命令行与API Server进行交互,而对Kubernetes进行操作,实现在集群中进行各种资源的增删改查等操作;Add-on:是对Kubernetes核心功能的扩展,例如增加网络和网络策略等能力。repliceation 用于伸缩副本数量endpoint 用于管理网络请求scheduler 调度器2.1 配置yum源配置阿里源(推荐):

[root@ke-cloud ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl= 
配置华为源(2020-11-5日有问题,无法makecache):
[root@ke-cloud ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl= 
2.2 安装kubeadm、kubectl、kubelet、ipvsadm

##kubelet运行在 Cluster 所有节点上,负责启动 Pod 和容器

##kubeadm 用于初始化 Cluster

##kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

[root@ke-cloud ~]# yum makecache[root@ke-cloud ~]# yum install -y kubelet kubeadm kubectl ipvsadm   [root@ke-cloud ~]# systemctl enable kubelet ##说明:如果想安装指定版本的kubeadm [root@ke-cloud ~]# yum install kubelet-1.17.0-0.x86_64 kubeadm-1.17.0-0.x86_64 kubectl-1.17.0-0.x86_64 
2.3 配置内核参数
[root@ke-cloud ~]# cat <<EOF >  /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1vm.swappiness=0EOF[root@ke-cloud ~]# sysctl --system[root@ke-cloud ~]# echo "1" > /proc/sys/net/ipv4/ip_forward ##开启IP转发功能[root@ke-cloud ~]# modprobe br_netfilter[root@ke-cloud ~]# sysctl -p /etc/sysctl.d/k8s.conf加载ipvs相关内核模块如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)[root@ke-cloud ~]# modprobe ip_vs[root@ke-cloud ~]# modprobe ip_vs_rr[root@ke-cloud ~]# modprobe ip_vs_wrr[root@ke-cloud ~]# modprobe ip_vs_sh[root@ke-cloud ~]# modprobe nf_conntrack_ipv4查看是否加载成功[root@ke-cloud ~]# lsmod | grep ip_vs
2.4 拉取镜像

用命令查看版本当前kubeadm对应的k8s组件镜像版本,如下:

[root@ke-cloud ~]# kubeadm config images listW1105 02:19:35.939628 8415 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]k8s.gcr.io/kube-apiserver:v1.19.3k8s.gcr.io/kube-controller-manager:v1.19.3k8s.gcr.io/kube-scheduler:v1.19.3k8s.gcr.io/kube-proxy:v1.19.3k8s.gcr.io/pause:3.2k8s.gcr.io/etcd:3.4.13-0k8s.gcr.io/coredns:1.7.0

使用kubeadm config images pull命令拉取上述镜像,如下:

[root@ke-cloud ~]# kubeadm config images pullW1105 02:19:52.670414 8460 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io][config/images] Pulled k8s.gcr.io/kube-apiserver:v1.19.3[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.19.3[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.19.3[config/images] Pulled k8s.gcr.io/kube-proxy:v1.19.3[config/images] Pulled k8s.gcr.io/pause:3.2[config/images] Pulled k8s.gcr.io/etcd:3.4.13-0[config/images] Pulled k8s.gcr.io/coredns:1.7.0

查看下载下来的镜像,如下:

[root@ke-cloud ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

k8s.gcr.io/kube-proxy v1.19.3 cdef7632a242 3 weeks ago 118MB

k8s.gcr.io/kube-controller-manager v1.19.3 9b60aca1d818 3 weeks ago 111MB

k8s.gcr.io/kube-scheduler v1.19.3 aaefbfa906bd 3 weeks ago 45.7MB

k8s.gcr.io/kube-apiserver v1.19.3 a301be0cd44b 3 weeks ago 119MB

k8s.gcr.io/etcd 3.4.13-0 0369cf4303ff 2 months ago 253MB

k8s.gcr.io/coredns 1.7.0 bfe3a36ebd25 4 months ago 45.2MB

k8s.gcr.io/pause 3.2 80d28bedfe5d 8 months ago 683kB

2.5 配置kubelet(可选)

在cloud端配置kubelet并非必须,主要是为了验证K8s集群的部署是否正确,也可以在云端搭建Dashboard等应用。

获取Docker的cgroups

[root@ke-cloud ~]# DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f4)[root@ke-cloud ~]# echo $DOCKER_CGROUPScgroupfs

配置kubelet的cgroups

[root@ke-cloud ~]# cat >/etc/sysconfig/kubelet<<EOFKUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.1"EOF

启动kubelet

[root@ke-cloud ~]# systemctl daemon-reload[root@ke-cloud ~]# systemctl enable kubelet && systemctl start kubelet

特别说明:在这里使用systemctl status kubelet会发现报错误信息,这个错误在运行kubeadm init 生成CA证书后会被自动解决,此处可先忽略。

2.6 初始化集群

# –image-repository string:    这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们可以将其指定为国内镜像地址:registry.aliyuncs.com/google_containers# –kubernetes-version string:  指定kubenets版本号,默认值是stable-1,会导致从下载最新的版本号,我们可以将其指定为固定版本(如v1.19.1)来跳过网络请求。# –apiserver-advertise-address  指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。# –pod-network-cidr             指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对  –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。# –service-cidr   制定服务网络的范围#  注意:重新初始化得先执行这几步:docker rm -f `docker ps -a -q`;rm -rf /etc/kubernetes/*;rm -rf /var/lib/etcd/;kubeadm reset
使用kubeadm init命令进行集群初始化,初始化完成必须要记录下初始化过程最后的命令,如下图所示:
[root@ke-cloud ~]# kubeadm init --kubernetes-version=v1.19.3 \                      --pod-network-cidr=10.244.0.0/16 \                      --apiserver-advertise-address=192.168.3.140 \                      --ignore-preflight-errors=Swap[init] Using Kubernetes version: v1.19.3...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/configYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:   you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.3.140:6443 --token nc3bos.pui1fqdpog9gduet \    --discovery-token-ca-cert-hash sha256:442f0ea444233aea0fff17291c125c8338fa8f59efc07891e349b86e229a277f

进一步配置kubectl

[root@ke-cloud ~]# rm -rf $HOME/.kube[root@ke-cloud ~]# mkdir -p $HOME/.kube[root@ke-cloud ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[root@ke-cloud ~]# chown $(id -u):$(id -g) $HOME/.kube/config

查看node节点

[root@ke-cloud ~]# kubectl get node NAME STATUS ROLES AGE VERSION ke-cloud NotReady master 3m3s v1.19.3 
2.7 配置网络插件(可选)

特别说明:版本会经常更新,如果配置成功,就手动去 下载最新版yaml文件

下载flannel插件的yaml文件

[root@ke-cloud ~]# cd ~ && mkdir flannel && cd flannel[root@ke-cloud ~]# kubectl apply -f 说明:部署后会启动容器,需要10s左右的时间,可通过系统查看STATUS

查看

[root@ke-cloud ~]# kubectl get pods -n kube-systemNAME                               READY   STATUS              RESTARTS   AGEcoredns-6955765f44-k65xx           0/1     ContainerCreating   0          12hcoredns-6955765f44-r2q6g           0/1     ContainerCreating   0          12hetcd-ke-cloud                      1/1     Running             0          12hkube-apiserver-ke-cloud            1/1     Running             0          12hkube-controller-manager-ke-cloud   1/1     Running             0          12hkube-flannel-ds-amd64-lrsrh        1/1     Running             0          12hkube-proxy-vr44d                   1/1     Running             0          12hkube-scheduler-ke-cloud            1/1     Running             0          12h等待STATUS都变为Running后,就可以看到Ready状态了[root@ke-cloud ~]# kubectl get nodeNAME       STATUS   ROLES    AGE   VERSIONke-cloud   Ready    master   12h   v1.17.0[root@ke-cloud ~]# kubectl get svcNAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGEkubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   12h

注意:只有网络插件也安装配置完成之后,node才能会显示为ready状态。

2.8 K8s安装dashboard(可选)

参考:

部署K8S集群:

2.8.1 查询kubernetes的版本,并选择配套dashboard

[root@ke-cloud dashboard]# kubelet --version

Kubernetes v1.19.3

从查询,Kubernetes v1.19配套的dashboard为v2.0.4。这里要注意,如果版本不匹配,会踩到“the server could not find the requested resource”的坑

[root@ke-cloud ~]# cd ~/dashboard/ && wget -O kubernetes-dashboard.yaml ##获取匹配的yaml文件

[root@ke-cloud ~]# vi kubernetes-dashboard.yaml ##按照如下方式修改,为了方便访问,修改kubernetes-dashboard的Service定义,指定Service的type类型为NodeType,并指定nodePort端口

kind: Service

apiVersion: v1

metadata:

labels:

k8s-app: kubernetes-dashboard

name: kubernetes-dashboard

namespace: kubernetes-dashboard

spec:

type: NodePort # 改成NodePort

ports:

- port: 443

targetPort: 8443

nodePort: 30140 # 指定nodePort端口,端口必须30000以上

selector:

k8s-app: kubernetes-dashboard

## 注释掉kubernetes-dashboard.yaml 文件中Dashboard Secret的部分,这个账户不使用默认的,要生成自签证书,否则会踩“Kubernetes Dashboard由于自身证书问题导致一些浏览器不能打开,如chrome、Edge”的坑

#apiVersion: v1

#kind: Secret

#metadata:

# labels:

# k8s-app: kubernetes-dashboard

# name: kubernetes-dashboard-certs

# namespace: kubernetes-dashboard

#type: Opaque

2.8.2解决“虽然登录成功了,怎么跟跳过显示的一样,反复提示无权限”

Dashboard默认使用的用户权限非常低,需要提权,一般使用ClusterRole。关于权限、角色、用户的关系,可以Google

[root@ke-cloud ~]# cd ~/dashboard/ && vi account.yml ##按照如下内容,编辑文件

# Create Service Account

apiVersion: v1

kind: ServiceAccount

metadata:

name: admin-user

namespace: kube-system

---

# Create ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: admin-user

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: cluster-admin

subjects:

- kind: ServiceAccount

name: admin-user

namespace: kube-system

[root@ke-cloud ~]# kubectl apply -f account.yml ##绑定高权限账号

2.8.2部署容器

#这里要注意,老版本的namespace为kube-system ,新版本的namespace是:kubernetes-dashboard

[root@ke-cloud ~]# cd ~/dashboard/ && kubectl delete -f kubernetes-dashboard.yaml ##删除之前部署的Dashboard,如果yaml文件被修改无法删除,请使用:""命令,容器名要修改,这个脚本会清除命名空间

[root@ke-cloud ~]# kubectl apply -f kubernetes-dashboard.yaml ##此时部署,会有2个容器,1个ok,另一个一直在创建中,原因是注释掉secret字段后,必须生成自签证书后,才会恢复running

[root@ke-cloud ~]# cd ~ && mkdir -p key && cd key && rm * -rf #生成证书

[root@ke-cloud ~]# openssl genrsa -out dashboard.key 2048 ##生成证书请求的key

[root@ke-cloud ~]# openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.3.140' ##生成证书请求,注意修改成ke-cloud的IP

[root@ke-cloud ~]# openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt ##生成自签证书

[root@ke-cloud ~]# kubectl create namespace kubernetes-dashboard && kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard ##删除原有的证书secret

[root@ke-cloud ~]# kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard ##创建与KubernetesDashboard 部署文件中同名的secret

[root@ke-cloud ~]# kubectl get pod -n kubernetes-dashboard ##查看pod(确认dashboard容器的name,下一个命令需要用到)

[root@ke-cloud ~]# kubectl delete pod <kubernetes-dashboard-6ff6454fdc-hcqjm> -n kube-system ##重启POD

[root@ke-cloud ~]# kubectl get pods -n kubernetes-dashboard -o wide ##查看服务被分配到哪个节点上:

通过:访问,即可出现登录界面

[root@ke-cloud ~]# kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep admin) | grep token #获取token

token输入到页面,即可访问

k8s部署完成后,就可以真正开始KubeEdge的配置了

三、KubeEdge的安装与配置

KubeEdge的架构如下:

kubeedge 组件

Edged:一个运行在 edge 节点的 agent 程序,管理边缘的容器化应用程序

EdgeHub:边缘的通信接口模块。这是一个 Web 套接字客户端,负责边缘计算与云服务的交互。包括同步云端资源到边缘端,以及报告边缘端 host 和 device 状态到云端

CloudHub:云端通讯接口模块。一个 Web 套接字服务器,负责监视云端的更改、缓存以及向 EdgeHub 发送消息

EdgeController:管理边缘节点。它是一个扩展的 Kubernetes 控制器,管理边缘节点和 pod 元数据,以便数据可以面向特定的边缘节点

EventBus:使用 MQTT 处理内部边缘通信。MQTT 客户端与 MQTT 服务器(mosquitto)交互,为其他组件提供发布和订阅功能

DeviceTwin:处理设备元数据的设备软件镜像。该模块有助于处理设备状态并将其同步到云上。它还为应用程序提供查询接口,它连接到一个轻量级数据库(SQLite)

MetaManager:管理边缘节点上的元数据。这是 Edged 和 Edgehub 之间的消息处理器。负责在轻量级数据库(SQLite)中存储 / 检索元数据

kubeEdge 包括 cloud 和 edge 部分,在 kubernetes 构建,在 cloud 与 edge 端提供核心的基础支持,比如网络,应用,部署以及元数据的同步等。

安装kubeEdge 需要安装 kubernetes 集群、cloud、edge 部分

cloud side:k8s 、docker、cloudcore.edge side: mqtt(可选)、docker、edgecore.3.1 cloud端配置

cloud端负责编译KubeEdge的相关组件与运行cloudcore。

3.1.1 准备工作

下载golang

[root@ke-cloud ~]# wget [root@ke-cloud ~]# tar -zxvf go1.14.4.linux-amd64.tar.gz -C /usr/local

配置golang环境

[root@ke-cloud ~]# vim /etc/profile文件末尾添加:# golang envexport GOROOT=/usr/local/goexport GOPATH=/data/gopathexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin[root@ke-cloud ~]# source /etc/profile[root@ke-cloud ~]# mkdir -p /data/gopath && cd /data/gopath[root@ke-cloud ~]# mkdir -p src pkg bin

下载KubeEdge源码

[root@ke-cloud ~]# git clone  $GOPATH/src/github.com/kubeedge/kubeedge
3.1.2 部署cloudcore

可以通过本地部署的方式部署KubeEdge(*这需要单独编译cloudcore和edgecore*,部署方式参考:) ,也可以通过keadm的方式部署KubeEdge(部署方式参考:) 。本文选用了在操作上更简单的keadm部署方式。

编译kubeadm

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/kubeedge[root@ke-cloud ~]# make all WHAT=keadm[root@ke-cloud ~]# cp $GOPATH/src/github.com/kubeedge/kubeedge/_output/local/bin/keadm /usr/local/bin说明:编译后的二进制文件在./_output/local/bin下,单独编译cloudcore与edgecore的方式如下:[root@ke-cloud ~]# make all WHAT=cloudcore && make all WHAT=edgecore

创建cloud节点

[root@ke-cloud ~]# keadm init --advertise-address="192.168.1.66"Kubernetes version verification passed, KubeEdge installation will start......KubeEdge cloudcore is running, For logs visit:  /var/log/kubeedge/cloudcore.logCloudCore started
3.2 edge端配置

edge端也可以通过keadm进行配置,可以将cloud端编译生成的二进制可执行文件通过scp命令复制到edge端

3.2.1 从云端获取令牌

在云端运行将返回令牌,该令牌将在加入边缘节点时使用。keadm gettoken

[root@ke-cloud ~]# keadm gettoken50a39bd8c66e42d2dbde1696dab7556bc11cc6c56720ba3c49727331ae2d41d9.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDUwMDE1MzB9.YrOzeIiyVFwHvohLH1sFR6axyYPEwUOu2khTpnEH51Y
3.2.2 加入边缘节点

keadm join将安装edgecore和mqtt。它还提供了一个标志,通过它可以设置特定的版本。

[root@ke-edge1 ~]# keadm join --cloudcore-ipport=192.168.3.140:10000 --token=50a39bd8c66e42d2dbde1696dab7556bc11cc6c56720ba3c49727331ae2d41d9.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDUwMDE1MzB9.YrOzeIiyVFwHvohLH1sFR6axyYPEwUOu2khTpnEH51Y Host has mosquit+ already installed and running. Hence skipping the installation steps !!! ... KubeEdge edgecore is running, For logs visit: /var/log/kubeedge/edgecore.log 

重要的提示: * –cloudcore-ipport 标志是强制性标志。 * 如果要自动为边缘节点应用证书,–token则需要。 * 云和边缘端使用的kubeEdge版本应相同。

3.3 验证

边缘端在启动edgecore后,会与云端的cloudcore进行通信,K8s进而会将边缘端作为一个node纳入K8s的管控

[root@ke-cloud ~]# kubectl get nodeNAME       STATUS   ROLES        AGE   VERSIONke-cloud   Ready    master       13h   v1.17.0ke-edge1   Ready    agent,edge   64s   v1.17.1-kubeedge-v1.3.1[root@ke-cloud ~]# kubectl get pods -n kube-systemNAME                               READY   STATUS    RESTARTS   AGEcoredns-6955765f44-k65xx           1/1     Running   0          13hcoredns-6955765f44-r2q6g           1/1     Running   0          13hetcd-ke-cloud                      1/1     Running   0          13hkube-apiserver-ke-cloud            1/1     Running   0          13hkube-controller-manager-ke-cloud   1/1     Running   0          13hkube-flannel-ds-amd64-fgtdq        0/1     Error     5          5m55skube-flannel-ds-amd64-lrsrh        1/1     Running   0          13hkube-proxy-vr44d                   1/1     Running   0          13hkube-scheduler-ke-cloud            1/1     Running   0          13h说明:如果在K8s集群中配置过flannel网络插件(见2.7),这里由于edge节点没有部署kubelet,所以调度到edge节点上的flannel pod会创建失败。这不影响KubeEdge的使用,可以先忽略这个问题。
四、运行KubeEdge示例

选用示例:KubeEdge Counter Demo 计数器是一个伪设备,用户无需任何额外的物理设备即可运行此演示。计数器在边缘侧运行,用户可以从云侧在Web中对其进行控制,也可以从云侧在Web中获得计数器值。原理图如下:

///待上传照片

详细文档参考:

4.1 准备工作

1)本示例要求KubeEdge版本必须是v1.2.1+

[root@ke-cloud ~]# kubectl get nodeNAME       STATUS   ROLES        AGE   VERSIONke-cloud   Ready    master       13h   v1.17.0ke-edge1   Ready    agent,edge   64s   v1.17.1-kubeedge-v1.3.1说明:本文接下来的验证将使用边缘节点ke-edge1进行,如果你参考本文进行相关验证,后续边缘节点名称的配置需要根据你的实际情况进行更改。

2)下载示例代码:

[root@ke-cloud ~]# git clone  $GOPATH/src/github.com/kubeedge/examples
4.2 创建device model和device

1)创建device model

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds[root@ke-cloud crds~]# kubectl create -f kubeedge-counter-model.yaml

2)创建device

根据你的实际情况修改matchExpressions:

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds[root@ke-cloud crds~]# vim kubeedge-counter-instance.yamlapiVersion: devices.kubeedge.io/v1alpha1kind: Devicemetadata:  name: counter  labels:    description: 'counter'    manufacturer: 'test'spec:  deviceModelRef:    name: counter-model  nodeSelector:    nodeSelectorTerms:    - matchExpressions:      - key: 'kubernetes.io/hostname'        operator: In        values:        - ke-edge1status:  twins:    - propertyName: status      desired:        metadata:          type: string        value: 'OFF'      reported:        metadata:          type: string        value: '0'[root@ke-cloud crds~]# kubectl create -f kubeedge-counter-instance.yaml
4.3 部署云端应用

1)修改代码

云端应用web-controller-app用来控制边缘端的pi-counter-app应用,该程序默认监听的端口号为80,此处修改为8089,如下所示:

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app[root@ke-cloud web-controller-app~]# vim main.gopackage mainimport (        "github.com/astaxie/beego"        "github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app/controller")func main() {        beego.Router("/", new(controllers.TrackController), "get:Index")        beego.Router("/track/control/:trackId", new(controllers.TrackController), "get,post:ControlTrack")        beego.Run(":8089")}

2)构建镜像

注意:构建镜像时,请将源码拷贝到GOPATH对应的路径下,如果开启了go mod请关闭。

[root@ke-cloud web-controller-app~]# make all[root@ke-cloud web-controller-app~]# make docker

3)部署web-controller-app

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds[root@ke-cloud crds~]# kubectl apply -f kubeedge-web-controller-app.yaml
4.3 部署边缘端应用

边缘端的pi-counter-app应用受云端应用控制,主要与mqtt服务器通信,进行简单的计数功能。

1)修改代码与构建镜像

需要将Makefile中的GOARCH修改为amd64才能运行该容器。

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/counter-mapper[root@ke-cloud counter-mapper~]# vim Makefile.PHONY: all pi-execute-app docker cleanall: pi-execute-apppi-execute-app:        GOARCH=amd64 go build -o pi-counter-app main.godocker:        docker build . -t kubeedge/kubeedge-pi-counter:v1.0.0clean:        rm -f pi-counter-app[root@ke-cloud counter-mapper~]# make all[root@ke-cloud counter-mapper~]# make docker

2)部署Pi Counter App

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds[root@ke-cloud crds~]# kubectl apply -f kubeedge-pi-counter-app.yaml说明:为了防止Pod的部署卡在`ContainerCreating`,这里直接通过docker save、scp和docker load命令将镜像发布到边缘端[root@ke-cloud ~]# docker save -o kubeedge-pi-counter.tar kubeedge/kubeedge-pi-counter:v1.0.0[root@ke-cloud ~]# scp kubeedge-pi-counter.tar root@192.168.1.56:/root[root@ke-edge1 ~]# docker load -i kubeedge-pi-counter.tar
4.4 体验Demo

现在,KubeEdge Demo的云端部分和边缘端的部分都已经部署完毕,如下:

[root@ke-cloud ~]# kubectl get pods -o wideNAME                                    READY   STATUS    RESTARTS   AGE     IP             NODE       NOMINATED NODE   READINESS GATESkubeedge-counter-app-758b9b4ffd-f8qjj   1/1     Running   0          26m     192.168.1.66   ke-cloud   <none>           <none>kubeedge-pi-counter-c69698d6-rb4xz      1/1     Running   0          2m      192.168.1.56   ke-edge1   <none>           <none>

我们现在开始测试一下该Demo运行效果:

1)执行ON命令

在web页面上选择ON,并点击Execute,可以在edge节点上通过以下命令查看执行结果:

[root@ke-edge1 ~]# docker logs -f counter-container-id

// 待上传照片

2)查看counter STATUS

在web页面上选择STATUS,并点击Execute,会在Web页面上返回counter当前的status,如下所示:

// 待上传照片

2)执行OFF命令

在web页面上选择OFF,并点击Execute,可以再edge节点上通过以下命令查看执行结果:

[root@ke-edge1 ~]# docker logs -f counter-container-id

// 待上传照片

5、附录:5.1 k8s常用命令

强制删除POD: kubectl get pods | grep Terminating | awk '{print$1}' | xargs kubectl delete pods --grace-period=0 --force

End~

标签: #centos65 防火墙开放端口