本文主要介绍kubeedge v1.17.0的安装过程
主要环境如下表
应用 | 版本 |
---|---|
centos | 7.0 |
k8s | 1.28.2 |
kubeedge | 1.17.0 |
docker | 24.0.8 |
centos | 7.0 |
本文主要参考
centos7 部署k8s 1.28.2
K8s集群搭建教程
根据上面的过程部署好k8s平台
注意 k8s版本不一样 部署的要求不一样
如:k8s 1.24以后版本需要装cri-docker等工具
docker安装需要配置阿里云容器镜像加速服务
是支持LoadBalancer的负载均衡器,能够帮助我们映射一个ip地址,直接访问pod的服务
kubectl edit configmap -n kube-system kube-proxy
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml
# 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
tar -zxvf keadm-v1.17.0-linux-amd64.tar.gz
mv keadm-v1.17.0-linux-amd64/keadm/keadm /usr/local/bin
# 192.168.184.120 ip-pool中没有被分配的ip地址
keadm init --advertise-address=192.168.184.120 --set iptablesHanager.mode="external"
执行成功结果
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"}]}]}}}}]'
keadm gettoken
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 设置的子网范围
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里面的
hostNetwork: true # 使用主机网络 不使用主机网络,在其它主机无法进行访问 是因为两个cni网络不是同一个吗?
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网络插件,导致一直无法成功连接
nginx部署的时候要使用主机网络,其它主机才可以连接,两个cni网络是不同的吗,k8s集群一个,这个edge端又一个?
之前看得文档和视频对应的版本都比较老了,edge端不需要安装cni插件也可直接连接成功
centos7 部署k8s 1.28.2
K8s集群搭建教程
kubeedge部署 写的挺详细的
kubeedge v1.17官方文档 官方文档一定要看仔细!!!
b站 kubeedge部署教程