k8s+kubeedge+sedna安装全套流程+避坑指南+解决办法 (二)
k8s+kubeedge+sedna安装全套流程+避坑指南+解决办法(二)
五、Sedna安装
以下都是在k8s-master云节点中进行!!!
sedna安装官方文档:https://github.com/kubeedge/sedna/blob/main/docs/setup/install.md
这个文档看似挺简单,实则坑多着呢,我们一一来看。
看要求条件:
kubectl、kubernetes、KubeEdge我们都已安装完成,这里文档还提出并且还需要EdgeMesh在运行,所以先安装EdgeMesh
5.1 前置准备
EdgeMesh安装官方文档:https://edgemesh.netlify.app/zh/guide/#%E4%BE%9D%E8%B5%96%E7%8E%AF%E5%A2%83
根据官方文档描述:
- 步骤1: 去除 K8s master 节点的污点
kubectl taint nodes --all node-role.kubernetes.io/master-
如果 K8s master 节点上没有部署需要被代理的应用,上面的步骤也可以不执行。
- 步骤2: 给 Kubernetes API 服务添加过滤标签
kubectl label services kubernetes service.edgemesh.kubeedge.io/service-proxy-name=""
- 步骤3: 启用 KubeEdge 的边缘 Kube-API 端点服务
请参考文档 边缘 Kube-API 端点 以启用此服务。边缘 Kube-API 端点
5.1.1 配置边缘 Kube-API 端点
步骤1: 在云端,开启 dynamicController 模块,配置完成后,需要重启 cloudcore
vim /etc/kubeedge/config/cloudcore.yaml
modules:
...
dynamicController:
enable: true
...
步骤2: 在边缘节点,打开 metaServer 模块(如果你的 KubeEdge < 1.8.0,还需关闭旧版 edgeMesh 模块),配置完成后,需要重启 edgecore
vim /etc/kubeedge/config/edgecore.yaml
modules:
...
edgeMesh:
enable: false
...
metaManager:
metaServer:
enable: true
...
步骤3: 在边缘节点,配置 clusterDNS 和 clusterDomain,配置完成后,需要重启 edgecore
vim /etc/kubeedge/config/edgecore.yaml
modules:
...
edged:
...
tailoredKubeletConfig:
...
clusterDNS:
- 169.254.96.16
clusterDomain: cluster.local
提示
步骤3的配置是为了边缘应用能够访问到 EdgeMesh 的 DNS 服务,与边缘 Kube-API 端点本身无关,但为了配置的流畅性,还是放在这里说明。
clusterDNS 设置的值 ‘169.254.96.16’ 来自于 commonConfig 中 bridgeDeviceIP 的默认值,正常情况下无需修改,非得修改请保持两者一致。
步骤4: 最后,在边缘节点,测试边缘 Kube-API 端点功能是否正常
curl 127.0.0.1:10550/api/v1/services
{"apiVersion":"v1","items":[{"apiVersion":"v1","kind":"Service","metadata":{"creat.......
注意
如果返回值是空列表,或者响应时长很久(接近 10s)才拿到返回值,说明你的配置可能有误,请仔细检查。
完成上述步骤之后,KubeEdge 的边缘 Kube-API 端点功能就已经开启了,接着继续部署 EdgeMesh 即可。
5.2 安装EdgeMesh
有两种方式安装,一种是Helm 安装,另一种是手动安装,这种会出问题。 推荐使用手动安装,安装方式如下:
- 步骤1: 获取 EdgeMesh
git clone https://github.com/kubeedge/edgemesh.git
cd edgemesh
- 步骤2: 安装 CRDs
kubectl apply -f build/crds/istio/
customresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io created
customresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io created
customresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io created
- 步骤3: 部署 edgemesh-agent
kubectl apply -f build/agent/resources/
serviceaccount/edgemesh-agent created
clusterrole.rbac.authorization.k8s.io/edgemesh-agent created
clusterrolebinding.rbac.authorization.k8s.io/edgemesh-agent created
configmap/edgemesh-agent-cfg created
configmap/edgemesh-agent-psk created
daemonset.apps/edgemesh-agent created
提示
请根据你的 K8s 集群设置 build/agent/resources/04-configmap.yaml 的 relayNodes,并重新生成 PSK 密码。
这里有个提示,我们要修改build/agent/resources/04-configmap.yaml
这个文件,使用以下命令:
cd build/agent/resources
vim 04-configmap.yaml
改成如下图所示:
注意最下面的psk设置,重新另起一个终端,使用以下命令生成psk
openssl rand -base64 32
然后填上去保存,然后重新运行步骤3的部署。
- 步骤4: 检验部署结果
kubectl get all -n kubeedge -o wide
安装成功如下图所示:
5.3 云边协同通信测试
如图所示,为验证我们edgemesh是否安装完成,通信是否正常,最好测试一下通信效果。
跨边云通信 ⭐
处于 edgezone 的 busybox-edge 应用能够访问云上的 tcp-echo-cloud 应用,处于 cloudzone 的 busybox-cloud 应用能够访问边缘的 tcp-echo-edge 应用
测试步骤:
在k8s-master(172.23.70.235)上执行以下命令:
kubectl apply -f examples/cloudzone.yaml
namespace/cloudzone created
deployment.apps/tcp-echo-cloud created
service/tcp-echo-cloud-svc created
deployment.apps/busybox-sleep-cloud created
在kubeedge(172.23.70.34)边缘节点上执行以下命令:
kubectl apply -f examples/edgezone.yaml
namespace/edgezone created
deployment.apps/tcp-echo-edge created
service/tcp-echo-edge-svc created
deployment.apps/busybox-sleep-edge created
这里如果边缘节点没有安装kubectl的话,可能执行失败,
报错提示:cannot stat ‘/etc/kubernetes/admin.conf’: No such file or directory
解决方式:
从k8s-master节点把etc/kubernetes/admin.conf拷贝过来,复制到kubeedge节点。
在k8s-master执行复制文件命令:
scp /etc/kubernetes/admin.conf root@172.23.70.34:/etc/kubernetes/admin.conf
输入密码就能即可。
然后在node节点执行:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
再次验证:
kubectl get pods
如果还不行,那就在node节点再安装以下kubectl,执行如下:
## 配置kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 执行安装
yum -y install --nogpgcheck kubelet-1.23.8 kubeadm-1.23.8 kubectl-1.23.8
# 检查kubectl version
kubectl version
5.3.1 云访问边测试
#执行命令:
BUSYBOX_POD=$(kubectl get all -n cloudzone | grep pod/busybox | awk '{print $1}')
kubectl -n cloudzone exec $BUSYBOX_POD -c busybox -i -t -- sh
telnet tcp-echo-edge-svc.edgezone 2701
Welcome, you are connected to node ke-edge1.
Running on Pod tcp-echo-edge.
In namespace edgezone.
With IP address 172.17.0.2.
Service default.
Hello Edge, I am Cloud.
Hello Edge, I am Cloud.
如图所示:
5.3.2 边访问云测试
$ BUSYBOX_CID=$(docker ps | grep k8s_busybox_busybox-sleep-edge | awk '{print $1}')
$ docker exec -it $BUSYBOX_CID sh
$ telnet tcp-echo-cloud-svc.cloudzone 2701
Welcome, you are connected to node k8s-master.
Running on Pod tcp-echo-cloud.
In namespace cloudzone.
With IP address 10.244.0.8.
Service default.
Hello Cloud, I am Edge.
Hello Cloud, I am Edge.
如图所示:
如果都通,说明没问题,可以继续安装Sedna了,否则,请逐个排查。常见问题及解决办法:全网最全EdgeMesh Q&A手册:https://zhuanlan.zhihu.com/p/585749690
5.4 Sedna安装
官网一键化安装seda(不建议,会出错)
# 不建议使用这种方式安装
curl https://raw.githubusercontent.com/kubeedge/sedna/main/scripts/installation/install.sh | SEDNA_ACTION=create bash -
- 本地安装
下载install.sh文件
wget https://raw.githubusercontent.com/kubeedge/sedna/main/scripts/installation/install.sh
相关的修改
#改名字
mv install.sh offline-install.sh
#修改文件中的一下内容(sh的语法)
1.第28行:TMP_DIR='opt/sedna'
2.第34行:删除 trap "rm -rf '%TMP_DIR'" EXIT
3.第415行:删除 prepare
下载sedna的官网github:https://github.com/kubeedge/sedna/tree/main/build
git clone https://github.com/kubeedge/sedna.git
#将build和文件夹里的内容一块复制到sedna文件夹下:
cd build/ /opt/sedna/
然后,进入/opt/sedna
目录,安装sedna:
#直接进入之前准备好的文件目录运行
SEDNA_ACTION=create bash - offline-install.sh
检查sedna安装状态:
kubectl get pod -n sedna
如果都为running,则安装成功,如此,就可以愉快的玩增量学习、联邦学习案例了。
六、参考资料
- 点赞
- 收藏
- 关注作者
评论(0)