0%

Kubeedge 1.5 部署指南

本文介绍了如何在一台ubuntu18.04和一台装有ubuntu20.04的树莓派4B上部署kubeedge1.5的过程。

其中ubuntu作为cloud节点,树莓派4B作为edge节点。

1. 系统配置

1.1 集群环境

主机名

系统

ip

角色

负载

master-node

ubuntu18.04

10.112.55.6

cloud

k8s、docker、cloudcore

ly-desktop

rapsberry pi 4 +ubuntu20.04

10.112.139.139

edge

docker、edgecore

可以通过sudo hostnamectl set-hostname edge-node-1改一下主机名。但是ly-desktop重启后自动变成了ly-desktop,目前还没发现原因

1.2 关闭防火墙和自启动

1
2
sudo systemctl stop ufw
sudo systemctl disable ufw

1.3 禁用SELinux

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

官网1.3 上说这样能关,但是我的系统上没有这个文件,我就没管它,后面好像也没报错

1.4 关闭系统Swap

在 /etc/fstab 中将swap那一行注释掉

1
2
sed -i 's/.*swap.*/#&/' /etc/fstab
sudo swapoff -a

通过free -m 看到swap的确被关闭了

1.5 安装docker

卸载旧版本

1
sudo apt-get remove docker  docker-engine  docker.io

安装相关软件

1
2
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

增加软件源GPG密钥

1
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add 

添加软件源(unbuntu 是amd、树莓派是arm)

1
2
3
4
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"

安装

1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

docker换源阿里云

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fmrhlw3f.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

1.6 重启

1
sudo reboot

2. cloud节点部署k8s

2.1 安装kubeadm、kubeadm、kubectl

1
2
3
4
5
6
7
8
9
10
sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

2.2 配置内核参数

1
2
3
4
5
6
7
8
9
sudo cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

sysctl --system
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

2.3 初始化master

使用阿里云的镜像,然后使用了非默认的CIDR(与宿主机局域网CIDR不一样)

1
2
sudo kubeadm init --pod-network-cidr 172.16.0.0/16 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

上面的命令执行成功后,会输出一条和kubeadm join相关的命令

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.4 安装calico插件

1
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml

2.5 查看

1
2
kubectl get nodes
kubectl get pods --all-namespaces

2.6 dashboard安装

2.6.1 创建recommended.yaml

在 ~目录下新建 recommended.yaml 文件,复制下面链接的文件进去

https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml

并且将其中部分内容进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#增加直接访问端口
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort #增加
ports:
- port: 443
targetPort: 8443
nodePort: 30008 #增加
selector:
k8s-app: kubernetes-dashboard
2.6.2 创建证书
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mkdir dashboard-certs

cd dashboard-certs/

#创建命名空间
kubectl create namespace kubernetes-dashboard

# 创建key文件
openssl genrsa -out dashboard.key 2048

#证书请求
openssl req -days 36000 -new -out dashboard.csr -key dashboard.key -subj '/CN=dashboard-cert'

#自签证书,可能报错不要管他
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

#创建kubernetes-dashboard-certs对象
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
2.6.3 安装dashboard
1
2
3
4
5
6
7
#安装
kubectl create -f ~/recommended.yaml

#检查结果
kubectl get pods -A -o wide

kubectl get service -n kubernetes-dashboard -o wide

image-20201212195847125

2.6.4 创建dashboard管理员

创建账号

1
vi dashboard-admin.yaml
1
2
3
4
5
6
7
8
# 写入
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: dashboard-admin
namespace: kubernetes-dashboard
1
2
#保存退出后执行
kubectl create -f dashboard-admin.yaml

为用户分配权限

1
vi dashboard-admin-bind-cluster-role.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-bind-cluster-role
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
1
2
#保存退出后执行
kubectl create -f dashboard-admin-bind-cluster-role.yaml
2.6.5 web访问

查看并复制token

1
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')

访问 https://10.112.55.6:30008,输入token即可

image-20201212200934073

3. cloud节点部署cloudcore

3.1 安装golang

下载 https://golang.google.cn/dl/go1.15.6.linux-amd64.tar.gz 并上传到ubuntu上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
tar -zxvf go1.14.4.linux-amd64.tar.gz -C /usr/local 

