文章目录
- 前言
- 一、安装k8s平台
- 二、部署kubeedge
- 1.部署MetalLB(可选)
- 2.cloud
- 3.edge
- 4. 部署nginx到edge端
- 总结
- 参考
前言
本文主要介绍kubeedge v1.17.0的安装过程
主要环境如下表
应用 | 版本 |
---|---|
centos | 7.0 |
k8s | 1.28.2 |
kubeedge | 1.17.0 |
docker | 24.0.8 |
centos | 7.0 |
一、安装k8s平台
本文主要参考
centos7 部署k8s 1.28.2
K8s集群搭建教程
根据上面的过程部署好k8s平台
注意 k8s版本不一样 部署的要求不一样
如:k8s 1.24以后版本需要装cri-docker等工具
docker安装需要配置阿里云容器镜像加速服务
二、部署kubeedge
1.部署MetalLB(可选)
是支持LoadBalancer的负载均衡器,能够帮助我们映射一个ip地址,直接访问pod的服务
- 修改kube-proxy
将对应的位置修改为如图所示的
kubectl edit configmap -n kube-system kube-proxy
- k8s部署MetalLB
这里部署的版本为0.13.5
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml
- 配置MetalLB
新建两个文件
# advertise.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adver
namespace: metallb-system
spec:
ipAddressPools: # 如果不配置则会通告所有的IP池地址
- ip-pool
# ip-pool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.184.120-192.168.184.140 # 根据虚拟机的ip地址来配置 这些ip地址可以分配给k8s中的服务
kubectl apply -f advertise.yaml
kubectl apply -f ip-pool.yaml
2.cloud
- 下载keadm
进入github搜索kubeedge,下载对应版本
1.17.0下载地址
根据需要部署的平台下载对应的版本
- 解压keadm 并 移动到 /usr/local/bin下 (移动到这个目录下可以再任何目录下执行keadm命令)
tar -zxvf keadm-v1.17.0-linux-amd64.tar.gz
mv keadm-v1.17.0-linux-amd64/keadm/keadm /usr/local/bin
- 初始化cloudcore
# 192.168.184.120 ip-pool中没有被分配的ip地址
keadm init --advertise-address=192.168.184.120 --set iptablesHanager.mode="external"
执行成功结果
- 修改cloudcore的svc
修改服务的暴露方式,让外部可以连接
也可以使用NodePort,但是在初始化edgecore时就需要修改对应的ip映射了,上面初始化advertise-address也需要修改
kubectl edit svc cloudcore -n kubeedge
5. 打标签
因为边缘计算的硬件条件都不好,这里我们需要打上标签,让一些应用不扩展到edge节点上去
这里有三个应用需要打 kube-system kube-flannel metallb-system
将下面命令中的两个位置替换即可
kubectl get daemonset -n kube-system |grep -v NAME |awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n kube-system --type='json' -p='[{"op": "replace","path": "/spec/template/spec/affinity","value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'
3.edge
- cloud获取token
keadm gettoken
- edge端加入
设置token和server方便输入命令
echo $SERVER # 可以查看对应的
#加入到cloudcore中
keadm join --remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cloudcore-ipport=$SERVER --token=$TOKEN --kubeedge-version=1.17.0 --with-mqtt
成功截图如下
注意
-
docker和cri-docker的安装
-
cni网络插件一定要记得安装
下载该文件,上传
source install.sh # 将脚本文件放入环境
install_cni_plugins # 执行安装cni命令
如果下载速度慢,可以在有条件的情况下载好
注释掉 wget
再上传 后执行该方法即可
建议: 这个子网范围 我觉得应该改成k8s再 init 设置的子网范围
4. 部署nginx到edge端
nginx部署的yaml文件
vi nginx-deployment.yaml
#nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-metallb
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeName: k8s-edge # 边缘端的名字 kubectl get node里面的
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
总结
kubeedge 不同版本的部署方法会有不同的地方,k8s也是有需要注意的地方
看官方文档一定要仔细,我edge端没有安装cni网络插件,导致一直无法成功连接
之前看得文档和视频对应的版本都比较老了,edge端不需要安装cni插件也可直接连接成功
参考
centos7 部署k8s 1.28.2
K8s集群搭建教程
kubeedge部署 写的挺详细的
kubeedge v1.17官方文档 官方文档一定要看仔细!!!
b站 kubeedge部署教程