#配置用户环境
sudo vim /etc/profile
#文件末尾加上
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
#刷新
source /etc/profile
mkdir -p /data/gopath && cd /data/gopath
mkdir -p src pkg bin

#配置root 环境变量
sudo vim /etc/sudoers
#在secure_path中添加
:/usr/local/go/bin:/data/gopath/bin

#检查go环境
go --version
sudo go --version

3.2安装 make、gcc

1
sudo apt-get install make gcc

如果报错显示

1
Depends: *** (= 4:9.3.0-1ubuntu2) but 4:10.2.0-1ubuntu1 is to be installed

可以尝试通过 sudo apt purge *** 然后重新安装

如果sudo apt purge ***不被允许,可以尝试将ubuntu换回原来的国外源,重新安装

3.3 部署cloudcore

3.3.1 下载源码
1
git clone https://gitee.com/ly10208/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
3.3.2 编译keadm
1
2
3
cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=keadm
#若make报错没有权限可以考虑 在前面加上sudo
3.3.3 创建cloud节点
1
./_output/local/bin/keadm init

一般来说如果ubuntu不能科学上网的话,就会提示连接失败。

需要提前去 https://github.com/kubeedge/kubeedge/releases/tag/v1.5.0 下载 kubeedge-v1.5.0-linux-amd64.tar.gz 。

然后将其上传到 /etc/kubeedge/ 路径下

命令行提示什么下载不下来,手动去下载就行,并且上传到ubuntu的指定位置就行,当然需要一台能够科学上网的机器

最后./_output/local/bin/keadm init执行成功,显示如下

1
2
3
4
Kubernetes version verification passed, KubeEdge installation will start...
...
KubeEdge cloudcore is running, For logs visit: /var/log/kubeedge/cloudcore.log
CloudCore started

3.4 查看cloudcore状态

systemctl status cloudcore 查看运行情况

journalctl -u cloudcore -n 100 查看最近100条日志

运行正常即可

3.5 获取token

1
2
3
./_output/local/bin/keadm gettoken
#输出
93fc5ef46596b60019009205bb6c33f98c7eef74f4e3edbfb4bdc29ea8baa71b.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDc3OTU3ODV9.8fIHabQ2jqY4SJL9fziKXYeqwmTY0-F9rPtXyWRFYiE

4. edge节点部署edgecore

4.1. 安装golang

下载 https://golang.google.cn/dl/go1.15.6.linux-armd64.tar.gz 并上传到树莓派上,注意树莓派是arm架构的cpu,需要下载arm版本的压缩包

剩下的和 3.1 一模一样

4.2安装 make、gcc

与3.2一模一样

4.3 部署edgecore

4.3.1 下载源码,并编译

同上

4.3.2 创建edge节点
1
2
cd $GOPATH/src/github.com/kubeedge/kubeedge
./_output/local/bin/keadm join --cloudcore-ipport="10.112.55.6:10000" --edgenode-name="edge-node-1" --token=93fc5ef46596b60019009205bb6c33f98c7eef74f4e3edbfb4bdc29ea8baa71b.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDc3OTU3ODV9.8fIHabQ2jqY4SJL9fziKXYeqwmTY0-F9rPtXyWRFYiE

需要提前去 https://github.com/kubeedge/kubeedge/releases/tag/v1.5.0 下载 kubeedge-v1.5.0-linux-arm64.tar.gz 。下载arm压缩包

然后将其上传到 /etc/kubeedge/ 路径下

依旧如上3.3.3一样缺啥补啥。

4.4 查看edgecore状态

systemctl status edgecore 查看运行情况

journalctl -u edgecore -n 100 查看日志

运行正常即可

5. 配置完成

去cloud节点查看

1
2
3
4
ly@master-node:/$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
edge-node-1 Ready agent,edge 14h v1.19.3-kubeedge-v1.5.0
master-node Ready master 2d17h v1.19.4

可以发现edge-node-1节点已经加入了
在这里插入图片描述
但是edge节点的两个pod都有问题,目前还不知道解决方法,不过似乎不影响使用

6.参考资料

基于Ubuntu 20.04安装Kubernetes 1.18

KubeEdge v1.3部署指南

kubernetes部署dashboard

ubuntu安装docker